Bead model alignment
Here are presented some basics way to use beed-model alignment in FreeSAS as a library. Some abbreviations:
DA = Dummy Atom
DAM = Dummy Atoms Model
NSD = Normalized Spatial Discrepancy
The SASModel class
This class allows to manipulate a DAM and to do some operations on it as it is presented here.
First, the method SASModel.read() can be used to read a pdb file containing data of a DAM :
from freesas.model import SASModel
model1 = SASModel() #create SASModel class object
model1.read("dammif-01.pdb") #read the pdb file
#these 2 lines can be replaced by model1 = SASModel("dammif-01.pdb")
print(model1.header) #print pdb file content
print(model1.atoms) #print dummy atoms coordinates
print(model1.rfactor) #print R-factor of the DAM
Some informations are extracted of the model atoms coordinates:
fineness : average distance between a DA and its first neighbours
radius of gyration
Dmax : DAM diameter, maximal distance between 2 DA of the DAM
center of mass
inertia tensor
canonical parameters : 3 parameters of translation and 3 euler angles, define the transformation to applied to the DAM to put it on its canonical position (center of mass at the origin, inertia axis aligned with coordinates axis)
print(model1.fineness) #print the DAM fineness
print(model1.Rg) #print the DAM radius of gyration
print(model1.Dmax) #print the DAM diameter
model1.centroid() #calculate the DAM center of mass
print(model1.com)
model1.inertiatensor() #calculate the DAM inertiatensor
print(model1.inertensor)
model1.canonical_parameters() #calculate the DAM canonical_parameters
print(model1.can_param)
Other methods of the class for transformations and NSD calculation:
param1 = model1.can_param #parameters for the transformation
symmetry = [1,1,1] #symmetry for the transformation
model1.transform(param1, symmetry)
#return DAM coordinates after the transformation
model2 = SASModel("dammif-02.pdb") #create a second SASModel
model2.canonical_parameters()
atoms1 = model1.atoms
atoms2 = model2.atoms
model1.dist(model2, atoms1, atoms2)#calculate the NSD between models
param2 = model2.can_param
symmetry = [1,1,1]
model1.dist_after_movement(param2, model2, symmetry)
#calculate the NSD, first model on its canonical position, second
#model after a transformation with param2 and symmetry
The AlignModels class
This other class contains lot of tools to align several DAMs, using the SASModel class presented before.
The first thing to do is to select the pdb files you are interested in and to create SASModels corresponding using the method of the class like following :
from freesas.align import AlignModels
inputfiles = ["dammif-01.pdb", "dammif-02.pdb", "dammif-03.pdb", ...]
align = AlignModels(inputfiles) #create the class
align.assign_models() #create the SASModels
print(align.models) #SASModels ready to be aligned
Next, the different NSD between each computed models can be calculated and save as a 2d-array. But first it is necessary to give which models are valid and which ones are not and need to be discarded :
align.validmodels = numpy.ones((len(align.inputfiles)))
#here we keep all models as valid ones
align.makeNSDarray() #create the NSD table
align.plotNSDarray() #display the table as png file
align.find_reference() #select the reference model
align.alignment_reference() #align models with the reference