Many datasets contain different atomic structures, which should be processed separately in different sublattices. For example precipitates in an Aluminium matrix.
>>> %matplotlib nbagg >>> import atomap.api as am >>> s = am.dummy_data.get_precipitate_signal() >>> s.plot()
Due to the different structures, we want to process the precipitate (in the centre) and the matrix separately.
The easiest way of doing this is using the
Firstly, find all the atom positions:
>>> atom_positions = am.get_atom_positions(s, 8)
Then select the precipitate with
>>> atoms_precipitate = am.select_atoms_with_gui(s, atom_positions)
The region can also be selected non-interactively, by using the
See Selecting atoms with GUI for an example of this.
We use this subset of atoms to create a sublattice
>>> sublattice_p = am.Sublattice(atoms_precipitate, s) >>> sublattice_p.plot()
The atoms in the matrix is selected using the same function, but with
>>> atoms_matrix = am.select_atoms_with_gui(s, atom_positions, invert_selection=True)
We use this subset of atoms to create a sublattice for the matrix
>>> sublattice_m = am.Sublattice(atoms_matrix, s, color='blue') >>> sublattice_m.plot()
These two sublattices can then be added to an
>>> atom_lattice = am.Atom_Lattice(s, sublattice_list=[sublattice_p, sublattice_m]) >>> atom_lattice.plot()
Analysing the sublattices¶
Getting the intensity of the atomic columns can be done without doing any position refinement or other processing.
>>> i_points, i_record, p_record = atom_lattice.integrate_column_intensity() >>> i_record.plot()
Note the higher intensity at the border of the image, which is due to the atoms at the edge of dataset not being identified as individual atoms.
So their intensity is added to the closest ones.
This effect can be reduced by using the
max_radius parameter in
integrate_column_intensity(), or by cropping the intensity output.
>>> i_record.isig[30:-30, 30:-30].plot()
isig is a method for cropping HyperSpy signals.
Distance between precipitate atoms¶
See Distance between monolayers for more information.
Run position refinements for the precipitate sublattice, firstly by finding the atomic planes, and then refining the positions.
>>> sublattice_p.construct_zone_axes() >>> sublattice_p.refine_atom_positions_using_center_of_mass() >>> sublattice_p.refine_atom_positions_using_2d_gaussian()
Visualize this for the first zone axis:
>>> za0 = sublattice_p.zones_axis_average_distances >>> s_mono0 = sublattice_p.get_monolayer_distance_map([za0]) >>> s_mono0.plot()