Пример #1
0
def experiment():
    beam = BeamFactory.make_beam(wavelength=0.97625, sample_to_source=(0, 0, 1))

    detector = DetectorFactory.simple(
        sensor="PAD",
        distance=265.27,
        beam_centre=(210.7602, 205.27684),
        fast_direction="+x",
        slow_direction="-y",
        pixel_size=(0.172, 0.172),
        image_size=(2463, 2527),
        trusted_range=(-1, 1e8),
    )

    goniometer = GoniometerFactory.single_axis()

    scan = ScanFactory.make_scan(
        image_range=(1, 20),
        exposure_times=0.067,
        oscillation=(82, 0.15),
        epochs=[0] * 20,
    )

    isetdata = ImageSetData(
        reader=Format.Reader(None, ["path"] * len(scan)), masker=None
    )
    iset = ImageSequence(
        isetdata, beam=beam, detector=detector, goniometer=goniometer, scan=scan
    )

    return Experiment(
        imageset=iset, beam=beam, detector=detector, goniometer=goniometer, scan=scan
    )
Пример #2
0
 def expt_detector_maker(self):
   """Construct the detector object for the experiments file. This function generates a monolithic flattening of the
   CSPAD detector if not supplied with an image file."""
   self.distance = self.data['distance']
   self.xbeam, self.ybeam = self.data['xbeam'], self.data['ybeam']
   if len(self.img_location) > 0 and not dxtbx.load(self.img_location[0])._image_file.endswith("_00000.pickle"):
     self.detector = dxtbx.load(self.img_location[0])._detector()
   else:
     self.detector = DetectorFactory.simple('SENSOR_UNKNOWN',self.distance,(self.xbeam, self.ybeam),'+x','-y',
     (self.pixel_size, self.pixel_size),(1765,1765))
Пример #3
0
  def __init__(self, filename, experiment, HKL, i_sigi, measurements, params):
    from libtbx import adopt_init_args
    adopt_init_args(self, locals())
    self.stash_type = None
    self.stash_res_filter = None

    from dxtbx.model import DetectorFactory
    self.dummy_detector = DetectorFactory.simple(
      sensor = DetectorFactory.sensor("PAD"),
      distance = 100,
      beam_centre = [1000, 1000],
      fast_direction = "+x",
      slow_direction = "+y",
      pixel_size = [0.2,0.2],
      image_size = [2000,2000],
      )
    def prepare_dxtbx_models(self, setting_specific_ai, sg, isoform=None):

        from dxtbx.model import BeamFactory
        beam = BeamFactory.simple(wavelength=self.inputai.wavelength)

        from dxtbx.model import DetectorFactory
        detector = DetectorFactory.simple(
            sensor=DetectorFactory.sensor("PAD"),
            distance=setting_specific_ai.distance(),
            beam_centre=[
                setting_specific_ai.xbeam(),
                setting_specific_ai.ybeam()
            ],
            fast_direction="+x",
            slow_direction="+y",
            pixel_size=[self.pixel_size, self.pixel_size],
            image_size=[self.inputpd['size1'], self.inputpd['size1']],
        )

        direct = matrix.sqr(
            setting_specific_ai.getOrientation().direct_matrix())
        from dxtbx.model import Crystal
        crystal = Crystal(
            real_space_a=matrix.row(direct[0:3]),
            real_space_b=matrix.row(direct[3:6]),
            real_space_c=matrix.row(direct[6:9]),
            space_group_symbol=sg,
        )
        crystal.set_mosaicity(setting_specific_ai.getMosaicity())
        if isoform is not None:
            newB = matrix.sqr(isoform.fractionalization_matrix()).transpose()
            crystal.set_B(newB)

        from dxtbx.model import Experiment, ExperimentList
        experiments = ExperimentList()
        experiments.append(
            Experiment(beam=beam, detector=detector, crystal=crystal))

        print beam
        print detector
        print crystal
        return experiments
Пример #5
0
    def __init__(self, params):
        import cPickle as pickle
        from dxtbx.model import BeamFactory
        from dxtbx.model import DetectorFactory
        from dxtbx.model.crystal import crystal_model
        from cctbx.crystal_orientation import crystal_orientation, basis_type
        from dxtbx.model import Experiment, ExperimentList
        from scitbx import matrix
        self.experiments = ExperimentList()
        self.unique_file_names = []

        self.params = params
        data = pickle.load(
            open(self.params.output.prefix + "_frame.pickle", "rb"))
        frames_text = data.split("\n")

        for item in frames_text:
            tokens = item.split(' ')
            wavelength = float(tokens[order_dict["wavelength"]])

            beam = BeamFactory.simple(wavelength=wavelength)

            detector = DetectorFactory.simple(
                sensor=DetectorFactory.sensor(
                    "PAD"),  # XXX shouldn't hard code for XFEL
                distance=float(tokens[order_dict["distance"]]),
                beam_centre=[
                    float(tokens[order_dict["beam_x"]]),
                    float(tokens[order_dict["beam_y"]])
                ],
                fast_direction="+x",
                slow_direction="+y",
                pixel_size=[self.params.pixel_size, self.params.pixel_size],
                image_size=[1795,
                            1795],  # XXX obviously need to figure this out
            )

            reciprocal_matrix = matrix.sqr([
                float(tokens[order_dict[k]]) for k in [
                    'res_ori_1', 'res_ori_2', 'res_ori_3', 'res_ori_4',
                    'res_ori_5', 'res_ori_6', 'res_ori_7', 'res_ori_8',
                    'res_ori_9'
                ]
            ])
            ORI = crystal_orientation(reciprocal_matrix, basis_type.reciprocal)
            direct = matrix.sqr(ORI.direct_matrix())
            crystal = crystal_model(
                real_space_a=matrix.row(direct[0:3]),
                real_space_b=matrix.row(direct[3:6]),
                real_space_c=matrix.row(direct[6:9]),
                space_group_symbol=self.params.target_space_group.type().
                lookup_symbol(),
                mosaicity=float(tokens[order_dict["half_mosaicity_deg"]]),
            )
            crystal.domain_size = float(tokens[order_dict["domain_size_ang"]])
            #if isoform is not None:
            #  newB = matrix.sqr(isoform.fractionalization_matrix()).transpose()
            #  crystal.set_B(newB)

            self.experiments.append(
                Experiment(
                    beam=beam,
                    detector=None,  #dummy for now
                    crystal=crystal))
            self.unique_file_names.append(
                tokens[order_dict["unique_file_name"]])

        self.show_summary()
def run(args):

    distance = 125
    centre = (97.075, 97.075)
    pix_size = (0.11, 0.11)
    image_size = (1765, 1765)
    wavelength = args.w or 1.0
    # 1. Make a dummy detector
    detector = DetectorFactory.simple(
        'SENSOR_UNKNOWN',  # Sensor
        distance,
        centre,
        '+x',
        '-y',  # fast/slow direction
        pix_size,
        image_size)

    # 2. Get the miller array!
    mill_array = process_mtz(args.mtzfile[0]).as_intensity_array()
    ortho = sqr(mill_array.crystal_symmetry().unit_cell().reciprocal() \
              .orthogonalization_matrix())

    # 3.Create some image_pickle dictionairies that contain 'full' intensities,
    # but are otherwise complete.
    im = 0
    while im < args.n:
        im += 1
        A = sqr(flex.random_double_r3_rotation_matrix()) * ortho
        orientation = crystal_orientation(A, basis_type.reciprocal)
        pix_coords, miller_set = get_pix_coords(wavelength, A, mill_array,
                                                detector)
        if len(miller_set) > 10:  # at least 10 reflections
            miller_set = cctbx.miller.set(mill_array.crystal_symmetry(),
                                          miller_set,
                                          anomalous_flag=False)
            obs = mill_array.common_set(miller_set)
            temp_dict = {
                'observations': [obs],
                'mapped_predictions': [pix_coords],
                'pointgroup': None,
                'current_orientation': [orientation],
                'xbeam': centre[0],
                'ybeam': centre[1],
                'wavelength': wavelength
            }
            old_node = ImageNode(dicti=temp_dict, scale=False)
            # Remove all reflection that are not at least p partial
            partial_sel = (old_node.partialities > p_threshold)

            temp_dict['full_observations'] = [obs.select(partial_sel)]
            temp_dict['observations'] = [
                obs.select(partial_sel) *
                old_node.partialities.select(partial_sel)
            ]
            temp_dict['mapped_predictions'] = \
                        [temp_dict['mapped_predictions'][0].select(partial_sel)]

            if logging.Logger.root.level <= logging.DEBUG:  # debug!
                before = temp_dict['full_observations'][0]
                after = temp_dict['observations'][0] / old_node.partialities
                assert sum(abs(before.data() - after.data())) < eps

            if args.r:
                partials = list(temp_dict['observations'][0].data())
                jiggled_partials = flex.double(
                    [random.gauss(obs, args.r * obs) for obs in partials])
                temp_dict['observations'][0] = temp_dict['observations'][0] \
                                            .customized_copy(data=jiggled_partials)

            pkl_name = "simulated_data_{0:04d}.pickle".format(im)
            with (open(pkl_name, 'wb')) as pkl:
                pickle.dump(temp_dict, pkl)
            ''' Only works with no noise: