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)
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([""]))
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)