Example #1
0
 def __init__(self,
              pdb_hierarchy,
              xray_structure,
              geometry_restraints_manager,
              ignore_hd=True,
              sigma_cutoff=4.0,
              outliers_only=True,
              use_segids_in_place_of_chainids=False,
              cdl=None):
     self._use_cdl = cdl
     from mmtbx import restraints
     restraints_manager = restraints.manager(
         geometry=geometry_restraints_manager)
     sites_cart = xray_structure.sites_cart()
     hd_selection = xray_structure.hd_selection()
     pdb_atoms = pdb_hierarchy.atoms()
     if (ignore_hd and hd_selection.count(True) > 0):
         restraints_manager = restraints_manager.select(
             selection=~hd_selection)
         sites_cart = sites_cart.select(~hd_selection)
         pdb_atoms = pdb_atoms.select(~hd_selection)
     energies_sites = restraints_manager.energies_sites(
         sites_cart=sites_cart, compute_gradients=False).geometry
     for geo_type in self.__geo_types__:
         restraint_validation_class = globals()[geo_type]
         if (geo_type == "bonds"):
             restraint_proxies = restraints_manager.geometry.pair_proxies(
                 sites_cart=sites_cart).bond_proxies
         else:
             restraint_proxies = getattr(
                 restraints_manager.geometry,
                 "%s_proxies" % restraint_validation_class.restraint_type)
         rv = restraint_validation_class(
             pdb_atoms=pdb_atoms,
             sites_cart=sites_cart,
             energies_sites=energies_sites,
             restraint_proxies=restraint_proxies,
             unit_cell=xray_structure.unit_cell(),
             ignore_hd=ignore_hd,
             sigma_cutoff=sigma_cutoff,
             outliers_only=outliers_only,
             use_segids_in_place_of_chainids=use_segids_in_place_of_chainids
         )
         setattr(self, geo_type, rv)
Example #2
0
 def __init__ (self,
     pdb_hierarchy,
     xray_structure,
     geometry_restraints_manager,
     ignore_hd=True,
     sigma_cutoff=4.0,
     outliers_only=True,
     use_segids_in_place_of_chainids=False,
     cdl=None) :
   self._use_cdl = cdl
   from mmtbx import restraints
   restraints_manager = restraints.manager(
     geometry=geometry_restraints_manager)
   sites_cart = xray_structure.sites_cart()
   hd_selection = xray_structure.hd_selection()
   pdb_atoms = pdb_hierarchy.atoms()
   if (ignore_hd and hd_selection.count(True) > 0) :
     restraints_manager = restraints_manager.select(selection = ~hd_selection)
     sites_cart = sites_cart.select(~hd_selection)
     pdb_atoms = pdb_atoms.select(~hd_selection)
   energies_sites = restraints_manager.energies_sites(
     sites_cart=sites_cart,
     compute_gradients=False).geometry
   for geo_type in self.__geo_types__ :
     restraint_validation_class = globals()[geo_type]
     if (geo_type == "bonds" ) :
       restraint_proxies = restraints_manager.geometry.pair_proxies(
         sites_cart=sites_cart).bond_proxies
     else :
       restraint_proxies = getattr(restraints_manager.geometry,
         "%s_proxies" % restraint_validation_class.restraint_type)
     rv = restraint_validation_class(
       pdb_atoms=pdb_atoms,
       sites_cart=sites_cart,
       energies_sites=energies_sites,
       restraint_proxies=restraint_proxies,
       unit_cell=xray_structure.unit_cell(),
       ignore_hd=ignore_hd,
       sigma_cutoff=sigma_cutoff,
       outliers_only=outliers_only,
       use_segids_in_place_of_chainids=use_segids_in_place_of_chainids)
     setattr(self, geo_type, rv)
Example #3
0
def build_cycle(pdb_hierarchy,
                fmodel,
                geometry_restraints_manager,
                params,
                selection=None,
                cif_objects=(),
                nproc=Auto,
                out=sys.stdout,
                verbose=False,
                debug=None,
                i_cycle=0):
    from mmtbx import restraints
    from scitbx.array_family import flex
    t_start = time.time()
    hd_sel = fmodel.xray_structure.hd_selection()
    n_hydrogen = hd_sel.count(True)
    if (n_hydrogen > 0) and (True):  #params.building.delete_hydrogens):
        print("WARNING: %d hydrogen atoms will be removed!" % n_hydrogen,
              file=out)
        non_hd_sel = ~hd_sel
        # XXX it's better to do this in-place for the hierarchy, because calling
        # pdb_hierarchy.select(non_hd_sel) will not remove parent-child
        # relationships involving hydrogens, which causes problems when running
        # the MolProbity validation.
        pdb_hierarchy.remove_hd(reset_i_seq=True)
        xray_structure = fmodel.xray_structure.select(non_hd_sel)
        assert (
            pdb_hierarchy.atoms_size() == xray_structure.scatterers().size())
        fmodel.update_xray_structure(xray_structure)
        geometry_restraints_manager = geometry_restraints_manager.select(
            non_hd_sel)
    pdb_atoms = pdb_hierarchy.atoms()
    segids = pdb_atoms.extract_segid().strip()
    if (not segids.all_eq("")):
        print("WARNING: resetting segids to blank", file=out)
        for i_seq, atom in enumerate(pdb_atoms):
            atom.segid = ""
            sc = fmodel.xray_structure.scatterers()[i_seq]
            sc.label = atom.id_str()
    if isinstance(selection, str):
        sele_cache = pdb_hierarchy.atom_selection_cache()
        selection = sele_cache.selection(selection)
    make_header("Build cycle %d" % (i_cycle + 1), out=out)
    fmodel.info().show_rfactors_targets_scales_overall(out=out)
    if (debug > 0):
        from mmtbx.maps.utils import get_maps_from_fmodel
        from iotbx.map_tools import write_map_coeffs
        two_fofc, fofc = get_maps_from_fmodel(fmodel,
                                              exclude_free_r_reflections=True)
        write_map_coeffs(fwt_coeffs=two_fofc,
                         delfwt_coeffs=fofc,
                         file_name="cycle_%d_start.mtz" % (i_cycle + 1))
    candidate_residues = alt_confs.filter_before_build(
        pdb_hierarchy=pdb_hierarchy,
        fmodel=fmodel,
        geometry_restraints_manager=geometry_restraints_manager,
        selection=selection,
        params=params.prefilter,
        verbose=verbose,
        log=out)
    t1 = time.time()
    print("filtering: %.3fs" % (t1 - t_start), file=out)
    restraints_manager = restraints.manager(
        geometry=geometry_restraints_manager, normalization=True)
    make_sub_header("Finding alternate conformations", out=out)
    building_trials = find_all_alternates(
        residues=candidate_residues,
        pdb_hierarchy=pdb_hierarchy,
        restraints_manager=restraints_manager,
        fmodel=fmodel,
        params=params.residue_fitting,
        nproc=params.nproc,
        verbose=verbose,
        debug=debug,
        log=out).results
    t2 = time.time()
    print("  building: %.3fs" % (t2 - t1), file=out)
    make_sub_header("Scoring and assembling alternates", out=out)
    n_alternates = process_results(pdb_hierarchy=pdb_hierarchy,
                                   fmodel=fmodel,
                                   residues_in=candidate_residues,
                                   building_trials=building_trials,
                                   params=params.residue_fitting,
                                   verbose=verbose,
                                   log=out)
    if (n_alternates > 0):
        print("", file=out)
        print("  %d disordered residues built" % n_alternates, file=out)
        n_split = alt_confs.spread_alternates(
            pdb_hierarchy,
            new_occupancy=params.residue_fitting.expected_occupancy,
            split_all_adjacent=True,
            log=out)
        assert (n_split > 0)
        print("  %d adjacent residues split" % n_split, file=out)
    else:
        print("No alternates built this round.", file=out)
    t3 = time.time()
    print("  assembly: %.3fs" % (t3 - t2), file=out)
    if (not params.cleanup.rsr_after_build):
        if (n_alternates > 0):
            print("Skipping final RSR step (rsr_after_build=False).", file=out)
        else:
            print("No refinement needs to be performed.", file=out)
    else:
        make_sub_header("Real-space refinement", out=out)
        print("", file=out)
        pdb_hierarchy = real_space_refine(pdb_hierarchy=pdb_hierarchy,
                                          fmodel=fmodel,
                                          cif_objects=cif_objects,
                                          params=params,
                                          nproc=params.nproc,
                                          remediate=True,
                                          out=out)
        t4 = time.time()
        print("", file=out)
        print("RSR: %.3fs" % (t4 - t3), file=out)
    fmodel.info().show_targets(out=out, text="Rebuilt model")
    t_end = time.time()
    alt_confs.finalize_model(
        pdb_hierarchy=pdb_hierarchy,
        xray_structure=pdb_hierarchy.extract_xray_structure(
            crystal_symmetry=fmodel.xray_structure),
        set_b_iso=params.cleanup.set_b_iso,
        convert_to_isotropic=params.cleanup.convert_to_isotropic,
        selection="altloc A or altloc B")
    t_end = time.time()
    print("Total runtime for cycle: %.3fs" % (t_end - t_start), file=out)
    return pdb_hierarchy, n_alternates
Example #4
0
def build_cycle (pdb_hierarchy,
    fmodel,
    geometry_restraints_manager,
    params,
    selection=None,
    cif_objects=(),
    nproc=Auto,
    out=sys.stdout,
    verbose=False,
    debug=None,
    i_cycle=0) :
  from mmtbx import restraints
  from scitbx.array_family import flex
  t_start = time.time()
  hd_sel = fmodel.xray_structure.hd_selection()
  n_hydrogen = hd_sel.count(True)
  if (n_hydrogen > 0) and (True) : #params.building.delete_hydrogens) :
    print >> out, "WARNING: %d hydrogen atoms will be removed!" % n_hydrogen
    non_hd_sel = ~hd_sel
    # XXX it's better to do this in-place for the hierarchy, because calling
    # pdb_hierarchy.select(non_hd_sel) will not remove parent-child
    # relationships involving hydrogens, which causes problems when running
    # the MolProbity validation.
    pdb_hierarchy.remove_hd(reset_i_seq=True)
    xray_structure = fmodel.xray_structure.select(non_hd_sel)
    assert (pdb_hierarchy.atoms_size() == xray_structure.scatterers().size())
    fmodel.update_xray_structure(xray_structure)
    geometry_restraints_manager = geometry_restraints_manager.select(non_hd_sel)
  pdb_atoms = pdb_hierarchy.atoms()
  segids = pdb_atoms.extract_segid().strip()
  if (not segids.all_eq("")) :
    print >> out, "WARNING: resetting segids to blank"
    for i_seq, atom in enumerate(pdb_atoms) :
      atom.segid = ""
      sc = fmodel.xray_structure.scatterers()[i_seq]
      sc.label = atom.id_str()
  if isinstance(selection, str) :
    sele_cache = pdb_hierarchy.atom_selection_cache()
    selection = sele_cache.selection(selection)
  make_header("Build cycle %d" % (i_cycle+1), out=out)
  fmodel.info().show_rfactors_targets_scales_overall(out=out)
  if (debug > 0) :
    from mmtbx.maps.utils import get_maps_from_fmodel
    from iotbx.map_tools import write_map_coeffs
    two_fofc, fofc = get_maps_from_fmodel(fmodel,
      exclude_free_r_reflections=True)
    write_map_coeffs(
      fwt_coeffs=two_fofc,
      delfwt_coeffs=fofc,
      file_name="cycle_%d_start.mtz" % (i_cycle+1))
  candidate_residues = alt_confs.filter_before_build(
    pdb_hierarchy=pdb_hierarchy,
    fmodel=fmodel,
    geometry_restraints_manager=geometry_restraints_manager,
    selection=selection,
    params=params.prefilter,
    verbose=verbose,
    log=out)
  t1 = time.time()
  print >> out, "filtering: %.3fs" % (t1-t_start)
  restraints_manager = restraints.manager(
    geometry=geometry_restraints_manager,
    normalization=True)
  make_sub_header("Finding alternate conformations", out=out)
  building_trials = find_all_alternates(
    residues=candidate_residues,
    pdb_hierarchy=pdb_hierarchy,
    restraints_manager=restraints_manager,
    fmodel=fmodel,
    params=params.residue_fitting,
    nproc=params.nproc,
    verbose=verbose,
    debug=debug,
    log=out).results
  t2 = time.time()
  print >> out, "  building: %.3fs" % (t2-t1)
  make_sub_header("Scoring and assembling alternates", out=out)
  n_alternates = process_results(
    pdb_hierarchy=pdb_hierarchy,
    fmodel=fmodel,
    residues_in=candidate_residues,
    building_trials=building_trials,
    params=params.residue_fitting,
    verbose=verbose,
    log=out)
  if (n_alternates > 0) :
    print >> out, ""
    print >> out, "  %d disordered residues built" % n_alternates
    n_split = alt_confs.spread_alternates(pdb_hierarchy,
      new_occupancy=params.residue_fitting.expected_occupancy,
      split_all_adjacent=True,
      log=out)
    assert (n_split > 0)
    print >> out, "  %d adjacent residues split" % n_split
  else :
    print >> out, "No alternates built this round."
  t3 = time.time()
  print >> out, "  assembly: %.3fs" % (t3-t2)
  if (not params.cleanup.rsr_after_build) :
    if (n_alternates > 0) :
      print >> out, "Skipping final RSR step (rsr_after_build=False)."
    else :
      print >> out, "No refinement needs to be performed."
  else :
    make_sub_header("Real-space refinement", out=out)
    print >> out, ""
    pdb_hierarchy = real_space_refine(
      pdb_hierarchy=pdb_hierarchy,
      fmodel=fmodel,
      cif_objects=cif_objects,
      params=params,
      nproc=params.nproc,
      remediate=True,
      out=out)
    t4 = time.time()
    print >> out, ""
    print >> out, "RSR: %.3fs" % (t4-t3)
  fmodel.info().show_targets(out=out, text="Rebuilt model")
  t_end = time.time()
  alt_confs.finalize_model(
    pdb_hierarchy=pdb_hierarchy,
    xray_structure=pdb_hierarchy.extract_xray_structure(
      crystal_symmetry=fmodel.xray_structure),
    set_b_iso=params.cleanup.set_b_iso,
    convert_to_isotropic=params.cleanup.convert_to_isotropic,
    selection="altloc A or altloc B")
  t_end = time.time()
  print >> out, "Total runtime for cycle: %.3fs" % (t_end-t_start)
  return pdb_hierarchy, n_alternates