ATLAS Offline Software
TrackRecordAnalysis.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "TrackRecordAnalysis.h"
6 
7 // Section of includes for TrackRecord tests
10 #include "CLHEP/Vector/LorentzVector.h"
11 
12 #include "TH1.h"
13 #include "TTree.h"
14 #include "TString.h"
15 
16 #include <algorithm>
17 #include <math.h>
18 #include <functional>
19 #include <iostream>
20 #include <stdio.h>
21 
22 TrackRecordAnalysis::TrackRecordAnalysis(const std::string& name, ISvcLocator* pSvcLocator)
23  : AthAlgorithm(name, pSvcLocator)
24  , m_h_hits_x(0)
25  , m_h_hits_y(0)
26  , m_h_hits_z(0)
27  , m_h_hits_r(0)
28  , m_h_xy(0)
29  , m_h_zr(0)
30  , m_h_hits_eta(0)
31  , m_h_hits_phi(0)
32  , m_h_hits_px(0)
33  , m_h_hits_py(0)
34  , m_h_hits_pz(0)
35  , m_h_hits_pt(0)
36  , m_h_time(0)
37  , m_h_edep(0)
38  , m_h_pdg(0)
39  , m_x(0)
40  , m_y(0)
41  , m_z(0)
42  , m_r(0)
43  , m_eta(0)
44  , m_phi(0)
45  , m_px(0)
46  , m_py(0)
47  , m_pz(0)
48  , m_pt(0)
49  , m_time(0)
50  , m_edep(0)
51  , m_pdg(0)
52 
53  , m_collection("CaloEntryLayer")
54 
55  , m_tree(0)
56  , m_ntupleFileName("/TrackRecordAnalysis/")
57  , m_path("/TrackRecordAnalysis/")
58  , m_thistSvc("THistSvc", name)
59 {
60  declareProperty("CollectionName", m_collection="CaloEntryLayer");
61  declareProperty("NtupleFileName", m_ntupleFileName);
62  declareProperty("HistPath", m_path);
63 }
64 
65 
67  ATH_MSG_DEBUG( "Initializing TrackRecordAnalysis" );
68 
69  std::string detName("CaloEntry");
70  std::string ntupName("TrackRecordCaloEntry");
71 
72  if (m_collection == "CaloEntryLayer") {
73  detName="CaloEntry";
74  ntupName="TrackRecordCaloEntry";
75  }
76  else if (m_collection == "MuonEntryLayer") {
77  detName="MuonEntry";
78  ntupName="TrackRecordMuonEntry";
79  }
80  else if (m_collection == "MuonExitLayer") {
81  detName="MuonExit";
82  ntupName="TrackRecordMuonExit";
83  }
84  else {
85  ATH_MSG_ERROR("TrackRecordAnalysis for "<< name() << "not supported !!! \n");
86  return StatusCode::FAILURE;
87  }
88 
89  std::cout << "Name " << name() << std::endl;
90 
91  //Grab the Ntuple and histogramming service for the tree
92  CHECK(m_thistSvc.retrieve());
93 
94  float x_down = -5000;
95  float x_up = 5000;
96  float radius = 4500;
97  float eta_down = -5.8;
98  float eta_up = 5.8;
99  float z_down = -7000;
100  float z_up = 7000;
101  if (detName == "CaloEntry") {
102  x_down = -1180;
103  x_up = 1180;
104  radius = 1200;
105  eta_down = - 5.6;
106  eta_up = 5.6;
107  z_down = -3700;
108  z_up = 3700;
109  }
110 
112  m_h_hits_x = new TH1D((detName+"_x").c_str(),"hits_x", 100,x_down, x_up);
113  m_h_hits_x->StatOverflows();
114  CHECK(m_thistSvc->regHist(m_path + m_h_hits_x->GetName(), m_h_hits_x));
115 
116  m_h_hits_y = new TH1D((detName+"_y").c_str(), "hits_y", 100,x_down,x_up);
117  m_h_hits_y->StatOverflows();
118  CHECK(m_thistSvc->regHist(m_path + m_h_hits_y->GetName(), m_h_hits_y));
119 
120  m_h_hits_z = new TH1D((detName+"_z").c_str(), "hits_z", 100,z_down,z_up);
121  m_h_hits_z->StatOverflows();
122  CHECK(m_thistSvc->regHist(m_path + m_h_hits_z->GetName(), m_h_hits_z));
123 
124  m_h_hits_r = new TH1D((detName+"_r").c_str(), "hits_r", 100,0,radius);
125  m_h_hits_r->StatOverflows();
126  CHECK(m_thistSvc->regHist(m_path + m_h_hits_r->GetName(), m_h_hits_r));
127 
128  m_h_xy = new TH2D((detName+"_xy").c_str(), "xy", 100,x_down,x_up,100, x_down, x_up);
129  m_h_xy->StatOverflows();
130  CHECK(m_thistSvc->regHist( m_path+m_h_xy->GetName(), m_h_xy));
131 
132  m_h_zr = new TH2D((detName+"_zr").c_str(), "zr", 100,z_down,z_up,100, 0., radius);
133  m_h_zr->StatOverflows();
134  CHECK(m_thistSvc->regHist( m_path+m_h_zr->GetName(), m_h_zr));
135 
136  m_h_hits_eta = new TH1D((detName+"_eta").c_str(), "hits_eta", 100,eta_down,eta_up);
137  m_h_hits_eta->StatOverflows();
138  CHECK(m_thistSvc->regHist(m_path + m_h_hits_eta->GetName(), m_h_hits_eta));
139 
140  m_h_hits_phi = new TH1D((detName+"_phi").c_str(), "hits_phi", 100,-3.1416,3.1416);
141  m_h_hits_phi->StatOverflows();
142  CHECK(m_thistSvc->regHist(m_path + m_h_hits_phi->GetName(), m_h_hits_phi));
143 
144  m_h_hits_px = new TH1D((detName+"_px").c_str(),"Px", 100, -1500, 1500);
145  m_h_hits_px->StatOverflows();
146  CHECK(m_thistSvc->regHist(m_path + m_h_hits_px->GetName(), m_h_hits_px));
147 
148  m_h_hits_py = new TH1D((detName+"_py").c_str(), "Py", 100,-1500,1500);
149  m_h_hits_py->StatOverflows();
150  CHECK(m_thistSvc->regHist(m_path + m_h_hits_py->GetName(), m_h_hits_py));
151 
152  m_h_hits_pz = new TH1D((detName+"_pz").c_str(), "Pz", 100,-1500,1500);
153  m_h_hits_pz->StatOverflows();
154  CHECK(m_thistSvc->regHist(m_path + m_h_hits_pz->GetName(), m_h_hits_pz));
155 
156  m_h_hits_pt = new TH1D((detName+"_pt").c_str(), "hits_pt", 100,0,2500);
157  m_h_hits_pt->StatOverflows();
158  CHECK(m_thistSvc->regHist(m_path + m_h_hits_pt->GetName(), m_h_hits_pt));
159 
160  m_h_time = new TH1D((detName+"_time").c_str(),"time", 100,0, 250);
161  m_h_time->StatOverflows();
162  CHECK(m_thistSvc->regHist(m_path + m_h_time->GetName(), m_h_time));
163 
164  m_h_edep = new TH1D((detName+"_edep").c_str(), "energy", 100,0,7500);
165  m_h_edep->StatOverflows();
166  CHECK(m_thistSvc->regHist(m_path + m_h_edep->GetName(), m_h_edep));
167 
168  m_h_pdg = new TH1D((detName+"_pdg").c_str(), "pdg", 100,-1000,1000);
169  m_h_pdg->StatOverflows();
170  CHECK(m_thistSvc->regHist(m_path + m_h_pdg->GetName(), m_h_pdg));
171 
173  m_tree = new TTree(ntupName.c_str(), ntupName.c_str());
174  std::string fullNtupleName = "/" + m_ntupleFileName + "/" + detName;
175  CHECK(m_thistSvc->regTree(fullNtupleName,m_tree));
176 
177  if (m_tree){
178  m_tree->Branch("x", &m_x);
179  m_tree->Branch("y", &m_y);
180  m_tree->Branch("z", &m_z);
181  m_tree->Branch("r", &m_r);
182  m_tree->Branch("eta", &m_eta);
183  m_tree->Branch("phi", &m_phi);
184  m_tree->Branch("px", &m_px);
185  m_tree->Branch("py", &m_py);
186  m_tree->Branch("pz", &m_pz);
187  m_tree->Branch("pt", &m_pt);
188  m_tree->Branch("time", &m_time);
189  m_tree->Branch("energy", &m_edep);
190  m_tree->Branch("pdg", &m_pdg);
191  }
192  else {
193  ATH_MSG_ERROR("No tree found!");
194  }
195 
196  return StatusCode::SUCCESS;
197 }
198 
199 
201  ATH_MSG_DEBUG( "In TrackRecordAnalysis::execute()" );
202 
203  m_x->clear();
204  m_y->clear();
205  m_z->clear();
206  m_r->clear();
207  m_eta->clear();
208  m_phi->clear();
209  m_px->clear();
210  m_py->clear();
211  m_pz->clear();
212  m_pt->clear();
213  m_time->clear();
214  m_edep->clear();
215  m_pdg->clear();
216 
217  const TrackRecordCollection* TRcoll;
218  if (evtStore()->retrieve(TRcoll, m_collection ) == StatusCode::SUCCESS) {
219  for (TrackRecordCollection::const_iterator track = TRcoll->begin(); track != TRcoll->end(); ++track) {
220  //TrackRecordCollection::const_iterator track;
221  //for(auto track : *TRcoll){
222  //std::cout<<"Entra en el loop"<<std::endl;
223 
224  CLHEP::Hep3Vector p =(*track).GetPosition();
225  m_h_hits_x->Fill(p.x());
226  m_h_hits_y->Fill(p.y());
227  m_h_hits_z->Fill(p.z());
228  m_h_hits_r->Fill(p.perp());
229  m_h_xy->Fill(p.x(), p.y());
230  m_h_zr->Fill(p.z(),p.perp());
231  m_h_hits_eta->Fill(p.eta());
232  m_h_hits_phi->Fill(p.phi());
233 
234  CLHEP::Hep3Vector mom = (*track).GetMomentum();
235  m_h_hits_px->Fill(mom.x());
236  m_h_hits_py->Fill(mom.y());
237  m_h_hits_pz->Fill(mom.z());
238  m_h_hits_pt->Fill(mom.perp());
239  m_h_edep->Fill((*track).GetEnergy());
240  m_h_time->Fill((*track).GetTime());
241  m_h_pdg->Fill((*track).GetPDGCode());
242 
243  m_x->push_back(p.x());
244  m_y->push_back(p.y());
245  m_z->push_back(p.z());
246  m_r->push_back(p.perp());
247  m_eta->push_back(p.eta());
248  m_phi->push_back(p.phi());
249  m_px->push_back(mom.x());
250  m_py->push_back(mom.y());
251  m_pz->push_back(mom.z());
252  m_pt->push_back(mom.perp());
253  m_edep->push_back((*track).GetEnergy());
254  m_time->push_back((*track).GetTime());
255  m_pdg->push_back((*track).GetPDGCode());
256  }
257  } // End while hits
258 
259  if (m_tree) m_tree->Fill();
260 
261  return StatusCode::SUCCESS;
262 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
TrackRecordAnalysis::m_h_hits_py
TH1 * m_h_hits_py
Definition: TrackRecordAnalysis.h:46
TH2::Fill
int Fill(double, double)
Definition: rootspy.cxx:382
TrackRecordAnalysis.h
TrackRecordAnalysis::m_pt
std::vector< float > * m_pt
Definition: TrackRecordAnalysis.h:62
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
TrackRecordAnalysis::m_h_edep
TH1 * m_h_edep
Definition: TrackRecordAnalysis.h:50
TrackRecordAnalysis::m_z
std::vector< float > * m_z
Definition: TrackRecordAnalysis.h:55
TrackRecordAnalysis::execute
virtual StatusCode execute()
Definition: TrackRecordAnalysis.cxx:200
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
TrackRecordAnalysis::m_x
std::vector< float > * m_x
Definition: TrackRecordAnalysis.h:53
AtlasHitsVector
Definition: AtlasHitsVector.h:33
TrackRecordAnalysis::m_h_hits_pz
TH1 * m_h_hits_pz
Definition: TrackRecordAnalysis.h:47
TH1D
Definition: rootspy.cxx:342
TrackRecordAnalysis::m_pdg
std::vector< float > * m_pdg
Definition: TrackRecordAnalysis.h:65
TrackRecordAnalysis::initialize
virtual StatusCode initialize()
Definition: TrackRecordAnalysis.cxx:66
TrackRecordAnalysis::m_time
std::vector< float > * m_time
Definition: TrackRecordAnalysis.h:63
AtlasHitsVector::begin
const_iterator begin() const
Definition: AtlasHitsVector.h:131
TrackRecordAnalysis::m_py
std::vector< float > * m_py
Definition: TrackRecordAnalysis.h:60
AtlasHitsVector::const_iterator
CONT::const_iterator const_iterator
Definition: AtlasHitsVector.h:43
TrackRecordAnalysis::m_thistSvc
ServiceHandle< ITHistSvc > m_thistSvc
Definition: TrackRecordAnalysis.h:72
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
TrackRecordAnalysis::m_edep
std::vector< float > * m_edep
Definition: TrackRecordAnalysis.h:64
TrackRecordAnalysis::m_phi
std::vector< float > * m_phi
Definition: TrackRecordAnalysis.h:58
ParticleGun_EoverP_Config.mom
mom
Definition: ParticleGun_EoverP_Config.py:63
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TrackRecordAnalysis::m_path
std::string m_path
Definition: TrackRecordAnalysis.h:71
TrackRecordAnalysis::m_h_hits_eta
TH1 * m_h_hits_eta
Definition: TrackRecordAnalysis.h:43
TrackRecordAnalysis::m_tree
TTree * m_tree
Definition: TrackRecordAnalysis.h:69
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
TrackRecordAnalysis::TrackRecordAnalysis
TrackRecordAnalysis(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TrackRecordAnalysis.cxx:22
TrackRecordAnalysis::m_h_xy
TH2 * m_h_xy
Definition: TrackRecordAnalysis.h:41
m_path
std::string m_path
the path being used
Definition: OutputStreamData.cxx:88
TrackRecordAnalysis::m_collection
std::string m_collection
Definition: TrackRecordAnalysis.h:67
TrackRecordAnalysis::m_h_hits_pt
TH1 * m_h_hits_pt
Definition: TrackRecordAnalysis.h:48
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
TrackRecordAnalysis::m_eta
std::vector< float > * m_eta
Definition: TrackRecordAnalysis.h:57
TH2D
Definition: rootspy.cxx:430
TrackRecordAnalysis::m_ntupleFileName
std::string m_ntupleFileName
Definition: TrackRecordAnalysis.h:70
TH1::Fill
int Fill(double)
Definition: rootspy.cxx:285
TrackRecordAnalysis::m_h_hits_r
TH1 * m_h_hits_r
Definition: TrackRecordAnalysis.h:40
AthAlgorithm
Definition: AthAlgorithm.h:47
TrackRecordAnalysis::m_px
std::vector< float > * m_px
Definition: TrackRecordAnalysis.h:59
TrackRecordAnalysis::m_y
std::vector< float > * m_y
Definition: TrackRecordAnalysis.h:54
TrackRecord.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
TrackRecordAnalysis::m_h_hits_phi
TH1 * m_h_hits_phi
Definition: TrackRecordAnalysis.h:44
TrackRecordCollection.h
TrackRecordAnalysis::m_h_zr
TH2 * m_h_zr
Definition: TrackRecordAnalysis.h:42
TrackRecordAnalysis::m_h_hits_y
TH1 * m_h_hits_y
Definition: TrackRecordAnalysis.h:38
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
AtlasHitsVector::end
const_iterator end() const
Definition: AtlasHitsVector.h:134
TrackRecordAnalysis::m_r
std::vector< float > * m_r
Definition: TrackRecordAnalysis.h:56
TrackRecordAnalysis::m_h_time
TH1 * m_h_time
Definition: TrackRecordAnalysis.h:49
TrackRecordAnalysis::m_h_hits_x
TH1 * m_h_hits_x
Some variables.
Definition: TrackRecordAnalysis.h:37
TrackRecordAnalysis::m_pz
std::vector< float > * m_pz
Definition: TrackRecordAnalysis.h:61
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
TrackRecordAnalysis::m_h_hits_z
TH1 * m_h_hits_z
Definition: TrackRecordAnalysis.h:39
python.LArCondContChannels.detName
detName
Definition: LArCondContChannels.py:665
TrackRecordAnalysis::m_h_hits_px
TH1 * m_h_hits_px
Definition: TrackRecordAnalysis.h:45
TrackRecordAnalysis::m_h_pdg
TH1 * m_h_pdg
Definition: TrackRecordAnalysis.h:51