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
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:
In addition, your own structures can be generated using the
This tutorial will show how to do this.
The class is initialized by specifying the size of the image, using
>>> 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
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
>>> 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.