def Integrater(): """Return an Integrater implementation.""" # FIXME this should take an indexer as an argument... integrater = None preselection = get_preferences().get("integrater") if not integrater and (not preselection or preselection == "dials"): try: integrater = DialsIntegrater() logger.debug("Using Dials Integrater") if PhilIndex.params.xia2.settings.scaler == "dials": integrater.set_output_format("pickle") except NotAvailableError: if preselection == "dials": raise RuntimeError( "preselected integrater dials not available: " + "dials not installed?" ) if not integrater and (not preselection or preselection == "xdsr"): try: integrater = XDSIntegrater() logger.debug("Using XDS Integrater in new resolution mode") except NotAvailableError: if preselection == "xdsr": raise RuntimeError( "preselected integrater xdsr not available: " + "xds not installed?" ) if not integrater: raise RuntimeError("no integrater implementations found") # check to see if resolution limits were passed in through the # command line... dmin = PhilIndex.params.xia2.settings.resolution.d_min dmax = PhilIndex.params.xia2.settings.resolution.d_max if dmin: logger.debug("Adding user-assigned resolution limits:") if dmax: logger.debug(f"dmin: {dmin:.3f} dmax: {dmax:.2f}") integrater.set_integrater_resolution(dmin, dmax, user=True) else: logger.debug("dmin: %.3f" % dmin) integrater.set_integrater_high_resolution(dmin, user=True) return integrater
def test_xds_scalerA(ccp4, xia2_regression_build, tmpdir, nproc): if nproc is not None: from xia2.Handlers.Phil import PhilIndex PhilIndex.params.xia2.settings.multiprocessing.nproc = nproc template = os.path.join(xia2_regression_build, "test_data", "insulin", "insulin_1_###.img") tmpdir.chdir() tmpdir = tmpdir.strpath from xia2.Modules.Indexer.XDSIndexer import XDSIndexer from xia2.Modules.Integrater.XDSIntegrater import XDSIntegrater from xia2.Modules.Scaler.XDSScalerA import XDSScalerA indexer = XDSIndexer() indexer.set_working_directory(tmpdir) from dxtbx.datablock import DataBlockTemplateImporter importer = DataBlockTemplateImporter([template]) datablocks = importer.datablocks imageset = datablocks[0].extract_imagesets()[0] indexer.add_indexer_imageset(imageset) from xia2.Schema.XCrystal import XCrystal from xia2.Schema.XWavelength import XWavelength from xia2.Schema.XSweep import XSweep from xia2.Schema.XSample import XSample cryst = XCrystal("CRYST1", None) wav = XWavelength("WAVE1", cryst, imageset.get_beam().get_wavelength()) samp = XSample("X1", cryst) directory, image = os.path.split(imageset.get_path(1)) with mock.patch.object(sys, 'argv', []): sweep = XSweep('SWEEP1', wav, samp, directory=directory, image=image) indexer.set_indexer_sweep(sweep) from xia2.Modules.Refiner.XDSRefiner import XDSRefiner refiner = XDSRefiner() refiner.set_working_directory(tmpdir) refiner.add_refiner_indexer(sweep.get_epoch(1), indexer) integrater = XDSIntegrater() integrater.set_working_directory(tmpdir) integrater.setup_from_image(imageset.get_path(1)) integrater.set_integrater_refiner(refiner) #integrater.set_integrater_indexer(indexer) integrater.set_integrater_sweep(sweep) integrater.set_integrater_sweep_name('SWEEP1') integrater.set_integrater_project_info('CRYST1', 'WAVE1', 'SWEEP1') scaler = XDSScalerA() scaler.add_scaler_integrater(integrater) scaler.set_scaler_xcrystal(cryst) scaler.set_scaler_project_info('CRYST1', 'WAVE1') check_scaler_files_exist(scaler) # test serialization of scaler json_str = scaler.as_json() #print json_str scaler2 = XDSScalerA.from_json(string=json_str) scaler2.set_scaler_xcrystal(cryst) check_scaler_files_exist(scaler2) scaler2.set_scaler_finish_done(False) check_scaler_files_exist(scaler2) scaler2.set_scaler_done(False) check_scaler_files_exist(scaler2) scaler2._scalr_integraters = {} # XXX scaler2.add_scaler_integrater(integrater) scaler2.set_scaler_prepare_done(False) check_scaler_files_exist(scaler2)
def exercise_xds_integrater(dials_data, tmp_dir, nproc=None): if nproc: from xia2.Handlers.Phil import PhilIndex PhilIndex.params.xia2.settings.multiprocessing.nproc = nproc template = dials_data("insulin").join("insulin_1_###.img").strpath from xia2.Modules.Indexer.XDSIndexer import XDSIndexer from xia2.Modules.Integrater.XDSIntegrater import XDSIntegrater indexer = XDSIndexer() indexer.set_working_directory(tmp_dir) from dxtbx.model.experiment_list import ExperimentListTemplateImporter importer = ExperimentListTemplateImporter([template]) experiments = importer.experiments imageset = experiments.imagesets()[0] indexer.add_indexer_imageset(imageset) from xia2.Schema.XCrystal import XCrystal from xia2.Schema.XWavelength import XWavelength from xia2.Schema.XSweep import XSweep from xia2.Schema.XSample import XSample cryst = XCrystal("CRYST1", None) wav = XWavelength("WAVE1", cryst, indexer.get_wavelength()) samp = XSample("X1", cryst) directory, image = os.path.split(imageset.get_path(1)) sweep = XSweep("SWEEP1", wav, samp, directory=directory, image=image) indexer.set_indexer_sweep(sweep) from xia2.Modules.Refiner.XDSRefiner import XDSRefiner refiner = XDSRefiner() refiner.set_working_directory(tmp_dir) refiner.add_refiner_indexer(sweep.get_epoch(1), indexer) # refiner.refine() integrater = XDSIntegrater() integrater.set_working_directory(tmp_dir) integrater.setup_from_image(imageset.get_path(1)) integrater.set_integrater_refiner(refiner) integrater.set_integrater_sweep(sweep) integrater.integrate() from iotbx.reflection_file_reader import any_reflection_file integrater_intensities = integrater.get_integrater_intensities() assert os.path.exists(integrater_intensities) reader = any_reflection_file(integrater_intensities) assert reader.file_type() == "ccp4_mtz" mtz_object = reader.file_content() assert approx_equal(mtz_object.n_reflections(), 50000, eps=400) assert mtz_object.column_labels() == [ "H", "K", "L", "M_ISYM", "BATCH", "I", "SIGI", "FRACTIONCALC", "XDET", "YDET", "ROT", "LP", "FLAG", ] corrected_intensities = integrater.get_integrater_corrected_intensities() assert os.path.exists(corrected_intensities) reader = any_reflection_file(corrected_intensities) assert reader.file_type() == "xds_ascii" ma = reader.as_miller_arrays(merge_equivalents=False)[0] assert approx_equal(ma.size(), 50000, eps=400) assert integrater.get_integrater_wedge() == (1, 45) assert approx_equal( integrater.get_integrater_cell(), [78.066, 78.066, 78.066, 90, 90, 90], eps=1 ) assert approx_equal( integrater.get_integrater_mosaic_min_mean_max(), (0.180, 0.180, 0.180), eps=1e-1 ) # test serialization of integrater json_str = integrater.as_json() # print(json_str) integrater2 = XDSIntegrater.from_json(string=json_str) integrater2.set_integrater_sweep(sweep, reset=False) integrater2_intensities = integrater.get_integrater_intensities() assert integrater2_intensities == integrater_intensities integrater2.set_integrater_finish_done(False) integrater2_intensities = integrater2.get_integrater_intensities() assert os.path.exists(integrater2_intensities) reader = any_reflection_file(integrater2_intensities) assert reader.file_type() == "ccp4_mtz" mtz_object = reader.file_content() assert approx_equal(mtz_object.n_reflections(), 50000, eps=400) integrater2.set_integrater_done(False) integrater2_intensities = integrater2.get_integrater_intensities() assert os.path.exists(integrater2_intensities) reader = any_reflection_file(integrater2_intensities) assert reader.file_type() == "ccp4_mtz" mtz_object = reader.file_content() assert approx_equal(mtz_object.n_reflections(), 50000, eps=450) integrater2.set_integrater_prepare_done(False) integrater2_intensities = integrater2.get_integrater_intensities() assert os.path.exists(integrater2_intensities) reader = any_reflection_file(integrater2_intensities) assert reader.file_type() == "ccp4_mtz" mtz_object = reader.file_content() assert approx_equal(mtz_object.n_reflections(), 50100, eps=400)
def Integrater(): '''Return an Integrater implementation.''' # FIXME this should take an indexer as an argument... integrater = None preselection = get_preferences().get('integrater') if not integrater and \ (not preselection or preselection == 'dials'): try: integrater = DialsIntegrater() Debug.write('Using Dials Integrater') except NotAvailableError: if preselection == 'dials': raise RuntimeError( \ 'preselected integrater dials not available: ' + \ 'dials not installed?') if not integrater and (not preselection or preselection == 'mosflmr'): try: integrater = MosflmIntegrater() Debug.write('Using MosflmR Integrater') if not get_preferences().get('scaler'): add_preference('scaler', 'ccp4a') except NotAvailableError: if preselection == 'mosflmr': raise RuntimeError('preselected integrater mosflmr not available') if not integrater and \ (not preselection or preselection == 'xdsr'): try: integrater = XDSIntegrater() Debug.write('Using XDS Integrater in new resolution mode') except NotAvailableError: if preselection == 'xdsr': raise RuntimeError( \ 'preselected integrater xdsr not available: ' + \ 'xds not installed?') if not integrater: raise RuntimeError('no integrater implementations found') # check to see if resolution limits were passed in through the # command line... dmin = PhilIndex.params.xia2.settings.resolution.d_min dmax = PhilIndex.params.xia2.settings.resolution.d_max if dmin: Debug.write('Adding user-assigned resolution limits:') if dmax: Debug.write('dmin: %.3f dmax: %.2f' % (dmin, dmax)) integrater.set_integrater_resolution(dmin, dmax, user=True) else: Debug.write('dmin: %.3f' % dmin) integrater.set_integrater_high_resolution(dmin, user=True) return integrater
def exercise_xds_integrater(xia2_regression_build, tmp_dir, nproc=None): if nproc: from xia2.Handlers.Phil import PhilIndex PhilIndex.params.xia2.settings.multiprocessing.nproc = nproc xia2_demo_data = os.path.join(xia2_regression_build, "test_data", "insulin") template = os.path.join(xia2_demo_data, "insulin_1_###.img") from xia2.Modules.Indexer.XDSIndexer import XDSIndexer from xia2.Modules.Integrater.XDSIntegrater import XDSIntegrater indexer = XDSIndexer() indexer.set_working_directory(tmp_dir) from dxtbx.datablock import DataBlockTemplateImporter importer = DataBlockTemplateImporter([template]) datablocks = importer.datablocks imageset = datablocks[0].extract_imagesets()[0] indexer.add_indexer_imageset(imageset) from xia2.Schema.XCrystal import XCrystal from xia2.Schema.XWavelength import XWavelength from xia2.Schema.XSweep import XSweep from xia2.Schema.XSample import XSample cryst = XCrystal("CRYST1", None) wav = XWavelength("WAVE1", cryst, indexer.get_wavelength()) samp = XSample("X1", cryst) directory, image = os.path.split(imageset.get_path(1)) sweep = XSweep('SWEEP1', wav, samp, directory=directory, image=image) indexer.set_indexer_sweep(sweep) from xia2.Modules.Refiner.XDSRefiner import XDSRefiner refiner = XDSRefiner() refiner.set_working_directory(tmp_dir) refiner.add_refiner_indexer(sweep.get_epoch(1), indexer) #refiner.refine() integrater = XDSIntegrater() integrater.set_working_directory(tmp_dir) integrater.setup_from_image(imageset.get_path(1)) integrater.set_integrater_refiner(refiner) integrater.set_integrater_sweep(sweep) integrater.integrate() from iotbx.reflection_file_reader import any_reflection_file integrater_intensities = integrater.get_integrater_intensities() assert os.path.exists(integrater_intensities) reader = any_reflection_file(integrater_intensities) assert reader.file_type() == "ccp4_mtz" mtz_object = reader.file_content() assert approx_equal(mtz_object.n_reflections(), 50000, eps=400) assert mtz_object.column_labels() == [ 'H', 'K', 'L', 'M_ISYM', 'BATCH', 'I', 'SIGI', 'FRACTIONCALC', 'XDET', 'YDET', 'ROT', 'LP', 'FLAG' ] corrected_intensities = integrater.get_integrater_corrected_intensities() assert os.path.exists(corrected_intensities) reader = any_reflection_file(corrected_intensities) assert reader.file_type() == "xds_ascii" ma = reader.as_miller_arrays(merge_equivalents=False)[0] assert approx_equal(ma.size(), 50000, eps=400) assert integrater.get_integrater_wedge() == (1, 45) assert approx_equal(integrater.get_integrater_cell(), [78.066, 78.066, 78.066, 90, 90, 90], eps=1) assert approx_equal(integrater.get_integrater_mosaic_min_mean_max(), (0.180, 0.180, 0.180), eps=1e-1) # test serialization of integrater json_str = integrater.as_json() #print(json_str) integrater2 = XDSIntegrater.from_json(string=json_str) integrater2.set_integrater_sweep(sweep, reset=False) integrater2_intensities = integrater.get_integrater_intensities() assert integrater2_intensities == integrater_intensities integrater2.set_integrater_finish_done(False) integrater2_intensities = integrater2.get_integrater_intensities() assert os.path.exists(integrater2_intensities) reader = any_reflection_file(integrater2_intensities) assert reader.file_type() == "ccp4_mtz" mtz_object = reader.file_content() assert approx_equal(mtz_object.n_reflections(), 50000, eps=400) integrater2.set_integrater_done(False) integrater2_intensities = integrater2.get_integrater_intensities() assert os.path.exists(integrater2_intensities) reader = any_reflection_file(integrater2_intensities) assert reader.file_type() == "ccp4_mtz" mtz_object = reader.file_content() assert approx_equal(mtz_object.n_reflections(), 50000, eps=450) integrater2.set_integrater_prepare_done(False) integrater2_intensities = integrater2.get_integrater_intensities() assert os.path.exists(integrater2_intensities) reader = any_reflection_file(integrater2_intensities) assert reader.file_type() == "ccp4_mtz" mtz_object = reader.file_content() assert approx_equal(mtz_object.n_reflections(), 50100, eps=400)
def test_xds_scalerA(regression_test, ccp4, xds, dials_data, run_in_tmpdir, nproc): if nproc is not None: from xia2.Handlers.Phil import PhilIndex PhilIndex.params.xia2.settings.multiprocessing.nproc = nproc template = dials_data("insulin").join("insulin_1_###.img").strpath tmpdir = run_in_tmpdir.strpath from xia2.Modules.Indexer.XDSIndexer import XDSIndexer from xia2.Modules.Integrater.XDSIntegrater import XDSIntegrater from xia2.Modules.Scaler.XDSScalerA import XDSScalerA indexer = XDSIndexer() indexer.set_working_directory(tmpdir) from dxtbx.model.experiment_list import ExperimentListTemplateImporter importer = ExperimentListTemplateImporter([template]) experiments = importer.experiments imageset = experiments.imagesets()[0] indexer.add_indexer_imageset(imageset) from xia2.Schema.XCrystal import XCrystal from xia2.Schema.XWavelength import XWavelength from xia2.Schema.XSweep import XSweep from xia2.Schema.XSample import XSample cryst = XCrystal("CRYST1", None) wav = XWavelength("WAVE1", cryst, imageset.get_beam().get_wavelength()) samp = XSample("X1", cryst) directory, image = os.path.split(imageset.get_path(1)) with mock.patch.object(sys, "argv", []): sweep = XSweep("SWEEP1", wav, samp, directory=directory, image=image) indexer.set_indexer_sweep(sweep) from xia2.Modules.Refiner.XDSRefiner import XDSRefiner refiner = XDSRefiner() refiner.set_working_directory(tmpdir) refiner.add_refiner_indexer(sweep.get_epoch(1), indexer) integrater = XDSIntegrater() integrater.set_working_directory(tmpdir) integrater.setup_from_image(imageset.get_path(1)) integrater.set_integrater_refiner(refiner) # integrater.set_integrater_indexer(indexer) integrater.set_integrater_sweep(sweep) integrater.set_integrater_sweep_name("SWEEP1") integrater.set_integrater_project_info("CRYST1", "WAVE1", "SWEEP1") scaler = XDSScalerA(base_path=pathlib.Path(tmpdir)) scaler.add_scaler_integrater(integrater) scaler.set_scaler_xcrystal(cryst) scaler.set_scaler_project_info("CRYST1", "WAVE1") check_scaler_files_exist(scaler) # test serialization of scaler json_str = scaler.as_json() # print json_str scaler2 = XDSScalerA.from_json(string=json_str) scaler2.set_scaler_xcrystal(cryst) check_scaler_files_exist(scaler2) scaler2.set_scaler_done(False) check_scaler_files_exist(scaler2) scaler2._scalr_integraters = {} # XXX scaler2.add_scaler_integrater(integrater) scaler2.set_scaler_prepare_done(False) check_scaler_files_exist(scaler2)
def Integrater(): """Return an Integrater implementation.""" # FIXME this should take an indexer as an argument... integrater = None preselection = get_preferences().get("integrater") if not integrater and (not preselection or preselection == "dials"): try: integrater = DialsIntegrater() Debug.write("Using Dials Integrater") except NotAvailableError: if preselection == "dials": raise RuntimeError( "preselected integrater dials not available: " + "dials not installed?") if not integrater and (not preselection or preselection == "mosflmr"): try: integrater = MosflmIntegrater() Debug.write("Using MosflmR Integrater") if not get_preferences().get("scaler"): add_preference("scaler", "ccp4a") except NotAvailableError: if preselection == "mosflmr": raise RuntimeError( "preselected integrater mosflmr not available") if not integrater and (not preselection or preselection == "xdsr"): try: integrater = XDSIntegrater() Debug.write("Using XDS Integrater in new resolution mode") except NotAvailableError: if preselection == "xdsr": raise RuntimeError( "preselected integrater xdsr not available: " + "xds not installed?") if not integrater: raise RuntimeError("no integrater implementations found") # check to see if resolution limits were passed in through the # command line... dmin = PhilIndex.params.xia2.settings.resolution.d_min dmax = PhilIndex.params.xia2.settings.resolution.d_max if dmin: Debug.write("Adding user-assigned resolution limits:") if dmax: Debug.write("dmin: %.3f dmax: %.2f" % (dmin, dmax)) integrater.set_integrater_resolution(dmin, dmax, user=True) else: Debug.write("dmin: %.3f" % dmin) integrater.set_integrater_high_resolution(dmin, user=True) return integrater