|
Steps for Determining the PDB-to-VIPER Matrix:Get the program source here, or go to the web tool here.
- 1.
- Find the centroid of the asymmetric unit in the PDB file
- 1a.
- If the capsid has T-number = 3, the reference atom should be shifted slightly towards the 3-fold axis matching the equivalent positive x VIPER 3-fold axis closest to the positive z axis.
- 2.
- Get all of the 60 rotation matrices (BIOMT records) used to generate
the capsid from the PDB file. Each matrix is then decomposed into angle-axis
form using the following equations and taking into account the singularities
for acos at +/- 1
angle = acos((t[0][0]+t[1][1]+t[2][2]-1)/2)
m = -sqrt((t[2][1]-t[1][2])*(t[2][1]-t[1][2]) +
(t[0][2]-t[2][0])*(t[0][2]-t[2][0]) +
(t[1][0]-t[0][1])*(t[1][0]-t[0][1])
x = (t[2][1]-t[1][2])/m
y = (t[0][2]-t[2][0])/m
z = (t[1][0]-t[0][1])/m
- 3.
- Find the translation vector needed to move the center of the complete particle to the origin, by averaging the components of the PDB translation vectors and negating them.
- 4.
- Apply the translation vector from step 3 to the reference atom. Take the axes from step 2 and order them according to their distance to the translated reference atom
- 5.
- Take the two closest axes from the list above with angles of ration 72 or 144 degrees (identifying a 5-fold axis), and 120 degrees (3-fold axis). Find the unit vector representing the plane formed by them, by taking the cross product of the 5-fold and 3-fold and normalizing the result
- 6.
- Find the unit vector representing the plane formed by the VIPER 5-fold and 3-fold axes that are part of the set of axes surrounding the 1/60 VIPER coordinates by taking their cross product and normalizing it.5-fold: (0, .527, .851)3-fold: (.357, 0, .394)
- 7.
- Take the two planes from the steps above and find the angle-axis of rotation from the PDB plane t other VIPER plane the angle = acos(PDB x VIPER) and the axis = PDB x VIPER normalized. Turn this into a rotation matrix, using the following equations:
a = 1-cos(angle), c=cos(angle), s=sin(angle)
t[0][0] = a*x*x+c, t[0][1] = a*x*y-z*s, t[0][2] = a*x*z+y*s
t[1][0] = a*x*y+z*s, t[1][1] = a*y*y+c, t[1][2] = a*y*z-x*s
t[2][0] = a*x*z-y*s, t[2][1] = a*y*z+x*s, t[2][2] = a*z*z+c
- 8.
- Apply the above matrix to the PDB 5-fold axis, and then find the rotation matrix from the PDB 5-fold to the VIPER 5-fold. Multiply the matrix from step 7 with this matrix to get the final rotation matrix.
- 9.
- Multiply the final rotation matrix with the translation vector from step 3 to get the final translation vector.
a
+
b
2
|