def run(pdb_file_name, n_models, log, eps=1.e-7, output_file_name="ensemble.pdb"): pdb_inp = iotbx.pdb.input(file_name = pdb_file_name) pdb_hierarchy = pdb_inp.construct_hierarchy() xrs = pdb_hierarchy.extract_xray_structure( crystal_symmetry=pdb_inp.crystal_symmetry_from_cryst1()) tls_extract = mmtbx.tls.tools.tls_from_pdb_inp( remark_3_records = pdb_inp.extract_remark_iii_records(3), pdb_hierarchy = pdb_hierarchy) tlso = tls_extract.tls_params if(len(tlso)!=1): raise Sorry("Only one TLS group per PDB is currently supported.") tlso = tlso[0] # XXX one group only deg_to_rad_scale = math.pi/180 # Units: T[A], L[deg**2], S[A*deg] T = matrix.sym(sym_mat3=tlso.t) L = matrix.sym(sym_mat3=tlso.l)*(deg_to_rad_scale**2) S = matrix.sqr(tlso.s)*deg_to_rad_scale # sanity check if(not adptbx.is_positive_definite(tlso.t, eps)): raise Sorry("T matrix is not positive definite.") if(not adptbx.is_positive_definite(tlso.l, eps)): raise Sorry("L matrix is not positive definite.") r = analysis.run(T=T, L=L, S=S, log=log) ensemble_generator( decompose_tls_object = r, pdb_hierarchy = pdb_hierarchy, xray_structure = xrs, n_models = n_models, log = log).write_pdb_file(file_name=output_file_name)
def run(): for fn in files: try: fn_ = libtbx.env.find_in_repositories( relative_path="mmtbx/regression/tls/data_tls_analysis/%s" % fn, test=os.path.isfile) of = open("phenix_" + fn, "w") T, L, S = extract(fn_) # test python implementation r = analysis.run(T=T, L=L, S=S, log=of, implementation='python') # test c++ implementation r2 = analysis.run(T=T, L=L, S=S, log=of, implementation='c++') # test equivalence assert approx_equal(r.result.dx, r2.result.dx, 1e-4) assert approx_equal(r.result.dy, r2.result.dy, 1e-4) assert approx_equal(r.result.dz, r2.result.dz, 1e-4) assert approx_equal(r.result.l_x, r2.result.l_x, 1e-4) assert approx_equal(r.result.l_y, r2.result.l_y, 1e-4) assert approx_equal(r.result.l_z, r2.result.l_z, 1e-4) assert approx_equal(r.result.sx, r2.result.sx, 1e-4) assert approx_equal(r.result.sy, r2.result.sy, 1e-4) assert approx_equal(r.result.sz, r2.result.sz, 1e-4) assert approx_equal(r.result.tx, r2.result.tx, 1e-4) assert approx_equal(r.result.ty, r2.result.ty, 1e-4) assert approx_equal(r.result.tz, r2.result.tz, 1e-4) assert approx_equal(r.result.v_x, r2.result.v_x, 1e-4) assert approx_equal(r.result.v_x_M, r2.result.v_x_M, 1e-4) assert approx_equal(r.result.v_y, r2.result.v_y, 1e-4) assert approx_equal(r.result.v_y_M, r2.result.v_y_M, 1e-4) assert approx_equal(r.result.v_z, r2.result.v_z, 1e-4) assert approx_equal(r.result.v_z_M, r2.result.v_z_M, 1e-4) assert approx_equal(r.result.w_L_lx, r2.result.w_L_lx, 1e-4) assert approx_equal(r.result.w_L_ly, r2.result.w_L_ly, 1e-4) assert approx_equal(r.result.w_L_lz, r2.result.w_L_lz, 1e-4) assert approx_equal(r.result.w_M_lx, r2.result.w_M_lx, 1e-4) assert approx_equal(r.result.w_M_ly, r2.result.w_M_ly, 1e-4) assert approx_equal(r.result.w_M_lz, r2.result.w_M_lz, 1e-4) of.close() print fn, "OK" except Exception, e: print fn, str(e)
def exercise_00(pdb_str, formula): """ TLS group 6 of 4muy. """ pdb_inp = iotbx.pdb.input(source_info=None, lines = pdb_str) pdb_hierarchy = pdb_inp.construct_hierarchy() asc = pdb_hierarchy.atom_selection_cache() cs = pdb_inp.crystal_symmetry_from_cryst1() tls_extract = mmtbx.tls.tools.tls_from_pdb_inp( remark_3_records = pdb_inp.extract_remark_iii_records(3), pdb_hierarchy = pdb_hierarchy) # deg_to_rad_scale = math.pi/180 tls_params_one_group = tls_extract.tls_params[0] T = matrix.sym(sym_mat3=tls_params_one_group.t) L = matrix.sym(sym_mat3=tls_params_one_group.l) S = matrix.sqr(tls_params_one_group.s) origin = tls_params_one_group.origin tlso = tools.tlso( t = T.as_sym_mat3(), l = L.as_sym_mat3(), s = S, origin = origin) log = open("analysis.log","w") r = analysis.run(T=T, L=L*(deg_to_rad_scale**2), S=S*deg_to_rad_scale, log=log, find_t_S_using_formula=formula).self_check(show=False) log.close() # rs = flex.double() for trial in xrange(10): o = tools.u_tls_vs_u_ens(pdb_str=pdb_str, dx = r.dx, dy = r.dy, dz = r.dz, sx = r.sx, sy = r.sy, sz = r.sz, lx = r.l_x, ly = r.l_y, lz = r.l_z, tx = r.tx, ty = r.ty, tz = r.tz, vx = r.v_x, vy = r.v_y, vz = r.v_z, w_M_lx = r.w_M_lx, w_M_ly = r.w_M_ly, w_M_lz = r.w_M_lz, origin = origin, n_models = 10000, assert_similarity=False) rs.append(o.r) return flex.mean(rs)
def run(): for fn in files: try: fn_ = libtbx.env.find_in_repositories( relative_path="mmtbx/regression/tls/data_tls_analysis/%s" % fn, test=os.path.isfile) of = open("phenix_" + fn, "w") T, L, S = extract(fn_) r = analysis.run(T=T, L=L, S=S, log=of) of.close() print fn, "OK" except Exception, e: print fn, str(e)
def run(): for fn in files: try: fn_ = libtbx.env.find_in_repositories( relative_path="mmtbx/regression/tls/data_tls_analysis/%s"%fn, test=os.path.isfile) of = open("phenix_"+fn, "w") T, L, S = extract(fn_) r = analysis.run(T=T, L=L, S=S, log=of) of.close() print fn, "OK" except Exception, e: print fn, str(e)
def run(pdb_file_name, n_models, log, output_file_name_prefix, eps=1.e-7): pdb_inp = iotbx.pdb.input(file_name=pdb_file_name) pdb_hierarchy = pdb_inp.construct_hierarchy() asc = pdb_hierarchy.atom_selection_cache() cs = pdb_inp.crystal_symmetry_from_cryst1() tls_extract = mmtbx.tls.tools.tls_from_pdb_inp( remark_3_records=pdb_inp.extract_remark_iii_records(3), pdb_hierarchy=pdb_hierarchy) for i_group, tls_params_one_group in enumerate(tls_extract.tls_params): selection = asc.selection(tls_params_one_group.selection_string) pdb_hierarchy_sel = pdb_hierarchy.select(selection) xrs = pdb_hierarchy_sel.extract_xray_structure(crystal_symmetry=cs) deg_to_rad_scale = math.pi / 180 # Units: T[A], L[deg**2], S[A*deg] T = matrix.sym(sym_mat3=tls_params_one_group.t) L = matrix.sym(sym_mat3=tls_params_one_group.l) S = matrix.sqr(tls_params_one_group.s) origin = tls_params_one_group.origin tlso = tools.tlso(t=T.as_sym_mat3(), l=L.as_sym_mat3(), s=S, origin=origin) # sanity check if (not adptbx.is_positive_definite(tls_params_one_group.t, eps)): raise Sorry("T matrix is not positive definite.") if (not adptbx.is_positive_definite(tls_params_one_group.l, eps)): raise Sorry("L matrix is not positive definite.") r = analysis.run(T=T, L=L * (deg_to_rad_scale**2), S=S * deg_to_rad_scale, log=log).self_check() ensemble_generator_obj = ensemble_generator( tls_from_motions_object=r, pdb_hierarchy=pdb_hierarchy_sel, xray_structure=xrs, n_models=n_models, origin=origin, log=log) ensemble_generator_obj.write_pdb_file( file_name=output_file_name_prefix + "_ensemble_%s.pdb" % str(i_group)) # get U from TLS u_from_tls = tools.uaniso_from_tls_one_group( tlso=tlso, sites_cart=xrs.sites_cart(), zeroize_trace=False) # get U from ensemble pdb_hierarchy_from_tls = pdb_hierarchy_sel.deep_copy() pdb_hierarchy_from_ens = pdb_hierarchy_sel.deep_copy() u_from_ens = tools.u_cart_from_ensemble( models=ensemble_generator_obj.states.root.models()) for i in xrange(xrs.sites_cart().size()): print "atom %d:" % i print " Ucart(from TLS):", ["%8.5f" % u for u in u_from_tls[i]] print " Ucart(from ens):", ["%8.5f" % u for u in u_from_ens[i]] # u1, u2 = u_from_tls.as_double(), u_from_ens.as_double() cc = flex.linear_correlation(x=u1, y=u2).coefficient() r = flex.sum(flex.abs(u1-u2))/\ flex.sum(flex.abs(flex.abs(u1)+flex.abs(u2)))*2 print "%6.4f %6.4f" % (cc, r) # pdb_hierarchy_from_tls.atoms().set_uij(u_from_tls) pdb_hierarchy_from_ens.atoms().set_uij(u_from_ens) pdb_hierarchy_from_tls.write_pdb_file( file_name=output_file_name_prefix + "_u_from_tls_%s.pdb" % str(i_group), crystal_symmetry=cs) pdb_hierarchy_from_ens.write_pdb_file( file_name=output_file_name_prefix + "_u_from_ensemble_%s.pdb" % str(i_group), crystal_symmetry=cs) return ensemble_generator_obj
def run(pdb_file_name, n_models, log, output_file_name_prefix, eps=1.e-7): pdb_inp = iotbx.pdb.input(file_name = pdb_file_name) pdb_hierarchy = pdb_inp.construct_hierarchy() asc = pdb_hierarchy.atom_selection_cache() cs = pdb_inp.crystal_symmetry_from_cryst1() tls_extract = mmtbx.tls.tools.tls_from_pdb_inp( remark_3_records = pdb_inp.extract_remark_iii_records(3), pdb_hierarchy = pdb_hierarchy) for i_group, tls_params_one_group in enumerate(tls_extract.tls_params): selection = asc.selection(tls_params_one_group.selection_string) pdb_hierarchy_sel = pdb_hierarchy.select(selection) xrs = pdb_hierarchy_sel.extract_xray_structure(crystal_symmetry=cs) deg_to_rad_scale = math.pi/180 # Units: T[A], L[deg**2], S[A*deg] T = matrix.sym(sym_mat3=tls_params_one_group.t) L = matrix.sym(sym_mat3=tls_params_one_group.l) S = matrix.sqr(tls_params_one_group.s) origin = tls_params_one_group.origin tlso = tools.tlso( t = T.as_sym_mat3(), l = L.as_sym_mat3(), s = S, origin = origin) # sanity check if(not adptbx.is_positive_definite(tls_params_one_group.t, eps)): raise Sorry("T matrix is not positive definite.") if(not adptbx.is_positive_definite(tls_params_one_group.l, eps)): raise Sorry("L matrix is not positive definite.") r = analysis.run(T=T, L=L*(deg_to_rad_scale**2), S=S*deg_to_rad_scale, log=log).self_check() ensemble_generator_obj = ensemble_generator( tls_from_motions_object = r, pdb_hierarchy = pdb_hierarchy_sel, xray_structure = xrs, n_models = n_models, origin = origin, log = log) ensemble_generator_obj.write_pdb_file( file_name=output_file_name_prefix+"_ensemble_%s.pdb"%str(i_group)) # get U from TLS u_from_tls = tools.uaniso_from_tls_one_group( tlso = tlso, sites_cart = xrs.sites_cart(), zeroize_trace = False) # get U from ensemble pdb_hierarchy_from_tls = pdb_hierarchy_sel.deep_copy() pdb_hierarchy_from_ens = pdb_hierarchy_sel.deep_copy() u_from_ens = tools.u_cart_from_ensemble( models = ensemble_generator_obj.states.root.models()) for i in xrange(xrs.sites_cart().size()): print "atom %d:"%i print " Ucart(from TLS):", ["%8.5f"%u for u in u_from_tls[i]] print " Ucart(from ens):", ["%8.5f"%u for u in u_from_ens[i]] # u1, u2 = u_from_tls.as_double(), u_from_ens.as_double() cc = flex.linear_correlation(x=u1, y=u2).coefficient() r = flex.sum(flex.abs(u1-u2))/\ flex.sum(flex.abs(flex.abs(u1)+flex.abs(u2)))*2 print "%6.4f %6.4f"%(cc, r) # pdb_hierarchy_from_tls.atoms().set_uij(u_from_tls) pdb_hierarchy_from_ens.atoms().set_uij(u_from_ens) pdb_hierarchy_from_tls.write_pdb_file( file_name = output_file_name_prefix+"_u_from_tls_%s.pdb"%str(i_group), crystal_symmetry = cs) pdb_hierarchy_from_ens.write_pdb_file( file_name = output_file_name_prefix+"_u_from_ensemble_%s.pdb"%str(i_group), crystal_symmetry = cs) return ensemble_generator_obj
def u_tls_vs_u_ens( pdb_str, dx=0,dy=0,dz=0, sx=0,sy=0,sz=0, lx=[1,0,0],ly=[0,1,0],lz=[0,0,1], tx=0,ty=0,tz=0, vx=[1,0,0],vy=[0,1,0],vz=[0,0,1], w_M_lx=[0,0,0], w_M_ly=[0,0,0], w_M_lz=[0,0,0], origin=None, n_models=10000, assert_similarity=True): from mmtbx.tls import analysis, tls_as_xyz from scitbx import matrix from libtbx.utils import null_out # print "INPUTS:","-"*73 print "dx :", dx print "dy :", dy print "dz :", dz print "sx :", sx print "sy :", sy print "sz :", sz print "lx :", [i for i in lx] print "ly :", [i for i in ly] print "lz :", [i for i in lz] print "tx :", tx print "ty :", ty print "tz :", tz print "vx :", [i for i in vx] print "vy :", [i for i in vy] print "vz :", [i for i in vz] print "w_M_lx:", [i for i in w_M_lx] print "w_M_ly:", [i for i in w_M_ly] print "w_M_lz:", [i for i in w_M_lz] print "origin:", origin print "-"*79 # #p1 = "dx"+str(dx)+"_"+"dy"+str(dy)+"_"+"dz"+str(dz) #p2 = "sx"+str(sx)+"_"+"sy"+str(sy)+"_"+"sz"+str(sz) #p3 = "lx"+"".join([str(i) for i in lx])+"_"+\ # "ly"+"".join([str(i) for i in ly])+"_"+\ # "lz"+"".join([str(i) for i in lz]) #prefix = "_".join([p1,p2,p3]) prefix="u_tls_vs_u_ens" # pdb_inp = iotbx.pdb.input(source_info=None, lines=pdb_str) xrs = pdb_inp.xray_structure_simple() sites_cart = xrs.sites_cart() xrs.set_sites_cart(sites_cart) ph = pdb_inp.construct_hierarchy() ph.atoms().set_xyz(sites_cart) if(origin is None): origin = sites_cart.mean() # o_tfm = analysis.tls_from_motions( dx=dx,dy=dy,dz=dz, l_x=matrix.col(lx),l_y=matrix.col(ly),l_z=matrix.col(lz), sx=sx,sy=sy,sz=sz, tx=tx,ty=ty,tz=tz, v_x=matrix.col(vx),v_y=matrix.col(vy),v_z=matrix.col(vz), w_M_lx=matrix.col(w_M_lx), w_M_ly=matrix.col(w_M_ly), w_M_lz=matrix.col(w_M_lz)) # u_cart_from_tls = get_u_cart(o_tfm=o_tfm, origin=origin, sites_cart=sites_cart) tlso_ = tlso( t = o_tfm.T_M.as_sym_mat3(), l = o_tfm.L_M.as_sym_mat3(), s = o_tfm.S_M.as_mat3(), origin = origin) if(assert_similarity): T = matrix.sym(sym_mat3=tlso_.t) L = matrix.sym(sym_mat3=tlso_.l) S = matrix.sqr(tlso_.s) o_tfm = analysis.run(T=T, L=L, S=S, log=null_out()).self_check() # r = tls_as_xyz.ensemble_generator( tls_from_motions_object = o_tfm, pdb_hierarchy = ph, xray_structure = xrs, n_models = n_models, origin = origin, log = null_out()) r.write_pdb_file(file_name="%s_ensemble.pdb"%prefix) # xyz_all = [] for m in r.states.root.models(): xyz_all.append(m.atoms().extract_xyz()) # n_atoms = xyz_all[0].size() xyz_atoms_all = [] for i in xrange(n_atoms): xyz_atoms = flex.vec3_double() for xyzs in xyz_all: xyz_atoms.append(xyzs[i]) xyz_atoms_all.append(xyz_atoms) ### u1 = u_cart_from_tls.as_double() u2 = flex.double() for i in xrange(n_atoms): ui=flex.double(u_cart_from_xyz(sites_cart=xyz_atoms_all[i])) u2.extend(ui) r = flex.sum(flex.abs(u1-u2))/\ flex.sum(flex.abs(flex.abs(u1)+flex.abs(u2)))*2 print "R(U_tls,U_ens)=%6.4f"%(r) print "-"*79 ### for i in xrange(n_atoms): print "atom %d:"%i ut=["%8.5f"%u for u in u_cart_from_tls[i]] ue=["%8.5f"%u for u in u_cart_from_xyz(sites_cart=xyz_atoms_all[i])] print " Ucart(from TLS):", ut print " Ucart(from ens):", ue if(assert_similarity): for j in xrange(6): assert approx_equal(abs(float(ut[j])), abs(float(ue[j])), 1.e-3)
def __init__(self, pdb_str, dx=0, dy=0, dz=0, sx=0, sy=0, sz=0, lx=[1, 0, 0], ly=[0, 1, 0], lz=[0, 0, 1], tx=0, ty=0, tz=0, vx=[1, 0, 0], vy=[0, 1, 0], vz=[0, 0, 1], w_M_lx=[0, 0, 0], w_M_ly=[0, 0, 0], w_M_lz=[0, 0, 0], origin=None, n_models=10000, assert_similarity=True, show=False, log=sys.stdout, write_pdb_files=False, smear_eps=0): from mmtbx.tls import analysis, tls_as_xyz from scitbx import matrix from libtbx.utils import null_out if (show): print >> log, "INPUTS:", "-" * 73 print >> log, "dx :", dx print >> log, "dy :", dy print >> log, "dz :", dz print >> log, "sx :", sx print >> log, "sy :", sy print >> log, "sz :", sz print >> log, "lx :", [i for i in lx] print >> log, "ly :", [i for i in ly] print >> log, "lz :", [i for i in lz] print >> log, "tx :", tx print >> log, "ty :", ty print >> log, "tz :", tz print >> log, "vx :", [i for i in vx] print >> log, "vy :", [i for i in vy] print >> log, "vz :", [i for i in vz] print >> log, "w_M_lx:", [i for i in w_M_lx] print >> log, "w_M_ly:", [i for i in w_M_ly] print >> log, "w_M_lz:", [i for i in w_M_lz] print >> log, "origin:", origin print >> log, "-" * 79 # pdb_inp = iotbx.pdb.input(source_info=None, lines=pdb_str) ph = pdb_inp.construct_hierarchy() xrs = ph.extract_xray_structure( crystal_symmetry=pdb_inp.crystal_symmetry()) sites_cart = xrs.sites_cart() ph.atoms().set_xyz(sites_cart) if (origin is None): origin = sites_cart.mean() # o_tfm = analysis.tls_from_motions(dx=dx, dy=dy, dz=dz, l_x=matrix.col(lx), l_y=matrix.col(ly), l_z=matrix.col(lz), sx=sx, sy=sy, sz=sz, tx=tx, ty=ty, tz=tz, v_x=matrix.col(vx), v_y=matrix.col(vy), v_z=matrix.col(vz), w_M_lx=matrix.col(w_M_lx), w_M_ly=matrix.col(w_M_ly), w_M_lz=matrix.col(w_M_lz)) # self.u_cart_tls = get_u_cart(o_tfm=o_tfm, origin=origin, sites_cart=sites_cart) tlso_ = tlso(t=o_tfm.T_M.as_sym_mat3(), l=o_tfm.L_M.as_sym_mat3(), s=o_tfm.S_M.as_mat3(), origin=origin) if (assert_similarity): T = matrix.sym(sym_mat3=tlso_.t) L = matrix.sym(sym_mat3=tlso_.l) S = matrix.sqr(tlso_.s) o_tfm = analysis.run(T=T, L=L, S=S, log=null_out()).self_check() # r = tls_as_xyz.ensemble_generator(tls_from_motions_object=o_tfm, pdb_hierarchy=ph, xray_structure=xrs, n_models=n_models, origin=origin, use_states=write_pdb_files, log=null_out()) if (write_pdb_files): r.write_pdb_file(file_name="ensemble_%s.pdb" % str(n_models)) # xyz_all = r.sites_cart_ens n_atoms = xyz_all[0].size() ### xyz_atoms_all = all_vs_all(xyz_all=xyz_all) ### self.u_cart_ens = flex.sym_mat3_double() for i in xrange(n_atoms): self.u_cart_ens.append( u_cart_from_xyz(sites_cart=xyz_atoms_all[i])) u1 = self.u_cart_tls.as_double() u2 = self.u_cart_ens.as_double() #self.r = flex.sum(flex.abs(u1-u2))/\ # flex.sum(flex.abs(flex.abs(u1)+flex.abs(u2)))*2 # LS #diff = u1-u2 #self.rLS = math.sqrt(flex.sum(diff*diff)/(9.*diff.size())) # # Merritt / Murshudov e = smear_eps eps = matrix.sqr([e, 0, 0, 0, e, 0, 0, 0, e]) I = matrix.sqr([2, 0, 0, 0, 2, 0, 0, 0, 2]) def add_const(u): es = eigensystem.real_symmetric(u) vecs = es.vectors() l_z = matrix.col((vecs[0], vecs[1], vecs[2])) l_y = matrix.col((vecs[3], vecs[4], vecs[5])) l_x = matrix.col((vecs[6], vecs[7], vecs[8])) #l_x = l_y.cross(l_z) u = matrix.sym(sym_mat3=u) R = matrix.sqr([ l_x[0], l_y[0], l_z[0], l_x[1], l_y[1], l_z[1], l_x[2], l_y[2], l_z[2] ]) uD = R.transpose() * u * R result = R * (uD + eps) * R.transpose() tmp = R * uD * R.transpose() for i in xrange(6): assert approx_equal(tmp[i], u[i]) return R * (uD + eps) * R.transpose() self.KL = 0 self.CC = 0 n1, n2, d1, d2 = 0, 0, 0, 0 for u1, u2 in zip(self.u_cart_tls, self.u_cart_ens): for i in xrange(6): n1 += abs(u1[i] - u2[i]) d1 += (abs(u1[i]) + abs(u2[i])) u1 = add_const(u=u1) u2 = add_const(u=u2) for i in xrange(6): n2 += abs(u1[i] - u2[i]) d2 += (abs(u1[i]) + abs(u2[i])) iu1 = u1.inverse() iu2 = u2.inverse() self.KL += (u1 * iu2 + u2 * iu1 - I).trace() diu1 = iu1.determinant() diu2 = iu2.determinant() den = (iu1 + iu2).determinant() self.CC += (diu1 * diu2)**0.25 / (den / 8)**0.5 self.KL = self.KL / self.u_cart_ens.size() self.CC = self.CC / self.u_cart_ens.size() self.R1 = n1 / d1 * 2 self.R2 = n2 / d2 * 2 self.r = self.R1 # ### for i in xrange(n_atoms): ut = ["%8.5f" % u for u in self.u_cart_tls[i]] ue = ["%8.5f" % u for u in self.u_cart_ens[i]] if (assert_similarity): for j in xrange(6): assert approx_equal(abs(float(ut[j])), abs(float(ue[j])), 1.e-3) # if (write_pdb_files): ph.atoms().set_uij(self.u_cart_tls) ph.write_pdb_file(file_name="u_from_tls.pdb", crystal_symmetry=xrs.crystal_symmetry()) ph.atoms().set_uij(self.u_cart_ens) ph.write_pdb_file(file_name="u_from_ens.pdb", crystal_symmetry=xrs.crystal_symmetry())
def __init__(self, pdb_str, dx=0, dy=0, dz=0, sx=0, sy=0, sz=0, lx=[1, 0, 0], ly=[0, 1, 0], lz=[0, 0, 1], tx=0, ty=0, tz=0, vx=[1, 0, 0], vy=[0, 1, 0], vz=[0, 0, 1], w_M_lx=[0, 0, 0], w_M_ly=[0, 0, 0], w_M_lz=[0, 0, 0], origin=None, n_models=10000, assert_similarity=True, show=False, log=sys.stdout, write_pdb_files=False): from mmtbx.tls import analysis, tls_as_xyz from scitbx import matrix from libtbx.utils import null_out if (show): print >> log, "INPUTS:", "-" * 73 print >> log, "dx :", dx print >> log, "dy :", dy print >> log, "dz :", dz print >> log, "sx :", sx print >> log, "sy :", sy print >> log, "sz :", sz print >> log, "lx :", [i for i in lx] print >> log, "ly :", [i for i in ly] print >> log, "lz :", [i for i in lz] print >> log, "tx :", tx print >> log, "ty :", ty print >> log, "tz :", tz print >> log, "vx :", [i for i in vx] print >> log, "vy :", [i for i in vy] print >> log, "vz :", [i for i in vz] print >> log, "w_M_lx:", [i for i in w_M_lx] print >> log, "w_M_ly:", [i for i in w_M_ly] print >> log, "w_M_lz:", [i for i in w_M_lz] print >> log, "origin:", origin print >> log, "-" * 79 # pdb_inp = iotbx.pdb.input(source_info=None, lines=pdb_str) ph = pdb_inp.construct_hierarchy() xrs = ph.extract_xray_structure( crystal_symmetry=pdb_inp.crystal_symmetry()) sites_cart = xrs.sites_cart() ph.atoms().set_xyz(sites_cart) if (origin is None): origin = sites_cart.mean() # o_tfm = analysis.tls_from_motions(dx=dx, dy=dy, dz=dz, l_x=matrix.col(lx), l_y=matrix.col(ly), l_z=matrix.col(lz), sx=sx, sy=sy, sz=sz, tx=tx, ty=ty, tz=tz, v_x=matrix.col(vx), v_y=matrix.col(vy), v_z=matrix.col(vz), w_M_lx=matrix.col(w_M_lx), w_M_ly=matrix.col(w_M_ly), w_M_lz=matrix.col(w_M_lz)) # self.u_cart_tls = get_u_cart(o_tfm=o_tfm, origin=origin, sites_cart=sites_cart) tlso_ = tlso(t=o_tfm.T_M.as_sym_mat3(), l=o_tfm.L_M.as_sym_mat3(), s=o_tfm.S_M.as_mat3(), origin=origin) if (assert_similarity): T = matrix.sym(sym_mat3=tlso_.t) L = matrix.sym(sym_mat3=tlso_.l) S = matrix.sqr(tlso_.s) o_tfm = analysis.run(T=T, L=L, S=S, log=null_out()).self_check() # r = tls_as_xyz.ensemble_generator(tls_from_motions_object=o_tfm, pdb_hierarchy=ph, xray_structure=xrs, n_models=n_models, origin=origin, use_states=write_pdb_files, log=null_out()) if (write_pdb_files): r.write_pdb_file(file_name="ensemble_%s.pdb" % str(n_models)) # xyz_all = r.sites_cart_ens n_atoms = xyz_all[0].size() ### xyz_atoms_all = all_vs_all(xyz_all=xyz_all) ### self.u_cart_ens = flex.sym_mat3_double() for i in xrange(n_atoms): self.u_cart_ens.append( u_cart_from_xyz(sites_cart=xyz_atoms_all[i])) u1 = self.u_cart_tls.as_double() u2 = self.u_cart_ens.as_double() self.r = flex.sum(flex.abs(u1-u2))/\ flex.sum(flex.abs(flex.abs(u1)+flex.abs(u2)))*2 ### for i in xrange(n_atoms): ut = ["%8.5f" % u for u in self.u_cart_tls[i]] ue = ["%8.5f" % u for u in self.u_cart_ens[i]] if (assert_similarity): for j in xrange(6): assert approx_equal(abs(float(ut[j])), abs(float(ue[j])), 1.e-3) # if (write_pdb_files): ph.atoms().set_uij(self.u_cart_tls) ph.write_pdb_file(file_name="u_from_tls.pdb", crystal_symmetry=xrs.crystal_symmetry()) ph.atoms().set_uij(self.u_cart_ens) ph.write_pdb_file(file_name="u_from_ens.pdb", crystal_symmetry=xrs.crystal_symmetry())