def map_coefficients_from_fmodel( params, fmodel = None, map_calculation_server = None, post_processing_callback=None, pdb_hierarchy=None): assert [fmodel, map_calculation_server].count(None) == 1 from mmtbx import map_tools import mmtbx from cctbx import miller mnm = mmtbx.map_names(map_name_string = params.map_type) if(mnm.k==0 and abs(mnm.n)==1): # FIXME Fcalc maps require that fmodel is not None! if (fmodel is None) : fmodel = map_calculation_server.fmodel return compute_f_calc(fmodel, params) if(fmodel is not None and fmodel.is_twin_fmodel_manager() and mnm.phaser_sad_llg): return None if(fmodel is not None): e_map_obj = fmodel.electron_density_map() xrs = fmodel.xray_structure else: e_map_obj = map_calculation_server xrs = map_calculation_server.fmodel.xray_structure coeffs = None coeffs = e_map_obj.map_coefficients( map_type = params.map_type, acentrics_scale = params.acentrics_scale, centrics_pre_scale = params.centrics_pre_scale, fill_missing = params.fill_missing_f_obs, isotropize = params.isotropize, exclude_free_r_reflections=params.exclude_free_r_reflections, ncs_average=getattr(params, "ncs_average", False), post_processing_callback=post_processing_callback, pdb_hierarchy=pdb_hierarchy, merge_anomalous=True) if (coeffs is None) : return None if(params.sharpening): from mmtbx import map_tools coeffs, b_sharp = map_tools.sharp_map( sites_frac = xrs.sites_frac(), map_coeffs = coeffs, b_sharp = params.sharpening_b_factor) # XXX need to figure out why this happens if (coeffs is None) : raise RuntimeError(("Map coefficient generation failed (map_type=%s, " "sharpening=%s, isotropize=%s, anomalous=%s.") % (params.map_type, params.sharpening, params.isotropize, fmodel.f_obs().anomalous_flag())) if(coeffs.anomalous_flag()) : coeffs = coeffs.average_bijvoet_mates() return coeffs
def run (args, out=sys.stdout) : master_params = master_phil() usage_string = """\ mmtbx.compute_map_coefficients model.pdb data.mtz map_type=MAP_TYPE [options] Utility to compute a single set of map coefficients with minimal input. """ import mmtbx.command_line from mmtbx import map_tools import iotbx.mtz cmdline = mmtbx.command_line.load_model_and_data( args=args, master_phil=master_params, process_pdb_file=False, prefer_anomalous=True, usage_string=usage_string, set_wavelength_from_model_header=True, set_inelastic_form_factors="sasaki", out=out) fmodel = cmdline.fmodel xray_structure = fmodel.xray_structure params = cmdline.params map_coeffs = fmodel.map_coefficients( map_type=params.map_type, exclude_free_r_reflections=params.exclude_free_r_reflections, fill_missing=params.fill_missing_f_obs) if (params.b_sharp is not None) : if (params.b_sharp is Auto) : params.b_sharp = - map_coeffs.d_min() * 10 map_coeffs = map_tools.sharp_map( sites_frac=None, map_coeffs=map_coeffs, b_sharp=b_sharp) dec = iotbx.mtz.label_decorator(phases_prefix="PH") mtz_dataset = map_coeffs.as_mtz_dataset( column_root_label=map_type_labels[params.map_type], label_decorator=dec) if (params.output_file is Auto) : pdb_file = os.path.basename(params.input.pdb.file_name[0]) params.output_file = os.path.splitext(pdb_file)[0] + "_%s.mtz" % \ params.map_type mtz_dataset.mtz_object().write(params.output_file) print >> out, "Wrote %s" % params.output_file
def run(args, out=sys.stdout): master_params = master_phil() usage_string = """\ mmtbx.compute_map_coefficients model.pdb data.mtz map_type=MAP_TYPE [options] Utility to compute a single set of map coefficients with minimal input. """ import mmtbx.command_line from mmtbx import map_tools import iotbx.mtz cmdline = mmtbx.command_line.load_model_and_data( args=args, master_phil=master_params, process_pdb_file=False, prefer_anomalous=True, usage_string=usage_string, set_wavelength_from_model_header=True, set_inelastic_form_factors="sasaki", out=out) fmodel = cmdline.fmodel xray_structure = fmodel.xray_structure params = cmdline.params map_coeffs = fmodel.map_coefficients( map_type=params.map_type, exclude_free_r_reflections=params.exclude_free_r_reflections, fill_missing=params.fill_missing_f_obs) if (params.b_sharp is not None): if (params.b_sharp is Auto): params.b_sharp = - map_coeffs.d_min() * 10 map_coeffs = map_tools.sharp_map( sites_frac=None, map_coeffs=map_coeffs, b_sharp=b_sharp) dec = iotbx.mtz.label_decorator(phases_prefix="PH") mtz_dataset = map_coeffs.as_mtz_dataset( column_root_label=map_type_labels[params.map_type], label_decorator=dec) if (params.output_file is Auto): pdb_file = os.path.basename(params.input.pdb.file_name[0]) params.output_file = os.path.splitext(pdb_file)[0] + "_%s.mtz" % \ params.map_type mtz_dataset.mtz_object().write(params.output_file) print("Wrote %s" % params.output_file, file=out)