Garfield 0.3
Toolkit for the detailed simulation of particle detectors based on ionization measurement in gases and semiconductors
Loading...
Searching...
No Matches
TrackPAI.hh
Go to the documentation of this file.
1#ifndef G_TRACK_PAI
2#define G_TRACK_PAI
3
4#include <array>
5#include <string>
6#include <vector>
7
8#include "Garfield/Track.hh"
9
10namespace Garfield {
11
13class Medium;
14class TrackPAI : public Track {
15 public:
16 struct Cluster {
17 double x, y, z, t;
18 double energy;
19 };
20
21 // Constructor
23 // Destructor
24 virtual ~TrackPAI() {}
25
26 bool NewTrack(const double x0, const double y0, const double z0,
27 const double t0, const double dx0, const double dy0,
28 const double dz0) override;
29
30 const std::vector<Cluster>& GetClusters() const { return m_clusters; }
31
32 double GetClusterDensity() override;
33 double GetStoppingPower() override;
34
35 private:
36 // Particle speed.
37 double m_speed = 0.;
38 // Max. energy transfer in a collision
39 double m_emax = 0.;
40
41 // Total inelastic mean free path
42 double m_imfp = 0.;
43 // Stopping power
44 double m_dedx = 0.;
45
46 // Dielectric function
47 static constexpr size_t m_nSteps = 1000;
48 std::array<double, m_nSteps> m_eps1;
49 std::array<double, m_nSteps> m_eps2;
50 std::array<double, m_nSteps> m_epsInt;
51
52 // Tables for interpolation of cumulative distribution functions
53 std::array<double, m_nSteps> m_energies;
54 std::array<double, m_nSteps> m_cdf;
55 std::array<double, m_nSteps> m_rutherford;
56
57 std::vector<Cluster> m_clusters;
58
59 // Medium properties
60 std::string m_mediumName = "";
61 double m_mediumDensity = 0.;
62 double m_electronDensity = 0.;
63
64 bool SetupMedium(Medium* medium);
66
67 double ComputeMaxTransfer() const;
68
69 double ComputeCsTail(const double emin, const double emax);
70 double ComputeDeDxTail(const double emin, const double emax);
71
72 std::pair<double, double> SampleEnergyDeposit(const double u) const;
73 double SampleAsymptoticCs(double u) const;
74 double SampleAsymptoticCsSpinZero(const double emin, double u) const;
75 double SampleAsymptoticCsSpinHalf(const double emin, double u) const;
76 double SampleAsymptoticCsSpinOne(const double emin, double u) const;
77 double SampleAsymptoticCsElectron(const double emin, double u) const;
78 double SampleAsymptoticCsPositron(const double emin, double u) const;
79
80 double LossFunction(const double eps1, const double eps2) const {
81 const double eps = eps1 * eps1 + eps2 * eps2;
82 return eps > 0. ? eps2 / eps : 0.;
83 }
84};
85} // namespace Garfield
86
87#endif
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,...
double SampleAsymptoticCsPositron(const double emin, double u) const
std::array< double, m_nSteps > m_cdf
Definition TrackPAI.hh:54
double ComputeCsTail(const double emin, const double emax)
static constexpr size_t m_nSteps
Definition TrackPAI.hh:47
double GetClusterDensity() override
Get the cluster density (number of ionizing collisions per cm or inverse mean free path for ionizatio...
bool SetupMedium(Medium *medium)
std::array< double, m_nSteps > m_epsInt
Definition TrackPAI.hh:50
std::array< double, m_nSteps > m_eps2
Definition TrackPAI.hh:49
std::array< double, m_nSteps > m_energies
Definition TrackPAI.hh:53
std::vector< Cluster > m_clusters
Definition TrackPAI.hh:57
std::pair< double, double > SampleEnergyDeposit(const double u) const
double GetStoppingPower() override
Get the stopping power (mean energy loss [eV] per cm).
std::array< double, m_nSteps > m_eps1
Definition TrackPAI.hh:48
double ComputeDeDxTail(const double emin, const double emax)
double SampleAsymptoticCs(double u) const
double SampleAsymptoticCsSpinHalf(const double emin, double u) const
bool SetupCrossSectionTable()
double SampleAsymptoticCsElectron(const double emin, double u) const
double SampleAsymptoticCsSpinZero(const double emin, double u) const
std::array< double, m_nSteps > m_rutherford
Definition TrackPAI.hh:55
const std::vector< Cluster > & GetClusters() const
Definition TrackPAI.hh:30
virtual ~TrackPAI()
Definition TrackPAI.hh:24
double m_mediumDensity
Definition TrackPAI.hh:61
double SampleAsymptoticCsSpinOne(const double emin, double u) const
double m_electronDensity
Definition TrackPAI.hh:62
double ComputeMaxTransfer() const
std::string m_mediumName
Definition TrackPAI.hh:60
double LossFunction(const double eps1, const double eps2) const
Definition TrackPAI.hh:80
Track()=delete
Default constructor.