Making datasets for testing
The functionality for generating specific test data is useful for
Testing processing tools on known standards
Finding parameter sensitivity for processing tools
Easily generate example datasets
Use in unit tests for Atomap
The atomap.dummy_data
module contains several pre-generated structures:
>>> import atomap.api as am
>>> s = am.dummy_data.get_dumbbell_signal()
>>> s.plot()
A full list of these pre-generated structures can be found in the API documentation for the dummy data module: atomap.dummy_data
In addition, your own structures can be generated using the atomap.testing_tools.MakeTestData
class.
This tutorial will show how to do this.
The class is initialized by specifying the size of the image, using image_x
and image_y
.
>>> import atomap.testing_tools as tt
>>> t1 = tt.MakeTestData(image_x=20, image_y=20)
>>> t1.add_atom(x=10, y=10)
>>> t1.signal.plot()
To a MakeTestData object you can add single atoms, or lists of atoms.
Note that the x
and y
arrays needs to be flattened first.
>>> import numpy as np
>>> t2 = tt.MakeTestData(200,200)
>>> x, y = np.mgrid[0:200:10j, 0:200:10j]
>>> x, y = x.flatten(), y.flatten()
>>> t2.add_atom_list(x, y)
>>> t2.signal.plot()
The key is to make lists of the x and y positions of the atoms in a sublattice. In the above example, the j means that 10 positions will be distributed between 0 and 200. Below, the exact separation between the positions is set. You can add many sublattices, and for each sublattice you can set the properties of the Gaussian used to model the atoms.
>>> t3 = tt.MakeTestData(200, 200)
>>> x, y = np.mgrid[0:200:20, 0:200:20]
>>> x, y = x.flatten(), y.flatten()
>>> t3.add_atom_list(x, y,sigma_x=2, sigma_y=1.5, amplitude=20, rotation=0.4)
>>> x, y = np.mgrid[10:200:20, 10:200:20]
>>> x, y = x.flatten(), y.flatten()
>>> t3.add_atom_list(x, y,sigma_x=2, sigma_y=2, amplitude=40)
>>> t3.add_image_noise(sigma=0.1)
>>> t3.signal.plot()
In the last example, image noise is added. The image noise is currently Gaussian distributed, and both the standard deviation and expectation value of the noise (mu) can be set. By default, mu=0.
It is also possible to make sublattice and atom lattice objects:
>>> sublattice3 = t3.sublattice
>>> atom_lattice3 = t3.atom_lattice
Large amount of atoms
Generating test signals with a large amount of atoms (2000+) can take a very long time.
However, sublattice objects can be generated quickly if the image is not needed.
This is done by using sublattice_generate_image=False
:
>>> testdata = tt.MakeTestData(1000, 1000, sublattice_generate_image=False)
>>> x, y = np.mgrid[0:1000:150j, 0:1000:150j]
>>> x, y = x.flatten(), y.flatten()
>>> testdata.add_atom_list(x, y)
>>> sublattice = testdata.sublattice
Note that this sublattice will not be useful for testing the position refinement and fitting functionality, as the image is all zeros. However, it can be useful for testing fingerprinting and construction of atom planes.