Custom standardΒΆ
This tutorial shows how to use different standards in the definition of the
Experiment
.
The possibly to easily define standards is certainly an interesting feature of
stratagemtools, in comparison to the graphical interface of STRATAGem where
the standards must be manually defined and saved in separate files.
In stratagemtools, a standard is a Sample
.
Any sample definition can be used as a standard, as long as the composition
and thickness of every layer are known.
This example shows how to use three different standards to calculate the Al, O
and Si \(\text{K}\alpha\) k-ratios from the previous tutorial,
Calculate k-ratios.
We import the same packages and constants as the last tutorial
import math
from stratagemtools.sample import Sample, composition_from_formula
from stratagemtools.experiment import Experiment, LINE_KA
from stratagemtools.stratagem import Stratagem, PRZMODE_XPP, FLUORESCENCE_LINE_CONT
import stratagemtools.element_properties as ep
and create the unknown sample, a 30-nm Al2O3 layer over a Si substrate
unknown = Sample({14: 1.0}) comp = composition_from_formula('Al2O3') unknown.add_layer(comp, 30e-9, density_kg_m3=3950.0)
Now we define three standards, Fe2O3, SiO2 and Al2O3:
std_fe2o3 = Sample(composition_from_formula('Fe2O3'), density_kg_m3=5240.0) std_sio2 = Sample(composition_from_formula('SiO2'), density_kg_m3=2650.0) std_al2o3 = Sample(composition_from_formula('Al2O3'), density_kg_m3=3950.0)
We then create experiments for Si and Al using the new standards. Note that in the previous tutorial pure standards were assumed.
energy_eV = 15e3 exp_si = Experiment(14, LINE_KA, energy_eV, standard=std_sio2) exp_al = Experiment(13, LINE_KA, energy_eV, standard=std_al2o3)
For the O \(\text{K}\alpha\), all three standards can be used. To illustrate how easy it is to change the standard, we will loop over the standards and define a new experiment using each standard. This gives
with Stratagem() as strata: strata.set_geometry(math.radians(40), 0.0, 0.0) strata.set_prz_mode(PRZMODE_XPP) strata.set_fluorescence(FLUORESCENCE_LINE_CONT) for std_name, std_o in [('Fe2O3', std_fe2o3), ('SiO2', std_sio2), ('Al2O3', std_al2o3)]: exp_o = Experiment(8, LINE_KA, energy_eV, standard=std_o) strata.reset() strata.set_sample(unknown) strata.add_experiments(exp_si, exp_al, exp_o) kratios = strata.compute_kratios() print(std_name) for exp, kratio in kratios.items(): print('{0}: {1:.3f}'.format(ep.symbol(exp.z), kratio)) print('-' * 80)