irfpy.vels.bible.flux
¶
Calculation of flux, see Section 10 in VEX/ELS bible.
The flux conversion is made using following functions.
raw2cps()
andraw2cps_np()
Function to convert the raw count to count-per-second.
raw2def()
andraw2def_np()
Function to convert the raw count to differential energy flux.
raw2dnf()
andraw2dnf_np()
Function to convert the raw count to differential number flux.
raw2psd()
andraw2psd_np()
Function to convert the raw count to phase space density.
A sample use of this module can be found in the vels_flux_onecount
.
- irfpy.vels.bible.flux.anode_area_ratio()[source]¶
The anode area ratio used to calculate the flux.
According to the VEX/ELS bible, it is defined as the proportion of the anode area that actually measures counts (\(A_A\)). The function always returns
0.87
.>>> print('%.3f' % anode_area_ratio()) 0.870
- irfpy.vels.bible.flux.raw2cps(raw)[source]¶
Return “counts-per-sec”.
- Parameters
raw (It is normally an
integer
, butfloat
is also allowed. The float is used for different binning parameter and time compression.) – Raw count
>>> cnt = 1 >>> cps = raw2cps(1) >>> print('%.3f' % cps) 35.556
- irfpy.vels.bible.flux.raw2cps_np(raw_np)[source]¶
Return the “count-per-sec” for numpy array.
A numpy array version of
raw2cps()
function.- Parameters
raw_np (
numpy.array
. Typically 128x16 shaped array, but not restricted.) –numpy.array
of the raw count data.- Returns
Count per sec as numpy array.
- Return type
numpy.array
with the same shape of theraw_np
.
>>> cnts = np.array([0,1,2,3,4,5]) >>> cpss = raw2cps_np(cnts) >>> print(cpss[0]) 0.0 >>> print(cpss.shape) (6,) >>> print('%.1f' % cpss[5]) 177.8
- irfpy.vels.bible.flux.raw2def(raw, energy, anode)[source]¶
Return the differential energy flux (DEF). See equation (7) in section 10 in VEX/ELS bible.
- Parameters
raw – Raw count
energy (
float
) – Energy in eV. The value should be taken usingirfpy.vels.bible.energy
module.anode (
int
) – Anode number
- Returns
The differential energy flux in the unit of
eV/eV cm2 sr s
.
>>> cnt = 1 >>> je_1 = raw2def(1, 30, 5) # one count level for 30 eV, anode 5 >>> print('%.2e' % je_1) 5.56e+06
- irfpy.vels.bible.flux.raw2def_np(raw_np, energy_np, anode_np)[source]¶
Return the DEF. A vectorized version of
raw2def()
.- Parameters
raw_np (
numpy.array
offloat
with shape of (nE, nD)) – Raw count matrix. Shape should be (nE, nD) where nE is the number of energy step, and nD is the number of the anode (direction).energy_np (
numpy.array
offloat
with shape of (nE,) or (nE, nD)) – Energy step in eV. Shape should be (nE,) or (nE, nD)anode_np (
numpy.array
ofint
with shape of (nD,)) – Anode number. Shape should be (nD,).
- Returns
The differential energy flux in the unit of
eV/eV cm2 sr s
.
Raises
ValueError
if the shapes are inconsistent.>>> etbl = np.array([1., 10, 100, 1000, 10000]) # As a sample, 5 energy steps assumed. >>> anod = np.array([0, 1, 2, 3]) # As a sample, 4 anode steps assumed. >>> cnts = np.ones([5, 4]) # Count data should have shape of (*nE*, *nD*).
>>> deflux = raw2def_np(cnts, etbl, anod) >>> print(deflux.shape) (5, 4) >>> print('%.3e' % deflux[3, 2]) # One count level of 1000 eV Anode=2 4.102e+06 >>> print('%.3e' % raw2def(1, 1000., 2)) # Scalar version for confirmation 4.102e+06
- irfpy.vels.bible.flux.raw2dnf(raw, energy, anode)[source]¶
Return the differential number flux (DNF).
Apart from the equation (8) in section 10 in VEX/ELS bible, I used here the unit in
/eV cm2 sr s
.- Parameters
raw – Raw count
energy (
float
) – Energy in eVanode (
int
) – Anode number
- Returns
The differential number flux in the unit of
/eV cm2 sr s
.
>>> cnt = 1 >>> jn_1 = raw2dnf(1, 30, 5) # one count level for 30 eV, anode 5 >>> print('%.2e' % jn_1) 1.85e+05
- irfpy.vels.bible.flux.raw2dnf_np(raw_np, energy_np, anode_np)[source]¶
Return the DNF. A vectorized version of
raw2dnf()
.- Parameters
raw_np (
numpy.array
offloat
with shape of (nE, nD)) – Raw count matrix. Shape should be (nE, nD) where nE is the number of energy step, and nD is the number of the anode (direction).energy_np (
numpy.array
offloat
with shape of (nE,) or (nE, nD)) – Energy step in eV. Shape should be (nE,) or (nE, nD)anode_np (
numpy.array
ofint
with shape of (nD,)) – Anode number. Shape should be (nD,).
- Returns
The differential number flux in the unit of
/eV cm2 sr s
.
Raises
ValueError
if the shapes are inconsistent.>>> etbl = np.array([1., 10, 100, 1000, 10000]) # As a sample, 5 energy steps assumed. >>> anod = np.arange(16) # As a sample, 16 anode steps assumed. >>> cnts = np.ones([5, 16]) # Count data should have shape of (*nE*, *nD*).
>>> dnflux = raw2dnf_np(cnts, etbl, anod) >>> print(dnflux.shape) (5, 16) >>> print('%.3e' % dnflux[2, 8]) # One count level of 100 eV Anode=8 5.086e+04 >>> print('%.3e' % raw2dnf(1, 100., 8)) # Scalar version for confirmation 5.086e+04
- irfpy.vels.bible.flux.raw2psd(raw, energy, anode)[source]¶
Return the phase space density (PSD).
Note
I think the VEX/ELS bible contains error in the equation 10. According to the definition, earray is in
eV
and E isJ/eV
. Thus, \(earray \times E\) should be inJ
=kg m2 / s2
. To use the unit ofcm
, the term should be changed to be ((1e2)^2 x earray x E). So the right expressions is \(PSD [cm^{-6} s^3] = \frac{raw \times m_e^2} {GF \times accutime \times 2 \times (1e4 \times earray \times E)^2 \times A_A}\)- Parameters
raw – Raw count
energy (
float
) – Energy in eVanode (
int
) – Anode number
- Returns
PSD in the unit of
cm-6 s3
.
>>> cnt = 1 >>> f_1 = raw2psd(1, 30, 5) # one count level for 30 eV, anode 5 >>> print('%.2e' % f_1) 1.00e-27
- irfpy.vels.bible.flux.raw2psd_np(raw_np, energy_np, anode_np)[source]¶
Return the PSD. A vectorized version of
raw2psd()
.- Parameters
raw_np (
numpy.array
offloat
with shape of (nE, nD)) – Raw count matrix. Shape should be (nE, nD) where nE is the number of energy step, and nD is the number of the anode (direction).energy_np (
numpy.array
offloat
with shape of (nE,)) – Energy step in eV. Shape should be (nE,)anode_np (
numpy.array
ofint
with shape of (nD,)) – Anode number. Shape should be (nD,).
- Returns
The differential number flux in the unit of
s3/cm6
.
Raises
ValueError
if the shapes are inconsistent.>>> etbl = np.array([30., 300, 3000]) # As a sample, 3 energy steps assumed. >>> anod = np.arange(8) # As a sample, 8 anode steps assumed. >>> cnts = np.ones([3, 8]) # Count data should have shape of (*nE*, *nD*).
>>> psd = raw2psd_np(cnts, etbl, anod) >>> print(psd.shape) (3, 8) >>> print('%.3e' % psd[2, 5]) # One count level of 3000 eV Anode=5 9.917e-32 >>> print('%.3e' % raw2psd(1, 3000., 5)) # Scalar version for confirmation 9.917e-32
Todo
Too slow due to loops. Need implementation of vectorized version like raw2dnf.