Source code for edrixs.rixs_utils

__all__ = ['scattering_mat']

import numpy as np


[docs]def scattering_mat(eval_i, eval_n, trans_mat_abs, trans_mat_emi, omega_inc, gamma_n): """ Calculate X-ray scattering magnitude. .. math:: F^{ab}_{fi} = \\sum_{n}\\frac{<f|T_{a}|n><n|T_{b}|i>}{\\omega_{in} - E_{n} + E_{i} + i\\Gamma_{n}}, where, :math:`T_{a}` and :math:`T_{b}` are components of transition operators( :math:`a,b=x,y,z`). Parameters ---------- eval_i: 1d float array Eigenvalues of the initial configuration without core-hole, :math:`E_i`. eval_n: 1d float array Eigenvalues of the intermediate configuration with core-hole, :math:`E_n`. trans_mat_abs: 3d complex array The transition operator for absorption process, :math:`<n|T_{b}|i>`. trans_mat_emi: 3d complex array The transition operator for emission process, :math:`<f|T_{a}|n>`. omega_inc: float The energy of incident photon, :math:`\\omega_{in}`. gamma_n: float The broadening of the core-hole (eV), :math:`\\Gamma_{n}`. Returns ------- Ffi: 4d complex array The calculated scattering magnitude, :math:`F^{ab}_{fi}`. """ num_gs = trans_mat_abs.shape[2] num_ex = trans_mat_abs.shape[1] num_fs = trans_mat_emi.shape[1] npol_abs = trans_mat_abs.shape[0] npol_emi = trans_mat_emi.shape[0] Ffi = np.zeros((npol_emi, npol_abs, num_fs, num_gs), dtype=np.complex128) tmp_abs = np.zeros((npol_abs, num_ex, num_gs), dtype=np.complex128) denomi = np.zeros((num_ex, num_gs), dtype=np.complex128) for i in range(num_ex): for j in range(num_gs): aa = omega_inc - (eval_n[i] - eval_i[j]) denomi[i, j] = 1.0 / (aa + 1j * gamma_n) for i in range(npol_abs): tmp_abs[i] = trans_mat_abs[i] * denomi for i in range(npol_emi): for j in range(npol_abs): Ffi[i, j, :, :] = np.dot(trans_mat_emi[i], tmp_abs[j]) return Ffi