org.biojava.bio.structure.align.util
public class AlignmentTools extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
static class |
AlignmentTools.IdentityMap<K>
A Map
|
Constructor and Description |
---|
AlignmentTools() |
Modifier and Type | Method and Description |
---|---|
static java.util.Map<java.lang.Integer,java.lang.Integer> |
alignmentAsMap(AFPChain afpChain)
Creates a Map specifying the alignment as a mapping between residue indices
of protein 1 and residue indices of protein 2.
|
static AFPChain |
createAFPChain(Atom[] ca1,
Atom[] ca2,
ResidueNumber[] aligned1,
ResidueNumber[] aligned2)
Fundimentally, an alignment is just a list of aligned residues in each
protein.
|
static java.util.List<java.util.List<java.util.List<java.lang.Integer>>> |
getOptAlnAsList(AFPChain afpChain)
Retrieves the optimum alignment from an AFPChain and returns it as a
java collection.
|
static int |
getSymmetryOrder(AFPChain afpChain,
int maxSymmetry,
float minimumMetricChange)
Guesses the order of symmetry in an alignment
|
static int |
getSymmetryOrder(java.util.Map<java.lang.Integer,java.lang.Integer> alignment,
int maxSymmetry,
float minimumMetricChange)
Helper for
getSymmetryOrder(Map, Map, int, float) with a true
identity function (X->X). |
static int |
getSymmetryOrder(java.util.Map<java.lang.Integer,java.lang.Integer> alignment,
java.util.Map<java.lang.Integer,java.lang.Integer> identity,
int maxSymmetry,
float minimumMetricChange)
Tries to detect symmetry in an alignment.
|
static java.util.Map<java.lang.Integer,java.lang.Integer> |
guessSequentialAlignment(java.util.Map<java.lang.Integer,java.lang.Integer> alignment,
boolean inverseAlignment)
Takes a potentially non-sequential alignment and guesses a sequential
version of it.
|
static boolean |
isSequentialAlignment(AFPChain afpChain,
boolean checkWithinBlocks)
Checks that the alignment given by afpChain is sequential.
|
public static boolean isSequentialAlignment(AFPChain afpChain, boolean checkWithinBlocks)
AFPChain.isSequentialAlignment()
. However, the AFPChain version
relies on the StructureAlignment algorithm correctly setting this
parameter, which is sadly not always the case.afpChain
- An alignmentcheckWithinBlocks
- Indicates whether individual blocks should be
checked for sequentialitypublic static java.util.Map<java.lang.Integer,java.lang.Integer> alignmentAsMap(AFPChain afpChain) throws StructureException
For example,
1234 5678becomes
1->5 2->6 3->7 4->8
afpChain
- An alignmentStructureException
- If afpChain is not one-to-onepublic static int getSymmetryOrder(java.util.Map<java.lang.Integer,java.lang.Integer> alignment, int maxSymmetry, float minimumMetricChange)
getSymmetryOrder(Map, Map, int, float)
with a true
identity function (X->X).
This method should only be used in cases where the two proteins
aligned have identical numbering, as for self-alignments. See
getSymmetryOrder(AFPChain, int, float)
for a way to guess
the sequential correspondence between two proteins.
alignment
- maxSymmetry
- minimumMetricChange
- public static int getSymmetryOrder(java.util.Map<java.lang.Integer,java.lang.Integer> alignment, java.util.Map<java.lang.Integer,java.lang.Integer> identity, int maxSymmetry, float minimumMetricChange)
Conceptually, an alignment is a function f:A->B between two sets of integers. The function may have simple topology (meaning that if two elements of A are close, then their images in B will also be close), or may have more complex topology (such as a circular permutation). This function checks alignment against a reference function identity, which should have simple topology. It then tries to determine the symmetry order of alignment relative to identity, up to a maximum order of maxSymmetry.
Details
Considers the offset (in number of residues) which a residue moves
after undergoing n alternating transforms by alignment and
identity. If n corresponds to the intrinsic order of the alignment,
this will be small. This algorithm tries increasing values of n
and looks for abrupt decreases in the root mean squared offset.
If none are found at n<=maxSymmetry, the alignment is reported as
non-symmetric.
alignment
- The alignment to test for symmetryidentity
- An alignment with simple topology which approximates
the sequential relationship between the two proteins. Should map in the
reverse direction from alignment.maxSymmetry
- Maximum symmetry to consider. High values increase
the calculation time and can lead to overfitting.minimumMetricChange
- Percent decrease in root mean squared offsets
in order to declare symmetry. 0.4f seems to work well for CeSymm.For a simple identity function
public static int getSymmetryOrder(AFPChain afpChain, int maxSymmetry, float minimumMetricChange) throws StructureException
Uses getSymmetryOrder(Map alignment, Map identity, int, float)
to determine the the symmetry order. For the identity alignment, sorts
the aligned residues of each protein sequentially, then defines the ith
residues of each protein to be equivalent.
StructureException
public static java.util.Map<java.lang.Integer,java.lang.Integer> guessSequentialAlignment(java.util.Map<java.lang.Integer,java.lang.Integer> alignment, boolean inverseAlignment)
The results of this method are consistent with what one might expect
from an identity function, and are therefore useful with
getSymmetryOrder(Map, Map identity, int, float)
.
12456789 78912345would result in a map
12456789 12345789
afpChain
- The non-sequential input alignmentinverseAlignment
- If false, map from structure1 to structure2. If
true, generate the inverse of that map.java.lang.IllegalArgumentException
- if the input alignment is not one-to-one.public static java.util.List<java.util.List<java.util.List<java.lang.Integer>>> getOptAlnAsList(AFPChain afpChain)
AFPChain.getOptAln()
, but has the correct size().
List>> aln = getOptAlnAsList(AFPChain afpChain); aln.get(blockNum).get(structureNum={0,1}).get(pos)
afpChain
- public static AFPChain createAFPChain(Atom[] ca1, Atom[] ca2, ResidueNumber[] aligned1, ResidueNumber[] aligned2)
ca1
- CA atoms of the first proteinca2
- CA atoms of the second proteinaligned1
- A list of aligned residues from the first proteinaligned2
- A list of aligned residues from the second protein.
Must be the same length as aligned1.java.lang.IllegalArgumentException
- if aligned1 and aligned2 have different
lengths