Package org.biojava.nbio.structure
Class Calc
java.lang.Object
org.biojava.nbio.structure.Calc
Utility operations on Atoms, AminoAcids, etc.
 
Currently the coordinates of an Atom are stored as an array of size 3 (double[3]). It would be more powerful to use Point3D from javax.vecmath, but unfortunately this is not a part of standard java installations, since it comes with java3d. So to keep things simple at the moment biojava does not depend on java3d.
- Since:
 - 1.4
 - Version:
 - %I% %G%
 - Author:
 - Andreas Prlic
 
- 
Constructor Summary
Constructors - 
Method Summary
Modifier and TypeMethodDescriptionstatic final Atomadd two atoms ( a + b).static final doubleGets the length of the vector (2-norm)static final doubleGets the angle between two vectorsstatic javax.vecmath.Point3d[]atomsToPoints(Atom[] atoms) Convert an array of atoms into an array of vecmath pointsstatic doublecalcRotationAngleInDegrees(Atom centerPt, Atom targetPt) Calculates the angle from centerPt to targetPt in degrees.static final Atom[]centerAtoms(Atom[] atomSet) Center the atoms at the Centroid.static final Atom[]centerAtoms(Atom[] atomSet, Atom centroid) Center the atoms at the Centroid, if the centroid is already know.static AtomcenterOfMass(Atom[] points) static final AtomcreateVirtualCBAtom(AminoAcid amino) creates a virtual C-beta atom.static final AtomgetCenterVector(Atom[] atomSet) Returns the Vector that needs to be applied to shift a set of atoms to the Centroid.static final AtomgetCenterVector(Atom[] atomSet, Atom centroid) Returns the Vector that needs to be applied to shift a set of atoms to the Centroid, if the centroid is already knownstatic final AtomgetCentroid(Atom[] atomSet) Returns the center of mass of the set of atoms.static final doublegetDistance(Atom a, Atom b) calculate distance between two atoms.static doublegetDistanceFast(Atom a, Atom b) Will calculate the square of distances between two atoms.static final doubleCalculate the phi angle.static final doubleCalculate the psi angle.static MatrixgetRotationMatrix(javax.vecmath.Matrix4d transform) Convert Vecmath transformation into a JAMA rotation matrix.static javax.vecmath.Matrix4dgetTransformation(Matrix rot, Atom trans) Convert JAMA rotation and translation to a Vecmath transformation matrix.static javax.vecmath.Matrix4dgetTransformation(Matrix rot, Matrix trans) Convert JAMA rotation and translation to a Vecmath transformation matrix.static AtomgetTranslationVector(javax.vecmath.Matrix4d transform) Extract the translational vector of a Vecmath transformation.static final double[]Convert a rotation Matrix to Euler angles.static final double[]Gets euler angles for a matrix given in ZYZ convention.static final Atomstatic final booleanisConnected(AminoAcid a, AminoAcid b) Test if two amino acids are connected, i.e.static voidstatic final MatrixmatrixFromEuler(double heading, double attitude, double bank) This conversion uses NASA standard aeroplane conventions as described on page: http://www.euclideanspace.com/maths/geometry/rotations/euler/index.htm Coordinate System: right hand Positive angle: right hand Order of euler angles: heading first, then attitude, then bank.static final voidcalculate structure + Matrix coodinates ...static voidstatic final voidRotate a single Atom aroud a rotation matrix.static final voidRotate an Atom around a Matrix object.static final voidRotate a Group.static final voidRotate a group object.static final voidRotate a structure.static final voidRotate a structure object.static final doublescalarProduct(Atom a, Atom b) Scalar product (dot product).static AtomMultiply elements of a by sstatic AtomPerform linear transformation s*X+B, and store the result in bstatic AtomscaleEquals(Atom a, double s) Multiply elements of a by s (in place)static voidShift an array of atoms at once.static final voidShift a vector.static final voidShift a Group with a vector.static final voidshift a structure with a vector.static final Atomsubtract two atoms ( a - b).static final doubletorsionAngle(Atom a, Atom b, Atom c, Atom d) Calculate the torsion angle, i.e.static voidTransform an array of atoms at once.static final voidTransforms an atom object, given a Matrix4d (i.e.static final voidTransforms a chain object, given a Matrix4d (i.e.static final voidTransforms a group object, given a Matrix4d (i.e.static final voidTransforms a structure object, given a Matrix4d (i.e.static final voidTranslates an atom object, given a Vector3d (i.e.static final voidTranslates a chain object, given a Vector3d (i.e.static final voidTranslates a group object, given a Vector3d (i.e.static final voidTranslates a Structure object, given a Vector3d (i.e.static final AtomunitVector(Atom a) Returns the unit vector of vector a .static final AtomvectorProduct(Atom a, Atom b) Vector product (cross product). 
- 
Constructor Details
- 
Calc
public Calc() 
 - 
 - 
Method Details
- 
getDistance
calculate distance between two atoms.- Parameters:
 a- an Atom objectb- an Atom object- Returns:
 - a double
 
 - 
getDistanceFast
Will calculate the square of distances between two atoms. This will be faster as it will not perform the final square root to get the actual distance. Use this if doing large numbers of distance comparisons - it is marginally faster than getDistance().- Parameters:
 a- an Atom objectb- an Atom object- Returns:
 - a double
 
 - 
invert
 - 
add
add two atoms ( a + b).- Parameters:
 a- an Atom objectb- an Atom object- Returns:
 - an Atom object
 
 - 
subtract
subtract two atoms ( a - b).- Parameters:
 a- an Atom objectb- an Atom object- Returns:
 - n new Atom object representing the difference
 
 - 
vectorProduct
Vector product (cross product).- Parameters:
 a- an Atom objectb- an Atom object- Returns:
 - an Atom object
 
 - 
scalarProduct
Scalar product (dot product).- Parameters:
 a- an Atom objectb- an Atom object- Returns:
 - a double
 
 - 
amount
Gets the length of the vector (2-norm)- Parameters:
 a- an Atom object- Returns:
 - Square root of the sum of the squared elements
 
 - 
angle
Gets the angle between two vectors- Parameters:
 a- an Atom objectb- an Atom object- Returns:
 - Angle between a and b in degrees, in range [0,180]. If either vector has length 0 then angle is not defined and NaN is returned
 
 - 
unitVector
Returns the unit vector of vector a .- Parameters:
 a- an Atom object- Returns:
 - an Atom object
 
 - 
torsionAngle
Calculate the torsion angle, i.e. the angle between the normal vectors of the two plains a-b-c and b-c-d. See http://en.wikipedia.org/wiki/Dihedral_angle- Parameters:
 a- an Atom objectb- an Atom objectc- an Atom objectd- an Atom object- Returns:
 - the torsion angle in degrees, in range +-[0,180]. If either first 3 or last 3 atoms are colinear then torsion angle is not defined and NaN is returned
 
 - 
getPhi
Calculate the phi angle.- Parameters:
 a- an AminoAcid objectb- an AminoAcid object- Returns:
 - a double
 - Throws:
 StructureException- if aminoacids not connected or if any of the 4 needed atoms missing
 - 
getPsi
Calculate the psi angle.- Parameters:
 a- an AminoAcid objectb- an AminoAcid object- Returns:
 - a double
 - Throws:
 StructureException- if aminoacids not connected or if any of the 4 needed atoms missing
 - 
isConnected
Test if two amino acids are connected, i.e. if the distance from C to N < 2.5 Angstrom. If one of the AminoAcids has an atom missing, returns false.- Parameters:
 a- an AminoAcid objectb- an AminoAcid object- Returns:
 - true if ...
 
 - 
rotate
Rotate a single Atom aroud a rotation matrix. The rotation Matrix must be a pre-multiplication 3x3 Matrix. If the matrix is indexed m[row][col], then the matrix will be pre-multiplied (y=atom*M)- Parameters:
 atom- atom to be rotatedm- a rotation matrix represented as a double[3][3] array
 - 
rotate
public static final void rotate(Structure structure, double[][] rotationmatrix) throws StructureException Rotate a structure. The rotation Matrix must be a pre-multiplication Matrix.- Parameters:
 structure- a Structure objectrotationmatrix- an array (3x3) of double representing the rotation matrix.- Throws:
 StructureException- ...
 - 
rotate
Rotate a Group. The rotation Matrix must be a pre-multiplication Matrix.- Parameters:
 group- a group objectrotationmatrix- an array (3x3) of double representing the rotation matrix.- Throws:
 StructureException- ...
 - 
rotate
Rotate an Atom around a Matrix object. The rotation Matrix must be a pre-multiplication Matrix.- Parameters:
 atom- atom to be rotatedm- rotation matrix to be applied to the atom
 - 
rotate
Rotate a group object. The rotation Matrix must be a pre-multiplication Matrix.- Parameters:
 group- a group to be rotatedm- a Matrix object representing the rotation matrix
 - 
rotate
Rotate a structure object. The rotation Matrix must be a pre-multiplication Matrix.- Parameters:
 structure- the structure to be rotatedm- rotation matrix to be applied
 - 
transform
Transform an array of atoms at once. The transformation Matrix must be a post-multiplication Matrix.- Parameters:
 ca- array of Atoms to shiftt- transformation Matrix4d
 - 
transform
Transforms an atom object, given a Matrix4d (i.e. the vecmath library double-precision 4x4 rotation+translation matrix). The transformation Matrix must be a post-multiplication Matrix.- Parameters:
 atom-m-
 - 
transform
Transforms a group object, given a Matrix4d (i.e. the vecmath library double-precision 4x4 rotation+translation matrix). The transformation Matrix must be a post-multiplication Matrix.- Parameters:
 group-m-
 - 
transform
Transforms a structure object, given a Matrix4d (i.e. the vecmath library double-precision 4x4 rotation+translation matrix). The transformation Matrix must be a post-multiplication Matrix.- Parameters:
 structure-m-
 - 
transform
Transforms a chain object, given a Matrix4d (i.e. the vecmath library double-precision 4x4 rotation+translation matrix). The transformation Matrix must be a post-multiplication Matrix.- Parameters:
 chain-m-
 - 
translate
Translates an atom object, given a Vector3d (i.e. the vecmath library double-precision 3-d vector)- Parameters:
 atom-v-
 - 
translate
Translates a group object, given a Vector3d (i.e. the vecmath library double-precision 3-d vector)- Parameters:
 group-v-
 - 
translate
Translates a chain object, given a Vector3d (i.e. the vecmath library double-precision 3-d vector)- Parameters:
 chain-v-
 - 
translate
Translates a Structure object, given a Vector3d (i.e. the vecmath library double-precision 3-d vector)- Parameters:
 structure-v-
 - 
plus
calculate structure + Matrix coodinates ...- Parameters:
 s- the structure to operate onmatrix- a Matrix object
 - 
shift
shift a structure with a vector.- Parameters:
 structure- a Structure objecta- an Atom object representing a shift vector
 - 
shift
Shift a vector.- Parameters:
 a- vector ab- vector b
 - 
shift
Shift a Group with a vector.- Parameters:
 group- a group objecta- an Atom object representing a shift vector
 - 
getCentroid
Returns the center of mass of the set of atoms.- Parameters:
 atomSet- a set of Atoms- Returns:
 - an Atom representing the Centroid of the set of atoms
 
 - 
centerOfMass
 - 
scaleEquals
Multiply elements of a by s (in place)- Parameters:
 a-s-- Returns:
 - the modified a
 
 - 
scale
Multiply elements of a by s- Parameters:
 a-s-- Returns:
 - A new Atom with s*a
 
 - 
scaleAdd
Perform linear transformation s*X+B, and store the result in b- Parameters:
 s- Amount to scale xx- Input coordinateb- Vector to translate (will be modified)- Returns:
 - b, after modification
 
 - 
getCenterVector
Returns the Vector that needs to be applied to shift a set of atoms to the Centroid.- Parameters:
 atomSet- array of Atoms- Returns:
 - the vector needed to shift the set of atoms to its geometric center
 
 - 
getCenterVector
Returns the Vector that needs to be applied to shift a set of atoms to the Centroid, if the centroid is already known- Parameters:
 atomSet- array of Atoms- Returns:
 - the vector needed to shift the set of atoms to its geometric center
 
 - 
centerAtoms
Center the atoms at the Centroid.- Parameters:
 atomSet- a set of Atoms- Returns:
 - an Atom representing the Centroid of the set of atoms
 - Throws:
 StructureException
 - 
centerAtoms
Center the atoms at the Centroid, if the centroid is already know.- Parameters:
 atomSet- a set of Atoms- Returns:
 - an Atom representing the Centroid of the set of atoms
 - Throws:
 StructureException
 - 
createVirtualCBAtom
creates a virtual C-beta atom. this might be needed when working with GLY thanks to Peter Lackner for a python template of this method.- Parameters:
 amino- the amino acid for which a "virtual" CB atom should be calculated- Returns:
 - a "virtual" CB atom
 - Throws:
 StructureException
 - 
getZYZEuler
Gets euler angles for a matrix given in ZYZ convention. (as e.g. used by Jmol)- Parameters:
 m- the rotation matrix- Returns:
 - the euler values for a rotation around Z, Y, Z in degrees...
 
 - 
getXYZEuler
Convert a rotation Matrix to Euler angles. This conversion uses conventions as described on page: http://www.euclideanspace.com/maths/geometry/rotations/euler/index.htm Coordinate System: right hand Positive angle: right hand Order of euler angles: heading first, then attitude, then bank- Parameters:
 m- the rotation matrix- Returns:
 - a array of three doubles containing the three euler angles in radians
 
 - 
matrixFromEuler
This conversion uses NASA standard aeroplane conventions as described on page: http://www.euclideanspace.com/maths/geometry/rotations/euler/index.htm Coordinate System: right hand Positive angle: right hand Order of euler angles: heading first, then attitude, then bank. matrix row column ordering: [m00 m01 m02] [m10 m11 m12] [m20 m21 m22]- Parameters:
 heading- in radiansattitude- in radiansbank- in radians- Returns:
 - the rotation matrix
 
 - 
calcRotationAngleInDegrees
Calculates the angle from centerPt to targetPt in degrees. The return should range from [0,360), rotating CLOCKWISE, 0 and 360 degrees represents NORTH, 90 degrees represents EAST, etc... Assumes all points are in the same coordinate space. If they are not, you will need to call SwingUtilities.convertPointToScreen or equivalent on all arguments before passing them to this function.- Parameters:
 centerPt- Point we are rotating around.targetPt- Point we want to calculate the angle to.- Returns:
 - angle in degrees. This is the angle from centerPt to targetPt.
 
 - 
main
 - 
rotate
 - 
shift
Shift an array of atoms at once.- Parameters:
 ca- array of Atoms to shiftb- reference Atom vector
 - 
getTransformation
Convert JAMA rotation and translation to a Vecmath transformation matrix. Because the JAMA matrix is a pre-multiplication matrix and the Vecmath matrix is a post-multiplication one, the rotation matrix is transposed to ensure that the transformation they produce is the same.- Parameters:
 rot- 3x3 Rotation matrixtrans- 3x1 Translation matrix- Returns:
 - 4x4 transformation matrix
 
 - 
getTransformation
Convert JAMA rotation and translation to a Vecmath transformation matrix. Because the JAMA matrix is a pre-multiplication matrix and the Vecmath matrix is a post-multiplication one, the rotation matrix is transposed to ensure that the transformation they produce is the same.- Parameters:
 rot- 3x3 Rotation matrixtrans- 3x1 translation vector in Atom coordinates- Returns:
 - 4x4 transformation matrix
 
 - 
getRotationMatrix
Convert Vecmath transformation into a JAMA rotation matrix. Because the JAMA matrix is a pre-multiplication matrix and the Vecmath matrix is a post-multiplication one, the rotation matrix is transposed to ensure that the transformation they produce is the same.- Parameters:
 transform- Matrix4d with transposed rotation matrix- Returns:
 
 - 
getTranslationVector
Extract the translational vector of a Vecmath transformation.- Parameters:
 transform- Matrix4d- Returns:
 - Atom shift vector
 
 - 
atomsToPoints
Convert an array of atoms into an array of vecmath points- Parameters:
 atoms- list of atoms- Returns:
 - list of Point3ds storing the x,y,z coordinates of each atom
 
 
 -