Exemple #1
0
def get_simple_atom_lattice_two_sublattices(image_noise=False):
    """Returns a simple atom_lattice with two sublattices.

    Parameters
    ----------
    image_noise : bool, default False

    Returns
    -------
    simple_atom_lattice : Atom_Lattice object

    Examples
    --------
    >>> import atomap.api as am
    >>> al = am.dummy_data.get_simple_atom_lattice_two_sublattices()
    >>> al.plot()

    """
    test_data_1 = MakeTestData(300, 300)
    test_data_2 = MakeTestData(300, 300)
    test_data_3 = MakeTestData(300, 300)
    if image_noise:
        test_data_3.add_image_noise(mu=0, sigma=0.02)
    _make_atom_lists_two_sublattices(test_data_1, test_data_2)
    _make_atom_lists_two_sublattices(test_data_3)

    sublattice_1 = test_data_1.sublattice
    sublattice_2 = test_data_2.sublattice
    sublattice_2._plot_color = 'b'
    image = test_data_3.signal.data
    atom_lattice = al.Atom_Lattice(
        image=image,
        name='Simple Atom Lattice',
        sublattice_list=[sublattice_1, sublattice_2])
    return (atom_lattice)
Exemple #2
0
    def setup_method(self):
        image_data = np.arange(10000).reshape(100, 100)
        peaks0 = np.arange(20).reshape(10, 2)
        peaks1 = np.arange(26).reshape(13, 2)

        sublattice0 = Sublattice(atom_position_list=peaks0, image=image_data)
        sublattice1 = Sublattice(atom_position_list=peaks1, image=image_data)
        self.atom_lattice = al.Atom_Lattice()
        self.atom_lattice.sublattice_list.extend([sublattice0, sublattice1])
        self.atom_lattice.image0 = image_data
        self.tmpdir = tempfile.TemporaryDirectory()
Exemple #3
0
    def test_save_load_atom_lattice_atom_values(self):
        image_data = np.arange(10000).reshape(100, 100)

        atom0_pos = np.random.random(size=(30, 2)) * 10
        atom0_sigma_x = np.random.random(size=30)
        atom0_sigma_y = np.random.random(size=30)
        atom0_rot = np.random.random(size=30)
        atom1_pos = np.random.random(size=(30, 2)) * 10
        atom1_sigma_x = np.random.random(size=30)
        atom1_sigma_y = np.random.random(size=30)
        atom1_rot = np.random.random(size=30)

        sublattice0 = Sublattice(atom_position_list=atom0_pos,
                                 image=image_data)
        sublattice1 = Sublattice(atom_position_list=atom1_pos,
                                 image=image_data)
        for i, atom in enumerate(sublattice0.atom_list):
            atom.sigma_x = atom0_sigma_x[i]
            atom.sigma_y = atom0_sigma_y[i]
            atom.rotation = atom0_rot[i]
        for i, atom in enumerate(sublattice1.atom_list):
            atom.sigma_x = atom1_sigma_x[i]
            atom.sigma_y = atom1_sigma_y[i]
            atom.rotation = atom1_rot[i]

        atom_lattice = al.Atom_Lattice()
        atom_lattice.sublattice_list.extend([sublattice0, sublattice1])
        atom_lattice.image0 = image_data

        save_path = pjoin(self.tmpdir.name, "atomic_lattice.hdf5")

        atom_lattice.save(filename=save_path, overwrite=True)
        atom_lattice_load = load_atom_lattice_from_hdf5(
            save_path, construct_zone_axes=False)
        sl0 = atom_lattice_load.sublattice_list[0]
        sl1 = atom_lattice_load.sublattice_list[1]

        assert (sl0.x_position == atom0_pos[:, 0]).all()
        assert (sl0.y_position == atom0_pos[:, 1]).all()
        assert (sl1.x_position == atom1_pos[:, 0]).all()
        assert (sl1.y_position == atom1_pos[:, 1]).all()
        assert (sl0.sigma_x == atom0_sigma_x).all()
        assert (sl0.sigma_y == atom0_sigma_y).all()
        assert (sl1.sigma_x == atom1_sigma_x).all()
        assert (sl1.sigma_y == atom1_sigma_y).all()
        assert (sl0.rotation == atom0_rot).all()
        assert (sl1.rotation == atom1_rot).all()
Exemple #4
0
def _get_fantasite_atom_lattice():
    test_data1 = MakeTestData(500, 500)
    test_data1 = _add_fantasite_sublattice_A(test_data1)
    test_data2 = MakeTestData(500, 500)
    test_data2 = _add_fantasite_sublattice_B(test_data2)
    test_data3 = MakeTestData(500, 500)
    test_data3 = _add_fantasite_sublattice_A(test_data3)
    test_data3 = _add_fantasite_sublattice_B(test_data3)
    test_data3.add_image_noise(mu=0, sigma=0.01, random_seed=0)

    sublattice_1 = test_data1.sublattice
    sublattice_2 = test_data2.sublattice
    sublattice_1._plot_color = 'b'
    image = test_data3.signal.data
    atom_lattice = al.Atom_Lattice(
        image=image,
        name='Fantasite Atom Lattice',
        sublattice_list=[sublattice_1, sublattice_2])
    return (atom_lattice)
Exemple #5
0
def get_polarization_film_atom_lattice(image_noise=False):
    """Get an Atom Lattice with two sublattices resembling a perovskite film.

    Similar to a perovskite oxide thin film, where the B cations
    are shifted in the film.

    Parameters
    ----------
    image_noise : bool, default False

    Returns
    -------
    simple_atom_lattice : Atom_Lattice object

    Examples
    --------
    >>> import atomap.api as am
    >>> atom_lattice = am.dummy_data.get_polarization_film_atom_lattice()
    >>> atom_lattice.plot()

    With image noise

    >>> atom_lattice = am.dummy_data.get_polarization_film_atom_lattice(
    ...     image_noise=True)
    >>> atom_lattice.plot()

    """
    test_data0 = _make_polarization_film_A(image_noise=image_noise)
    test_data1 = _make_polarization_film_B(image_noise=image_noise)
    image = test_data0.signal.data + test_data1.signal.data

    sublattice0 = test_data0.sublattice
    sublattice1 = test_data1.sublattice
    sublattice0.image = image
    sublattice1.image = image
    sublattice0.original_image = image
    sublattice1.original_image = image
    sublattice1._plot_color = 'b'
    atom_lattice = al.Atom_Lattice(image=image,
                                   name='Perovskite film',
                                   sublattice_list=[sublattice0, sublattice1])
    return atom_lattice
Exemple #6
0
def load_atom_lattice_from_hdf5(filename, construct_zone_axes=True):
    """
    Load an Atomap HDF5-file, restoring a saved Atom_Lattice.

    Parameters
    ----------
    filename : string
        Filename of the HDF5-file.
    construct_zone_axes : bool
        If True, find relations between atomic positions by
        constructing atomic planes. Default True.

    Returns
    -------
    Atomap Atom_Lattice object

    """
    h5f = h5py.File(filename, 'r')

    if 'atom_lattice_type' in h5f.attrs.keys():
        atom_lattice_type = h5f.attrs['atom_lattice_type']
        if 'Atom_Lattice' in atom_lattice_type:
            atom_lattice = al.Atom_Lattice()
        elif 'Dumbbell_Lattice' in atom_lattice_type:
            atom_lattice = al.Dumbbell_Lattice()
        else:
            atom_lattice = al.Atom_Lattice()
    else:
        atom_lattice = al.Atom_Lattice()

    sublattice_list = []
    sublattice_index_list = []
    for group_name in h5f:
        if ('atom_lattice' in group_name) or ('sublattice' in group_name):
            sublattice_set = h5f[group_name]
            modified_image_data = sublattice_set['modified_image_data'][:]
            original_image_data = sublattice_set['original_image_data'][:]
            atom_position_array = sublattice_set['atom_positions'][:]

            if 'sublattice_index' in sublattice_set.attrs.keys():
                sublattice_index_list.append(
                    sublattice_set.attrs['sublattice_index'])

            sublattice = Sublattice(atom_position_array, modified_image_data)
            sublattice.original_image = original_image_data

            if 'sigma_x' in sublattice_set.keys():
                sigma_x_array = sublattice_set['sigma_x'][:]
                for atom, sigma_x in zip(sublattice.atom_list, sigma_x_array):
                    atom.sigma_x = sigma_x
            if 'sigma_y' in sublattice_set.keys():
                sigma_y_array = sublattice_set['sigma_y'][:]
                for atom, sigma_y in zip(sublattice.atom_list, sigma_y_array):
                    atom.sigma_y = sigma_y
            if 'rotation' in sublattice_set.keys():
                rotation_array = sublattice_set['rotation'][:]
                for atom, rotation in zip(sublattice.atom_list,
                                          rotation_array):
                    atom.rotation = rotation

            sublattice.pixel_size = sublattice_set.attrs['pixel_size']

            if 'tag' in sublattice_set.attrs.keys():
                sublattice.name = sublattice_set.attrs['tag']
            elif 'name' in sublattice_set.attrs.keys():
                sublattice.name = sublattice_set.attrs['name']
            else:
                sublattice.name = ''

            if type(sublattice.name) == bytes:
                sublattice.name = sublattice.name.decode()

            sublattice._plot_color = sublattice_set.attrs['plot_color']

            if type(sublattice._plot_color) == bytes:
                sublattice._plot_color = sublattice._plot_color.decode()

            if 'pixel_separation' in sublattice_set.attrs.keys():
                sublattice._pixel_separation = sublattice_set.attrs[
                    'pixel_separation']
            else:
                sublattice._pixel_separation = 0.0

            if construct_zone_axes:
                construct_zone_axes_from_sublattice(sublattice)

            if 'zone_axis_names_byte' in sublattice_set.keys():
                zone_axis_list_byte = sublattice_set.attrs[
                    'zone_axis_names_byte']
                zone_axis_list = []
                for zone_axis_name_byte in zone_axis_list_byte:
                    zone_axis_list.append(zone_axis_name_byte.decode())
                sublattice.zones_axis_average_distances_names = zone_axis_list

            sublattice_list.append(sublattice)

        if group_name == 'image_data':
            atom_lattice.image = h5f[group_name][:]
        if group_name == 'image_data0':
            atom_lattice.image = h5f[group_name][:]

        if group_name == 'image_extra_data':
            atom_lattice.image_extra = h5f[group_name][:]
        if group_name == 'image_data1':
            atom_lattice.image_extra = h5f[group_name][:]

        if group_name == 'original_image_data':
            atom_lattice.original_image = h5f[group_name][:]

    sorted_sublattice_list = []
    if not sublattice_index_list:  # Support for older hdf5 files
        sublattice_index_list = range(len(sublattice_list))
    for sublattice_index in sublattice_index_list:
        sorted_sublattice_list.append(sublattice_list[sublattice_index])
    atom_lattice.sublattice_list.extend(sorted_sublattice_list)
    if 'name' in h5f.attrs.keys():
        atom_lattice.name = h5f.attrs['name']
    elif 'path_name' in h5f.attrs.keys():
        atom_lattice.name = h5f.attrs['path_name']
    if 'pixel_separation' in h5f.attrs.keys():
        atom_lattice._pixel_separation = h5f.attrs['pixel_separation']
    else:
        atom_lattice._pixel_separation = 0.8 / sublattice.pixel_size
    if type(atom_lattice.name) == bytes:
        atom_lattice.name = atom_lattice.name.decode()
    h5f.close()
    return (atom_lattice)