本文整理汇总了Python中Bio.SVDSuperimposer.SVDSuperimposer类的典型用法代码示例。如果您正苦于以下问题:Python SVDSuperimposer类的具体用法?Python SVDSuperimposer怎么用?Python SVDSuperimposer使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SVDSuperimposer类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: get_rmsd_to
def get_rmsd_to(self, other_rnamodel, output='', dont_move=False):
"""Calc rmsd P-atom based rmsd to other rna model"""
sup = Bio.PDB.Superimposer()
if dont_move:
# fix http://biopython.org/DIST/docs/api/Bio.PDB.Vector%27.Vector-class.html
coords = array([a.get_vector().get_array() for a in self.atoms])
other_coords = array([a.get_vector().get_array() for a in other_rnamodel.atoms])
s = SVDSuperimposer()
s.set(coords,other_coords)
return s.get_init_rms()
try:
sup.set_atoms(self.atoms, other_rnamodel.atoms)
except:
print(self.fn, len(self.atoms), other_rnamodel.fn, len(other_rnamodel.atoms))
for a,b in zip(self.atoms, other_rnamodel.atoms):
print(a.parent, b.parent)#a.get_full_id(), b.get_full_id())
rms = round(sup.rms, 3)
if output:
io = Bio.PDB.PDBIO()
sup.apply(self.struc.get_atoms())
io.set_structure( self.struc )
io.save("aligned.pdb")
io = Bio.PDB.PDBIO()
sup.apply(other_rnamodel.struc.get_atoms())
io.set_structure( other_rnamodel.struc )
io.save("aligned2.pdb")
return rms
示例2: setUp
def setUp(self):
self.x = array([[51.65, -1.90, 50.07],
[50.40, -1.23, 50.65],
[50.68, -0.04, 51.54],
[50.22, -0.02, 52.85]])
self.y = array([[51.30, -2.99, 46.54],
[51.09, -1.88, 47.58],
[52.36, -1.20, 48.03],
[52.71, -1.18, 49.38]])
self.sup = SVDSuperimposer()
self.sup.set(self.x, self.y)
示例3: __sub__
def __sub__(self, other):
"""
Return rmsd between two fragments.
Example:
>>> rmsd=fragment1-fragment2
@return: rmsd between fragments
@rtype: float
"""
sup=SVDSuperimposer()
sup.set(self.coords_ca, other.coords_ca)
sup.run()
return sup.get_rms()
示例4: computeRMSD
def computeRMSD():
if len(ca_atoms)!=len(ca_atoms_pdb):
print "Error. Length mismatch!", len(ca_atoms), len(ca_atoms_pdb)
exit()
l = len(ca_atoms)
fixed_coord = numpy.zeros((l, 3))
moving_coord = numpy.zeros((l, 3))
for i in range(0, l):
fixed_coord[i] = numpy.array ([ca_atoms_pdb[i][0], ca_atoms_pdb[i][1], ca_atoms_pdb[i][2]])
moving_coord[i] = numpy.array ([ca_atoms[i][0], ca_atoms[i][1], ca_atoms[i][2]])
sup = SVDSuperimposer()
sup.set(fixed_coord, moving_coord)
sup.run()
rms = sup.get_rms()
return rms
示例5: distance_matrix
def distance_matrix(CA):
n_models = CA.shape[0]
distances = np.zeros((n_models, n_models))
sup=SVDSuperimposer()
for i in range(n_models):
model1 = CA[i,:,:]
for j in range(i+1,n_models):
model2 = CA[j,:,:]
sup.set(model1, model2)
sup.run()
rms=sup.get_rms()
distances[i,j] = rms
distances[j,i] = rms
return distances
示例6: set_atoms
def set_atoms(self, fixed, moving):
"""Put (translate/rotate) the atoms in fixed on the atoms in
moving, in such a way that the RMSD is minimized.
@param fixed: list of (fixed) atoms
@param moving: list of (moving) atoms
@type fixed,moving: [L{Atom}, L{Atom},...]
"""
if not len(fixed) == len(moving):
raise PDBException("Fixed and moving atom lists differ in size")
l = len(fixed)
fixed_coord = numpy.zeros((l, 3))
moving_coord = numpy.zeros((l, 3))
for i in range(0, len(fixed)):
fixed_coord[i] = fixed[i].get_coord()
moving_coord[i] = moving[i].get_coord()
sup = SVDSuperimposer()
sup.set(fixed_coord, moving_coord)
sup.run()
self.rms = sup.get_rms()
self.rotran = sup.get_rotran()
示例7: compute_frag_RMSD
def compute_frag_RMSD(res_len):
if len(ca_atoms)!=len(ca_atoms_pdb):
print "Error. Length mismatch! target:frag", len(ca_atoms_pdb), len(ca_atoms)
return 0
l = len(ca_atoms)
N = res_len
if l != N :
print "atom list length mismatches the fragment length!", str(l), str(N)
return 0
fixed_coord = numpy.zeros((l, 3))
moving_coord = numpy.zeros((l, 3))
for i in range(0, l):
fixed_coord[i] = numpy.array ([ca_atoms_pdb[i][0], ca_atoms_pdb[i][1], ca_atoms_pdb[i][2]])
moving_coord[i] = numpy.array ([ca_atoms[i][0], ca_atoms[i][1], ca_atoms[i][2]])
sup = SVDSuperimposer()
sup.set(fixed_coord, moving_coord)
sup.run()
rms = sup.get_rms()
return rms
示例8: sets
from Bio.SVDSuperimposer import SVDSuperimposer
# start with two coordinate sets (Nx3 arrays - Float0)
x = array([[51.65, -1.90, 50.07],
[50.40, -1.23, 50.65],
[50.68, -0.04, 51.54],
[50.22, -0.02, 52.85]], 'f')
y = array([[51.30, -2.99, 46.54],
[51.09, -1.88, 47.58],
[52.36, -1.20, 48.03],
[52.71, -1.18, 49.38]], 'f')
sup = SVDSuperimposer()
# set the coords
# y will be rotated and translated on x
sup.set(x, y)
# do the lsq fit
sup.run()
# get the rmsd
rms = sup.get_rms()
# get rotation (right multiplying!) and the translation
rot, tran = sup.get_rotran()
# rotate y on x manually
示例9: run_system
def run_system(dir):
pdb = os.path.basename(dir).split('_')[0]
org_dir = os.getcwd()
os.chdir(dir)
f_coord = "coord.h5"
f_RMSD = "RMSD.txt"
f_OC = os.path.join("..","..","cmap_coordinates",pdb+'.txt')
if not os.path.exists(f_OC):
print "Missing coordinates for cmap", dir
os.chdir(org_dir)
return dir
if not os.path.exists(f_coord):
print "Missing coordinates, extract_coordinates.py first", dir
os.chdir(org_dir)
return dir
if os.path.exists(f_RMSD) and not _FORCE:
print "RMSD file exists, skipping", dir
os.chdir(org_dir)
return dir
h5 = h5py.File(f_coord,'r')
C = h5["coord"][:]
h5.close()
OC = np.loadtxt(f_OC)
# Move the coordinates to something sensible
#C -= C.mean(axis=0)
#OC -= OC.mean(axis=0)
median_OC = np.median([np.linalg.norm(a-b)
for a,b in zip(OC,OC[1:])])
median_C = np.median([np.linalg.norm(a-b)
for a,b in zip(C[-1],C[-1][1:])])
assert(C[0].shape == OC.shape)
RMSD = []
org_RMSD = []
sup = SVDSuperimposer()
RG = []
OC -= OC.mean(axis=0)
OC_RG = ((np.linalg.norm(OC,axis=1)**2).sum()/len(OC)) ** 0.5
for cx in C:
cx -= cx.mean(axis=0)
rg_cx = ((np.linalg.norm(cx,axis=1)**2).sum()/len(cx)) ** 0.5
RG.append(rg_cx)
sup.set(OC,cx)
sup.run()
RMSD.append(sup.get_rms())
org_RMSD.append(sup.get_init_rms())
rot, tran = sup.get_rotran()
cx = np.dot(cx, rot) + tran
RMSD = np.array(RMSD)
org_RMSD = np.array(org_RMSD)
RG = np.array(RG)
#print dir, RMSD[-20:].mean(), org_RMSD[-20:].mean(),RG[-20:].mean()
print "{} {: 0.4f} {: 0.4f}".format(dir, RMSD[-200:].mean(),
RG[-200:].mean() / OC_RG)
'''
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(OC[:,0],OC[:,1],OC[:,2],'b')
#ax.plot(OC[:,0],OC[:,1],OC[:,2],'k',alpha=0.5)
ax.scatter(cx[:,0],cx[:,1],cx[:,2],color='r')
#ax.plot(cx[:,0],cx[:,1],cx[:,2],'k',alpha=0.5)
plt.show()
exit()
print OC
#exit()
'''
np.savetxt(f_RMSD,RMSD)
os.chdir(org_dir)
return dir
示例10: calc_DockQ
#.........这里部分代码省略.........
# Print RMSD:
irms=super_imposer.rms
(chain1,chain2)=chain_sample.keys()
ligand_chain=chain1
receptor_chain=chain2
len1=len(chain_res[chain1])
len2=len(chain_res[chain2])
assert len1!=0, "%s chain has zero length!\n" % chain1
assert len2!=0, "%s chain has zero length!\n" % chain2
class1='ligand'
class2='receptor'
if(len(chain_sample[chain1]) > len(chain_sample[chain2])):
receptor_chain=chain1
ligand_chain=chain2
class1='receptor'
class2='ligand'
#print len1
#print len2
#print chain_sample.keys()
#Set to align on receptor
assert len(chain_ref[receptor_chain])==len(chain_sample[receptor_chain]), "Different number of atoms in native and model receptor (chain %c) %d %d\n" % (receptor_chain,len(chain_ref[receptor_chain]),len(chain_sample[receptor_chain]))
super_imposer.set_atoms(chain_ref[receptor_chain], chain_sample[receptor_chain])
super_imposer.apply(sample_model.get_atoms())
receptor_chain_rms=super_imposer.rms
#print receptor_chain_rms
#print dir(super_imposer)
#print chain1_rms
#Grep out the transformed ligand coords
#print ligand_chain
#print chain_ref[ligand_chain]
#print chain_sample[ligand_chain]
#l1=len(chain_ref[ligand_chain])
#l2=len(chain_sample[ligand_chain])
assert len(chain_ref[ligand_chain])!=0 or len(chain_sample[ligand_chain])!=0, "Zero number of equivalent atoms in native and model ligand (chain %s) %d %d.\nCheck that the residue numbers in model and native is consistent\n" % (ligand_chain,len(chain_ref[ligand_chain]),len(chain_sample[ligand_chain]))
assert len(chain_ref[ligand_chain])==len(chain_sample[ligand_chain]), "Different number of atoms in native and model ligand (chain %c) %d %d\n" % (ligand_chain,len(chain_ref[ligand_chain]),len(chain_sample[ligand_chain]))
coord1=np.array([atom.coord for atom in chain_ref[ligand_chain]])
coord2=np.array([atom.coord for atom in chain_sample[ligand_chain]])
#coord1=np.array([atom.coord for atom in chain_ref[receptor_chain]])
#coord2=np.array([atom.coord for atom in chain_sample[receptor_chain]])
#print len(coord1)
#print len(coord2)
sup=SVDSuperimposer()
Lrms = sup._rms(coord1,coord2) #using the private _rms function which does not superimpose
#super_imposer.set_atoms(chain_ref[ligand_chain], chain_sample[ligand_chain])
#super_imposer.apply(sample_model.get_atoms())
#coord1=np.array([atom.coord for atom in chain_ref[receptor_chain]])
#coord2=np.array([atom.coord for atom in chain_sample[receptor_chain]])
#Rrms= sup._rms(coord1,coord2)
#should give same result as above line
#diff = coord1-coord2
#l = len(diff) #number of atoms
#from math import sqrt
#print sqrt(sum(sum(diff*diff))/l)
#print np.sqrt(np.sum(diff**2)/l)
DockQ=(float(fnat) + 1/(1+(irms/1.5)*(irms/1.5)) + 1/(1+(Lrms/8.5)*(Lrms/8.5)))/3
dict={}
dict['DockQ']=DockQ
dict['irms']=irms
dict['Lrms']=Lrms
dict['fnat']=fnat
dict['nat_correct']=nat_correct
dict['nat_total']=nat_total
dict['fnonnat']=fnonnat
dict['nonnat_count']=nonnat_count
dict['model_total']=model_total
dict['chain1']=chain1
dict['chain2']=chain2
dict['len1']=len1
dict['len2']=len2
dict['class1']=class1
dict['class2']=class2
return dict
示例11: SVDSuperimposerTest
class SVDSuperimposerTest(unittest.TestCase):
def setUp(self):
self.x = array([[51.65, -1.90, 50.07],
[50.40, -1.23, 50.65],
[50.68, -0.04, 51.54],
[50.22, -0.02, 52.85]])
self.y = array([[51.30, -2.99, 46.54],
[51.09, -1.88, 47.58],
[52.36, -1.20, 48.03],
[52.71, -1.18, 49.38]])
self.sup = SVDSuperimposer()
self.sup.set(self.x, self.y)
def test_get_init_rms(self):
x = array([[1.19, 1.28, 1.37],
[1.46, 1.55, 1.64],
[1.73, 1.82, 1.91]])
y = array([[1.91, 1.82, 1.73],
[1.64, 1.55, 1.46],
[1.37, 1.28, 1.19]])
self.sup.set(x, y)
self.assertIsNone(self.sup.init_rms)
init_rms = 0.8049844719
self.assertTrue(
float('%.3f' % self.sup.get_init_rms()), float('%.3f' % init_rms))
def test_oldTest(self):
self.assertTrue(
array_equal(around(self.sup.reference_coords, decimals=3), around(self.x, decimals=3)))
self.assertTrue(
array_equal(around(self.sup.coords, decimals=3), around(self.y, decimals=3)))
self.assertIsNone(self.sup.rot)
self.assertIsNone(self.sup.tran)
self.assertIsNone(self.sup.rms)
self.assertIsNone(self.sup.init_rms)
self.sup.run()
self.assertTrue(
array_equal(around(self.sup.reference_coords, decimals=3), around(self.x, decimals=3)))
self.assertTrue(
array_equal(around(self.sup.coords, decimals=3), around(self.y, decimals=3)))
rot = array([[0.68304983, 0.53664371, 0.49543563],
[-0.52277295, 0.83293229, -0.18147242],
[-0.51005037, -0.13504564, 0.84947707]])
tran = array([38.78608157, -20.65451334, -15.42227366])
self.assertTrue(
array_equal(around(self.sup.rot, decimals=3), around(rot, decimals=3)))
self.assertTrue(
array_equal(around(self.sup.tran, decimals=3), around(tran, decimals=3)))
self.assertIsNone(self.sup.rms)
self.assertIsNone(self.sup.init_rms)
rms = 0.00304266526014
self.assertEqual(
float('%.3f' % self.sup.get_rms()), float('%.3f' % rms))
rot_get, tran_get = self.sup.get_rotran()
self.assertTrue(
array_equal(around(rot_get, decimals=3), around(rot, decimals=3)))
self.assertTrue(
array_equal(around(tran_get, decimals=3), around(tran, decimals=3)))
y_on_x1 = dot(self.y, rot) + tran
y_x_solution = array(
[[5.16518846e+01, -1.90018270e+00, 5.00708397e+01],
[5.03977138e+01, -1.22877050e+00, 5.06488200e+01],
[5.06801788e+01, -4.16095666e-02, 5.15368866e+01],
[5.02202228e+01, -1.94372374e-02, 5.28534537e+01]])
self.assertTrue(
array_equal(around(y_on_x1, decimals=3), around(y_x_solution, decimals=3)))
y_on_x2 = self.sup.get_transformed()
self.assertTrue(
array_equal(around(y_on_x2, decimals=3), around(y_x_solution, decimals=3)))
示例12: align_models
def align_models(CA):
n_models = CA.shape[0]
working_CA = np.copy(CA)
sup=SVDSuperimposer()
ref_model = working_CA[0, :, :]
rms_total = 0
for i_model in range(1, n_models):
sup.set(ref_model, working_CA[i_model])
sup.run()
rms_total += sup.get_rms()**2
working_CA[i_model] = sup.get_transformed()
rms_best = float("inf")
epsilon = 0.001
while rms_best - rms_total > epsilon:
rms_best = rms_total
mean_model = np.mean(working_CA,0)
rms_total = 0
for i_model in range(n_models):
sup.set(mean_model, working_CA[i_model])
sup.run()
rms_total += sup.get_rms()**2
working_CA[i_model] = sup.get_transformed()
transformations = []
for start_model, result_model in zip(CA, working_CA):
sup.set(result_model, start_model)
sup.run()
transformations.append(sup.get_rotran())
return transformations,np.sqrt(rms_total/n_models)