madman.analysis.ejdos

Electron joint density of states.

  1r"""Electron joint density of states."""
  2
  3from collections.abc import Sequence
  4from functools import reduce
  5from numbers import Real
  6from typing import Type
  7
  8import numpy as np
  9from matplotlib import pyplot as plt
 10
 11import madman.analysis.absorbance
 12from madman.analysis.absorbance import (
 13    SpectralAbsorbance,
 14    ResolvedSpectralAbsorbance,
 15)
 16from madman.analysis.spectrum import (
 17    EnergySpectrumMeta,
 18    EnergySpectrum,
 19    ResolvedEnergySpectrumMeta,
 20    PairResolvedEnergySpectrum,
 21    BandPairResolvedEnergySpectrum,
 22    CellPairResolvedEnergySpectrum,
 23)
 24
 25
 26class ElectronJointDensityOfStatesMeta(EnergySpectrumMeta):
 27    r"""Metaclass of ElectronJoinDensityOfStates."""
 28
 29    @property
 30    def std_axes(cls) -> plt.Axes:
 31        r"""Standard axes to plot electron joint density of states.
 32
 33        Returns:
 34            Plot axes.
 35        """
 36        _, ax = plt.subplots(tight_layout=True)
 37        ax.set_xlabel(r"Photon energy / $\mathrm{eV}$")
 38        ax.set_ylabel(r"Electron JDOS / $\mathrm{eV^{-1}}$")
 39        return ax
 40
 41
 42class ElectronJointDensityOfStates(
 43    EnergySpectrum, metaclass=ElectronJointDensityOfStatesMeta
 44):
 45    r"""Electron joint density of states.
 46
 47    Note:
 48        `energies`: Photon energies [$\mathrm{eV}$].
 49        `values`: Electron joint density of states values [$\mathrm{eV^{-1}}$].
 50    """
 51
 52    def __init__(
 53        self,
 54        energies: Sequence[Real, ...],
 55        values: Sequence[Real, ...],
 56        *,
 57        d_energy: Real | None = None,
 58    ) -> None:
 59        r"""Initialize ElectronJointDensityOfStates object.
 60
 61        Args:
 62            energies: Photon energies [$\mathrm{eV}$].
 63            values: Electron joint density of states values
 64                [$\mathrm{eV^{-1}}$].
 65            d_energy: Target photon energy increment [$\mathrm{eV}$].
 66
 67        Raises:
 68            ValueError: If there are negative values.
 69        """
 70        if np.less(values, 0.0).any():
 71            raise ValueError("Negative values!")
 72        super().__init__(energies, values, d_energy=d_energy)
 73
 74    def calc_sp_absorb(
 75        self, *, ejdos_rth: Real = 1.0, energy_co: Real | None = None
 76    ) -> SpectralAbsorbance:
 77        r"""Calculate spectral absorbance.
 78
 79        Note:
 80            By assuming that:
 81
 82            1. the optical transition matrix element is constant;
 83            2. there are enough phonons to enable indirect optical transitions;
 84
 85            the optical absorption coefficient $\alpha$ may be approximated as:
 86
 87            $$
 88            \alpha(\hbar \, \omega) \propto J(\hbar \, \omega)
 89            $$
 90
 91            where $J$ is the electron joint density of states and
 92            $\hbar \, \omega$ is the photon energy (see
 93            [O'Leary et al. (1997)](https://doi.org/10.1063/1.365643)
 94            for details).
 95
 96            By additionally assuming:
 97
 98            1. negligible reflectance $R$;
 99            2. sample thickness $l$ much larger than coherence length;
100
101            the spectral absorbance $A$ may be approximated according to
102            Beer-Lambert's law as:
103
104            $$
105            A(\hbar \, \omega) = 1 - R(\hbar \, \omega) - T(\hbar \, \omega) = 1 - \exp {\alpha(\hbar \, \omega) \, l}
106            $$
107
108            (see
109            [Fox (2010)](https://global.oup.com/academic/product/optical-properties-of-solids-9780199573370?q=978-0-19-957337-0&cc=it&lang=en)).
110
111            Then, the optical absorption coefficient is known at less than a
112            multiplicative factor, which can be incorporated into $l$, and it
113            makes sense to write:
114
115            $$
116            \alpha(\hbar \, \omega) \, l = \frac{3 \, J(\hbar \, \omega)}{\bar{J}_\text{th} \, \max{J(\hbar \, \omega)}}
117            $$
118
119            where $\bar{J}_\text{th}$ is the electron joint density of states
120            threshold relative to the electron joint density of states maximum
121            above which 95% of radiation is absorbed.
122
123        Args:
124            ejdos_rth: Electron joint density of states threshold relative to
125                the electron joint density of states maximum above which 95% of
126                radiation is absorbed.
127            energy_co: Photon energy cutoff above which absorbance is neglected.
128        """
129        if energy_co is None:
130            mask = self.energies >= 0.0
131        else:
132            mask = np.logical_and(
133                self.energies >= 0.0, self.energies <= energy_co
134            )
135        ejdos_max = np.amax(self.values)
136        norm_values = 3 * self.values / (ejdos_rth * ejdos_max)
137        sp_absorb_values = 1.0 - np.exp(-norm_values)
138        return SpectralAbsorbance(self.energies[mask], sp_absorb_values[mask])
139
140
141class ResolvedElectronJointDensityOfStatesMeta(ResolvedEnergySpectrumMeta):
142    r"""Metaclass of ResolvedElectronJointDensityOfStates."""
143
144    @property
145    def rsv_sp_absorb(cls) -> Type:
146        r"""Associated resolved spectral absorbance class."""
147        module = madman.analysis.absorbance
148        name = cls.__name__.replace(
149            "ElectronJointDensityOfStates", "SpectralAbsorbance"
150        )
151        return getattr(module, name)
152
153
154class ResolvedElectronJointDensityOfStates(
155    PairResolvedEnergySpectrum,
156    metaclass=ResolvedElectronJointDensityOfStatesMeta,
157):
158    r"""Resolved electron joint density of states.
159
160    Note:
161        `energies`: Photon energies [$\mathrm{eV}$].
162        `rsv_values`: Resolved electron joint density of states values
163            [$\mathrm{eV^{-1}}$].
164    """
165
166    def calc_rsv_sp_absorb(
167        self, *, ejdos_rth: Real = 1.0, energy_co: Real | None = None
168    ) -> ResolvedSpectralAbsorbance:
169        r"""Calculate resolved spectral absorbance.
170
171        Note:
172            See
173            `madman.analysis.ejdos.ElectronJointDensityOfStates.ret_sp_absorb`
174            for details.
175
176        Args:
177            ejdos_rth: Electron joint density of states threshold relative to
178                the electron joint density of states maximum above which 95% of
179                radiation is absorbed.
180            energy_co: Photon energy cutoff above which absorbance is neglected.
181
182        Returns:
183            Resolved spectral absorbance.
184        """
185        if energy_co is None:
186            mask = self.energies >= 0.0
187        else:
188            mask = np.logical_and(
189                self.energies >= 0.0, self.energies <= energy_co
190            )
191        energies = self.energies[mask]
192
193        ejdos_tot = self.total
194        ejdos_tot_values = ejdos_tot.values[mask]
195
196        sp_absorb_tot = ejdos_tot.calc_sp_absorb(
197            ejdos_rth=ejdos_rth, energy_co=energy_co
198        )
199        sp_absorb_tot_values = sp_absorb_tot.values
200
201        rsv_sp_absorb_values = {}
202        for feat, values in self.rsv_values.items():
203            values = values[mask]
204            rsv_sp_absorb_values[feat] = np.zeros_like(values, dtype=float)
205            for i, value in enumerate(values):
206                if ejdos_tot_values[i] != 0.0:
207                    rsv_sp_absorb_values[feat][i] = (
208                        value / ejdos_tot_values[i] * sp_absorb_tot_values[i]
209                    )
210        return type(self).rsv_sp_absorb(energies, rsv_sp_absorb_values)
211
212
213class BandResolvedElectronJointDensityOfStates(
214    BandPairResolvedEnergySpectrum, ResolvedElectronJointDensityOfStates
215):
216    r"""Band resolved electron joint density of states.
217
218    Note:
219        `energies`: Photon energies [$\mathrm{eV}$].
220        `rsv_values`: Band resolved electron joint density of states values
221            [$\mathrm{eV^{-1}}$].
222
223    Note:
224        See `madman.analysis.spectrum.BandResolvedEnergySpectrum` for details.
225    """
226
227
228class CellResolvedElectronJointDensityOfStates(
229    CellPairResolvedEnergySpectrum, ResolvedElectronJointDensityOfStates
230):
231    r"""Cell resolved electron joint density of states.
232
233    Note:
234        `energies`: Photon energies [$\mathrm{eV}$].
235        `rsv_values`: Cell resolved electron joint density of states values
236            [$\mathrm{eV^{-1}}$].
237
238    Note:
239        See `madman.analysis.spectrum.CellResolvedEnergySpectrum` for details.
240    """
class ElectronJointDensityOfStatesMeta(madman.analysis.spectrum.EnergySpectrumMeta):
27class ElectronJointDensityOfStatesMeta(EnergySpectrumMeta):
28    r"""Metaclass of ElectronJoinDensityOfStates."""
29
30    @property
31    def std_axes(cls) -> plt.Axes:
32        r"""Standard axes to plot electron joint density of states.
33
34        Returns:
35            Plot axes.
36        """
37        _, ax = plt.subplots(tight_layout=True)
38        ax.set_xlabel(r"Photon energy / $\mathrm{eV}$")
39        ax.set_ylabel(r"Electron JDOS / $\mathrm{eV^{-1}}$")
40        return ax

Metaclass of ElectronJoinDensityOfStates.

std_axes: matplotlib.axes._axes.Axes
30    @property
31    def std_axes(cls) -> plt.Axes:
32        r"""Standard axes to plot electron joint density of states.
33
34        Returns:
35            Plot axes.
36        """
37        _, ax = plt.subplots(tight_layout=True)
38        ax.set_xlabel(r"Photon energy / $\mathrm{eV}$")
39        ax.set_ylabel(r"Electron JDOS / $\mathrm{eV^{-1}}$")
40        return ax

Standard axes to plot electron joint density of states.

Returns:

Plot axes.

Inherited Members
builtins.type
type
mro
madman.analysis.spectrum.EnergySpectrumMeta
rsv
band_rsv
cell_rsv
class ElectronJointDensityOfStates(madman.analysis.spectrum.EnergySpectrum):
 43class ElectronJointDensityOfStates(
 44    EnergySpectrum, metaclass=ElectronJointDensityOfStatesMeta
 45):
 46    r"""Electron joint density of states.
 47
 48    Note:
 49        `energies`: Photon energies [$\mathrm{eV}$].
 50        `values`: Electron joint density of states values [$\mathrm{eV^{-1}}$].
 51    """
 52
 53    def __init__(
 54        self,
 55        energies: Sequence[Real, ...],
 56        values: Sequence[Real, ...],
 57        *,
 58        d_energy: Real | None = None,
 59    ) -> None:
 60        r"""Initialize ElectronJointDensityOfStates object.
 61
 62        Args:
 63            energies: Photon energies [$\mathrm{eV}$].
 64            values: Electron joint density of states values
 65                [$\mathrm{eV^{-1}}$].
 66            d_energy: Target photon energy increment [$\mathrm{eV}$].
 67
 68        Raises:
 69            ValueError: If there are negative values.
 70        """
 71        if np.less(values, 0.0).any():
 72            raise ValueError("Negative values!")
 73        super().__init__(energies, values, d_energy=d_energy)
 74
 75    def calc_sp_absorb(
 76        self, *, ejdos_rth: Real = 1.0, energy_co: Real | None = None
 77    ) -> SpectralAbsorbance:
 78        r"""Calculate spectral absorbance.
 79
 80        Note:
 81            By assuming that:
 82
 83            1. the optical transition matrix element is constant;
 84            2. there are enough phonons to enable indirect optical transitions;
 85
 86            the optical absorption coefficient $\alpha$ may be approximated as:
 87
 88            $$
 89            \alpha(\hbar \, \omega) \propto J(\hbar \, \omega)
 90            $$
 91
 92            where $J$ is the electron joint density of states and
 93            $\hbar \, \omega$ is the photon energy (see
 94            [O'Leary et al. (1997)](https://doi.org/10.1063/1.365643)
 95            for details).
 96
 97            By additionally assuming:
 98
 99            1. negligible reflectance $R$;
100            2. sample thickness $l$ much larger than coherence length;
101
102            the spectral absorbance $A$ may be approximated according to
103            Beer-Lambert's law as:
104
105            $$
106            A(\hbar \, \omega) = 1 - R(\hbar \, \omega) - T(\hbar \, \omega) = 1 - \exp {\alpha(\hbar \, \omega) \, l}
107            $$
108
109            (see
110            [Fox (2010)](https://global.oup.com/academic/product/optical-properties-of-solids-9780199573370?q=978-0-19-957337-0&cc=it&lang=en)).
111
112            Then, the optical absorption coefficient is known at less than a
113            multiplicative factor, which can be incorporated into $l$, and it
114            makes sense to write:
115
116            $$
117            \alpha(\hbar \, \omega) \, l = \frac{3 \, J(\hbar \, \omega)}{\bar{J}_\text{th} \, \max{J(\hbar \, \omega)}}
118            $$
119
120            where $\bar{J}_\text{th}$ is the electron joint density of states
121            threshold relative to the electron joint density of states maximum
122            above which 95% of radiation is absorbed.
123
124        Args:
125            ejdos_rth: Electron joint density of states threshold relative to
126                the electron joint density of states maximum above which 95% of
127                radiation is absorbed.
128            energy_co: Photon energy cutoff above which absorbance is neglected.
129        """
130        if energy_co is None:
131            mask = self.energies >= 0.0
132        else:
133            mask = np.logical_and(
134                self.energies >= 0.0, self.energies <= energy_co
135            )
136        ejdos_max = np.amax(self.values)
137        norm_values = 3 * self.values / (ejdos_rth * ejdos_max)
138        sp_absorb_values = 1.0 - np.exp(-norm_values)
139        return SpectralAbsorbance(self.energies[mask], sp_absorb_values[mask])

Electron joint density of states.

Note:

energies: Photon energies [$\mathrm{eV}$]. values: Electron joint density of states values [$\mathrm{eV^{-1}}$].

ElectronJointDensityOfStates( energies: collections.abc.Sequence[numbers.Real, ...], values: collections.abc.Sequence[numbers.Real, ...], *, d_energy: numbers.Real | None = None)
53    def __init__(
54        self,
55        energies: Sequence[Real, ...],
56        values: Sequence[Real, ...],
57        *,
58        d_energy: Real | None = None,
59    ) -> None:
60        r"""Initialize ElectronJointDensityOfStates object.
61
62        Args:
63            energies: Photon energies [$\mathrm{eV}$].
64            values: Electron joint density of states values
65                [$\mathrm{eV^{-1}}$].
66            d_energy: Target photon energy increment [$\mathrm{eV}$].
67
68        Raises:
69            ValueError: If there are negative values.
70        """
71        if np.less(values, 0.0).any():
72            raise ValueError("Negative values!")
73        super().__init__(energies, values, d_energy=d_energy)

Initialize ElectronJointDensityOfStates object.

Arguments:
  • energies: Photon energies [$\mathrm{eV}$].
  • values: Electron joint density of states values [$\mathrm{eV^{-1}}$].
  • d_energy: Target photon energy increment [$\mathrm{eV}$].
Raises:
  • ValueError: If there are negative values.
def calc_sp_absorb( self, *, ejdos_rth: numbers.Real = 1.0, energy_co: numbers.Real | None = None) -> madman.analysis.absorbance.SpectralAbsorbance:
 75    def calc_sp_absorb(
 76        self, *, ejdos_rth: Real = 1.0, energy_co: Real | None = None
 77    ) -> SpectralAbsorbance:
 78        r"""Calculate spectral absorbance.
 79
 80        Note:
 81            By assuming that:
 82
 83            1. the optical transition matrix element is constant;
 84            2. there are enough phonons to enable indirect optical transitions;
 85
 86            the optical absorption coefficient $\alpha$ may be approximated as:
 87
 88            $$
 89            \alpha(\hbar \, \omega) \propto J(\hbar \, \omega)
 90            $$
 91
 92            where $J$ is the electron joint density of states and
 93            $\hbar \, \omega$ is the photon energy (see
 94            [O'Leary et al. (1997)](https://doi.org/10.1063/1.365643)
 95            for details).
 96
 97            By additionally assuming:
 98
 99            1. negligible reflectance $R$;
100            2. sample thickness $l$ much larger than coherence length;
101
102            the spectral absorbance $A$ may be approximated according to
103            Beer-Lambert's law as:
104
105            $$
106            A(\hbar \, \omega) = 1 - R(\hbar \, \omega) - T(\hbar \, \omega) = 1 - \exp {\alpha(\hbar \, \omega) \, l}
107            $$
108
109            (see
110            [Fox (2010)](https://global.oup.com/academic/product/optical-properties-of-solids-9780199573370?q=978-0-19-957337-0&cc=it&lang=en)).
111
112            Then, the optical absorption coefficient is known at less than a
113            multiplicative factor, which can be incorporated into $l$, and it
114            makes sense to write:
115
116            $$
117            \alpha(\hbar \, \omega) \, l = \frac{3 \, J(\hbar \, \omega)}{\bar{J}_\text{th} \, \max{J(\hbar \, \omega)}}
118            $$
119
120            where $\bar{J}_\text{th}$ is the electron joint density of states
121            threshold relative to the electron joint density of states maximum
122            above which 95% of radiation is absorbed.
123
124        Args:
125            ejdos_rth: Electron joint density of states threshold relative to
126                the electron joint density of states maximum above which 95% of
127                radiation is absorbed.
128            energy_co: Photon energy cutoff above which absorbance is neglected.
129        """
130        if energy_co is None:
131            mask = self.energies >= 0.0
132        else:
133            mask = np.logical_and(
134                self.energies >= 0.0, self.energies <= energy_co
135            )
136        ejdos_max = np.amax(self.values)
137        norm_values = 3 * self.values / (ejdos_rth * ejdos_max)
138        sp_absorb_values = 1.0 - np.exp(-norm_values)
139        return SpectralAbsorbance(self.energies[mask], sp_absorb_values[mask])

Calculate spectral absorbance.

Note:

By assuming that:

  1. the optical transition matrix element is constant;
  2. there are enough phonons to enable indirect optical transitions;

the optical absorption coefficient $\alpha$ may be approximated as:

$$ \alpha(\hbar \, \omega) \propto J(\hbar \, \omega) $$

where $J$ is the electron joint density of states and $\hbar \, \omega$ is the photon energy (see O'Leary et al. (1997) for details).

By additionally assuming:

  1. negligible reflectance $R$;
  2. sample thickness $l$ much larger than coherence length;

the spectral absorbance $A$ may be approximated according to Beer-Lambert's law as:

$$ A(\hbar \, \omega) = 1 - R(\hbar \, \omega) - T(\hbar \, \omega) = 1 - \exp {\alpha(\hbar \, \omega) \, l} $$

(see Fox (2010)).

Then, the optical absorption coefficient is known at less than a multiplicative factor, which can be incorporated into $l$, and it makes sense to write:

$$ \alpha(\hbar \, \omega) \, l = \frac{3 \, J(\hbar \, \omega)}{\bar{J}_\text{th} \, \max{J(\hbar \, \omega)}} $$

where $\bar{J}_\text{th}$ is the electron joint density of states threshold relative to the electron joint density of states maximum above which 95% of radiation is absorbed.

Arguments:
  • ejdos_rth: Electron joint density of states threshold relative to the electron joint density of states maximum above which 95% of radiation is absorbed.
  • energy_co: Photon energy cutoff above which absorbance is neglected.
class ResolvedElectronJointDensityOfStatesMeta(madman.analysis.spectrum.ResolvedEnergySpectrumMeta):
142class ResolvedElectronJointDensityOfStatesMeta(ResolvedEnergySpectrumMeta):
143    r"""Metaclass of ResolvedElectronJointDensityOfStates."""
144
145    @property
146    def rsv_sp_absorb(cls) -> Type:
147        r"""Associated resolved spectral absorbance class."""
148        module = madman.analysis.absorbance
149        name = cls.__name__.replace(
150            "ElectronJointDensityOfStates", "SpectralAbsorbance"
151        )
152        return getattr(module, name)

Metaclass of ResolvedElectronJointDensityOfStates.

rsv_sp_absorb: Type
145    @property
146    def rsv_sp_absorb(cls) -> Type:
147        r"""Associated resolved spectral absorbance class."""
148        module = madman.analysis.absorbance
149        name = cls.__name__.replace(
150            "ElectronJointDensityOfStates", "SpectralAbsorbance"
151        )
152        return getattr(module, name)

Associated resolved spectral absorbance class.

Inherited Members
builtins.type
type
mro
madman.analysis.spectrum.ResolvedEnergySpectrumMeta
total
class ResolvedElectronJointDensityOfStates(madman.analysis.spectrum.PairResolvedEnergySpectrum):
155class ResolvedElectronJointDensityOfStates(
156    PairResolvedEnergySpectrum,
157    metaclass=ResolvedElectronJointDensityOfStatesMeta,
158):
159    r"""Resolved electron joint density of states.
160
161    Note:
162        `energies`: Photon energies [$\mathrm{eV}$].
163        `rsv_values`: Resolved electron joint density of states values
164            [$\mathrm{eV^{-1}}$].
165    """
166
167    def calc_rsv_sp_absorb(
168        self, *, ejdos_rth: Real = 1.0, energy_co: Real | None = None
169    ) -> ResolvedSpectralAbsorbance:
170        r"""Calculate resolved spectral absorbance.
171
172        Note:
173            See
174            `madman.analysis.ejdos.ElectronJointDensityOfStates.ret_sp_absorb`
175            for details.
176
177        Args:
178            ejdos_rth: Electron joint density of states threshold relative to
179                the electron joint density of states maximum above which 95% of
180                radiation is absorbed.
181            energy_co: Photon energy cutoff above which absorbance is neglected.
182
183        Returns:
184            Resolved spectral absorbance.
185        """
186        if energy_co is None:
187            mask = self.energies >= 0.0
188        else:
189            mask = np.logical_and(
190                self.energies >= 0.0, self.energies <= energy_co
191            )
192        energies = self.energies[mask]
193
194        ejdos_tot = self.total
195        ejdos_tot_values = ejdos_tot.values[mask]
196
197        sp_absorb_tot = ejdos_tot.calc_sp_absorb(
198            ejdos_rth=ejdos_rth, energy_co=energy_co
199        )
200        sp_absorb_tot_values = sp_absorb_tot.values
201
202        rsv_sp_absorb_values = {}
203        for feat, values in self.rsv_values.items():
204            values = values[mask]
205            rsv_sp_absorb_values[feat] = np.zeros_like(values, dtype=float)
206            for i, value in enumerate(values):
207                if ejdos_tot_values[i] != 0.0:
208                    rsv_sp_absorb_values[feat][i] = (
209                        value / ejdos_tot_values[i] * sp_absorb_tot_values[i]
210                    )
211        return type(self).rsv_sp_absorb(energies, rsv_sp_absorb_values)

Resolved electron joint density of states.

Note:

energies: Photon energies [$\mathrm{eV}$]. rsv_values: Resolved electron joint density of states values [$\mathrm{eV^{-1}}$].

def calc_rsv_sp_absorb( self, *, ejdos_rth: numbers.Real = 1.0, energy_co: numbers.Real | None = None) -> madman.analysis.absorbance.ResolvedSpectralAbsorbance:
167    def calc_rsv_sp_absorb(
168        self, *, ejdos_rth: Real = 1.0, energy_co: Real | None = None
169    ) -> ResolvedSpectralAbsorbance:
170        r"""Calculate resolved spectral absorbance.
171
172        Note:
173            See
174            `madman.analysis.ejdos.ElectronJointDensityOfStates.ret_sp_absorb`
175            for details.
176
177        Args:
178            ejdos_rth: Electron joint density of states threshold relative to
179                the electron joint density of states maximum above which 95% of
180                radiation is absorbed.
181            energy_co: Photon energy cutoff above which absorbance is neglected.
182
183        Returns:
184            Resolved spectral absorbance.
185        """
186        if energy_co is None:
187            mask = self.energies >= 0.0
188        else:
189            mask = np.logical_and(
190                self.energies >= 0.0, self.energies <= energy_co
191            )
192        energies = self.energies[mask]
193
194        ejdos_tot = self.total
195        ejdos_tot_values = ejdos_tot.values[mask]
196
197        sp_absorb_tot = ejdos_tot.calc_sp_absorb(
198            ejdos_rth=ejdos_rth, energy_co=energy_co
199        )
200        sp_absorb_tot_values = sp_absorb_tot.values
201
202        rsv_sp_absorb_values = {}
203        for feat, values in self.rsv_values.items():
204            values = values[mask]
205            rsv_sp_absorb_values[feat] = np.zeros_like(values, dtype=float)
206            for i, value in enumerate(values):
207                if ejdos_tot_values[i] != 0.0:
208                    rsv_sp_absorb_values[feat][i] = (
209                        value / ejdos_tot_values[i] * sp_absorb_tot_values[i]
210                    )
211        return type(self).rsv_sp_absorb(energies, rsv_sp_absorb_values)

Calculate resolved spectral absorbance.

Note:

See madman.analysis.ejdos.ElectronJointDensityOfStates.ret_sp_absorb for details.

Arguments:
  • ejdos_rth: Electron joint density of states threshold relative to the electron joint density of states maximum above which 95% of radiation is absorbed.
  • energy_co: Photon energy cutoff above which absorbance is neglected.
Returns:

Resolved spectral absorbance.

class BandResolvedElectronJointDensityOfStates(madman.analysis.spectrum.BandPairResolvedEnergySpectrum, ResolvedElectronJointDensityOfStates):
214class BandResolvedElectronJointDensityOfStates(
215    BandPairResolvedEnergySpectrum, ResolvedElectronJointDensityOfStates
216):
217    r"""Band resolved electron joint density of states.
218
219    Note:
220        `energies`: Photon energies [$\mathrm{eV}$].
221        `rsv_values`: Band resolved electron joint density of states values
222            [$\mathrm{eV^{-1}}$].
223
224    Note:
225        See `madman.analysis.spectrum.BandResolvedEnergySpectrum` for details.
226    """

Band resolved electron joint density of states.

Note:

energies: Photon energies [$\mathrm{eV}$]. rsv_values: Band resolved electron joint density of states values [$\mathrm{eV^{-1}}$].

Note:

See madman.analysis.spectrum.BandResolvedEnergySpectrum for details.

class CellResolvedElectronJointDensityOfStates(madman.analysis.spectrum.CellPairResolvedEnergySpectrum, ResolvedElectronJointDensityOfStates):
229class CellResolvedElectronJointDensityOfStates(
230    CellPairResolvedEnergySpectrum, ResolvedElectronJointDensityOfStates
231):
232    r"""Cell resolved electron joint density of states.
233
234    Note:
235        `energies`: Photon energies [$\mathrm{eV}$].
236        `rsv_values`: Cell resolved electron joint density of states values
237            [$\mathrm{eV^{-1}}$].
238
239    Note:
240        See `madman.analysis.spectrum.CellResolvedEnergySpectrum` for details.
241    """

Cell resolved electron joint density of states.

Note:

energies: Photon energies [$\mathrm{eV}$]. rsv_values: Cell resolved electron joint density of states values [$\mathrm{eV^{-1}}$].

Note:

See madman.analysis.spectrum.CellResolvedEnergySpectrum for details.