提问人:Amyx 提问时间:9/21/2023 更新时间:9/21/2023 访问量:31
如何在NiO反射率或吸收光谱上应用Kramers Kronig变换?
How to apply Kramers Kronig transformation on a NiO reflectivity or absorption spectrum?
问:
我有一个实验性的 NiO 吸收光谱,记录了 Ni M 边缘的总电子产率。我想提取折射率的虚部(和实部)(这也取决于能量)。
此外,我有 NiO 的反射率光谱,我还想知道如何提取折射率的实部和虚部。
这是我到目前为止在 Python 中尝试过的:
- 我尝试使用我按以下方式推导的函数来拟合反射率(或吸收)光谱中的峰值: -我用洛伦兹振荡器函数模拟了介电函数的实部和虚部 -使用介电函数的实部和虚部,我推导出折射率的实部和虚部的函数 -使用折射率的虚部,我推导出吸收系数形式 -然后,我使用这些系数与不同比例因子的叠加来解释吸收光谱中的峰值。拟合参数是比例因子和洛伦兹模型的参数。 以下是对我的函数的一些见解:
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):
# vacuum_permittivity = 8.854187817e-12 # Farads per meter
# srvp = np.sqrt(vacuum_permittivity)
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):
# vacuum_permittivity = 8.854187817e-12 # Farads per meter
# srvp = np.sqrt(vacuum_permittivity)
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): #, w_p4, w_04, nu4, A4, 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)# + absorption_coeff_norm(w, w_p4, w_04, nu4, A4)
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,但我不知道如何使用该程序执行此操作。非常感谢您的帮助!如果您需要更多信息,我很乐意在评论中提供。
答: 暂无答案
评论