Photon-ALP conversion probability

Theoretical background

This page provides a little bit of background about how the mixing of photons and axion-like particles (ALPs) is calculated by gammaALPs. It draws heavily from the discussion provided in [Meyer2014].

Photons and ALPs can mix in the presence of electromagnetic fields. In gammaALPs, this equations of motions are solved through the transfer matrix approach (see [DeAngelis2011] for a review), which is implemented in the GammaALPTransfer class. It derives from the effective Lagrangian for the mixing between photons and ALPs, which can be written as [Raffelt1988]

\[\mathcal{L} = \mathcal{L}_{a\gamma} + \mathcal{L}_\mathrm{EH} + \mathcal{L}_a.\]

The first term on the right hand side is given describes the photon-ALP mixing (see below) the second term is the effective Euler-Heisenberg Lagrangian that accounts for one-loop corrections of the photon propagator and the ALP mass and kinetic terms are

\[\mathcal{L}_a = \frac 1 2 \partial_\mu a \partial^\mu a - \frac 1 2 m^2_a a^2.\]

ALPs only couple to photons in the presence of a magnetic field component \(\mathbf{B}_\perp\) transversal to the propagation direction and only to photon polarisation states in the plane spanned by \(\mathbf{B}\) and the direction of propagation. Let \(z\) be the propagation direction so that \(\mathbf{B}_\perp = B \hat{\mathbf{y}}\), and \(A_x\), \(A_y\) the polarisation states along \(\hat{x}\) and \(\hat{y}\), respectively. Then the equations of motion for a polarised photon beam of energy $E$ propagating in a cold plasma filled with a homogeneous magnetic field read

\[\left( i\frac{\mathrm{d}}{\mathrm{d}z} + E + \mathcal{M}_0 \right)\Psi(x_3) = 0,\]

with \(\Psi(z) = (A_x(z), A_y(z), a(z))^T\) and the mixing matrix \(\mathcal{M}_0\) (neglecting Faraday rotation),

\[\begin{split}\mathcal{M}_0 = \begin{pmatrix} \Delta_{\perp} & 0 & 0\\ 0 & \Delta_{||} & \Delta_{a\gamma} \\ 0 & \Delta_{a\gamma} & \Delta_a \end{pmatrix}.\end{split}\]

The terms \(\Delta_{||,\perp}\) arise due to the effects of the propagation of photons in a plasma and the QED vacuum polarisation effect, \(\Delta_{\perp} = \Delta_\mathrm{pl} + 2\Delta_\mathrm{QED} + \Delta_\mathrm{CMB}\), and \(\Delta_{||} = \Delta_\mathrm{pl} + 7/2\Delta_\mathrm{QED} + \Delta_\mathrm{CMB}\). The plasma contribution depends on electron density \(n_{\mathrm{el}}\) through the plasma frequency \(\omega_\mathrm{pl}^2 = 4\pi e^2 n_\mathrm{el} / m_e\), \(\Delta_\mathrm{pl} = -\omega_\mathrm{pl} / (2 E)\). The QED vacuum polarisation term reads \(\Delta_\mathrm{QED} = \alpha E / (45\pi)(B /(B_\mathrm{cr}))^2\), with the fine-structure constant \(\alpha\), and the critical magnetic field \(B_\mathrm{cr} = m^2_e / |e| \sim 4.4\times10^{13}`G. The term :math:\)Delta_mathrm{CMB} = 44alpha^2 / (135 m_e^4)rho_mathrm{CMB}` accounts for photon-photon dispersion with the cosmic microwave background (CMB), where \(\rho_\mathrm{CMB} = (\pi^2 / 15)T^4 \sim 0.261\,\mathrm{eV}\,\mathrm{cm}^{-3}\) is the CMB energy density [Dobrynina2015]. The kinetic term for the ALP is \(\Delta_a = -m_a^2 / (2E)\) and photon-ALP mixing is the result of the off-diagonal elements \(\Delta_{a\gamma} = g_{a\gamma} B / 2\). Suitable numerical values for the different \(\Delta\) terms are provided in ref. [Horns2012]. If photons are lost due to absorption, the diagonal terms \(\Delta_{||,\perp}\) get an additional imaginary contribution that scales with the mean free path \(\Gamma\) of the photon. The mean free path and additional terms for photon-photon dispersion \(\chi\) can be provided to GammaALPTransfer upon initialization.

The equations of motion lead to photon-ALP oscillations with the wave number

\[\Delta_\mathrm{osc} = \sqrt{(\Delta_{||} - \Delta_a)^2 + 4\Delta_{a\gamma}^2}.\]

For an unpolarised photon beam, the problem has to be reformulated in terms of the density matrix \(\rho(z) = \Psi(z)\Psi(z)^\dagger\) that obeys the von-Neumann-like commutator equation

\[i\frac{\mathrm{d}\rho}{\mathrm{d}x_3} = [\rho,\mathcal{M}_0],\]

which is solved through \(\rho(z) = \mathcal{T}(z,0; E)\rho(0)\mathcal{T}^\dagger(z,0; E)\), with the transfer matrix \(\mathcal T\) with \(\Psi(z) = \mathcal{T}(z,0;E)\Psi(0)\) and initial condition \(\mathcal{T}(0,0;E) = 1\). In general, \(\mathbf B_\perp`lwill not be aligned along the :math:`y\) axis but will form an angle \(\psi\) with it. In this case, the solutions have to be modified with a similarity transformation and, consequently, \(\mathcal M\) and \(\mathcal T\) will depend on \(\psi\).

In practice, the code split up the the calculation into \(N\) steps along the \(z\), where it is assumed that the magnetic field is constant for each step length \(\mathrm{d}z\). For the mixing in \(N\) consecutive steps one finds that the photon survival probability of an initial polarisation \(\rho(0)\) is given by

\[P_{\gamma\gamma} = \mathrm{Tr}\left( (\rho_{11} + \rho_{22}) \mathcal{T}(z_{N},z_{1};\psi_{N},\ldots,\psi_1;E) \rho(0) \mathcal{T}^\dagger(z_{N},z_{1};\psi_{N},\ldots,\psi_1;E)\right),\]

with \(\rho_{11} = \mathrm{diag}(1,0,0), \rho_{22} = \mathrm{diag}(0,1,0)\), and

\[\mathcal{T}(z_{N},z_{1};\psi_{N},\ldots,\psi_1;E) = \prod\limits_{i = 1}^{N} \mathcal{T}(z_{i+1},z_{i};\psi_{i};E).\]

For an initially unpolarised photon beam one has \(\rho(0) = (1/2) \,\mathrm{diag}(1,1,0)\). By providing the magnetic field, angle \(\psi\), and electron density, (and optionally a photon mean free path and photon-photon dispersion), the codes pre-calculates all matrices \(\mathcal{T}(z_{i+1},z_{i};\psi_{i};E)\) for each requested energy \(E\) as 4 dimensional arrays (ndarray) using the fill_transfer() method. These are then multiplied together with a matrix multiplication along the \(z\) axis.

Reference / API

class gammaALPs.base.transfer.GammaALPTransfer(EGeV, B, psi, nel, dL, alp, Gamma=None, chi=None, Delta=None)[source]

Bases: object

Base class to calculate the transfer Function of photon-ALP oscillations in arbitrary magnetic fields. Does not account for redshift evolution.

Units used are: magnetic field B: micro Gauss length scales: kpc electron densities: cm^-3 ALP mass: neV photon-ALP coupling: 10^-11 GeV^-1

Unit conversion is done through astropy.units module

property B
property Bn
property Delta
property EGeV
property Gamma
__init__(EGeV, B, psi, nel, dL, alp, Gamma=None, chi=None, Delta=None)[source]

Initialize the transfer base class

Parameters:
  • EGeV (array-like) – n-dim numpy array with gamma-ray energies in GeV

  • B (array-like) – m-dim numpy array with magnetic field values along line of sight in micro Gauss

  • psi (array-like) – m-dim numpy array with angles between transversal magnetic field in photon polarization direction (along y-axis) along the line of sight. Or (k,m)-dim numpy array with angles for k B-field realizations

  • nel (array-like) – m-dim numpy array with electron densities in cm^-3 along the line of sight.

  • dL (array-like) – m-dim numpy array with distance step length traveled along line of sight in kpc. In each step length dL, magnetic field is assumed to be constant.

  • alp (~gammaALPs.ALP) – ~gammaALPs.ALP object with ALP parameters

  • Gamma (array-like or None) – (n x m)-dim array with photon absorption rate at energy E and distance L. In kpc^-1. If None, no absorption is included. Default is None.

  • Delta (array-like or None) – (n x m)-dim array with additional momentum difference term for 0,0 and 1,1 components of mixing matrix at energy E and distance L. In kpc^-1. If None, no additional term is included. Default is None.

  • chi (array-like or None) – (n x m)-dim numpy array with photon dispersion rate at energy E and distance L. If None, no dispersion is included. Default is None.

property alp
calc_transfer(nsim=-1, nprocess=1)[source]

Calculate Transfer matrix by performing dot product of all transfer matrices along axis of distance.

Parameters:
  • nsim (int) – number of B-field realization to be used. Only works if class was initialized with multiple B-field realizations.

  • nprocess (int) – distibute matrix multiplication to n (if n > 1) processes using python’s multiprocessing. Testing this feature so far did not show any gain in speed, however!

Return type:

n x 3 x 3 dim ndarray with transfer matrix for all energies

calc_transfer_multi(nprocess=1)[source]

Calculate Transfer matrix by performing dot product of all transfer matrices along axis of distance. If multiple realizations for the B-field are to be calculated, parallel processing is used.

Parameters:

nprocess (int) – distribute matrix multiplication to n (if n > 1) processes using python’s multiprocessing.

Returns:

  • List with n x 3 x 3 dim ndarray with transfer matrix for all energies.

  • Length of list is equal to number of requested B-field realizations.

property chi
property dL
fill_transfer()[source]

Calculate the transfer matrix for every domain for all requested magnetic field realizations

Return type:

list with all transfer functions for all B-field realizations

property nel
property neln
property nsim
property psi
property psin
static read_environ(name, alp, filepath='./')[source]

Load a current magnetic field, psi angles, and electron density, absorption and dispersion rate from a previous configuration

Parameters:
  • name (str) – name of job

  • alp (~gammaALPs.transer.ALP) – ~gammaALPs.transer.ALP object with ALP parameters

  • filepath (str) – full path to output file

  • m (float) – ALP mass in neV. Default in 1.

  • g (float) – photon-ALP couplint in 10^-11 GeV^-1. Default in 1.

  • log_level (str) – level for logging, either ‘debug’, ‘info’, ‘warning’ or ‘error’

show_conv_prob_vs_r(pin, pout)[source]

Compute the conversion probability as a function of distance. Works only after you have computed the transfer matrices in each domain.

Parameters:
  • pin (~numpy.ndarray) – 3 x 3 matrix with initial polarization

  • pout (~numpy.ndarray) – 3 x 3 matrix with final polarization

Return type:

Conversion probability for each energy and distance

write_environ(name, filepath='./')[source]

Save the current magnetic field, psi angles, and electron density to numpy files

Parameters:
  • name (str) – name of job

  • kwargs

  • ------

  • filepath (str) – full path to output file

gammaALPs.base.transfer.EminGeV(m_neV, g11, n_cm3, BmuG)[source]

Calculates the energy above which the strong mixing regime sets in. Includes momentum difference terms Delta_pl, Delta_a and Delta_ag. If input parameters are provided as arrays, they all need to have the same shape.

Parameters:
  • m_neV (float or array-like) – ALP mass in neV

  • g11 (float or array-like) – photon-ALP coupling in 10^-11 GeV^-1

  • n_cm3 (float or array-like) – electron density in cm^-3

  • BmuG (float or array-like) – transversal magnetic field in muG

Returns:

Emin_GeV – minimum energy of strong mixing regime in GeV as float or array.

Return type:

float or array-like

gammaALPs.base.transfer.EmaxGeV(g11, BmuG)[source]

Calculates the energy below which the mixing occurs in the strong mixing regime. Includes momentum difference terms Delta_CMB, Delta_QED (without high order corrections) and Delta_ag. If input parameters are provided as arrays, they all need to have the same shape.

Parameters:
  • m_neV (float or array-like) – ALP mass in neV

  • g11 (float or array-like) – photon-ALP coupling in 10^-11 GeV^-1

  • BmuG (float or array-like) – transversal magnetic field in muG

Returns:

Emax_GeV – maximum energy of strong mixing regime in GeV as float or array.

Return type:

float or array-like