Esempio n. 1
0
def exercise():
  """ Compare simple mask (mmtbx/utils.h) with classic mask. Does not account
      for site multiplicity due to symmetry. Also, this is an alternative
      exercise for asu mask.
  """
  for i_pdb, pdb_str in enumerate([pdb_str_1, pdb_str_2, pdb_str_3]):
    for solvent_radius in [0, 1.0]:
      print "file %d solvent_raius: %3.1f"%(i_pdb, solvent_radius)
      xrs = iotbx.pdb.input(source_info = None,
        lines = pdb_str).xray_structure_simple()
      mp = mmtbx.masks.mask_master_params.extract()
      mp.solvent_radius=solvent_radius
      mp.shrink_truncation_radius=0.0
      mmtbx_masks_asu_mask_obj = mmtbx.masks.asu_mask(
        xray_structure = xrs.expand_to_p1(sites_mod_positive=True), # Must be P1
        d_min          = 1,
        mask_params    = mp)
      mask_data = mmtbx_masks_asu_mask_obj.mask_data_whole_uc()
      c1o,c0o,s,csf = mask_data.count(1), mask_data.count(0), mask_data.size(),\
        mmtbx_masks_asu_mask_obj.asu_mask.contact_surface_fraction
      assert c1o+c0o==s
      f1o, f0o = c1o*100./s, c0o*100./s
      print "  old", f1o, f0o, csf
      mask_data = maptbx.mask(
        xray_structure = xrs, # Expanded to P1 internally
        n_real         = mask_data.focus(),
        solvent_radius = solvent_radius)
      c1n, c0n, s = mask_data.count(1), mask_data.count(0), mask_data.size()
      assert c1n+c0n==s
      f1n, f0n = c1n*100./s, c0n*100./s
      print "  new:", f1n, f0n
      assert approx_equal(f1o, f1n, 1)
      assert approx_equal(f0o, f0n, 1)
      assert approx_equal(f1o, csf*100, 1)
Esempio n. 2
0
 def prepare_user_map(self):
     print >> self.log, "Preparing user map..."
     self.map_shift_manager = mmtbx.utils.shift_origin(
         map_data=self.user_supplied_map,
         xray_structure=self.model.get_xray_structure(),
         crystal_symmetry=self.cs)
     if (self.map_shift_manager.shift_cart is not None):
         # Need to figure out way to save the shift to shift back
         # and apply it to whole_pdb, master_pdb, etc. Don't forget about
         # boxing hierarchy when symmetry is not available or corrupted...
         raise Sorry(
             "Map origin is not at (0,0,0). This is not implemented for model_idealization"
         )
     map_data = self.map_shift_manager.map_data
     self.reference_map = map_data
     self.master_map = self.reference_map.deep_copy()
     if self.model.ncs_constraints_present():
         mask = maptbx.mask(
             xray_structure=self.model.get_xray_structure().select(
                 self.model.get_master_selection()),
             n_real=self.master_map.focus(),
             mask_value_inside_molecule=1,
             mask_value_outside_molecule=-1,
             solvent_radius=0,
             atom_radius=1.)
         self.master_map = self.reference_map * mask
         if self.params.debug:
             iotbx.ccp4_map.write_ccp4_map(
                 file_name="%s_3_master.map" % self.params.output_prefix,
                 unit_cell=self.cs.unit_cell(),
                 space_group=self.cs.space_group(),
                 map_data=self.master_map,
                 labels=flex.std_string([""]))
         self.master_map = map_data
  def prepare_reference_map_3(self):
    """ with ramachandran outliers """
    xrs = self.model.get_xray_structure().deep_copy_scatterers()
    pdb_h = self.model.get_hierarchy()
    print("Preparing reference map, method 3", file=self.log)
    outlier_selection_txt = mmtbx.building.loop_closure.utils. \
          rama_score_selection(pdb_h, self.model.get_ramachandran_manager(), "outlier",1)
    asc = self.model.get_atom_selection_cache()
    # print >> self.log, "rama outlier selection:", outlier_selection_txt
    rama_out_sel = asc.selection(outlier_selection_txt)
    xrs=xrs.set_b_iso(value=50)

    # side_chain_no_cb_selection = ~ xrs.main_chain_selection()
    side_chain_no_cb_selection = ~ xrs.backbone_selection()
    xrs = xrs.set_b_iso(value=200, selection=side_chain_no_cb_selection)
    xrs = xrs.set_b_iso(value=150, selection=rama_out_sel)
    # xrs = xrs.set_occupancies(value=0.3, selection=rama_out_sel)

    crystal_gridding = maptbx.crystal_gridding(
        unit_cell        = xrs.unit_cell(),
        space_group_info = xrs.space_group_info(),
        symmetry_flags   = maptbx.use_space_group_symmetry,
        d_min             = self.params.reference_map_resolution)
    fc = xrs.structure_factors(
        d_min = self.params.reference_map_resolution,
        algorithm = "direct").f_calc()
    fft_map = miller.fft_map(
        crystal_gridding=crystal_gridding,
        fourier_coefficients=fc)
    fft_map.apply_sigma_scaling()
    self.reference_map = fft_map.real_map_unpadded(in_place=False)
    if self.params.debug:
      fft_map.as_xplor_map(file_name="%s_3.map" % self.params.output_prefix)
    self.master_map = self.reference_map.deep_copy()
    if self.model.ncs_constraints_present():
      # here we are negating non-master part of the model
      # self.master_sel=master_sel
      # self.master_map = self.reference_map.deep_copy()
      mask = maptbx.mask(
              xray_structure=xrs.select(self.model.get_master_selection()),
              n_real=self.master_map.focus(),
              mask_value_inside_molecule=1,
              mask_value_outside_molecule=-1,
              solvent_radius=0,
              atom_radius=1.)
      self.master_map = self.reference_map * mask
      if self.params.debug:
        iotbx.mrcfile.write_ccp4_map(
            file_name="%s_3_master.map" % self.params.output_prefix,
            unit_cell=xrs.unit_cell(),
            space_group=xrs.space_group(),
            map_data=self.master_map,
            labels=flex.std_string([""]))
Esempio n. 4
0
def exercise():
    """ Compare simple mask (maptbx/mask.h) with classic mask. Does not account
      for site multiplicity due to symmetry. Also, this is an alternative
      exercise for asu mask.
  """
    for i_pdb, pdb_str in enumerate([pdb_str_1, pdb_str_2, pdb_str_3]):
        for solvent_radius in [0, 1.0]:
            print("file %d solvent_raius: %3.1f" % (i_pdb, solvent_radius))
            xrs = iotbx.pdb.input(source_info=None,
                                  lines=pdb_str).xray_structure_simple()
            mp = mmtbx.masks.mask_master_params.extract()
            mp.solvent_radius = solvent_radius
            mp.shrink_truncation_radius = 0.0
            mp.grid_step_factor = 4
            mmtbx_masks_asu_mask_obj = mmtbx.masks.asu_mask(
                xray_structure=xrs.expand_to_p1(
                    sites_mod_positive=True),  # Must be P1
                d_min=1,
                mask_params=mp)
            mask_data = mmtbx_masks_asu_mask_obj.mask_data_whole_uc()
            c1o,c0o,s,csf = mask_data.count(1), mask_data.count(0), mask_data.size(),\
              mmtbx_masks_asu_mask_obj.asu_mask.contact_surface_fraction
            assert c1o + c0o == s
            f1o, f0o = c1o * 100. / s, c0o * 100. / s
            print("  old", f1o, f0o, csf)
            mask_data = maptbx.mask(
                xray_structure=xrs,  # Expanded to P1 internally
                n_real=mask_data.focus(),
                solvent_radius=solvent_radius)
            c1n, c0n, s = mask_data.count(1), mask_data.count(
                0), mask_data.size()
            assert c1n + c0n == s
            f1n, f0n = c1n * 100. / s, c0n * 100. / s
            print("  new:", f1n, f0n)
            assert approx_equal(f1o, f1n, 1)
            assert approx_equal(f0o, f0n, 1)
            assert approx_equal(f1o, csf * 100, 1)