Esempio n. 1
0
 def omega(self):
   result = omegalyze.omegalyze(pdb_hierarchy=self.pdb_hierarchy, quiet=True)
   # XXX Move this to omegalyze function.
   n_proline         = result.n_proline()
   n_general         = result.n_general()
   n_cis_proline     = result.n_cis_proline()
   n_cis_general     = result.n_cis_general()
   n_twisted_proline = result.n_twisted_proline()
   n_twisted_general = result.n_twisted_general()
   cis_general       = 0
   twisted_general   = 0
   cis_proline       = 0
   twisted_proline   = 0
   if(n_proline != 0):
     cis_proline     = n_cis_proline    *100./n_proline
     twisted_proline = n_twisted_proline*100./n_proline
   if(n_general != 0):
     cis_general     = n_cis_general    *100./n_general
     twisted_general = n_twisted_general*100./n_general
   return group_args(
     cis_proline       = cis_proline,
     cis_general       = cis_general,
     twisted_general   = twisted_general,
     twisted_proline   = twisted_proline,
     n_twisted_general = n_twisted_general,
     omegalyze         = result #XXX Bulky object -- REMOVE!
     )
Esempio n. 2
0
    def run(self):
        f = None
        if self.params.result_file is not None:
            try:
                f = open(self.params.result_file, 'w')
                self.logger.register('file', f)
            except IOError:
                raise Sorry("The output file could not be opened")
        hierarchy = self.data_manager.get_model().get_hierarchy()
        hierarchy.atoms().reset_i_seq()

        result = omegalyze(pdb_hierarchy=hierarchy,
                           nontrans_only=self.params.nontrans_only,
                           out=self.logger,
                           quiet=False)
        if self.params.kinemage:
            print(result.as_kinemage(), file=self.logger)
        elif self.params.oneline:
            result.summary_only(out=self.logger,
                                pdbid=self.data_manager.get_default_model_name(
                                ))  #params.model)
        elif self.params.text:
            result.show_old_output(out=self.logger, verbose=True)
        if f:
            try:
                f.close()
            except Exception:
                raise Sorry("Could not close output file")
Esempio n. 3
0
def export_molprobity_result_as_kinemage(result,
                                         pdb_hierarchy,
                                         geometry,
                                         probe_file,
                                         keep_hydrogens=False,
                                         pdbID="PDB"):
    assert (result.restraints is not None)
    i_seq_name_hash = build_name_hash(pdb_hierarchy=pdb_hierarchy)
    sites_cart = pdb_hierarchy.atoms().extract_xyz()
    flags = geometry_restraints.flags.flags(default=True)
    angle_proxies = geometry.angle_proxies
    pair_proxies = geometry.pair_proxies(flags=flags, sites_cart=sites_cart)
    bond_proxies = pair_proxies.bond_proxies
    quick_bond_hash = {}
    for bp in bond_proxies.simple:
        if (i_seq_name_hash[bp.i_seqs[0]][9:14] == i_seq_name_hash[
                bp.i_seqs[1]][9:14]):
            if quick_bond_hash.get(bp.i_seqs[0]) is None:
                quick_bond_hash[bp.i_seqs[0]] = []
            quick_bond_hash[bp.i_seqs[0]].append(bp.i_seqs[1])
    kin_out = get_default_header()
    altid_controls = get_altid_controls(hierarchy=pdb_hierarchy)
    if altid_controls != "":
        kin_out += altid_controls
    kin_out += "@group {%s} dominant animate\n" % pdbID
    initiated_chains = []
    counter = 0
    for model in pdb_hierarchy.models():
        for chain in model.chains():
            if chain.id not in initiated_chains:
                kin_out += "@subgroup {%s} dominant master= {chain %s}\n" % (
                    pdbID, chain.id)
                initiated_chains.append(chain.id)
            kin_out += get_kin_lots(chain=chain,
                                    bond_hash=quick_bond_hash,
                                    i_seq_name_hash=i_seq_name_hash,
                                    pdbID=pdbID,
                                    index=counter)
            if (chain.is_protein()):
                assert (not None in [result.rotalyze, result.ramalyze])
                kin_out += rotamer_outliers(chain=chain,
                                            pdbID=pdbID,
                                            rot_outliers=result.rotalyze)
                kin_out += rama_outliers(chain=chain,
                                         pdbID=pdbID,
                                         ram_outliers=result.ramalyze)
            kin_out += result.restraints.as_kinemage(chain_id=chain.id)
            if (chain.is_protein()):
                assert (result.cbetadev is not None)
                kin_out += result.cbetadev.as_kinemage(chain_id=chain.id)
            kin_out += pperp_outliers(hierarchy=pdb_hierarchy, chain=chain)
            counter += 1
    kin_out += omegalyze.omegalyze(pdb_hierarchy=pdb_hierarchy,
                                   nontrans_only=True,
                                   out=None,
                                   quiet=False).as_kinemage()
    kin_out += make_probe_dots(hierarchy=pdb_hierarchy,
                               keep_hydrogens=keep_hydrogens)
    kin_out += get_footer()
    return kin_out
Esempio n. 4
0
 def run_omegalyze(self) :
   from mmtbx.validation import omegalyze
   omegalyze_result = omegalyze.omegalyze(
                              pdb_hierarchy = self.hierarchy,
                              nontrans_only = False,
                              out           = sys.stdout,
                              quiet         = False)
   for result in omegalyze_result.results :
     resd = mdb_utils.get_resd(self.pdb_code,result)
     MDBRes = mdb_utils.MDBResidue(**resd)
     reskey = MDBRes.get_residue_key()
     if reskey not in self.residues.keys(): # alternates likely exist
       reskeys = self.get_alternate_keys(resd)
       for k in reskeys :
         self.residues[k].add_omegalyze_result(result)
     else : # No alternates
       self.residues[reskey].add_omegalyze_result(result)
Esempio n. 5
0
 def __init__(
     self,
     pdb_hierarchy,
     molprobity_scores=False,
     ):
   self.pdb_hierarchy = pdb_hierarchy
   self.clashscore            = None
   self.ramachandran_outliers = None
   self.ramachandran_allowed  = None
   self.ramachandran_favored  = None
   self.rotamer_outliers      = None
   self.c_beta_dev            = None
   self.mpscore               = None
   self.omglz = None
   self.n_cis_proline = None
   self.n_cis_general = None
   self.n_twisted_proline = None
   self.n_twisted_general = None
   if(molprobity_scores):
     self.ramalyze_obj = ramalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False)
     self.ramachandran_outliers = self.ramalyze_obj.percent_outliers
     self.ramachandran_allowed  = self.ramalyze_obj.percent_allowed
     self.ramachandran_favored  = self.ramalyze_obj.percent_favored
     self.rotalyze_obj = rotalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False)
     self.rotamer_outliers = self.rotalyze_obj.percent_outliers
     self.cbetadev_obj = cbetadev(
       pdb_hierarchy = pdb_hierarchy,
       outliers_only = True,
       out           = null_out())
     self.c_beta_dev = self.cbetadev_obj.get_outlier_count()
     self.clashscore = clashscore(pdb_hierarchy=pdb_hierarchy).get_clashscore()
     self.mpscore = molprobity_score(
       clashscore = self.clashscore,
       rota_out   = self.rotamer_outliers,
       rama_fav   = self.ramachandran_favored)
     self.omglz = omegalyze.omegalyze(
       pdb_hierarchy=self.pdb_hierarchy, quiet=True)
     self.n_cis_proline = self.omglz.n_cis_proline()
     self.n_cis_general = self.omglz.n_cis_general()
     self.n_twisted_proline = self.omglz.n_twisted_proline()
     self.n_twisted_general = self.omglz.n_twisted_general()
Esempio n. 6
0
 def __init__(
     self,
     pdb_hierarchy,
     molprobity_scores=False,
     ):
   self.pdb_hierarchy = pdb_hierarchy
   self.clashscore            = None
   self.ramachandran_outliers = None
   self.ramachandran_allowed  = None
   self.ramachandran_favored  = None
   self.rotamer_outliers      = None
   self.c_beta_dev            = None
   self.mpscore               = None
   self.omglz = None
   self.n_cis_proline = None
   self.n_cis_general = None
   self.n_twisted_proline = None
   self.n_twisted_general = None
   if(molprobity_scores):
     self.ramalyze_obj = ramalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False)
     self.ramachandran_outliers = self.ramalyze_obj.percent_outliers
     self.ramachandran_allowed  = self.ramalyze_obj.percent_allowed
     self.ramachandran_favored  = self.ramalyze_obj.percent_favored
     self.rotalyze_obj = rotalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False)
     self.rotamer_outliers = self.rotalyze_obj.percent_outliers
     self.cbetadev_obj = cbetadev(
       pdb_hierarchy = pdb_hierarchy,
       outliers_only = True,
       out           = null_out())
     self.c_beta_dev = self.cbetadev_obj.get_outlier_count()
     self.clashscore = clashscore(pdb_hierarchy=pdb_hierarchy).get_clashscore()
     self.mpscore = molprobity_score(
       clashscore = self.clashscore,
       rota_out   = self.rotamer_outliers,
       rama_fav   = self.ramachandran_favored)
     self.omglz = omegalyze.omegalyze(
       pdb_hierarchy=self.pdb_hierarchy, quiet=True)
     self.n_cis_proline = self.omglz.n_cis_proline()
     self.n_cis_general = self.omglz.n_cis_general()
     self.n_twisted_proline = self.omglz.n_twisted_proline()
     self.n_twisted_general = self.omglz.n_twisted_general()
Esempio n. 7
0
def exercise_omegalyze():
  regression_pdb = libtbx.env.find_in_repositories(
    relative_path="phenix_regression/pdb/2hr0.pdb",
    test=os.path.isfile)
  if (regression_pdb is None):
    print "Skipping exercise_omegalyze(): input pdb (2hr0.pdb) not available"
    return
  #-----
  pdb_io = pdb.input(regression_pdb)
  pdbid = os.path.basename(regression_pdb)
  hierarchy = pdb_io.construct_hierarchy()

  text_test = omegalyze_test_string()
  outliers = omegalyze.omegalyze(
    pdb_hierarchy=hierarchy,
    nontrans_only=True,
    out=text_test,
    quiet=False)
  outliers.show_old_output(out=text_test, verbose=True)

  assert not show_diff(text_test.output , ref_omegalyze_give_text)
Esempio n. 8
0
def exercise_omegalyze():
  regression_pdb = libtbx.env.find_in_repositories(
    relative_path="phenix_regression/pdb/2hr0.pdb",
    test=os.path.isfile)
  if (regression_pdb is None):
    print "Skipping exercise_omegalyze(): input pdb (2hr0.pdb) not available"
    return
  #-----
  pdb_io = pdb.input(regression_pdb)
  pdbid = os.path.basename(regression_pdb)
  hierarchy = pdb_io.construct_hierarchy()

  text_test = omegalyze_test_string()
  outliers = omegalyze.omegalyze(
    pdb_hierarchy=hierarchy,
    nontrans_only="True",
    out=text_test,
    quiet=False)
  outliers.show_old_output(out=text_test, verbose=True)

  assert not show_diff(text_test.output , ref_omegalyze_give_text)
Esempio n. 9
0
    def __init__(self,
                 pdb_hierarchy,
                 xray_structure=None,
                 fmodel=None,
                 fmodel_neutron=None,
                 geometry_restraints_manager=None,
                 crystal_symmetry=None,
                 sequences=None,
                 flags=None,
                 header_info=None,
                 raw_data=None,
                 unmerged_data=None,
                 all_chain_proxies=None,
                 keep_hydrogens=True,
                 nuclear=False,
                 save_probe_unformatted_file=None,
                 show_hydrogen_outliers=False,
                 min_cc_two_fofc=0.8,
                 n_bins_data=10,
                 count_anomalous_pairs_separately=False,
                 use_internal_variance=True,
                 outliers_only=True,
                 use_pdb_header_resolution_cutoffs=False,
                 file_name=None,
                 ligand_selection=None,
                 rotamer_library="8000",
                 map_params=None):
        assert rotamer_library == "8000", "data_version given to RotamerEval not recognized."
        for name in self.__slots__:
            setattr(self, name, None)
        # very important - the i_seq attributes may be extracted later
        pdb_hierarchy.atoms().reset_i_seq()
        self.pdb_hierarchy = pdb_hierarchy
        if (xray_structure is None):
            if (fmodel is not None):
                xray_structure = fmodel.xray_structure
            elif (crystal_symmetry is not None):
                xray_structure = pdb_hierarchy.extract_xray_structure(
                    crystal_symmetry=crystal_symmetry)
        self.crystal_symmetry = crystal_symmetry
        if (crystal_symmetry is None) and (fmodel is not None):
            self.crystal_symmetry = fmodel.f_obs().crystal_symmetry()
        self.header_info = header_info
        if (flags is None):
            flags = molprobity_flags()
        if pdb_hierarchy.contains_protein():
            self.find_missing_atoms(out=null_out())
            if (flags.ramalyze):
                self.ramalyze = ramalyze.ramalyze(pdb_hierarchy=pdb_hierarchy,
                                                  outliers_only=outliers_only,
                                                  out=null_out(),
                                                  quiet=True)
##### omegalyze ################################################################
            if (flags.omegalyze):
                self.omegalyze = omegalyze.omegalyze(
                    pdb_hierarchy=pdb_hierarchy,
                    nontrans_only=outliers_only,
                    out=null_out(),
                    quiet=True)
##### omegalyze ################################################################
            if (flags.rotalyze):
                self.rotalyze = rotalyze.rotalyze(pdb_hierarchy=pdb_hierarchy,
                                                  data_version=rotamer_library,
                                                  outliers_only=outliers_only,
                                                  out=null_out(),
                                                  quiet=True)
            if (flags.cbetadev):
                self.cbetadev = cbetadev.cbetadev(pdb_hierarchy=pdb_hierarchy,
                                                  outliers_only=outliers_only,
                                                  out=null_out(),
                                                  quiet=True)
            if (flags.nqh):
                self.nqh_flips = clashscore.nqh_flips(
                    pdb_hierarchy=pdb_hierarchy)
        if (pdb_hierarchy.contains_rna() and flags.rna
                and libtbx.env.has_module(name="suitename")):
            if (geometry_restraints_manager is not None):
                self.rna = rna_validate.rna_validation(
                    pdb_hierarchy=pdb_hierarchy,
                    geometry_restraints_manager=geometry_restraints_manager,
                    outliers_only=outliers_only,
                    params=None)
        if (flags.clashscore):
            self.clashes = clashscore.clashscore(
                pdb_hierarchy=pdb_hierarchy,
                save_probe_unformatted_file=save_probe_unformatted_file,
                nuclear=nuclear,
                keep_hydrogens=keep_hydrogens,
                out=null_out(),
                verbose=False)
        if (flags.model_stats) and (xray_structure is not None):
            self.model_stats = model_properties.model_statistics(
                pdb_hierarchy=pdb_hierarchy,
                xray_structure=xray_structure,
                all_chain_proxies=all_chain_proxies,
                ignore_hd=(not nuclear),
                ligand_selection=ligand_selection)
        if (geometry_restraints_manager is not None) and (flags.restraints):
            assert (xray_structure is not None)
            self.restraints = restraints.combined(
                pdb_hierarchy=pdb_hierarchy,
                xray_structure=xray_structure,
                geometry_restraints_manager=geometry_restraints_manager,
                ignore_hd=(not nuclear),
                cdl=getattr(all_chain_proxies, "use_cdl", None))
        if (sequences is not None) and (flags.seq):
            self.sequence = sequence.validation(
                pdb_hierarchy=pdb_hierarchy,
                sequences=sequences,
                log=null_out(),
                include_secondary_structure=True,
                extract_coordinates=True)

        # use maps (fmodel is not used)
        use_maps = False
        if (map_params is not None):
            use_maps = ((map_params.input.maps.map_file_name) or
                        ((map_params.input.maps.map_coefficients_file_name) and
                         (map_params.input.maps.map_coefficients_label)))
        if (use_maps):
            if (flags.real_space):
                self.real_space = experimental.real_space(
                    fmodel=None,
                    pdb_hierarchy=pdb_hierarchy,
                    cc_min=min_cc_two_fofc,
                    molprobity_map_params=map_params.input.maps)
            if (flags.waters):
                self.waters = waters.waters(
                    pdb_hierarchy=pdb_hierarchy,
                    xray_structure=xray_structure,
                    fmodel=None,
                    collect_all=True,
                    molprobity_map_params=map_params.input.maps)

        if (fmodel is not None):
            if (use_pdb_header_resolution_cutoffs) and (header_info
                                                        is not None):
                fmodel = fmodel.resolution_filter(d_min=header_info.d_min,
                                                  d_max=header_info.d_max)
            if (flags.rfactors):
                self.data_stats = experimental.data_statistics(
                    fmodel,
                    raw_data=raw_data,
                    n_bins=n_bins_data,
                    count_anomalous_pairs_separately=
                    count_anomalous_pairs_separately)

            if (not use_maps):  # if maps are used, keep previous results
                if (flags.real_space):
                    self.real_space = experimental.real_space(
                        fmodel=fmodel,
                        pdb_hierarchy=pdb_hierarchy,
                        cc_min=min_cc_two_fofc)
                if (flags.waters):
                    self.waters = waters.waters(pdb_hierarchy=pdb_hierarchy,
                                                xray_structure=xray_structure,
                                                fmodel=fmodel,
                                                collect_all=True)

            if (unmerged_data is not None):
                self.merging = experimental.merging_and_model_statistics(
                    f_obs=fmodel.f_obs(),
                    f_model=fmodel.f_model(),
                    r_free_flags=fmodel.r_free_flags(),
                    unmerged_i_obs=unmerged_data,
                    anomalous=count_anomalous_pairs_separately,
                    use_internal_variance=use_internal_variance,
                    n_bins=n_bins_data)
            if (flags.xtriage):
                import mmtbx.scaling.xtriage
                f_model = abs(
                    fmodel.f_model()).set_observation_type_xray_amplitude()
                if (raw_data is not None):
                    f_model, obs = f_model.common_sets(other=raw_data)
                else:
                    obs = fmodel.f_obs()
                self.xtriage = mmtbx.scaling.xtriage.xtriage_analyses(
                    miller_obs=obs,
                    miller_calc=f_model,
                    unmerged_obs=unmerged_data,  # XXX some redundancy here...
                    text_out=null_out())
        if (fmodel_neutron is not None) and (flags.rfactors):
            self.neutron_stats = experimental.data_statistics(
                fmodel_neutron,
                n_bins=n_bins_data,
                count_anomalous_pairs_separately=False)
        if (pdb_hierarchy.models_size() == 1):
            self._multi_criterion = multi_criterion_view(pdb_hierarchy)
Esempio n. 10
0
def get_model_stat(file_name):
    pdb_inp = iotbx.pdb.input(file_name=file_name)
    atoms = pdb_inp.atoms()
    box = uctbx.non_crystallographic_unit_cell_with_the_sites_in_its_center(
        sites_cart=atoms.extract_xyz(), buffer_layer=5)
    atoms.set_xyz(new_xyz=box.sites_cart)
    ph = pdb_inp.construct_hierarchy()
    if (all_single_atom_residues(ph=ph)): return None
    raw_recs = ph.as_pdb_string(
        crystal_symmetry=box.crystal_symmetry()).splitlines()
    #
    params = monomer_library.pdb_interpretation.master_params.extract()
    params.clash_guard.nonbonded_distance_threshold = None
    params.disable_uc_volume_vs_n_atoms_check = False
    params.use_neutron_distances = True
    params.restraints_library.cdl = False
    processed_pdb_file = monomer_library.pdb_interpretation.process(
        mon_lib_srv=mon_lib_srv,
        ener_lib=ener_lib,
        raw_records=raw_recs,
        params=params,
        log=null_out())
    xrs = processed_pdb_file.xray_structure()
    sctr_keys = xrs.scattering_type_registry().type_count_dict().keys()
    has_hd = "H" in sctr_keys or "D" in sctr_keys
    restraints_manager = processed_pdb_file.geometry_restraints_manager(
        show_energies=False,
        assume_hydrogens_all_missing=not has_hd,
        plain_pairs_radius=5.0)
    a_mean, b_mean = get_bonds_angles_rmsd(
        restraints_manager=restraints_manager, xrs=xrs)
    energies_sites = \
      restraints_manager.energies_sites(
        sites_cart        = xrs.sites_cart(),
        compute_gradients = False)
    nonbonded_distances = energies_sites.nonbonded_distances()
    number_of_worst_clashes = (nonbonded_distances < 0.5).count(True)
    #
    ramalyze_obj = ramalyze(pdb_hierarchy=ph, outliers_only=False)
    ramachandran_outliers = ramalyze_obj.percent_outliers
    rotamer_outliers = rotalyze(pdb_hierarchy=ph,
                                outliers_only=False).percent_outliers
    c_beta_dev = cbetadev(pdb_hierarchy=ph, outliers_only=True,
                          out=null_out()).get_outlier_count()
    omglz = omegalyze.omegalyze(pdb_hierarchy=ph, quiet=True)
    n_cis_proline = omglz.n_cis_proline()
    n_cis_general = omglz.n_cis_general()
    n_twisted_proline = omglz.n_twisted_proline()
    n_twisted_general = omglz.n_twisted_general()
    #
    clsc = clashscore(pdb_hierarchy=ph).get_clashscore()
    mpscore = molprobity_score(clashscore=clsc,
                               rota_out=rotamer_outliers,
                               rama_fav=ramalyze_obj.percent_favored)
    #
    occ = atoms.extract_occ()
    bs = atoms.extract_b()
    #
    return group_args(b_mean=b_mean,
                      a_mean=a_mean,
                      number_of_worst_clashes=number_of_worst_clashes,
                      ramachandran_outliers=ramachandran_outliers,
                      rotamer_outliers=rotamer_outliers,
                      c_beta_dev=c_beta_dev,
                      n_cis_proline=n_cis_proline,
                      n_cis_general=n_cis_general,
                      n_twisted_proline=n_twisted_proline,
                      n_twisted_general=n_twisted_general,
                      o=occ.min_max_mean().as_tuple(),
                      b=bs.min_max_mean().as_tuple(),
                      mpscore=mpscore,
                      clsc=clsc,
                      n_atoms=atoms.size())
Esempio n. 11
0
def make_multikin(f, processed_pdb_file, pdbID=None, keep_hydrogens=False):
  if pdbID == None:
    pdbID = "PDB"
  hierarchy = processed_pdb_file.all_chain_proxies.pdb_hierarchy
  i_seq_name_hash = build_name_hash(pdb_hierarchy=hierarchy)
  sites_cart=processed_pdb_file.all_chain_proxies.sites_cart
  geometry = processed_pdb_file.geometry_restraints_manager()
  flags = geometry_restraints.flags.flags(default=True)
  angle_proxies = geometry.angle_proxies
  pair_proxies = geometry.pair_proxies(flags=flags,
                                       sites_cart=sites_cart)
  bond_proxies = pair_proxies.bond_proxies
  quick_bond_hash = {}
  for bp in bond_proxies.simple:
    if (i_seq_name_hash[bp.i_seqs[0]][9:14] ==
        i_seq_name_hash[bp.i_seqs[1]][9:14]):
      if quick_bond_hash.get(bp.i_seqs[0]) is None:
        quick_bond_hash[bp.i_seqs[0]] = []
      quick_bond_hash[bp.i_seqs[0]].append(bp.i_seqs[1])
  kin_out = get_default_header()
  altid_controls = get_altid_controls(hierarchy=hierarchy)
  if altid_controls != "":
    kin_out += altid_controls
  kin_out += "@group {%s} dominant animate\n" % pdbID
  initiated_chains = []
  rot_outliers = rotalyze(pdb_hierarchy=hierarchy, outliers_only=True)
  cb = cbetadev(
    pdb_hierarchy=hierarchy,
    outliers_only=True)
  rama = ramalyze(pdb_hierarchy=hierarchy, outliers_only=True)
  counter = 0
  for model in hierarchy.models():
    for chain in model.chains():
      if chain.id not in initiated_chains:
        kin_out += "@subgroup {%s} dominant master= {chain %s}\n" % (
                  pdbID,
                  chain.id)
        initiated_chains.append(chain.id)
      kin_out += get_kin_lots(chain=chain,
                              bond_hash=quick_bond_hash,
                              i_seq_name_hash=i_seq_name_hash,
                              pdbID=pdbID,
                              index=counter)
      if (chain.is_protein()) :
        kin_out += rotamer_outliers(chain=chain, pdbID=pdbID,
          rot_outliers=rot_outliers)
        kin_out += rama_outliers(chain=chain, pdbID=pdbID, ram_outliers=rama)
      # TODO use central methods in mmtbx.validation.restraints
      kin_out += get_angle_outliers(angle_proxies=angle_proxies,
                                    chain=chain,
                                    sites_cart=sites_cart,
                                    hierarchy=hierarchy)
      kin_out += get_bond_outliers(bond_proxies=bond_proxies,
                                   chain=chain,
                                   sites_cart=sites_cart,
                                   hierarchy=hierarchy)
      if (chain.is_protein()) :
        kin_out += cbeta_dev(chain_id=chain.id,
          outliers=cb.results)
      kin_out += pperp_outliers(hierarchy=hierarchy,
                                chain=chain)
      counter += 1
  kin_out += omegalyze.omegalyze(pdb_hierarchy=hierarchy,nontrans_only=True,
    out=None,quiet=False).as_kinemage()
  kin_out += make_probe_dots(hierarchy=hierarchy, keep_hydrogens=keep_hydrogens)
  kin_out += get_footer()

  outfile = file(f, 'w')
  for line in kin_out:
    outfile.write(line)
  outfile.close()
  return f
Esempio n. 12
0
def export_molprobity_result_as_kinemage (
    result,
    pdb_hierarchy,
    geometry,
    probe_file,
    keep_hydrogens=False,
    pdbID="PDB") :
  assert (result.restraints is not None)
  i_seq_name_hash = build_name_hash(pdb_hierarchy=pdb_hierarchy)
  sites_cart = pdb_hierarchy.atoms().extract_xyz()
  flags = geometry_restraints.flags.flags(default=True)
  angle_proxies = geometry.angle_proxies
  pair_proxies = geometry.pair_proxies(flags=flags,
                                       sites_cart=sites_cart)
  bond_proxies = pair_proxies.bond_proxies
  quick_bond_hash = {}
  for bp in bond_proxies.simple:
    if (i_seq_name_hash[bp.i_seqs[0]][9:14] ==
        i_seq_name_hash[bp.i_seqs[1]][9:14]):
      if quick_bond_hash.get(bp.i_seqs[0]) is None:
        quick_bond_hash[bp.i_seqs[0]] = []
      quick_bond_hash[bp.i_seqs[0]].append(bp.i_seqs[1])
  kin_out = get_default_header()
  altid_controls = get_altid_controls(hierarchy=pdb_hierarchy)
  if altid_controls != "":
    kin_out += altid_controls
  kin_out += "@group {%s} dominant animate\n" % pdbID
  initiated_chains = []
  counter = 0
  for model in pdb_hierarchy.models():
    for chain in model.chains():
      if chain.id not in initiated_chains:
        kin_out += "@subgroup {%s} dominant master= {chain %s}\n" % (
                  pdbID,
                  chain.id)
        initiated_chains.append(chain.id)
      kin_out += get_kin_lots(chain=chain,
                              bond_hash=quick_bond_hash,
                              i_seq_name_hash=i_seq_name_hash,
                              pdbID=pdbID,
                              index=counter)
      if (chain.is_protein()) :
        assert (not None in [result.rotalyze, result.ramalyze])
        kin_out += rotamer_outliers(chain=chain,
          pdbID=pdbID,
          rot_outliers=result.rotalyze)
        kin_out += rama_outliers(chain=chain,
          pdbID=pdbID,
          ram_outliers=result.ramalyze)
      kin_out += result.restraints.as_kinemage(chain_id=chain.id)
      if (chain.is_protein()) :
        assert (result.cbetadev is not None)
        kin_out += result.cbetadev.as_kinemage(chain_id=chain.id)
      kin_out += pperp_outliers(hierarchy=pdb_hierarchy,
                                chain=chain)
      counter += 1
  kin_out += omegalyze.omegalyze(pdb_hierarchy=pdb_hierarchy,nontrans_only=True,
    out=None,quiet=False).as_kinemage()
  kin_out += make_probe_dots(hierarchy=pdb_hierarchy,
    keep_hydrogens=keep_hydrogens)
  kin_out += get_footer()
  return kin_out
Esempio n. 13
0
  def __init__ (self,
      pdb_hierarchy,
      xray_structure=None,
      fmodel=None,
      fmodel_neutron=None,
      geometry_restraints_manager=None,
      crystal_symmetry=None,
      sequences=None,
      flags=None,
      header_info=None,
      raw_data=None,
      unmerged_data=None,
      all_chain_proxies=None,
      keep_hydrogens=True,
      nuclear=False,
      save_probe_unformatted_file=None,
      show_hydrogen_outliers=False,
      min_cc_two_fofc=0.8,
      n_bins_data=10,
      count_anomalous_pairs_separately=False,
      use_internal_variance=True,
      outliers_only=True,
      use_pdb_header_resolution_cutoffs=False,
      file_name=None,
      ligand_selection=None,
      rotamer_library="8000",
      map_params=None) :
    assert rotamer_library == "8000", "data_version given to RotamerEval not recognized."
    for name in self.__slots__ :
      setattr(self, name, None)
    # very important - the i_seq attributes may be extracted later
    pdb_hierarchy.atoms().reset_i_seq()
    self.pdb_hierarchy = pdb_hierarchy
    if (xray_structure is None) :
      if (fmodel is not None) :
        xray_structure = fmodel.xray_structure
      elif (crystal_symmetry is not None) :
        xray_structure = pdb_hierarchy.extract_xray_structure(
          crystal_symmetry=crystal_symmetry)
    self.crystal_symmetry = crystal_symmetry
    if (crystal_symmetry is None) and (fmodel is not None) :
      self.crystal_symmetry = fmodel.f_obs().crystal_symmetry()
    self.header_info = header_info
    if (flags is None) :
      flags = molprobity_flags()
    if pdb_hierarchy.contains_protein() :
      if (flags.ramalyze) :
        self.ramalyze = ramalyze.ramalyze(
          pdb_hierarchy=pdb_hierarchy,
          outliers_only=outliers_only,
          out=null_out(),
          quiet=True)
##### omegalyze ################################################################
      if (flags.omegalyze) :
        self.omegalyze = omegalyze.omegalyze(
          pdb_hierarchy=pdb_hierarchy,
          nontrans_only=outliers_only,
          out=null_out(),
          quiet=True)
##### omegalyze ################################################################
      if (flags.rotalyze) :
        self.rotalyze = rotalyze.rotalyze(
          pdb_hierarchy=pdb_hierarchy,
          data_version=rotamer_library,
          outliers_only=outliers_only,
          out=null_out(),
          quiet=True)
      if (flags.cbetadev) :
        self.cbetadev = cbetadev.cbetadev(
          pdb_hierarchy=pdb_hierarchy,
          outliers_only=outliers_only,
          out=null_out(),
          quiet=True)
      if (flags.nqh) :
        self.nqh_flips = clashscore.nqh_flips(
          pdb_hierarchy=pdb_hierarchy)
    if (pdb_hierarchy.contains_rna() and flags.rna and
        libtbx.env.has_module(name="suitename")) :
      if (geometry_restraints_manager is not None) :
        self.rna = rna_validate.rna_validation(
          pdb_hierarchy=pdb_hierarchy,
          geometry_restraints_manager=geometry_restraints_manager,
          outliers_only=outliers_only,
          params=None)
    if (flags.clashscore) :
      self.clashes = clashscore.clashscore(
        pdb_hierarchy=pdb_hierarchy,
        save_probe_unformatted_file=save_probe_unformatted_file,
        nuclear=nuclear,
        keep_hydrogens=keep_hydrogens,
        out=null_out(),
        verbose=False)
    if (flags.model_stats) and (xray_structure is not None) :
      self.model_stats = model_properties.model_statistics(
        pdb_hierarchy=pdb_hierarchy,
        xray_structure=xray_structure,
        all_chain_proxies=all_chain_proxies,
        ignore_hd=(not nuclear),
        ligand_selection=ligand_selection)
    if (geometry_restraints_manager is not None) and (flags.restraints) :
      assert (xray_structure is not None)
      self.restraints = restraints.combined(
        pdb_hierarchy=pdb_hierarchy,
        xray_structure=xray_structure,
        geometry_restraints_manager=geometry_restraints_manager,
        ignore_hd=(not nuclear),
        cdl=getattr(all_chain_proxies, "use_cdl", None))
    if (sequences is not None) and (flags.seq) :
      self.sequence = sequence.validation(
        pdb_hierarchy=pdb_hierarchy,
        sequences=sequences,
        log=null_out(),
        include_secondary_structure=True,
        extract_coordinates=True)

    # use maps (fmodel is not used)
    use_maps = False
    if (map_params is not None):
      use_maps = ( (map_params.input.maps.map_file_name) or
                   ( (map_params.input.maps.map_coefficients_file_name) and
                     (map_params.input.maps.map_coefficients_label) ) )
    if (use_maps):
      if (flags.real_space):
        self.real_space = experimental.real_space(
          fmodel=None,
          pdb_hierarchy=pdb_hierarchy,
          cc_min=min_cc_two_fofc,
          molprobity_map_params=map_params.input.maps)
      if (flags.waters):
        self.waters = waters.waters(
          pdb_hierarchy=pdb_hierarchy,
          xray_structure=xray_structure,
          fmodel=None,
          collect_all=True,
          molprobity_map_params=map_params.input.maps)

    if (fmodel is not None) :
      if (use_pdb_header_resolution_cutoffs) and (header_info is not None) :
        fmodel = fmodel.resolution_filter(
          d_min=header_info.d_min,
          d_max=header_info.d_max)
      if (flags.rfactors) :
        self.data_stats = experimental.data_statistics(fmodel,
          raw_data=raw_data,
          n_bins=n_bins_data,
          count_anomalous_pairs_separately=count_anomalous_pairs_separately)

      if (not use_maps): # if maps are used, keep previous results
        if (flags.real_space):
          self.real_space = experimental.real_space(
            fmodel=fmodel,
            pdb_hierarchy=pdb_hierarchy,
            cc_min=min_cc_two_fofc)
        if (flags.waters) :
          self.waters = waters.waters(
            pdb_hierarchy=pdb_hierarchy,
            xray_structure=xray_structure,
            fmodel=fmodel,
            collect_all=True)

      if (unmerged_data is not None) :
        self.merging = experimental.merging_and_model_statistics(
          f_obs=fmodel.f_obs(),
          f_model=fmodel.f_model(),
          r_free_flags=fmodel.r_free_flags(),
          unmerged_i_obs=unmerged_data,
          anomalous=count_anomalous_pairs_separately,
          use_internal_variance=use_internal_variance,
          n_bins=n_bins_data)
      if (flags.xtriage) :
        import mmtbx.scaling.xtriage
        f_model = abs(fmodel.f_model()).set_observation_type_xray_amplitude()
        if (raw_data is not None) :
          f_model, obs = f_model.common_sets(other=raw_data)
        else :
          obs = fmodel.f_obs()
        self.xtriage = mmtbx.scaling.xtriage.xtriage_analyses(
          miller_obs=obs,
          miller_calc=f_model,
          unmerged_obs=unmerged_data, # XXX some redundancy here...
          text_out=null_out())
    if (fmodel_neutron is not None) and (flags.rfactors) :
      self.neutron_stats = experimental.data_statistics(fmodel_neutron,
        n_bins=n_bins_data,
        count_anomalous_pairs_separately=False)
    if (pdb_hierarchy.models_size() == 1) :
      self._multi_criterion = multi_criterion_view(pdb_hierarchy)
Esempio n. 14
0
 def __init__(
     self,
     pdb_hierarchy,
     molprobity_scores=False,
     ):
   """ This class is being pickled. Try not to introduce huge members, e.g.
   self.hierarchy, etc. This is the reason ramalyze_obj, rotalyze_obj etc
   are not members of the class (not self.ramalyze_obj). """
   self.clashscore            = None
   self.ramachandran_outliers = None
   self.ramachandran_allowed  = None
   self.ramachandran_favored  = None
   self.rotamer_outliers      = None
   self.c_beta_dev            = None
   self.mpscore               = None
   self.omglz = None
   self.n_cis_proline = None
   self.n_cis_general = None
   self.n_twisted_proline = None
   self.n_twisted_general = None
   if(molprobity_scores):
     ramalyze_obj = ramalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False)
     self.ramachandran_outliers = ramalyze_obj.percent_outliers
     self.ramachandran_outliers_cf = ramalyze_obj.get_outliers_count_and_fraction()
     self.ramachandran_allowed  = ramalyze_obj.percent_allowed
     self.ramachandran_allowed_cf  = ramalyze_obj.get_allowed_count_and_fraction()
     self.ramachandran_favored  = ramalyze_obj.percent_favored
     self.ramachandran_favored_cf  = ramalyze_obj.get_favored_count_and_fraction()
     rotalyze_obj = rotalyze(pdb_hierarchy=pdb_hierarchy, outliers_only=False)
     self.rotamer_outliers = rotalyze_obj.percent_outliers
     self.rotamer_cf = rotalyze_obj.get_outliers_count_and_fraction()
     cbetadev_obj = cbetadev(
       pdb_hierarchy = pdb_hierarchy,
       outliers_only = True,
       out           = null_out())
     self.c_beta_dev = cbetadev_obj.get_outlier_count()
     self.c_beta_dev_percent = cbetadev_obj.get_weighted_outlier_percent()
     self.clashscore = clashscore(pdb_hierarchy=pdb_hierarchy).get_clashscore()
     self.mpscore = molprobity_score(
       clashscore = self.clashscore,
       rota_out   = self.rotamer_outliers,
       rama_fav   = self.ramachandran_favored)
     omglz = omegalyze.omegalyze(
       pdb_hierarchy=pdb_hierarchy, quiet=True)
     self.n_proline = omglz.n_proline()
     self.n_general = omglz.n_general()
     self.n_cis_proline = omglz.n_cis_proline()
     self.n_cis_general = omglz.n_cis_general()
     self.n_twisted_proline = omglz.n_twisted_proline()
     self.n_twisted_general = omglz.n_twisted_general()
     self.cis_general = 0
     self.twisted_general = 0
     self.cis_proline = 0
     self.twisted_proline = 0
     if self.n_proline != 0:
       self.cis_proline = self.n_cis_proline*100./self.n_proline
       self.twisted_proline = self.n_twisted_proline*100./self.n_proline
     if self.n_general != 0:
       self.cis_general = self.n_cis_general*100./self.n_general
       self.twisted_general = self.n_twisted_general*100./self.n_general
     self.cablam_outliers=None
     self.cablam_disfavored=None
     self.cablam_ca_outliers=None
     try:
       cablam_results = cablam.cablamalyze(pdb_hierarchy, outliers_only=False,
         out=null_out(), quiet=True)
       self.cablam_outliers = cablam_results.percent_outliers()
       self.cablam_disfavored = cablam_results.percent_disfavored()
       self.cablam_ca_outliers = cablam_results.percent_ca_outliers()
     except Exception as e:
       print "CaBLAM failed with exception:"
       print "  %s" % str(e)
       pass