ATLAS Offline Software
MDTHitAnalysis.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 "MDTHitAnalysis.h"
6 
7 // Section of includes for MDT of the Muon Spectrometer tests
9 
11 #include "MuonSimEvent/MDTSimHit.h"
12 #include "CLHEP/Vector/LorentzVector.h"
13 
14 #include "TH1.h"
15 #include "TTree.h"
16 #include "TString.h"
17 
18 #include <algorithm>
19 #include <math.h>
20 #include <functional>
21 #include <iostream>
22 #include <stdio.h>
23 
24 MDTHitAnalysis::MDTHitAnalysis(const std::string& name, ISvcLocator* pSvcLocator)
25  : AthAlgorithm(name, pSvcLocator)
26  , m_h_hits_x(0)
27  , m_h_hits_y(0)
28  , m_h_hits_z(0)
29  , m_h_hits_r(0)
30  , m_h_xy(0)
31  , m_h_zr(0)
32  , m_h_hits_eta(0)
33  , m_h_hits_phi(0)
34  , m_h_hits_lx(0)
35  , m_h_hits_ly(0)
36  , m_h_hits_lz(0)
37  , m_h_hits_driftR(0)
38  , m_h_hits_time(0)
39  , m_h_hits_edep(0)
40  , m_h_hits_kine(0)
41  , m_h_hits_step(0)
42  , m_hits_x(0)
43  , m_hits_y(0)
44  , m_hits_z(0)
45  , m_hits_r(0)
46  , m_hits_eta(0)
47  , m_hits_phi(0)
48  , m_hits_lx(0)
49  , m_hits_ly(0)
50  , m_hits_lz(0)
51  , m_hits_driftR(0)
52  , m_hits_time(0)
53  , m_hits_edep(0)
54  , m_hits_kine(0)
55  , m_hits_step(0)
56 
57  , m_tree(0)
58  , m_ntupleFileName("/MDTHitAnalysis/")
59  , m_path("/MDTHitAnalysis/")
60  , m_thistSvc("THistSvc", name)
61 {
62  declareProperty("NtupleFileName", m_ntupleFileName);
63  declareProperty("HistPath", m_path);
64 }
65 
66 
68  ATH_MSG_DEBUG( "Initializing MDTHitAnalysis" );
69 
70  // Grab the Ntuple and histogramming service for the tree
71  CHECK(m_thistSvc.retrieve());
72 
74  m_h_hits_x = new TH1D("h_hits_mdt_x","hits_x", 100,-25000, 25000);
75  m_h_hits_x->StatOverflows();
76  CHECK(m_thistSvc->regHist(m_path + m_h_hits_x->GetName(), m_h_hits_x));
77 
78  m_h_hits_y = new TH1D("h_hits_mdt_y", "hits_y", 100,-25000,25000);
79  m_h_hits_y->StatOverflows();
80  CHECK(m_thistSvc->regHist(m_path + m_h_hits_y->GetName(), m_h_hits_y));
81 
82  m_h_hits_z = new TH1D("h_hits_mdt_z", "hits_z", 100,-45000,45000);
83  m_h_hits_z->StatOverflows();
84  CHECK(m_thistSvc->regHist(m_path + m_h_hits_z->GetName(), m_h_hits_z));
85 
86  m_h_hits_r = new TH1D("h_hits_mdt_r", "hits_r", 100,4000,26000);
87  m_h_hits_r->StatOverflows();
88  CHECK(m_thistSvc->regHist(m_path + m_h_hits_r->GetName(), m_h_hits_r));
89 
90  m_h_xy = new TH2D("h_mdt_xy", "xy", 100,-25000.,25000.,100, -25000., 25000.);
91  m_h_xy->StatOverflows();
92  CHECK(m_thistSvc->regHist( m_path+m_h_xy->GetName(), m_h_xy));
93 
94  m_h_zr = new TH2D("h_mdt_zr", "zr", 100,-45000.,45000.,100, 4000., 26000.);
95  m_h_zr->StatOverflows();
96  CHECK(m_thistSvc->regHist( m_path+m_h_zr->GetName(), m_h_zr));
97 
98  m_h_hits_eta = new TH1D("h_hits_mdt_eta", "hits_eta", 100,-3.0,3.0);
99  m_h_hits_eta->StatOverflows();
100  CHECK(m_thistSvc->regHist(m_path + m_h_hits_eta->GetName(), m_h_hits_eta));
101 
102  m_h_hits_phi = new TH1D("h_hits_mdt_phi", "hits_phi", 100,-3.2,3.2);
103  m_h_hits_phi->StatOverflows();
104  CHECK(m_thistSvc->regHist(m_path + m_h_hits_phi->GetName(), m_h_hits_phi));
105 
106  m_h_hits_lx = new TH1D("h_hits_mdt_lx","hits_lx", 100,-20, 20);
107  m_h_hits_lx->StatOverflows();
108  CHECK(m_thistSvc->regHist(m_path + m_h_hits_lx->GetName(), m_h_hits_lx));
109 
110  m_h_hits_ly = new TH1D("h_hits_mdt_ly", "hits_ly", 100,-20,20);
111  m_h_hits_ly->StatOverflows();
112  CHECK(m_thistSvc->regHist(m_path + m_h_hits_ly->GetName(), m_h_hits_ly));
113 
114  m_h_hits_lz = new TH1D("h_hits_mdt_lz", "hits_lz", 100,-2000,2000);
115  m_h_hits_lz->StatOverflows();
116  CHECK(m_thistSvc->regHist(m_path + m_h_hits_lz->GetName(), m_h_hits_lz));
117 
118  m_h_hits_driftR = new TH1D("h_hits_mdt_driftR", "hits_driftR", 100,0,15);
119  m_h_hits_driftR->StatOverflows();
120  CHECK(m_thistSvc->regHist(m_path + m_h_hits_driftR->GetName(), m_h_hits_driftR));
121 
122  m_h_hits_time = new TH1D("h_hits_mdt_time","hits_time", 100,0, 150);
123  m_h_hits_time->StatOverflows();
124  CHECK(m_thistSvc->regHist(m_path + m_h_hits_time->GetName(), m_h_hits_time));
125 
126  m_h_hits_edep = new TH1D("h_hits_mdt_edep", "hits_edep", 100,0,0.2);
127  m_h_hits_edep->StatOverflows();
128  CHECK(m_thistSvc->regHist(m_path + m_h_hits_edep->GetName(), m_h_hits_edep));
129 
130  m_h_hits_kine = new TH1D("h_hits_mdt_kine", "hits_kine", 100,0,20000);
131  m_h_hits_kine->StatOverflows();
132  CHECK(m_thistSvc->regHist(m_path + m_h_hits_kine->GetName(), m_h_hits_kine));
133 
134  m_h_hits_step = new TH1D("h_hits_mdt_step", "hits_step", 100,0,100);
135  m_h_hits_step->StatOverflows();
136  CHECK(m_thistSvc->regHist(m_path + m_h_hits_step->GetName(), m_h_hits_step));
137 
139  m_tree = new TTree("MDT","MDT");
140  std::string fullNtupleName = "/" + m_ntupleFileName + "/";
141  CHECK(m_thistSvc->regTree(fullNtupleName,m_tree));
142 
143  if (m_tree){
144  m_tree->Branch("x", &m_hits_x);
145  m_tree->Branch("y", &m_hits_y);
146  m_tree->Branch("z", &m_hits_z);
147  m_tree->Branch("r", &m_hits_r);
148  m_tree->Branch("eta", &m_hits_eta);
149  m_tree->Branch("phi", &m_hits_phi);
150  m_tree->Branch("lx", &m_hits_lx);
151  m_tree->Branch("ly", &m_hits_ly);
152  m_tree->Branch("lz", &m_hits_lz);
153  m_tree->Branch("driftR", &m_hits_driftR);
154  m_tree->Branch("time", &m_hits_time);
155  m_tree->Branch("edep", &m_hits_edep);
156  m_tree->Branch("kine", &m_hits_kine);
157  m_tree->Branch("step", &m_hits_step);
158  }
159  else {
160  ATH_MSG_ERROR("No tree found!");
161  }
162 
163  return StatusCode::SUCCESS;
164 }
165 
166 
168  ATH_MSG_DEBUG( "In MDTHitAnalysis::execute()" );
169 
170  m_hits_x->clear();
171  m_hits_y->clear();
172  m_hits_z->clear();
173  m_hits_r->clear();
174  m_hits_eta->clear();
175  m_hits_phi->clear();
176  m_hits_lx->clear();
177  m_hits_ly->clear();
178  m_hits_lz->clear();
179  m_hits_driftR->clear();
180  m_hits_time->clear();
181  m_hits_edep->clear();
182  m_hits_kine->clear();
183  m_hits_step->clear();
184 
185  const MDTSimHitCollection* mdt_container;
186  if (evtStore()->retrieve(mdt_container, "MDT_Hits") == StatusCode::SUCCESS) {
187  for (MDTSimHitCollection::const_iterator i_hit = mdt_container->begin(); i_hit != mdt_container->end(); ++i_hit) {
188  //MDTSimHitCollection::const_iterator i_hit;
189  //for(auto i_hit : *mdt_container){
190  GeoMDTHit ghit(*i_hit);
191  if (!ghit) continue;
192 
194  m_h_hits_x->Fill(p.x());
195  m_h_hits_y->Fill(p.y());
196  m_h_hits_z->Fill(p.z());
197  m_h_hits_r->Fill(p.perp());
198  m_h_xy->Fill(p.x(), p.y());
199  m_h_zr->Fill(p.z(),p.perp());
200  m_h_hits_eta->Fill(p.eta());
201  m_h_hits_phi->Fill(p.phi());
202  m_h_hits_driftR->Fill((*i_hit).driftRadius());
203  m_h_hits_lx->Fill( (*i_hit).localPosition().x());
204  m_h_hits_ly->Fill( (*i_hit).localPosition().y());
205  m_h_hits_lz->Fill( (*i_hit).localPosition().z());
206  m_h_hits_edep->Fill((*i_hit).energyDeposit());
207  m_h_hits_time->Fill((*i_hit).globalTime());
208  m_h_hits_step->Fill((*i_hit).stepLength());
209  m_h_hits_kine->Fill((*i_hit).kineticEnergy());
210 
211  m_hits_x->push_back(p.x());
212  m_hits_y->push_back(p.y());
213  m_hits_z->push_back(p.z());
214  m_hits_r->push_back(p.perp());
215  m_hits_eta->push_back(p.eta());
216  m_hits_phi->push_back(p.phi());
217  m_hits_driftR->push_back((*i_hit).driftRadius());
218  m_hits_lx->push_back((*i_hit).localPosition().x());
219  m_hits_ly->push_back((*i_hit).localPosition().y());
220  m_hits_lz->push_back((*i_hit).localPosition().z());
221  m_hits_edep->push_back((*i_hit).energyDeposit());
222  m_hits_time->push_back((*i_hit).globalTime());
223  m_hits_step->push_back((*i_hit).stepLength());
224  m_hits_kine->push_back((*i_hit).kineticEnergy());
225  }
226  } // End while hits
227 
228  if (m_tree) m_tree->Fill();
229 
230  return StatusCode::SUCCESS;
231 }
MDTHitAnalysis::m_hits_time
std::vector< float > * m_hits_time
Definition: MDTHitAnalysis.h:64
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
TH2::Fill
int Fill(double, double)
Definition: rootspy.cxx:382
MDTHitAnalysis::m_h_hits_z
TH1 * m_h_hits_z
Definition: MDTHitAnalysis.h:39
MDTHitAnalysis::m_hits_edep
std::vector< float > * m_hits_edep
Definition: MDTHitAnalysis.h:65
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
MDTHitAnalysis::initialize
virtual StatusCode initialize()
Definition: MDTHitAnalysis.cxx:67
MDTHitAnalysis::m_h_hits_r
TH1 * m_h_hits_r
Definition: MDTHitAnalysis.h:40
MDTHitAnalysis::m_h_hits_kine
TH1 * m_h_hits_kine
Definition: MDTHitAnalysis.h:51
GeoMDTHit
Definition: GeoMuonHits.h:64
MDTHitAnalysis::m_h_hits_x
TH1 * m_h_hits_x
Some variables.
Definition: MDTHitAnalysis.h:37
MDTHitAnalysis::m_hits_ly
std::vector< float > * m_hits_ly
Definition: MDTHitAnalysis.h:61
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
MDTHitAnalysis::m_hits_lz
std::vector< float > * m_hits_lz
Definition: MDTHitAnalysis.h:62
MDTHitAnalysis::m_h_hits_driftR
TH1 * m_h_hits_driftR
Definition: MDTHitAnalysis.h:48
MDTHitAnalysis::MDTHitAnalysis
MDTHitAnalysis(const std::string &name, ISvcLocator *pSvcLocator)
Definition: MDTHitAnalysis.cxx:24
AtlasHitsVector
Definition: AtlasHitsVector.h:33
TH1D
Definition: rootspy.cxx:342
GeoMuonHits.h
MDTHitAnalysis::m_h_hits_eta
TH1 * m_h_hits_eta
Definition: MDTHitAnalysis.h:43
MDTHitAnalysis::m_hits_x
std::vector< float > * m_hits_x
Definition: MDTHitAnalysis.h:54
MDTHitAnalysis::m_hits_driftR
std::vector< float > * m_hits_driftR
Definition: MDTHitAnalysis.h:63
AtlasHitsVector::begin
const_iterator begin() const
Definition: AtlasHitsVector.h:131
AtlasHitsVector::const_iterator
CONT::const_iterator const_iterator
Definition: AtlasHitsVector.h:43
MDTHitAnalysis::m_hits_eta
std::vector< float > * m_hits_eta
Definition: MDTHitAnalysis.h:58
MDTHitAnalysis::m_hits_r
std::vector< float > * m_hits_r
Definition: MDTHitAnalysis.h:57
MDTHitAnalysis::m_h_hits_phi
TH1 * m_h_hits_phi
Definition: MDTHitAnalysis.h:44
MDTHitAnalysis::m_hits_lx
std::vector< float > * m_hits_lx
Definition: MDTHitAnalysis.h:60
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
MDTHitAnalysis::m_h_hits_step
TH1 * m_h_hits_step
Definition: MDTHitAnalysis.h:52
MDTSimHit.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
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
MDTHitAnalysis::execute
virtual StatusCode execute()
Definition: MDTHitAnalysis.cxx:167
MDTHitAnalysis::m_hits_phi
std::vector< float > * m_hits_phi
Definition: MDTHitAnalysis.h:59
MDTHitAnalysis::m_h_hits_ly
TH1 * m_h_hits_ly
Definition: MDTHitAnalysis.h:46
m_path
std::string m_path
the path being used
Definition: OutputStreamData.cxx:88
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
TH2D
Definition: rootspy.cxx:430
TH1::Fill
int Fill(double)
Definition: rootspy.cxx:285
MDTHitAnalysis::m_hits_kine
std::vector< float > * m_hits_kine
Definition: MDTHitAnalysis.h:66
AthAlgorithm
Definition: AthAlgorithm.h:47
MDTHitAnalysis::m_thistSvc
ServiceHandle< ITHistSvc > m_thistSvc
Definition: MDTHitAnalysis.h:72
MDTHitAnalysis::m_hits_y
std::vector< float > * m_hits_y
Definition: MDTHitAnalysis.h:55
MDTHitAnalysis::m_hits_z
std::vector< float > * m_hits_z
Definition: MDTHitAnalysis.h:56
MDTSimHitCollection.h
MDTHitAnalysis::m_h_zr
TH2 * m_h_zr
Definition: MDTHitAnalysis.h:42
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
MDTHitAnalysis::m_tree
TTree * m_tree
Definition: MDTHitAnalysis.h:69
MDTHitAnalysis::m_ntupleFileName
std::string m_ntupleFileName
Definition: MDTHitAnalysis.h:70
MDTHitAnalysis::m_h_hits_y
TH1 * m_h_hits_y
Definition: MDTHitAnalysis.h:38
MDTHitAnalysis::m_h_hits_lx
TH1 * m_h_hits_lx
Definition: MDTHitAnalysis.h:45
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MDTHitAnalysis::m_h_xy
TH2 * m_h_xy
Definition: MDTHitAnalysis.h:41
MDTHitAnalysis::m_h_hits_time
TH1 * m_h_hits_time
Definition: MDTHitAnalysis.h:49
AtlasHitsVector::end
const_iterator end() const
Definition: AtlasHitsVector.h:134
MDTHitAnalysis.h
MDTHitAnalysis::m_h_hits_lz
TH1 * m_h_hits_lz
Definition: MDTHitAnalysis.h:47
GeoMDTHit::getGlobalPosition
Amg::Vector3D getGlobalPosition() const
MDTHitAnalysis::m_hits_step
std::vector< float > * m_hits_step
Definition: MDTHitAnalysis.h:67
MDTHitAnalysis::m_h_hits_edep
TH1 * m_h_hits_edep
Definition: MDTHitAnalysis.h:50
MDTHitAnalysis::m_path
std::string m_path
Definition: MDTHitAnalysis.h:71