ATLAS Offline Software
FPGATrackSimLayerStudyTool.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 
3 #ifndef FPGATrackSimLayerStudyTool_H
4 #define FPGATrackSimLayerStudyTool_H
5 
24 #include "GaudiKernel/ServiceHandle.h"
25 #include "GaudiKernel/ITHistSvc.h"
27 
28 #include "TGraph.h"
29 class TH1D;
30 class TH2D;
31 
35 
37 
38 
40  {
41  public:
42 
44  // AthAlgTool
45 
46  FPGATrackSimLayerStudyTool(const std::string &, const std::string &, const IInterface *);
47 
48  virtual StatusCode initialize() override;
49 
50  // This is done at the start of execution to create all the graphs
51  // ... also stores some of the configuration parameters for later use
55 
56  // Simple accessors for directory
57  const std::string dir() const {return m_dir;}
58 
59  // Takes the truthtracks as input and parses it into a useful form for later use
60  // (e.g. stores which bin the true track is in)
61  void parseTruthInfo ATLAS_NOT_THREAD_SAFE(std::vector<FPGATrackSimTruthTrack> const & truthtracks);
62  FPGATrackSimBinUtil::IdxSet& truthBin(unsigned stepnum) { return m_truthbin[stepnum]; }
63  std::vector<FPGATrackSimBinUtil::IdxSet>& truthBin() { return m_truthbin; }
64 
65  // Fill methods
66  void fillHitLevelInput(const FPGATrackSimHit* hit);
68  void fillBinningSummary ATLAS_NOT_THREAD_SAFE(const std::vector<std::shared_ptr<const FPGATrackSimHit>> &hits);
69 
70  // Error Checks
71  void sliceCheck();
72 
73  private:
75  // Handles
76  ServiceHandle<ITHistSvc> m_tHistSvc{this, "THistSvc", "THistSvc"};
77 
79  // Properties
80  Gaudi::Property<std::string> m_dir{this, "dir", {"/GENSCAN/"}, "String name of output directory"};
81  Gaudi::Property<double> m_phiScale{this, "phiScale", {}, "Scale for Delta Phi variable"};
82  Gaudi::Property<double> m_etaScale{this, "etaScale", {}, "Scale for Delta Eta variable"};
83  Gaudi::Property<double> m_drScale{this, "drScale", {}, "Scale for radius differences"};
84  Gaudi::Property<bool> m_plotAllBins{this, "plotAllBins", {false}, "Default is to plot only truth bin values, this set to plot all bins"};
85 
86  Gaudi::Property<double> m_d0pad{this, "D0Pad", 0.0, "Extra phi padding from d0 resolution"};
87  Gaudi::Property<double> m_phipad{this, "PhiPad", 0.0, "Extra phi padding from phi resolution"};
88  Gaudi::Property<double> m_qptpad{this, "QPtPad", 0.0, "Extra phi padding from q/pT resolution"};
89  Gaudi::Property<double> m_z0pad{this, "Z0Pad", 0.0, "Extra eta padding from z0 resolution"};
90  Gaudi::Property<double> m_etapad{this, "EtaPad", 0.0, "Extra eta padding from eta resolution"};
91 
93  // Pointer to binned hits
95 
97  // Parsed truth/info
98  bool m_isSingleParticle = false;
99  bool m_truthIsValid = false;
101  std::vector<FPGATrackSimBinUtil::IdxSet> m_truthbin;
103 
104  // plots are only filled for the truth bin if single particle sample
105  // this gives the distributions of the cut variables when they are
106  // reconstructed in the right bin
108 
109  // this flag governs if pair filter and pairset filter plots filled
110  bool m_binPlotsActive = false;
111 
113  // Data Flow Counters
114 
116  // Histograms
117  std::vector<TH2D *> m_rZ_allhits;
118  TH1D *m_truthpars_hists[5] = {0, 0, 0, 0, 0};
119 
120  TH1D *m_inputHits = 0;
121 
123  TH1D *m_binsFilled = 0;
124 
125  // residuals and shifts from truth bin center
126  std::vector<TH1D *> m_phiResidual;
127  std::vector<TH1D *> m_etaResidual;
128  std::vector<TH1D *> m_phiTrueBinShift;
129  std::vector<TH1D *> m_etaTrueBinShift;
130  int m_N_ptplot{5}; // for 2-d plots in pt slices
131  std::vector<TH2D *> m_phiResidual_v_r;
132  std::vector<TH2D *> m_etaResidual_v_r;
133  std::vector<TH2D *> m_phiScale_v_r;
134  std::vector<TH2D *> m_etaScale_v_r;
135 
136  TH1D *m_phiShift_road = 0;
137  TH1D *m_etaShift_road = 0;
138  TH2D *m_phiShift2D_road = 0;
139  TH2D *m_etaShift2D_road = 0;
140 
141  // step-by-step plot
142  std::vector<TH1D *> m_hitsPerStepBin;
143  TH1D * m_hitsPerLayer = 0;
144  TH2D * m_hitsPerLayer2D = 0;
146 
147  // distributions for efficiency monitoring
148  std::vector<std::string> m_distPlotClasses{"truth","ThrshNlayer","ThrshNlayerm1"}; // 0=truth distribution, 1=passes n-1 binning selection
149  std::vector<TH1D *> m_ptDist;
150  std::vector<TH1D *> m_etaDist;
151  std::vector<TH1D *> m_phiDist;
152  std::vector<TH1D *> m_d0Dist;
153  std::vector<TH1D *> m_z0Dist;
154 
155 
156 
157  private:
158 
159  // TTree for layer definitions studies
161  void ClearTreeVectors();
162 
163  TTree *m_bin_tree = nullptr; // output tree
164  std::vector<unsigned> m_bin_tree_bin; // 5 tracks parameter bin
165  std::vector<float> m_bin_tree_r;
166  std::vector<float> m_bin_tree_z;
167  std::vector<int> m_bin_tree_id;
168  std::vector<int> m_bin_tree_hash;
169  std::vector<int> m_bin_tree_layer;
170  std::vector<int> m_bin_tree_side;
171  std::vector<int> m_bin_tree_etamod;
172  std::vector<int> m_bin_tree_phimod;
173  std::vector<int> m_bin_tree_dettype;
174  std::vector<int> m_bin_tree_detzone;
175 
176  TTree *m_truth_tree = nullptr; // output tree
177  double m_truth_tree_phi{0.0};
178  double m_truth_tree_qOverPt{0.0};
179  double m_truth_tree_d0{0.0};
180  double m_truth_tree_z0{0.0};
181  double m_truth_tree_eta{0.0};
182  std::vector<double> m_truth_tree_parset;
183 
185  // make and register histogram or vector of histograms in one line...
186  template <typename HistType, typename... HistDef>
187  StatusCode makeAndRegHist(HistType *&ptr, HistDef... histargs)
188  {
189  ptr = new HistType(histargs...);
190  ATH_CHECK(m_tHistSvc->regHist(m_dir + ptr->GetName(), ptr));
191  return StatusCode::SUCCESS;
192  }
193 
194 
195  template <typename HistType, typename... HistDef>
196  StatusCode makeAndRegHistVector(std::vector<HistType*>& vec, unsigned len, const std::vector<std::string>* namevec, const char* namebase, HistDef... histargs)
197  {
198  if (vec.size()==0){
199  for (unsigned i = 0; i < len; i++) {
200  HistType *ptr = 0;
201  std::string name = std::string(namebase);
202  if (!namevec) {
203  name += std::to_string(i);
204  } else {
205  if (namevec->size()==len) {
206  name += (*namevec)[i];
207  } else {
208  return StatusCode::FAILURE;
209  }
210  }
211  ATH_CHECK(makeAndRegHist(ptr, name.c_str(), histargs...));
212  vec.push_back(ptr);
213  }
214  }
215  return StatusCode::SUCCESS;
216  }
217 
218  // Register a graph
219  StatusCode regGraph(TGraph *g) const { return m_tHistSvc->regGraph(m_dir + g->GetName(), g);}
220 
221  };
222 
223 #endif // FPGATrackSimLayerStudyTool_H
FPGATrackSimLayerStudyTool::m_d0pad
Gaudi::Property< double > m_d0pad
Definition: FPGATrackSimLayerStudyTool.h:86
FPGATrackSimLayerStudyTool::m_tHistSvc
ServiceHandle< ITHistSvc > m_tHistSvc
Definition: FPGATrackSimLayerStudyTool.h:76
FPGATrackSimLayerStudyTool::m_phiScale
Gaudi::Property< double > m_phiScale
Definition: FPGATrackSimLayerStudyTool.h:81
FPGATrackSimLayerStudyTool::m_phiScale_v_r
std::vector< TH2D * > m_phiScale_v_r
Definition: FPGATrackSimLayerStudyTool.h:133
FPGATrackSimLayerStudyTool::FPGATrackSimLayerStudyTool
FPGATrackSimLayerStudyTool(const std::string &, const std::string &, const IInterface *)
Definition: FPGATrackSimLayerStudyTool.cxx:23
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
FPGATrackSimLayerStudyTool::m_etapad
Gaudi::Property< double > m_etapad
Definition: FPGATrackSimLayerStudyTool.h:90
FPGATrackSimLayerStudyTool::m_etaTrueBinShift
std::vector< TH1D * > m_etaTrueBinShift
Definition: FPGATrackSimLayerStudyTool.h:129
TRTCalib_Extractor.hits
hits
Definition: TRTCalib_Extractor.py:35
FPGATrackSimLayerStudyTool::m_hitsPerLayer_bin
TH2D * m_hitsPerLayer_bin
Definition: FPGATrackSimLayerStudyTool.h:145
FPGATrackSimLayerStudyTool::m_etaScale_v_r
std::vector< TH2D * > m_etaScale_v_r
Definition: FPGATrackSimLayerStudyTool.h:134
FPGATrackSimLayerStudyTool::m_rZ_allhits
std::vector< TH2D * > m_rZ_allhits
Definition: FPGATrackSimLayerStudyTool.h:117
FPGATrackSimLayerStudyTool::m_phiResidual_v_r
std::vector< TH2D * > m_phiResidual_v_r
Definition: FPGATrackSimLayerStudyTool.h:131
FPGATrackSimTrackPars
Definition: FPGATrackSimTrackPars.h:22
FPGATrackSimLayerStudyTool::ATLAS_NOT_THREAD_SAFE
void parseTruthInfo ATLAS_NOT_THREAD_SAFE(std::vector< FPGATrackSimTruthTrack > const &truthtracks)
FPGATrackSimLayerStudyTool::m_phiResidual
std::vector< TH1D * > m_phiResidual
Definition: FPGATrackSimLayerStudyTool.h:126
FPGATrackSimLayerStudyTool::truthBin
FPGATrackSimBinUtil::IdxSet & truthBin(unsigned stepnum)
Definition: FPGATrackSimLayerStudyTool.h:62
FPGATrackSimLayerStudyTool::m_truth_tree
TTree * m_truth_tree
Definition: FPGATrackSimLayerStudyTool.h:176
FPGATrackSimLayerStudyTool::m_truth_tree_eta
double m_truth_tree_eta
Definition: FPGATrackSimLayerStudyTool.h:181
FPGATrackSimLayerStudyTool::initialize
virtual StatusCode initialize() override
Definition: FPGATrackSimLayerStudyTool.cxx:28
FPGATrackSimLayerStudyTool::m_binnedhits
const FPGATrackSimBinnedHits * m_binnedhits
Definition: FPGATrackSimLayerStudyTool.h:94
FPGATrackSimLayerStudyTool::m_truthIsValid
bool m_truthIsValid
Definition: FPGATrackSimLayerStudyTool.h:99
FPGATrackSimLayerStudyTool::bookTrees
StatusCode bookTrees()
Definition: FPGATrackSimLayerStudyTool.cxx:127
FPGATrackSimLayerStudyTool::m_bin_tree_etamod
std::vector< int > m_bin_tree_etamod
Definition: FPGATrackSimLayerStudyTool.h:171
FPGATrackSimLayerStudyTool::regGraph
StatusCode regGraph(TGraph *g) const
Definition: FPGATrackSimLayerStudyTool.h:219
FPGATrackSimLayerStudyTool::m_bin_tree_dettype
std::vector< int > m_bin_tree_dettype
Definition: FPGATrackSimLayerStudyTool.h:173
FPGATrackSimLayerStudyTool::m_bin_tree_hash
std::vector< int > m_bin_tree_hash
Definition: FPGATrackSimLayerStudyTool.h:168
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:9
FPGATrackSimLayerStudyTool::m_d0Dist
std::vector< TH1D * > m_d0Dist
Definition: FPGATrackSimLayerStudyTool.h:152
dbg::ptr
void * ptr(T *p)
Definition: SGImplSvc.cxx:74
FPGATrackSimLayerStudyTool::m_truthparset
FPGATrackSimBinUtil::ParSet m_truthparset
Definition: FPGATrackSimLayerStudyTool.h:102
FPGATrackSimBinnedHits.h
Binning Classes for GenScanTool.
FPGATrackSimLayerStudyTool::sliceCheck
void sliceCheck()
FPGATrackSimLayerStudyTool::registerHistograms
StatusCode registerHistograms(const FPGATrackSimBinnedHits *binnedhits, bool skipTruth)
Definition: FPGATrackSimLayerStudyTool.cxx:46
FPGATrackSimHit
Definition: FPGATrackSimHit.h:41
FPGATrackSimLayerStudyTool::truthBin
std::vector< FPGATrackSimBinUtil::IdxSet > & truthBin()
Definition: FPGATrackSimLayerStudyTool.h:63
FPGATrackSimLayerStudyTool::fillHitLevelInput
void fillHitLevelInput(const FPGATrackSimHit *hit)
Definition: FPGATrackSimLayerStudyTool.cxx:255
FPGATrackSimLayerStudyTool::m_N_ptplot
int m_N_ptplot
Definition: FPGATrackSimLayerStudyTool.h:130
FPGATrackSimLayerStudyTool::m_truthbin
std::vector< FPGATrackSimBinUtil::IdxSet > m_truthbin
Definition: FPGATrackSimLayerStudyTool.h:101
FPGATrackSimLayerStudyTool::m_truth_tree_d0
double m_truth_tree_d0
Definition: FPGATrackSimLayerStudyTool.h:179
FPGATrackSimLayerStudyTool::m_isSingleParticle
bool m_isSingleParticle
Definition: FPGATrackSimLayerStudyTool.h:98
FPGATrackSimLayerStudyTool::m_z0pad
Gaudi::Property< double > m_z0pad
Definition: FPGATrackSimLayerStudyTool.h:89
FPGATrackSimLayerStudyTool::m_etaShift2D_road
TH2D * m_etaShift2D_road
Definition: FPGATrackSimLayerStudyTool.h:139
FPGATrackSimLayerStudyTool::m_ptDist
std::vector< TH1D * > m_ptDist
Definition: FPGATrackSimLayerStudyTool.h:149
FPGATrackSimLayerStudyTool::m_bin_tree_detzone
std::vector< int > m_bin_tree_detzone
Definition: FPGATrackSimLayerStudyTool.h:174
lumiFormat.i
int i
Definition: lumiFormat.py:85
FPGATrackSimLayerStudyTool::allocateDataFlowCounters
void allocateDataFlowCounters()
FPGATrackSimLayerStudyTool::setBinPlotsActive
void setBinPlotsActive(const FPGATrackSimBinUtil::IdxSet &idx)
Definition: FPGATrackSimLayerStudyTool.cxx:365
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
FPGATrackSimLayerStudyTool::ATLAS_NOT_THREAD_SAFE
void fillBinLevelOutput ATLAS_NOT_THREAD_SAFE(const FPGATrackSimBinUtil::IdxSet &idx, const FPGATrackSimBinnedHits::BinEntry &data)
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
FPGATrackSimBinUtil.h
Binning Utilities for GenScanTool.
FPGATrackSimLayerStudyTool::m_phiTrueBinShift
std::vector< TH1D * > m_phiTrueBinShift
Definition: FPGATrackSimLayerStudyTool.h:128
FPGATrackSimLayerStudyTool::m_bin_tree_bin
std::vector< unsigned > m_bin_tree_bin
Definition: FPGATrackSimLayerStudyTool.h:164
AthAlgTool.h
FPGATrackSimLayerStudyTool::m_phiShift_road
TH1D * m_phiShift_road
Definition: FPGATrackSimLayerStudyTool.h:136
FPGATrackSimLayerStudyTool::ClearTreeVectors
void ClearTreeVectors()
Definition: FPGATrackSimLayerStudyTool.cxx:154
FPGATrackSimLayerStudyTool::m_hitsPerStepBin
std::vector< TH1D * > m_hitsPerStepBin
Definition: FPGATrackSimLayerStudyTool.h:142
FPGATrackSimLayerStudyTool::m_etaResidual
std::vector< TH1D * > m_etaResidual
Definition: FPGATrackSimLayerStudyTool.h:127
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
FPGATrackSimLayerStudyTool::m_hitsPerLayer2D
TH2D * m_hitsPerLayer2D
Definition: FPGATrackSimLayerStudyTool.h:144
FPGATrackSimLayerStudyTool::m_etaShift_road
TH1D * m_etaShift_road
Definition: FPGATrackSimLayerStudyTool.h:137
FPGATrackSimLayerStudyTool::m_drScale
Gaudi::Property< double > m_drScale
Definition: FPGATrackSimLayerStudyTool.h:83
FPGATrackSimLayerStudyTool::makeAndRegHist
StatusCode makeAndRegHist(HistType *&ptr, HistDef... histargs)
Definition: FPGATrackSimLayerStudyTool.h:187
FPGATrackSimLayerStudyTool::m_truthpars
FPGATrackSimTrackPars m_truthpars
Definition: FPGATrackSimLayerStudyTool.h:100
FPGATrackSimBinUtil::ParSet
Definition: FPGATrackSimBinUtil.h:45
FPGATrackSimLayerStudyTool::m_bin_tree_r
std::vector< float > m_bin_tree_r
Definition: FPGATrackSimLayerStudyTool.h:165
FPGATrackSimLayerStudyTool::m_etaScale
Gaudi::Property< double > m_etaScale
Definition: FPGATrackSimLayerStudyTool.h:82
FPGATrackSimLayerStudyTool::m_bin_tree_z
std::vector< float > m_bin_tree_z
Definition: FPGATrackSimLayerStudyTool.h:166
FPGATrackSimLayerStudyTool::m_z0Dist
std::vector< TH1D * > m_z0Dist
Definition: FPGATrackSimLayerStudyTool.h:153
FPGATrackSimLayerStudyTool::m_etaResidual_v_r
std::vector< TH2D * > m_etaResidual_v_r
Definition: FPGATrackSimLayerStudyTool.h:132
SampleType::skipTruth
@ skipTruth
FPGATrackSimBinnedHits::BinEntry
Definition: FPGATrackSimBinnedHits.h:70
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
FPGATrackSimLayerStudyTool::m_truthpars_hists
TH1D * m_truthpars_hists[5]
Definition: FPGATrackSimLayerStudyTool.h:118
FPGATrackSimLayerStudyTool::m_inputHits
TH1D * m_inputHits
Definition: FPGATrackSimLayerStudyTool.h:120
FPGATrackSimHit.h
: FPGATrackSim-specific class to represent an hit in the detector.
FPGATrackSimLayerStudyTool::m_truth_tree_parset
std::vector< double > m_truth_tree_parset
Definition: FPGATrackSimLayerStudyTool.h:182
FPGATrackSimLayerStudyTool::m_binsFilledCnt
int m_binsFilledCnt
Definition: FPGATrackSimLayerStudyTool.h:122
FPGATrackSimLayerStudyTool::m_distPlotClasses
std::vector< std::string > m_distPlotClasses
Definition: FPGATrackSimLayerStudyTool.h:148
FPGATrackSimLayerStudyTool::m_truth_tree_z0
double m_truth_tree_z0
Definition: FPGATrackSimLayerStudyTool.h:180
FPGATrackSimLayerStudyTool::m_bin_tree_id
std::vector< int > m_bin_tree_id
Definition: FPGATrackSimLayerStudyTool.h:167
FPGATrackSimLayerStudyTool::m_phiShift2D_road
TH2D * m_phiShift2D_road
Definition: FPGATrackSimLayerStudyTool.h:138
FPGATrackSimLayerStudyTool::m_qptpad
Gaudi::Property< double > m_qptpad
Definition: FPGATrackSimLayerStudyTool.h:88
FPGATrackSimLayerStudyTool
Definition: FPGATrackSimLayerStudyTool.h:40
FPGATrackSimLayerStudyTool::ATLAS_NOT_THREAD_SAFE
void fillBinningSummary ATLAS_NOT_THREAD_SAFE(const std::vector< std::shared_ptr< const FPGATrackSimHit >> &hits)
FPGATrackSimLayerStudyTool::m_bin_tree_side
std::vector< int > m_bin_tree_side
Definition: FPGATrackSimLayerStudyTool.h:170
FPGATrackSimLayerStudyTool::m_bin_tree_phimod
std::vector< int > m_bin_tree_phimod
Definition: FPGATrackSimLayerStudyTool.h:172
FPGATrackSimLayerStudyTool::m_etaDist
std::vector< TH1D * > m_etaDist
Definition: FPGATrackSimLayerStudyTool.h:150
FPGATrackSimLayerStudyTool::m_truth_tree_qOverPt
double m_truth_tree_qOverPt
Definition: FPGATrackSimLayerStudyTool.h:178
FPGATrackSimLayerStudyTool::m_dir
Gaudi::Property< std::string > m_dir
Definition: FPGATrackSimLayerStudyTool.h:80
FPGATrackSimLayerStudyTool::m_phipad
Gaudi::Property< double > m_phipad
Definition: FPGATrackSimLayerStudyTool.h:87
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
FPGATrackSimLayerStudyTool::m_truth_tree_phi
double m_truth_tree_phi
Definition: FPGATrackSimLayerStudyTool.h:177
FPGATrackSimLayerStudyTool::dir
const std::string dir() const
Definition: FPGATrackSimLayerStudyTool.h:57
FPGATrackSimLayerStudyTool::m_plotAllBins
Gaudi::Property< bool > m_plotAllBins
Definition: FPGATrackSimLayerStudyTool.h:84
FPGATrackSimLayerStudyTool::resetDataFlowCounters
void resetDataFlowCounters()
FPGATrackSimLayerStudyTool::makeAndRegHistVector
StatusCode makeAndRegHistVector(std::vector< HistType * > &vec, unsigned len, const std::vector< std::string > *namevec, const char *namebase, HistDef... histargs)
Definition: FPGATrackSimLayerStudyTool.h:196
AthAlgTool
Definition: AthAlgTool.h:26
FPGATrackSimLayerStudyTool::m_binsFilled
TH1D * m_binsFilled
Definition: FPGATrackSimLayerStudyTool.h:123
FPGATrackSimBinUtil::IdxSet
Definition: FPGATrackSimBinUtil.h:50
FPGATrackSimTruthTrack.h
FPGATrackSimLayerStudyTool::m_bin_tree_layer
std::vector< int > m_bin_tree_layer
Definition: FPGATrackSimLayerStudyTool.h:169
FPGATrackSimTrackPars.h
Structs that store the 5 track parameters.
FPGATrackSimLayerStudyTool::m_bin_tree
TTree * m_bin_tree
Definition: FPGATrackSimLayerStudyTool.h:163
FPGATrackSimLayerStudyTool::m_phiDist
std::vector< TH1D * > m_phiDist
Definition: FPGATrackSimLayerStudyTool.h:151
FPGATrackSimLayerStudyTool::m_binPlotsActive
bool m_binPlotsActive
Definition: FPGATrackSimLayerStudyTool.h:110
FPGATrackSimBinnedHits
Definition: FPGATrackSimBinnedHits.h:50
ServiceHandle< ITHistSvc >
FPGATrackSimLayerStudyTool::m_hitsPerLayer
TH1D * m_hitsPerLayer
Definition: FPGATrackSimLayerStudyTool.h:143