3.2. Symmetry in photoionization#

Symmetry in photoionization is discussed in detail in Quantum Metrology Vol. 1 [4] (Sect. 2.2.3.3). Herein a brief review is given, with a focus on using symmetry in matrix element retrieval problems. For further details, see Quantum Metrology Vol. 1 [4]; for a more general discussion of symmetry in molecular spectroscopy see the textbook by Bunker and Jensen [89], and the specific case of photoionization is expanded on in the work of Signorell and Merkt [90]. (For application to symmetrized harmonics see Sect. 3.6.2.)

In general, for the dipole matrix element to be non-zero the direct product of the initial state, final state and dipole operator symmetries must contain the totally symmetric representation of the molecular symmetry (MS) group, which is isomorphic to the point group (PG) in rigid molecules. This general case can be written as:

(3.10)#\[ \Gamma_{rve}^{f}\otimes\Gamma_{dipole}\otimes\Gamma_{rve}^{i}\supset\Gamma^{s} \]

Where \(\Gamma_{rve}\) is the rovibronic symmetry of the system (i.e. total symmetry excluding spin), with the \(i/f\) superscript denoting initial and final states respectively. \(\Gamma^{s}\) is the totally symmetric representation in the appropriate molecular symmetry group, and \(\Gamma_{dipole}\) is the symmetry of the dipole operator.

For the specific case of photoionization the final state is split into the symmetry species of the ion and the photoelectron [90]:

(3.11)#\[ \Gamma^{e}\otimes\Gamma_{rve}^{+}\otimes\Gamma_{dipole}\otimes\Gamma_{rve}^{i}\supset\Gamma^{s} \]

This is, essentially, a statement of the limiting case of Eq. (3.3) (see also alternative forms of Eqs. (3.6), (3.7)), which defines the symmetry requirements for the overlap integral to be non-zero (although does not indicate that it will be non-zero for a given system).

In the reconstruction experiments discussed herein, this general form can be often be further simplified. In particular, assuming a full Born-Oppenheimer separation of dynamics, the problem can be treated within the static PG of the system, and only the electronic state symmetries need to be taken into account. In practice, this treatment is appropriate for cases with separable rotational wavepackets, and may also be a reasonable approximation for cases with vibronic wavepackets in cases where the nuclear excursions are relatively small and/or can be treated as linear combinations over a set of symmetrized basis functions. Within this approximation the general symmetry requirements can be written as:

(3.12)#\[ \Gamma^{e(X)}\otimes\Gamma_{e}^{+}\otimes\Gamma_{dipole}\otimes\Gamma_{e}^{i}\supset\Gamma^{s} \]

And \(\Gamma^{e(X)}\) indicates that the continuum symmetries are expressed in a basis of symmetrized harmonics (Sect. 3.6.2). From Eq. (3.12), the set of allowed matrix elements for a given ionization event can be expressed, in terms of the allowed set of symmetrized harmonics \(X_{hl}^{\Gamma\mu*}(\theta,\phi)\), or (equivalently) the usual partial wave basis expressed in spherical harmonics \(Y_{l,\lambda}(\theta,\phi)\), and a set of associated symmetrization coefficients \(b_{hl\lambda}^{\Gamma\mu}\).

A brief numerical example is given below, and a more detailed treatment for a range of photoionization cases forms the second half of the book, see Chapter 5 for details.

Hide code cell content
# Run default config - may need to set full path here
%run '../scripts/setup_notebook.py'

# Override plotters backend?
# plotBackend = 'pl'
*** Setting up notebook with standard Quantum Metrology Vol. 3 imports...
For more details see https://pemtk.readthedocs.io/en/latest/fitting/PEMtk_fitting_basic_demo_030621-full.html
To use local source code, pass the parent path to this script at run time, e.g. "setup_fit_demo ~/github"

*** Running: 2023-12-07 10:44:57
Working dir: /home/jovyan/jake-home/buildTmp/_latest_build/html/doc-source/part1
Build env: html
None

* Loading packages...
* sparse not found, sparse matrix forms not available. 
* natsort not found, some sorting functions not available. 
* Setting plotter defaults with epsproc.basicPlotters.setPlotters(). Run directly to modify, or change options in local env.
* Set Holoviews with bokeh.
* pyevtk not found, VTK export not available. 
* Set Holoviews with bokeh.
Jupyter Book      : 0.15.1
External ToC      : 0.3.1
MyST-Parser       : 0.18.1
MyST-NB           : 0.17.2
Sphinx Book Theme : 1.0.1
Jupyter-Cache     : 0.6.1
NbClient          : 0.7.4
# Example following symmetrized harmonics demo

# Import class
from pemtk.sym.symHarm import symHarm

# Compute hamronics for Td, lmax=4
sym = 'D2h'
lmax=4

symObj = symHarm(sym,lmax)

# Allowed terms and mappings are given in 'dipoleSyms'
symObj.dipole['dipoleSyms']
*** Mapping coeffs to ePSproc dataType = matE
Remapped dims: {'C': 'Cont', 'mu': 'it'}
Added dim Eke
Added dim Targ
Added dim Total
Added dim mu
Added dim Type
Found dipole symmetries: 
{'B1u': {'m': [0], 'pol': ['z']}, 'B2u': {'m': [-1, 1], 'pol': ['y']}, 'B3u': {'m': [-1, 1], 'pol': ['x']}}
{'B1u': {'m': [0], 'pol': ['z']},
 'B2u': {'m': [-1, 1], 'pol': ['y']},
 'B3u': {'m': [-1, 1], 'pol': ['x']}}
# Setting the symmetry for the neutral and ion allows direct products to be computed, 
# and allowed terms to be determined.

sNeutral = 'A1g'
sIon = 'B2u'

symObj.directProductContinuum([sNeutral, sIon])

# Results are pushed to self.continuum, in dictionary and Pandas DataFrame formats, 
# and can be manipulated using standard functionality.
# The subset of allowed values are also set to a separate DataFrame and list.
symObj.continuum['allowed']['PD']
    allowed m pol result terms
Dipole Target          
B1u A1g False [0] ['z'] ['B3g'] ['A1g', 'B2u']
B1g False [0] ['z'] ['B2g'] ['A1g', 'B2u']
A1u False [0] ['z'] ['B3u'] ['A1g', 'B2u']
B1u False [0] ['z'] ['B2u'] ['A1g', 'B2u']
B3g True [0] ['z'] ['A1g'] ['A1g', 'B2u']
B3u False [0] ['z'] ['A1u'] ['A1g', 'B2u']
B2g False [0] ['z'] ['B1g'] ['A1g', 'B2u']
B2u False [0] ['z'] ['B1u'] ['A1g', 'B2u']
B2u A1g True [-1, 1] ['y'] ['A1g'] ['A1g', 'B2u']
B1g False [-1, 1] ['y'] ['B1g'] ['A1g', 'B2u']
A1u False [-1, 1] ['y'] ['A1u'] ['A1g', 'B2u']
B1u False [-1, 1] ['y'] ['B1u'] ['A1g', 'B2u']
B3g False [-1, 1] ['y'] ['B3g'] ['A1g', 'B2u']
B3u False [-1, 1] ['y'] ['B3u'] ['A1g', 'B2u']
B2g False [-1, 1] ['y'] ['B2g'] ['A1g', 'B2u']
B2u False [-1, 1] ['y'] ['B2u'] ['A1g', 'B2u']
B3u A1g False [-1, 1] ['x'] ['B1g'] ['A1g', 'B2u']
B1g True [-1, 1] ['x'] ['A1g'] ['A1g', 'B2u']
A1u False [-1, 1] ['x'] ['B1u'] ['A1g', 'B2u']
B1u False [-1, 1] ['x'] ['A1u'] ['A1g', 'B2u']
B3g False [-1, 1] ['x'] ['B2g'] ['A1g', 'B2u']
B3u False [-1, 1] ['x'] ['B2u'] ['A1g', 'B2u']
B2g False [-1, 1] ['x'] ['B3g'] ['A1g', 'B2u']
B2u False [-1, 1] ['x'] ['B3u'] ['A1g', 'B2u']
allowed m pol result terms
Dipole Target
B1u B3g True [0] [z] [A1g] [A1g, B2u]
B2u A1g True [-1, 1] [y] [A1g] [A1g, B2u]
B3u B1g True [-1, 1] [x] [A1g] [A1g, B2u]
# Ylm basis table with the Character values limited to those defined 
# in self.continuum['allowed']['PD'] Target column
symObj.displayXlm(symFilter = True)  
b
l 0 1 2 3 4
Character ($\Gamma$) SALC (h) PFIX ($\mu$) m
A1g 0 0 0 1.0
1 0 0 1.0
2 0 2 1.0
3 0 0 1.0
4 0 2 1.0
5 0 4 1.0
B1g 0 0 -2 1.0
1 0 -4 1.0
2 0 -2 1.0
B3g 0 0 -1 1.0
1 0 -3 1.0
2 0 -1 1.0