Beispiel #1
0
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()
Beispiel #2
0
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')
Beispiel #5
0
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)
Beispiel #7
0
    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')