ATLAS Offline Software
GXFMaterialEffects.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 #include "TrkSurfaces/Surface.h"
10 
11 namespace Trk {
13  : m_sigmadeltae(0), m_surf(&meot.associatedSurface()) {
14 
15  if (meot.energyLoss() != nullptr) {
16  m_deltae = meot.energyLoss()->deltaE();
19 
20  if (meot.scatteringAngles() == nullptr) {
21  m_eloss = std::unique_ptr<EnergyLoss>(meot.energyLoss()->clone());
23  } else {
24  m_eloss = nullptr;
25  }
26  } else {
27  m_eloss = nullptr;
28  m_deltae = 0;
29  m_sigmadeltaepos = 0;
30  m_sigmadeltaeneg = 0;
31  }
32 
33  double x0 = meot.thicknessInX0();
34  const ScatteringAngles *scatangles = meot.scatteringAngles();
35 
36  if ((scatangles != nullptr) && x0 > 0) {
37  m_x0 = x0;
38  m_sintheta = scatangles->sigmaDeltaTheta() / scatangles->sigmaDeltaPhi();
39  m_scatphi = scatangles->deltaPhi();
40  m_scattheta = scatangles->deltaTheta();
41  m_sigmascatphi = scatangles->sigmaDeltaPhi();
42  m_sigmascattheta = scatangles->sigmaDeltaTheta();
43  } else {
45  }
46  }
47 
49  : m_scatphi (rhs.m_scatphi),
50  m_scattheta (rhs.m_scattheta),
51  m_sigmascatphi (rhs.m_sigmascatphi),
52  m_sigmascattheta (rhs.m_sigmascattheta),
53  m_x0 (rhs.m_x0),
54  m_deltap (rhs.m_deltap),
55  m_deltae (rhs.m_deltae),
56  m_sigmadeltae (rhs.m_sigmadeltae),
57  m_sigmadeltaepos (rhs.m_sigmadeltaepos),
58  m_sigmadeltaeneg (rhs.m_sigmadeltaeneg),
59  m_eloss (std::unique_ptr<EnergyLoss>(rhs.m_eloss != nullptr ? rhs.m_eloss->clone() : nullptr)),
60  m_surf (rhs.m_surf),
61  m_matprop (rhs.m_matprop),
62  m_iskink (rhs.m_iskink),
63  m_ismeasuredeloss (rhs.m_ismeasuredeloss),
64  m_measscatphi (rhs.m_measscatphi),
65  m_sintheta (rhs.m_sintheta)
66  {
67  }
68 
70  if (this != &rhs) {
71  m_eloss = std::unique_ptr<EnergyLoss>(rhs.m_eloss != nullptr ? rhs.m_eloss->clone() : nullptr);
72  m_scatphi = rhs.m_scatphi;
76  m_x0 = rhs.m_x0;
77  m_deltap = rhs.m_deltap;
78  m_deltae = rhs.m_deltae;
82  m_iskink = rhs.m_iskink;
84  m_surf = rhs.m_surf;
85  m_matprop = rhs.m_matprop;
87  m_sintheta = rhs.m_sintheta;
88  }
89 
90  return *this;
91  }
92 
93  void GXFMaterialEffects::setScatteringAngles(double scatphi, double scattheta) {
94  m_scatphi = scatphi;
95  m_scattheta = scattheta;
96  }
97 
98  void GXFMaterialEffects::setScatteringSigmas(double scatsigmaphi, double scatsigmatheta) {
99  m_sigmascatphi = scatsigmaphi;
100  m_sigmascattheta = scatsigmatheta;
101  }
102 
103  double GXFMaterialEffects::x0() const {
104  return m_x0;
105  }
106 
107  void GXFMaterialEffects::setX0(double x0) {
108  m_x0 = x0;
109  }
110 
112  return m_scatphi;
113  }
114 
116  return m_measscatphi;
117  }
118 
120  return m_scattheta;
121  }
122 
124  return m_sigmascatphi;
125  }
126 
128  return m_sigmascattheta;
129  }
130 
131  double GXFMaterialEffects::deltaE() const {
132  return m_deltae;
133  }
134 
135  void GXFMaterialEffects::setEloss(std::unique_ptr<Trk::EnergyLoss> eloss) {
136  m_eloss = std::move(eloss);
137  }
138 
140  return m_sigmadeltae;
141  }
142 
144  return m_sigmadeltaepos;
145  }
146 
148  return m_sigmadeltaeneg;
149  }
150 
152  if (m_eloss != nullptr) {
153  return m_eloss->sigmaDeltaE();
154  }
155  return 0;
156  }
157 
158  void GXFMaterialEffects::setSigmaDeltaE(double sigmadeltae) {
159  m_sigmadeltae = sigmadeltae;
160  }
161 
162  void GXFMaterialEffects::setSigmaDeltaEPos(double sigmadeltaepos) {
163  m_sigmadeltaepos = sigmadeltaepos;
164  }
165 
166  void GXFMaterialEffects::setSigmaDeltaENeg(double sigmadeltaeneg) {
167  m_sigmadeltaeneg = sigmadeltaeneg;
168  }
169 
170  void GXFMaterialEffects::setDeltaE(double deltae) {
171  m_deltae = deltae;
172  }
173 
175  m_measscatphi = measdf;
176  }
177 
179  return m_deltap;
180  }
181 
182  void GXFMaterialEffects::setdelta_p(double delta_p) {
183  m_deltap = delta_p;
184  }
185 
186  void GXFMaterialEffects::setKink(bool iskink) {
187  m_iskink = iskink;
188  }
189 
191  return m_iskink;
192  }
193 
194  void GXFMaterialEffects::setMeasuredEloss(bool ismeasuredeloss) {
195  m_ismeasuredeloss = ismeasuredeloss;
196  }
197 
199  return m_ismeasuredeloss;
200  }
201 
203  return *m_surf;
204  }
205 
207  m_surf = surf;
208  }
209 
210  std::unique_ptr<MaterialEffectsBase> GXFMaterialEffects::makeMEOT() const {
211  std::optional<ScatteringAngles> scatangles;
212 
213  if (m_sigmascattheta != 0) {
215  }
216 
217  std::bitset<MaterialEffectsBase::NumberOfMaterialEffectsTypes> typePattern;
219  std::unique_ptr<const Trk::EnergyLoss> neweloss;
220 
221  if (m_deltae != 0) {
222  if (m_eloss != nullptr) {
223  neweloss.reset(m_eloss->clone());
224  } else {
225  neweloss = std::make_unique<Trk::EnergyLoss>(m_deltae, m_sigmadeltae, m_sigmadeltaeneg, m_sigmadeltaepos);
226  }
227  }
228 
229  return std::make_unique<MaterialEffectsOnTrack>(
230  m_x0, scatangles, std::move(neweloss), *m_surf, typePattern);
231  }
232 
234  return m_matprop;
235  }
236 
238  m_matprop = matprop;
239  }
240 }
Trk::GXFMaterialEffects::deltaTheta
double deltaTheta() const
Definition: GXFMaterialEffects.cxx:119
Trk::ScatteringAngles::deltaPhi
double deltaPhi() const
returns the
Definition: ScatteringAngles.h:82
Trk::EnergyLoss::sigmaMinusDeltaE
double sigmaMinusDeltaE() const
returns the negative side
Trk::GXFMaterialEffects::measuredDeltaPhi
double measuredDeltaPhi() const
Definition: GXFMaterialEffects.cxx:115
EnergyLoss.h
ScatteringAngles.h
Trk::GXFMaterialEffects::sigmaDeltaENeg
double sigmaDeltaENeg() const
Definition: GXFMaterialEffects.cxx:147
Trk::GXFMaterialEffects::m_scatphi
double m_scatphi
Definition: GXFMaterialEffects.h:106
Trk::GXFMaterialEffects::m_x0
double m_x0
Definition: GXFMaterialEffects.h:110
Trk::GXFMaterialEffects::m_sintheta
double m_sintheta
Definition: GXFMaterialEffects.h:123
Surface.h
Trk::GXFMaterialEffects::m_surf
const Surface * m_surf
Definition: GXFMaterialEffects.h:118
Trk::GXFMaterialEffects::setSurface
void setSurface(const Surface *)
Set the surface for this material effects instance.
Definition: GXFMaterialEffects.cxx:206
Trk::GXFMaterialEffects::setMeasuredDeltaPhi
void setMeasuredDeltaPhi(double)
Definition: GXFMaterialEffects.cxx:174
Trk::GXFMaterialEffects::m_matprop
const MaterialProperties * m_matprop
Definition: GXFMaterialEffects.h:119
Trk::GXFMaterialEffects::m_ismeasuredeloss
bool m_ismeasuredeloss
Definition: GXFMaterialEffects.h:121
Trk::GXFMaterialEffects::m_scattheta
double m_scattheta
Definition: GXFMaterialEffects.h:107
Trk::GXFMaterialEffects::m_sigmadeltae
double m_sigmadeltae
Definition: GXFMaterialEffects.h:113
Trk::EnergyLoss::sigmaDeltaE
double sigmaDeltaE() const
returns the symmatric error
Trk::GXFMaterialEffects::setMaterialProperties
void setMaterialProperties(const MaterialProperties *)
Set the material properties of this material effects instance.
Definition: GXFMaterialEffects.cxx:237
Trk::GXFMaterialEffects::m_iskink
bool m_iskink
Definition: GXFMaterialEffects.h:120
Trk::ScatteringAngles
represents a deflection of the track caused through multiple scattering in material.
Definition: ScatteringAngles.h:26
Trk::GXFMaterialEffects::setScatteringAngles
void setScatteringAngles(double, double)
Definition: GXFMaterialEffects.cxx:93
Trk::GXFMaterialEffects::setScatteringSigmas
void setScatteringSigmas(double, double)
Definition: GXFMaterialEffects.cxx:98
Trk::MaterialEffectsBase::FittedMaterialEffects
@ FittedMaterialEffects
contains values obtained by fitting the scatterer or e-loss
Definition: MaterialEffectsBase.h:56
Trk::MaterialEffectsBase::thicknessInX0
double thicknessInX0() const
returns the actually traversed material .
Trk::GXFMaterialEffects::setSigmaDeltaE
void setSigmaDeltaE(double)
Definition: GXFMaterialEffects.cxx:158
Trk::GXFMaterialEffects::setMeasuredEloss
void setMeasuredEloss(bool)
Definition: GXFMaterialEffects.cxx:194
Trk::GXFMaterialEffects::setdelta_p
void setdelta_p(double)
Definition: GXFMaterialEffects.cxx:182
python.Utilities.clone
clone
Definition: Utilities.py:134
Trk::GXFMaterialEffects::GXFMaterialEffects
GXFMaterialEffects()=default
Trk::GXFMaterialEffects::makeMEOT
std::unique_ptr< MaterialEffectsBase > makeMEOT() const
Definition: GXFMaterialEffects.cxx:210
Trk::GXFMaterialEffects::setX0
void setX0(double)
Definition: GXFMaterialEffects.cxx:107
MaterialEffectsOnTrack.h
Trk::GXFMaterialEffects::m_measscatphi
double m_measscatphi
Definition: GXFMaterialEffects.h:122
Trk::GXFMaterialEffects::x0
double x0() const
Definition: GXFMaterialEffects.cxx:103
Trk::GXFMaterialEffects::deltaPhi
double deltaPhi() const
Definition: GXFMaterialEffects.cxx:111
Trk::MaterialEffectsOnTrack
represents the full description of deflection and e-loss of a track in material.
Definition: MaterialEffectsOnTrack.h:40
Trk::ScatteringAngles::sigmaDeltaTheta
double sigmaDeltaTheta() const
returns the
Definition: ScatteringAngles.h:100
Trk::GXFMaterialEffects::setEloss
void setEloss(std::unique_ptr< EnergyLoss >)
Set the energy loss properties of this material effect.
Definition: GXFMaterialEffects.cxx:135
Trk::GXFMaterialEffects::setKink
void setKink(bool)
Definition: GXFMaterialEffects.cxx:186
Trk::GXFMaterialEffects::m_sigmascattheta
double m_sigmascattheta
Definition: GXFMaterialEffects.h:109
GXFMaterialEffects.h
Trk::GXFMaterialEffects::m_sigmascatphi
double m_sigmascatphi
Definition: GXFMaterialEffects.h:108
Trk::GXFMaterialEffects::sigmaDeltaPhi
double sigmaDeltaPhi() const
Definition: GXFMaterialEffects.cxx:123
Trk::GXFMaterialEffects::isMeasuredEloss
bool isMeasuredEloss() const
Definition: GXFMaterialEffects.cxx:198
Trk::GXFMaterialEffects::sigmaDeltaTheta
double sigmaDeltaTheta() const
Definition: GXFMaterialEffects.cxx:127
Trk::EnergyLoss::deltaE
double deltaE() const
returns the
Trk::GXFMaterialEffects::sigmaDeltaEPos
double sigmaDeltaEPos() const
Definition: GXFMaterialEffects.cxx:143
Trk::GXFMaterialEffects
class that is similar to MaterialEffectsOnTrack, but has 'set' methods for more flexibility during tr...
Definition: GXFMaterialEffects.h:24
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::GXFMaterialEffects::operator=
GXFMaterialEffects & operator=(const GXFMaterialEffects &rhs)
Definition: GXFMaterialEffects.cxx:69
Trk::GXFMaterialEffects::delta_p
double delta_p() const
Definition: GXFMaterialEffects.cxx:178
Trk::EnergyLoss
This class describes energy loss material effects in the ATLAS tracking EDM.
Definition: EnergyLoss.h:34
Trk::GXFMaterialEffects::isKink
bool isKink() const
Definition: GXFMaterialEffects.cxx:190
Trk::GXFMaterialEffects::m_sigmadeltaepos
double m_sigmadeltaepos
Definition: GXFMaterialEffects.h:114
Trk::MaterialProperties
Definition: MaterialProperties.h:40
Trk::MaterialEffectsOnTrack::energyLoss
const EnergyLoss * energyLoss() const
returns the energy loss object.
Trk::GXFMaterialEffects::sigmaDeltaE
double sigmaDeltaE() const
Definition: GXFMaterialEffects.cxx:139
Trk::GXFMaterialEffects::setSigmaDeltaEPos
void setSigmaDeltaEPos(double)
Definition: GXFMaterialEffects.cxx:162
Trk::GXFMaterialEffects::materialProperties
const MaterialProperties * materialProperties() const
Definition: GXFMaterialEffects.cxx:233
Trk::MaterialEffectsOnTrack::scatteringAngles
const ScatteringAngles * scatteringAngles() const
returns the MCS-angles object.
Trk::ScatteringAngles::sigmaDeltaPhi
double sigmaDeltaPhi() const
returns the
Definition: ScatteringAngles.h:94
Trk::GXFMaterialEffects::m_sigmadeltaeneg
double m_sigmadeltaeneg
Definition: GXFMaterialEffects.h:115
Trk::GXFMaterialEffects::m_deltae
double m_deltae
Definition: GXFMaterialEffects.h:112
Trk::GXFMaterialEffects::setDeltaE
void setDeltaE(double)
Definition: GXFMaterialEffects.cxx:170
Trk::ScatteringAngles::deltaTheta
double deltaTheta() const
returns the
Definition: ScatteringAngles.h:88
Trk::GXFMaterialEffects::m_deltap
double m_deltap
Definition: GXFMaterialEffects.h:111
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
Trk::GXFMaterialEffects::deltaE
double deltaE() const
Definition: GXFMaterialEffects.cxx:131
Trk::EnergyLoss::clone
virtual EnergyLoss * clone() const
Virtual constructor.
Trk::GXFMaterialEffects::associatedSurface
const Surface & associatedSurface() const
Definition: GXFMaterialEffects.cxx:202
Trk::EnergyLoss::sigmaPlusDeltaE
double sigmaPlusDeltaE() const
returns the positive side
Trk::GXFMaterialEffects::setSigmaDeltaENeg
void setSigmaDeltaENeg(double)
Definition: GXFMaterialEffects.cxx:166
Trk::GXFMaterialEffects::m_eloss
std::unique_ptr< const EnergyLoss > m_eloss
Definition: GXFMaterialEffects.h:116
Trk::GXFMaterialEffects::sigmaDeltaEAve
double sigmaDeltaEAve() const
Definition: GXFMaterialEffects.cxx:151