Garfield 0.3
Toolkit for the detailed simulation of particle detectors based on ionization measurement in gases and semiconductors
Loading...
Searching...
No Matches
TrackDegrade.hh
Go to the documentation of this file.
1#ifndef G_TRACK_DEGRADE_H
2#define G_TRACK_DEGRADE_H
3
4#include <array>
5#include <vector>
6
7#include "Garfield/Track.hh"
8
9namespace Garfield {
10class Medium;
11
13
14class TrackDegrade : public Track {
15 public:
16 struct Electron {
17 double x = 0.;
18 double y = 0.;
19 double z = 0.;
20 double t = 0.;
21 double energy = 0.;
22 double dx = 0.;
23 double dy = 0.;
24 double dz = 0.;
25 };
26
27 struct Excitation {
28 double x = 0.;
29 double y = 0.;
30 double z = 0.;
31 double t = 0.;
32 double energy = 0.;
33 };
34
35 struct Cluster {
36 double x, y, z, t;
37 std::vector<Electron> deltaElectrons;
38 std::vector<Electron> electrons;
39 std::vector<Excitation> excitations;
40 };
41
43 TrackDegrade() : TrackDegrade(nullptr) {}
45 TrackDegrade(Sensor* sensor);
47 virtual ~TrackDegrade() {}
48
49 bool NewTrack(const double x0, const double y0, const double z0,
50 const double t0, const double dx0, const double dy0,
51 const double dz0) override;
52 const std::vector<Cluster>& GetClusters() const { return m_clusters; }
53 double GetClusterDensity() override;
54 double GetStoppingPower() override;
55
56 bool Initialise(Medium* medium, const bool verbose = false);
57
59 void SetThresholdEnergy(const double eth);
61 void StoreExcitations(const bool on = true, const double thr = 4.) {
63 m_ethrExc = std::max(thr, 1.e-3);
64 }
65
66 void EnableBremsstrahlung(const bool on = true) { m_bremsStrahlung = on; }
68 void EnableFullCascade(const bool on = true) { m_fullCascade = on; }
69
70 void SetParticle(const std::string& particle) override;
71
72 protected:
73 std::vector<Cluster> m_clusters;
74
75 bool m_penning = true;
76 bool m_bremsStrahlung = true;
77 bool m_fullCascade = true;
78 bool m_storeExcitations = false;
79 // Energy threshold for storing excitations.
80 double m_ethrExc = 4.;
81 // Energy threshold for tracking electrons.
82 double m_ethr = 2.;
83
84 double m_pressure = -1.;
85 double m_temperature = -1.;
86 std::string m_mediumName = "";
87 unsigned int m_nGas = 0;
88
89 double m_dedx = -1.;
90 double m_clusterDensity = -1.;
91
92 std::array<double, 6> m_rPenning;
93 std::array<double, 6> m_dPenning;
94
95 std::pair<std::vector<Electron>, std::vector<Excitation> >
96 TransportDeltaElectron(const double x0, const double y0, const double z0,
97 const double t0, const double e0, const double dx,
98 const double dy, const double dz);
99
100 void SetupPenning(Medium* medium, std::array<double, 6>& rP,
101 std::array<double, 6>& dP);
102 bool IsInside(const double x, const double y, const double z);
103};
104} // namespace Garfield
105
106#endif
virtual ~TrackDegrade()
Destructor.
std::array< double, 6 > m_dPenning
void SetThresholdEnergy(const double eth)
Set the energy down to which electrons are tracked (default: 2 eV).
void EnableFullCascade(const bool on=true)
Enable or disable detailed simulation of the deexcitation cascade.
double GetClusterDensity() override
Get the cluster density (number of ionizing collisions per cm or inverse mean free path for ionizatio...
std::pair< std::vector< Electron >, std::vector< Excitation > > TransportDeltaElectron(const double x0, const double y0, const double z0, const double t0, const double e0, const double dx, const double dy, const double dz)
std::vector< Cluster > m_clusters
double GetStoppingPower() override
Get the stopping power (mean energy loss [eV] per cm).
TrackDegrade()
Default constructor.
void EnableBremsstrahlung(const bool on=true)
Enable or disable bremsstrahlung.
void SetupPenning(Medium *medium, std::array< double, 6 > &rP, std::array< double, 6 > &dP)
std::array< double, 6 > m_rPenning
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,...
TrackDegrade(Sensor *sensor)
Constructor.
void SetParticle(const std::string &particle) override
Set the type of charged particle.
bool IsInside(const double x, const double y, const double z)
const std::vector< Cluster > & GetClusters() const
bool Initialise(Medium *medium, const bool verbose=false)
void StoreExcitations(const bool on=true, const double thr=4.)
Store excitations in the cluster or not (off by default).
Track()=delete
Default constructor.
std::vector< Electron > electrons
std::vector< Electron > deltaElectrons
std::vector< Excitation > excitations