Program Listing for File Redshift.cpp
↰ Return to documentation for file (src/module/Redshift.cpp
)
#include "crpropa/module/Redshift.h"
#include "crpropa/Units.h"
#include "crpropa/Cosmology.h"
#include <limits>
namespace crpropa {
void Redshift::process(Candidate *c) const {
double z = c->getRedshift();
// check if z = 0
if (z <= std::numeric_limits<double>::min())
return;
// use small step approximation: dz = H(z) / c * ds
double dz = hubbleRate(z) / c_light * c->getCurrentStep();
// prevent dz > z
dz = std::min(dz, z);
// update redshift
c->setRedshift(z - dz);
// adiabatic energy loss: dE / dz = E / (1 + z)
double E = c->current.getEnergy();
c->current.setEnergy(E * (1 - dz / (1 + z)));
}
std::string Redshift::getDescription() const {
std::stringstream s;
s << "Redshift: h0 = " << hubbleRate() / 1e5 * Mpc << ", omegaL = "
<< omegaL() << ", omegaM = " << omegaM();
return s.str();
}
void FutureRedshift::process(Candidate *c) const {
double z = c->getRedshift();
// check if z = -1
if (z <= -1)
return;
// use small step approximation: dz = H(z) / c * ds
double dz = hubbleRate(z) / c_light * c->getCurrentStep();
// update redshift
c->setRedshift(z - dz);
// adiabatic energy loss: dE / dz = E / (1 + z)
double E = c->current.getEnergy();
c->current.setEnergy(E * (1 - dz / (1 + z)));
}
std::string FutureRedshift::getDescription() const {
std::stringstream s;
s << "FutureRedshift: h0 = " << hubbleRate() / 1e5 * Mpc << ", omegaL = "
<< omegaL() << ", omegaM = " << omegaM();
return s.str();
}
} // namespace crpropa