MatLens · Ecuaciones y modelos

Composición (EDS / XRF / ICP / CHN)

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

M = \sum_i n_i A_i, \qquad w_i = 100\,\frac{n_i A_i}{M}, \qquad x_i = 100\,\frac{n_i}{\sum_j n_j}

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

x_i = 100\,\frac{w_i/A_i}{\sum_j w_j/A_j}, \qquad w_i = 100\,\frac{x_i A_i}{\sum_j x_j A_j}

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:

\frac{\partial o_i}{\partial v_k} = \frac{100\,f_k\,(\delta_{ik}Q - q_i)}{Q^2}, \qquad u(o_i) = \sqrt{\sum_k \left(\frac{\partial o_i}{\partial v_k}\right)^2 u(v_k)^2}

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

w_\mathrm{O} = A_\mathrm{O}\sum_{i\,\in\,\text{cationes}} \frac{w_i}{A_i}\,\frac{v_i}{2}, \qquad u(w_\mathrm{O}) = \sqrt{\sum_i \left(\frac{A_\mathrm{O}\,v_i}{2A_i}\,u(w_i)\right)^2}
w_\text{óxido} = w_i\,\frac{M_\text{óxido}}{c_i A_i}, \qquad w_e = \sum_\text{óxidos} w_\text{óxido}\,\frac{n_e A_e}{M_\text{óxido}}

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

f = \frac{n_\mathrm{O}}{\sum_j (w_j/M_j)\,y_j}, \qquad \text{apfu}_i = \frac{w_i}{M_i}\,x_i\,f

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}).

F = \max\!\left[0,\; 2X\left(1 - \frac{T}{S}\right)\right], \qquad \text{cationes} \times \frac{T}{S}, \qquad \mathrm{Fe^{3+}} = \min(F, \mathrm{Fe}), \;\; \mathrm{Fe^{2+}} = \mathrm{Fe} - \mathrm{Fe^{3+}}

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

\bar{x} = \frac{1}{n}\sum x_k, \qquad s = \sqrt{\frac{\sum (x_k-\bar{x})^2}{n-1}}, \qquad \mathrm{SEM} = \frac{s}{\sqrt{n}}, \qquad \bar{x} \pm t_{(1+p)/2,\;n-1}\,\mathrm{SEM}

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

C_s = \frac{(C - C_\text{blanco})\,V\,D}{W}, \qquad u(C_s) = \sqrt{\left(\frac{u(C)\,V D}{W}\right)^2 + \big(C_s\,u_r(V)\big)^2 + \big(C_s\,u_r(W)\big)^2}
SímboloSignificadoUnidades
C, C_\text{blanco}concentración medida y del blancomg/L
Vvolumen final del digeridoL (entrada en mL)
Dfactor de dilución de la alícuota medida—
Wmasa digeridakg (entrada en mg)
C_sconcentración en el sólidomg/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

\mathrm{FWHM}(E) = \sqrt{\mathrm{FWHM}_{\mathrm{Mn}K\alpha}^2 + 2.5\,(E - E_{\mathrm{Mn}K\alpha})}

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

n = \frac{p\,M}{M_\mathrm{H_2O}\,(100 - p)}, \qquad r = 100\,\nu\,\frac{M_\text{residuo}}{M_\text{inicial}}

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.py no emite indicadores warning/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% pesou% atómicou (1σ)
Fe69.940.5400.434
O30.060.5600.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:

MagnitudValor
C_s12400 mg/kg
u(C_s) (1σ)153 mg/kg
% en peso1.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 %):

ElementonmediasSEMtsemiancho IC
O453.750.4650.2333.1820.741
Si446.250.4650.2333.1820.741

Generado desde MatLens c0ab138. ← Todas las técnicas