Aritmética posterior a la cuantificación de EDS, XRF, ICP-OES/MS y CHN(S) (matlens/core/composition.py) y herramientas de fórmula química (matlens/core/formula.py). MatLens acepta la cuantificación del fabricante: no implementa correcciones de matriz (ZAF, φ(ρz), parámetros fundamentales). Pesos atómicos estándar IUPAC 2021 (Prohaska et al., Pure Appl. Chem. 94 (2022) 573), redondeados; los elementos sin peso estándar usan el número másico del isótopo más longevo.
Masa molar y composición de una fórmula
Código: matlens/core/formula.py::molar_mass, matlens/core/formula.py::composition, matlens/core/formula.py::formula_from_at
con n_i los átomos por fórmula (admite estequiometría fraccionaria e hidratos), A_i el peso atómico (g/mol), w_i en % en peso y x_i en % atómico. Fórmula entera mínima: se dividen las proporciones por la menor y se prueban multiplicadores k = 1,\dots,24 hasta que todas las razones distan de un entero menos del 5 % relativo (si ninguno lo cumple, el de menor error máximo).
Conversión % en peso ↔ % atómico con incertidumbre
Código: matlens/core/composition.py::wt_to_at, matlens/core/composition.py::at_to_wt, matlens/core/composition.py::_renorm
Forma general o_i = 100\,q_i/Q con q_i = v_i f_i, Q = \sum q_j (f = 1/A o f = A), y propagación de primer orden (GUM, entradas no correlacionadas) con jacobiano analítico:
Incertidumbres 1σ (k=1). El % atómico se normaliza siempre a 100; el % en peso conserva el total analítico.
Referencia: JCGM 100:2008 (GUM), ec. 10.
Base de óxidos y oxígeno por estequiometría
Código: matlens/core/composition.py::oxygen_by_stoichiometry, matlens/core/composition.py::with_stoichiometric_oxygen, matlens/core/composition.py::elements_to_oxides, matlens/core/composition.py::oxides_to_elements
con v_i la valencia del catión (tabla editable; Fe se toma como Fe³⁺ por defecto), c_i los cationes por fórmula del óxido (v=3 \to M₂O₃) y n_e los átomos del elemento e en el óxido. O, F, Cl, Br, I y N no reciben oxígeno.
Referencia: Reed, Electron Microprobe Analysis and Scanning Electron Microscopy in Geology, 2.ª ed., CUP 2005, §13.4.
Fórmula mineral y Fe³⁺ por balance de cargas
Código: matlens/core/composition.py::formula_from_oxides, matlens/core/composition.py::formula_per_basis, matlens/core/composition.py::droop_fe3
con w_j el % en peso del óxido j, M_j su masa molar, x_j e y_j los cationes y oxígenos por fórmula del óxido y n_\mathrm{O} los oxígenos de referencia. Desde % atómico: \text{apfu}_i = x_i\,n/\sum_\text{ref} x (referencia: el O o la suma de cationes). Incertidumbre 1σ por propagación GUM con jacobiano por diferencias centrales (paso relativo 10^{-6}).
con X los oxígenos, T los cationes ideales y S la suma de cationes observada (Fe calculado como Fe²⁺). La fórmula estimada (estimate_formula) omite los elementos por debajo del 1 % atómico (trazas).
Referencia: Deer, Howie & Zussman, An Introduction to the Rock-Forming Minerals, 2.ª ed., Longman 1992, apéndice; Droop, Mineral. Mag. 51 (1987) 431, ec. 1.
Estadística de varias medidas
Código: matlens/core/composition.py::spot_statistics, matlens/core/composition.py::combine
con p = 0.95 por defecto. Un elemento ausente en una medida cuenta como 0. Al combinar, u(x) = \max\big(\mathrm{SEM},\; \sqrt{\sum_k u_k^2}/n\big) para el % atómico y \mathrm{SEM} para el % en peso (1σ).
Referencia: JCGM 100:2008, §4.2 y G.3.
ICP: digestión a sólido
Código: matlens/core/composition.py::icp_solid_mg_kg, matlens/core/composition.py::icp_to_solid
| Símbolo | Significado | Unidades |
|---|---|---|
| C, C_\text{blanco} | concentración medida y del blanco | mg/L |
| V | volumen final del digerido | L (entrada en mL) |
| D | factor de dilución de la alícuota medida | — |
| W | masa digerida | kg (entrada en mg) |
| C_s | concentración en el sólido | mg/kg; % en peso = 10^{-4} C_s |
La incertidumbre del blanco no se incluye; 1σ.
Referencia: US EPA SW-846, métodos 6010D (2018) y 6020B (2014), sec. 12.
Resolución del detector EDS y solapamientos
Código: matlens/core/composition.py::fwhm_kev, matlens/core/composition.py::overlap_flags, matlens/core/composition.py::identify_peaks
en eV (\mathrm{FWHM}_{\mathrm{Mn}K\alpha} = 130 eV por defecto, E_{\mathrm{Mn}K\alpha} = 5898.7 eV), con un mínimo de 30 eV. Dos líneas de elementos distintos se marcan como solapamiento grave si \Delta E < \mathrm{FWHM}/2 y parcial si \Delta E < \mathrm{FWHM} (FWHM evaluada en la energía media). Los picos se detectan con señal neta > 4\sqrt{\text{fondo}}.
Referencia: Fiori & Newbury, Scanning Electron Microsc. 1978/I 401; Goldstein et al., Scanning Electron Microscopy and X-Ray Microanalysis, 4.ª ed., Springer 2018.
Hidratos y residuos de TGA
Código: matlens/core/formula.py::hydrate_water_count, matlens/core/formula.py::theoretical_residue
con p la pérdida de masa (% de la masa del hidrato, 0 \le p < 100), M la masa molar anhidra y \nu los moles de residuo por mol de partida.
Referencia: implementación propia.
Supuestos y límites de validez
Estas operaciones son aritmética sobre una cuantificación ya hecha: heredan sus errores de matriz (absorción, fluorescencia secundaria, número atómico), que pueden superar con mucho la incertidumbre propagada. La conversión a % atómico normaliza a 100 % y oculta un total analítico bajo (elementos no medidos, como H, Li o C en EDS). El oxígeno por estequiometría supone que todos los cationes están oxidados con la valencia de la tabla; falla con sulfuros, haluros, metales o valencias mixtas. El Fe³⁺ de Droop supone que no hay vacantes de catión y que el oxígeno es el único anión.
Incertidumbre y avisos
- Propagación de primer orden (GUM) con entradas no correlacionadas, siempre 1σ (k = 1). No se considera la correlación que introduce la normalización de la cuantificación original.
- Estadística de varias medidas: intervalo t de Student (95 % por defecto); un elemento ausente cuenta como 0, lo que sesga hacia abajo las medias cerca del límite de detección.
- ICP: no incluye la incertidumbre del blanco ni la de la calibración del instrumento.
matlens/core/composition.pyno emite indicadoreswarning/invalid; las entradas imposibles (suma no positiva; volumen, masa o dilución no positivos) lanzan un error.
Ejemplo resuelto: % en peso a % atómico y óxidos
Análisis EDS de una hematita: Fe 69.94 y O 30.06 % en peso, u = 0.50 % cada uno (1σ). wt_to_at:
| Elemento | % peso | u | % atómico | u (1σ) |
|---|---|---|---|---|
| Fe | 69.94 | 0.5 | 40 | 0.434 |
| O | 30.06 | 0.5 | 60 | 0.434 |
Oxígeno por estequiometría (Fe³⁺) con oxygen_by_stoichiometry: 30.06 % en peso; elements_to_oxides: Fe2O3 100 %.
Ejemplo resuelto: ICP de un digerido
Digestión de 100.0 mg de sólido llevada a 50.0 mL; la alícuota se diluye 10 veces y el ICP mide 2.50 mg/L (u = 0.03 mg/L), blanco 0.02 mg/L, u_r(V) = 0.2 %, u_r(W) = 0.1 %. icp_solid_mg_kg:
| Magnitud | Valor |
|---|---|
| C_s | 12400 mg/kg |
| u(C_s) (1σ) | 153 mg/kg |
| % en peso | 1.24 |
Ejemplo resuelto: estadística de puntos
Cuatro puntos EDS (% en peso) de un SiO₂: Si 46.1, 46.8, 45.7, 46.4. spot_statistics (95 %):
| Elemento | n | media | s | SEM | t | semiancho IC |
|---|---|---|---|---|---|---|
| O | 4 | 53.75 | 0.465 | 0.233 | 3.182 | 0.741 |
| Si | 4 | 46.25 | 0.465 | 0.233 | 3.182 | 0.741 |