ATLAS Offline Software
MaterialMapper.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // MaterialMapper.h, (c) ATLAS Detector software
8 
9 #ifndef TRKDETDESCRTOOLS_MATERIALMAPPER_H
10 #define TRKDETDESCRTOOLS_MATERIALMAPPER_H
11 
12 // Amg
14 // Gaudi & Athena
16 #include "GaudiKernel/IIncidentListener.h"
17 // Trk
19 // ROOT
20 #include "TTree.h"
21 #include "TString.h"
23 
24 #define TRKDETDESCRTOOLS_MAXSTEPS 8000
25 #define TRKDETDESCRTOOLS_MAXLAYERHITS 5000
26 
27 class TTree;
28 
29 namespace Trk {
30 
31  class TrackingVolume;
32  class Layer;
33 
34 
42 
43  float eta;
44  float phi;
45  float path;
46  float pathInX0;
47  float pathInL0;
48  float pathZARho;
49  TTree* tree;
50 
51  VolumeTreeObject(TString name, TString title)
52  : eta(0),
53  phi(0.),
54  path(0.),
55  pathInX0(0.),
56  pathInL0(0.),
57  pathZARho(0.),
58  tree(new TTree(name,title))
59  {
60  tree->Branch("Eta", &eta, "eta/F");
61  tree->Branch("Phi", &phi, "phi/F");
62  tree->Branch("Path", &path, "path/F");
63  tree->Branch("PathInX0", &pathInX0, "pathX0/F");
64  tree->Branch("PathInL0", &pathInL0, "pathL0/F");
65  tree->Branch("PathZARho", &pathZARho, "pathZARho/F");
66  }
67  };
68 
69  struct LayerTreeObject {
70  LayerTreeObject (const LayerTreeObject&) = delete;
72 
73  // values for the full histo
74  float densedHitX;
75  float densedHitY;
76  float densedHitZ;
77  float densedHitR;
78  float densedHitPhi;
81 
83  float path;
84  float pathInX0;
85  float pathInL0;
86  float A;
87  float Z;
88  float rho;
89 
90  int layerHits;
97 
98  TTree* tree;
99 
100  LayerTreeObject(TString name, TString title)
101  : densedHitX(0.),
102  densedHitY(0.),
103  densedHitZ(0.),
104  densedHitR(0.),
105  densedHitPhi(0.),
106  densedHitTheta(0.),
107  densedHits(0),
108  correctionFactor(0.),
109  path(0.),
110  pathInX0(0.),
111  pathInL0(0.),
112  A(0.),
113  Z(0.),
114  rho(0.),
115  layerHits(0),
116  tree(new TTree(name,title))
117  {
118  tree->Branch("DensedHits", &densedHits, "densedHits/I");
119  tree->Branch("DensedHitX", &densedHitX, "densedHitX/F");
120  tree->Branch("DensedHitY", &densedHitY, "densedHitY/F");
121  tree->Branch("DensedHitZ", &densedHitZ, "densedHitZ/F");
122  tree->Branch("DensedHitR", &densedHitR, "densedHitR/F");
123  tree->Branch("DensedHitPhi", &densedHitPhi, "densedHitPhi/F");
124  tree->Branch("DensedHitTheta", &densedHitTheta, "densedHitTheta/F");
125 
126  tree->Branch("CorrFactor", &correctionFactor, "corrF/F");
127  tree->Branch("Path", &path, "pathInX0/F");
128  tree->Branch("PathInX0", &pathInX0, "pathInX0/F");
129  tree->Branch("PathInL0", &pathInL0, "pathInL0/F");
130  tree->Branch("A", &A, "a/F");
131  tree->Branch("Z", &Z, "z/F");
132  tree->Branch("Rho", &rho, "rho/F");
133  tree->Branch("Hits", &layerHits, "layerhits/I");
134  tree->Branch("HitPathInX0", &hitPathInX0, "layerhitpathInX0[layerhits]/F");
135  tree->Branch("HitPositionX", &hitPositionX, "layerhitsX[layerhits]/F");
136  tree->Branch("HitPositionY", &hitPositionY, "layerhitsY[layerhits]/F");
137  tree->Branch("HitPositionZ", &hitPositionZ, "layerhitsZ[layerhits]/F");
138  tree->Branch("HitPositionR", &hitPositionR, "layerhitsR[layerhits]/F");
139  tree->Branch("HitPositionEta", &hitPositionEta, "layerhitsR[layerhits]/F");
140  }
141  };
142 
143 
150 
151  float loc1;
152  float loc2;
153  float eta;
155  float path;
156  float pathInX0;
157  float pathInL0;
158  float A;
159  float Z;
160  float rho;
161 
163  TTree* tree;
164 
165  SurfaceTreeObject(TString name, TString title)
166  : loc1(0.),
167  loc2(0.),
168  eta(0.),
169  correctionFactor(0.),
170  path(0.),
171  pathInX0(0.),
172  pathInL0(0.),
173  A(0.),
174  Z(0.),
175  rho(0.),
176  surfaceHits(0),
177  tree(new TTree(name,title))
178  {
179  tree->Branch("Local1", &loc1, "local1/F");
180  tree->Branch("Local2", &loc2, "local2/F");
181  tree->Branch("Eta", &eta, "eta/F");
182  tree->Branch("CorrFactor", &correctionFactor, "corrF/F");
183  tree->Branch("Path", &path, "path/F");
184  tree->Branch("PathInX0", &pathInX0, "pathInX0/F");
185  tree->Branch("PathInL0", &pathInL0, "pathInL0/F");
186  tree->Branch("A", &A, "a/F");
187  tree->Branch("Z", &Z, "z/F");
188  tree->Branch("Rho", &rho, "rho/F");
189  }
190  };
191 
192 
204  public AthAlgTool, virtual public IMaterialMapper, virtual public IIncidentListener {
205 
206  public:
207 
209  MaterialMapper(const std::string&,
210  const std::string&,
211  const IInterface*);
212 
214  virtual ~MaterialMapper();
215 
218 
221 
223  void recordMaterialHit(const AssociatedMaterial& amhit, const Amg::Vector3D& projectedPosition) const;
224 
226  void recordLayerHit(const AssociatedMaterial& amhit, bool full = false) const;
227 
229  void recordSurfaceHit(const Amg::Vector2D& locpos, const AssociatedMaterial& amhit) const;
230 
232  void handle( const Incident& inc );
233 
234  private:
235 
237  void finalizeVolumeHits(bool mapped=true) const;
238 
240  void finalizeLayerHits() const;
241 
243  void finalizeSurfaceHits() const;
244 
246  void bookValidationTree();
247 
249  VolumeTreeObject* volumeTreeObject(const Layer* lay=0, const TrackingVolume* tvol=0) const;
250 
252  LayerTreeObject* layerTreeObject(const Layer& lay, bool full = false) const;
253 
255  SurfaceTreeObject* surfaceTreeObject(const Layer& lay) const;
256 
257 
258  /* Incident Service */
260 
262 
263  // (1) ------------------------- Tree name of the total material statistics
264  unsigned int m_maxMappingEvents;
265  mutable unsigned int m_processedEvents;
266 
267  std::string m_totalMaterialTree;
268 
269  // (2) ------------------------ Ntuple output of material effects validation
271  std::string m_validationTreeName;
274 
275 
276  // Spatial information
277  mutable int m_materialSteps;
278  mutable float m_averageEta;
279  mutable float m_averagePhi;
280  mutable float m_mappedPath;
281  mutable float m_mappedPathInX0;
282  mutable float m_mappedPathInL0;
283  mutable float m_mappedPathRho;
284  mutable float m_mappedPathZARho;
285  mutable float m_unmappedPathInX0;
286  mutable int m_mapped[TRKDETDESCRTOOLS_MAXSTEPS]{};
287  mutable float m_materialAccumPathInX0[TRKDETDESCRTOOLS_MAXSTEPS]{};
288  mutable float m_materialAccumPathZARho[TRKDETDESCRTOOLS_MAXSTEPS]{};
289  mutable float m_materialStepPath[TRKDETDESCRTOOLS_MAXSTEPS]{};
290  mutable float m_materialStepX0[TRKDETDESCRTOOLS_MAXSTEPS]{};
291  mutable float m_materialStepL0[TRKDETDESCRTOOLS_MAXSTEPS]{};
292  mutable float m_materialStepZ[TRKDETDESCRTOOLS_MAXSTEPS]{};
293  mutable float m_materialStepA[TRKDETDESCRTOOLS_MAXSTEPS]{};
294  mutable float m_materialStepRho[TRKDETDESCRTOOLS_MAXSTEPS]{};
295  mutable float m_materialStepPositionX[TRKDETDESCRTOOLS_MAXSTEPS]{};
296  mutable float m_materialStepPositionY[TRKDETDESCRTOOLS_MAXSTEPS]{};
297  mutable float m_materialStepPositionZ[TRKDETDESCRTOOLS_MAXSTEPS]{};
298  mutable float m_materialStepPositionR[TRKDETDESCRTOOLS_MAXSTEPS]{};
299  mutable float m_materialProjPositionX[TRKDETDESCRTOOLS_MAXSTEPS]{};
300  mutable float m_materialProjPositionY[TRKDETDESCRTOOLS_MAXSTEPS]{};
301  mutable float m_materialProjPositionZ[TRKDETDESCRTOOLS_MAXSTEPS]{};
302  mutable float m_materialProjPositionR[TRKDETDESCRTOOLS_MAXSTEPS]{};
303  mutable float m_materialProjDistance[TRKDETDESCRTOOLS_MAXSTEPS]{};
304 
305  // Per Volume Validation
307  std::string m_volumeTreePrefix;
308  mutable std::map< const Trk::TrackingVolume*, VolumeTreeObject* > m_volumeTrees;
309  mutable std::map< const Trk::TrackingVolume*, VolumeTreeObject* > m_volumeTreesUnmapped;
310 
311  // Per Layer Validation
313  std::string m_layerTreePrefix;
314  mutable std::map< const Trk::Layer*, LayerTreeObject* > m_layerTrees;
315  mutable std::map< const Trk::Layer*, LayerTreeObject* > m_layerFullTrees;
316 
317  // Per Surface Validation
319  std::string m_surfaceTreePrefix;
320  mutable std::map< const Trk::Layer*, SurfaceTreeObject* > m_surfaceTrees;
321 
322  };
323 
324 } // end of namespace
325 
326 #endif // TRKDETDESCRTOOLS_MATERIALMAPPER_H
327 
Trk::LayerTreeObject::densedHitX
float densedHitX
Definition: MaterialMapper.h:74
Trk::LayerTreeObject::densedHitTheta
float densedHitTheta
Definition: MaterialMapper.h:79
Trk::MaterialMapper::m_surfaceTreePrefix
std::string m_surfaceTreePrefix
Definition: MaterialMapper.h:319
Trk::MaterialMapper::m_volumeTreesUnmapped
std::map< const Trk::TrackingVolume *, VolumeTreeObject * > m_volumeTreesUnmapped
Definition: MaterialMapper.h:309
Trk::MaterialMapper::m_layerTrees
std::map< const Trk::Layer *, LayerTreeObject * > m_layerTrees
Definition: MaterialMapper.h:314
Trk::SurfaceTreeObject::A
float A
Definition: MaterialMapper.h:158
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:53
Trk::LayerTreeObject::pathInL0
float pathInL0
Definition: MaterialMapper.h:85
Trk::MaterialMapper::m_validationTreeDescription
std::string m_validationTreeDescription
validation tree description - second argument in TTree
Definition: MaterialMapper.h:272
Trk::VolumeTreeObject::path
float path
Definition: MaterialMapper.h:45
Trk::LayerTreeObject::hitPositionR
float hitPositionR[TRKDETDESCRTOOLS_MAXLAYERHITS]
Definition: MaterialMapper.h:95
Trk::MaterialMapper::m_mappedPathInX0
float m_mappedPathInX0
total mapped path in X0
Definition: MaterialMapper.h:281
Trk::SurfaceTreeObject::Z
float Z
Definition: MaterialMapper.h:159
Trk::LayerTreeObject::hitPathInX0
float hitPathInX0[TRKDETDESCRTOOLS_MAXLAYERHITS]
Definition: MaterialMapper.h:91
Trk::MaterialMapper::m_volumeValidation
bool m_volumeValidation
Definition: MaterialMapper.h:306
Trk::LayerTreeObject::tree
TTree * tree
Definition: MaterialMapper.h:98
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
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
Trk::LayerTreeObject::pathInX0
float pathInX0
Definition: MaterialMapper.h:84
initialize
void initialize()
Definition: run_EoverP.cxx:894
Trk::MaterialMapper::m_validationTree
TTree * m_validationTree
The validation tree.
Definition: MaterialMapper.h:270
Trk::SurfaceTreeObject::pathInL0
float pathInL0
Definition: MaterialMapper.h:157
Trk::MaterialMapper::m_mappedPathRho
float m_mappedPathRho
total mapped path times rho
Definition: MaterialMapper.h:283
Trk::SurfaceTreeObject::SurfaceTreeObject
SurfaceTreeObject(TString name, TString title)
Definition: MaterialMapper.h:165
CSV_InDetExporter.new
new
Definition: CSV_InDetExporter.py:145
Trk::MaterialMapper::m_volumeTreePrefix
std::string m_volumeTreePrefix
Definition: MaterialMapper.h:307
Trk::SurfaceTreeObject::surfaceHits
int surfaceHits
Definition: MaterialMapper.h:162
Trk::MaterialMapper::m_layerTreePrefix
std::string m_layerTreePrefix
Definition: MaterialMapper.h:313
Trk::LayerTreeObject::Z
float Z
Definition: MaterialMapper.h:87
Trk::VolumeTreeObject::VolumeTreeObject
VolumeTreeObject(TString name, TString title)
Definition: MaterialMapper.h:51
Trk::LayerTreeObject::correctionFactor
float correctionFactor
Definition: MaterialMapper.h:82
Trk::VolumeTreeObject::pathZARho
float pathZARho
Definition: MaterialMapper.h:48
Trk::VolumeTreeObject::VolumeTreeObject
VolumeTreeObject(const VolumeTreeObject &)=delete
Trk::SurfaceTreeObject
Definition: MaterialMapper.h:147
Trk::MaterialMapper::m_incidentSvc
ServiceHandle< IIncidentSvc > m_incidentSvc
Definition: MaterialMapper.h:259
Trk::SurfaceTreeObject::rho
float rho
Definition: MaterialMapper.h:160
Trk::VolumeTreeObject::pathInL0
float pathInL0
Definition: MaterialMapper.h:47
Trk::VolumeTreeObject::tree
TTree * tree
Definition: MaterialMapper.h:49
Trk::LayerTreeObject::path
float path
Definition: MaterialMapper.h:83
python.RingerConstants.Layer
Layer
Definition: RingerConstants.py:42
Trk::SurfaceTreeObject::loc2
float loc2
Definition: MaterialMapper.h:152
Trk::LayerTreeObject::hitPositionEta
float hitPositionEta[TRKDETDESCRTOOLS_MAXLAYERHITS]
Definition: MaterialMapper.h:96
Trk::MaterialMapper::m_layerFullTrees
std::map< const Trk::Layer *, LayerTreeObject * > m_layerFullTrees
Definition: MaterialMapper.h:315
Trk::LayerTreeObject::densedHitR
float densedHitR
Definition: MaterialMapper.h:77
Trk::MaterialMapper::m_materialSteps
int m_materialSteps
number of update positions
Definition: MaterialMapper.h:277
Trk::LayerTreeObject::layerHits
int layerHits
Definition: MaterialMapper.h:90
Trk::LayerTreeObject::densedHitY
float densedHitY
Definition: MaterialMapper.h:75
Trk::MaterialMapper::m_maxMappingEvents
unsigned int m_maxMappingEvents
Definition: MaterialMapper.h:264
Trk::LayerTreeObject::densedHits
int densedHits
Definition: MaterialMapper.h:80
GeoPrimitives.h
Trk::LayerTreeObject::A
float A
Definition: MaterialMapper.h:86
Trk::VolumeTreeObject::pathInX0
float pathInX0
Definition: MaterialMapper.h:46
Trk::MaterialMapper::m_processedEvents
unsigned int m_processedEvents
Definition: MaterialMapper.h:265
TRKDETDESCRTOOLS_MAXLAYERHITS
#define TRKDETDESCRTOOLS_MAXLAYERHITS
Definition: MaterialMapper.h:25
Trk::MaterialMapper::m_unmappedPathInX0
float m_unmappedPathInX0
total path in x0 in these events lost
Definition: MaterialMapper.h:285
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
covarianceTool.title
title
Definition: covarianceTool.py:542
AthAlgTool.h
Trk::MaterialMapper::m_mappedPathZARho
float m_mappedPathZARho
total mapped path times (Z/A)*rho
Definition: MaterialMapper.h:284
Trk::MaterialMapper::m_validationTreeFolder
std::string m_validationTreeFolder
stream/folder to for the TTree to be written out
Definition: MaterialMapper.h:273
Trk::SurfaceTreeObject::eta
float eta
Definition: MaterialMapper.h:153
Trk::SurfaceTreeObject::correctionFactor
float correctionFactor
Definition: MaterialMapper.h:154
Trk::SurfaceTreeObject::path
float path
Definition: MaterialMapper.h:155
Trk::LayerTreeObject::densedHitZ
float densedHitZ
Definition: MaterialMapper.h:76
IMaterialMapper.h
Trk::MaterialMapper::m_mappedPathInL0
float m_mappedPathInL0
total mapped path in L0
Definition: MaterialMapper.h:282
TRKDETDESCRTOOLS_MAXSTEPS
#define TRKDETDESCRTOOLS_MAXSTEPS
Definition: MaterialMapper.h:24
Trk::MaterialMapper::m_validationTreeName
std::string m_validationTreeName
validation tree name - to be accessed by this from root
Definition: MaterialMapper.h:271
Trk::MaterialMapper
Definition: MaterialMapper.h:204
Trk::AssociatedMaterial
Definition: AssociatedMaterial.h:33
Trk::MaterialMapper::m_surfaceValidation
bool m_surfaceValidation
Definition: MaterialMapper.h:318
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::LayerTreeObject
Definition: MaterialMapper.h:69
Trk::SurfaceTreeObject::tree
TTree * tree
Definition: MaterialMapper.h:163
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
find_data.full
full
Definition: find_data.py:27
Trk::MaterialMapper::m_totalMaterialTree
std::string m_totalMaterialTree
Definition: MaterialMapper.h:267
Trk::MaterialMapper::m_averagePhi
float m_averagePhi
average ogu
Definition: MaterialMapper.h:279
Trk::LayerTreeObject::operator=
LayerTreeObject & operator=(const LayerTreeObject &)=delete
Trk::VolumeTreeObject::phi
float phi
Definition: MaterialMapper.h:44
Trk::LayerTreeObject::densedHitPhi
float densedHitPhi
Definition: MaterialMapper.h:78
Trk::SurfaceTreeObject::SurfaceTreeObject
SurfaceTreeObject(const SurfaceTreeObject &)=delete
Trk::LayerTreeObject::hitPositionY
float hitPositionY[TRKDETDESCRTOOLS_MAXLAYERHITS]
Definition: MaterialMapper.h:93
Trk::VolumeTreeObject
Definition: MaterialMapper.h:39
Trk::SurfaceTreeObject::pathInX0
float pathInX0
Definition: MaterialMapper.h:156
Trk::MaterialMapper::m_surfaceTrees
std::map< const Trk::Layer *, SurfaceTreeObject * > m_surfaceTrees
Definition: MaterialMapper.h:320
Trk::VolumeTreeObject::operator=
VolumeTreeObject & operator=(const VolumeTreeObject &)=delete
Trk::LayerTreeObject::hitPositionZ
float hitPositionZ[TRKDETDESCRTOOLS_MAXLAYERHITS]
Definition: MaterialMapper.h:94
Trk::LayerTreeObject::rho
float rho
Definition: MaterialMapper.h:88
Trk::SurfaceTreeObject::loc1
float loc1
Definition: MaterialMapper.h:151
Trk::LayerTreeObject::LayerTreeObject
LayerTreeObject(const LayerTreeObject &)=delete
mapped
std::vector< std::string > mapped
Definition: hcg.cxx:51
Trk::VolumeTreeObject::eta
float eta
Definition: MaterialMapper.h:43
Trk::LayerTreeObject::LayerTreeObject
LayerTreeObject(TString name, TString title)
Definition: MaterialMapper.h:100
Trk::MaterialMapper::m_mappedPath
float m_mappedPath
total mapped path
Definition: MaterialMapper.h:280
Trk::IMaterialMapper
Definition: IMaterialMapper.h:37
AthAlgTool
Definition: AthAlgTool.h:26
Trk::MaterialMapper::m_averageEta
float m_averageEta
average eta
Definition: MaterialMapper.h:278
Trk::MaterialMapper::m_volumeTrees
std::map< const Trk::TrackingVolume *, VolumeTreeObject * > m_volumeTrees
Definition: MaterialMapper.h:308
checker_macros.h
Define macros for attributes used to control the static checker.
Trk::TrackingVolume
Definition: TrackingVolume.h:121
Trk::LayerTreeObject::hitPositionX
float hitPositionX[TRKDETDESCRTOOLS_MAXLAYERHITS]
Definition: MaterialMapper.h:92
Trk::MaterialMapper::m_materialAssociationType
int m_materialAssociationType
Definition: MaterialMapper.h:261
Trk::MaterialMapper::m_layerValidation
bool m_layerValidation
Definition: MaterialMapper.h:312
Trk::SurfaceTreeObject::operator=
SurfaceTreeObject & operator=(const SurfaceTreeObject &)=delete
Trk::Layer
Definition: Layer.h:73
ServiceHandle< IIncidentSvc >