Beispiel #1
0
def test_cspad_cbf_in_memory(dials_regression, tmpdir):
    tmpdir.chdir()
    # 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.datablock_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]), 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
    with open(result, 'rb') as f:
        table = pickle.load(f)
    assert len(table) in n_refls, len(table)
    assert 'id' in table
    assert (table['id'] == 0).count(False) == 0
Beispiel #2
0
      def do_work(i, item_list):
        processor = Processor(copy.deepcopy(self.params), composite_tag = "%04d"%i)
        for item in item_list:
          tag, filename = item

          datablock = do_import(filename)
          imagesets = datablock.extract_imagesets()
          if len(imagesets) == 0 or len(imagesets[0]) == 0:
            logger.info("Zero length imageset in file: %s"%filename)
            return
          if len(imagesets) > 1:
            raise Abort("Found more than one imageset in file: %s"%filename)
          if len(imagesets[0]) > 1:
            raise Abort("Found a multi-image file. Run again with pre_import=True")

          if self.reference_detector is not None:
            from dxtbx.model import Detector
            imagesets[0].set_detector(Detector.from_dict(self.reference_detector.to_dict()))

          update_geometry(imagesets[0])

          processor.process_datablock(tag, datablock)
        processor.finalize()
    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'