Example #1
0
def basic_imageset_from_dict(d):
  ''' Construct an ImageSet class from the dictionary.'''
  from dxtbx.imageset import ImageSetFactory
  from dxtbx.serialize import beam, detector
  from dxtbx.serialize.filename import load_path

  # Get the filename list and create the imageset
  filenames = map(lambda p: load_path(p), map(str, d['filenames']))
  imageset = ImageSetFactory.new(filenames)[0]

  # Set some external lookups
  if 'mask' in d and d['mask'] is not None:
    with open(d['mask']) as infile:
      imageset.external_lookup.mask.filename = d['mask']
      imageset.external_lookup.mask.data = pickle.load(infile)
  if 'gain' in d and d['gain'] is not None:
    with open(d['gain']) as infile:
      imageset.external_lookup.gain.filename = d['gain']
      imageset.external_lookup.gain.data = pickle.load(infile)
  if 'pedestal' in d and d['pedestal'] is not None:
    with open(d['pedestal']) as infile:
      imageset.external_lookup.pedestal.filename = d['pedestal']
      imageset.external_lookup.pedestal.data = pickle.load(infile)

  # Get the existing models as dictionaries
  beam_dict = beam.to_dict(imageset.get_beam())
  detector_dict = detector.to_dict(imageset.get_detector())

  # Set models
  imageset.set_beam(beam.from_dict(d.get('beam'), beam_dict))
  imageset.set_detector(detector.from_dict(d.get('detector'), detector_dict))

  # Return the imageset
  return imageset
Example #2
0
def imagesweep_from_dict(d, check_format=True):
  '''Construct and image sweep from the dictionary.'''
  from dxtbx.imageset import ImageSetFactory
  from dxtbx.serialize import beam, detector, goniometer, scan
  from dxtbx.serialize.filename import load_path

  # Get the template (required)
  template = load_path(str(d['template']))

  # If the scan isn't set, find all available files
  scan_dict = d.get('scan')
  if scan_dict is None:
    image_range = None
  else:
    image_range = scan_dict.get('image_range')

  # Construct the sweep
  try:
    sweep = ImageSetFactory.from_template(
      template, image_range, check_format=check_format)[0]

    # Get the existing models as dictionaries
    beam_dict = beam.to_dict(sweep.get_beam())
    gonio_dict = goniometer.to_dict(sweep.get_goniometer())
    detector_dict = detector.to_dict(sweep.get_detector())
    scan_dict = scan.to_dict(sweep.get_scan())
  except Exception:
    indices = range(image_range[0], image_range[1] + 1)
    sweep = ImageSetFactory.make_sweep(
      template, indices, check_format=False)
    beam_dict = None
    gonio_dict = None
    detector_dict = None
    scan_dict = None

  # Set some external lookups
  if 'mask' in d and d['mask'] is not None:
    with open(d['mask']) as infile:
      sweep.external_lookup.mask.filename = d['mask']
      sweep.external_lookup.mask.data = pickle.load(infile)
  if 'gain' in d and d['gain'] is not None:
    with open(d['gain']) as infile:
      sweep.external_lookup.gain.filename = d['gain']
      sweep.external_lookup.gain.data = pickle.load(infile)
  if 'pedestal' in d and d['pedestal'] is not None:
    with open(d['pedestal']) as infile:
      sweep.external_lookup.pedestal.filename = d['pedestal']
      sweep.external_lookup.pedestal.data = pickle.load(infile)

  # Set the models with the exisiting models as templates
  sweep.set_beam(beam.from_dict(d.get('beam'), beam_dict))
  sweep.set_goniometer(goniometer.from_dict(d.get('goniometer'), gonio_dict))
  sweep.set_detector(detector.from_dict(d.get('detector'), detector_dict))
  sweep.set_scan(scan.from_dict(d.get('scan'), scan_dict))

  # Return the sweep
  return sweep
Example #3
0
  def tst_beam(self):
    from dxtbx.serialize import beam
    from dxtbx.model import Beam
    b1 = Beam((1, 0, 0), 2, 0.1, 0.1)
    d = beam.to_dict(b1)
    b2 = beam.from_dict(d)
    assert(d['direction'] == (1, 0, 0))
    assert(d['wavelength'] == 2)
    assert(abs(d['divergence'] - 0.1) <= 1e-7)
    assert(abs(d['sigma_divergence'] - 0.1) <= 1e-7)
    assert(b1 == b2)

    # Test with a template and partial dictionary
    d2 = {'direction' : (0, 1, 0), 'divergence' : 0.2 }
    b3 = beam.from_dict(d2, d)
    assert(b3.get_direction() == (0, 1, 0))
    assert(b3.get_wavelength() == 2)
    assert(abs(b3.get_divergence() - 0.2) <= 1e-7)
    assert(abs(b3.get_sigma_divergence() - 0.1) <= 1e-7)
    assert(b2 != b3)
    print 'OK'
Example #4
0
    def tst_beam(self):
        from dxtbx.serialize import beam
        from dxtbx.model import Beam
        b1 = Beam((1, 0, 0), 2, 0.1, 0.1)
        d = beam.to_dict(b1)
        b2 = beam.from_dict(d)
        assert (d['direction'] == (1, 0, 0))
        assert (d['wavelength'] == 2)
        assert (abs(d['divergence'] - 0.1) <= 1e-7)
        assert (abs(d['sigma_divergence'] - 0.1) <= 1e-7)
        assert (b1 == b2)

        # Test with a template and partial dictionary
        d2 = {'direction': (0, 1, 0), 'divergence': 0.2}
        b3 = beam.from_dict(d2, d)
        assert (b3.get_direction() == (0, 1, 0))
        assert (b3.get_wavelength() == 2)
        assert (abs(b3.get_divergence() - 0.2) <= 1e-7)
        assert (abs(b3.get_sigma_divergence() - 0.1) <= 1e-7)
        assert (b2 != b3)
        print 'OK'