Пример #1
0
    def to_datablocks(self):
        """Return the experiment list as a datablock list.
        This assumes that the experiment contains 1 datablock."""
        from dxtbx.datablock import DataBlockFactory

        # Convert the experiment list to dict
        obj = self.to_dict()

        # Convert the dictionary to a datablock dictionary
        obj["__id__"] = "DataBlock"
        for e in obj["experiment"]:
            iid = e["imageset"]
            imageset = obj["imageset"][iid]
            if "beam" in e:
                imageset["beam"] = e["beam"]
            if "detector" in e:
                imageset["detector"] = e["detector"]
            if "goniometer" in e:
                imageset["goniometer"] = e["goniometer"]
            if "scan" in e:
                imageset["scan"] = e["scan"]

        # Remove the experiments
        del obj["experiment"]

        # Create the datablock
        return DataBlockFactory.from_dict([obj])
Пример #2
0
    def to_datablocks(self):
        ''' Return the experiment list as a datablock list.
    This assumes that the experiment contains 1 datablock.'''
        from dxtbx.datablock import DataBlockFactory

        # Convert the experiment list to dict
        obj = self.to_dict()

        # Convert the dictionary to a datablock dictionary
        obj['__id__'] = 'DataBlock'
        for e in obj['experiment']:
            iid = e['imageset']
            imageset = obj['imageset'][iid]
            if 'beam' in e:
                imageset['beam'] = e['beam']
            if 'detector' in e:
                imageset['detector'] = e['detector']
            if 'goniometer' in e:
                imageset['goniometer'] = e['goniometer']
            if 'scan' in e:
                imageset['scan'] = e['scan']

        # Remove the experiments
        del obj['experiment']

        # Create the datablock
        return DataBlockFactory.from_dict([obj])
Пример #3
0
def test_json(dials_regression, tmpdir):
    tmpdir.chdir()

    # Call dials.export
    result = procrunner.run_process([
        'dials.export',
        'format=json',
        os.path.join(dials_regression, "centroid_test_data", "datablock.json"),
        os.path.join(dials_regression, "centroid_test_data", "strong.pickle"),
    ])
    assert result['exitcode'] == 0
    assert result['stderr'] == ''
    assert os.path.exists('rlp.json')

    from dxtbx.datablock import DataBlockFactory
    with open('rlp.json', 'rb') as f:
        d = json.load(f)
    assert d.keys() == ['imageset_id', 'datablocks', 'rlp',
                        'experiment_id'], d.keys()
    assert d['rlp'][:3] == [0.123454, 0.57687, 0.186465], d['rlp'][:3]
    assert d['imageset_id'][0] == 0
    assert d['experiment_id'][0] == 0
    assert len(d['datablocks']) == 1
    db = DataBlockFactory.from_dict(d['datablocks'])
    imgset = db[0].extract_imagesets()
    assert len(imgset) == 1
Пример #4
0
  def to_datablocks(self):
    ''' Return the experiment list as a datablock list.
    This assumes that the experiment contains 1 datablock.'''
    from dxtbx.datablock import DataBlockFactory

    # Convert the experiment list to dict
    obj = self.to_dict()

    # Convert the dictionary to a datablock dictionary
    obj['__id__'] = 'DataBlock'
    for e in obj['experiment']:
      iid = e['imageset']
      imageset = obj['imageset'][iid]
      if 'beam' in e:
        imageset['beam'] = e['beam']
      if 'detector' in e:
        imageset['detector'] = e['detector']
      if 'goniometer' in e:
        imageset['goniometer'] = e['goniometer']
      if 'scan' in e:
        imageset['scan'] = e['scan']

    # Remove the experiments
    del obj['experiment']

    # Create the datablock
    return DataBlockFactory.from_dict([obj])
Пример #5
0
  def test_json(self):
    import json
    from libtbx import easy_run
    from os.path import exists
    from libtbx.test_utils import approx_equal
    from dxtbx.datablock import DataBlockFactory

    # Call dials.export
    easy_run.fully_buffered([
      'dials.export',
      'format=json',
      self.datablock,
      self.strong
    ]).raise_if_errors()


    assert exists('rlp.json')
    with open('rlp.json', 'rb') as f:
      d = json.load(f)
      assert d.keys() == ['imageset_id', 'datablocks', 'rlp', 'experiment_id'], d.keys()
      assert d['rlp'][:3] == [0.123454, 0.57687, 0.186465], d['rlp'][:3]
      assert d['imageset_id'][0] == 0
      assert d['experiment_id'][0] == 0
      assert len(d['datablocks']) == 1
      db = DataBlockFactory.from_dict(d['datablocks'])
      imgset = db[0].extract_imagesets()
      assert len(imgset) == 1

    # Call dials.export
    easy_run.fully_buffered([
      'dials.export',
      'format=json',
      self.experiments,
      self.reflections,
      'json.filename=integrated.json',
      'n_digits=4',
      'compact=False',
    ]).raise_if_errors()

    assert exists('integrated.json')
    with open('integrated.json', 'rb') as f:
      d = json.load(f)
      assert d.keys() == ['imageset_id', 'rlp', 'experiment_id'], d.keys()
      assert d['rlp'][:3] == [-0.5975, -0.6141, 0.4702], d['rlp'][:3]
      assert d['imageset_id'][0] == 0
      assert d['experiment_id'][0] == 0

    print 'OK'
Пример #6
0
    def from_dict(obj, check_format=True, directory=None):
        """
        Load an experiment list from a dictionary.

        Args:
            obj (dict):
                Dictionary containing either ExperimentList or DataBlock
                structure.
            check_format (bool):
                If True, the file will be read to verify metadata.
            directory (str):

        Returns:
            ExperimentList: The dictionary converted
        """

        try:
            experiments = ExperimentList()
            for db in DataBlockFactory.from_dict(
                obj, check_format=check_format, directory=directory
            ):
                experiments.extend(
                    ExperimentListFactory.from_datablock_and_crystal(db, None)
                )
        except Exception:
            experiments = None

        # Decode the experiments from the dictionary
        if experiments is None:
            experiments = ExperimentListDict(
                obj, check_format=check_format, directory=directory
            ).decode()

        # Check the list is consistent
        assert experiments.is_consistent()

        return experiments
Пример #7
0
    def to_datablocks(self):
        """Return the experiment list as a datablock list.
        This assumes that the experiment contains 1 datablock."""
        # Datablock depends on model/__init__
        from dxtbx.datablock import DataBlockFactory

        # Convert the experiment list to dict
        obj = self.to_dict()
        # Convert the dictionary to a datablock dictionary
        obj["__id__"] = "DataBlock"
        for e in obj["experiment"]:
            iid = e["imageset"]
            imageset = obj["imageset"][iid]
            if "beam" in e:
                imageset["beam"] = e["beam"]
            if "detector" in e:
                imageset["detector"] = e["detector"]
            if "goniometer" in e:
                imageset["goniometer"] = e["goniometer"]
            if "scan" in e:
                imageset["scan"] = e["scan"]

            if imageset["__id__"] in ("ImageSet", "ImageGrid"):
                image_list = []
                for file_index, filename in enumerate(imageset["images"]):
                    image_dict = collections.OrderedDict()
                    image_dict["filename"] = filename
                    image_dict["image"] = file_index
                    image_list.append(image_dict)
                imageset["images"] = image_list

        # Remove the experiments
        del obj["experiment"]

        # Create the datablock
        return DataBlockFactory.from_dict([obj])
Пример #8
0
from __future__ import absolute_import, division, print_function
from dxtbx.datablock import DataBlockFactory, DataBlockDumper
import sys
from six.moves import range

fin = sys.argv[1]
px_size = 0.05  # in mm
dpx = [0, 0, 1, 1, 0, 1, 1, 0]  # in px
dpy = [0, 0, 1, 1, 0, 1, 1, 0]  # in px

db = DataBlockFactory.from_json_file(fin)
db0 = db[0]
dd = db0.to_dict()
for i in range(8):
    x = dd['detector'][0]['panels'][i]['origin'][0] + dpx[i] * px_size
    y = dd['detector'][0]['panels'][i]['origin'][1] + dpy[i] * px_size
    dd['detector'][0]['panels'][i]['origin'] = (x, y, 0)
xx = DataBlockFactory.from_dict(dd)
yy = DataBlockDumper(xx)
yy.as_file('new_detector_geom.json')