예제 #1
0
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
예제 #2
0
# 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