def run (args, out=sys.stdout, program_name="phenix.molprobity", ignore_missing_modules=False, return_input_objects=False) : # for testing rotarama_dir = libtbx.env.find_in_repositories( relative_path="chem_data/rotarama_data", test=os.path.isdir) if (rotarama_dir is None) : raise ImportError("Rotamer and Ramachandran distributions not available; "+ "you will need these to run MolProbity.") elif (((not libtbx.env.has_module("reduce")) or (not libtbx.env.has_module("probe"))) and (not ignore_missing_modules)) : raise ImportError("Reduce and/or Probe not configured.") import mmtbx.validation.molprobity import mmtbx.command_line cmdline = mmtbx.command_line.load_model_and_data( args=args, master_phil=get_master_phil(), require_data=False, create_fmodel=True, process_pdb_file=True, usage_string=usage_string, prefer_anomalous=True, out=out) params = cmdline.params fmodel = cmdline.fmodel if (params.output.maps is Auto) and (fmodel is not None) : params.output.maps = True elif (params.output.maps == True) and (fmodel is None) : raise Sorry("Map output requires experimental data.") if (params.molprobity.keep_hydrogens is Auto) : params.molprobity.keep_hydrogens = \ ( (params.input.scattering_table == "neutron") or (params.pdb_interpretation.use_neutron_distances) ) header_info = mmtbx.validation.molprobity.pdb_header_info( pdb_file=params.input.pdb.file_name[0], pdb_hierarchy=cmdline.pdb_hierarchy) pdb_prefix = os.path.splitext(os.path.basename( params.input.pdb.file_name[0]))[0] if (params.output.prefix is None) : params.output.prefix = "molprobity" probe_file = None if (params.output.probe_dots) or (params.output.kinemage) : probe_file = params.output.prefix + "_probe.txt" raw_data = cmdline.raw_data # check map parameters from mmtbx.real_space_correlation import check_map_file check_map_file(None, params.input.maps) validation = mmtbx.validation.molprobity.molprobity( model=cmdline.model, fmodel=fmodel, flags=params.molprobity.flags, sequences=cmdline.sequence, raw_data=cmdline.raw_data, unmerged_data=cmdline.unmerged_i_obs, header_info=header_info, keep_hydrogens=params.molprobity.keep_hydrogens, nuclear=params.pdb_interpretation.use_neutron_distances, save_probe_unformatted_file=probe_file, min_cc_two_fofc=params.molprobity.min_cc_two_fofc, n_bins_data=params.molprobity.n_bins, outliers_only=params.molprobity.outliers_only, use_pdb_header_resolution_cutoffs=\ params.molprobity.use_pdb_header_resolution_cutoffs, count_anomalous_pairs_separately=\ params.molprobity.count_anomalous_pairs_separately, use_internal_variance=params.input.unmerged_data.use_internal_variance, file_name=params.input.pdb.file_name[0], ligand_selection=params.molprobity.ligand_selection, rotamer_library=params.molprobity.rotamer_library, map_params=params) map_file = None # model cannot be pickled validation.model = None # polygon statistics validation.polygon_stats = validation.get_polygon_statistics( params.polygon.keys_to_show) if ('pdb_header_r_work' in params.polygon.keys_to_show): validation.polygon_stats['pdb_header_r_work'] = header_info.r_work if ('pdb_header_r_free' in params.polygon.keys_to_show): validation.polygon_stats['pdb_header_r_free'] = header_info.r_free if (not params.output.quiet) : out2 = multi_out() out2.register("stdout", out) f = open(params.output.prefix + ".out", "w") out2.register("txt_out", f) validation.show(out=out2, outliers_only=params.molprobity.outliers_only, show_percentiles=params.output.percentiles) f.close() print >> out, "" print >> out, "Results written to %s.out" % params.output.prefix if (params.output.kinemage) : if (cmdline.pdb_hierarchy.models_size() == 1) : assert (probe_file is not None) import mmtbx.kinemage.validation cmdline.pdb_hierarchy.atoms().reset_i_seq() kin_file = "%s.kin" % params.output.prefix kin_out = \ mmtbx.kinemage.validation.export_molprobity_result_as_kinemage( result=validation, pdb_hierarchy=cmdline.pdb_hierarchy, geometry=cmdline.geometry, probe_file=probe_file, keep_hydrogens=params.molprobity.keep_hydrogens, pdbID=pdb_prefix) f = open(kin_file, "w") f.write(kin_out) f.close() if (not params.output.quiet) : print >> out, "Wrote kinemage to %s" % kin_file else : print >> out, "Kinemage output not available for multiple MODELs." if (params.output.pickle) : easy_pickle.dump("%s.pkl" % params.output.prefix, validation) if (not params.output.quiet) : print >> out, "Saved result to %s.pkl" % params.output.prefix if (params.output.coot) : coot_file = "%s_coot.py" % params.output.prefix validation.write_coot_script(coot_file) if (not params.output.quiet) : print >> out, "Wrote script for Coot: %s" % coot_file if (params.output.maps == True) : import mmtbx.maps.utils import iotbx.map_tools map_file = "%s_maps.mtz" % params.output.prefix two_fofc_map, fofc_map = mmtbx.maps.utils.get_maps_from_fmodel( fmodel=fmodel, fill_missing_f_obs=params.output.map_options.fill_missing_f_obs, exclude_free_r_reflections=\ params.output.map_options.exclude_free_r_reflections) anom_map = None if (fmodel.f_obs().anomalous_flag()) : anom_map = mmtbx.maps.utils.get_anomalous_map(fmodel) iotbx.map_tools.write_map_coeffs( file_name=map_file, fwt_coeffs=two_fofc_map, delfwt_coeffs=fofc_map, anom_coeffs=anom_map) print >> out, "Wrote map coefficients to %s" % map_file else : print >> out, "" validation.show_summary(out=out, show_percentiles=params.output.percentiles) if (params.output.wxplots) : try : import wxtbx.app except ImportError, e : raise Sorry("wxPython not available.") else : app = wxtbx.app.CCTBXApp(0) validation.display_wx_plots() app.MainLoop()
def run (args, out=sys.stdout, program_name="phenix.molprobity", ignore_missing_modules=False, return_input_objects=False) : # for testing rotarama_dir = libtbx.env.find_in_repositories( relative_path="chem_data/rotarama_data", test=os.path.isdir) if (rotarama_dir is None) : raise ImportError("Rotamer and Ramachandran distributions not available; "+ "you will need these to run MolProbity.") elif (((not libtbx.env.has_module("reduce")) or (not libtbx.env.has_module("probe"))) and (not ignore_missing_modules)) : raise ImportError("Reduce and/or Probe not configured.") import mmtbx.validation.molprobity import mmtbx.command_line cmdline = mmtbx.command_line.load_model_and_data( args=args, master_phil=get_master_phil(), require_data=False, create_fmodel=True, process_pdb_file=True, usage_string=usage_string, prefer_anomalous=True, out=out) params = cmdline.params fmodel = cmdline.fmodel if (params.output.maps is Auto) and (fmodel is not None) : params.output.maps = True elif (params.output.maps == True) and (fmodel is None) : raise Sorry("Map output requires experimental data.") if (params.molprobity.keep_hydrogens is Auto) : params.molprobity.keep_hydrogens = \ (params.input.scattering_table == "neutron") header_info = mmtbx.validation.molprobity.pdb_header_info( pdb_file=params.input.pdb.file_name[0], pdb_hierarchy=cmdline.pdb_hierarchy) pdb_prefix = os.path.splitext(os.path.basename( params.input.pdb.file_name[0]))[0] if (params.output.prefix is None) : params.output.prefix = "molprobity" probe_file = None if (params.output.probe_dots) or (params.output.kinemage) : probe_file = params.output.prefix + "_probe.txt" raw_data = cmdline.raw_data # check map parameters from mmtbx.real_space_correlation import check_map_file check_map_file(None, params.input.maps) validation = mmtbx.validation.molprobity.molprobity( pdb_hierarchy=cmdline.pdb_hierarchy, xray_structure=cmdline.xray_structure, fmodel=fmodel, flags=params.molprobity.flags, crystal_symmetry=cmdline.crystal_symmetry, sequences=cmdline.sequence, geometry_restraints_manager=cmdline.geometry, raw_data=cmdline.raw_data, unmerged_data=cmdline.unmerged_i_obs, all_chain_proxies=cmdline.processed_pdb_file.all_chain_proxies, header_info=header_info, keep_hydrogens=params.molprobity.keep_hydrogens, nuclear=params.molprobity.nuclear, save_probe_unformatted_file=probe_file, min_cc_two_fofc=params.molprobity.min_cc_two_fofc, n_bins_data=params.molprobity.n_bins, outliers_only=params.molprobity.outliers_only, use_pdb_header_resolution_cutoffs=\ params.molprobity.use_pdb_header_resolution_cutoffs, count_anomalous_pairs_separately=\ params.molprobity.count_anomalous_pairs_separately, use_internal_variance=params.input.unmerged_data.use_internal_variance, file_name=params.input.pdb.file_name[0], ligand_selection=params.molprobity.ligand_selection, rotamer_library=params.molprobity.rotamer_library, map_params=params) map_file = None if (not params.output.quiet) : out2 = multi_out() out2.register("stdout", out) f = open(params.output.prefix + ".out", "w") out2.register("txt_out", f) validation.show(out=out2, outliers_only=params.molprobity.outliers_only, show_percentiles=params.output.percentiles) f.close() print >> out, "" print >> out, "Results written to %s.out" % params.output.prefix if (params.output.kinemage) : if (cmdline.pdb_hierarchy.models_size() == 1) : assert (probe_file is not None) import mmtbx.kinemage.validation kin_file = "%s.kin" % params.output.prefix kin_out = \ mmtbx.kinemage.validation.export_molprobity_result_as_kinemage( result=validation, pdb_hierarchy=cmdline.pdb_hierarchy, geometry=cmdline.geometry, probe_file=probe_file, keep_hydrogens=params.molprobity.keep_hydrogens, pdbID=pdb_prefix) f = open(kin_file, "w") f.write(kin_out) f.close() if (not params.output.quiet) : print >> out, "Wrote kinemage to %s" % kin_file else : print >> out, "Kinemage output not available for multiple MODELs." if (params.output.pickle) : easy_pickle.dump("%s.pkl" % params.output.prefix, validation) if (not params.output.quiet) : print >> out, "Saved result to %s.pkl" % params.output.prefix if (params.output.coot) : coot_file = "%s_coot.py" % params.output.prefix validation.write_coot_script(coot_file) if (not params.output.quiet) : print >> out, "Wrote script for Coot: %s" % coot_file if (params.output.maps == True) : import mmtbx.maps.utils import iotbx.map_tools map_file = "%s_maps.mtz" % params.output.prefix two_fofc_map, fofc_map = mmtbx.maps.utils.get_maps_from_fmodel( fmodel=fmodel, fill_missing_f_obs=params.output.map_options.fill_missing_f_obs, exclude_free_r_reflections=\ params.output.map_options.exclude_free_r_reflections) anom_map = None if (fmodel.f_obs().anomalous_flag()) : anom_map = mmtbx.maps.utils.get_anomalous_map(fmodel) iotbx.map_tools.write_map_coeffs( file_name=map_file, fwt_coeffs=two_fofc_map, delfwt_coeffs=fofc_map, anom_coeffs=anom_map) print >> out, "Wrote map coefficients to %s" % map_file else : print >> out, "" validation.show_summary(out=out, show_percentiles=params.output.percentiles) if (params.output.wxplots) : try : import wxtbx.app except ImportError, e : raise Sorry("wxPython not available.") else : app = wxtbx.app.CCTBXApp(0) validation.display_wx_plots() app.MainLoop()