13class HeedCondElectron;
20class ElElasticScatLowSigma;
22class HeedDeltaElectronCS;
64 std::vector<Electron>
ions;
74 bool NewTrack(
const double x0,
const double y0,
const double z0,
75 const double t0,
const double dx0,
const double dy0,
76 const double dz0)
override;
79 bool GetCluster(
double& xc,
double& yc,
double& zc,
double& tc,
int& nc,
80 double& ec,
double& extra);
81 bool GetCluster(
double& xc,
double& yc,
double& zc,
double& tc,
int& ne,
82 int& ni,
double& ec,
double& extra);
92 bool GetCluster(
double& xc,
double& yc,
double& zc,
double& tc,
int& ne,
93 int& ni,
int& np,
double& ec,
double& extra);
102 bool GetElectron(
const unsigned int i,
double& x,
double& y,
double& z,
103 double& t,
double& e,
double& dx,
double& dy,
double& dz);
109 bool GetIon(
const unsigned int i,
double& x,
double& y,
double& z,
119 bool GetPhoton(
const unsigned int i,
double& x,
double& y,
double& z,
120 double& t,
double& e,
double& dx,
double& dy,
142 const double z0,
const double t0,
143 const double e0,
const double dx0,
144 const double dy0,
const double dz0);
154 const double t0,
const double e0,
155 const double dx0,
const double dy0,
156 const double dz0,
int& ne,
int& ni);
165 const double t0,
const double e0,
166 const double dx0,
const double dy0,
167 const double dz0,
int& ne);
176 const double t0,
const double e0,
const double dx0,
177 const double dy0,
const double dz0);
189 const double t0,
const double e0,
const double dx0,
190 const double dy0,
const double dz0,
int& ne,
int& ni,
202 const double t0,
const double e0,
const double dx0,
203 const double dy0,
const double dz0,
int& ne,
int& ni);
212 const double t0,
const double e0,
const double dx0,
213 const double dy0,
const double dz0,
int& ne);
235 const double stepAngleStraight,
236 const double stepAngleCurved) {
243 double& stepAngleStraight,
double& stepAngleCurved) {
308 std::unique_ptr<Heed::GasDef>
m_gas;
346 std::vector<Cluster>& clusters);
348 const std::vector<Heed::HeedCondElectron>& conductionElectrons,
349 std::vector<Electron>& electrons);
350 bool IsInside(
const double x,
const double y,
const double z);
void EnableMagneticField()
Take the magnetic field into account in the stepping algorithm.
void SetEnergyMesh(const double e0, const double e1, const int nsteps)
Specify the energy mesh to be used.
void EnablePhotonReabsorption(const bool on=true)
Simulate (or not) the photons produced in the atomic relaxation cascade.
std::unique_ptr< Heed::EnergyMesh > m_energyMesh
void EnablePhotoAbsorptionCrossSectionOutput(const bool on)
Write the photoabsorption cross-sections used to a text file.
std::unique_ptr< Heed::ElElasticScatLowSigma > m_lowSigma
void EnableElectricField()
Take the electric field into account in the stepping algorithm.
bool GetCluster(double &xc, double &yc, double &zc, double &tc, int &ne, int &ni, double &ec, double &extra)
double m_stepAngleCurved
Angular step for curved lines.
bool SetupGas(Medium *medium)
void AddElectrons(const std::vector< Heed::HeedCondElectron > &conductionElectrons, std::vector< Electron > &electrons)
void DisableMagneticField()
Do not take the magnetic field into account in the stepping algorithm.
std::unique_ptr< Heed::HeedDeltaElectronCS > m_deltaCs
double GetPhotoAbsorptionCrossSection(const double e) const
Return the photoabsorption cross-section at a given energy.
void EnableOneStepFly(const bool on)
bool IsInside(const double x, const double y, const double z)
Cluster TransportDeltaElectron(const double x0, const double y0, const double z0, const double t0, const double e0, const double dx0, const double dy0, const double dz0)
Simulate a delta electron.
bool UpdateBoundingBox(bool &update)
std::unique_ptr< Heed::GasDef > m_gas
bool GetCluster(double &xc, double &yc, double &zc, double &tc, int &ne, int &ni, int &np, double &ec, double &extra)
Get the next "cluster" (ionising collision of the charged particle).
std::unique_ptr< HeedFieldMap > m_fieldMap
bool SetupDelta(const std::string &databasePath)
void CrossInactiveMedia(const bool on=true)
void TransportDeltaElectron(const double x0, const double y0, const double z0, const double t0, const double e0, const double dx0, const double dy0, const double dz0, int &ne, int &ni)
Simulate a delta electron.
bool m_doPhotonReabsorption
void DisableDeltaElectronTransport()
Switch simulation of delta electrons off.
double GetFanoFactor() const
Return the Fano factor of the medium (of the last simulated track).
std::unique_ptr< Heed::PairProd > m_pairProd
bool m_crossInactiveMedia
void EnableCoulombScattering(const bool on=true)
bool GetPhoton(const unsigned int i, double &x, double &y, double &z, double &t, double &e, double &dx, double &dy, double &dz) const
Retrieve the properties of an unabsorbed photon.
bool GetCluster(double &xc, double &yc, double &zc, double &tc, int &nc, double &ec, double &extra)
TrackHeed & operator=(const TrackHeed &heed)
bool NewTrack(const double x0, const double y0, const double z0, const double t0, const double dx0, const double dy0, const double dz0) override
Calculate a new track starting from (x0, y0, z0) at time t0 in direction (dx0, dy0,...
bool Initialise(Medium *medium, const bool verbose=false)
Compute the differential cross-section for a given medium.
std::unique_ptr< Heed::particle_def > m_particle_def
void SetSteppingLimits(const double maxStep, const double radStraight, const double stepAngleStraight, const double stepAngleCurved)
Set parameters for calculating the particle trajectory.
double m_stepAngleStraight
Angular step for curved trajectories approximated by straight-line steps.
void EnableDeltaElectronTransport()
Switch simulation of delta electrons on.
bool GetElectron(const unsigned int i, double &x, double &y, double &z, double &t, double &e, double &dx, double &dy, double &dz)
Retrieve the properties of a conduction or delta electron in the current cluster.
std::unique_ptr< HeedChamber > m_chamber
void TransportDeltaElectron(const double x0, const double y0, const double z0, const double t0, const double e0, const double dx0, const double dy0, const double dz0, int &ne)
Simulate a delta electron.
void TransportPhoton(const double x0, const double y0, const double z0, const double t0, const double e0, const double dx0, const double dy0, const double dz0, int &ne, int &ni)
Simulate a photon.
std::vector< Cluster > m_clusters
bool GetIon(const unsigned int i, double &x, double &y, double &z, double &t) const
Retrieve the properties of an ion in the current cluster.
unsigned int m_nEnergyIntervals
std::unique_ptr< Heed::MatterDef > m_material
const std::vector< Cluster > & GetClusters() const
double m_maxStep
Max. step length.
Cluster TransportPhoton(const double x0, const double y0, const double z0, const double t0, const double e0, const double dx0, const double dy0, const double dz0)
Simulate a photon.
TrackHeed()
Default constructor.
double m_radStraight
Bending radius beyond which to use straight-line approximation.
void TransportPhoton(const double x0, const double y0, const double z0, const double t0, const double e0, const double dx0, const double dy0, const double dz0, int &ne, int &ni, int &np)
Simulate a photon.
double GetW() const
Return the W value of the medium (of the last simulated track).
TrackHeed(const TrackHeed &heed)
bool SetupMaterial(Medium *medium)
TrackHeed(Sensor *sensor)
Constructor.
void SetParticleUser(const double m, const double z)
Define particle mass and charge (for exotic particles).
void TransportPhoton(const double x0, const double y0, const double z0, const double t0, const double e0, const double dx0, const double dy0, const double dz0, int &ne)
Simulate a photon.
std::unique_ptr< Heed::EnTransfCS > m_transferCs
double GetClusterDensity() override
Get the cluster density (number of ionizing collisions per cm or inverse mean free path for ionizatio...
bool AddCluster(Heed::HeedPhoton *virtualPhoton, std::vector< Cluster > &clusters)
void DisableElectricField()
Do not take the electric field into account in the stepping algorithm.
virtual ~TrackHeed()
Destructor.
std::unique_ptr< Heed::ElElasticScat > m_elScat
void GetSteppingLimits(double &maxStep, double &radStraight, double &stepAngleStraight, double &stepAngleCurved)
double GetStoppingPower() override
Get the stopping power (mean energy loss [eV] per cm).
std::unique_ptr< Heed::HeedMatterDef > m_matter
Track()=delete
Default constructor.
std::vector< Electron > ions
std::vector< Photon > photons
std::vector< Electron > electrons