ATLAS Offline Software
ExtrapolationEngineTest.h
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.h, (c) ATLAS Detector software
8 
9 #ifndef TRKEXUNITTESTS_EXTRAPOLATIONENGINETEST_H
10 #define TRKEXUNITTESTS_EXTRAPOLATIONENGINETEST_H
11 
12 // Athena & Gaudi includes
13 #include "GaudiKernel/ServiceHandle.h"
14 #include "GaudiKernel/ToolHandle.h"
16 // Trk includes
19 #include "TString.h"
20 #include "TRandom.h"
21 
22 class TTree;
23 
24 class PixelID;
25 class SCT_ID;
26 class HGTD_ID;
27 class AtlasDetectorID;
28 
29 namespace Trk {
30  class IExtrapolationEngine;
31  class IPositionMomentumWriter;
32 
41  // ^ ExtrapolationEngine itself is not thread-safe
42  public:
44  using TrkExUnitTestBase::TrkExUnitTestBase;
45 
46  /* finalize */
48 
49  /* specify the test here */
50  StatusCode runTest();
51 
52  /* specify the scan here */
53  StatusCode runScan();
54 
56  StatusCode initializeTest();
57 
58  /* book the TTree branches */
59  StatusCode bookTree();
60  private:
61  template <class T, class P> StatusCode runTestT();
62 
63  template <class T, class P> StatusCode fillStepInformationT(ExtrapolationCell<T>& eCell, int fwbw, std::vector<const Trk::Surface*>& stepSurfaces);
64 
66  ToolHandle<IExtrapolationEngine> m_extrapolationEngine{
67  this, "ExtrapolationEngine", ""};
68 
69  const AtlasDetectorID* m_idHelper = nullptr;
70  const PixelID* m_pixel_ID = nullptr;
71  const SCT_ID* m_sct_ID = nullptr;
72  const HGTD_ID* m_hgtd_ID = nullptr;
73  BooleanProperty m_useHGTD{this, "UseHGTD", false};
74 
75  BooleanProperty m_parametersMode{this, "ParametersMode", 1,
76  "0 - neutral, 1 - charged, 2 - multi"};
77  IntegerProperty m_particleHypothesis{this, "ParticleHypothesis", 2};
78 
79  BooleanProperty m_smearProductionVertex{this, "SmearOrigin", false};
80  BooleanProperty m_smearFlatOriginT{this, "SmearFlatOriginD0", false};
81  BooleanProperty m_smearFlatOriginZ{this, "SmearFlatOriginZ0", false};
82  DoubleProperty m_sigmaOriginT{this, "SimgaOriginD0", 0.};
83  DoubleProperty m_sigmaOriginZ{this, "SimgaOriginZ0", 0.};
84  DoubleProperty m_d0Min{this, "D0Min", 0.};
85  DoubleProperty m_d0Max{this, "D0Max", 0.};
86  DoubleProperty m_z0Min{this, "Z0Min", 0.};
87  DoubleProperty m_z0Max{this, "Z0Max", 0.};
88 
89  DoubleProperty m_etaMin{this, "EtaMin", -3.};
90  DoubleProperty m_etaMax{this, "EtaMax", 3.};
91  DoubleProperty m_phiMin{this, "PhiMin", -M_PI};
92  DoubleProperty m_phiMax{this, "PhiMax", M_PI};
93  DoubleProperty m_ptMin{this, "PtMin", 100.};
94  DoubleProperty m_ptMax{this, "PtMax", 100000.};
95 
96  DoubleProperty m_pathLimit{this, "PathLimit", 10e10};
97 
98  BooleanProperty m_collectSensitive{this, "CollectSensitive", false};
99  BooleanProperty m_collectPassive{this, "CollectPassive", false};
100  BooleanProperty m_collectBoundary{this, "CollectBoundary", false};
101  BooleanProperty m_collectMaterial{this, "CollectMaterial", false};
102 
103  BooleanProperty m_backExtrapolation{this, "BackExtrapolation", false};
104  BooleanProperty m_stepwiseExtrapolation{this, "StepwiseExtrapolation", false};
105 
107  IntegerProperty m_stepsPhi{this, "PhiSteps", 1};
108  int m_currentPhiStep = 0;
109  FloatArrayProperty m_etaScans{this, "EtaScans", {}};
110  double m_currentEta = 0.;
111  FloatArrayProperty m_phiScans{this, "PhiScans", {}};
112  double m_currentPhi = 0.;
113  BooleanProperty m_splitCharge{this, "SplitCharge", false};
114 
115  BooleanProperty m_writeTTree{this, "WriteTTree", true};
116  ToolHandle<IPositionMomentumWriter> m_posmomWriter{
117  this, "PositionMomentumWriter", ""};
118 
119  StringProperty m_treeName{this, "TreeName", "ExtrapolationEngineTest"};
120  StringProperty m_treeFolder{this, "TreeFolder", "/val/"};
121  StringProperty m_treeDescription{this, "TreeDescription",
122  "ExtrapolationEngine test setup"};
123  TTree* m_tree = nullptr;
124  TRandom m_tRandom;
125 
126  float m_startPositionX = 0.0F;
127  float m_startPositionY = 0.0F;
128  float m_startPositionZ = 0.0F;
129  float m_startPositionR = 0.0F;
130  float m_startPhi = 0.0F;
131  float m_startTheta = 0.0F;
132  float m_startEta = 0.0F;
133  float m_startP = 0.0F;
134  float m_startPt = 0.0F;
135  float m_charge = -1.;
136 
137  int m_endSuccessful = 0;
138  float m_endPositionX = 0.0F;
139  float m_endPositionY = 0.0F;
140  float m_endPositionZ = 0.0F;
141  float m_endPositionR = 0.0F;
142  float m_endPhi = 0.0F;
143  float m_endTheta = 0.0F;
144  float m_endEta = 0.0F;
145  float m_endP = 0.0F;
146  float m_endPt = 0.0F;
147  float m_endPathLength = 0.0F;
148 
149  int m_backSuccessful = 0;
150  float m_backPositionX = 0.0F;
151  float m_backPositionY = 0.0F;
152  float m_backPositionZ = 0.0F;
153  float m_backPositionR = 0.0F;
154  float m_backPhi = 0.;
155  float m_backTheta = 0.;
156  float m_backEta = 0.;
157  float m_backP = 0.;
158  float m_backPt = 0.;
159 
160  std::vector<TString> m_parameterNames;
161  std::vector< std::vector< float >* > m_pPositionX;
162  std::vector< std::vector< float >* > m_pPositionY;
163  std::vector< std::vector< float >* > m_pPositionZ;
164  std::vector< std::vector< float >* > m_pPositionR;
165  std::vector< std::vector< float >* > m_pPhi;
166  std::vector< std::vector< float >* > m_pTheta;
167  std::vector< std::vector< float >* > m_pEta;
168  std::vector< std::vector< float >* > m_pP;
169  std::vector< std::vector< float >* > m_pPt;
170 
171  std::vector< int >* m_sensitiveSurfaceType = nullptr;
172  std::vector< int >* m_sensitiveLayerIndex = nullptr;
173  std::vector< float >* m_sensitiveLocalPosX = nullptr;
174  std::vector< float >* m_sensitiveLocalPosY = nullptr;
175  std::vector< float >* m_sensitiveCenterPosX = nullptr;
176  std::vector< float >* m_sensitiveCenterPosY = nullptr;
177  std::vector< float >* m_sensitiveCenterPosZ = nullptr;
178  std::vector< float >* m_sensitiveCenterPosR = nullptr;
179  std::vector< float >* m_sensitiveCenterPosPhi = nullptr;
180  std::vector< float >* m_sensitiveLocalPosR = nullptr;
181  std::vector< float >* m_sensitiveLocalPosPhi = nullptr;
182  std::vector< int >* m_sensitiveDetector = nullptr;
183  std::vector< int >* m_sensitiveIsInnermost = nullptr;
184  std::vector< int >* m_sensitiveIsNextToInnermost = nullptr;
185  std::vector< int >* m_sensitiveBarrelEndcap = nullptr;
186  std::vector< int >* m_sensitiveLayerDisc = nullptr;
187  std::vector< int >* m_sensitiveEtaModule = nullptr;
188  std::vector< int >* m_sensitivePhiModule = nullptr;
189  std::vector< int >* m_sensitiveSide = nullptr;
190  std::vector< int >* m_sensitiveNearBondGap = nullptr;
191  std::vector< int >* m_sensitiveisInside = nullptr;
192  std::vector< int >* m_sensitiveisInsideBound = nullptr;
193  std::vector< float >* m_materialtInX0AccumulatedUpTo = nullptr;
194 
195  float m_materialThicknessInX0 = 0.;
196  float m_materialThicknessInL0 = 0.;
197  float m_materialThicknessZARho = 0.;
198  float m_materialEmulatedIonizationLoss = 0.;
199 
200  float m_materialThicknessInX0Bwd = 0.;
201  float m_materialThicknessInL0Bwd = 0.;
202 
203  float m_materialThicknessInX0Sensitive = 0.;
204  float m_materialThicknessInX0Passive = 0.;
205  float m_materialThicknessInX0Boundary = 0.;
206 
207  float m_materialThicknessInX0Cylinder = 0.;
208  float m_materialThicknessInX0Disc = 0.;
209  float m_materialThicknessInX0Plane = 0.;
210 
211  std::vector< float >* m_materialThicknessInX0Accumulated = nullptr;
212  std::vector< float >* m_materialThicknessInX0Steps = nullptr;
213  std::vector< float >* m_materialThicknessInL0Steps = nullptr;
214  std::vector< float >* m_materialPositionX = nullptr;
215  std::vector< float >* m_materialPositionY = nullptr;
216  std::vector< float >* m_materialPositionZ = nullptr;
217  std::vector< float >* m_materialPositionR = nullptr;
218  std::vector< float >* m_materialPositionP = nullptr;
219  std::vector< float >* m_materialPositionPt = nullptr;
220  std::vector< float >* m_materialScaling = nullptr;
221  std::vector< int >* m_stepDirection = nullptr;
222 
223  int m_endStepSuccessful = 0;
224  float m_endStepPositionX = 0.;
225  float m_endStepPositionY = 0.;
226  float m_endStepPositionZ = 0.;
227  float m_endStepPositionR = 0.;
228  float m_endStepPhi = 0.;
229  float m_endStepTheta = 0.;
230  float m_endStepEta = 0.;
231  float m_endStepP = 0.;
232  float m_endStepPt = 0.;
233  float m_endStepPathLength = 0.;
234  float m_endStepThicknessInX0 = 0.;
235 
236  };
237 }
238 
239 // include the templated function
241 
242 #endif
Trk::ExtrapolationEngineTest::m_pPositionX
std::vector< std::vector< float > * > m_pPositionX
Definition: ExtrapolationEngineTest.h:161
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:50
ATLAS_NOT_THREAD_SAFE
#define ATLAS_NOT_THREAD_SAFE
getNoisyStrip() Find noisy strips from hitmaps and write out into xml/db formats
Definition: checker_macros.h:212
Trk::ExtrapolationEngineTest::runTestT
StatusCode runTestT()
Trk::ExtrapolationEngineTest::m_parameterNames
std::vector< TString > m_parameterNames
Definition: ExtrapolationEngineTest.h:160
M_PI
#define M_PI
Definition: ActiveFraction.h:11
Trk::ExtrapolationEngineTest::m_pP
std::vector< std::vector< float > * > m_pP
Definition: ExtrapolationEngineTest.h:168
Trk::ExtrapolationEngineTest::m_pPositionR
std::vector< std::vector< float > * > m_pPositionR
Definition: ExtrapolationEngineTest.h:164
Trk::ExtrapolationEngineTest::m_pEta
std::vector< std::vector< float > * > m_pEta
Definition: ExtrapolationEngineTest.h:167
Trk::ExtrapolationEngineTest::m_pTheta
std::vector< std::vector< float > * > m_pTheta
Definition: ExtrapolationEngineTest.h:166
Trk::ExtrapolationEngineTest::m_pPositionY
std::vector< std::vector< float > * > m_pPositionY
Definition: ExtrapolationEngineTest.h:162
TrkExUnitTestBase.h
Trk::ExtrapolationEngineTest::fillStepInformationT
StatusCode fillStepInformationT(ExtrapolationCell< T > &eCell, int fwbw, std::vector< const Trk::Surface * > &stepSurfaces)
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Trk::ExtrapolationEngineTest
Definition: ExtrapolationEngineTest.h:40
Trk::ExtrapolationEngineTest::m_pPt
std::vector< std::vector< float > * > m_pPt
Definition: ExtrapolationEngineTest.h:169
HGTD_ID
Definition: HGTD_ID.h:47
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::ExtrapolationCell
Definition: ExtrapolationCell.h:231
Trk::ExtrapolationEngineTest::m_pPositionZ
std::vector< std::vector< float > * > m_pPositionZ
Definition: ExtrapolationEngineTest.h:163
Trk::ExtrapolationEngineTest::m_pPhi
std::vector< std::vector< float > * > m_pPhi
Definition: ExtrapolationEngineTest.h:165
SCT_ID
Definition: SCT_ID.h:68
Trk::TrkExUnitTestBase
Definition: TrkExUnitTestBase.h:25
Trk::ExtrapolationEngineTest::m_tRandom
TRandom m_tRandom
Definition: ExtrapolationEngineTest.h:124
ExtrapolationEngineTest.icc
checker_macros.h
Define macros for attributes used to control the static checker.
PixelID
Definition: PixelID.h:67
IExtrapolationEngine.h
AtlasDetectorID
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
Definition: AtlasDetectorID.h:52