ATLAS Offline Software
Loading...
Searching...
No Matches
ExtrapolationEngineTest.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6// ExtrapolationEngineTest.cxx, (c) ATLAS Detector software
8
9// Amg includes
12// Gaudi
13#include "GaudiKernel/ITHistSvc.h"
14
15
17 // memory clean up
18 for (size_t ip = 0; ip < m_parameterNames.size(); ++ip) {
19 // create
20 delete m_pPositionX[ip];
21 delete m_pPositionY[ip];
22 delete m_pPositionZ[ip];
23 delete m_pPositionR[ip];
24 delete m_pPhi[ip];
25 delete m_pTheta[ip];
26 delete m_pEta[ip];
27 delete m_pP[ip];
28 delete m_pPt[ip];
29 }
48 delete m_sensitiveSide;
62 delete m_materialScaling;
63 delete m_stepDirection;
64
65 return StatusCode::SUCCESS;
66}
67
69 if (m_extrapolationEngine.retrieve().isFailure()) {
70 ATH_MSG_FATAL("Could not retrieve ExtrapolationEngine.");
71 return StatusCode::FAILURE;
72 } else ATH_MSG_INFO("Successfully retrieved ExtrapolationEngine.");
73
74 if (!m_posmomWriter.empty() && m_posmomWriter.retrieve().isFailure()) {
75 ATH_MSG_FATAL("Could not retrieve position/momentum writer.");
76 return StatusCode::FAILURE;
77 } else ATH_MSG_INFO("Successfully retrieved ExtrapolationEngine.");
78
79 //ID Helper
80 if (detStore()->retrieve(m_idHelper, "AtlasID" ).isFailure()) {
81 ATH_MSG_ERROR ( "Could not get ATLAS ID helper" );
82 return StatusCode::FAILURE;
83 } else
84 ATH_MSG_INFO("Successfully retrieved ATLAS ID Helper.");
85
86 if (detStore()->retrieve(m_pixel_ID, "PixelID").isFailure()) {
87 ATH_MSG_ERROR ( "Could not get Pixel ID helper" );
88 return StatusCode::FAILURE;
89 } else
90 ATH_MSG_INFO("Successfully retrieved Pixel ID Helper.");
91
92 if (detStore()->retrieve(m_sct_ID, "SCT_ID").isFailure()) {
93 ATH_MSG_ERROR ( "Could not get SCT ID helper" );
94 return StatusCode::FAILURE;
95 } else
96 ATH_MSG_INFO("Successfully retrieved SCT ID Helper.");
97
98 if (m_useHGTD) {
99 if (detStore()->retrieve(m_hgtd_ID, "HGTD_ID").isFailure()) {
100 ATH_MSG_ERROR ( "Could not get HGTD ID helper" );
101 return StatusCode::FAILURE;
102 } else
103 ATH_MSG_INFO("Successfully retrieved HGTD ID Helper.");
104 }
105 // success return
106 return StatusCode::SUCCESS;
107}
108
110 ATH_MSG_VERBOSE("Booking the Extrapolation test Tree.");
111
112 // ------------------------------> OUTPUT NTUPLE (geometry validation)
113 m_tree = new TTree(m_treeName.value().c_str(), m_treeDescription.value().c_str());
114 // add the Branches
115 m_tree->Branch("StartPosX", &m_startPositionX);
116 m_tree->Branch("StartPosY", &m_startPositionY);
117 m_tree->Branch("StartPosZ", &m_startPositionZ);
118 m_tree->Branch("StartPosR", &m_startPositionR);
119 m_tree->Branch("StartPhi", &m_startPhi);
120 m_tree->Branch("StartEta", &m_startEta);
121 m_tree->Branch("StartTheta", &m_startTheta);
122 m_tree->Branch("StartP", &m_startP);
123 m_tree->Branch("StartPt", &m_startPt);
124 if (m_parametersMode) m_tree->Branch("StartCharge", &m_charge);
125
126 m_tree->Branch("EndSuccessful", &m_endSuccessful);
127 m_tree->Branch("EndPosX", &m_endPositionX);
128 m_tree->Branch("EndPosY", &m_endPositionY);
129 m_tree->Branch("EndPosZ", &m_endPositionZ);
130 m_tree->Branch("EndPosR", &m_endPositionR);
131 m_tree->Branch("EndPhi", &m_endPhi);
132 m_tree->Branch("EndEta", &m_endEta);
133 m_tree->Branch("EndTheta", &m_endTheta);
134 m_tree->Branch("EndP", &m_endP);
135 m_tree->Branch("EndPt", &m_endPt);
136 // also add the path length
137 m_tree->Branch("EndPathLength", &m_endPathLength);
138
140 m_tree->Branch("BackSuccessful", &m_backSuccessful);
141 m_tree->Branch("BackPosX", &m_backPositionX);
142 m_tree->Branch("BackPosY", &m_backPositionY);
143 m_tree->Branch("BackPosZ", &m_backPositionZ);
144 m_tree->Branch("BackPosR", &m_backPositionR);
145 m_tree->Branch("BackPhi", &m_backPhi);
146 m_tree->Branch("BackEta", &m_backEta);
147 m_tree->Branch("BackTheta", &m_backTheta);
148 m_tree->Branch("BackP", &m_backP);
149 m_tree->Branch("BackPt", &m_backPt);
150 }
151
152 // this fixes the parameters to order
153 m_parameterNames.emplace_back("Sensitive");
154 m_parameterNames.emplace_back("Passive");
155 m_parameterNames.emplace_back("Boundary");
156 for (size_t ip = 0; ip < m_parameterNames.size(); ++ip) {
157 // create
158 m_pPositionX.push_back(new std::vector<float> );
159 m_pPositionY.push_back(new std::vector<float> );
160 m_pPositionZ.push_back(new std::vector<float> );
161 m_pPositionR.push_back(new std::vector<float> );
162 m_pPhi.push_back(new std::vector<float> );
163 m_pTheta.push_back(new std::vector<float> );
164 m_pEta.push_back(new std::vector<float> );
165 m_pP.push_back(new std::vector<float> );
166 m_pPt.push_back(new std::vector<float> );
167
168 // define the branches
169 m_tree->Branch(m_parameterNames[ip] + "PosX", m_pPositionX[ip]);
170 m_tree->Branch(m_parameterNames[ip] + "PosY", m_pPositionY[ip]);
171 m_tree->Branch(m_parameterNames[ip] + "PosZ", m_pPositionZ[ip]);
172 m_tree->Branch(m_parameterNames[ip] + "PosR", m_pPositionR[ip]);
173 m_tree->Branch(m_parameterNames[ip] + "Phi", m_pPhi[ip]);
174 m_tree->Branch(m_parameterNames[ip] + "Eta", m_pTheta[ip]);
175 m_tree->Branch(m_parameterNames[ip] + "Theta", m_pEta[ip]);
176 m_tree->Branch(m_parameterNames[ip] + "P", m_pP[ip]);
177 m_tree->Branch(m_parameterNames[ip] + "Pt", m_pPt[ip]);
178 }
179
180 if (m_collectSensitive) {
181 m_sensitiveLayerIndex = new std::vector< int >;
182 m_sensitiveSurfaceType = new std::vector< int >;
183 m_sensitiveCenterPosX = new std::vector< float >;
184 m_sensitiveCenterPosY = new std::vector< float >;
185 m_sensitiveCenterPosZ = new std::vector< float >;
186 m_sensitiveCenterPosR = new std::vector< float >;
187 m_sensitiveCenterPosPhi = new std::vector< float >;
188 m_sensitiveLocalPosX = new std::vector< float >;
189 m_sensitiveLocalPosY = new std::vector< float >;
190 m_sensitiveLocalPosR = new std::vector< float >;
191 m_sensitiveLocalPosPhi = new std::vector< float >;
192 m_sensitiveDetector = new std::vector< int >;
193 m_sensitiveIsInnermost = new std::vector< int >;
194 m_sensitiveIsNextToInnermost = new std::vector< int >;
195 m_sensitiveBarrelEndcap = new std::vector< int >;
196 m_sensitiveLayerDisc = new std::vector< int >;
197 m_sensitiveEtaModule = new std::vector< int >;
198 m_sensitivePhiModule = new std::vector< int >;
199 m_sensitiveSide = new std::vector< int >;
200 m_sensitiveNearBondGap = new std::vector< int >;
201 m_sensitiveisInside = new std::vector< int >;
202 m_sensitiveisInsideBound = new std::vector< int >;
203 m_materialtInX0AccumulatedUpTo = new std::vector< float >;
204
205 m_tree->Branch("SensitiveLayerIndex" , m_sensitiveLayerIndex);
206 m_tree->Branch("SensitiveSurfaceType" , m_sensitiveSurfaceType);
207 m_tree->Branch("SensitiveCenterPosX" , m_sensitiveCenterPosX);
208 m_tree->Branch("SensitiveCenterPosY" , m_sensitiveCenterPosY);
209 m_tree->Branch("SensitiveCenterPosZ" , m_sensitiveCenterPosZ);
210 m_tree->Branch("SensitiveCenterPosR" , m_sensitiveCenterPosR);
211 m_tree->Branch("SensitiveCenterPosPhi", m_sensitiveCenterPosPhi);
212 m_tree->Branch("SensitiveLocalPosX" , m_sensitiveLocalPosX);
213 m_tree->Branch("SensitiveLocalPosY" , m_sensitiveLocalPosY);
214 m_tree->Branch("SensitiveLocalPosR" , m_sensitiveLocalPosR);
215 m_tree->Branch("SensitiveLocalPosPhi" , m_sensitiveLocalPosPhi);
216 m_tree->Branch("SensitiveDetector" , m_sensitiveDetector);
217 m_tree->Branch("SensitiveIsInnermost" , m_sensitiveIsInnermost);
218 m_tree->Branch("SensitiveIsNextToInnermost" , m_sensitiveIsNextToInnermost);
219 m_tree->Branch("SensitiveBarrelEndcap", m_sensitiveBarrelEndcap);
220 m_tree->Branch("SensitiveLayerDisc" , m_sensitiveLayerDisc);
221 m_tree->Branch("SensitiveEtaModule" , m_sensitiveEtaModule);
222 m_tree->Branch("SensitivePhiModule" , m_sensitivePhiModule);
223 m_tree->Branch("SensitiveSide" , m_sensitiveSide);
224 m_tree->Branch("SensitiveNearBondGap" , m_sensitiveNearBondGap);
225 m_tree->Branch("SensitiveisInside" , m_sensitiveisInside);
226 m_tree->Branch("SensitiveisInsideBound", m_sensitiveisInsideBound);
227 m_tree->Branch("MaterialtInX0AccumulatedUpTo" , m_materialtInX0AccumulatedUpTo);
228 }
229
230
231 // collect the material, you need branches for this
232 if (m_collectMaterial) {
233 m_materialThicknessInX0Accumulated = new std::vector<float>;
234 m_materialThicknessInX0Steps = new std::vector<float>;
235 m_materialThicknessInL0Steps = new std::vector<float>;
236 m_materialPositionX = new std::vector<float>;
237 m_materialPositionY = new std::vector<float>;
238 m_materialPositionZ = new std::vector<float>;
239 m_materialPositionR = new std::vector<float>;
240 m_materialPositionP = new std::vector<float>;
241 m_materialPositionPt = new std::vector<float>;
242 m_materialScaling = new std::vector<float>;
243 m_stepDirection = new std::vector<int>;
244 m_tree->Branch("MaterialThicknessInX0", &m_materialThicknessInX0);
245 m_tree->Branch("MaterialThicknessInL0", &m_materialThicknessInL0);
246 m_tree->Branch("MaterialThicknessZARho", &m_materialThicknessZARho);
247 m_tree->Branch("MaterialEmulatedEloss", &m_materialEmulatedIonizationLoss);
248 m_tree->Branch("MaterialThicknessSensitiveInX0", &m_materialThicknessInX0Sensitive);
249 m_tree->Branch("MaterialThicknessPassiveInX0", &m_materialThicknessInX0Passive);
250 m_tree->Branch("MaterialThicknessBoundaryInX0", &m_materialThicknessInX0Boundary);
251 m_tree->Branch("MaterialThicknessCylinderInX0", &m_materialThicknessInX0Cylinder);
252 m_tree->Branch("MaterialThicknessDiscInX0", &m_materialThicknessInX0Disc);
253 m_tree->Branch("MaterialThicknessPlaneInX0", &m_materialThicknessInX0Plane);
254 m_tree->Branch("MaterialThicknessAccumulatedX0", m_materialThicknessInX0Accumulated);
255 m_tree->Branch("MaterialThicknessStepsInX0", m_materialThicknessInX0Steps);
256 m_tree->Branch("MaterialThicknessStepsInL0", m_materialThicknessInL0Steps);
257 m_tree->Branch("MaterialPosX", m_materialPositionX);
258 m_tree->Branch("MaterialPosY", m_materialPositionY);
259 m_tree->Branch("MaterialPosZ", m_materialPositionZ);
260 m_tree->Branch("MaterialPosR", m_materialPositionR);
261 m_tree->Branch("MaterialPosP", m_materialPositionP);
262 m_tree->Branch("MaterialPosPt", m_materialPositionPt);
263 m_tree->Branch("MaterialScaling", m_materialScaling);
264 m_tree->Branch("StepDirection", m_stepDirection);
265 }
266
268 m_tree->Branch("EndStepSuccessful", &m_endStepSuccessful);
269 m_tree->Branch("EndStepPosX", &m_endStepPositionX);
270 m_tree->Branch("EndStepPosY", &m_endStepPositionY);
271 m_tree->Branch("EndStepPosZ", &m_endStepPositionZ);
272 m_tree->Branch("EndStepPosR", &m_endStepPositionR);
273 m_tree->Branch("EndStepPhi", &m_endStepPhi);
274 m_tree->Branch("EndStepEta", &m_endStepEta);
275 m_tree->Branch("EndStepTheta", &m_endStepTheta);
276 m_tree->Branch("EndStepP", &m_endStepP);
277 m_tree->Branch("EndStepPt", &m_endStepPt);
278 m_tree->Branch("EndStepPathLength", &m_endStepPathLength);
279 m_tree->Branch("EndStepMaterialThicknessInX0", &m_endStepThicknessInX0);
280 }
281
282 // now register the Tree
283 SmartIF<ITHistSvc> tHistSvc{service("THistSvc")};
284 if (!tHistSvc) {
285 ATH_MSG_ERROR("initialize() Could not find Hist Service -> Switching Tree output off !");
286 delete m_tree;
287 m_tree = nullptr;
288 }
289 if (tHistSvc && ((tHistSvc->regTree(m_treeFolder.value() + m_treeName.value(), m_tree)).isFailure())) {
290 ATH_MSG_ERROR("initialize() Could not register the validation Tree -> Switching Tree output off !");
291 delete m_tree;
292 m_tree = nullptr;
293 }
294 return StatusCode::SUCCESS;
295}
296
298 ATH_MSG_VERBOSE("Running the ExtrapolationEngineTest Test in parameters mode : " << m_parametersMode);
299 if (m_parametersMode == 0) {
301 }
303}
304
306 ATH_MSG_VERBOSE("Running the ExtrapolationEngineTest Test in scanning mode");
307
308 if (m_phiScans.empty()) {
309 ATH_MSG_VERBOSE("Running in scan mode: Phi scans not given. Automatically calculated.");
310 m_currentPhi = m_phiMin + double(m_currentPhiStep + 1) * (m_phiMax - m_phiMin) / double(m_stepsPhi);
311 } else {
312 ATH_MSG_VERBOSE("Running in scan mode: Phi scans given.");
313 if (m_currentPhiStep >= int(m_phiScans.size())) m_currentPhiStep = 0;
315 }
317
318 if (m_etaScans.empty()) {
319 ATH_MSG_ERROR("Running in scan mode without specified eta values");
320 return StatusCode::FAILURE;
321 }
322
323 for (auto etaValue : m_etaScans) {
324 m_currentEta = etaValue;
325 ATH_MSG_VERBOSE("Running the ExtrapolationEngineTest Test in parameters mode : " << m_parametersMode);
326 if (m_parametersMode == 0) {
327 if (runTestT<Trk::NeutralParameters, Trk::NeutralPerigee>().isFailure()) return StatusCode::FAILURE;
328 }
329 if (runTestT<Trk::TrackParameters, Trk::Perigee>().isFailure()) return StatusCode::FAILURE;
330 }
331
332 return StatusCode::SUCCESS;
333}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
const ServiceHandle< StoreGateSvc > & detStore() const
std::vector< float > * m_sensitiveCenterPosX
std::vector< float > * m_materialPositionR
std::vector< int > * m_sensitiveIsInnermost
std::vector< float > * m_sensitiveCenterPosZ
std::vector< float > * m_materialPositionPt
std::vector< float > * m_sensitiveCenterPosPhi
std::vector< float > * m_materialThicknessInX0Steps
ToolHandle< IExtrapolationEngine > m_extrapolationEngine
retrieve it
std::vector< std::vector< float > * > m_pPositionX
std::vector< std::vector< float > * > m_pP
std::vector< float > * m_materialPositionY
std::vector< float > * m_sensitiveLocalPosX
std::vector< float > * m_materialThicknessInX0Accumulated
std::vector< float > * m_materialScaling
std::vector< int > * m_sensitiveNearBondGap
std::vector< float > * m_materialtInX0AccumulatedUpTo
std::vector< float > * m_sensitiveLocalPosR
std::vector< float > * m_materialPositionX
std::vector< float > * m_sensitiveLocalPosY
std::vector< TString > m_parameterNames
std::vector< float > * m_sensitiveCenterPosR
std::vector< std::vector< float > * > m_pPositionR
std::vector< int > * m_sensitiveSurfaceType
std::vector< float > * m_materialPositionP
ToolHandle< IPositionMomentumWriter > m_posmomWriter
std::vector< std::vector< float > * > m_pPhi
std::vector< std::vector< float > * > m_pPositionY
StatusCode initializeTest()
initialize the test, i.e.
std::vector< std::vector< float > * > m_pEta
std::vector< float > * m_materialThicknessInL0Steps
std::vector< int > * m_sensitiveIsNextToInnermost
std::vector< float > * m_sensitiveLocalPosPhi
IntegerProperty m_stepsPhi
scanning parameters
std::vector< float > * m_sensitiveCenterPosY
std::vector< std::vector< float > * > m_pTheta
std::vector< int > * m_sensitiveisInsideBound
std::vector< float > * m_materialPositionZ
std::vector< int > * m_sensitiveBarrelEndcap
std::vector< std::vector< float > * > m_pPt
std::vector< std::vector< float > * > m_pPositionZ