Steps for Determining the PDB-to-VIPER Matrix:
Get the program source here, or go to the web tool here.

Find the centroid of the asymmetric unit in the PDB file
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.
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]) +
x = (t[2][1]-t[1][2])/m
y = (t[0][2]-t[2][0])/m
z = (t[1][0]-t[0][1])/m
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.
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
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
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)
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
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.
Multiply the final rotation matrix with the translation vector from step 3 to get the final translation vector.
a + b 2

Main | Data & Analysis | Utilities | Search | Contact Us | Help | Links | Mailing List | Cite VIPERdb | Disclaimer

©1998-2020. TSRI. All rights Reserved.