Example #1
0
def tst_02():
    # Test for remove_clashes
    import mmtbx.model
    from mmtbx.clashes import remove_clashes
    import iotbx.pdb
    import sys
    pdb_inp = iotbx.pdb.input(lines=pdb_poor.splitlines(), source_info='None')
    model = mmtbx.model.manager(model_input=pdb_inp, )

    model.set_log(log=null_out())

    print "\n", "-" * 79
    print " Summary of input model statistics "
    print "-" * 79
    model.get_restraints_manager()
    geometry = model.geometry_statistics()
    geometry.show(log=sys.stdout)

    rc = remove_clashes(model=model)

    print "\n", "-" * 79
    print "Starting residues: %d " % (
        rc.model.get_hierarchy().overall_counts().n_residues)
    print "Side-chains removed: %d    Residues removed: %d" % (
        rc.side_chains_removed, rc.residues_removed)
    print "Final residues: %d " % (
        rc.new_model.get_hierarchy().overall_counts().n_residues)

    rc.new_model.set_log(log=null_out())
    rc.new_model.get_restraints_manager()
    new_geometry = rc.new_model.geometry_statistics()
    new_geometry.show(log=sys.stdout)
    assert rc.side_chains_removed == 1
    assert rc.residues_removed == 0
Example #2
0
def show_geo(fn, prefix):
    pdb_inp = iotbx.pdb.input(file_name=fn)
    model = mmtbx.model.manager(model_input=pdb_inp,
                                build_grm=True,
                                log=null_out())
    mes = "%s %s" % (prefix, model.geometry_statistics(
        use_hydrogens=False).show_short())
    return model, mes
Example #3
0
def run(args):
    assert len(args) == 1
    # Read file into pdb_input class
    inp = iotbx.pdb.input(file_name=args[0])

    # create a model manager
    # Catch Sorry about MTRIX here.
    model = mmtbx.model.manager(
        model_input=inp,
        restraint_objects=
        None,  # these are ligands if any [('fname', cif_object), ()]
        log=null_out(),
    )
    print("=" * 80)
    print("number of atoms with MTRIX multiplication:",
          model.get_number_of_atoms())
    show_ss_counts(model)

    # Expand with BIOMT if needed. MTRIX are already expanded by default
    # Catch case when both MTRIX and BIOMT present, or other Sorry raised by
    # BIOMT handling.
    # LIMITATION: this should be done before any selections made on model.manager
    double_counter = 0
    try:
        model.expand_with_BIOMT_records()
    except Sorry as e:
        if str(e).startswith("Model has been already expanded"):
            double_counter += 1
    print("=" * 80)
    print("number of atoms with BIOMT multiplication:",
          model.get_number_of_atoms())
    show_ss_counts(model)

    # Get default params
    pdb_int_params = mmtbx.model.manager.get_default_pdb_interpretation_params(
    )
    # Set whatever you want
    pdb_int_params.pdb_interpretation.secondary_structure.protein.enabled = True
    pdb_int_params.pdb_interpretation.ncs_search.enabled = True
    pdb_int_params.pdb_interpretation.ncs_search.residue_match_radius = 999
    pdb_int_params.pdb_interpretation.clash_guard.nonbonded_distance_threshold = None

    #pdb_int_params.pdb_interpretation.nonbonded_weight = None

    # set the params. Note, that GRM would be dropped, even if it was already
    # constructed. In this example it is not yet constructed.
    model.set_pdb_interpretation_params(params=pdb_int_params)
    grm = model.get_restraints_manager()

    # Not clear which one should be used at the moment
    gs = model.geometry_statistics()
    gs.show()
    # The second way
    msi = model.get_model_statistics_info()
    msi.show_remark_3()
 def get_statistics(self, model):
   # should we shift here? No
   # should we multiply NCS here? No
   geometry = model.geometry_statistics().result()
   motifs = phi_psi_2.get_results(model=model, log=null_out())['counts']
   mcounts = motifs.get_counts()
   res = {}
   for key, value in mcounts.iteritems():
     res[key] = value.percent
   geometry.merge(group_args(**res))
   return geometry
 def get_statistics(self, model):
   # should we shift here? No
   # should we multiply NCS here? No
   geometry = model.geometry_statistics().result()
   motifs = phi_psi_2.results_manager(model=model, log=null_out()).get_motif_count()
   mcounts = motifs.get_counts()
   res = {}
   # TODO is mcounts a dict ? If not consider changing back
   for key, value in six.iteritems(mcounts):
     res[key] = value.percent
   geometry.merge(group_args(**res))
   return geometry
Example #6
0
def run():
    rmsd_dirs = ["0.3/", "0.6/", "0.9/", "1.2/", "1.5/"]
    base_names = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
    ref = get_reference()
    tmp_cntr1 = 0
    print "Hbond analysis"
    print "model     min     max     mean   recovered  bond_rmsd  rama_favored clashscore"
    for sub_root in [
            "./perturbed/", "./cctbx_opt/", "./xtb_opt_stpmax_0.3/",
            "./xtb_opt_stpmax_0.4/", "./xtb_opt_stpmax_0.5/",
            "./terachem_opt_final/"
    ]:
        print sub_root
        for rmsd_dir in rmsd_dirs:
            h_bonds = flex.double()
            rmsd_bonds = flex.double()
            rama_fav = flex.double()
            clashscore = flex.double()
            cntr = 0
            for fn in base_names:
                file_name = sub_root + rmsd_dir + fn + ".pdb"
                if (not os.path.exists(file_name)): assert 0, file_name
                model = get_model(file_name)
                assert ref.h.is_similar_hierarchy(model.get_hierarchy())
                g = model.geometry_statistics(use_hydrogens=False).result()
                rmsd_bonds.append(g.bond.mean)
                rama_fav.append(g.ramachandran.favored)
                clashscore.append(g.clash.score)
                #print g.bond.mean, g.clash.score, g.rotamer.outliers, g.c_beta.outliers, \
                #  g.ramachandran.outliers, g.ramachandran.allowed, g.ramachandran.favored
                sites_cart = model.get_sites_cart()
                if (sub_root.count("perturbed") > 0):
                    tmp_cntr1 += 1
                    assert approx_equal(
                        float(rmsd_dir.replace("/", "")),
                        flex.mean(
                            flex.sqrt((ref.sites_cart - sites_cart).dot())),
                        0.01)
                for pair in ref.h_bonds_i_seqs:
                    d = dist(sites_cart[pair[0]], sites_cart[pair[1]])
                    h_bonds.append(d)
                cntr += 1
            assert cntr == 10, cntr
            sel = h_bonds < 2.3
            sel &= h_bonds > 1.6
            if (h_bonds.size() > 0):
                print rmsd_dir, "%8.3f %8.3f %8.3f"%h_bonds.min_max_mean().as_tuple(), \
                  " %7.2f"%(sel.count(True)*100./(len(ref.h_bonds_i_seqs)*cntr)),\
                  "    %6.4f    %7.2f     %4.2f"%(flex.mean(rmsd_bonds), flex.mean(rama_fav), flex.mean(clashscore))
            else:
                print rmsd_dir, "N/A"
    #
    assert tmp_cntr1 == 50, tmp_cntr1
Example #7
0
def exercise_2():
  inp = iotbx.pdb.input(lines=pdb_str_1, source_info=None)
  model = mmtbx.model.manager(
      model_input = inp)
  model.setup_scattering_dictionaries(scattering_table="wk1995")
  g_stat = model.geometry_statistics()
Example #8
0
def run(
    pdb_filename,
    model_completion=True,
    keep_alt_loc=False,
    skip_validation=False,
    calculate_charge=False,
    append_to_end_of_model=False,
    neutron_option=None,
    hydrogen_atom_occupancies=0.,
):
    #
    # do all *.pdb in a directory
    #
    if os.path.isdir(pdb_filename):
        loop_over_dir(pdb_filename)
        return
    #
    # fetch a PDB code
    #
    if pdb_filename.find(".pdb") == -1:
        if not os.path.exists('%s.pdb' % pdb_filename):
            run_fetch_pdb(pdb_filename)
        pdb_filename = '%s.pdb' % pdb_filename

    if 1:  # read file option
        ppf = hierarchy_utils.get_processed_pdb(pdb_filename=pdb_filename)
    elif 0:  # raw records example
        pdb_inp = iotbx.pdb.input(pdb_filename)
        hierarchy = pdb_inp.construct_hierarchy()
        raw_records = []
        for atom in hierarchy.atoms():
            raw_records.append(atom.format_atom_record())
        ppf = hierarchy_utils.get_processed_pdb(raw_records=raw_records)
    else:  # from hierarchy
        pdb_inp = iotbx.pdb.input(pdb_filename)
        hierarchy = pdb_inp.construct_hierarchy()
        ppf = hierarchy_utils.get_processed_pdb(
            pdb_inp=hierarchy.as_pdb_input())

    if not skip_validation:
        model = mmtbx.model.manager(
            model_input=None,
            crystal_symmetry=ppf.all_chain_proxies.pdb_inp.crystal_symmetry(),
            pdb_hierarchy=ppf.all_chain_proxies.pdb_hierarchy)
        initial_model_statistics = model.geometry_statistics()

    # should use cctbx
    if keep_alt_loc: pass
    else:
        hierarchy = remove_alternative_locations(
            ppf.all_chain_proxies.pdb_hierarchy)

    ppf.all_chain_proxies.pdb_hierarchy.shift_to_origin(
        ppf.all_chain_proxies.pdb_inp.crystal_symmetry())
    ppf.all_chain_proxies.pdb_hierarchy.remove_residue_groups_with_atoms_on_special_positions_selective(
        ppf.all_chain_proxies.pdb_inp.crystal_symmetry())
    if 0:
        output = hierarchy_utils.write_hierarchy(
            pdb_filename,  # uses to get output filename
            ppf.all_chain_proxies.pdb_inp,
            ppf.all_chain_proxies.pdb_hierarchy,
            "temp0")
        ppf = hierarchy_utils.get_processed_pdb(pdb_filename=output)
    else:
        raw_records = hierarchy_utils.get_raw_records(
            ppf.all_chain_proxies.pdb_inp,
            ppf.all_chain_proxies.pdb_hierarchy,
        )
        ppf = hierarchy_utils.get_processed_pdb(raw_records=raw_records)
    hetero_charges = charges.get_hetero_charges(
        ppf.all_chain_proxies.pdb_inp,
        ppf.all_chain_proxies.pdb_hierarchy,
    )

    if not hetero_charges:
        # some defaults
        hetero_charges = charges.default_ion_charges
    inter_residue_bonds = charges.get_inter_residue_bonds(ppf)
    #
    # extends side chains and add hydrogens
    #
    if model_completion:
        use_capping_hydrogens = False
        fname = 'complete'
    else:
        use_capping_hydrogens = True
        fname = 'capping'
        #assert 0 # model has H
    ppf = completion.complete_pdb_hierarchy(
        ppf.all_chain_proxies.pdb_hierarchy,
        ppf.geometry_restraints_manager(),
        pdb_filename=pdb_filename,
        pdb_inp=ppf.all_chain_proxies.pdb_inp,
        use_capping_hydrogens=use_capping_hydrogens,
        append_to_end_of_model=append_to_end_of_model,
    )

    if calculate_charge:
        new_pdb_filename = hierarchy_utils.write_hierarchy(
            pdb_filename,  # uses to get output filename
            ppf.all_chain_proxies.pdb_inp,
            ppf.all_chain_proxies.pdb_hierarchy,
            fname)
        ## need now inter_residue_bonds because of added hydrogens
        ##  maybe update the bond table!!!
        ppf = hierarchy_utils.get_processed_pdb(pdb_filename=new_pdb_filename)
        inter_residue_bonds = charges.get_inter_residue_bonds(ppf,
                                                              verbose=True)
        total_charge = charges.calculate_pdb_hierarchy_charge(
            ppf.all_chain_proxies.pdb_hierarchy,
            hetero_charges=hetero_charges,
            inter_residue_bonds=inter_residue_bonds,
        )
        print("total_charge", total_charge)

    # Idealize H as riding
    params = mmtbx.model.manager.get_default_pdb_interpretation_params()
    params.pdb_interpretation.use_neutron_distances = True
    params.pdb_interpretation.restraints_library.cdl = False
    h = ppf.all_chain_proxies.pdb_hierarchy
    asc = h.atom_selection_cache()
    sel = asc.selection("element H or element D")
    model = mmtbx.model.manager(
        model_input=None,
        pdb_hierarchy=ppf.all_chain_proxies.pdb_hierarchy,
        crystal_symmetry=ppf.all_chain_proxies.pdb_inp.crystal_symmetry(),
        log=null_out())
    model.process(make_restraints=True,
                  grm_normalization=True,
                  pdb_interpretation_params=params)
    model.idealize_h_riding()
    if neutron_option == 'all_d':
        from mmtbx.ligands.ready_set_utils import perdeuterate_model_ligands
        perdeuterate_model_ligands(ppf.all_chain_proxies.pdb_hierarchy)
    model.set_occupancies(hydrogen_atom_occupancies, selection=sel)

    ## after no error getting total charge, write the completed pdb file
    hierarchy_utils.write_hierarchy(
        pdb_filename,  # uses to get output filename
        ppf.all_chain_proxies.pdb_inp,
        model.get_hierarchy(),
        fname)
    if not skip_validation:
        final_model_statistics = model.geometry_statistics()
Example #9
0
 def get_statistics(self, model):
     # should we shift here? No
     # should we multiply NCS here? No
     return model.geometry_statistics().result()