def get_xas(eval_i, eval_n, dipole_ops, om_mesh=np.linspace(-10, 20, 1000), om_offset=857.40, thin=115 / 180.0 * np.pi, phi=0.0, gamma_c=0.2, T=30.): ''' Calculate XAS spectrum. Parameters ---------- eval_i: array Eigenvalues of initial state Hamiltonian eval_n: array Eigenvalues of intermediate state Hamiltonian dipole_op: array Dipole operator from 2p to 3d state om_mesh: array Incident energies to calculate the spectrum. In eV without the offset. om_offset: float Offset between theoretical and experimental energy axes thin: float Incident x-ray angle in radians w.r.t. plane perpendicular to the c-axis phi: float Azimutal x-ray angle in radians gamma_c: float core-hole life-time broadening T: float Temperature in Kelvin Returns ------- om_mesh: array Incident energies to calculate the spectrum. In eV without the offset. om_offset: float Offset between theoretical and experimental energy axes xas: array X-ray absorption intensity. Shape (len(om_mesh), 5) Where the last axis denotes the polarization Linear pi Linear sigma Circular left Circular right Isotropic ''' poltype = [('linear', 0.0), ('linear', np.pi / 2.0), ('left', 0.0), ('right', 0.0), ('isotropic', 0.0)] xas = edrixs.xas_1v1c_py(eval_i, eval_n, dipole_ops, om_mesh, gamma_c=gamma_c, thin=thin, phi=phi, pol_type=poltype, gs_list=[0, 1, 2], temperature=T) return om_mesh, om_offset, xas
# Run ED eval_i, eval_n, trans_op = edrixs.ed_1v1c_py(('d', 'p'), shell_level=(0.0, -off), v_soc=(zeta_d_i, zeta_d_n), c_soc=zeta_p_n, v_noccu=noccu, slater=slater, v_cfmat=cf) # Run XAS xas = edrixs.xas_1v1c_py(eval_i, eval_n, trans_op, ominc_xas, gamma_c=gamma_c, thin=thin, phi=phi, pol_type=poltype_xas, gs_list=[0, 1, 2], temperature=300) # Run RIXS at L3 edge rixs_L3 = edrixs.rixs_1v1c_py(eval_i, eval_n, trans_op, ominc_rixs_L3, eloss, gamma_c=gamma_c, gamma_f=gamma_f, thin=thin, thout=thout,
# broadening is domainted by the inverse core hole lifetime :code:`gamma_c`, # which is the Lorentzian half width at half maximum. ominc = np.linspace(11200, 11230, 50) temperature = 300 # in K prob = edrixs.boltz_dist(eval_i, temperature) gs_list = [n for n, prob in enumerate(prob) if prob>1e-6] gs_list = [n for n in range(6)] thin = 30*np.pi/180 phi = 0 pol_type = [('linear', 0)] xas = edrixs.xas_1v1c_py( eval_i, eval_n, trans_op, ominc, gamma_c=info['gamma_c'], thin=thin, phi=phi, pol_type=pol_type, gs_list=gs_list) ################################################################################ # Compute RIXS # ------------------------------------------------------------------------------ # Calculating RIXS is overall similar to XAS, but with a few additional # considerations. The spectral width in the energy loss axis of RIXS it # not set by the core hole lifetime, but by either the final state lifetime # or the experimental resolution and is parameterized by :code:`gamma_f` # -- the Lorentzian half width at half maximum. # # The angle and polarization of the emitted beam must also be specified. # If, as is common in experiments, the emitted polarization is not resolved # one needs to add both emitted polarization channels, which is what we will