Ejemplo n.º 1
0
def test_strain_mapping_affine_transform():
    latt = diffpy.structure.lattice.Lattice(3, 3, 3, 90, 90, 90)
    atom = diffpy.structure.atom.Atom(atype='Zn', xyz=[0, 0, 0], lattice=latt)
    structure = diffpy.structure.Structure(atoms=[atom], lattice=latt)
    ediff = DiffractionGenerator(300., 0.025)
    affines = [[[1, 0, 0], [0, 1, 0], [0, 0, 1]],
               [[1.04, 0, 0], [0, 1, 0], [0, 0, 1]],
               [[1.08, 0, 0], [0, 1, 0], [0, 0, 1]],
               [[1.12, 0, 0], [0, 1, 0], [0, 0, 1]]]

    data = []
    for affine in affines:
        # same coords as used for latt above
        latt_rot = diffpy.structure.lattice.Lattice(3, 3, 3, 90, 90, 90, baserot=affine)
        structure.placeInLattice(latt_rot)

        diff_dat = ediff.calculate_ed_data(structure, 2.5)
        dpi = sim_as_signal(diff_dat, 64, 0.02, 2.5)
        data.append(dpi.data)
    data = np.array(data)
    dp = ElectronDiffraction2D(data.reshape((2, 2, 64, 64)))

    m = dp.create_model()
    ref = ScalableReferencePattern(dp.inav[0, 0])
    m.append(ref)
    m.multifit()
    disp_grad = ref.construct_displacement_gradient()

    assert disp_grad.data.shape == np.asarray(affines).reshape(2, 2, 3, 3).shape
Ejemplo n.º 2
0
def get_library(default_structure):
    diffraction_calculator = DiffractionGenerator(300., 0.02)
    dfl = 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))
Ejemplo n.º 3
0
 def test_appropriate_scaling(self,
                              diffraction_calculator: DiffractionGenerator):
     """Tests that doubling the unit cell halves the pattern spacing."""
     silicon = make_structure(5)
     big_silicon = make_structure(10)
     diffraction = diffraction_calculator.calculate_ed_data(
         structure=silicon, reciprocal_radius=5.)
     big_diffraction = diffraction_calculator.calculate_ed_data(
         structure=big_silicon, reciprocal_radius=5.)
     indices = [tuple(i) for i in diffraction.indices]
     big_indices = [tuple(i) for i in big_diffraction.indices]
     assert (2, 2, 0) in indices
     assert (2, 2, 0) in big_indices
     coordinates = diffraction.coordinates[indices.index((2, 2, 0))]
     big_coordinates = big_diffraction.coordinates[big_indices.index(
         (2, 2, 0))]
     assert np.allclose(coordinates, big_coordinates * 2)
Ejemplo n.º 4
0
def test_lib_gen():
    diff_gen = DiffractionGenerator(
        accelerating_voltage=200,
        precession_angle=1,
        scattering_params="lobato",
        shape_factor_model="linear",
        minimum_intensity=0.05,
    )
    lib_gen = DiffractionLibraryGenerator(diff_gen)
    return lib_gen
Ejemplo n.º 5
0
def test_TemplateIndexationGenerator(default_structure, method):
    identifiers = ["a", "b"]
    structures = [default_structure, default_structure]
    orientations = [[(0, 0, 0), (0, 1, 0), (1, 0, 0)],
                    [(0, 0, 1), (0, 0, 2), (0, 0, 3)]]
    structure_library = StructureLibrary(identifiers, structures, orientations)
    libgen = DiffractionLibraryGenerator(DiffractionGenerator(300))
    library = libgen.get_diffraction_library(structure_library, 0.017, 0.02,
                                             (100, 100), False)

    edp = ElectronDiffraction2D(np.random.rand(2, 2, 200, 200))
    indexer = TemplateIndexationGenerator(edp, library)

    z = indexer.correlate(method=method, n_largest=2)
    assert isinstance(z, TemplateMatchingResults)
    assert isinstance(z.data, Signal2D)
    assert z.data.data.shape[0:2] == edp.data.shape[0:2]
    assert z.data.data.shape[3] == 5
Ejemplo n.º 6
0
def test_TemplateMatchingResults_plot_best_results_on_signal(
        diffraction_pattern, default_structure):
    """ Coverage testing """
    edc = DiffractionGenerator(300)
    half_side_length = 4
    rot_list = [[0, 1, 0], [1, 0, 0]]

    diff_gen = DiffractionLibraryGenerator(edc)
    struc_lib = StructureLibrary(["A"], [default_structure], [rot_list])
    library = diff_gen.get_diffraction_library(
        struc_lib,
        calibration=1 / half_side_length,
        reciprocal_radius=0.8,
        half_shape=(half_side_length, half_side_length),
        with_direct_beam=True,
    )
    indexer = TemplateIndexationGenerator(diffraction_pattern, library)
    match_results = indexer.correlate()
    match_results.plot_best_matching_results_on_signal(diffraction_pattern,
                                                       library=library)
    plt.close("all")
Ejemplo n.º 7
0
def diffraction_calculator():
    return DiffractionGenerator(300.0)
Ejemplo n.º 8
0
def default_simulator():
    accelerating_voltage = 300
    max_excitation_error = 1e-2
    return DiffractionGenerator(accelerating_voltage, max_excitation_error)
Ejemplo n.º 9
0
def default_simulator():
    accelerating_voltage = 300
    return DiffractionGenerator(accelerating_voltage)
Ejemplo n.º 10
0
 def test_init(self, diffraction_calculator: DiffractionGenerator):
     assert diffraction_calculator.debye_waller_factors == {}
     _ = DiffractionGenerator(300, 2)
Ejemplo n.º 11
0
def diffraction_calculator_precession_full():
    return DiffractionGenerator(300,
                                precession_angle=0.5,
                                approximate_precession=False)
Ejemplo n.º 12
0
def test_invalid_shape_model():
    generator = DiffractionGenerator(300, shape_factor_model="dracula")
Ejemplo n.º 13
0
def test_invalid_scattering_params():
    scattering_param = "_empty"
    generator = DiffractionGenerator(300, scattering_params=scattering_param)
Ejemplo n.º 14
0
def test_diffraction_generator_init(model, expected):
    generator = DiffractionGenerator(300, shape_factor_model=model)
    assert generator.shape_factor_model == expected
Ejemplo n.º 15
0
        im = pxm.load_hspy(dps.loc[image,'dp'])
        dp = pxm.ElectronDiffraction2D(im.data)
        dp.set_diffraction_calibration(im.axes_manager['kx'].scale)
        dp.set_scan_calibration(im.axes_manager['x'].scale)


        pattern_size = dp.axes_manager['x'].size
        calibration = dp.axes_manager['kx'].scale

        diffraction_calibration = calibration
        half_pattern_size = pattern_size // 2
        reciprocal_radius = diffraction_calibration*(half_pattern_size - 1)

        beam_energy = 300.0

        ediff = DiffractionGenerator(beam_energy, 0.025)
        diff_gen = DiffractionLibraryGenerator(ediff)
        template_library = diff_gen.get_diffraction_library(structure_library,
                                                            calibration=diffraction_calibration,
                                                            reciprocal_radius=reciprocal_radius-0.1,
                                                            half_shape=(half_pattern_size, half_pattern_size),
                                                            with_direct_beam=False)




        library_name = image.split('.')[0]+"_template_"+str(angular_resolution)+"_deg.pickle"
        template_library.pickle_library(library_name)
        dps.loc[image,'template_library'] = library_name

Ejemplo n.º 16
0
def test_param_check(scattering_param):
    generator = DiffractionGenerator(300,
                                     0.2,
                                     None,
                                     scattering_params=scattering_param)
Ejemplo n.º 17
0
def test_invalid_scattering_params():
    scattering_param = '_empty'
    generator = DiffractionGenerator(300,
                                     0.2,
                                     None,
                                     scattering_params=scattering_param)
Ejemplo n.º 18
0
def diffraction_calculator_precession_simple():
    return DiffractionGenerator(300,
                                precession_angle=0.5,
                                approximate_precession=True)
Ejemplo n.º 19
0
def diffraction_calculator(request):
    return DiffractionGenerator(*request.param)
Ejemplo n.º 20
0
def diffraction_calculator_custom():
    return DiffractionGenerator(300, shape_factor_model=local_excite, t=0.2)