def uij_from_tls_vector_and_origin(xyz, tls_vector, origin): assert tls_vector.shape == (21, ) tls_obj = tlso(t=tls_vector[0:6], l=tls_vector[6:12], s=tls_vector[12:21], origin=origin) return uij_from_tls_object(xyz=xyz, tls_obj=tls_obj)
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(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 uaniso_from_tls_and_back(): mon_lib_srv = monomer_library.server.server() ener_lib = monomer_library.server.ener_lib() pdb_file = libtbx.env.find_in_repositories( relative_path="phenix_regression/pdb/1OC2_tst.pdb", test=os.path.isfile) processed_pdb_file = monomer_library.pdb_interpretation.process( mon_lib_srv = mon_lib_srv, ener_lib = ener_lib, file_name = pdb_file, raw_records = None, force_symmetry = True) xray_structure = processed_pdb_file.xray_structure() selections = [] for string in ["chain A", "chain B"]: selections.append(processed_pdb_file.all_chain_proxies.selection( string = string)) input_tls_data = iotbx.pdb.remark_3_interpretation.extract_tls_parameters( remark_3_records=processed_pdb_file.all_chain_proxies.pdb_inp .extract_remark_iii_records(iii=3), pdb_hierarchy = processed_pdb_file.all_chain_proxies.pdb_hierarchy, chain_ids=[]).tls_params tls_params = [] for item in input_tls_data: tls_params.append(tools.tlso(t = item.t, l = item.l, s = item.s, origin = item.origin)) tools.show_tls(tlsos = tls_params) u_cart_from_tls = tools.u_cart_from_tls( sites_cart = xray_structure.sites_cart(), selections = selections, tlsos = tls_params) i = 0 for utls,atom in zip(u_cart_from_tls, processed_pdb_file.all_chain_proxies.pdb_atoms): updb = atom.uij #i += 1 #print " ", i #print "%6.4f %6.4f %6.4f %6.4f %6.4f %6.4f "% \ # (utls[0],utls[1],utls[2],utls[3],utls[4],utls[5]) #print "%6.4f %6.4f %6.4f %6.4f %6.4f %6.4f "% \ # (updb[0],updb[1],updb[2],updb[3],updb[4],updb[5]) assert approx_equal(utls,updb, 1.e-4) tlsos_initial = [] for input_tls_data_ in input_tls_data: tlsos_initial.append(tools.tlso( t = ([0.0,0.0,0.0,0.0,0.0,0.0]), l = ([0.0,0.0,0.0,0.0,0.0,0.0]), s = ([0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]), origin = input_tls_data_.origin)) tls_from_uanisos = tools.tls_from_uanisos( number_of_macro_cycles = 300, max_iterations = 1000, xray_structure = xray_structure, selections = selections, tlsos_initial = tlsos_initial) print("\nTLS from Uaniso:\n") tools.show_tls(tlsos = tls_from_uanisos) for input_tls_data_,tls_from_uanisos_ in zip(tls_params,tls_from_uanisos): assert approx_equal(input_tls_data_.t, tls_from_uanisos_.t, 1.e-4) assert approx_equal(input_tls_data_.l, tls_from_uanisos_.l, 1.e-4) assert approx_equal(input_tls_data_.s, tls_from_uanisos_.s, 1.e-4) assert approx_equal(input_tls_data_.origin, tls_from_uanisos_.origin, 1.e-3) # print(format_cpu_times())
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 uaniso_from_tls_and_back(): mon_lib_srv = monomer_library.server.server() ener_lib = monomer_library.server.ener_lib() pdb_file = libtbx.env.find_in_repositories( relative_path="phenix_regression/pdb/1OC2_tst.pdb", test=os.path.isfile) processed_pdb_file = monomer_library.pdb_interpretation.process( mon_lib_srv = mon_lib_srv, ener_lib = ener_lib, file_name = pdb_file, raw_records = None, force_symmetry = True) xray_structure = processed_pdb_file.xray_structure() selections = [] for string in ["chain A", "chain B"]: selections.append(processed_pdb_file.all_chain_proxies.selection( string = string)) input_tls_data = iotbx.pdb.remark_3_interpretation.extract_tls_parameters( remark_3_records=processed_pdb_file.all_chain_proxies.pdb_inp .extract_remark_iii_records(iii=3), pdb_hierarchy = processed_pdb_file.all_chain_proxies.pdb_hierarchy, chain_ids=[]).tls_params tls_params = [] for item in input_tls_data: tls_params.append(tools.tlso(t = item.t, l = item.l, s = item.s, origin = item.origin)) tools.show_tls(tlsos = tls_params) u_cart_from_tls = tools.u_cart_from_tls( sites_cart = xray_structure.sites_cart(), selections = selections, tlsos = tls_params) i = 0 for utls,atom in zip(u_cart_from_tls, processed_pdb_file.all_chain_proxies.pdb_atoms): updb = atom.uij #i += 1 #print " ", i #print "%6.4f %6.4f %6.4f %6.4f %6.4f %6.4f "% \ # (utls[0],utls[1],utls[2],utls[3],utls[4],utls[5]) #print "%6.4f %6.4f %6.4f %6.4f %6.4f %6.4f "% \ # (updb[0],updb[1],updb[2],updb[3],updb[4],updb[5]) assert approx_equal(utls,updb, 1.e-4) tlsos_initial = [] for input_tls_data_ in input_tls_data: tlsos_initial.append(tools.tlso( t = ([0.0,0.0,0.0,0.0,0.0,0.0]), l = ([0.0,0.0,0.0,0.0,0.0,0.0]), s = ([0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]), origin = input_tls_data_.origin)) tls_from_uanisos = tools.tls_from_uanisos( number_of_macro_cycles = 300, max_iterations = 1000, xray_structure = xray_structure, selections = selections, tlsos_initial = tlsos_initial) print "\nTLS from Uaniso:\n" tools.show_tls(tlsos = tls_from_uanisos) for input_tls_data_,tls_from_uanisos_ in zip(tls_params,tls_from_uanisos): assert approx_equal(input_tls_data_.t, tls_from_uanisos_.t, 1.e-4) assert approx_equal(input_tls_data_.l, tls_from_uanisos_.l, 1.e-4) assert approx_equal(input_tls_data_.s, tls_from_uanisos_.s, 1.e-4) assert approx_equal(input_tls_data_.origin, tls_from_uanisos_.origin, 1.e-3) # print format_cpu_times()