25 bool NewTrack(
const double x0,
const double y0,
const double z0,
26 const double t0,
const double dx0,
const double dy0,
27 const double dz0)
override;
29 bool GetCluster(
double& xc,
double& yc,
double& zc,
double& tc,
int& nc,
30 double& ec,
double& extra)
override;
31 const std::vector<Cluster>&
GetClusters()
const {
return m_clusters; }
48 static constexpr size_t m_nSteps = 1000;
49 std::array<double, m_nSteps> m_eps1;
50 std::array<double, m_nSteps> m_eps2;
51 std::array<double, m_nSteps> m_epsInt;
54 std::array<double, m_nSteps> m_energies;
55 std::array<double, m_nSteps> m_cdf;
56 std::array<double, m_nSteps> m_rutherford;
58 std::vector<Cluster> m_clusters;
62 std::string m_mediumName =
"";
63 double m_mediumDensity = 0.;
64 double m_electronDensity = 0.;
66 bool SetupMedium(
Medium* medium);
67 bool SetupCrossSectionTable();
69 double ComputeMaxTransfer()
const;
71 double ComputeCsTail(
const double emin,
const double emax);
72 double ComputeDeDxTail(
const double emin,
const double emax);
74 std::pair<double, double> SampleEnergyDeposit(
const double u)
const;
75 double SampleAsymptoticCs(
double u)
const;
76 double SampleAsymptoticCsSpinZero(
const double emin,
double u)
const;
77 double SampleAsymptoticCsSpinHalf(
const double emin,
double u)
const;
78 double SampleAsymptoticCsSpinOne(
const double emin,
double u)
const;
79 double SampleAsymptoticCsElectron(
const double emin,
double u)
const;
80 double SampleAsymptoticCsPositron(
const double emin,
double u)
const;
82 double LossFunction(
const double eps1,
const double eps2)
const {
83 const double eps = eps1 * eps1 + eps2 * eps2;
84 return eps > 0. ? eps2 / eps : 0.;
bool NewTrack(const double x0, const double y0, const double z0, const double t0, const double dx0, const double dy0, const double dz0) override
bool GetCluster(double &xc, double &yc, double &zc, double &tc, int &nc, double &ec, double &extra) override