ATLAS Offline Software
TRTHitAnalysis.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "TRTHitAnalysis.h"
6 
7 // Section of includes for TRT tests
10 
11 #include "TH1.h"
12 #include "TTree.h"
13 #include "TString.h"
14 
15 #include <algorithm>
16 #include <math.h>
17 #include <functional>
18 #include <iostream>
19 
20 TRTHitAnalysis::TRTHitAnalysis(const std::string& name, ISvcLocator* pSvcLocator)
21  : AthAlgorithm(name, pSvcLocator)
22  , m_h_TRT_x(0)
23  , m_h_TRT_y(0)
24  , m_h_TRT_z(0)
25  , m_h_TRT_r(0)
26  , m_h_TRT_xy(0)
27  , m_h_TRT_zr(0)
28  , m_h_TRT_time_photons(0)
29  , m_h_TRT_time_nonphotons(0)
30  , m_h_TRT_edep_photons(0)
31  , m_h_TRT_edep_nonphotons(0)
32  , m_h_TRT_kine_photons(0)
33  , m_h_TRT_kine_nonphotons(0)
34  , m_h_TRT_barcode(0)
35  , m_TRT_x(0)
36  , m_TRT_y(0)
37  , m_TRT_z(0)
38  , m_TRT_r(0)
39  , m_TRT_time_photons(0)
40  , m_TRT_time_nonphotons(0)
41  , m_TRT_edep_photons(0)
42  , m_TRT_edep_nonphotons(0)
43  , m_TRT_kine_photons(0)
44  , m_TRT_kine_nonphotons(0)
45  , m_TRT_barcode(0)
46 
47  , m_tree(0)
48  , m_path("/TRTHitAnalysis/")
49  , m_ntupleFileName("/TRTHitAnalysis/")
50  , m_thistSvc("THistSvc", name)
51 {
52  declareProperty("NtupleFileName", m_ntupleFileName);
53  declareProperty("HistPath", m_path);
54 }
55 
56 
58  ATH_MSG_DEBUG( "Initializing TRTHitAnalysis" );
59 
60  // Grab the Ntuple and histogramming service for the tree
61  CHECK(m_thistSvc.retrieve());
62 
64  m_h_TRT_x = new TH1D("h_TRT_x","hits_x", 100,-1100, 1100);
65  m_h_TRT_x->StatOverflows();
66  CHECK(m_thistSvc->regHist(m_path + m_h_TRT_x->GetName(), m_h_TRT_x));
67 
68  m_h_TRT_y = new TH1D("h_TRT_y", "hits_y", 100,-1100,1100);
69  m_h_TRT_y->StatOverflows();
70  CHECK(m_thistSvc->regHist(m_path + m_h_TRT_y->GetName(), m_h_TRT_y));
71 
72  m_h_TRT_z = new TH1D("h_TRT_z", "hits_z", 100,-3000,3000);
73  m_h_TRT_z->StatOverflows();
74  CHECK(m_thistSvc->regHist(m_path + m_h_TRT_z->GetName(), m_h_TRT_z));
75 
76  m_h_TRT_r = new TH1D("h_TRT_r", "hits_r", 100,500,1100);
77  m_h_TRT_r->StatOverflows();
78  CHECK(m_thistSvc->regHist(m_path + m_h_TRT_r->GetName(), m_h_TRT_r));
79 
80  m_h_TRT_xy = new TH2D("h_TRT_xy", "xy", 100,-1100.,1100.,100, -1100., 1100.);
81  m_h_TRT_xy->StatOverflows();
82  CHECK(m_thistSvc->regHist( m_path+m_h_TRT_xy->GetName(), m_h_TRT_xy));
83 
84  m_h_TRT_zr = new TH2D("h_TRT_zr", "zr", 100,-3000,3000,100,500.,1100.);
85  m_h_TRT_zr->StatOverflows();
86  CHECK(m_thistSvc->regHist( m_path+m_h_TRT_zr->GetName(), m_h_TRT_zr));
87 
88  m_h_TRT_time_photons = new TH1D("h_TRT_time_photons", "hits_time_photons", 100,0,500);
89  m_h_TRT_time_photons->StatOverflows();
91 
92  m_h_TRT_time_nonphotons = new TH1D("h_TRT_time_nonphotons", "hits_time_nonphotons", 100,0,500);
93  m_h_TRT_time_nonphotons->StatOverflows();
95 
96  m_h_TRT_edep_photons = new TH1D("h_TRT_edep_photons", "hits_edep_photons", 100,0,500);
97  m_h_TRT_edep_photons->StatOverflows();
99 
100  m_h_TRT_edep_nonphotons = new TH1D("TRT_edep_nonphotons", "hits_edep_nonphotons", 100,0,500);
101  m_h_TRT_edep_nonphotons->StatOverflows();
103 
104  m_h_TRT_kine_photons = new TH1D("h_TRT_kine_photons", "hits_kine_photons", 100,0,2);
105  m_h_TRT_kine_photons->StatOverflows();
107 
108  m_h_TRT_kine_nonphotons = new TH1D("h_TRT_kine_nonphotons", "hits_kine_nonphotons", 100,0,1000);
109  m_h_TRT_kine_nonphotons->StatOverflows();
111 
112  m_h_TRT_barcode = new TH1D("h_TRT_barcode", "hits_barcode", 100,-500,300000);
113  m_h_TRT_barcode->StatOverflows();
114  CHECK(m_thistSvc->regHist(m_path + m_h_TRT_barcode->GetName(), m_h_TRT_barcode));
115 
117  m_tree = new TTree("TRT","TRT");
118  std::string fullNtupleName = "/" + m_ntupleFileName + "/";
119  CHECK(m_thistSvc->regTree(fullNtupleName,m_tree));
120 
121  if (m_tree) {
122  m_tree->Branch("x", &m_TRT_x);
123  m_tree->Branch("y", &m_TRT_y);
124  m_tree->Branch("z", &m_TRT_z);
125  m_tree->Branch("r", &m_TRT_r);
126  m_tree->Branch("time_photons", &m_TRT_time_photons);
127  m_tree->Branch("time_nonphotons", &m_TRT_time_nonphotons);
128  m_tree->Branch("EnergyDeposit_photons", &m_TRT_edep_photons);
129  m_tree->Branch("EnergyDeposit_nonphotons", &m_TRT_edep_nonphotons);
130  m_tree->Branch("KineticEnergy_photons", &m_TRT_kine_photons);
131  m_tree->Branch("KineticEnergy_nonphotons", &m_TRT_kine_nonphotons);
132  m_tree->Branch("barcode", &m_TRT_barcode);
133  }
134  else {
135  ATH_MSG_ERROR("No tree found!");
136  }
137 
138  return StatusCode::SUCCESS;
139 }
140 
141 
143  ATH_MSG_DEBUG( "In TRTHitAnalysis::execute()" );
144 
145  m_TRT_x->clear();
146  m_TRT_y->clear();
147  m_TRT_z->clear();
148  m_TRT_r->clear();
149  m_TRT_time_photons->clear();
150  m_TRT_time_nonphotons->clear();
151  m_TRT_edep_photons->clear();
152  m_TRT_edep_nonphotons->clear();
153  m_TRT_kine_photons->clear();
154  m_TRT_kine_nonphotons->clear();
155  m_TRT_barcode->clear();
156 
157  const TRTUncompressedHitCollection* p_collection;
158  if (evtStore()->retrieve(p_collection, "TRTUncompressedHits") == StatusCode::SUCCESS) {
159  for (TRTUncompressedHitConstIter i_hit = p_collection->begin(); i_hit != p_collection->end(); ++i_hit) {
160  GeoTRTUncompressedHit ghit(*i_hit);
161  HepGeom::Point3D<double> p = ghit.getGlobalPosition();
162 
163  m_h_TRT_x->Fill(p.x());
164  m_h_TRT_y->Fill(p.y());
165  m_h_TRT_z->Fill(p.z());
166  m_h_TRT_r->Fill(p.perp());
167  m_h_TRT_xy->Fill(p.x(), p.y());
168  m_h_TRT_zr->Fill(p.z(),sqrt(pow(p.x(),2)+pow(p.y(),2)));
169  m_h_TRT_barcode->Fill(HepMC::barcode(i_hit->particleLink()));
170 
171  m_TRT_x->push_back(p.x());
172  m_TRT_y->push_back(p.y());
173  m_TRT_z->push_back(p.z());
174  m_TRT_r->push_back(p.perp());
175  m_TRT_barcode->push_back(HepMC::barcode(i_hit->particleLink()));
176 
177  int particleId(i_hit->GetParticleEncoding());
178  if(particleId == 22 || static_cast<int>(std::abs(particleId)/100000)==41 || static_cast<int>(std::abs(particleId)/10000000)==1) {
179  m_h_TRT_time_photons->Fill(i_hit->GetGlobalTime());
180  m_h_TRT_edep_photons->Fill(i_hit->GetEnergyDeposit());
181  m_h_TRT_kine_photons->Fill(i_hit->GetKineticEnergy());
182  m_TRT_time_photons->push_back(i_hit->GetGlobalTime());
183  m_TRT_edep_photons->push_back(i_hit->GetEnergyDeposit());
184  m_TRT_kine_photons->push_back(i_hit->GetKineticEnergy());
185  }
186  else {
187  m_h_TRT_time_nonphotons->Fill(i_hit->GetGlobalTime());
188  m_h_TRT_edep_nonphotons->Fill(i_hit->GetEnergyDeposit());
189  m_h_TRT_kine_nonphotons->Fill(i_hit->GetKineticEnergy());
190  m_TRT_time_nonphotons->push_back(i_hit->GetGlobalTime());
191  m_TRT_edep_nonphotons->push_back(i_hit->GetEnergyDeposit());
192  m_TRT_kine_nonphotons->push_back(i_hit->GetKineticEnergy());
193  }
194  } // End while hits
195  }
196 
197  if (m_tree) m_tree->Fill();
198 
199  return StatusCode::SUCCESS;
200 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
TH2::Fill
int Fill(double, double)
Definition: rootspy.cxx:382
TRTHitAnalysis::m_TRT_z
std::vector< float > * m_TRT_z
Definition: TRTHitAnalysis.h:53
TRTHitAnalysis::m_TRT_time_nonphotons
std::vector< float > * m_TRT_time_nonphotons
Definition: TRTHitAnalysis.h:56
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
TRTHitAnalysis::m_h_TRT_r
TH1 * m_h_TRT_r
Definition: TRTHitAnalysis.h:40
TRTHitAnalysis::m_h_TRT_kine_photons
TH1 * m_h_TRT_kine_photons
Definition: TRTHitAnalysis.h:47
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
TRTHitAnalysis::m_h_TRT_x
TH1 * m_h_TRT_x
Some variables.
Definition: TRTHitAnalysis.h:37
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
AtlasHitsVector
Definition: AtlasHitsVector.h:33
TH1D
Definition: rootspy.cxx:342
TRTHitAnalysis::initialize
virtual StatusCode initialize()
Definition: TRTHitAnalysis.cxx:57
TRTHitAnalysis::m_h_TRT_barcode
TH1 * m_h_TRT_barcode
Definition: TRTHitAnalysis.h:49
GeoTRTUncompressedHit.h
TRTHitAnalysis::m_h_TRT_time_nonphotons
TH1 * m_h_TRT_time_nonphotons
Definition: TRTHitAnalysis.h:44
AtlasHitsVector::begin
const_iterator begin() const
Definition: AtlasHitsVector.h:131
TRTHitAnalysis::m_TRT_kine_nonphotons
std::vector< float > * m_TRT_kine_nonphotons
Definition: TRTHitAnalysis.h:60
TRTHitAnalysis::m_TRT_x
std::vector< float > * m_TRT_x
Definition: TRTHitAnalysis.h:51
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
TRTHitAnalysis.h
TRTHitAnalysis::m_TRT_barcode
std::vector< float > * m_TRT_barcode
Definition: TRTHitAnalysis.h:61
TRTHitAnalysis::m_ntupleFileName
std::string m_ntupleFileName
Definition: TRTHitAnalysis.h:65
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TRTHitAnalysis::m_thistSvc
ServiceHandle< ITHistSvc > m_thistSvc
Definition: TRTHitAnalysis.h:66
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TRTHitAnalysis::m_h_TRT_z
TH1 * m_h_TRT_z
Definition: TRTHitAnalysis.h:39
HepMC::barcode
int barcode(const T *p)
Definition: Barcode.h:16
TRTHitAnalysis::m_TRT_y
std::vector< float > * m_TRT_y
Definition: TRTHitAnalysis.h:52
m_path
std::string m_path
the path being used
Definition: OutputStreamData.cxx:88
TRTUncompressedHitConstIter
AtlasHitsVector< TRTUncompressedHit >::const_iterator TRTUncompressedHitConstIter
Definition: TRTUncompressedHitCollection.h:18
TRTHitAnalysis::m_tree
TTree * m_tree
Definition: TRTHitAnalysis.h:63
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
TH2D
Definition: rootspy.cxx:430
TRTHitAnalysis::m_h_TRT_edep_nonphotons
TH1 * m_h_TRT_edep_nonphotons
Definition: TRTHitAnalysis.h:46
TH1::Fill
int Fill(double)
Definition: rootspy.cxx:285
AthAlgorithm
Definition: AthAlgorithm.h:47
TRTHitAnalysis::m_h_TRT_xy
TH2 * m_h_TRT_xy
Definition: TRTHitAnalysis.h:41
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
TRTHitAnalysis::m_h_TRT_zr
TH2 * m_h_TRT_zr
Definition: TRTHitAnalysis.h:42
TRTHitAnalysis::m_TRT_kine_photons
std::vector< float > * m_TRT_kine_photons
Definition: TRTHitAnalysis.h:59
TRTHitAnalysis::TRTHitAnalysis
TRTHitAnalysis(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TRTHitAnalysis.cxx:20
TRTHitAnalysis::execute
virtual StatusCode execute()
Definition: TRTHitAnalysis.cxx:142
TRTUncompressedHitCollection.h
TRTHitAnalysis::m_TRT_edep_nonphotons
std::vector< float > * m_TRT_edep_nonphotons
Definition: TRTHitAnalysis.h:58
AtlasHitsVector::end
const_iterator end() const
Definition: AtlasHitsVector.h:134
GeoTRTUncompressedHit
Definition: GeoTRTUncompressedHit.h:25
TRTHitAnalysis::m_h_TRT_kine_nonphotons
TH1 * m_h_TRT_kine_nonphotons
Definition: TRTHitAnalysis.h:48
TRTHitAnalysis::m_h_TRT_edep_photons
TH1 * m_h_TRT_edep_photons
Definition: TRTHitAnalysis.h:45
TRTHitAnalysis::m_h_TRT_time_photons
TH1 * m_h_TRT_time_photons
Definition: TRTHitAnalysis.h:43
TRTHitAnalysis::m_TRT_r
std::vector< float > * m_TRT_r
Definition: TRTHitAnalysis.h:54
TRTHitAnalysis::m_TRT_edep_photons
std::vector< float > * m_TRT_edep_photons
Definition: TRTHitAnalysis.h:57
GeoTRTUncompressedHit::getGlobalPosition
HepGeom::Point3D< double > getGlobalPosition() const
TRTHitAnalysis::m_path
std::string m_path
Definition: TRTHitAnalysis.h:64
TRTHitAnalysis::m_TRT_time_photons
std::vector< float > * m_TRT_time_photons
Definition: TRTHitAnalysis.h:55
TRTHitAnalysis::m_h_TRT_y
TH1 * m_h_TRT_y
Definition: TRTHitAnalysis.h:38