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()
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
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
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")
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()