def update_generator(_=None): beam_energy = slider_energy.val specimen_thickness = slider_thick.val global gen gen = pxm.DiffractionGenerator(beam_energy, max_excitation_error=1 / specimen_thickness) update_pattern()
def get_library(default_structure): diffraction_calculator = pxm.DiffractionGenerator(300., 0.02) dfl = pxm.DiffractionLibraryGenerator(diffraction_calculator) structure_library = StructureLibrary(['Phase'], [default_structure], [np.array([(0, 0, 0), (0, 0.2, 0)])]) return dfl.get_diffraction_library(structure_library, 0.017, 2.4, (72, 72))
def create_diffraction_library(specimen_thickness, beam_energy_keV, reciprocal_angstrom_per_pixel, rotation_list_resolution, phase_descriptions, inplane_rotations, pattern_size): """Create a diffraction library. Parameters ---------- specimen_thickness : float Specimen thickness in angstrom, used to calculate max excitation eror. beam_energy_keV : float Beam energy in keV. reciprocal_angstrom_per_pixel : float Calibration in reciprocal space, (Å^-1)/px. rotation_list_resolution : float Rotation list resolution in radians. phase_descriptions : list List with one phase description for each phase. A phase description is a triplet of (phase_name, structure, crystal system). inplane_rotations : list List with one list of inplane rotations in radians for each phase. pattern_size : int Side length in pixels of the generated diffraction patterns. Returns ------- diffraction_library : DiffractionLibrary Diffraction library created using given parameters. structure_library : StructureLibrary Structure library with orientations from a stereographic triangle used to create the diffraction library. """ half_pattern_size = pattern_size // 2 max_excitation_error = 1 / specimen_thickness # Create a pyxem.StructureLibrary from the phase descriptions using a # stereographic projection. structure_library_generator = StructureLibraryGenerator(phase_descriptions) structure_library = structure_library_generator.get_orientations_from_stereographic_triangle( inplane_rotations, rotation_list_resolution) # Set up the diffraction generator from the given parameters gen = pxm.DiffractionGenerator(beam_energy_keV, max_excitation_error=max_excitation_error) library_generator = DiffractionLibraryGenerator(gen) reciprocal_radius = reciprocal_angstrom_per_pixel * (half_pattern_size - 1) # Finally, actually create the DiffractionLibrary. The library is created # without the direct beam since it does not contribute to matching. diffraction_library = library_generator.get_diffraction_library( structure_library, calibration=reciprocal_angstrom_per_pixel, reciprocal_radius=reciprocal_radius, half_shape=(half_pattern_size, half_pattern_size), with_direct_beam=False) return diffraction_library, structure_library
def get_library(): diffraction_calculator = pxm.DiffractionGenerator(300., 0.02) dfl = pxm.DiffractionLibraryGenerator(diffraction_calculator) element = pmg.Element('Si') lattice = pmg.Lattice.cubic(5) structure = pmg.Structure.from_spacegroup("F-43m", lattice, [element], [[0, 0, 0]]) structure_library = {'Si': (structure, [(0, 0, 0)])} return dfl.get_diffraction_library( structure_library, 0.017, 2.4, (72,72) ,'euler')
def show_rotation_list(structure_info, reciprocal_angstrom_per_pixel, simulated_gaussian_sigma, beam_energy, specimen_thickness): phases = [structure_info['name']] # Ångström^{-1}, extent of relrods in reciprocal space. Inverse of specimen thickness is a starting points max_excitation_error = 1 / specimen_thickness reciprocal_radius = reciprocal_angstrom_per_pixel * (half_pattern_size - 1) structure = structure_info['structure'] rotation_list = generate_complete_rotation_list(structure, *structure_info['corners'], [0], resolution=np.deg2rad(1)) # Only one inplane rotation angle, remove this extra dimension rotation_list = rotation_list.reshape(rotation_list.shape[0], -1, 3, 3) rotation_list_euler = rotation_matrices_to_euler(rotation_list) structure_library = StructureLibrary(phases, [structure], [rotation_list_euler]) gen = pxm.DiffractionGenerator(beam_energy, max_excitation_error=max_excitation_error) library_generator = pxm.DiffractionLibraryGenerator(gen) diffraction_library = library_generator.get_diffraction_library( structure_library, calibration=reciprocal_angstrom_per_pixel, reciprocal_radius=reciprocal_radius, half_shape=(half_pattern_size, half_pattern_size), with_direct_beam=False) plot_lib_2d(diffraction_library, phase_name=structure_info['name'], rotation_list=rotation_list, size=target_pattern_dimension_pixels, scale=reciprocal_angstrom_per_pixel, sigma=simulated_gaussian_sigma, max_r=reciprocal_radius) plt.show()
def edc(): return pxm.DiffractionGenerator(300, 5e-2)
simulated_gaussian_sigma = slider_sigma.val beam_energy = slider_energy.val specimen_thickness = slider_thick.val structure_info = structures[current_structure] update_rotation( generate_complete_rotation_list(structure_info['structure'], *structure_info['corners'], [0], resolution=np.deg2rad(2))) show_rotation_list(structures[current_structure], reciprocal_angstrom_per_pixel, simulated_gaussian_sigma, beam_energy, specimen_thickness) gen = pxm.DiffractionGenerator(beam_energy_keV, max_excitation_error=1 / specimen_thickness) # Choose local rotation list method generate_rotation_list = generate_fibonacci_spiral fig = plt.figure() ax_real = fig.add_axes([0.55, 0.25, 0.45, 0.72], projection='3d') [ax_a], [ax_b], [ax_c], rotation_scatter = plot_3d_axes(ax_real) ax_img = fig.add_axes([0.05, 0.25, 0.45, 0.72]) img = ax_img.imshow(np.ones( (target_pattern_dimension_pixels, target_pattern_dimension_pixels)), vmin=0, vmax=1, cmap='viridis')