XPS Dynamic Analyzer (XDA)
XPS Dynamic Analyzer 是一个高度可配置、基于 Python 的 X 射线光电子能谱 (XPS) 自动化分析工具。
该项目最初是为了解决复杂的稀土掺杂氧化铈(SNDC)材料分析而开发,能够处理复杂的 Ce 3d、Sm 3d 等多重峰谱图。它摒弃了传统的“固定峰位拟合”思路,采用了动态寻峰与Shirley 背景自适应算法,实现了对复杂谱图的自动化、高精度拟合。
✨ 核心功能 (Key Features)
🧪 智能数据解析:专为 VAMAS (.vms/.txt) 格式优化,能够自动识别并处理 Kratos 仪器常见的“强度/传输函数”交错存储问题。
🎯 自动荷电校正:无需手动指定 C 1s,支持基于材料特征峰(如 Lattice Oxygen 或特定卫星峰)进行全谱自动校准。
📉 Shirley 背景扣除:内置迭代式 Shirley 算法,能够计算符合物理意义的非线性基线,而非简单的线性背景。
👁️ 动态寻峰 (Dynamic Peak Detection):基于信号处理算法自动识别峰的数量和位置,无需预先知道有多少个峰,特别适合 Ce 3d 等复杂谱图。
⚙️ 完全配置化 (Config-Driven):所有物理参数、算法阈值和绘图样式均在 config.py 中集中管理,修改配置即可分析不同元素(O, C, Sm, Ce...),无需改动核心代码。
📊 出版级绘图:自动生成包含原始数据、拟合曲线、分峰填充和残差分析的高质量图片,直接满足 SCI 论文发表要求。
🛠️ 安装与依赖 (Installation)
本项目基于 Python 3 开发,依赖以下科学计算库:
numpy: 数值计算
scipy: 寻峰算法与曲线拟合
matplotlib: 数据可视化
- 克隆项目
git clone https://github.com/yourusername/XPS-Dynamic-Analyzer.git cd XPS-Dynamic-Analyzer
- 安装依赖
建议使用 Anaconda 环境,或直接通过 pip 安装:
pip install numpy matplotlib scipy
🚀 快速开始 (Quick Start)
- 准备数据
将你的 XPS 原始数据(.txt 格式)放入项目文件夹中。
- 修改配置 (config.py)
打开 config.py,根据你要分析的元素调整参数。例如,分析 Ce 3d:
SPECTRUM_CONFIG = { 'region_name': 'Ce 3d', # 数据文件中的区域标签 'target_lattice_be': 916.6, # 校准基准 (如 Ce4+ u''' 卫星峰) 'peak_search_range': [914.0, 919.0], 'photon_energy': 1486.69, }
- 运行分析
在终端中运行主程序:
python XPS_Analysis.py
- 查看结果
程序将在当前目录下生成分析图片(例如 XPS_Ce_3d_Dynamic_Fit.png),并打印校准偏移量和拟合参数。
⚙️ 配置指南 (Configuration Guide)
config.py 是控制整个分析流程的核心。以下是关键参数说明:
- 数据处理 (Data Processing)
DATA_PROCESSING_CONFIG = { 'savgol_poly_order': 3, # 平滑滤波的多项式阶数 'calibration_smooth_window': 11, # 校准时的平滑窗口(大窗口防噪) 'shirley_anchor_window': 20 # 计算基线时,寻找左右端点最小值的范围 }
- 动态寻峰 (Peak Detection)
这是最关键的部分,决定了代码的“眼睛”有多敏锐:
PEAK_DETECTION_CONFIG = { 'prominence': 0.015, # [核心] 相对突起高度。数值越小,越能识别微弱的肩峰。 'width': 1.0, # 最小峰宽 'distance': 10, # 最小峰间距 }
- 拟合约束 (Fitting)
FITTING_PARAMS = { 'width_min': 0.5, # 峰宽下限 (eV) 'width_max': 5.0, # 峰宽上限 (eV) 'center_drift': 1.5, # 允许拟合峰位在寻峰结果基础上的漂移范围 (eV) }
🧠 工作原理 (How it Works)
Parse: 读取原始 txt 文件,智能分离强度数据,构建结合能(Binding Energy)坐标轴。
Calibrate: 对数据进行平滑,在指定范围内寻找特征峰(如 916.6 eV),计算偏移量并校准全谱。
Background: 使用迭代算法计算 Shirley Background,并将原始数据减去背景得到“纯峰信号”。
Detect: 在纯峰信号上执行 find_peaks 算法,动态确定峰的数量和初始位置。
Fit: 构建多高斯模型(Multi-Gaussian Model),利用 curve_fit 对纯峰信号进行非线性最小二乘拟合。
Plot: 将背景加回拟合曲线,使用 matplotlib 绘制最终图表,并填充半透明颜色以区分各个子峰。
📊 示例结果
Ce 3d 复杂谱图分析
能够准确识别 Ce 3d 的 6-10 个多重分裂峰,并完美贴合数据点。
(此处可插入你生成的 Ce 3d 图片)
O 1s 氧空位分析
清晰区分晶格氧 (Lattice O) 与氧空位 (Vacancy O),并自动计算面积占比。
(此处可插入你生成的 O 1s 图片)
📝 License
本项目遵循 MIT 开源协议。欢迎科研工作者使用、修改和分发。引用请注明出处。
致谢:本项目开发过程中参考了 scipy 信号处理文档以及 XPS 数据分析的标准物理模型。特别感谢针对 SNDC 材料特性的深入讨论。