Several phases

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()
_images/precipitate_signal.png

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 select_atoms_with_gui() function. Firstly, find all the atom positions:

>>> atom_positions = am.get_atom_positions(s, 8)

Precipitate

Then select the precipitate with select_atoms_with_gui():

>>> atoms_precipitate = am.select_atoms_with_gui(s, atom_positions)
_images/atom_selector_gui.gif

The region can also be selected non-interactively, by using the verts parameter. 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()
_images/precipitate_sublattice.png

Matrix

The atoms in the matrix is selected using the same function, but with invert_selection=True.

>>> atoms_matrix = am.select_atoms_with_gui(s, atom_positions, invert_selection=True)
_images/atom_selector_invert_selection_gui.gif

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()
_images/matrix_sublattice.png

These two sublattices can then be added to an Atom_Lattice object.

>>> atom_lattice = am.Atom_Lattice(s, sublattice_list=[sublattice_p, sublattice_m])
>>> atom_lattice.plot()
_images/atom_lattice3.png

Analysing the sublattices

Intensity

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()
_images/atom_lattice_integrate.png

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()
_images/atom_lattice_integrate_crop.png

Where 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[0]
>>> s_mono0 = sublattice_p.get_monolayer_distance_map([za0])
>>> s_mono0.plot()
_images/precipitate_monolayer0.png