ATLAS Offline Software
Loading...
Searching...
No Matches
CaloHadDMCoeffData.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5//-----------------------------------------------------------------------
6// File and Version Information:
7// $Id: CaloHadDMCoeffData.cxx,v 1.2 2009-05-18 20:31:52 pospelov Exp $
8//
9// Description: see CaloHadDMCoeffData.h
10//
11// Environment:
12// Software developed for the ATLAS Detector at CERN LHC
13//
14// Author List:
15// Gennady Pospelov
16//
17//-----------------------------------------------------------------------
18#include <cmath>
19#include <fstream>
20#include <iostream>
21#include <sstream>
22
25
26
28 fChain(nullptr),
29 fCurrent(0),
30 m_ncls(0),
31 m_mc_pdg(0),
32 m_mc_ener(0),
33 m_mc_eta(0),
34 m_mc_phi(0),
35 m_cls_ener(nullptr),
36 m_cls_ener_unw(nullptr),
37 m_cls_lambda(nullptr),
38 m_cls_eta(nullptr),
39 m_cls_phi(nullptr),
40 m_cls_smpener(nullptr),
41 m_cls_smpener_unw(nullptr),
42 m_narea(0),
43 m_cls_eprep(nullptr),
44 m_cls_dmener(nullptr),
46 m_cls_engcalib(nullptr),
47 m_cls_recostat(nullptr),
48 m_cls_pi0prob(nullptr),
49 m_cls_isol(nullptr),
50 m_cls_oocener(nullptr),
51 m_cls_calib_emfrac(nullptr),
52 m_cls_engcalibpres(nullptr),
53 b_ncls(nullptr),
54 b_mc_pdg(nullptr),
55 b_mc_ener(nullptr),
56 b_mc_eta(nullptr),
57 b_mc_phi(nullptr),
58 b_cls_ener(nullptr),
59 b_cls_ener_unw(nullptr),
60 b_cls_lambda(nullptr),
61 b_cls_eta(nullptr),
62 b_cls_phi(nullptr),
63 b_cls_smpener_unw(nullptr),
64 b_m_narea(nullptr),
65 b_cls_eprep(nullptr),
66 b_cls_dmener(nullptr),
67 b_engClusSumCalib(nullptr),
68 b_cls_engcalib(nullptr),
69 b_cls_recostat(nullptr),
70 b_cls_pi0prob(nullptr),
71 b_cls_isol(nullptr),
72 b_cls_oocener(nullptr),
73 b_cls_calib_emfrac(nullptr),
74 b_cls_engcalibpres(nullptr),
77{
78 if (tree == nullptr) {
79 //std::cout << "CaloHadDMCoeffData::CaloHadDMCoeffData() -> Error. No pointer to the tree!" << std::endl;
80 return;
81 }
83}
84
85
87{
88// if (!fChain) return;
89// delete fChain->GetCurrentFile();
90}
91
92
93// Int_t CaloHadDMCoeffData::GetEntry(Long64_t entry)
94// {
95// // Read contents of entry.
96// if (!fChain) return 0;
97// return fChain->GetEntry(entry);
98// }
99
100
101Int_t CaloHadDMCoeffData::GetEntry(Long64_t entry)
102{
103 static int offset = 0;
104 // Read contents of entry.
105 if (!fChain) return 0;
106 if(!m_MaxEventsPerFile) {
107 return fChain->GetEntry(entry);
108 }else{
109 // read only m_MaxEventsPerFile
110 if(entry==0) offset = 0;
111 Int_t nbytes = fChain->GetEntry(offset++);
112 TTree *loc = static_cast<TChain *>(fChain)->GetTree();
113 if( loc->GetReadEntry() >= m_MaxEventsPerFile) {
114 offset = static_cast<TChain *>(fChain)->GetTreeOffset()[ fChain->GetTreeNumber()] + loc->GetEntries();
115 nbytes = fChain->GetEntry(offset++);
116 }
117 return nbytes;
118 }
119}
120
121
123{
124// Read contents of entry.
125 if (!fChain) return 0;
126 return fChain->GetEntries();
127}
128
129
131{
132 // The Init() function is called when the selector needs to initialize
133 // a new tree or chain. Typically here the branch addresses and branch
134 // pointers of the tree will be set.
135 // It is normally not necessary to make changes to the generated
136 // code, but the routine can be extended by the user if needed.
137 // Init() will be called many times when running on PROOF
138 // (once per file to be processed).
139
140 m_ncls = 0;
141 m_mc_pdg = 0;
142 m_mc_ener = 0.0;
143 m_mc_eta = 0.0;
144 m_mc_phi = 0.0;
145 m_narea = 0;
146 m_engClusSumCalib = 0.0;
147
148 // Set object pointer
149 m_cls_ener = nullptr;
150 m_cls_ener_unw = nullptr;
151 m_cls_lambda = nullptr;
152 m_cls_eta = nullptr;
153 m_cls_phi = nullptr;
154 //m_cls_emfrac = 0;
155 //m_cls_smpener = 0;
156 m_cls_smpener_unw = nullptr;
157 //m_cls_ibin = 0;
158 m_cls_eprep = nullptr;
159 m_cls_dmener = nullptr;
160 m_cls_engcalib = nullptr;
161 m_cls_recostat = nullptr;
162 m_cls_pi0prob = nullptr;
163 m_cls_isol = nullptr;
164 m_cls_oocener = nullptr;
165 m_cls_calib_emfrac = nullptr;
166 m_cls_engcalibpres = nullptr;
167 // Set branch addresses and branch pointers
168 if (!tree) return;
169 fChain = tree;
170 fCurrent = -1;
171 fChain->SetMakeClass(1);
172
173 fChain->SetBranchAddress("ncls", &m_ncls, &b_ncls);
174 fChain->SetBranchAddress("mc_pdg", &m_mc_pdg, &b_mc_pdg);
175 fChain->SetBranchAddress("mc_ener", &m_mc_ener, &b_mc_ener);
176 fChain->SetBranchAddress("mc_eta", &m_mc_eta, &b_mc_eta);
177 fChain->SetBranchAddress("mc_phi", &m_mc_phi, &b_mc_phi);
178 fChain->SetBranchAddress("cls_ener", &m_cls_ener, &b_cls_ener);
179 fChain->SetBranchAddress("cls_ener_unw", &m_cls_ener_unw, &b_cls_ener_unw);
180 fChain->SetBranchAddress("cls_lambda", &m_cls_lambda, &b_cls_lambda);
181 fChain->SetBranchAddress("cls_eta", &m_cls_eta, &b_cls_eta);
182 fChain->SetBranchAddress("cls_phi", &m_cls_phi, &b_cls_phi);
183 //fChain->SetBranchAddress("cls_emfrac", &m_cls_emfrac, &b_cls_emfrac);
184 //fChain->SetBranchAddress("cls_smpener", &m_cls_smpener, &b_cls_smpener);
185 fChain->SetBranchAddress("cls_smpener_unw", &m_cls_smpener_unw, &b_cls_smpener_unw);
186 //fChain->SetBranchAddress("cls_ibin", &m_cls_ibin, &b_cls_ibin);
187 fChain->SetBranchAddress("narea", &m_narea, &b_m_narea);
188 fChain->SetBranchAddress("cls_eprep", &m_cls_eprep, &b_cls_eprep);
189 fChain->SetBranchAddress("cls_dmener", &m_cls_dmener, &b_cls_dmener);
190 fChain->SetBranchAddress("cls_engcalib", &m_cls_engcalib, &b_cls_engcalib);
191 fChain->SetBranchAddress("cls_recostat", &m_cls_recostat, &b_cls_recostat);
192 fChain->SetBranchAddress("cls_pi0prob", &m_cls_pi0prob, &b_cls_pi0prob);
193 fChain->SetBranchAddress("cls_isol", &m_cls_isol, &b_cls_isol);
194 fChain->SetBranchAddress("cls_oocener", &m_cls_oocener, &b_cls_oocener);
195 fChain->SetBranchAddress("engClusSumCalib", &m_engClusSumCalib, &b_engClusSumCalib);
196 fChain->SetBranchAddress("cls_calib_emfrac", &m_cls_calib_emfrac, &b_cls_calib_emfrac);
197 fChain->SetBranchAddress("cls_engcalibpres", &m_cls_engcalibpres, &b_cls_engcalibpres);
198}
199
200
201
202/* ****************************************************************************
203create tree which points to the variables of given class
204**************************************************************************** */
206{
207 TTree *tree = new TTree(treename, treename);
208
209 tree->Branch("ncls",&m_ncls,"ncls/I");
210 tree->Branch("mc_pdg",&m_mc_pdg,"mc_pdg/I");
211 tree->Branch("mc_ener",&m_mc_ener,"mc_ener/D");
212 tree->Branch("mc_eta",&m_mc_eta,"mc_eta/D");
213 tree->Branch("mc_phi",&m_mc_phi,"mc_phi/D");
214 m_cls_ener = new std::vector<double >;
215 tree->Branch("cls_ener","vector<double >",&m_cls_ener);
216 m_cls_ener_unw = new std::vector<double >;
217 tree->Branch("cls_ener_unw","vector<double >",&m_cls_ener_unw);
218
219 m_cls_lambda = new std::vector<double >;
220 tree->Branch("cls_lambda","vector<double >",&m_cls_lambda);
221 m_cls_eta = new std::vector<double >;
222 tree->Branch("cls_eta","vector<double >",&m_cls_eta);
223 m_cls_phi = new std::vector<double >;
224 tree->Branch("cls_phi","vector<double >",&m_cls_phi);
225// m_cls_emfrac = new std::vector<double >;
226// tree->Branch("cls_emfrac","vector<double >",&m_cls_emfrac);
227
228 m_cls_smpener = new std::vector<std::vector<double > >;
229// tree->Branch("cls_smpener","vector<vector<double > >",&m_cls_smpener);
230 m_cls_smpener_unw = new std::vector<std::vector<double > >;
231 tree->Branch("cls_smpener_unw","vector<vector<double > >",&m_cls_smpener_unw);
232 //m_cls_ibin = new std::vector<std::vector<int > >;
233 //tree->Branch("cls_ibin","vector<vector<int > >",&m_cls_ibin);
234 tree->Branch("narea",&m_narea,"narea/I");
235 m_cls_eprep = new std::vector<std::vector<double > >;
236 tree->Branch("cls_eprep","vector<vector<double > >",&m_cls_eprep);
237 m_cls_dmener = new std::vector<std::vector<double > >;
238 tree->Branch("cls_dmener","vector<vector<double > >",&m_cls_dmener);
239 tree->Branch("engClusSumCalib",&m_engClusSumCalib,"engClusSumCalib/D");
240 m_cls_engcalib = new std::vector<double >;
241 tree->Branch("cls_engcalib","vector<double >",&m_cls_engcalib);
242 m_cls_recostat = new std::vector<int >;
243 tree->Branch("cls_recostat","vector<int >",&m_cls_recostat);
244 m_cls_pi0prob = new std::vector<double >;
245 tree->Branch("cls_pi0prob","vector<double >",&m_cls_pi0prob);
246 m_cls_isol = new std::vector<double >;
247 tree->Branch("cls_isol","vector<double >",&m_cls_isol);
248 m_cls_oocener = new std::vector<double >;
249 tree->Branch("cls_oocener","vector<double >",&m_cls_oocener);
250 m_cls_calib_emfrac = new std::vector<double >;
251 tree->Branch("cls_calib_emfrac","vector<double >",&m_cls_calib_emfrac);
252 m_cls_engcalibpres = new std::vector<double >;
253 tree->Branch("cls_engcalibpres","vector<double >",&m_cls_engcalibpres);
254
255 return tree;
256}
257
258
259/* ****************************************************************************
260create tree which points to the variables of given class
261**************************************************************************** */
263{
264 m_ncls = 0;
265 m_mc_pdg = 0;
266 m_mc_ener = 0.0;
267 m_mc_eta = 0.0;
268 m_mc_phi = 0.0;
269 m_cls_ener->clear();
270 m_cls_smpener->clear();
271 m_cls_ener_unw->clear();
272 m_cls_lambda->clear();
273 m_cls_eta->clear();
274 m_cls_phi->clear();
275 //m_cls_emfrac->clear();
276 m_cls_smpener_unw->clear();
277 m_narea = 0;
278 //m_cls_ibin->clear();
279 m_cls_eprep->clear();
280 m_cls_dmener->clear();
281 m_engClusSumCalib = 0.0;
282 m_cls_engcalib->clear();
283 m_cls_recostat->clear();
284 m_cls_pi0prob->clear();
285 m_cls_isol->clear();
286 m_cls_oocener->clear();
287 m_cls_calib_emfrac->clear();
288 m_cls_engcalibpres->clear();
289}
290
291
292
293/* ****************************************************************************
294pack cluster variables into vector of float for later calculation of global bin number
295**************************************************************************** */
296int CaloHadDMCoeffData::PackClusterVars(int i_cls, std::vector<float> &vars)
297{
298
299 float clusEmFrac = -1.0;
301 clusEmFrac = (*m_cls_calib_emfrac)[i_cls];
302 }else{
303 // if sample contains only pi+- or pi0
304 if( m_mc_pdg == 111) {
305 clusEmFrac = 0.99; // pi0
306 }else if( abs(m_mc_pdg) == 211) {
307 clusEmFrac = 0.25; // pi+, pi-
308 }else{
309 std::cout << "CaloHadDMCoeffData::PackClusterVars() -> Warning! Wrong particle " << m_mc_pdg << std::endl;
310 }
311 }
312 float clusSide = ( (*m_cls_eta)[i_cls]<0?-1.0:1.0);
313 float clusEta = (*m_cls_eta)[i_cls];
314 float clusPhi = (*m_cls_phi)[i_cls];
315 float clusEner = (*m_cls_ener_unw)[i_cls];
316 if(clusEner > 0.0) {
317 clusEner = std::log10( clusEner );
318 } else {
319 clusEner = 0.0;
320 }
321 float clusLambda = (*m_cls_lambda)[i_cls];
322 if(clusLambda > 0.0) {
323 clusLambda = std::log10(clusLambda);
324 } else{
325 clusLambda = 0.0;
326 }
327 if(clusLambda > 4.0) clusLambda = 3.9999;
328 vars.resize(CaloLocalHadCoeffHelper::DIM_UNKNOWN, 0.0);
329 vars[CaloLocalHadCoeffHelper::DIM_EMFRAC] = clusEmFrac;
330 vars[CaloLocalHadCoeffHelper::DIM_SIDE] = clusSide;
331 vars[CaloLocalHadCoeffHelper::DIM_ETA] = std::abs(clusEta);
332 vars[CaloLocalHadCoeffHelper::DIM_PHI] = clusPhi;
333 vars[CaloLocalHadCoeffHelper::DIM_ENER] = clusEner;
334 vars[CaloLocalHadCoeffHelper::DIM_LAMBDA] = clusLambda;
335 return 0;
336}
337
338
CaloHadDMCoeffData(TTree *tree)
virtual void Init(TTree *tree)
std::vector< double > * m_cls_eta
std::vector< double > * m_cls_ener
std::vector< std::vector< double > > * m_cls_eprep
Int_t fCurrent
pointer to the analyzed TTree or TChain
std::vector< double > * m_cls_engcalibpres
std::vector< double > * m_cls_engcalib
std::vector< double > * m_cls_calib_emfrac
std::vector< double > * m_cls_lambda
std::vector< double > * m_cls_pi0prob
std::vector< double > * m_cls_phi
std::vector< int > * m_cls_recostat
std::vector< double > * m_cls_isol
std::vector< double > * m_cls_ener_unw
virtual Int_t GetEntry(Long64_t entry)
TTree * MakeTree(const char *treename)
std::vector< std::vector< double > > * m_cls_dmener
std::vector< std::vector< double > > * m_cls_smpener
Int_t m_ncls
current Tree number in a TChain
int PackClusterVars(int iClus, std::vector< float > &vars)
std::vector< std::vector< double > > * m_cls_smpener_unw
std::vector< double > * m_cls_oocener
static std::string treename
Definition iLumiCalc.h:31
TChain * tree