ATLAS Offline Software
Loading...
Searching...
No Matches
LArPulseShape.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
14#include "TFile.h"
15#include "TKey.h"
16#include "TTree.h"
17#include "TSystem.h"
18
20
22 const CaloIdManager* caloIdMgr{nullptr};
23 ATH_CHECK( detStore()->retrieve( caloIdMgr ) );
24 m_calo_id = caloIdMgr->getCaloCell_ID();
25
26 ATH_CHECK( m_lumiDataKey.initialize() );
27
28 ATH_CHECK( m_cablingKey.initialize() );
29
30 ATH_CHECK( m_BCKey.initialize() );
31
32 ATH_CHECK( m_trigDec.retrieve() );
33
34 if (m_ntpath.empty() || m_ntTitle.empty()) {
35 ATH_MSG_ERROR( "Need to set variable 'm_ntpath' and 'm_ntTitle' in constructor of deriving class!" );
36 return StatusCode::FAILURE;
37 }
38
39 size_t i=m_ntpath.rfind('/');
40 if (i==std::string::npos) {
41 ATH_MSG_ERROR( "Expected at least on '/' in path " << m_ntpath );
42 return StatusCode::FAILURE;
43 }
44 std::string basepath(m_ntpath.begin(),m_ntpath.begin()+i);
45
46 NTupleFilePtr PULSE(ntupleSvc(),basepath);
47 if (!PULSE){
48 ATH_MSG_ERROR( "Could not get NTupleFilePtr with path " << basepath << " failed" );
49 return StatusCode::FAILURE;
50 }
51 NTuplePtr nt(ntupleSvc(),m_ntpath);
52 if (!nt) {
53 nt=ntupleSvc()->book(m_ntpath,CLID_ColumnWiseTuple,m_ntTitle);
54 }
55 if (!nt){
56 ATH_MSG_ERROR( "Booking of NTuple at "<< m_ntpath << " and name " << m_ntTitle << " failed" );
57 return StatusCode::FAILURE;
58 }
59
60 m_nt=nt;
61
62 int ncell=m_calo_id->calo_cell_hash_max();
63
64 for (int i=0;i<ncell;i++) { // loop over cells to book profiles
65
66 IdentifierHash idHash=i;
67 Identifier id=m_calo_id->cell_id(idHash);
68
69 const int sampl = m_calo_id->sampling( id );
70 int OffId = (int)(id.get_identifier32().get_compact());
71 std::string idoff_str = std::to_string(OffId);
72 const char* id_char = (idoff_str).c_str();
73
74 if (m_calo_id->is_em(id)) { // EM calo
75 if (m_calo_id->is_em_barrel(id)) { //EMB
76 if (m_calo_id->pos_neg(id) > 0 ) { //A-side
77
78 SmartDataPtr<NTuple::Directory> dir_EMBA(ntupleSvc(),"/NTUPLES/PULSE/EMBA");
79 if ( !dir_EMBA ) dir_EMBA = ntupleSvc()->createDirectory(PULSE,"EMBA");
80 if ( !dir_EMBA ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
81
82 if (sampl==0){ // if it's EMBA Presampler
83 SmartDataPtr<NTuple::Directory> dir_EMBA_0(ntupleSvc(),"/NTUPLES/PULSE/EMBA/Presampler");
84 if ( !dir_EMBA_0 ) dir_EMBA_0 = ntupleSvc()->createDirectory(PULSE,"EMBA/Presampler");
85 if ( !dir_EMBA_0 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
86 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
87 }
88
89 if (sampl==1){ // if it's EMBA Sampling1
90 SmartDataPtr<NTuple::Directory> dir_EMBA_1(ntupleSvc(),"/NTUPLES/PULSE/EMBA/Sampling1");
91 if ( !dir_EMBA_1 ) dir_EMBA_1 = ntupleSvc()->createDirectory(PULSE,"EMBA/Sampling1");
92 if ( !dir_EMBA_1 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
93 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
94 }
95
96 if (sampl==2){ // if it's EMBA Sampling2
97 SmartDataPtr<NTuple::Directory> dir_EMBA_2(ntupleSvc(),"/NTUPLES/PULSE/EMBA/Sampling2");
98 if ( !dir_EMBA_2 ) dir_EMBA_2 = ntupleSvc()->createDirectory(PULSE,"EMBA/Sampling2");
99 if ( !dir_EMBA_2 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
100 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
101 }
102
103 if (sampl==3){ // if it's EMBA Sampling3
104 SmartDataPtr<NTuple::Directory> dir_EMBA_3(ntupleSvc(),"/NTUPLES/PULSE/EMBA/Sampling3");
105 if ( !dir_EMBA_3 ) dir_EMBA_3 = ntupleSvc()->createDirectory(PULSE,"EMBA/Sampling3");
106 if ( !dir_EMBA_3 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
107 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
108 }
109
110 } else { // C-side
111
112 SmartDataPtr<NTuple::Directory> dir_EMBC(ntupleSvc(),"/NTUPLES/PULSE/EMBC");
113 if ( !dir_EMBC ) dir_EMBC = ntupleSvc()->createDirectory(PULSE,"EMBC");
114 if ( !dir_EMBC ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
115 if (sampl==0){ // if it's EMBC Presampler
116 SmartDataPtr<NTuple::Directory> dir_EMBC_0(ntupleSvc(),"/NTUPLES/PULSE/EMBC/Presampler");
117 if ( !dir_EMBC_0 ) dir_EMBC_0 = ntupleSvc()->createDirectory(PULSE,"EMBC/Presampler");
118 if ( !dir_EMBC_0 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
119 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
120 }
121
122 if (sampl==1){ // if it's EMBC Sampling1
123 SmartDataPtr<NTuple::Directory> dir_EMBC_1(ntupleSvc(),"/NTUPLES/PULSE/EMBC/Sampling1");
124 if ( !dir_EMBC_1 ) dir_EMBC_1 = ntupleSvc()->createDirectory(PULSE,"EMBC/Sampling1");
125 if ( !dir_EMBC_1 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
126 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
127 }
128
129 if (sampl==2){ // if it's EMBC Sampling2
130 SmartDataPtr<NTuple::Directory> dir_EMBC_2(ntupleSvc(),"/NTUPLES/PULSE/EMBC/Sampling2");
131 if ( !dir_EMBC_2 ) dir_EMBC_2 = ntupleSvc()->createDirectory(PULSE,"EMBC/Sampling2");
132 if ( !dir_EMBC_2 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
133 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
134 }
135
136 if (sampl==3){ // if it's EMBC Sampling3
137 SmartDataPtr<NTuple::Directory> dir_EMBC_3(ntupleSvc(),"/NTUPLES/PULSE/EMBC/Sampling3");
138 if ( !dir_EMBC_3 ) dir_EMBC_3 = ntupleSvc()->createDirectory(PULSE,"EMBC/Sampling3");
139 if ( !dir_EMBC_3 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
140 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
141 }
142
143 }
144
145 } // end EMB
146
147 if( m_calo_id->is_em_endcap(id) ){ //EMEC
148
149 if (m_calo_id->pos_neg(id) > 0 ) { //A-side
150
151 SmartDataPtr<NTuple::Directory> dir_EMECA(ntupleSvc(),"/NTUPLES/PULSE/EMECA");
152 if ( !dir_EMECA ) dir_EMECA = ntupleSvc()->createDirectory(PULSE,"EMECA");
153 if ( !dir_EMECA ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
154
155 if (sampl==0){ // if it's EMECA Presampler
156 SmartDataPtr<NTuple::Directory> dir_EMECA_0(ntupleSvc(),"/NTUPLES/PULSE/EMECA/Presampler");
157 if ( !dir_EMECA_0 ) dir_EMECA_0 = ntupleSvc()->createDirectory(PULSE,"EMECA/Presampler");
158 if ( !dir_EMECA_0 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
159
160 //stopper++;
161 //if (stopper<=10)
162 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
163 }
164
165 if (sampl==1){ // if it's EMECA Sampling1
166 SmartDataPtr<NTuple::Directory> dir_EMECA_1(ntupleSvc(),"/NTUPLES/PULSE/EMECA/Sampling1");
167 if ( !dir_EMECA_1 ) dir_EMECA_1 = ntupleSvc()->createDirectory(PULSE,"EMECA/Sampling1");
168 if ( !dir_EMECA_1 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
169 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
170 }
171
172 if (sampl==2){ // if it's EMECA Sampling2
173 SmartDataPtr<NTuple::Directory> dir_EMECA_2(ntupleSvc(),"/NTUPLES/PULSE/EMECA/Sampling2");
174 if ( !dir_EMECA_2 ) dir_EMECA_2 = ntupleSvc()->createDirectory(PULSE,"EMECA/Sampling2");
175 if ( !dir_EMECA_2 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
176 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
177 }
178
179 if (sampl==3){ // if it's EMECA Sampling3
180 SmartDataPtr<NTuple::Directory> dir_EMECA_3(ntupleSvc(),"/NTUPLES/PULSE/EMECA/Sampling3");
181 if ( !dir_EMECA_3 ) dir_EMECA_3 = ntupleSvc()->createDirectory(PULSE,"EMECA/Sampling3");
182 if ( !dir_EMECA_3 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
183 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
184 }
185
186 } else { // C-side
187
188 SmartDataPtr<NTuple::Directory> dir_EMECC(ntupleSvc(),"/NTUPLES/PULSE/EMECC");
189 if ( !dir_EMECC ) dir_EMECC = ntupleSvc()->createDirectory(PULSE,"EMECC");
190 if ( !dir_EMECC ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
191 if (sampl==0){ // if it's EMECC Presampler
192 SmartDataPtr<NTuple::Directory> dir_EMECC_0(ntupleSvc(),"/NTUPLES/PULSE/EMECC/Presampler");
193 if ( !dir_EMECC_0 ) dir_EMECC_0 = ntupleSvc()->createDirectory(PULSE,"EMECC/Presampler");
194 if ( !dir_EMECC_0 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
195 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
196 }
197
198 if (sampl==1){ // if it's EMECC Sampling1
199 SmartDataPtr<NTuple::Directory> dir_EMECC_1(ntupleSvc(),"/NTUPLES/PULSE/EMECC/Sampling1");
200 if ( !dir_EMECC_1 ) dir_EMECC_1 = ntupleSvc()->createDirectory(PULSE,"EMECC/Sampling1");
201 if ( !dir_EMECC_1 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
202 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
203 }
204
205 if (sampl==2){ // if it's EMECC Sampling2
206 SmartDataPtr<NTuple::Directory> dir_EMECC_2(ntupleSvc(),"/NTUPLES/PULSE/EMECC/Sampling2");
207 if ( !dir_EMECC_2 ) dir_EMECC_2 = ntupleSvc()->createDirectory(PULSE,"EMECC/Sampling2");
208 if ( !dir_EMECC_2 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
209 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
210 }
211
212 if (sampl==3){ // if it's EMECC Sampling3
213 SmartDataPtr<NTuple::Directory> dir_EMECC_3(ntupleSvc(),"/NTUPLES/PULSE/EMECC/Sampling3");
214 if ( !dir_EMECC_3 ) dir_EMECC_3 = ntupleSvc()->createDirectory(PULSE,"EMECC/Sampling3");
215 if ( !dir_EMECC_3 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
216 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
217 }
218
219 }
220 } // end EMEC
221
222
223
224 } // end EM calo
225
226 if( m_calo_id->is_hec(id) ){ //HEC
227
228 if (m_calo_id->pos_neg(id) > 0 ) { //A-side
229
230 SmartDataPtr<NTuple::Directory> dir_HECA(ntupleSvc(),"/NTUPLES/PULSE/HECA");
231 if ( !dir_HECA ) dir_HECA = ntupleSvc()->createDirectory(PULSE,"HECA");
232 if ( !dir_HECA ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
233
234 if (sampl==0){
235 SmartDataPtr<NTuple::Directory> dir_HECA_0(ntupleSvc(),"/NTUPLES/PULSE/HECA/Layer1");
236 if ( !dir_HECA_0 ) dir_HECA_0 = ntupleSvc()->createDirectory(PULSE,"HECA/Layer1");
237 if ( !dir_HECA_0 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
238 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
239 }
240
241 if (sampl==1){
242 SmartDataPtr<NTuple::Directory> dir_HECA_1(ntupleSvc(),"/NTUPLES/PULSE/HECA/Layer2");
243 if ( !dir_HECA_1 ) dir_HECA_1 = ntupleSvc()->createDirectory(PULSE,"HECA/Layer2");
244 if ( !dir_HECA_1 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
245 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
246 }
247
248 if (sampl==2){
249 SmartDataPtr<NTuple::Directory> dir_HECA_2(ntupleSvc(),"/NTUPLES/PULSE/HECA/Layer3");
250 if ( !dir_HECA_2 ) dir_HECA_2 = ntupleSvc()->createDirectory(PULSE,"HECA/Layer3");
251 if ( !dir_HECA_2 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
252 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
253 }
254
255 if (sampl==3){
256 SmartDataPtr<NTuple::Directory> dir_HECA_3(ntupleSvc(),"/NTUPLES/PULSE/HECA/Layer4");
257 if ( !dir_HECA_3 ) dir_HECA_3 = ntupleSvc()->createDirectory(PULSE,"HECA/Layer4");
258 if ( !dir_HECA_3 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
259 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
260 }
261
262 } else { // C-side
263
264 SmartDataPtr<NTuple::Directory> dir_HECC(ntupleSvc(),"/NTUPLES/PULSE/HECC");
265 if ( !dir_HECC ) dir_HECC = ntupleSvc()->createDirectory(PULSE,"HECC");
266 if ( !dir_HECC ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
267 if (sampl==0){
268 SmartDataPtr<NTuple::Directory> dir_HECC_0(ntupleSvc(),"/NTUPLES/PULSE/HECC/Layer1");
269 if ( !dir_HECC_0 ) dir_HECC_0 = ntupleSvc()->createDirectory(PULSE,"HECC/Layer1");
270 if ( !dir_HECC_0 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
271 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
272 }
273
274 if (sampl==1){
275 SmartDataPtr<NTuple::Directory> dir_HECC_1(ntupleSvc(),"/NTUPLES/PULSE/HECC/Layer2");
276 if ( !dir_HECC_1 ) dir_HECC_1 = ntupleSvc()->createDirectory(PULSE,"HECC/Layer2");
277 if ( !dir_HECC_1 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
278 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
279 }
280
281 if (sampl==2){
282 SmartDataPtr<NTuple::Directory> dir_HECC_2(ntupleSvc(),"/NTUPLES/PULSE/HECC/Layer3");
283 if ( !dir_HECC_2 ) dir_HECC_2 = ntupleSvc()->createDirectory(PULSE,"HECC/Layer3");
284 if ( !dir_HECC_2 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
285 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
286 }
287
288 if (sampl==3){
289 SmartDataPtr<NTuple::Directory> dir_HECC_3(ntupleSvc(),"/NTUPLES/PULSE/HECC/Layer4");
290 if ( !dir_HECC_3 ) dir_HECC_3 = ntupleSvc()->createDirectory(PULSE,"HECC/Layer4");
291 if ( !dir_HECC_3 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
292 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
293 }
294
295 }
296 } // end HEC
297 if( m_calo_id->is_fcal(id) ){ //FCAL
298
299 if (m_calo_id->pos_neg(id) > 0 ) { //A-side
300
301 SmartDataPtr<NTuple::Directory> dir_FCALA(ntupleSvc(),"/NTUPLES/PULSE/FCALA");
302 if ( !dir_FCALA ) dir_FCALA = ntupleSvc()->createDirectory(PULSE,"FCALA");
303 if ( !dir_FCALA ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
304
305 if (sampl==1){ // if it's FCALA Sampling1
306 SmartDataPtr<NTuple::Directory> dir_FCALA_1(ntupleSvc(),"/NTUPLES/PULSE/FCALA/Sampling1");
307 if ( !dir_FCALA_1 ) dir_FCALA_1 = ntupleSvc()->createDirectory(PULSE,"FCALA/Sampling1");
308 if ( !dir_FCALA_1 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
309 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
310 }
311
312 if (sampl==2){ // if it's FCALA Sampling2
313 SmartDataPtr<NTuple::Directory> dir_FCALA_2(ntupleSvc(),"/NTUPLES/PULSE/FCALA/Sampling2");
314 if ( !dir_FCALA_2 ) dir_FCALA_2 = ntupleSvc()->createDirectory(PULSE,"FCALA/Sampling2");
315 if ( !dir_FCALA_2 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
316 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
317 }
318
319 if (sampl==3){ // if it's FCALA Sampling3
320 SmartDataPtr<NTuple::Directory> dir_FCALA_3(ntupleSvc(),"/NTUPLES/PULSE/FCALA/Sampling3");
321 if ( !dir_FCALA_3 ) dir_FCALA_3 = ntupleSvc()->createDirectory(PULSE,"FCALA/Sampling3");
322 if ( !dir_FCALA_3 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
323 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
324 }
325
326 } else { // C-side
327
328 SmartDataPtr<NTuple::Directory> dir_FCALC(ntupleSvc(),"/NTUPLES/PULSE/FCALC");
329 if ( !dir_FCALC ) dir_FCALC = ntupleSvc()->createDirectory(PULSE,"FCALC");
330 if ( !dir_FCALC ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
331
332 if (sampl==1){ // if it's FCALC Sampling1
333 SmartDataPtr<NTuple::Directory> dir_FCALC_1(ntupleSvc(),"/NTUPLES/PULSE/FCALC/Sampling1");
334 if ( !dir_FCALC_1 ) dir_FCALC_1 = ntupleSvc()->createDirectory(PULSE,"FCALC/Sampling1");
335 if ( !dir_FCALC_1 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
336 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
337 }
338
339 if (sampl==2){ // if it's FCALC Sampling2
340 SmartDataPtr<NTuple::Directory> dir_FCALC_2(ntupleSvc(),"/NTUPLES/PULSE/FCALC/Sampling2");
341 if ( !dir_FCALC_2 ) dir_FCALC_2 = ntupleSvc()->createDirectory(PULSE,"FCALC/Sampling2");
342 if ( !dir_FCALC_2 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
343 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
344 }
345
346 if (sampl==3){ // if it's FCALC Sampling3
347 SmartDataPtr<NTuple::Directory> dir_FCALC_3(ntupleSvc(),"/NTUPLES/PULSE/FCALC/Sampling3");
348 if ( !dir_FCALC_3 ) dir_FCALC_3 = ntupleSvc()->createDirectory(PULSE,"FCALC/Sampling3");
349 if ( !dir_FCALC_3 ) ATH_MSG_ERROR ( " failed to get ntuple directory" );
350 m_cellHistos.insert(std::make_pair(OffId, new TProfile(id_char, id_char, 40, -4 , 36, "s" )));
351 }
352 }
353 } // end FCAL
354
355 } // loop over cells
356
357 SmartDataPtr<NTuple::Directory> dir_FCALC_3(ntupleSvc(),"/NTUPLES/PULSE/Check");
358 if ( !dir_FCALC_3 ) dir_FCALC_3 = ntupleSvc()->createDirectory(PULSE,"Check");
359
360 m_TProfpulse_diff = new TProfile("test_diff", "test_diff",500, 0, 500, "s");
361
362 m_BCID = new TH1D("BCID", "BCID",3564, 0, 3564);
363 m_diffBCID = new TH1D("diffBCID", "BCID",3564, 0, 3564);
364 m_actualInt = new TH1D("ActualInt", "ActInt", 60, 0, 20);
365
367
371 m_initialized=true;
372 return StatusCode::SUCCESS;
373}
374
375StatusCode LArPulseShape::execute(const EventContext& ctx) {
376
377
378 short int bunchStr[8] = {1, 101, 201, 301, 1786, 1886, 1986, 2086}; //move to JO
379
380 std::vector<std::string> chains = m_trigDec->getListOfTriggers();
381 std::vector<std::string> myChains;
382
384
385 if (m_trigDec->isPassed("L1_RD1_BGRP10")) {
386
387 int bunchId = ctx.eventID().bunch_crossing_id();
388
389 int mindist = 3564;
390 int closestBC = 0;
391 for (int i = 0; i < 8; i++) {
392 if ( (fabs(bunchId - bunchStr[i]) < mindist) || (fabs(bunchId - (bunchStr[i]+3564)) < mindist)) {
393 mindist = std::min(fabs(bunchId - bunchStr[i]),(fabs(bunchId - (bunchStr[i]+3564))));
394 closestBC = bunchStr[i];
395 }
396 }
397 if (fabs(bunchId - closestBC) < (fabs(bunchId - (closestBC+3564)))) {
398 mindist = bunchId - closestBC;
399 } else {
400 mindist = bunchId - (closestBC+3564);
401 }
402
403 //std::cout << "bunchID = " << bunchId<< ", mindist = " << mindist << ", closestBC = " << closestBC << std::endl;
404 m_BCID->Fill(bunchId);
405 m_diffBCID->Fill(mindist);
406
407 m_actualInt->Fill(lumi->lbLuminosityPerBCIDVector().at(closestBC));
408
409 const LArDigitContainer* larDigitContainer;
410 ATH_CHECK( evtStore()->retrieve(larDigitContainer, "FREE") );
411 const ILArPedestal* larPedestal = nullptr;
412 ATH_CHECK( detStore()->retrieve(larPedestal) );
413 if (larDigitContainer->empty()) {
414 ATH_MSG_WARNING ( "LArDigitContainer with key= is empty!" );
415
416 return StatusCode::SUCCESS;
417 }
418
420 const LArOnOffIdMapping* cabling=*larCablingHdl;
421 if(!cabling) {
422 ATH_MSG_ERROR("Could not get LArOnOffIdMapping !!");
423 return StatusCode::FAILURE;
424 }
425 for (LArDigitContainer::const_iterator digit = larDigitContainer->begin(); digit != larDigitContainer->end(); ++digit) {
426
427 HWIdentifier channelID = (*digit)->hardwareID();
428
429 if (cabling->isOnlineConnected(channelID)) {
430
431 CaloGain::CaloGain gain=(*digit)->gain();
432
433 float pedestal = larPedestal->pedestal(channelID, gain);
434
435 int OffId_conv = (int)(cabling->cnvToIdentifier(channelID).get_identifier32().get_compact());
436
437 const std::vector<short>& samples = (*digit)->samples();
438
439 int isample=0;
440 for (short sample : samples) {
441 isample++;
442 if (lumi->lbLuminosityPerBCIDVector().at(closestBC)!=0){
443 m_TProfpulse_diff->Fill(mindist+isample, (sample-pedestal)/lumi->lbLuminosityPerBCIDVector().at(closestBC));//+0,1,2,3
444 auto h_it = m_cellHistos.find(OffId_conv);
445 if (h_it != m_cellHistos.end()) {
446 h_it->second->Fill(mindist+isample, (sample-pedestal)/lumi->lbLuminosityPerBCIDVector().at(closestBC));
447 }
448 }
449 } //loop over samples
450 }
451 }
452
453 }//trigger
454 return StatusCode::SUCCESS;
455}
456
459
460 ATH_MSG_INFO( "LArPulseShape has finished." );
461 return StatusCode::SUCCESS;
462
463}// end finalize-method.
464
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
INTupleSvc * ntupleSvc()
ServiceHandle< StoreGateSvc > & evtStore()
const ServiceHandle< StoreGateSvc > & detStore() const
This class initializes the Calo (LAr and Tile) offline identifiers.
const CaloCell_ID * getCaloCell_ID(void) const
Access to IdHelper.
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
bool empty() const noexcept
Returns true if the collection is empty.
virtual float pedestal(const HWIdentifier &id, int gain) const =0
This is a "hash" representation of an Identifier.
Container class for LArDigit.
std::string m_ntpath
PublicToolHandle< Trig::TrigDecisionTool > m_trigDec
virtual StatusCode initialize() override
void addHistogram(TH1 *h)
std::map< int, TProfile * > m_cellHistos
virtual StatusCode stop() override
SG::ReadCondHandleKey< LuminosityCondData > m_lumiDataKey
TProfile * m_TProfpulse_diff
virtual StatusCode execute(const EventContext &ctx) override
Execute method.
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
virtual ~LArPulseShape()
StringProperty m_ntTitle
NTuple::Tuple * m_nt
const CaloCell_ID * m_calo_id
SG::ReadCondHandleKey< LArBadChannelCont > m_BCKey