本文整理汇总了Python中Bio.SVDSuperimposer.SVDSuperimposer.get_rotran方法的典型用法代码示例。如果您正苦于以下问题:Python SVDSuperimposer.get_rotran方法的具体用法?Python SVDSuperimposer.get_rotran怎么用?Python SVDSuperimposer.get_rotran使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Bio.SVDSuperimposer.SVDSuperimposer
的用法示例。
在下文中一共展示了SVDSuperimposer.get_rotran方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: align_models
# 需要导入模块: from Bio.SVDSuperimposer import SVDSuperimposer [as 别名]
# 或者: from Bio.SVDSuperimposer.SVDSuperimposer import get_rotran [as 别名]
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)
示例2: set_atoms
# 需要导入模块: from Bio.SVDSuperimposer import SVDSuperimposer [as 别名]
# 或者: from Bio.SVDSuperimposer.SVDSuperimposer import get_rotran [as 别名]
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()
示例3: SVDSuperimposer
# 需要导入模块: from Bio.SVDSuperimposer import SVDSuperimposer [as 别名]
# 或者: from Bio.SVDSuperimposer.SVDSuperimposer import get_rotran [as 别名]
[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
y_on_x1 = dot(y, rot) + tran
# same thing
y_on_x2 = sup.get_transformed()
def simple_matrix_print(matrix):
"""Simple string to display a floating point matrix
This should give the same output on multiple systems. This is
needed because a simple "print matrix" uses scientific notation
which varies between platforms.
示例4: run_system
# 需要导入模块: from Bio.SVDSuperimposer import SVDSuperimposer [as 别名]
# 或者: from Bio.SVDSuperimposer.SVDSuperimposer import get_rotran [as 别名]
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
示例5: SVDSuperimposerTest
# 需要导入模块: from Bio.SVDSuperimposer import SVDSuperimposer [as 别名]
# 或者: from Bio.SVDSuperimposer.SVDSuperimposer import get_rotran [as 别名]
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)))