ATLAS Offline Software
Loading...
Searching...
No Matches
LArHitsTestTool.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 "LArHitsTestTool.h"
6
10#include "CaloDetDescr/CaloDetDescrElement.h"
12
13#include <TH2D.h>
14#include <TH1.h>
15#include <TProfile.h>
16
17LArHitsTestTool::LArHitsTestTool(const std::string& type, const std::string& name, const IInterface* parent)
18 : SimTestToolBase(type, name, parent),
19 m_detname("EMB"),
20 m_lar_eta(0), m_lar_phi(0),
23 m_eta(0), m_phi(0),
24 m_zr(0), m_etaphi(0),
25 m_time(0), m_edep(0), m_log_edep(0),
26 m_edep_zr(0),
31 m_etot(0),
33 m_edep_z(0), m_edep_r(0),
35{
36 declareProperty("EDepCut", m_edep_cut=0.1);
37 declareProperty("DetectorName", m_detname="EMB");
38}
39
41{
42 ATH_CHECK(m_caloMgrKey.initialize());
43
44 m_path+="LAr/";
45 // all LAr detectors
46 _TH1D(m_lar_eta,"lar_eta",25,-5.,5.);
47 _SET_TITLE(m_lar_eta, "LAr hit distribution","eta","dN/deta");
48 _TH1D(m_lar_phi,"lar_phi",25,-M_PI,M_PI);
49 _SET_TITLE(m_lar_phi, "LAr hit distribution","phi","dN/dphi");
50
51 _TH2D(m_lar_zr,"lar_zr",100,-5200.,5200.,100,0.,3000.);
52 _SET_TITLE(m_lar_zr, "LAr hit distribution","z [mm]","r [mm]");
53 _TH2D(m_lar_etaphi,"lar_etaphi",100,-5.,5.,100,-M_PI,M_PI);
54 _SET_TITLE(m_lar_etaphi, "LAr hit distribution","eta", "phi");
55 _TH2D(m_lar_edep_zr,"lar_edep_zr",100,-5200.,5200.,100,0.,3000.);
56 _SET_TITLE(m_lar_edep_zr, "LAr energy weighted hit distribution","z [mm]", "r [mm]");
57
58 // variables specific to sub detector (root histo names have to be unique!)
59 m_path+=m_detname+"/";
60 _TH1D(m_eta,(m_detname+"_eta").c_str(),25,-5.,5.);
61 _SET_TITLE(m_eta, "hit distribution","eta","dN/deta");
62 _TH1D(m_phi,(m_detname+"_phi").c_str(),25,-M_PI,M_PI);
63 _SET_TITLE(m_phi, "hit distribution","phi","dN/dphi");
64
65 _TH2D(m_zr,(m_detname+"_zr").c_str(),100,-5200.,5200.,100,0.,3000.);
66 _SET_TITLE(m_zr, "hit distribution","z [mm]","r [mm]");
67 _TH2D(m_etaphi,(m_detname+"_etaphi").c_str(),100,-5.,5.,100,-M_PI,M_PI);
68 _SET_TITLE(m_etaphi, "hit distribution","eta", "phi");
69 _TH1D_WEIGHTED(m_time,(m_detname+"_time").c_str(),100,0,25);
70 _SET_TITLE(m_time, "energy weighted hit distribution","t [ns]","dE/dt");
71
72 _TH1D(m_edep,(m_detname+"_edep").c_str(),100,0,10.);
73 _SET_TITLE(m_edep, "hit distribution","edep [MeV]","dN/dE [1/MeV]");
74 _TH1D(m_log_edep,(m_detname+"_log_edep").c_str(),100,-15.,8.);
75 _SET_TITLE(m_log_edep, "logarithm of energy deposits","log(edep [MeV])","dN/dlog(E) [1/log(MeV)]");
76 _TH2D_WEIGHTED(m_edep_zr,(m_detname+"_edep_zr").c_str(),100,-5200.,5200.,100,0.,3000.);
77 _SET_TITLE(m_edep_zr, "energy weighted hit distribution","z [mm]", "r [mm]");
78
79 // ----------------------------------------
80 _TH1D(m_eta_cut1,(m_detname+"_eta_cut").c_str(),25,-5.,5.);
81 _SET_TITLE(m_eta, "hit distribution","eta","dN/deta");
82 _TH1D(m_phi_cut1,(m_detname+"_phi_cut").c_str(),25,-M_PI,M_PI);
83 _SET_TITLE(m_phi, "hit distribution","phi","dN/dphi");
84
85 _TH2D(m_zr_cut1,(m_detname+"_zr_cut").c_str(),100,-5200.,5200.,100,0.,3000.);
86 _SET_TITLE(m_zr, "hit distribution","z [mm]","r [mm]");
87 _TH2D(m_etaphi_cut1,(m_detname+"_etaphi_cut").c_str(),100,-5.,5.,100,-M_PI,M_PI);
88 _SET_TITLE(m_etaphi, "hit distribution","eta", "phi");
89
90 _TH1D_WEIGHTED(m_time_cut1,(m_detname+"_time_cut").c_str(),100,0,25);
91 _SET_TITLE(m_time, "energy weighted hit distribution","t [ns]","dE/dt");
92 _TH1D(m_edep_cut1,(m_detname+"_edep_cut").c_str(),100,0,10.);
93 _SET_TITLE(m_edep_cut1, "hit distribution","edep [MeV]","dN/dE [1/MeV]");
94 _TH2D_WEIGHTED(m_edep_zr_cut1,(m_detname+"_edep_zr_cut").c_str(),100,-5200.,5200.,100,0.,3000.);
95 _SET_TITLE(m_edep_zr, "energy weighted hit distribution","z [mm]", "r [mm]");
96
97 // ----------------------------------------
98 _TH1D(m_etot,(m_detname+"_etot").c_str(),100,0.,500.);
99 _SET_TITLE(m_etot, "distribution total energy deposit per event","E_tot [MeV]","1/dE");
100 _TH1D_WEIGHTED(m_edep_eta,(m_detname+"_edep_eta").c_str(),25,-5.,5.);
101 _SET_TITLE(m_edep_eta, "energy weighted hit distribution","eta","dE/deta");
102 _TH1D_WEIGHTED(m_edep_phi,(m_detname+"_edep_phi").c_str(),25,-M_PI,M_PI);
103 _SET_TITLE(m_edep_phi, "energy weighted hit distribution","phi","dE/deta");
104 _TH1D_WEIGHTED(m_edep_z,(m_detname+"_edep_z").c_str(),100,-5200.,5200.);
105 _SET_TITLE(m_edep_z, "energy weighted hit distribution","z [mm]","dE/dz");
106 _TH1D_WEIGHTED(m_edep_r,(m_detname+"_edep_r").c_str(),100,0.,3000.);
107 _SET_TITLE(m_edep_r, "energy weighted hit distribution","r [mm]","dE/dr");
108 _TPROFILE(m_etot_eta,(m_detname+"_etot_eta").c_str(),25,-5.,5.);
109 _SET_TITLE(m_etot_eta, "tot energy deposited per Event vs generator truth","eta","1/N dE/deta [MeV]");
110 _TPROFILE(m_etot_phi,(m_detname+"_etot_phi").c_str(),25,-M_PI,M_PI);
111 _SET_TITLE(m_etot_phi, "tot energy deposited per Event vs generator truth","phi","1/N dE/dphi [MeV]");
112
113 return StatusCode::SUCCESS;
114}
115
118 ATH_CHECK(caloMgrHandle.isValid());
119 const CaloDetDescrManager* caloMgr = *caloMgrHandle;
120
121 std::string lArkey = "LArHit"+m_detname;
122
123 double etot=0;
124 const LArHitContainer* hitContainer = evtStore()->tryConstRetrieve<LArHitContainer>(lArkey);
125 if(hitContainer) {
126 for(const LArHit* larHit : *hitContainer) {
127 const CaloDetDescrElement* ddElement = caloMgr->get_element(larHit->cellID());
128
129 double eta = ddElement->eta();
130 double phi = ddElement->phi();
131 double radius = ddElement->r();
132 double z = ddElement->z();
133
134 double energy = larHit->energy();
135
136 m_lar_eta->Fill(eta);
137 m_lar_phi->Fill(phi);
138 m_lar_zr->Fill(z,radius);
139 m_lar_etaphi->Fill(eta,phi);
140 m_lar_edep_zr->Fill(z,radius,energy);
141
142
143 m_eta->Fill(eta);
144 m_phi->Fill(phi);
145 m_time->Fill( larHit->time(),energy);
146 m_edep->Fill( energy);
147 m_log_edep->Fill( energy > 0 ? log(energy) : -1 );
148
149 m_zr->Fill(z,radius);
150 m_etaphi->Fill(eta,phi);
151 m_edep_zr->Fill(z,radius,energy);
152
153 m_edep_eta->Fill(eta,energy);
154 m_edep_phi->Fill(phi,energy);
155
156 m_edep_z->Fill(z,energy);
157 m_edep_r->Fill(radius,energy);
158
159 etot+=energy;
160
161 if (larHit->energy()>m_edep_cut) {
162 m_eta_cut1->Fill(eta);
163 m_phi_cut1->Fill(phi);
164 m_time_cut1->Fill( larHit->time(), larHit->energy());
165 m_edep_cut1->Fill( larHit->energy());
166
167 m_zr_cut1->Fill(z,radius);
168 m_etaphi_cut1->Fill(eta,phi);
169 m_edep_zr_cut1->Fill(z,radius,larHit->energy());
170 }
171 }
172 }
173
174 //For FastCaloSim Container with _Fast postfix, just try to retrieve, if exist, collect information from this container, it not just skip it.
175
177 const std::string lArkey_fast="LArHit"+m_detname+"_Fast";
178
179 const LArHitContainer* iter_fast;
180 if( evtStore()->contains<LArHitContainer>(lArkey_fast) &&
181 (evtStore()->retrieve(iter_fast,lArkey_fast)).isSuccess())
182 {
183 ATH_MSG_DEBUG ( "Read hit info from FastCaloSim Container" );
184 for(hi_fast=(*iter_fast).begin();hi_fast!=(*iter_fast).end();++hi_fast)
185 {
186 const LArHit* larHit = *hi_fast;
187 const CaloDetDescrElement* ddElement = caloMgr->get_element(larHit->cellID());
188 double eta=ddElement->eta();
189 double phi=ddElement->phi();
190 double radius=ddElement->r();
191 double z=ddElement->z();
192 double energy=larHit->energy();
193
194 m_lar_eta->Fill(eta);
195 m_lar_phi->Fill(phi);
196 m_lar_zr->Fill(z,radius);
197 m_lar_etaphi->Fill(eta,phi);
198 m_lar_edep_zr->Fill(z,radius,energy);
199
200 m_eta->Fill(eta);
201 m_phi->Fill(phi);
202 m_time->Fill((*hi_fast)->time(),energy);
203 m_edep->Fill(energy);
204 m_log_edep->Fill( log(energy));
205
206 m_zr->Fill(z,radius);
207 m_etaphi->Fill(eta,phi);
208 m_edep_zr->Fill(z,radius,energy);
209
210 m_edep_eta->Fill(eta,energy);
211 m_edep_phi->Fill(phi,energy);
212
213 m_edep_z->Fill(z,energy);
214 m_edep_r->Fill(radius,energy);
215
216 etot+=energy;
217
218 if((*hi_fast)->energy() > m_edep_cut)
219 {
220 m_eta_cut1->Fill(eta);
221 m_phi_cut1->Fill(phi);
222 m_time_cut1->Fill((*hi_fast)->time(),(*hi_fast)->energy());
223 m_edep_cut1->Fill((*hi_fast)->energy());
224
225 m_zr_cut1->Fill(z,radius);
226 m_etaphi_cut1->Fill(eta,phi);
227 m_edep_zr_cut1->Fill(z,radius,(*hi_fast)->energy());
228 }
229 }
230 }
231 auto primary = getPrimary();
232 if (primary) {
233 m_etot_eta->Fill(primary->momentum().eta(),etot);
234 m_etot_phi->Fill(primary->momentum().phi(),etot);
235 }
236 m_etot->Fill(etot);
237
238 return StatusCode::SUCCESS;
239}
#define M_PI
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
Definition of CaloDetDescrManager.
#define _TH2D_WEIGHTED(var, name, nbinx, xmin, xmax, nbiny, ymin, ymax)
#define _TH1D_WEIGHTED(var, name, nbin, xmin, xmax)
#define _TH2D(var, name, nbinx, xmin, xmax, nbiny, ymin, ymax)
#define _TH1D(var, name, nbin, xmin, xmax)
#define _SET_TITLE(var, title, xaxis, yaxis)
#define _TPROFILE(var, name, nbin, xmin, xmax)
#define z
boost::transform_iterator< make_const, typename CONT::const_iterator > const_iterator
This class groups all DetDescr information related to a CaloCell.
const CaloDetDescrElement * get_element(const Identifier &cellId) const
get element by its identifier
This class provides the client interface for accessing the detector description information common to...
Hit collection.
Class to store hit energy and time in LAr cell from G4 simulation.
Definition LArHit.h:25
double energy() const
Definition LArHit.h:113
Identifier cellID() const
Definition LArHit.h:108
virtual StatusCode processEvent() override
std::string m_detname
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloMgrKey
LArHitsTestTool(const std::string &type, const std::string &name, const IInterface *parent)
virtual StatusCode initialize() override
std::string m_path
SimTestToolBase(const std::string &type, const std::string &name, const IInterface *parent)
HepMC::ConstGenParticlePtr getPrimary()
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:114