State-resolved gamma calculations (python)

19/07/24

For calculations, making use of state-to-state \(\gamma\) and \(C\) parameters, some basic routines are available in :py:module:epsproc.geomCalc.gamma.

  • For basic use, working from pre-tabulated (legacy) gamma params, see the “legacy” notes.

  • In this notebook, computation of gamma params with python routines is demonstrated.

The C and gamma parameters and computations are defined as per Refs. [1,2], in particular Ref. [2], Sect 3.1:

\[\begin{split}\begin{eqnarray} C(lm\lambda N_{t}M_{i}\mu_{\lambda}) & = & (2N_{t}+1)(-1)^{M_{+}+q}\left(\begin{array}{ccc} N_{t} & 1 & l\\ M_{t} & p & m \end{array}\right)\left(\begin{array}{ccc} N_{+} & N_{i} & N_{t}\\ -M_{+} & M_{i} & M_{t} \end{array}\right)\nonumber \\ & \mathsf{x} & \left(\begin{array}{ccc} N_{+} & N_{i} & N_{t}\\ -K_{+} & K_{i} & K_{t} \end{array}\right)\left(\begin{array}{ccc} N_{t} & 1 & l\\ -K_{t} & q & -\lambda \end{array}\right)\nonumber \\ & \mathsf{x} & \left(\begin{array}{ccc} N_{+} & J_{+} & S_{+}\\ M_{+} & M_{J+} & M_{S+} \end{array}\right)\left(\begin{array}{ccc} N_{+} & J_{+} & S_{+}\\ K_{+} & P_{+} & \Sigma_{+} \end{array}\right)\label{eq:geom-params-C} \end{eqnarray}\end{split}\]
\[\begin{split}\begin{eqnarray} \gamma_{\alpha\alpha_{+}l\lambda ml'\lambda'm'} & = & (2N_{i}+1)(2N_{+}+1)(-i)^{l'-l}\sum_{M_{+}}\sum_{M_{i}M_{i}'}\sum_{N_{t}N_{t}'}\sum_{\mu_{\lambda}\mu_{\lambda}'}{}^{J_{i}K_{i}}\boldsymbol{\rho}_{M_{i}M_{i}'}\nonumber \\ & \mathsf{x} & C(lm\lambda N_{t}M_{i}q)C(l'm'\lambda'N_{t}'M_{i}'q')\label{eq:gamma-state} \end{eqnarray}\end{split}\]

This form allows for:

  • Angular momentum transfer between initial (\(_i\)) and final (\(_+\)) states, with transfer terms denoted by subscript \(t\).

  • Modulation by initial \(M\)-state distribution, expressed as a density matrix \(\boldsymbol{\rho}_{M_{i}M_{i}'}\).

  • Cf. aligned-frame case, which assumes a decoupled rotational wavepacket, and is derived from a sum over \(J,M\) states (see Ref. [3] for further details).

Refs:

  1. Hockett, Paul. 2009. “Photoionization Dynamics of Polyatomic Molecules.” PhD Thesis, University of Nottingham. http://eprints.nottingham.ac.uk/10857/.

  2. ———. 2018. Quantum Metrology with Photoelectrons, Volume 1: Foundations. IOP Publishing. https://doi.org/10.1088/978-1-6817-4684-5.

  3. Stolow, Albert, and Jonathan G. Underwood. 2008. “Time-Resolved Photoelectron Spectroscopy of Non-Adiabatic Dynamics in Polyatomic Molecules.” In Advances in Chemical Physics, edited by Stuart A. Rice, 139:497–584. Advances in Chemical Physics. Hoboken, NJ, USA: John Wiley & Sons, Inc. https://doi.org/10.1002/9780470259498.ch6.

Gamma calc demo

[2]:
# Load functions
from epsproc.geomFunc.gamma import gammaCalc
OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
* 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.
[3]:
# Compute for default case
gammaCalc.gammaCalc()
[3]:
C2 C1 gamma lPhase
Ki lam lamp Kt mp Mt Kc m lp l p
-2 -4 -4 3 -4 3 -1 -4 4 4 1 0.015873 0.015873 0.003779+0.000000j 1.0+0.0j
-3 2 -1 -3 4 4 1 0.011224 0.011224 0.001890+0.000000j 1.0+0.0j
3 -2 -1 3 4 4 -1 0.011224 0.011224 0.001890+0.000000j 1.0+0.0j
4 -3 -1 4 4 4 -1 0.015873 0.015873 0.003779+0.000000j 1.0+0.0j
-3 3 -4 3 -1 -4 4 4 1 -0.007937 0.015873 -0.001890+0.000000j 1.0+0.0j
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2 4 3 -3 4 -3 1 4 4 4 -1 -0.007937 0.015873 -0.001890+0.000000j 1.0+0.0j
4 -3 -4 3 1 -4 4 4 1 0.015873 0.015873 0.003779+0.000000j 1.0+0.0j
-3 2 1 -3 4 4 1 0.011224 0.011224 0.001890+0.000000j 1.0+0.0j
3 -2 1 3 4 4 -1 0.011224 0.011224 0.001890+0.000000j 1.0+0.0j
4 -3 1 4 4 4 -1 0.015873 0.015873 0.003779+0.000000j 1.0+0.0j

3022 rows × 4 columns

[4]:
# Compute for specific channel = [Ni,Ki,Nc,Kc]

channel = [2,0,1,1]
gammaCalc.gammaCalc(channel)
[4]:
C2 C1 gamma lPhase
lam lamp Kt mp Mt m lp l p
0 0 -1 -2 2 -2 2 2 0 0.013333 0.013333 0.002667+0.000000j 1.0+0.0j
-1 0 -1 1 1 1 -0.011111 -0.011111 0.001852+0.000000j 1.0+0.0j
1 -1 1 1 0 0.025382 0.025382 0.007611+0.000000j 1.0+0.0j
2 -1 1 1 -1 0.004783 0.004783 0.006000+0.000000j 1.0+0.0j
2 -1 0.016330 -0.009428 0.000000-0.002309j -0.0+1.0j
... ... ... ... ... ... ... ... ... ... ... ... ...
2 2 -1 2 -2 2 2 2 0 -0.010887 -0.010887 0.001778+0.000000j 1.0+0.0j
-1 2 2 2 -1 0.004783 0.004783 0.006000+0.000000j 1.0+0.0j
3 -1 0.016330 -0.007776 0.000000-0.001905j -0.0+1.0j
3 2 -1 -0.007776 0.016330 0.000000+0.001905j -0.0-1.0j
3 -2 3 3 3 -1 -0.013469 -0.013469 0.002721+0.000000j 1.0+0.0j

184 rows × 4 columns

[5]:
# Compute for specific channel = [Ni,Ki,Nc,Kc]
# + include initial state density matrix
# NOTE: TODO, density matrix not yet implemented.

channel = [2,0,1,1]
gammaCalc.gammaCalc(channel, denMat=1)
*** Density matrix mult not yet implemented.
[5]:
C2 C1 gamma lPhase
lam lamp Kt mp Mt m lp l p
0 0 -1 -2 2 -2 2 2 0 0.013333 0.013333 0.002667+0.000000j 1.0+0.0j
-1 0 -1 1 1 1 -0.011111 -0.011111 0.001852+0.000000j 1.0+0.0j
1 -1 1 1 0 0.025382 0.025382 0.007611+0.000000j 1.0+0.0j
2 -1 1 1 -1 0.004783 0.004783 0.006000+0.000000j 1.0+0.0j
2 -1 0.016330 -0.009428 0.000000-0.002309j -0.0+1.0j
... ... ... ... ... ... ... ... ... ... ... ... ...
2 2 -1 2 -2 2 2 2 0 -0.010887 -0.010887 0.001778+0.000000j 1.0+0.0j
-1 2 2 2 -1 0.004783 0.004783 0.006000+0.000000j 1.0+0.0j
3 -1 0.016330 -0.007776 0.000000-0.001905j -0.0+1.0j
3 2 -1 -0.007776 0.016330 0.000000+0.001905j -0.0-1.0j
3 -2 3 3 3 -1 -0.013469 -0.013469 0.002721+0.000000j 1.0+0.0j

184 rows × 4 columns

Versions

[6]:
import scooby
scooby.Report(additional=['epsproc', 'holoviews', 'hvplot', 'xarray', 'matplotlib', 'bokeh'])
[6]:
Fri Jul 19 17:18:18 2024 EDT
OS Linux CPU(s) 64 Machine x86_64 Architecture 64bit
RAM 62.8 GiB Environment Jupyter File system btrfs
Python 3.10.11 | packaged by conda-forge | (main, May 10 2023, 18:58:44) [GCC 11.3.0]
epsproc 1.3.2-dev holoviews 1.16.2 hvplot 0.8.4 xarray 2022.3.0
matplotlib 3.5.3 bokeh 3.1.1 numpy 1.23.5 scipy 1.10.1
IPython 8.13.2 scooby 0.7.2
[7]:
# Check current Git commit for local ePSproc version
import epsproc as ep
from pathlib import Path
!git -C {Path(ep.__file__).parent} branch
!git -C {Path(ep.__file__).parent} log --format="%H" -n 1
* 3d-AFPAD-dev
  dev
  master
b22bbbfda77b825b7af94527d2fe9244f09f7f3c
[8]:
# Check current remote commits
!git ls-remote --heads https://github.com/phockett/ePSproc
0b8506218730b856a229c0d844eff35cd74a473e        refs/heads/3d-AFPAD-dev
18901ac6056324d6a2674396939fdcc373d35395        refs/heads/dependabot/pip/notes/envs/envs-versioned/idna-3.7
9d9eb4e1a20d4ff77d07af2ac782ba18c26e5dcc        refs/heads/dependabot/pip/notes/envs/envs-versioned/jinja2-3.1.4
226759a58ebe96bf1a6df60ccd5efb0c449af3a7        refs/heads/dependabot/pip/notes/envs/envs-versioned/pillow-10.3.0
de0e271701949602ce7f170a9665e37b27d2401c        refs/heads/dependabot/pip/notes/envs/envs-versioned/requests-2.32.0
4ff0ed84a1df2a3de4258ba7e49db1e47e6ac596        refs/heads/dependabot/pip/notes/envs/envs-versioned/scipy-1.11.1
120416a432b8da85b68912d0c424f47d77392434        refs/heads/dependabot/pip/notes/envs/envs-versioned/tornado-6.4.1
b50b0b946a1a7cb5b22c95d1e4cee120b22e6874        refs/heads/dependabot/pip/notes/envs/envs-versioned/tqdm-4.66.3
a96b411b4bbc911b35bf080b5e848dca655d0f1b        refs/heads/dependabot/pip/notes/envs/envs-versioned/urllib3-1.26.19
fd9c621f0c91e05ffcb097f59e9d8d8b43c5fc23        refs/heads/dependabot/pip/scipy-1.11.1
7e4270370d66df44c334675ac487c87d702408da        refs/heads/dev
1c0b8fd409648f07c85f4f20628b5ea7627e0c4e        refs/heads/master
69cd89ce5bc0ad6d465a4bd8df6fba15d3fd1aee        refs/heads/numba-tests
ea30878c842f09d525fbf39fa269fa2302a13b57        refs/heads/revert-9-master
baf0be0c962e8ab3c3df57c8f70f0e939f99cbd7        refs/heads/testDev
[ ]: