示例#1
0
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)
示例#3
0
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
示例#4
0
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
示例#6
0
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()