/* * BioJava development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public Licence. This should * be distributed with the code. If you do not have a copy, * see: * * http://www.gnu.org/copyleft/lesser.html * * Copyright for this code is held jointly by the individual * authors. These should be listed in @author doc comments. * * For more information on the BioJava project and its aims, * or to join the biojava-l mailing list, visit the home page * at: * * http://www.biojava.org/ * */ package org.biojava.nbio.structure.cluster; import java.io.Serializable; /** * The SubunitClustererParameters specifies the options used for the clustering * of the subunits in structures using the {@link SubunitClusterer}. * * @author Peter Rose * @author Aleix Lafita * @since 5.0.0 * */ public class SubunitClustererParameters implements Serializable { private static final long serialVersionUID = 1L; private int minimumSequenceLength = 20; private int absoluteMinimumSequenceLength = 5; private double minimumSequenceLengthFraction = 0.75; private double sequenceIdentityThreshold = 0.95; private double rmsdThreshold = 3.0; private double coverageThreshold = 0.75; private SubunitClustererMethod clustererMethod = SubunitClustererMethod.STRUCTURE; private boolean internalSymmetry = false; /** * Get the minimum number of residues of a subunits to be considered in the * clusters. * * @return minimumSequenceLength */ public int getMinimumSequenceLength() { return minimumSequenceLength; } /** * Set the minimum number of residues of a subunits to be considered in the * clusters. * * @param minimumSequenceLength */ public void setMinimumSequenceLength(int minimumSequenceLength) { this.minimumSequenceLength = minimumSequenceLength; } /** * If the shortest subunit sequence length is higher or equal the * minimumSequenceLengthFraction times the median subunit sequence length, * then the minimumSequenceLength is set to shortest subunit sequence * length, but not shorter than the absoluteMinimumSequenceLength. * <p> * This adaptive feature allows the consideration of structures mainly * constructed by very short chains, such as collagen (1A3I) * * @return the absoluteMinimumSequenceLength */ public int getAbsoluteMinimumSequenceLength() { return absoluteMinimumSequenceLength; } /** * If the shortest subunit sequence length is higher or equal the * minimumSequenceLengthFraction times the median subunit sequence length, * then the minimumSequenceLength is set to shortest subunit sequence * length, but not shorter than the absoluteMinimumSequenceLength. * <p> * This adaptive feature allows the consideration of structures mainly * constructed by very short chains, such as collagen (1A3I) * * @param absoluteMinimumSequenceLength */ public void setAbsoluteMinimumSequenceLength( int absoluteMinimumSequenceLength) { this.absoluteMinimumSequenceLength = absoluteMinimumSequenceLength; } /** * If the shortest subunit sequence length is higher or equal the * minimumSequenceLengthFraction times the median subunit sequence length, * then the minimumSequenceLength is set to shortest subunit sequence * length, but not shorter than the absoluteMinimumSequenceLength. * <p> * This adaptive feature allows the consideration of structures mainly * constructed by very short chains, such as collagen (1A3I) * * @return the minimumSequenceLengthFraction */ public double getMinimumSequenceLengthFraction() { return minimumSequenceLengthFraction; } /** * If the shortest subunit sequence length is higher or equal the * minimumSequenceLengthFraction times the median subunit sequence length, * then the minimumSequenceLength is set to shortest subunit sequence * length, but not shorter than the absoluteMinimumSequenceLength. * <p> * This adaptive feature allows the consideration of structures mainly * constructed by very short chains, such as collagen (1A3I) * * @param minimumSequenceLengthFraction */ public void setMinimumSequenceLengthFraction( double minimumSequenceLengthFraction) { this.minimumSequenceLengthFraction = minimumSequenceLengthFraction; } /** * Sequence identity threshold to consider for the subunits clustering. * <p> * Two subunits with sequence identity equal or higher than the threshold * will be clustered together. * * @return sequenceIdentityThreshold */ public double getSequenceIdentityThreshold() { return sequenceIdentityThreshold; } /** * Sequence identity threshold to consider for the sequence subunit * clustering. * <p> * Two subunits with sequence identity equal or higher than the threshold * will be clustered together. * * @param sequenceIdentityThreshold */ public void setSequenceIdentityThreshold(double sequenceIdentityThreshold) { this.sequenceIdentityThreshold = sequenceIdentityThreshold; } /** * Structure similarity threshold (measured with RMSD) to consider for the * structural subunit clustering. * * @return rmsdThreshold */ public double getRmsdThreshold() { return rmsdThreshold; } /** * Structure similarity threshold (measured with RMSD) to consider for the * structural subunit clustering. * * @param rmsdThreshold */ public void setRmsdThreshold(double rmsdThreshold) { this.rmsdThreshold = rmsdThreshold; } /** * The minimum coverage of the sequence alignment between two subunits to be * clustered together. * * @return coverageThreshold */ public double getCoverageThreshold() { return coverageThreshold; } /** * The minimum coverage of the sequence alignment between two subunits to be * clustered together. * * @param coverageThreshold */ public void setCoverageThreshold(double coverageThreshold) { this.coverageThreshold = coverageThreshold; } /** * Method to cluster subunits. * * @return ChainClustererMethod */ public SubunitClustererMethod getClustererMethod() { return clustererMethod; } /** * Method to cluster subunits. * * @param SubunitClustererMethod */ public void setClustererMethod(SubunitClustererMethod method) { this.clustererMethod = method; } /** * The internal symmetry option divides each {@link Subunit} of each * {@link SubunitCluster} into its internally symmetric repeats. * <p> * The {@link SubunitClustererMethod#STRUCTURE} must be chosen to consider * internal symmetry, otherwise this parameter will be ignored. * * @return true if internal symmetry is considered, false otherwise */ public boolean isInternalSymmetry() { return internalSymmetry; } /** * The internal symmetry option divides each {@link Subunit} of each * {@link SubunitCluster} into its internally symmetric repeats. * <p> * The {@link SubunitClustererMethod#STRUCTURE} must be chosen to consider * internal symmetry, otherwise this parameter will be ignored. * * @param internalSymmetry * true if internal symmetry is considered, false otherwise */ public void setInternalSymmetry(boolean internalSymmetry) { this.internalSymmetry = internalSymmetry; } @Override public String toString() { return "SubunitClustererParameters [minimumSequenceLength=" + minimumSequenceLength + ", absoluteMinimumSequenceLength=" + absoluteMinimumSequenceLength + ", minimumSequenceLengthFraction=" + minimumSequenceLengthFraction + ", sequenceIdentityThreshold=" + sequenceIdentityThreshold + ", rmsdThreshold=" + rmsdThreshold + ", coverageThreshold=" + coverageThreshold + ", clustererMethod=" + clustererMethod + ", internalSymmetry=" + internalSymmetry + "]"; } }