Models
core
Modelos Pydantic para estructuras de datos núcleo de XPS.
Migración de dataclasses -> Pydantic BaseModel para: - XPSSpectrum ✓ - XPSDataset ✓ - XPSSample ✓
Proporciona validación automática avanzada para los datos fundamentales de XPS.
Classes
XPSSpectrum
Bases: XPSBaseModel
Representa un espectro XPS individual con validación automática completa.
Valida automáticamente que las energías de enlace y las intensidades sean consistentes, finitas y físicamente realistas para XPS.
Parámetros
region_name : str Nombre de la región espectral (ej: "C 1s", "survey"). No puede estar vacío. binding_energy : np.ndarray Array de energías de enlace en eV. Debe ser creciente y positivo. intensity : np.ndarray Array de intensidades en cuentas. Debe ser finito y no negativo. metadata : dict[str, Any] Metadata adicional del espectro (condiciones de medición, etc.).
Ejemplos
Espectro básico
energies = np.array([280.0, 285.0, 290.0]) intensities = np.array([100.0, 1000.0, 200.0]) spectrum = XPSSpectrum( ... region_name="C 1s", ... binding_energy=energies, ... intensity=intensities, ... metadata={"pass_energy": 20} ... )
Acceso a datos
df = spectrum.data # DataFrame con binding_energy como índice copy_spec = spectrum.copy() # Copia completa
Attributes
data
property
Retorna los datos como DataFrame con binding_energy como índice.
Retorna
pd.DataFrame DataFrame con columna 'intensity' e índice 'binding_energy'.
Methods:
validate_region_name_format
classmethod
validate_binding_energy_array
classmethod
Valida array de energías de enlace.
Source code in src/xps_analyzer/models/core.py
validate_intensity_array
classmethod
validate_array_consistency
Valida consistencia entre arrays.
Source code in src/xps_analyzer/models/core.py
validate_realistic_data_range
Valida que los datos estén en rangos físicamente realistas.
Source code in src/xps_analyzer/models/core.py
copy
Retorna una copia completa del espectro.
Retorna
XPSSpectrum Copia independiente del espectro.
Source code in src/xps_analyzer/models/core.py
get_energy_range
Obtiene el rango de energías de enlace.
Retorna
tuple[float, float] (energía_mínima, energía_máxima) en eV.
Source code in src/xps_analyzer/models/core.py
get_intensity_stats
Obtiene estadísticas básicas de intensidad.
Retorna
dict[str, float] Diccionario con estadísticas: max, min, mean, std.
Source code in src/xps_analyzer/models/core.py
XPSDataset
Bases: XPSBaseModel
Representa un archivo XPS completo con múltiples espectros.
Valida automáticamente que el dataset contenga espectros válidos, nombres de archivo apropiados y metadata consistente.
Parámetros
filename : str Nombre del archivo. Debe ser no vacío y válido. header : dict[str, Any] Metadata del archivo (condiciones instrumentales, fecha, etc.). spectra : dict[str, XPSSpectrum] Diccionario de espectros indexados por nombre de región.
Ejemplos
Dataset básico
spectrum = XPSSpectrum(...) dataset = XPSDataset( ... filename="sample1.txt", ... header={"date": "2024-03-15", "operator": "researcher"}, ... spectra={"C 1s": spectrum} ... )
Acceso a espectros
c1s = dataset.get_spectrum("C 1s") regions = dataset.list_regions()
Methods:
validate_filename_format
classmethod
Valida formato básico del filename.
Source code in src/xps_analyzer/models/core.py
validate_spectra_consistency
Valida consistencia entre espectros y claves del diccionario.
Source code in src/xps_analyzer/models/core.py
get_spectrum
Obtiene un espectro específico por nombre de región.
Parámetros
region_name : str Nombre de la región a buscar.
Retorna
XPSSpectrum | None Espectro encontrado o None si no existe.
Source code in src/xps_analyzer/models/core.py
list_regions
Lista todas las regiones espectrales disponibles.
Retorna
list[str] Lista de nombres de regiones ordenada alfabéticamente.
copy
Retorna una copia completa del dataset.
Retorna
XPSDataset Copia independiente del dataset.
Source code in src/xps_analyzer/models/core.py
get_statistics
Obtiene estadísticas del dataset completo.
Retorna
dict[str, Any] Diccionario con estadísticas: número de espectros, rangos, etc.
Source code in src/xps_analyzer/models/core.py
XPSSample
Bases: XPSBaseModel
Representa una muestra XPS completa con múltiples archivos/datasets.
Valida automáticamente que la muestra tenga datasets válidos y nombres apropiados, y proporciona acceso unificado a todos los datos.
Parámetros
sample_name : str Nombre identificador de la muestra. Debe ser no vacío. datasets : dict[str, XPSDataset] Diccionario de datasets indexados por filename.
Ejemplos
Muestra con múltiples archivos
survey_dataset = XPSDataset(...) multiplex_dataset = XPSDataset(...) sample = XPSSample( ... sample_name="Sample_001", ... datasets={ ... "survey.txt": survey_dataset, ... "multiplex.txt": multiplex_dataset ... } ... )
Acceso a datos
survey = sample.get_dataset("survey.txt") all_spectra = sample.get_all_spectra()
Methods:
validate_sample_name_format
classmethod
Valida formato del nombre de muestra.
Source code in src/xps_analyzer/models/core.py
validate_datasets_consistency
Valida consistencia entre datasets y claves del diccionario.
Source code in src/xps_analyzer/models/core.py
get_dataset
Obtiene un dataset específico por filename.
Parámetros
filename : str Nombre del archivo del dataset.
Retorna
XPSDataset | None Dataset encontrado o None si no existe.
Source code in src/xps_analyzer/models/core.py
list_datasets
Lista todos los filenames de datasets disponibles.
Retorna
list[str] Lista de filenames ordenada alfabéticamente.
get_all_spectra
Obtiene todos los espectros organizados por dataset y región.
Retorna
dict[str, dict[str, XPSSpectrum]] Diccionario anidado: {filename: {region: spectrum}}.
Source code in src/xps_analyzer/models/core.py
find_spectra_by_region
Busca espectros de una región específica en todos los datasets.
Parámetros
region_name : str Nombre de la región a buscar.
Retorna
dict[str, XPSSpectrum] Diccionario {filename: spectrum} para la región especificada.
Source code in src/xps_analyzer/models/core.py
get_sample_statistics
Obtiene estadísticas completas de la muestra.
Retorna
dict[str, Any] Diccionario con estadísticas agregadas de todos los datasets.
Source code in src/xps_analyzer/models/core.py
analysis
Modelos Pydantic para resultados de análisis XPS.
Migración de dataclasses -> Pydantic BaseModel para: - PeakParameters ✓ - FitResult ✓ - BackgroundResult (futuro)
Proporciona validación automática para parámetros de ajuste y resultados de análisis.
Classes
PeakParameters
Bases: XPSBaseModel
Parámetros de un pico ajustado con validación automática.
Valida automáticamente que los parámetros físicos sean realistas y consistentes entre sí para espectroscopía XPS.
Parámetros
position : float Posición del pico (binding energy en eV). Debe ser positiva. amplitude : float Amplitud del pico (intensidad máxima en cuentas). Debe ser positiva. width : float Ancho del pico (FWHM en eV para gaussiano/lorentziano, sigma para Voigt). Debe ser positiva y realista para XPS (< 10 eV). area : float Área integrada bajo el pico. Debe ser positiva. shape : Literal["gaussian", "lorentzian", "voigt", "pseudo_voigt", "gl"] Tipo de perfil del pico. gamma : float, optional Parámetro gamma para perfil Voigt (ancho lorentziano). Solo requerido para Voigt. position_error : float, optional Error estándar en la posición del pico. Debe ser no negativo. amplitude_error : float, optional Error estándar en la amplitud. Debe ser no negativo. width_error : float, optional Error estándar en el ancho. Debe ser no negativo.
Ejemplos
Pico gaussiano básico
peak = PeakParameters( ... position=284.8, ... amplitude=1000.0, ... width=1.2, ... area=1500.0, ... shape="gaussian" ... )
Pico Voigt con errores
voigt_peak = PeakParameters( ... position=531.1, ... amplitude=800.0, ... width=1.8, ... area=2000.0, ... shape="voigt", ... gamma=0.5, ... position_error=0.1, ... amplitude_error=50.0 ... )
Methods:
validate_voigt_gamma
Valida que picos Voigt tengan parámetro gamma.
Source code in src/xps_analyzer/models/analysis.py
validate_area_consistency
Valida consistencia entre área, amplitud y ancho.
Source code in src/xps_analyzer/models/analysis.py
FitResult
Bases: XPSBaseModel
Resultado de un ajuste de pico(s) con validación automática.
Valida automáticamente que los resultados estadísticos sean consistentes y que los arrays tengan dimensiones correctas.
Parámetros
peaks : list[PeakParameters] Lista de parámetros de picos ajustados. No puede estar vacía. fitted_spectrum : np.ndarray Espectro ajustado (suma de todos los picos). Debe ser finito. residual : np.ndarray Residual (espectro original - ajuste). Misma longitud que fitted_spectrum. r_squared : float Coeficiente de determinación R² (bondad de ajuste). Debe estar en [0, 1]. chi_squared : float Chi-cuadrado reducido. Debe ser positivo. success : bool Si el ajuste convergió exitosamente. message : str Mensaje sobre el resultado del ajuste. No puede estar vacío.
Ejemplos
Ajuste exitoso con un pico
result = FitResult( ... peaks=[peak_params], ... fitted_spectrum=np.array([100, 200, 300]), ... residual=np.array([5, -2, 1]), ... r_squared=0.95, ... chi_squared=1.2, ... success=True, ... message="Ajuste convergió exitosamente" ... )
Methods:
validate_fitted_spectrum
classmethod
Valida que el espectro ajustado sea finito y no negativo.
Source code in src/xps_analyzer/models/analysis.py
validate_residual
classmethod
Valida que el residual sea finito.
validate_array_lengths
Valida que fitted_spectrum y residual tengan la misma longitud.
Source code in src/xps_analyzer/models/analysis.py
validate_r_squared_realism
classmethod
Valida que R² sea realista para XPS.
Source code in src/xps_analyzer/models/analysis.py
validate_chi_squared_realism
classmethod
Valida que chi² sea realista.
reference
Modelos Pydantic para datos de referencia XPS.
Migración de dataclasses -> Pydantic BaseModel para: - PhotoelectronLine ✓ - CompoundReference ✓ - ElementReference ✓ - ReferenceDatabase ✓
Proporciona validación automática y serialización mejorada para datos de referencia.
Classes
PhotoelectronLine
Bases: XPSBaseModel
Representa una línea fotoeléctrica de un orbital específico.
Esta clase valida automáticamente energías de enlace positivas, fuentes de rayos X válidas y tipos de línea correctos.
Parámetros
line : str Designación de la línea (ej: "1s", "2p1/2", "2p3/2", "KLL"). Debe ser no vacía. binding_energy : float Energía de enlace en eV. Debe ser positiva. x_ray_source : str, optional Fuente de rayos X utilizada (ej: "Mg_Ka", "Al_Ka"). type : Literal["core", "Auger"], default="core" Tipo de línea, debe ser "core" o "Auger". kinetic_energy : float, optional Energía cinética en eV (solo para líneas Auger). Debe ser positiva si se especifica.
Ejemplos
Línea core básica
line = PhotoelectronLine( ... line="1s", ... binding_energy=284.8 ... )
Línea Auger completa
auger_line = PhotoelectronLine( ... line="KLL", ... binding_energy=1200.0, ... x_ray_source="Al_Ka", ... type="Auger", ... kinetic_energy=267.0 ... )
Methods:
validate_line_format
classmethod
Valida formato de designación orbital.
Source code in src/xps_analyzer/models/reference.py
validate_auger_kinetic_energy
Valida que líneas Auger tengan energía cinética.
Source code in src/xps_analyzer/models/reference.py
CompoundReference
Bases: XPSBaseModel
Datos de referencia para un compuesto específico.
Valida automáticamente rangos de energía de enlace consistentes y posiciones de pico dentro del rango especificado.
Parámetros
orbital : str Orbital asociado (ej: "1s", "2p"). Debe ser no vacío. binding_energy_range : tuple[float, float] Rango de energías de enlace (min, max) en eV. min < max, ambos > 0. peak_position : float, optional Posición del pico principal en eV. Debe estar dentro del rango. chemical_shift : float, optional Desplazamiento químico respecto al elemento puro en eV.
Ejemplos
Compuesto básico
compound = CompoundReference( ... orbital="1s", ... binding_energy_range=(284.0, 289.0), ... peak_position=286.5 ... )
Con desplazamiento químico
oxide = CompoundReference( ... orbital="1s", ... binding_energy_range=(531.0, 534.0), ... peak_position=532.1, ... chemical_shift=2.1 ... )
Methods:
validate_energy_range
classmethod
Valida que el rango de energía sea consistente.
Source code in src/xps_analyzer/models/reference.py
validate_peak_in_range
Valida que la posición del pico esté dentro del rango.
Source code in src/xps_analyzer/models/reference.py
validate_orbital_format
classmethod
Valida formato básico de orbital.
Source code in src/xps_analyzer/models/reference.py
ElementReference
Bases: XPSBaseModel
Base de datos completa de un elemento químico con validación automática.
Valida automáticamente símbolos de elemento, números atómicos, energías de enlace y consistencia entre líneas fotoeléctronicas.
Parámetros
symbol : str Símbolo del elemento (ej: "Li", "C", "O"). Debe tener 1-2 caracteres. element : str Nombre completo del elemento. Debe ser no vacío. atomic_number : int Número atómico. Debe ser positivo (1-118). photoelectron_lines : list[PhotoelectronLine] Lista con las líneas fotoeléctronicas por orbital. No puede estar vacía. compounds : dict[str, CompoundReference] Diccionario de compuestos de referencia por nombre. binding_energy_most_useful : float, optional Energía de enlace más útil en eV. Debe ser positiva. spin_orbital_splitting : float, optional Separación spin-orbital en eV. Debe ser positiva.
Ejemplos
Elemento básico con líneas core
carbon = ElementReference( ... symbol="C", ... element="Carbon", ... atomic_number=6, ... photoelectron_lines=[ ... PhotoelectronLine(line="1s", binding_energy=284.8) ... ], ... compounds={} ... )
Elemento con compuestos
oxygen = ElementReference( ... symbol="O", ... element="Oxygen", ... atomic_number=8, ... photoelectron_lines=[...], ... compounds={ ... "oxide": CompoundReference( ... orbital="1s", ... binding_energy_range=(531.0, 533.0) ... ) ... }, ... binding_energy_most_useful=531.0 ... )
Methods:
validate_symbol_format
classmethod
validate_element_name
classmethod
Valida nombre del elemento.
Source code in src/xps_analyzer/models/reference.py
validate_symbol_atomic_number_consistency
Valida consistencia básica entre símbolo y número atómico.
Source code in src/xps_analyzer/models/reference.py
validate_most_useful_energy_exists
Valida que la energía más útil corresponda a una línea existente.
Source code in src/xps_analyzer/models/reference.py
get_main_line
Obtiene la línea fotoeléctrica principal (mayor intensidad o más útil).
Si se especifica binding_energy_most_useful, retorna la línea más cercana. De lo contrario, retorna la primera línea disponible.
Retorna
PhotoelectronLine Línea fotoeléctrica principal.
Levanta
ValueError Si no hay líneas disponibles.
Source code in src/xps_analyzer/models/reference.py
get_line_by_orbital
Busca una línea específica por nombre de orbital.
Parámetros
orbital : str Nombre del orbital (ej: "1s", "2p").
Retorna
PhotoelectronLine | None Línea encontrada o None si no existe.
Source code in src/xps_analyzer/models/reference.py
ReferenceDatabase
Bases: XPSBaseModel
Base de datos completa de elementos de referencia con validación automática.
Valida automáticamente la integridad de la base de datos, símbolos únicos y consistencia de versiones.
Parámetros
elements : dict[str, ElementReference] Diccionario con elementos indexados por símbolo. Símbolos deben ser únicos. version : str Versión de la base de datos. Formato recomendado: "X.Y" o "X.Y.Z". source : str Fuente de los datos de referencia. Debe ser no vacía.
Ejemplos
Base de datos básica
carbon = ElementReference( ... symbol="C", element="Carbon", atomic_number=6, ... photoelectron_lines=[PhotoelectronLine(line="1s", binding_energy=284.8)], ... compounds={} ... ) db = ReferenceDatabase( ... elements={"C": carbon}, ... version="1.0", ... source="NIST XPS Database" ... )
Methods:
validate_version_format
classmethod
Valida formato básico de versión.
Source code in src/xps_analyzer/models/reference.py
validate_element_symbol_consistency
Valida que las claves coincidan con los símbolos de elementos.
Source code in src/xps_analyzer/models/reference.py
validate_unique_atomic_numbers
Valida que no haya números atómicos duplicados.
Source code in src/xps_analyzer/models/reference.py
get_element
Obtiene datos de un elemento por símbolo.
Parámetros
symbol : str Símbolo del elemento (case-insensitive).
Retorna
ElementReference | None Referencia del elemento si existe, None de lo contrario.
Source code in src/xps_analyzer/models/reference.py
search_by_binding_energy
Busca elementos/compuestos por energía de enlace.
Parámetros
energy : float Energía de enlace a buscar en eV. tolerance : float, default=2.0 Tolerancia de búsqueda en eV.
Retorna
list[tuple[str, str]] Lista de tuplas (símbolo_elemento, orbital/compuesto).
Ejemplos
db.search_by_binding_energy(284.8, tolerance=1.0) [('C', '1s'), ('C', 'graphite')]
Source code in src/xps_analyzer/models/reference.py
get_chemical_shifts
Obtiene todos los desplazamientos químicos de un elemento.
Parámetros
element_symbol : str Símbolo del elemento.
Retorna
dict[str, float] Diccionario con compuesto -> desplazamiento químico.
Source code in src/xps_analyzer/models/reference.py
list_elements
Lista todos los elementos disponibles ordenados por número atómico.
Retorna
list[str] Lista de símbolos de elementos ordenados por Z.
Source code in src/xps_analyzer/models/reference.py
get_statistics
Obtiene estadísticas de la base de datos.
Retorna
dict[str, int] Diccionario con estadísticas de contenido.
Source code in src/xps_analyzer/models/reference.py
validate_integrity
Valida la integridad completa de la base de datos.
Retorna
dict[str, list[str]] Diccionario con warnings/errores encontrados por categoría.