示例#1
0
    def setup_class(cls):
        ex_dir_ = os.path.dirname(__file__) + '/../../examples'

        # Load beam
        beam = ps.Beam(ex_dir_+'/input/beam/amo86615.beam')

        # Load and initialize the detector
        det = ps.PnccdDetector(
            geom=ex_dir_+'/input/lcls/amo86615/'
                 'PNCCD::CalibV1/Camp.0:pnCCD.1/geometry/0-end.data',
            beam=beam)

        cls.mesh_length = 15
        cls.mesh, voxel_length = det.get_reciprocal_mesh(
            voxel_number_1d=cls.mesh_length)

        # 1 Atom
        cls.particle_1 = ps.Particle()
        cls.particle_1.create_from_atoms([
            ("O", np.array([0., 0., 0.]))
        ])
        cls.volume_1 = pg.calculate_diffraction_pattern_gpu(
            cls.mesh, cls.particle_1)

        # 2 Atoms x
        cls.particle_2x = ps.Particle()
        cls.particle_2x.create_from_atoms([
            ("O", cst.vecx),
            ("O", -cst.vecx)
        ])
        cls.volume_2x = pg.calculate_diffraction_pattern_gpu(
            cls.mesh, cls.particle_2x)

        # 2 Atoms y
        cls.particle_2y = ps.Particle()
        cls.particle_2y.create_from_atoms([
            ("O", cst.vecy),
            ("O", -cst.vecy)
        ])
        cls.volume_2y = pg.calculate_diffraction_pattern_gpu(
            cls.mesh, cls.particle_2y)

        # 2 Atoms z
        cls.particle_2z = ps.Particle()
        cls.particle_2z.create_from_atoms([
            ("O", cst.vecz),
            ("O", -cst.vecz)
        ])
        cls.volume_2z = pg.calculate_diffraction_pattern_gpu(
            cls.mesh, cls.particle_2z)
    def setup_class(cls):
        ex_dir_ = os.path.dirname(__file__) + '/../../../examples'

        # Load beam
        beam = ps.Beam(ex_dir_ + '/input/beam/amo86615.beam')

        # Load and initialize the detector
        np.random.seed(0)
        det = ps.Epix10kDetector(
            geom=ex_dir_ + '/input/lcls/xcsx35617/'
            'Epix10ka2M::CalibV1/XcsEndstation.0:Epix10ka2M.0/geometry/0-end.data',
            run_num=0,
            beam=beam,
            cameraConfig='fixedMedium')
        cls.det = det

        cls.pos_recip = det.pixel_position_reciprocal

        # Ref Particle
        cls.particle_0 = ps.Particle()
        cls.particle_0.create_from_atoms([  # Angstrom
            ("O", cst.vecx),
            ("O", 2 * cst.vecy),
            ("O", 3 * cst.vecz),
        ])
        cls.pattern_0 = pg.calculate_diffraction_pattern_gpu(
            cls.pos_recip, cls.particle_0, return_type="complex_field")

        # Second Particle
        cls.part_coord_1 = np.array((0.5, 0.2, 0.1))  # Angstrom
        cls.particle_1 = ps.Particle()
        cls.particle_1.create_from_atoms([  # Angstrom
            ("O", cst.vecx + cls.part_coord_1),
            ("O", 2 * cst.vecy + cls.part_coord_1),
            ("O", 3 * cst.vecz + cls.part_coord_1),
        ])
        cls.part_coord_1 *= 1e-10  # Angstrom -> meter
        cls.pattern_1 = pg.calculate_diffraction_pattern_gpu(
            cls.pos_recip, cls.particle_1, return_type="complex_field")

        # Flat Field
        cls.flatField = np.ones(
            (cls.det.panel_num, cls.det.panel_pixel_num_x[0],
             cls.det.panel_pixel_num_y[0])) * 1.0
        cls.I0width = 0.03
        cls.I0min = 0
        cls.I0max = 150000
        cls.bauf = BuildAutoRangeFrames(cls.det, cls.I0width, cls.I0min,
                                        cls.I0max, cls.flatField)
        cls.bauf.makeFrame()
示例#3
0
    def __init__(self, det, beam, jet_radius, particles):
        self.det = det
        self.beam = beam
        self.jet_radius = jet_radius
        self.n_particle_kinds = len(particles)

        # Create mesh
        highest_k_beam = self.beam.get_highest_wavenumber_beam()
        recidet = ReciprocalDetector(self.det, highest_k_beam)
        mesh, self.voxel_length = recidet.get_reciprocal_mesh(
            voxel_number_1d=self.mesh_size)

        # Create volumes
        import pysingfel.gpu as pg
        self.volumes = []
        for particle in particles:
            if particle is None:
                self.volumes.append(np.zeros(mesh.shape[:-1], np.complex128))
                continue
            self.volumes.append(
                pg.calculate_diffraction_pattern_gpu(
                    mesh, particle, return_type='complex_field'))

        # soon obsolete flag to handle multi particle hit
        self.multi_particle_hit = False
示例#4
0
 def compute(self):
     import pysingfel.gpu as gpu
     stack = gpu.calculate_diffraction_pattern_gpu(self.hkl,
                                                   self.particle,
                                                   return_type="intensity")
     dist = np.linalg.norm(self.hkl, axis=-1)
     bins = np.rint(dist / 1e7).astype(np.int)
     saxs_weights = np.bincount(bins)
     saxs_acc = np.bincount(bins, weights=stack)
     saxs = saxs_acc / saxs_weights
     qaccs = np.bincount(bins, weights=dist)
     qs = qaccs / saxs_weights
     return qs, saxs
示例#5
0
    def setup_class(cls):
        ex_dir_ = os.path.dirname(__file__) + '/../../../examples'

        # Load beam
        beam = ps.Beam(ex_dir_+'/input/beam/amo86615.beam')

        # Load and initialize the detector
        det = ps.PnccdDetector(
            geom=ex_dir_+'/input/lcls/amo86615/'
                 'PNCCD::CalibV1/Camp.0:pnCCD.1/geometry/0-end.data',
            beam=beam)
        cls.det = det

        cls.pos_recip = det.pixel_position_reciprocal

        # Ref Particle
        cls.particle_0 = ps.Particle()
        cls.particle_0.create_from_atoms([  # Angstrom
            ("O", cst.vecx),
            ("O", 2*cst.vecy),
            ("O", 3*cst.vecz),
        ])
        cls.pattern_0 = pg.calculate_diffraction_pattern_gpu(
            cls.pos_recip, cls.particle_0, return_type="complex_field")

        # Second Particle
        cls.part_coord_1 = np.array((0.5, 0.2, 0.1))  # Angstrom
        cls.particle_1 = ps.Particle()
        cls.particle_1.create_from_atoms([  # Angstrom
            ("O", cst.vecx + cls.part_coord_1),
            ("O", 2*cst.vecy + cls.part_coord_1),
            ("O", 3*cst.vecz + cls.part_coord_1),
        ])
        cls.part_coord_1 *= 1e-10  # Angstrom -> meter
        cls.pattern_1 = pg.calculate_diffraction_pattern_gpu(
            cls.pos_recip, cls.particle_1, return_type="complex_field")
示例#6
0
    def __init__(self, pdb_file, colors=False, debug=False):
        super(ApplicationWindow, self).__init__()
        self.debug = debug

        # Create a particle object
        self.particle = ps.Particle()
        self.particle.read_pdb(pdb_file, ff='WK')

        # Load beam
        beam = ps.Beam('../input/beam/amo86615.beam')

        # Load and initialize the detector
        self.det = ps.PnccdDetector(
            geom='../input/lcls/amo86615/PNCCD::CalibV1/'
            'Camp.0:pnCCD.1/geometry/0-end.data',
            beam=beam)

        mesh_length = 151 if not debug else 31
        mesh, self.voxel_length = self.det.get_reciprocal_mesh(
            voxel_number_1d=mesh_length)

        self.volume = pg.calculate_diffraction_pattern_gpu(
            mesh, self.particle, return_type='intensity')

        self.pixel_momentum = self.det.pixel_position_reciprocal

        if colors:
            color_map = collections.defaultdict(lambda: "#000000", {
                "C": "#ff0000",
                "N": "#00ff00",
                "O": "#0000ff",
            })
            colors = [color_map[s] for s in self.particle.atomic_symbol]
        else:
            colors = None

        self._azim = None
        self._elev = None
        self._time = 0.
        self._uptodate = False

        self._main = QtWidgets.QWidget()
        self.setCentralWidget(self._main)
        layout = QtWidgets.QHBoxLayout(self._main)

        real3d_canvas = FigureCanvas(Figure(figsize=(4, 4)))
        layout.addWidget(real3d_canvas)
        self.addToolBar(NavigationToolbar(real3d_canvas, self))

        self._real3d_ax = real3d_canvas.figure.subplots(
            subplot_kw={"projection": '3d'})
        self._real3d_ax.scatter(
            -self.particle.atom_pos[:, 2],
            self.particle.atom_pos[:, 1],
            self.particle.atom_pos[:, 0],
            s=1,
            c=colors,
        )
        self._real3d_ax.set_title("3D Protein")
        self._real3d_ax.set_xlabel('-Z')
        self._real3d_ax.set_ylabel('Y')
        self._real3d_ax.set_zlabel('X')

        if self.debug:
            real2d_canvas = FigureCanvas(Figure(figsize=(4, 4)))
            layout.addWidget(real2d_canvas)
            self.addToolBar(NavigationToolbar(real2d_canvas, self))

            self._real2d_ax = real2d_canvas.figure.subplots()

        recip_canvas = FigureCanvas(Figure(figsize=(4, 4)))
        layout.addWidget(recip_canvas)
        self.addToolBar(NavigationToolbar(recip_canvas, self))

        self._recip_ax = recip_canvas.figure.subplots()

        self._timer = recip_canvas.new_timer(100,
                                             [(self._update_canvas, (), {})])
        self._timer.start()