如何对NiO反射/吸收光谱应用Kramers-Kronig变换及提取折射率?
从NiO的TEY吸收光谱与反射光谱提取折射率实部和虚部的方法咨询
我有Ni元素M边的总电子产额(TEY)模式下的NiO实验吸收光谱,同时还有NiO反射光谱,目标是提取随能量变化的折射率实部与虚部。
已尝试的Python方法
我尝试通过以下步骤推导拟合函数来匹配反射/吸收光谱的峰:
- 用Lorentz振子函数建模介电函数的实部与虚部
- 利用介电函数的实部和虚部推导折射率的实部与虚部函数
- 利用折射率的虚部推导吸收系数形式
- 采用多振子叠加形式并引入不同缩放因子来拟合吸收光谱的峰,拟合参数为缩放因子和洛伦兹模型参数
实现代码
import numpy as np energy_scale = np.arange(0, 100, 0.001) def real_comp2(w, w_p, w_0, nu): vp = 8.854187817e-12 return vp + (vp * w_p**2 * (-w**2 + w_0**2)) / ((w**2 - w_0**2)**2 + w**2 * nu**2) def imag_comp2(w, w_p, w_0, nu): vp = 8.854187817e-12 return -(vp * w_p**2 * w * nu / ((w**2 - w_0**2)**2 + w**2 * nu**2)) def real_refr(w, w_p, w_0, nu): return 0.707 * np.sqrt(real_comp2(w, w_p, w_0, nu) + np.sqrt((real_comp2(w, w_p, w_0, nu))**2 + (imag_comp2(w, w_p, w_0, nu))**2)) def imag_refr(w, w_p, w_0, nu): return 0.707 * np.sqrt(-real_comp2(w, w_p, w_0, nu) + np.sqrt((real_comp2(w, w_p, w_0, nu))**2 + (imag_comp2(w, w_p, w_0, nu))**2)) def reflectivity2(w, w_p, w_0, nu): return ((real_refr(w, w_p, w_0, nu)-1)**2 + imag_refr(w, w_p, w_0, nu)**2) / ((real_refr(w, w_p, w_0, nu)+1)**2 + imag_refr(w, w_p, w_0, nu)**2) def reflectivity2_norm(w, w_p, w_0, nu, A, c): return c + -A*(reflectivity2(w, w_p, w_0, nu) - reflectivity2(w, w_p, w_0, nu).min())/(reflectivity2(w, w_p, w_0, nu).max() - reflectivity2(w, w_p, w_0, nu).min()) def absorption_coeff(w, w_p, w_0, nu): return 4 * np.pi * 0.08 * 1e7 * w_0 * imag_refr(w, w_p, w_0, nu) def absorption_coeff_norm(w, w_p, w_0, nu, A): return A*(absorption_coeff(w, w_p, w_0, nu) - absorption_coeff(w, w_p, w_0, nu).min())/(absorption_coeff(w, w_p, w_0, nu).max() - absorption_coeff(w, w_p, w_0, nu).min()) def abs_superposition(w, w_p1, w_01, nu1, A1, w_p2, w_02, nu2, A2, w_p3, w_03, nu3, A3, c): return c + absorption_coeff_norm(w, w_p1, w_01, nu1, A1) + absorption_coeff_norm(w, w_p2, w_02, nu2, A2) + absorption_coeff_norm(w, w_p3, w_03, nu3, A3) def reflectivity_superposition(w, w_p1, w_01, nu1, w_p2, w_02, nu2, w_p3, w_03, nu3): return reflectivity2(w, w_p1, w_01, nu1) + reflectivity2(w, w_p2, w_02, nu2) + reflectivity2(w, w_p3, w_03, nu3)
存在的问题
尽管代码存在维度问题,但核心逻辑有明显缺陷:无法仅凭经验选择拟合峰的数量与位置并随意叠加模型函数,还需要考虑背景扣除和掠入射实验几何条件的影响。
请求帮助
请问有没有更合理的方法?有没有考虑上述所有因素的源码或程序?我已经下载了Larch,但不知道如何用它完成这项操作,恳请提供帮助,如需补充更多信息请告知。
内容的提问来源于stack exchange,提问作者Amyx
相关产品推荐
相关产品推荐

