ATLAS Offline Software
LucidHitAnalysis.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 "LucidHitAnalysis.h"
6 
8 
9 #include "TH1.h"
10 #include "TTree.h"
11 #include "TString.h"
12 
13 #include <algorithm>
14 #include <math.h>
15 #include <functional>
16 #include <iostream>
17 #include <stdio.h>
18 
19 LucidHitAnalysis::LucidHitAnalysis(const std::string& name, ISvcLocator* pSvcLocator)
20  : AthAlgorithm(name, pSvcLocator)
21  , m_h_hit_x(0)
22  , m_h_hit_y(0)
23  , m_h_hit_z(0)
24  , m_h_xy(0)
25  , m_h_zr(0)
26  , m_h_hit_post_x(0)
27  , m_h_hit_post_y(0)
28  , m_h_hit_post_z(0)
29  , m_h_hit_edep(0)
30  , m_h_hit_pdgid(0)
31  , m_h_hit_pretime(0)
32  , m_h_hit_posttime(0)
33  , m_h_genvolume(0)
34  , m_h_wavelength(0)
35  , m_hit_x(0)
36  , m_hit_y(0)
37  , m_hit_z(0)
38  , m_hit_post_x(0)
39  , m_hit_post_y(0)
40  , m_hit_post_z(0)
41  , m_hit_edep(0)
42  , m_hit_pdgid(0)
43  , m_hit_pretime(0)
44  , m_hit_posttime(0)
45  , m_gen_volume(0)
46  , m_wavelength(0)
47 
48  , m_tree(0)
49  , m_ntupleFileName("/LucidHitAnalysis/")
50  , m_path("/LucidHitAnalysis/")
51  , m_thistSvc("THistSvc", name)
52 {
53  declareProperty("NtupleFileName", m_ntupleFileName);
54  declareProperty("HistPath", m_path);
55 }
56 
57 
59  ATH_MSG_DEBUG( "Initializing LucidHitAnalysis" );
60 
61  // Grab the Ntuple and histogramming service for the tree
62  CHECK(m_thistSvc.retrieve());
63 
65  m_h_hit_x = new TH1D("h_hit_x", "hit_x", 100,-150.,150.);
66  m_h_hit_x->StatOverflows();
67  CHECK(m_thistSvc->regHist( m_path+m_h_hit_x->GetName(), m_h_hit_x));
68 
69  m_h_hit_y = new TH1D("h_hit_y", "hit_y", 100,-150.,150.);
70  m_h_hit_y->StatOverflows();
71  CHECK(m_thistSvc->regHist( m_path+m_h_hit_y->GetName(), m_h_hit_y));
72 
73  m_h_hit_z = new TH1D("h_hit_z", "hit_z", 100,-20000.,20000.);
74  m_h_hit_z->StatOverflows();
75  CHECK(m_thistSvc->regHist( m_path+m_h_hit_z->GetName(), m_h_hit_z));
76 
77  m_h_xy = new TH2D("h_xy", "hit_xy", 100,-150.,150.,100,-150,150);
78  m_h_xy->StatOverflows();
79  CHECK(m_thistSvc->regHist( m_path+m_h_xy->GetName(), m_h_xy));
80 
81  m_h_zr = new TH2D("h_zr", "hit_zr", 100,-20000.,20000.,100,0,250);
82  m_h_zr->StatOverflows();
83  CHECK(m_thistSvc->regHist( m_path+m_h_zr->GetName(), m_h_zr));
84 
85  m_h_hit_post_x = new TH1D("h_hit_post_x", "hit_post_x", 100,-150.,150.);
86  m_h_hit_post_x->StatOverflows();
87  CHECK(m_thistSvc->regHist( m_path+m_h_hit_post_x->GetName(), m_h_hit_post_x));
88 
89  m_h_hit_post_y = new TH1D("h_hit_post_y", "hit_post_y", 100,-150,150.);
90  m_h_hit_post_y->StatOverflows();
91  CHECK(m_thistSvc->regHist( m_path+m_h_hit_post_y->GetName(), m_h_hit_post_y));
92 
93  m_h_hit_post_z = new TH1D("h_hit_post_z", "hit_post_z", 100,-15000,15000.);
94  m_h_hit_post_z->StatOverflows();
95  CHECK(m_thistSvc->regHist( m_path+m_h_hit_post_z->GetName(), m_h_hit_post_z));
96 
97  m_h_hit_edep = new TH1D("h_hit_edep", "hit_edep", 100,0.,20.);
98  m_h_hit_edep->StatOverflows();
99  CHECK(m_thistSvc->regHist( m_path+m_h_hit_edep->GetName(), m_h_hit_edep));
100 
101  m_h_hit_pdgid = new TH1D("h_hit_pdgid", "hit_pdgid", 100,0.,7e6);
102  m_h_hit_pdgid->StatOverflows();
103  CHECK(m_thistSvc->regHist( m_path+m_h_hit_pdgid->GetName(), m_h_hit_pdgid));
104 
105  m_h_hit_pretime = new TH1D("h_hit_pretime", "hit_pretime", 100,0.,100.);
106  m_h_hit_pretime->StatOverflows();
107  CHECK(m_thistSvc->regHist( m_path+m_h_hit_pretime->GetName(), m_h_hit_pretime));
108 
109  m_h_hit_posttime = new TH1D("h_hit_posttime", "hit_posttime", 100,0.,100.);
110  m_h_hit_posttime->StatOverflows();
111  CHECK(m_thistSvc->regHist( m_path+m_h_hit_posttime->GetName(), m_h_hit_posttime));
112 
113  m_h_genvolume = new TH1D("h_genvolume", "genvolume", 20,0.,5.);
114  m_h_genvolume->StatOverflows();
115  CHECK(m_thistSvc->regHist( m_path+m_h_genvolume->GetName(), m_h_genvolume));
116 
117  m_h_wavelength = new TH1D("m_wavelength", "wavelength", 150,0.,800.);
118  m_h_wavelength->StatOverflows();
119  CHECK(m_thistSvc->regHist( m_path+m_h_wavelength->GetName(), m_h_wavelength));
120 
122  m_tree = new TTree("Lucid","Lucid");
123  std::string fullNtupleName = "/" + m_ntupleFileName + "/";
124  CHECK(m_thistSvc->regTree(fullNtupleName,m_tree));
125 
126  if (m_tree){
127  m_tree->Branch("hit_x", &m_hit_x);
128  m_tree->Branch("hit_y", &m_hit_y);
129  m_tree->Branch("hit_z", &m_hit_z);
130  m_tree->Branch("hit_post_x", &m_hit_post_x);
131  m_tree->Branch("hit_post_y", &m_hit_post_y);
132  m_tree->Branch("hit_post_z", &m_hit_post_z);
133  m_tree->Branch("edep", &m_hit_edep);
134  m_tree->Branch("pdgid", &m_hit_pdgid);
135  m_tree->Branch("pretime", &m_hit_pretime);
136  m_tree->Branch("posttime", &m_hit_posttime);
137  m_tree->Branch("gen_volume", &m_gen_volume);
138  m_tree->Branch("wavelength", &m_wavelength);
139  }
140  else {
141  ATH_MSG_ERROR("No tree found!");
142  }
143 
144  return StatusCode::SUCCESS;
145 }
146 
147 
149  ATH_MSG_DEBUG( "In LucidHitAnalysis::execute()" );
150 
151  m_hit_x->clear();
152  m_hit_y->clear();
153  m_hit_z->clear();
154  m_hit_post_x->clear();
155  m_hit_post_y->clear();
156  m_hit_post_z->clear();
157  m_hit_edep->clear();
158  m_hit_pdgid->clear();
159  m_hit_pretime->clear();
160  m_hit_posttime->clear();
161  m_gen_volume->clear();
162  m_wavelength->clear();
163 
164  const LUCID_SimHitCollection* iter;
165  if (evtStore()->retrieve(iter) == StatusCode::SUCCESS) {
166  for (LUCID_SimHitCollection::const_iterator i_hit = (*iter).begin(); i_hit != (*iter).end(); ++i_hit) {
167  double x = i_hit->GetX();
168  double y = i_hit->GetY();
169  double z = i_hit->GetZ();
170  double r = sqrt(x*x+y*y);
171 
172  m_h_hit_x->Fill(i_hit->GetX());
173  m_h_hit_y->Fill(i_hit->GetY());
174  m_h_hit_z->Fill(i_hit->GetZ());
175  m_h_xy->Fill(x, y);
176  m_h_zr->Fill(z, r);
177  m_h_hit_post_x->Fill(i_hit->GetEPX());
178  m_h_hit_post_y->Fill(i_hit->GetEPY());
179  m_h_hit_post_z->Fill(i_hit->GetEPZ());
180  m_h_hit_edep->Fill(i_hit->GetEnergy());
181  m_h_hit_pdgid->Fill(i_hit->GetPdgCode());
182  m_h_hit_pretime->Fill(i_hit->GetPreStepTime());
183  m_h_hit_posttime->Fill(i_hit->GetPostStepTime());
184  m_h_genvolume->Fill(i_hit->GetGenVolume());
185  m_h_wavelength->Fill(i_hit->GetWavelength());
186 
187  m_hit_x->push_back(i_hit->GetX());
188  m_hit_y->push_back(i_hit->GetY());
189  m_hit_z->push_back(i_hit->GetZ());
190  m_hit_post_x->push_back(i_hit->GetEPX());
191  m_hit_post_y->push_back(i_hit->GetEPY());
192  m_hit_post_z->push_back(i_hit->GetEPZ());
193  m_hit_edep->push_back(i_hit->GetEnergy());
194  m_hit_pdgid->push_back(i_hit->GetPdgCode());
195  m_hit_pretime->push_back(i_hit->GetPreStepTime());
196  m_hit_posttime->push_back(i_hit->GetPostStepTime());
197  m_gen_volume->push_back(i_hit->GetGenVolume());
198  m_wavelength->push_back(i_hit->GetWavelength());
199  }
200  } // End while hits
201 
202  if (m_tree) m_tree->Fill();
203 
204  return StatusCode::SUCCESS;
205 
206 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
LucidHitAnalysis::m_hit_y
std::vector< float > * m_hit_y
Definition: LucidHitAnalysis.h:53
TH2::Fill
int Fill(double, double)
Definition: rootspy.cxx:382
beamspotman.r
def r
Definition: beamspotman.py:676
LucidHitAnalysis::m_h_hit_y
TH1 * m_h_hit_y
Definition: LucidHitAnalysis.h:38
LucidHitAnalysis::m_h_hit_edep
TH1 * m_h_hit_edep
Definition: LucidHitAnalysis.h:45
LucidHitAnalysis::m_h_hit_pretime
TH1 * m_h_hit_pretime
Definition: LucidHitAnalysis.h:47
LucidHitAnalysis::m_path
std::string m_path
Definition: LucidHitAnalysis.h:67
LucidHitAnalysis::m_hit_posttime
std::vector< float > * m_hit_posttime
Definition: LucidHitAnalysis.h:61
LucidHitAnalysis::m_h_hit_x
TH1 * m_h_hit_x
Some histograms.
Definition: LucidHitAnalysis.h:37
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
AtlasHitsVector
Definition: AtlasHitsVector.h:33
LucidHitAnalysis::m_gen_volume
std::vector< float > * m_gen_volume
Definition: LucidHitAnalysis.h:62
TH1D
Definition: rootspy.cxx:342
LucidHitAnalysis::m_hit_pretime
std::vector< float > * m_hit_pretime
Definition: LucidHitAnalysis.h:60
LucidHitAnalysis::m_h_genvolume
TH1 * m_h_genvolume
Definition: LucidHitAnalysis.h:49
x
#define x
AtlasHitsVector::const_iterator
CONT::const_iterator const_iterator
Definition: AtlasHitsVector.h:43
LucidHitAnalysis::m_wavelength
std::vector< float > * m_wavelength
Definition: LucidHitAnalysis.h:63
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
LucidHitAnalysis::m_hit_post_y
std::vector< float > * m_hit_post_y
Definition: LucidHitAnalysis.h:56
z
#define z
LucidHitAnalysis::m_hit_post_z
std::vector< float > * m_hit_post_z
Definition: LucidHitAnalysis.h:57
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
LucidHitAnalysis::m_hit_edep
std::vector< float > * m_hit_edep
Definition: LucidHitAnalysis.h:58
m_path
std::string m_path
the path being used
Definition: OutputStreamData.cxx:88
LucidHitAnalysis::m_h_hit_post_x
TH1 * m_h_hit_post_x
Definition: LucidHitAnalysis.h:42
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
LucidHitAnalysis::m_h_hit_pdgid
TH1 * m_h_hit_pdgid
Definition: LucidHitAnalysis.h:46
LucidHitAnalysis::m_h_wavelength
TH1 * m_h_wavelength
Definition: LucidHitAnalysis.h:50
TH2D
Definition: rootspy.cxx:430
TH1::Fill
int Fill(double)
Definition: rootspy.cxx:285
LucidHitAnalysis::m_thistSvc
ServiceHandle< ITHistSvc > m_thistSvc
Definition: LucidHitAnalysis.h:68
LucidHitAnalysis::m_hit_z
std::vector< float > * m_hit_z
Definition: LucidHitAnalysis.h:54
LucidHitAnalysis.h
AthAlgorithm
Definition: AthAlgorithm.h:47
LUCID_SimHitCollection.h
LucidHitAnalysis::LucidHitAnalysis
LucidHitAnalysis(const std::string &name, ISvcLocator *pSvcLocator)
Definition: LucidHitAnalysis.cxx:19
LucidHitAnalysis::m_hit_post_x
std::vector< float > * m_hit_post_x
Definition: LucidHitAnalysis.h:55
LucidHitAnalysis::m_hit_pdgid
std::vector< float > * m_hit_pdgid
Definition: LucidHitAnalysis.h:59
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
LucidHitAnalysis::m_h_hit_z
TH1 * m_h_hit_z
Definition: LucidHitAnalysis.h:39
LucidHitAnalysis::m_h_hit_posttime
TH1 * m_h_hit_posttime
Definition: LucidHitAnalysis.h:48
LucidHitAnalysis::m_h_xy
TH2 * m_h_xy
Definition: LucidHitAnalysis.h:40
y
#define y
LucidHitAnalysis::m_h_zr
TH2 * m_h_zr
Definition: LucidHitAnalysis.h:41
LucidHitAnalysis::m_hit_x
std::vector< float > * m_hit_x
Definition: LucidHitAnalysis.h:52
LucidHitAnalysis::m_h_hit_post_z
TH1 * m_h_hit_post_z
Definition: LucidHitAnalysis.h:44
LucidHitAnalysis::execute
virtual StatusCode execute()
Definition: LucidHitAnalysis.cxx:148
LucidHitAnalysis::m_ntupleFileName
std::string m_ntupleFileName
Definition: LucidHitAnalysis.h:66
LucidHitAnalysis::m_h_hit_post_y
TH1 * m_h_hit_post_y
Definition: LucidHitAnalysis.h:43
LucidHitAnalysis::initialize
virtual StatusCode initialize()
Definition: LucidHitAnalysis.cxx:58
LucidHitAnalysis::m_tree
TTree * m_tree
Definition: LucidHitAnalysis.h:65