ATLAS Offline Software
Loading...
Searching...
No Matches
EnergyLoss.icc
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
5namespace Trk {
6inline EnergyLoss::EnergyLoss(double deltaE,
7 double sigmaDeltaE,
8 double sMinusDeltaE,
9 double sPlusDeltaE)
10 : m_deltaE(deltaE)
11 , m_sigmaDeltaE(sigmaDeltaE)
12 , m_sigmaMinusDeltaE(sMinusDeltaE > 0.0 ? sMinusDeltaE : sigmaDeltaE)
13 , m_sigmaPlusDeltaE(sPlusDeltaE > 0.0 ? sPlusDeltaE : sigmaDeltaE)
14 , m_mean_ioni(0.)
15 , m_sig_ioni(0.)
16 , m_mean_rad(0.)
17 , m_sig_rad(0.)
18 , m_length(-std::numeric_limits<double>::min())
19{
20}
21
22inline EnergyLoss::EnergyLoss(double deltaE,
23 double sigmaDeltaE,
24 double sMinusDeltaE,
25 double sPlusDeltaE,
26 double mean_ioni,
27 double sig_ioni,
28 double mean_rad,
29 double sig_rad,
30 double length)
31 : m_deltaE(deltaE)
32 , m_sigmaDeltaE(sigmaDeltaE)
33 , m_sigmaMinusDeltaE(sMinusDeltaE)
34 , m_sigmaPlusDeltaE(sPlusDeltaE)
35 , m_mean_ioni(mean_ioni)
36 , m_sig_ioni(sig_ioni)
37 , m_mean_rad(mean_rad)
38 , m_sig_rad(sig_rad)
39 , m_length(length)
40{
41}
42
43inline EnergyLoss::EnergyLoss(double deltaE,
44 double sigmaDeltaE,
45 double mean_ioni,
46 double sig_ioni,
47 double mean_rad,
48 double sig_rad)
49 : m_deltaE(deltaE)
50 , m_sigmaDeltaE(sigmaDeltaE)
51 , m_sigmaMinusDeltaE(0.)
52 , m_sigmaPlusDeltaE(0.)
53 , m_mean_ioni(mean_ioni)
54 , m_sig_ioni(sig_ioni)
55 , m_mean_rad(mean_rad)
56 , m_sig_rad(sig_rad)
57 , m_length(-std::numeric_limits<double>::min())
58{
59}
60
61inline EnergyLoss*
62EnergyLoss::clone() const
63{
64 return new EnergyLoss(*this);
65}
66
67inline double
68EnergyLoss::deltaE() const
69{
70 return m_deltaE;
71}
72
73inline double
74EnergyLoss::sigmaDeltaE() const
75{
76 return m_sigmaDeltaE;
77}
78
79inline double
80EnergyLoss::sigmaMinusDeltaE() const
81{
82 return m_sigmaMinusDeltaE;
83}
84
85inline double
86EnergyLoss::sigmaPlusDeltaE() const
87{
88 return m_sigmaPlusDeltaE;
89}
90
91inline double
92EnergyLoss::meanIoni() const
93{
94 return m_mean_ioni;
95}
96
97inline double
98EnergyLoss::sigmaIoni() const
99{
100 return m_sig_ioni;
101}
102
103inline double
104EnergyLoss::meanRad() const
105{
106 return m_mean_rad;
107}
108
109inline double
110EnergyLoss::sigmaRad() const
111{
112 return m_sig_rad;
113}
114
115inline double
116EnergyLoss::length() const
117{
118 return m_length;
119} // length can be positive and negative like Eloss depending on (back)tracking
120
121inline void
122EnergyLoss::update(double ioni, double sigi, double rad, double sigr, bool mpv)
123{
124 m_mean_ioni += ioni;
125 m_mean_rad += rad;
126 m_sig_ioni += sigi;
127 m_sig_rad += sigr;
128 m_deltaE += mpv ? 0.9 * ioni + 0.15 * rad : ioni + rad;
129 m_sigmaDeltaE = std::sqrt(m_sig_ioni * m_sig_ioni + m_sig_rad * m_sig_rad);
130}
131
132inline void
133EnergyLoss::update(const EnergyLoss& eloss, bool mpv)
134{
135 m_mean_ioni += eloss.meanIoni();
136 m_mean_rad += eloss.meanRad();
137 m_sig_ioni += eloss.sigmaIoni();
138 m_sig_rad += eloss.sigmaRad();
139 m_deltaE += mpv ? 0.9 * eloss.meanIoni() + 0.15 * eloss.meanRad()
140 : eloss.meanIoni() + eloss.meanRad();
141 m_sigmaDeltaE = std::sqrt(m_sig_ioni * m_sig_ioni + m_sig_rad * m_sig_rad);
142}
143
144inline void
145EnergyLoss::set(double eloss,
146 double sigde,
147 double ioni,
148 double sigi,
149 double rad,
150 double sigr)
151{
152 m_mean_ioni = ioni;
153 m_mean_rad = rad;
154 m_sig_ioni = sigi;
155 m_sig_rad = sigr;
156 m_deltaE = ioni + rad + 0 * eloss;
157 m_sigmaDeltaE = std::sqrt(m_sig_ioni * m_sig_ioni + m_sig_rad * m_sig_rad +
158 0 * sigde * sigde);
159}
160
161}