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])
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])
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
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])
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'
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
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])
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')