Atomic Quantification
The analysis.quantification module converts peak intensities into atomic
concentrations using Relative Sensitivity Factors (RSF).
Theory
Quantification is based on the fundamental XPS intensity equation:
where \(I_i\) is the peak area for element \(i\), \(\sigma_i\) is the photoionization cross-section (RSF), \(\Phi\) is the X-ray flux, \(T\) is the analyzer transmission function, \(\lambda\) is the inelastic mean free path, and \(A\) is the analysis area. The atomic concentration is:
RSF Databases
| Database | Source | Coverage |
|---|---|---|
| Scofield | Scofield, 1976 | All elements, Al K\(\alpha\) |
| Wagner | Wagner, 1983 | Empirical, common XPS lines |
from xps_analyzer.analysis import load_sensitivity_factors
rsf = load_sensitivity_factors(database="scofield")
# rsf is a dict: {element_symbol: sensitivity_factor}
API Reference
calculate_atomic_concentration
from xps_analyzer.analysis import calculate_atomic_concentration
concentrations = calculate_atomic_concentration(
dataset=dataset,
rsf_database=rsf,
corrections=["transmission", "imfp"]
)
Parameters:
| Parameter | Type | Description |
|---|---|---|
dataset |
XPSDataset |
Calibrated dataset with fitted peaks |
rsf_database |
dict |
Element RSF values |
corrections |
list[str] |
Optional corrections: transmission, imfp |
Returns: dict[str, float] — atomic percentages keyed by element.
normalize_to_100
Normalizes concentrations to sum to 100%. Detected elements below detection threshold (configurable, default 0.1 at.%) are excluded.
quantify_dataset
Runs the full quantification pipeline on an entire dataset:
from xps_analyzer.analysis import quantify_dataset
summary = quantify_dataset(dataset, rsf_database="scofield")
# summary is a DataFrame with elements, peak areas, RSF, and at.%
Correction Factors
Transmission Function Correction
The analyzer transmission function \(T(E)\) depends on the pass energy and lens mode.
Correction factors are loaded from config/instrument_profiles.toml:
IMFP Correction
The inelastic mean free path \(\lambda(E)\) is energy-dependent. The correction uses the TPP-2M formula (Tanuma, Powell, Penn):
where \(E_p\) is the free-electron plasmon energy and \(\beta, \gamma, C, D\) are material-dependent parameters.