예제 #1
0
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
예제 #2
0
    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)
예제 #3
0
    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)
예제 #4
0
    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!"