ATLAS Offline Software
Loading...
Searching...
No Matches
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
10
11namespace Trk {
14
15 if (meot.energyLoss() != nullptr) {
16 m_deltae = meot.energyLoss()->deltaE();
17 m_sigmadeltaepos = meot.energyLoss()->sigmaPlusDeltaE();
18 m_sigmadeltaeneg = meot.energyLoss()->sigmaMinusDeltaE();
19
20 if (meot.scatteringAngles() == nullptr) {
21 m_eloss = std::unique_ptr<EnergyLoss>(meot.energyLoss()->clone());
22 m_sigmadeltae = meot.energyLoss()->sigmaDeltaE();
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 {
44 m_scatphi = m_scattheta = m_sigmascatphi = m_sigmascattheta = 0;
45 }
46 }
47
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;
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
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
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
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
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
236
240}
This class describes energy loss material effects in the ATLAS tracking EDM.
Definition EnergyLoss.h:34
GXFMaterialEffects(const MaterialEffectsOnTrack &)
Constructor that captures the properties of a more standard MaterialEffectsOnTrack object.
GXFMaterialEffects & operator=(const GXFMaterialEffects &rhs)
void setSurface(const Surface *)
Set the surface for this material effects instance.
const Surface & associatedSurface() const
std::unique_ptr< MaterialEffectsBase > makeMEOT() const
void setScatteringAngles(double, double)
void setEloss(std::unique_ptr< EnergyLoss >)
Set the energy loss properties of this material effect.
void setScatteringSigmas(double, double)
void setMaterialProperties(const MaterialProperties *)
Set the material properties of this material effects instance.
const MaterialProperties * m_matprop
const MaterialProperties * materialProperties() const
std::unique_ptr< const EnergyLoss > m_eloss
@ FittedMaterialEffects
contains values obtained by fitting the scatterer or e-loss
represents the full description of deflection and e-loss of a track in material.
const EnergyLoss * energyLoss() const
returns the energy loss object.
Material with information about thickness of material.
represents a deflection of the track caused through multiple scattering in material.
Abstract Base Class for tracking surfaces.
STL class.
Ensure that the ATLAS eigen extensions are properly loaded.
STL namespace.