Esempio n. 1
0
def test_cspad_cbf_in_memory(dials_regression, run_in_tmpdir):
    # Check the data files for this test exist
    image_path = os.path.join(
        dials_regression,
        "image_examples",
        "LCLS_cspad_nexus",
        "idx-20130301060858801.cbf",
    )
    assert os.path.isfile(image_path)

    with open("process_lcls.phil", "w") as f:
        f.write(
            """
      dispatch.squash_errors = False
      spotfinder {
        filter.min_spot_size=2
        threshold.dispersion.gain=25
        threshold.dispersion.global_threshold=100
      }
      indexing {
        known_symmetry {
          space_group = P6122
          unit_cell = 92.9 92.9 130.4 90 90 120
        }
        refinement_protocol.d_min_start=1.7
        stills.refine_candidates_with_known_symmetry=True
      }
      """
        )

    params = phil_scope.fetch(parse(file_name="process_lcls.phil")).extract()
    params.output.experiments_filename = None
    processor = Processor(params)
    mem_img = dxtbx.load(image_path)
    raw_data = mem_img.get_raw_data()  # cache the raw data to prevent swig errors
    mem_img = FormatCBFCspadInMemory(mem_img._cbf_handle)
    mem_img._raw_data = raw_data
    mem_img._cbf_handle = None  # drop the file handle to prevent swig errors
    imgset = ImageSet(ImageSetData(MemReader([mem_img]), None))
    imgset.set_beam(mem_img.get_beam())
    imgset.set_detector(mem_img.get_detector())
    experiments = ExperimentListFactory.from_imageset_and_crystal(imgset, None)
    processor.process_experiments(
        "20130301060858801", experiments
    )  # index/integrate the image

    result = "idx-20130301060858801_integrated.refl"
    n_refls = list(
        range(140, 152)
    )  # large ranges to handle platform-specific differences
    table = flex.reflection_table.from_file(result)
    assert len(table) in n_refls, len(table)
    assert "id" in table
    assert (table["id"] == 0).count(False) == 0
Esempio n. 2
0
def test_cspad_cbf_in_memory(dials_regression, run_in_tmpdir,
                             composite_output):
    # Check the data files for this test exist
    image_path = os.path.join(
        dials_regression,
        "image_examples",
        "LCLS_cspad_nexus",
        "idx-20130301060858801.cbf",
    )
    assert os.path.isfile(image_path)

    with open("process_lcls.phil", "w") as f:
        f.write(cspad_cbf_in_memory_phil)

    params = phil_scope.fetch(parse(file_name="process_lcls.phil")).extract()
    params.output.experiments_filename = None
    params.output.composite_output = composite_output
    if composite_output:
        processor = Processor(params, composite_tag="memtest")
    else:
        processor = Processor(params)
    mem_img = dxtbx.load(image_path)
    raw_data = mem_img.get_raw_data(
    )  # cache the raw data to prevent swig errors
    mem_img = FormatCBFCspadInMemory(mem_img._cbf_handle)
    mem_img._raw_data = raw_data
    mem_img._cbf_handle = None  # drop the file handle to prevent swig errors
    imgset = ImageSet(ImageSetData(MemReader([mem_img]), None))
    imgset.set_beam(mem_img.get_beam())
    imgset.set_detector(mem_img.get_detector())
    experiments = ExperimentListFactory.from_imageset_and_crystal(imgset, None)
    processor.process_experiments("20130301060858801",
                                  experiments)  # index/integrate the image
    if composite_output:
        processor.finalize()
        result = "idx-memtest_integrated.refl"
    else:
        result = "idx-20130301060858801_integrated.refl"
    n_refls = list(range(
        140, 152))  # large ranges to handle platform-specific differences
    table = flex.reflection_table.from_file(result)
    assert len(table) in n_refls, len(table)
    assert "id" in table
    assert (table["id"] == 0).count(False) == 0
  beam = BeamFactory.simple(params.wavelength).get_s0()
  beam_center = (0,0)

  data = numpy.zeros((11840,194))

  if annulus:
    inner = params.distance * math.tan(2*math.sinh(params.wavelength/(2*params.annulus_inner)))
    outer = params.distance * math.tan(2*math.sinh(params.wavelength/(2*params.annulus_outer)))
    print "Inner (mm):", inner
    print "Outer (mm):", outer
  if params.resolution is not None:
    radius = params.distance * math.tan(2*math.sinh(params.wavelength/(2*params.resolution)))
    print "Radius (mm):", radius

  print "Panel:",; sys.stdout.flush()
  for p_id, panel in enumerate(img.get_detector()):
    print p_id,; sys.stdout.flush()
    for y in range(185):
      for x in range(194):
        lx, ly, lz = panel.get_pixel_lab_coord((x,y))
        if annulus:
          if not point_inside_circle(lx,ly,beam_center[0],beam_center[1],outer) or point_inside_circle(lx,ly,beam_center[0],beam_center[1],inner):
            data[(p_id*185)+y,x] = 1
        if params.resolution is not None:
          if annulus:
            if not point_inside_circle(lx,ly,beam_center[0],beam_center[1],radius):
              data[(p_id*185)+y,x] = 0
          else:
            if not point_inside_circle(lx,ly,beam_center[0],beam_center[1],radius):
              data[(p_id*185)+y,x] = 1
  print
  beam = beam_factory.simple(params.wavelength).get_s0()
  beam_center = (0,0)

  data = numpy.zeros((11840,194))

  if annulus:
    inner = params.distance * math.tan(2*math.sinh(params.wavelength/(2*params.annulus_inner)))
    outer = params.distance * math.tan(2*math.sinh(params.wavelength/(2*params.annulus_outer)))
    print "Inner (mm):", inner
    print "Outer (mm):", outer
  if params.resolution is not None:
    radius = params.distance * math.tan(2*math.sinh(params.wavelength/(2*params.resolution)))
    print "Radius (mm):", radius

  print "Panel:",; sys.stdout.flush()
  for p_id, panel in enumerate(img.get_detector()):
    print p_id,; sys.stdout.flush()
    for y in xrange(185):
      for x in xrange(194):
        lx, ly, lz = panel.get_pixel_lab_coord((x,y))
        if annulus:
          if not point_inside_circle(lx,ly,beam_center[0],beam_center[1],outer) or point_inside_circle(lx,ly,beam_center[0],beam_center[1],inner):
            data[(p_id*185)+y,x] = 1
        if params.resolution is not None:
          if annulus:
            if not point_inside_circle(lx,ly,beam_center[0],beam_center[1],radius):
              data[(p_id*185)+y,x] = 0
          else:
            if not point_inside_circle(lx,ly,beam_center[0],beam_center[1],radius):
              data[(p_id*185)+y,x] = 1
  print
Esempio n. 5
0
    def test_cspad_cbf_in_memory(self):
        from os.path import join, exists
        import os, dxtbx
        from uuid import uuid4
        from dials.command_line.stills_process import phil_scope, Processor
        from libtbx.phil import parse
        from dxtbx.imageset import ImageSet, ImageSetData, MemReader, MemMasker
        from dxtbx.datablock import DataBlockFactory
        from dxtbx.format.FormatCBFCspad import FormatCBFCspadInMemory
        import cPickle as pickle

        dirname = 'tmp_%s' % uuid4().hex
        os.mkdir(dirname)
        os.chdir(dirname)

        assert exists(join(self.lcls_path, 'idx-20130301060858801.cbf'))

        f = open("process_lcls.phil", 'w')
        f.write("""
      dispatch.squash_errors = False
      spotfinder {
        filter.min_spot_size=2
        threshold.dispersion.gain=25
        threshold.dispersion.global_threshold=100
      }
      indexing {
        known_symmetry {
          space_group = P6122
          unit_cell = 92.9 92.9 130.4 90 90 120
        }
        refinement_protocol.d_min_start=1.7
        stills.refine_candidates_with_known_symmetry=True
      }
      """)
        f.close()
        params = phil_scope.fetch(
            parse(file_name="process_lcls.phil")).extract()
        params.output.datablock_filename = None
        processor = Processor(params)
        mem_img = dxtbx.load(join(self.lcls_path, 'idx-20130301060858801.cbf'))
        raw_data = mem_img.get_raw_data(
        )  # cache the raw data to prevent swig errors
        mem_img = FormatCBFCspadInMemory(mem_img._cbf_handle)
        mem_img._raw_data = raw_data
        mem_img._cbf_handle = None  # drop the file handle to prevent swig errors
        imgset = ImageSet(
            ImageSetData(MemReader([mem_img]), MemMasker([mem_img])))
        imgset.set_beam(mem_img.get_beam())
        imgset.set_detector(mem_img.get_detector())
        datablock = DataBlockFactory.from_imageset(imgset)[0]
        processor.process_datablock("20130301060858801",
                                    datablock)  # index/integrate the image
        result = "idx-20130301060858801_integrated.pickle"
        #n_refls = range(140,152) # large ranges to handle platform-specific differences
        # 09/20/17 Changes to still indexer: refine candidate basis vectors in target symmetry if supplied
        #n_refls = range(128,140) # large ranges to handle platform-specific differences
        # 09/27/17 Bugfix for refine_candidates_with_known_symmetry
        n_refls = range(
            140, 152)  # large ranges to handle platform-specific differences
        table = pickle.load(open(result, 'rb'))
        assert len(table) in n_refls, len(table)
        assert 'id' in table
        assert (table['id'] == 0).count(False) == 0

        print 'OK'