def run(xds_inp, xparm=None, integrate_lp=None, integrate_hkl=None, spot_xds=None, space_group=None, reindex_op=None, out_prefix=None, out_dir="."): out_prefix = out_prefix+"_" if out_prefix else "" if integrate_lp is not None: xparm_objs = prep_xparm_objects_from_integrate_lp(integrate_lp, xparm_ref=xparm) rr, xp = xparm_objs[0] xparm = os.path.join(os.path.dirname(xds_inp), "XPARM.XDS_%.6d-%.6d"%rr) open(xparm, "w").write(xp.xparm_str()) # FIXME template of experiment.imageset could be wrong when relative path # and ######.h5 may need to be replaced with master.h5 experiments = ExperimentListFactory.from_xds(xds_inp, xparm) # XDS.INP needed for sweep info assert len(experiments) == 1 experiment = experiments[0] # I don't know what invalid X/Y/ZOBS values should be when multi-panel detector assert len(experiment.detector) == 1 if None not in (space_group, reindex_op): cryst_orig = copy.deepcopy(experiment.crystal) cryst_reindexed = cryst_orig.change_basis(reindex_op) a, b, c = cryst_reindexed.get_real_space_vectors() cryst_reindexed = Crystal(a, b, c, space_group=space_group) experiment.crystal.update(cryst_reindexed) # Very dirty fix.. but no way to change template after object creation?? json_str = ExperimentListDumper(experiments).as_json().replace("_######.h5", "_master.h5") ret = [os.path.join(out_dir, out_prefix+"experiments.json")] open(ret[-1], "w").write(json_str) if integrate_hkl is not None: table = import_integrated(integrate_hkl) px_to_mm(experiment, table) if None not in (space_group, reindex_op): table["miller_index"] = reindex_op.apply(table["miller_index"]) ret.append(os.path.join(out_dir, out_prefix+"integrate_hkl.pickle")) table.as_pickle(ret[-1]) if spot_xds is not None: table = import_spot_xds(spot_xds) px_to_mm(experiment, table) if None not in (space_group, reindex_op): table["miller_index"] = reindex_op.apply(table["miller_index"]) ret.append(os.path.join(out_dir, out_prefix+"spot_xds.pickle")) table.as_pickle(ret[-1]) return ret
def __call__(self, params, options): # Get the XDS.INP file xds_inp = os.path.join(self.args[0], "XDS.INP") if params.input.xds_file is None: xds_file = XDSFileImporter.find_best_xds_file(self.args[0]) else: xds_file = os.path.join(self.args[0], params.input.xds_file) # Check a file is given if xds_file is None: raise RuntimeError("No XDS file found") # Load the experiment list unhandled = [] experiments = ExperimentListFactory.from_xds(xds_inp, xds_file) # Print out any unhandled files if len(unhandled) > 0: print("-" * 80) print("The following command line arguments were not handled:") for filename in unhandled: print(f" {filename}") # Print some general info print("-" * 80) print(f"Read {len(experiments)} experiments from {xds_file}") # Attempt to create scan-varying crystal model if requested if params.read_varying_crystal: integrate_lp = os.path.join(self.args[0], "INTEGRATE.LP") if os.path.isfile(integrate_lp): self.extract_varying_crystal(integrate_lp, experiments) else: print("No INTEGRATE.LP to extract varying crystal model. Skipping") # Loop through the data blocks for i, exp in enumerate(experiments): # Print some experiment info print("-" * 80) print("Experiment %d" % i) print(f" format: {exp.imageset.get_format_class()}") print(f" type: {type(exp.imageset)}") print(f" num images: {len(exp.imageset)}") # Print some model info if options.verbose > 1: print("") if exp.beam: print(exp.beam) else: print("no beam!") if exp.detector: print(exp.detector) else: print("no detector!") if exp.goniometer: print(exp.goniometer) else: print("no goniometer!") if exp.scan: print(exp.scan) else: print("no scan!") if exp.crystal: print(exp.crystal) else: print("no crystal!") # Write the experiment list to a JSON or pickle file if params.output.filename is None: params.output.filename = "xds_models.expt" print("-" * 80) print(f"Writing experiments to {params.output.filename}") experiments.as_file(params.output.filename) # Optionally save as a data block if params.output.xds_experiments: print("-" * 80) print(f"Writing data block to {params.output.xds_experiments}") experiments.as_file(params.output.xds_experiments)
def __call__(self, params, options): from dxtbx.model.experiment_list import ExperimentListFactory from dxtbx.model.experiment_list import ExperimentListDumper import os # Get the XDS.INP file xds_inp = os.path.join(self.args[0], 'XDS.INP') if params.input.xds_file is None: xds_file = XDSFileImporter.find_best_xds_file(self.args[0]) else: xds_file = os.path.join(self.args[0], params.input.xds_file) # Check a file is given if xds_file is None: raise RuntimeError('No XDS file found') # Load the experiment list unhandled = [] experiments = ExperimentListFactory.from_xds(xds_inp, xds_file) # Print out any unhandled files if len(unhandled) > 0: print('-' * 80) print('The following command line arguments were not handled:') for filename in unhandled: print(' %s' % filename) # Print some general info print('-' * 80) print('Read %d experiments from %s' % (len(experiments), xds_file)) # Attempt to create scan-varying crystal model if requested if params.read_varying_crystal: integrate_lp = os.path.join(self.args[0], 'INTEGRATE.LP') if os.path.isfile(integrate_lp): self.extract_varying_crystal(integrate_lp, experiments) else: print( "No INTEGRATE.LP to extract varying crystal model. Skipping" ) # Loop through the data blocks for i, exp in enumerate(experiments): # Print some experiment info print("-" * 80) print("Experiment %d" % i) print(" format: %s" % str(exp.imageset.get_format_class())) print(" type: %s" % type(exp.imageset)) print(" num images: %d" % len(exp.imageset)) # Print some model info if options.verbose > 1: print("") if exp.beam: print(exp.beam) else: print("no beam!") if exp.detector: print(exp.detector) else: print("no detector!") if exp.goniometer: print(exp.goniometer) else: print("no goniometer!") if exp.scan: print(exp.scan) else: print("no scan!") if exp.crystal: print(exp.crystal) else: print("no crystal!") # Write the experiment list to a JSON or pickle file if params.output.filename is None: params.output.filename = 'experiments.json' print("-" * 80) print('Writing experiments to %s' % params.output.filename) dump = ExperimentListDumper(experiments) dump.as_file(params.output.filename) # Optionally save as a data block if params.output.xds_datablock: print("-" * 80) print("Writing data block to %s" % params.output.xds_datablock) dump = DataBlockDumper(experiments.to_datablocks()) dump.as_file(params.output.xds_datablock)
def __call__(self, params, options): from dxtbx.model.experiment_list import ExperimentListFactory from dxtbx.model.experiment_list import ExperimentListDumper import os # Get the XDS.INP file xds_inp = os.path.join(self.args[0], 'XDS.INP') if params.input.xds_file is None: xds_file = XDSFileImporter.find_best_xds_file(self.args[0]) else: xds_file = os.path.join(self.args[0], params.input.xds_file) # Check a file is given if xds_file is None: raise RuntimeError('No XDS file found') # Load the experiment list unhandled = [] experiments = ExperimentListFactory.from_xds(xds_inp, xds_file) # Print out any unhandled files if len(unhandled) > 0: print '-' * 80 print 'The following command line arguments were not handled:' for filename in unhandled: print ' %s' % filename # Print some general info print '-' * 80 print 'Read %d experiments from %s' % (len(experiments), xds_file) # Attempt to create scan-varying crystal model if requested if params.read_varying_crystal: integrate_lp = os.path.join(self.args[0], 'INTEGRATE.LP') if os.path.isfile(integrate_lp): self.extract_varying_crystal(integrate_lp, experiments) else: print "No INTEGRATE.LP to extract varying crystal model. Skipping" # Loop through the data blocks for i, exp in enumerate(experiments): # Print some experiment info print "-" * 80 print "Experiment %d" % i print " format: %s" % str( exp.imageset.reader().get_format_class()) print " type: %s" % type(exp.imageset) print " num images: %d" % len(exp.imageset) # Print some model info if options.verbose > 1: print "" if exp.beam: print exp.beam else: print "no beam!" if exp.detector: print exp.detector else: print "no detector!" if exp.goniometer: print exp.goniometer else: print "no goniometer!" if exp.scan: print exp.scan else: print "no scan!" if exp.crystal: print exp.crystal else: print "no crystal!"