Source code for ase2sprkkr.input_parameters.definitions.arpes

""" ARPES task input parameters definition """
from ...common.grammar_types import SetOf, DefKeyword, Keyword, Range, Array, flag
from .sections import CONTROL, TAU, ENERGY, SITES
from ..input_parameters_definitions import \
    InputParametersDefinition as InputParameters, \
    InputValueDefinition as V, \
    InputSectionDefinition as Section
from ...sprkkr.sprkkr_grammar_types import Site

input_parameters = lambda: InputParameters(
    'arpes', [
      CONTROL('ARPES'),
      TAU,
      ENERGY(
          emin = (None, 'Minimum of the energy window in eV with respect to the Fermi level', -8.),
          emax = (None, 'Maximum of the energy window in eV with respect to the Fermi level', 5.),
          add = [
            V('EWORK_EV', 4.2, info='Inner potential of the bulk crystal in eV'),
            V('IMV_INI_EV', 0.05, info='Imaginary part of the potential in eV (initial state)'),  # alternatively you can use VIL (in eV) or IMV_INI (in Ry)'),
            V('IMV_FIN_EV', 2., info='Imaginary part of the potential in eV (final state)'),  # alternatively you can use VIH (in eV) or IMV_FIN (in Ry)'),
          ],
          defaults = { 'GRID' : 1, 'NE' : 300 }
      ),
      SITES.copy(defaults = {'NL' : 4 }),

      Section('TASK', [
        V('TASK', DefKeyword({
          'ARPES' : 'Angle resolved photoemission spectroscopy',
          'AIPES' : 'Angle integrated photoemission spectroscopy',
          'SPLEED' : 'Spin polarized LEED (experimental feature)',
          'BAND'  : 'band structure calculations (experimental feature)'
        }), name_in_grammar=False, info='Type of the calculation'),
        V('IQ_AT_SURF', Site.I, 1),
        V('MILLER_HKL', SetOf(int, length=3), [0,0,1]),
        V('CRYS_VEC', True, info='Miller indices with respect to crystalographic primitive vectors'),

        V('STRVER', 1, is_expert=True, is_always_added=True, info="Set to 0 to supply the ARPES input file 'struc.inp' manually (and do not generate it)."),
        V('INPVER', 1, is_expert=True, is_always_added=True, info='Set to 0 to use an old input.inp from old rslab'),
      ]),

      Section('SPEC_PH', [
        V('THETA', 45., info='Direction of the photon (the polar coordinate)'),
        V('PHI', 0., info='Direction of the photon (the azimuth coordinate)'),
        V('POL_P', DefKeyword('P', 'S', 'C+', 'C-'), info='Polarization of the light'),
        V('EPHOT', 25., info='Photon energy in eV'),
        # Expert
        V('ALQ', expert=45., info='Alignment of polarization vector or pol.ellipsis'),
        V('DELQ', expert=0., info='Phase shift between real and imaginary part of e-vector, delq=90 for circular polarized light'),
        V('NPOL', Keyword({
          0: 'unpolarized and p-s dichroism for the calculation',
          1: 'p-pol or rcp or elliptical (depends on icirc, etc.)',
          2: 's-pol or lcp or elliptical (depends on icirc, etc.)',
          3: 'dichroism (ddad, ldad)'
          }), expert=1, info='Controls the polarization and dichroism'),
        V('ICIRC', Keyword({
          0: 'elliptically pol. light: alq, delq arbitrary',
          1: 'linear pol. light: alq arbitrary, delq=0',
          2: 'circular pol. light: alq=45, delq = 90'
        }), expert=1, info='controls the polarization and dichroism'),
        V('IDREH', Keyword({
            0: 'linearly polarized (equals icirc=1)',
            1: 'right circular polarization',
            -1: 'left circular polarization'
           }), expert=0, info='Helicity of the photons'),
        V('IFSP', Keyword({
            0: 'fixed',
            1: 'variable'
           }), is_expert=True, is_required=False, info='Photon azimuth angle type'),
        V('THETA_FIX', float, is_expert=True, info='Light and electrons are at fixed polarization angle')
      ], info=''),

      Section('SPEC_EL', [
        V('THETA', Range(float), info='Scattering angle',is_required=False),
        V('PHI', Range(float), info='Scattering angle',is_required=False),
        V('NT', int, info='Number of angular values for a rotation in polar coordinate.',is_required=False),
        V('NP', int, info='Number of angular values for a rotation in azimuth coordinate.',is_required=False),
        V('KA', Range(float), info='Scatering in momentum space ', is_required=False),
        V('K1', Range(float), info='Translating vector of the scatering in momentum space ',is_required=False),
        V('NK1', int, info='Number of momentum steps for the integration',is_required=False),
        V('K2', Range(float), info='Translating vector 2 of the scatering in momentum space ',is_required=False),
        V('NK2', int, info='Number of momentum steps 2 for the integration',is_required=False),
        V('K3', Range(float), info='Translating vector 3 of the scatering in momentum space ',is_required=False),
        V('NK3', int, info='Number of momentum steps 3 for the integration',is_required=False),
        V('K4', Range(float), info='Translating vector 4 of the scatering in momentum space ',is_required=False),
        V('NK4', int, info='Number of momentum steps 4 for the integration',is_required=False),

        V('POL_E', DefKeyword('PZ')),
        V('SPOL', int, is_required=False),
        V('PSPIN', SetOf(float, length=3), is_required=False),
        V('BETA1', float, is_required=False, info='Begin of the rotation'),
        V('BETA2', float, is_required=False, info='End of the rotation'),
        V('ROTAXIS',SetOf(int, length=3),is_required=False, info='Axis of the rotation'),
        # expert
        V('TYP', Keyword({0: "i(e) diagram",
                          1: "rotation diagram -> phi scan",
                          2: "scattering-angle diagram -> theta scan",
                          3: "orthonormal projection",
                          4: "stereographic projection"},
                         description = '3,4 only for angular resolved\npe (ups, xps) note: nt=np-> nx,ny'
                ), expert=1,
                info='Crystal coordinats in splout, xpsrun, or upsrun'),
        V('ISTR', Array(int, length=2), expert=[0,0], info="beam number (h,k)"),
        V('POL0', Array(int, length=3), expert=[0,0,0], info="initial pol."),
        V('POL0L', Array(int, length=3), expert=[0,0,0], info="initial pol. in the laboratory system"),
        V('Q1', complex, expert=1. + 0.j, info="Amplitude 1 of the photoelectron used in spin polarized calculations"),
        V('Q2', complex, expert=0. + 0.j, info="Amplitude 2 of the photoelectron used in spin polarized calculations"),
        V('Q3', complex, expert=0. + 0.j, info="Amplitude 3 of the photoelectron used in spin polarized calculations"),
        V('Q4', complex, expert=1. + 0.j, info="Amplitude 4 of the photoelectron used in spin polarized calculations"),
      ]),

      Section('SPEC_STR', [
        V('N_LAYDBL', SetOf(int), [10,10]),
        V('NLAT_G_VEC', 57),
        V('N_LAYER', 50),
        V('SURF_BAR', SetOf(float), [0.25,0.25]),
        V('TRANSP_BAR', flag, False)
      ]),
    ],
    executable = 'kkrspec',
    info = 'ARPES - Angle resolved photoemission spectroscopy'
)
""" ARPES task input parameters definition"""