Implemented Models
Medium
HomoEarth
-
template<typename Vector3 = Vector3d<double>, typename Value = double>
class HomoEarth : public darkprop::Earth<Vector3d<double>, double> A homogeneous Earth model composed of 8 components.
Public Functions
-
virtual Value propagate(Particle<Vector3, Value> &particle, RandomNumber<Value> &rn) override
Propagate a particle.
Sample a free path and propagate the particle and determine whether the particle is in the Medium or not. Set
Particle::in_medium
to false if the simulation should stop.
-
virtual Value propagate(Particle<Vector3, Value> &particle, RandomNumber<Value> &rn) override
PREMEarth
-
template<typename Vector3 = Vector3d<double>, typename Value = double>
class PREMEarth : public darkprop::Earth<Vector3d<double>, double> Preliminary reference Earth model (PREM).
Public Functions
-
virtual Value propagate(Particle<Vector3, Value> &particle, RandomNumber<Value> &rn) override
Propagate a particle.
Sample a free path and propagate the particle and determine whether the particle is in the Medium or not. Set
Particle::in_medium
to false if the simulation should stop.
-
virtual Value propagate(Particle<Vector3, Value> &particle, RandomNumber<Value> &rn) override
HomoElectronEarth
-
template<typename Vector3 = Vector3d<double>, typename Value = double>
class HomoElectronEarth : public darkprop::Earth<Vector3d<double>, double> Public Functions
-
inline virtual Value propagate(Particle<Vector3, Value> &p, RandomNumber<Value> &rn) override
Propagate a particle.
Sample a free path and propagate the particle and determine whether the particle is in the Medium or not. Set
Particle::in_medium
to false if the simulation should stop.
-
inline virtual Value propagate(Particle<Vector3, Value> &p, RandomNumber<Value> &rn) override
Sun
-
template<typename Vector3 = Vector3d<double>, typename Value = double>
class Sun : public darkprop::MediumBall<Vector3d<double>, double> A Sun model.
Currently, the Sun only works with SolarDM which has constant cross section.
Public Functions
-
void init(const std::string &filename)
Load the tabular normalized number density integral function.
-
Value densityIntegral(Value y)
For certain
y
, the maximal value of the integrated number density, i.e.the value of integrated number density at \( x=\sqrt{1-y^2} \). unit: cm^-3. Same as number density.
y
ranges in [0,1].
-
inline Value densityIntegralInverseNormalized(Value y, Value z)
The inverse of the normalized density integral.
-
virtual Value propagate(Particle<Vector3, Value> &particle, RandomNumber<Value> &rn) override
Propagate a particle.
Sample a free path and propagate the particle and determine whether the particle is in the Medium or not. Set
Particle::in_medium
to false if the simulation should stop.
-
void init(const std::string &filename)
This Sun model is implemented only working with the SolarDM model which assumes constant cross section and only couples to proton, and includes only proton and \({}^4\rm He\). So the free path equation (Eq. (8)) can be written as
where \(\sigma_{\chi p}\) is DM-proton scattering cross section, \(n_p\) (\(n_{\rm He}\)) is the number density of proton (\({}^4\rm He\)), and \(1 - \xi\) is replaced with \(\xi\) since they have the same distribution. Note that the factor of 4 comes from coherent scattering. Using the reasonable approximation that the density of the Sun is isotropic, we use the coordinates \((x, y)\) as shown in Fig. 2.
The direction of \(x\) aligns with the velocity of the particle. The radius has been normalized to 1. So \(y\) ranges in \((0, 1)\) and \(x\) ranges in \((-\sqrt{1 - y^2}, \sqrt{1 - y^2})\). We further define the normalized density integral
Thus \(0 \leq z \leq 1\). Now suppose the particle starts at \(x_0\), Eq. (13) can be solved as follows
where \(R_\odot\) is the radius of the Sun. Then \(x\) is solved with the inverse of \(z\), \(x = x(y, z)\), and the free path is \(L = (x - x_0) R_\odot\).
Particle
SIDM
-
template<typename Vector3 = Vector3d<double>, typename Value = double>
class SIDM : public darkprop::ParticleElastic<Vector3d<double>, double> Spin independent elastic scattering DM model with constant cross section.
Subclassed by darkprop::SIFFCutDM< Vector3, Value >, darkprop::SIFFExpDM< Vector3, Value >, darkprop::SIHelmDM< Vector3, Value >, darkprop::SIHelmDiscreteDM< Vector3, Value >
Public Functions
-
inline virtual Value totalCrossSection(const Target &t) const override
Total cross section scattering with Target
t
.Use current
this->T
as initial kinetic energy. Return the statistical weight.
-
inline virtual Value scatteringSampleTr(const Target &t, RandomNumber<Value> &rn) override
Sample recoil kinetic energy of the target particle in laboratory frame.
-
inline virtual Value totalCrossSection(const Target &t) const override
SIHelmDM
-
template<typename Vector3 = Vector3d<double>, typename Value = double>
class SIHelmDM : public darkprop::SIDM<Vector3d<double>, double> Spin independent elastic scattering DM model with Helm form factor.
Public Functions
-
inline virtual Value scatteringSampleTr(const Target &t, RandomNumber<Value> &rn) override
Sample recoil kinetic energy of the target particle in laboratory frame.
-
inline virtual Value scatteringSampleTr(const Target &t, RandomNumber<Value> &rn) override
DMElectron
-
template<typename Vector3 = Vector3d<double>, typename Value = double>
class DMElectron : public darkprop::ParticleElastic<Vector3d<double>, double> A DM-electron vector coupling model.
Used to cross check for arXiv:2403.08361.
Public Functions
-
inline virtual Value totalCrossSection(const Target &t) const override
Total cross section scattering with Target
t
.Use current
this->T
as initial kinetic energy. Return the statistical weight.
-
inline virtual Value scatteringSampleTr(const Target &t, RandomNumber<Value> &rn) override
Sample recoil kinetic energy of the target particle in laboratory frame.
-
inline virtual Value totalCrossSection(const Target &t) const override
SolarDM
-
template<typename Vector3 = Vector3d<double>, typename Value = double>
class SolarDM : public darkprop::Particle<Vector3d<double>, double> The Solar DM model.
Public Functions
-
inline void setTempScale(Value t_temp_scale)
Set the temperature scaling factor multiplied to the real temperature.
This is used to adjust the temperature of the Sun.
-
inline virtual Value totalCrossSection(const Target &t) const override
Total cross section scattering with Target
t
.Use current
this->T
as initial kinetic energy. Return the statistical weight.
-
virtual Value scatter(const Target &t, RandomNumber<Value> &rn) override
Sample final state DM particle.
The changes are made directly. Return the statistical weight.
-
inline void setTempScale(Value t_temp_scale)