ATLAS Offline Software
Loading...
Searching...
No Matches
L1CaloCells2TriggerTowers.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
7
8namespace LVL1{
10 asg::AsgTool( name ),
11 m_lvl1Helper(nullptr),
12 m_tileID(nullptr),
13 m_caloCellHelper(nullptr),
14 m_tileCablingService(nullptr),
15 m_bInitialized(false),
18 {
19 }
20
21 // Return the Calo Cells associated with a TriggerTower
22 std::vector<const CaloCell*> L1CaloCells2TriggerTowers::caloCells(const Identifier& ttId) const {
23
24 std::map<unsigned int, std::vector<const CaloCell*> >::const_iterator it = m_mTTCaloCells.find(ttId.get_identifier32().get_compact());
25 if(it!=m_mTTCaloCells.end()) {
26 return it->second;
27
28 } else {
29 return std::vector<const CaloCell*>();
30 }
31 }
32
33 // Return the Calo Cells associated with a TriggerTower by layers
34 std::vector<std::vector<const CaloCell*> > L1CaloCells2TriggerTowers::caloCellsByLayer(const Identifier& ttId) const {
35 const std::vector<const CaloCell*> vCells(this->caloCells(ttId));
36 std::vector<std::vector<const CaloCell*> > ccByLayer;
37 std::vector<const CaloCell*> cc;
38 int caloSampleInUse(-10); // start this varibale with unrealistic value
39 bool firstCell(true);
40 if(vCells.size()!=0) {
41 std::vector<const CaloCell*>::const_iterator itCells = vCells.begin();
42 for(;itCells!=vCells.end();++itCells) {
43 Identifier Id((*itCells)->ID());
44
45 if(firstCell == true){caloSampleInUse = m_caloCellHelper->calo_sample(Id);firstCell = false;}
46 int currentCaloSample = m_caloCellHelper->calo_sample(Id);
47 if( caloSampleInUse != currentCaloSample ){
48 ccByLayer.push_back(cc);
49 cc.clear();
50 caloSampleInUse = currentCaloSample;
51 }
52 cc.push_back(*itCells);
53 }
54 ccByLayer.push_back(std::move(cc));
55 }
56
57 return ccByLayer;
58 }
59
60 // Return the Calo Cell layer enum
61 std::vector<int> L1CaloCells2TriggerTowers::layerNames(const Identifier& ttId) const {
62 const std::vector<const CaloCell*> vCells(this->caloCells(ttId));
63 std::vector<int> layers;
64 int caloSampleInUse(-10); // start this varibale with unrealistic value
65 if(vCells.size()!=0) {
66 std::vector<const CaloCell*>::const_iterator itCells = vCells.begin();
67 for(;itCells!=vCells.end();++itCells) {
68 Identifier Id((*itCells)->ID());
69
70 int currentCaloSample = m_caloCellHelper->calo_sample(Id);
71 if( caloSampleInUse != currentCaloSample ){
72 layers.push_back(currentCaloSample);
73 caloSampleInUse = currentCaloSample;
74 }
75 }
76 }
77 return layers;
78 }
79
81 return m_caloCellHelper->calo_sample( cell->ID() );
82 }
83
84 // Return the energy sum from a vector of calo cells
85 float L1CaloCells2TriggerTowers::energy(const std::vector<const CaloCell*> &cells) const {
86 // mode : 0 == Energy, 1 == Et
87 unsigned int mode(0);
88 return this->calcEnergyOrEt(cells,mode);
89 }
90
91 // Return the Et sum from a vector of calo cells
92 float L1CaloCells2TriggerTowers::et(const std::vector<const CaloCell*> &cells) const {
93 // mode : 0 == Energy, 1 == Et
94 unsigned int mode(1);
95 return this->calcEnergyOrEt(cells,mode);
96 }
97
99 return this->energy( this->caloCells(ttId) );
100 }
101
102 float L1CaloCells2TriggerTowers::et(const Identifier& ttId) const {
103 return this->et( this->caloCells(ttId) );
104 }
105
106 // Calculate Energy or Et
107 float L1CaloCells2TriggerTowers::calcEnergyOrEt(const std::vector<const CaloCell*> &cells,const unsigned int mode) const{
108 float energy(0.),et(0.),GeV(1000.0);
109 if(cells.size()!=0) {
110 typedef std::vector<const CaloCell*>::const_iterator Itr;
111
112 for(Itr i=cells.begin();i!=cells.end();++i) {
113 Identifier Id((*i)->ID());
114 float cellEnergy(0.0);
115 // Tile cells
116 if(m_caloCellHelper->is_tile(Id)) {
117 int section = m_caloCellHelper->section(Id);
118 int sample = m_caloCellHelper->sample(Id);
119
120 if( (section==1 || section==2) && sample==2) { //D-cells, except D4
121 cellEnergy+=(*i)->energy()*0.5;
122
123 } else {
124 cellEnergy+=(*i)->energy();
125 }
126
127 // LArg cells
128 } else {
129 cellEnergy+=(*i)->energy(); // sampling weights between layers in TBB ?
130 }
131 if(mode == 0){energy += cellEnergy;}
132 if(mode == 1){et += cellEnergy/cosh((*i)->eta());}
133 }
134 }
135 if(mode == 0){return energy / GeV;}
136 if(mode == 1){return et / GeV;}
137 return energy / GeV;
138 }
139
140 // The rest of this file is initialize or finalise or legacy
141
142
144 ATH_MSG_INFO("Initialize LVL1::L1CaloCells2TriggerTowers");
145
146 ATH_CHECK( m_cellMatch.retrieve() );
147
148 StatusCode sc;
149
150 const CaloIdManager* caloMgr = nullptr;
151 sc = detStore()->retrieve(caloMgr);
152 if(sc.isFailure()){ATH_MSG_ERROR("Failed to load CaloMgr");return sc;}
153
154 m_caloCellHelper = caloMgr->getCaloCell_ID();
155 if (!m_caloCellHelper) {
156 ATH_MSG_ERROR("Could not access CaloCell_ID helper");
157 return StatusCode::FAILURE;
158 }
159
160 // Get LVL1 idhelper from detector store and add to mgr
161 const CaloLVL1_ID* lvl1_id = 0;
162 sc = detStore()->retrieve(lvl1_id, "CaloLVL1_ID");
163 if(sc.isFailure()){ATH_MSG_ERROR("Failed to get CaloLVL1_ID");return sc;}
164 m_lvl1Helper = static_cast<const CaloLVL1_ID*> (lvl1_id);
165
166 sc = detStore()->retrieve(m_tileID, "TileID") ;
167 if(sc.isFailure()){ATH_MSG_ERROR("Failed to get Tile_ID");return sc;}
168
169 //Retrieve cabling & tt services
170 ATH_CHECK( m_ttSvc.retrieve() );
171
173
174 ATH_CHECK( m_cablingKey.initialize() );
175
176 return sc;
177 }
178
180 return StatusCode::SUCCESS;
181 }
182
184
186
187 this->resetCaloCells();
188
189 std::vector<Identifier>::const_iterator it_towerId = m_lvl1Helper->tower_begin();
190 std::vector<Identifier>::const_iterator it_towerEnd = m_lvl1Helper->tower_end();
191
192 // loop on online channels
193 for(; it_towerId!=it_towerEnd;++it_towerId){
194 m_mTTCaloCells[(*it_towerId).get_identifier32().get_compact()].reserve(60);
195 }
196
197 CaloCellContainer::const_iterator itCell = cellContainer.begin();
198 for (;itCell!=cellContainer.end();++itCell){
199
200 const CaloCell * caloCell= *itCell;
201 const Identifier invalidId(0);
202 Identifier ttId1;
203 Identifier ttId2;
204
205 m_cellMatch->matchCell2Tower(**cabling, caloCell, ttId1, ttId2);
206
207 if (ttId1 != invalidId) {
208 m_mTTCaloCells[ttId1.get_identifier32().get_compact()].push_back(caloCell);
209 }
210 if (ttId2 != invalidId) { // Tile D cells match to two towers
211 m_mTTCaloCells[ttId2.get_identifier32().get_compact()].push_back(caloCell);
212 }
213
214 } // end loop on calo cells
215
216 m_bInitialized = true;
217 return m_bInitialized;
218 }
219
221
222 this->resetLArDigits();
223
225
226 std::vector<Identifier>::const_iterator it_towerId = m_lvl1Helper->tower_begin();
227 std::vector<Identifier>::const_iterator it_towerEnd = m_lvl1Helper->tower_end();
228
229 // loop on online channels
230 for(; it_towerId!=it_towerEnd;++it_towerId){
231 m_mTTLArDigits[(*it_towerId).get_identifier32().get_compact()].reserve(60);
232 }
233
234 LArDigitContainer::const_iterator itLArDigit = larDigitContainer.begin();
235 for (;itLArDigit!=larDigitContainer.end();++itLArDigit){
236
237 const LArDigit * larDigit= *itLArDigit;
238 const HWIdentifier larDigitChannelID = larDigit->channelID();
239
240 if(cabling->isOnlineConnected(larDigitChannelID)) {
241 // convert HWID to ID
242 Identifier larDigitID = cabling->cnvToIdentifier(larDigitChannelID);
243
244 //whichTTID ttId returns a layer_id, not a tower_id !
245 const Identifier layerId(m_ttSvc->whichTTID(larDigitID));
246
247 // We are not calling here m_ttSvc->is_in_lvl1(cellId) but use directly its code for a performance reason
248 // By doing so we save a redundant and costly call to m_ttSvc->whichTTID()
249 bool lvl1(true);
250 if(m_caloCellHelper->is_em_barrel(larDigitID)) {
251 int samp=m_caloCellHelper->sampling(larDigitID);
252 if(samp==0) {
253 int eta=m_caloCellHelper->eta(larDigitID);
254 if(eta==60) {
255 lvl1 = false ;
256 }
257 }
258 } else {
259 if(m_lvl1Helper->is_hec(layerId)) {
260 int layer(m_lvl1Helper->layer(layerId));
261 if(layer == 3){
262 lvl1 = false ;
263 }
264 }
265 }
266
267 if(lvl1) { //there are 1216 LArg Cells that are not part of lvl1
268 //whichTTID ttId returns a layer_id, not a tower_id !
269 // As we don't want the layer information embedded in the identifier, we recreate a tower Id
270 const Identifier ttId = m_lvl1Helper->tower_id( m_lvl1Helper->pos_neg_z(layerId), m_lvl1Helper->sampling(layerId), m_lvl1Helper->region(layerId), m_lvl1Helper->eta(layerId), m_lvl1Helper->phi(layerId));
271 m_mTTLArDigits[ttId.get_identifier32().get_compact()].push_back(larDigit);
272 }
273 }
274 } // end loop on calo cells
275
278 }
279
281
282 this->resetTileDigits();
283
284
285 std::vector<Identifier>::const_iterator it_towerId = m_lvl1Helper->tower_begin();
286 std::vector<Identifier>::const_iterator it_towerEnd = m_lvl1Helper->tower_end();
287
288 // loop on online channels
289 for(; it_towerId!=it_towerEnd;++it_towerId){
290 m_mTTTileDigits[(*it_towerId).get_identifier32().get_compact()].reserve(8);
291 }
292
293 TileDigitsContainer::const_iterator collItr = tileDigitsContainer.begin();
294 TileDigitsContainer::const_iterator lastColl = tileDigitsContainer.end();
295
296 for(; collItr!=lastColl; ++collItr) {
297
298 TileDigitsCollection::const_iterator digitsItr=(*collItr)->begin();
299 TileDigitsCollection::const_iterator lastDigits=(*collItr)->end();
300
301 if (digitsItr!=lastDigits) {
302 for(; digitsItr!=lastDigits; ++digitsItr) {
303
304 const TileDigits* tileDigit = *digitsItr;
305 const Identifier tileDigitID = tileDigit->cell_ID(); // return a cell_id (up to sampling info; pmt & adc set to 0)
306
307 if (m_caloCellHelper->is_tile(tileDigitID)) {
308
309 int section = m_tileID->section(tileDigitID);
310 int sample = m_tileID->sample(tileDigitID);
311
312 // gap detector - D4 & C10 cells
313 // both pmt of D4 belong to the same TT
314 if(section==3 && (sample==1 || sample==2) ) {
315 Identifier ttId = m_tileCablingService->cell2tt_id(tileDigitID);
316 m_mTTTileDigits[ttId.get_identifier32().get_compact()].push_back(tileDigit);
317
318 // barrel & ext. barrel - D cells
319 } else if( (section==1 || section==2) && sample==2) {
320
321 // special treatment of D-cells
322 // each pmt is affected to a different trigger tower
323 // each D-CaloCell is then added to 2 TT. This must ne taken into account when computing the TT energy
324 // from the CaloCells by dividing the D-cell energy by 2.
325 Identifier lTTId = m_tileCablingService->pmt2tt_id(m_tileID->pmt_id(tileDigitID, 0));
326 m_mTTTileDigits[lTTId.get_identifier32().get_compact()].push_back(tileDigit);
327
328 Identifier rTTId = m_tileCablingService->pmt2tt_id(m_tileID->pmt_id(tileDigitID, 1));
329 m_mTTTileDigits[rTTId.get_identifier32().get_compact()].push_back(tileDigit);
330
331 // barrel & ext. barrel - A & BC cells
332 } else if( (section==1 || section==2) && (sample==0 || sample==1) ) {
333 Identifier ttId = m_tileCablingService->cell2tt_id(tileDigitID);
334 m_mTTTileDigits[ttId.get_identifier32().get_compact()].push_back(tileDigit);
335 }
336 }
337 }
338 }
339 }
340
343
344 return true;
345 }
346
347
348
350 this->resetCaloCells();
351 this->resetLArDigits();
352 this->resetTileDigits();
353 }
354
359
364
369
370
371 std::vector<const LArDigit*> L1CaloCells2TriggerTowers::larDigits(const Identifier& ttId) const {
372
373 std::map<unsigned int, std::vector<const LArDigit*> >::const_iterator it = m_mTTLArDigits.find(ttId.get_identifier32().get_compact());
374 if(it!=m_mTTLArDigits.end()) {
375 return it->second;
376
377 } else {
378 return std::vector<const LArDigit*>();
379 }
380 }
381
382 std::vector<const TileDigits*> L1CaloCells2TriggerTowers::tileDigits(const Identifier& ttId) const {
383
384 std::map<unsigned int, std::vector<const TileDigits*> >::const_iterator it = m_mTTTileDigits.find(ttId.get_identifier32().get_compact());
385 if(it!=m_mTTTileDigits.end()) {
386 return it->second;
387
388 } else {
389 return std::vector<const TileDigits*>();
390 }
391 }
392
393
394
395 std::vector<double> L1CaloCells2TriggerTowers::samples(const Identifier& ttId) const {
396
397 if (m_lvl1Helper->is_tile(ttId)) {
398
399 std::vector<const TileDigits*> vTileDigits(this->tileDigits(ttId));
400
401 std::vector<double> vADCSum;
402 int nSum=0;
403
404 std::vector<const TileDigits*>::const_iterator it_digit = vTileDigits.begin();
405 for(;it_digit!=vTileDigits.end();++it_digit) {
406
407 std::vector<double> vADC((*it_digit)->get_digits());
408
409 int adcSize(vADC.size());
410 if(vADCSum.size()==0) vADCSum.resize(adcSize);
411
412 for(int i=0;i<adcSize;++i) {
413 vADCSum[i]+=vADC[i];
414 }
415 ++nSum;
416 }
417
418 std::vector<double>::iterator it_adc = vADCSum.begin();
419 if(nSum > 0){
420 const double inv_nSum = 1. / static_cast<double> (nSum);
421 for(;it_adc!=vADCSum.end();++it_adc){
422 (*it_adc) *= inv_nSum;
423 }
424 }
425
426 return vADCSum;
427
428 //LArg cells
429 } else {
430 //log<<MSG::INFO<<"is_lar"<<endmsg;
431 std::vector<const LArDigit*> vLArDigits(this->larDigits(ttId));
432
433 std::vector<double> vADCSum;
434 int nSum=0;
435
436 std::vector<const LArDigit*>::const_iterator it_digit = vLArDigits.begin();
437 for(;it_digit!=vLArDigits.end();++it_digit) {
438
439 std::vector<short> vADC((*it_digit)->samples());
440
441 int adcSize(vADC.size());
442 if(vADCSum.size()==0) vADCSum.resize(adcSize);
443
444 for(int i=0;i<adcSize;++i) {
445 vADCSum[i]+=vADC[i];
446 }
447 ++nSum;
448 }
449
450 std::vector<double>::iterator it_adc = vADCSum.begin();
451 if(nSum > 0){
452 const double inv_nSum = 1. / static_cast<double> (nSum);
453 for(;it_adc!=vADCSum.end();++it_adc){
454 (*it_adc) *= inv_nSum;
455 }
456 }
457
458 return vADCSum;
459 }
460 }
461
462
464
465 std::map<unsigned int, std::vector<const CaloCell*> >::const_iterator it = m_mTTCaloCells.find(ttId.get_identifier32().get_compact());
466 if(it!=m_mTTCaloCells.end()) {
467
468 ATH_MSG_INFO("Trigger Tower: " << ttId.get_compact() <<" - "<< m_lvl1Helper->pos_neg_z(ttId)<<" "<<m_lvl1Helper->sampling(ttId)<<" "<<m_lvl1Helper->region(ttId)<<" "<<m_lvl1Helper->eta(ttId)<<" "<<m_lvl1Helper->phi(ttId)<<" "<<m_lvl1Helper->layer(ttId)<<" - E: "<< this->energy(ttId) );
469
470 std::vector<const CaloCell*> vCells = it->second;
471 this->dump(vCells);
472
473 } else {
474 ATH_MSG_INFO("No trigger tower with Id="<< ttId.get_compact() <<" found.");
475 }
476 }
477
479
480
481 ATH_MSG_INFO("dumping TT->CaloCells: "<< m_mTTCaloCells.size());
482 std::map<unsigned int, std::vector<const CaloCell*> >::const_iterator it = m_mTTCaloCells.begin();
483 for(;it!=m_mTTCaloCells.end();++it) {
484 Identifier ttId(it->first);
485
486 ATH_MSG_INFO("Trigger Tower: " << ttId.get_compact() <<" - "<< m_lvl1Helper->pos_neg_z(ttId)<<" "<<m_lvl1Helper->sampling(ttId)<<" "<<m_lvl1Helper->region(ttId)<<" "<<m_lvl1Helper->eta(ttId)<<" "<<m_lvl1Helper->phi(ttId)<<" "<<m_lvl1Helper->layer(ttId)<<" - E: "<< this->energy(ttId) );
487
488 std::vector<const CaloCell*> vCells = it->second;
489 this->dump(vCells);
490 }
491 }
492
493 void L1CaloCells2TriggerTowers::dump(const std::vector<const CaloCell*>& vCells) const {
494
495
496 ATH_MSG_INFO("ncells: "<< vCells.size());
497 std::vector<const CaloCell*>::const_iterator itCells = vCells.begin();
498 for(;itCells!=vCells.end();++itCells) {
499 Identifier Id = (*itCells)->ID();
500
501 if(m_caloCellHelper->is_tile(Id)) {
502 int section = m_caloCellHelper->section(Id);
503 int side = m_caloCellHelper->side(Id);
504 int module = m_caloCellHelper->module(Id);
505 int tower = m_caloCellHelper->tower(Id);
506 int sample = m_caloCellHelper->sample(Id);
507 ATH_MSG_INFO(" * tile - section: "<<section << ", side: "<<side<< ", module: "<<module<< ", tower: "<<tower<< ", sample: "<<sample<<" - eta: "<< (*itCells)->eta()<<", phi: "<< (*itCells)->phi()<< ", E:" << (*itCells)->energy() );
508
509 } else if (m_caloCellHelper->is_fcal(Id)) {
510 //needd fcal case
511 int pos_neg = m_caloCellHelper->pos_neg(Id);
512 int module = m_caloCellHelper->sampling(Id);
513 int eta = m_caloCellHelper->eta(Id);
514 int phi = m_caloCellHelper->phi(Id);
515 ATH_MSG_INFO(" * fcal - pos_neg_z: "<<pos_neg<< ", module: "<<module<<", ieta: "<<eta<< ", iphi: "<<phi<<" - eta: "<< (*itCells)->eta()<<", phi: "<< (*itCells)->phi()<< ", E:" << (*itCells)->energy() );
516
517 } else {
518 int pos_neg = m_caloCellHelper->pos_neg(Id);
519 int sampling = m_caloCellHelper->sampling(Id);
520 int region = m_caloCellHelper->region(Id);
521 int eta = m_caloCellHelper->eta(Id);
522 int phi = m_caloCellHelper->phi(Id);
523 ATH_MSG_INFO(" * larg - pos_neg_z: "<<pos_neg<< ", sampling: "<<sampling<< ", region: "<<region<< ", ieta: "<<eta<< ", iphi: "<<phi<<" - eta: "<< (*itCells)->eta()<<", phi: "<< (*itCells)->phi()<< ", E:" << (*itCells)->energy() );
524 }
525 }
526 }
527
528 void L1CaloCells2TriggerTowers::dump(const std::vector<const LArDigit*>& vLArDigits) const {
529
531
532 ATH_MSG_INFO( "ncells: "<< vLArDigits.size() );
533 std::vector<const LArDigit*>::const_iterator itLArDigits = vLArDigits.begin();
534 for(;itLArDigits!=vLArDigits.end();++itLArDigits) {
535
536 const LArDigit* larDigit= *itLArDigits;
537 HWIdentifier hwId = larDigit->channelID();
538 Identifier larDigitID = cabling->cnvToIdentifier(hwId);
539
540 ATH_MSG_INFO( "pos_neg: " << m_caloCellHelper->pos_neg(larDigitID)<<", sampling: "<< m_caloCellHelper->sampling(larDigitID)<<", region: "<< m_caloCellHelper->region(larDigitID)<<", eta: "<< m_caloCellHelper->eta(larDigitID)<<", phi: "<< m_caloCellHelper->phi(larDigitID) );
541 std::vector<short> vADC= larDigit->samples();
542 std::vector<short>::const_iterator it_sample = vADC.begin();
543 for(;it_sample!=vADC.end();++it_sample) std::cout<< *it_sample<<" ";
544 std::cout<<std::endl;
545 }
546 }
547
549
550 // if Tile
551 if (m_lvl1Helper->is_tile(ttId)) {
552 this->dumpTileDigits(ttId);
553
554 //LArg cells
555 } else {
556 this->dumpLArDigits(ttId);
557 }
558 }
559
560
562
563 std::map<unsigned int, std::vector<const LArDigit*> >::const_iterator it = m_mTTLArDigits.find(ttId.get_identifier32().get_compact());
564 if(it!=m_mTTLArDigits.end()) {
565
566 ATH_MSG_INFO( "Trigger Tower: " << ttId.get_compact() <<" - "<< m_lvl1Helper->pos_neg_z(ttId)<<" "<<m_lvl1Helper->sampling(ttId)<<" "<<m_lvl1Helper->region(ttId)<<" "<<m_lvl1Helper->eta(ttId)<<" "<<m_lvl1Helper->phi(ttId)<<" "<<m_lvl1Helper->layer(ttId)<<" - E: "<< this->energy(ttId) );
567 std::vector<const LArDigit*> vLArDigits = it->second;
568 this->dump(vLArDigits);
569 } else {
570 ATH_MSG_INFO( "No trigger tower with Id="<< ttId.get_compact() <<" found." );
571 }
572 }
573
575
576 ATH_MSG_INFO( "dumping TT->LArDigits: "<< m_mTTLArDigits.size() );
577 std::map<unsigned int, std::vector<const LArDigit*> >::const_iterator it = m_mTTLArDigits.begin();
578 for(;it!=m_mTTLArDigits.end();++it) {
579 Identifier ttId(it->first);
580
581 ATH_MSG_INFO( "Trigger Tower: " << ttId.get_compact() <<" - "<< m_lvl1Helper->pos_neg_z(ttId)<<" "<<m_lvl1Helper->sampling(ttId)<<" "<<m_lvl1Helper->region(ttId)<<" "<<m_lvl1Helper->eta(ttId)<<" "<<m_lvl1Helper->phi(ttId)<<" "<<m_lvl1Helper->layer(ttId)<<" - E: "<< this->energy(ttId) );
582 std::vector<const LArDigit*> vLArDigits = it->second;
583 this->dump(vLArDigits);
584 }
585 }
586
587
588 void L1CaloCells2TriggerTowers::dump(const std::vector<const TileDigits*>& vTileDigits) const {
589
590 ATH_MSG_INFO( "ncells: "<< vTileDigits.size() );
591 std::vector<const TileDigits*>::const_iterator itTileDigits = vTileDigits.begin();
592 for(;itTileDigits!=vTileDigits.end();++itTileDigits) {
593
594 const TileDigits* tileDigit= *itTileDigits;
595 Identifier tileDigitID = tileDigit->identify();
596
597 int section = m_caloCellHelper->section(tileDigitID);
598 int side = m_caloCellHelper->side(tileDigitID);
599 int module = m_caloCellHelper->module(tileDigitID);
600 int tower = m_caloCellHelper->tower(tileDigitID);
601 int sample = m_caloCellHelper->sample(tileDigitID);
602 ATH_MSG_INFO( "section: "<<section << ", side: "<<side<< ", module: "<<module<< ", tower: "<<tower<< ", sample: "<<sample );
603 std::vector<double> vADC = tileDigit->get_digits();
604 std::vector<double>::const_iterator it_sample = vADC.begin();
605 for(;it_sample!=vADC.end();++it_sample){
606 ATH_MSG_INFO(" --> "<< *it_sample);
607 ATH_MSG_INFO(" ");
608 }
609 }
610 }
611
613
614 std::map<unsigned int, std::vector<const TileDigits*> >::const_iterator it = m_mTTTileDigits.find(ttId.get_identifier32().get_compact());
615 if(it!=m_mTTTileDigits.end()) {
616
617 ATH_MSG_INFO( "Trigger Tower: " << ttId.get_compact() <<" - "<< m_lvl1Helper->pos_neg_z(ttId)<<" "<<m_lvl1Helper->sampling(ttId)<<" "<<m_lvl1Helper->region(ttId)<<" "<<m_lvl1Helper->eta(ttId)<<" "<<m_lvl1Helper->phi(ttId)<<" "<<m_lvl1Helper->layer(ttId)<<" - E: "<< this->energy(ttId) );
618 std::vector<const TileDigits*> vTileDigits = it->second;
619 this->dump(vTileDigits);
620 } else {
621 ATH_MSG_INFO( "No trigger tower with Id="<< ttId.get_compact() <<" found." );
622 }
623 }
624
626 ATH_MSG_INFO( "dumping TT->TileDigits: "<< m_mTTTileDigits.size() );
627 std::map<unsigned int, std::vector<const TileDigits*> >::const_iterator it = m_mTTTileDigits.begin();
628 for(;it!=m_mTTTileDigits.end();++it) {
629 Identifier ttId(it->first);
630
631 ATH_MSG_INFO( "Trigger Tower: " << ttId.get_compact() <<" - "<< m_lvl1Helper->pos_neg_z(ttId)<<" "<<m_lvl1Helper->sampling(ttId)<<" "<<m_lvl1Helper->region(ttId)<<" "<<m_lvl1Helper->eta(ttId)<<" "<<m_lvl1Helper->phi(ttId)<<" "<<m_lvl1Helper->layer(ttId)<<" - E: "<< this->energy(ttId) );
632 std::vector<const TileDigits*> vTileDigits = it->second;
633 this->dump(vTileDigits);
634 }
635 }
636} // end of namespace
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
static const ITkStripOnlineId invalidId
static Double_t sc
void section(const std::string &sec)
const ServiceHandle< StoreGateSvc > & detStore() const
Container class for CaloCell.
Data object for each calorimeter readout cell.
Definition CaloCell.h:57
This class initializes the Calo (LAr and Tile) offline identifiers.
const CaloCell_ID * getCaloCell_ID(void) const
Access to IdHelper.
Helper class for offline TT identifiers.
Definition CaloLVL1_ID.h:66
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.
value_type get_compact() const
Get the compact id.
value_type get_compact() const
Get the compact id.
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
Container class for LArDigit.
Liquid Argon digit base class.
Definition LArDigit.h:25
const std::vector< short > & samples() const
Definition LArDigit.h:78
const HWIdentifier & channelID() const
Definition LArDigit.h:69
virtual void dumpTileDigits() const override
virtual void dumpCaloCells() const override
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
virtual void dump(const std::vector< const CaloCell * > &vCells) const override
virtual float calcEnergyOrEt(const std::vector< const CaloCell * > &cells, const unsigned int mode) const override
virtual void dumpLArDigits() const override
virtual std::vector< std::vector< const CaloCell * > > caloCellsByLayer(const Identifier &ttId) const override
virtual std::vector< const CaloCell * > caloCells(const Identifier &ttId) const override
virtual std::vector< const LArDigit * > larDigits(const Identifier &ttId) const override
ToolHandle< CaloTriggerTowerService > m_ttSvc
virtual bool initLArDigitsTriggerTowers(const LArDigitContainer &larDigitContainer) override
virtual std::vector< int > layerNames(const Identifier &ttID) const override
virtual float et(const std::vector< const CaloCell * > &cells) const override
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
virtual std::vector< double > samples(const Identifier &ttId) const override
virtual bool initCaloCellsTriggerTowers(const CaloCellContainer &cellContainer) override
Declare the interface that the class provides.
std::map< unsigned int, std::vector< const TileDigits * > > m_mTTTileDigits
ToolHandle< LVL1::IL1CaloMatchCell2Tower > m_cellMatch
virtual float energy(const std::vector< const CaloCell * > &cells) const override
const TileCablingService * m_tileCablingService
std::map< unsigned int, std::vector< const LArDigit * > > m_mTTLArDigits
std::map< unsigned int, std::vector< const CaloCell * > > m_mTTCaloCells
L1CaloCells2TriggerTowers()=delete
delete the big 4
virtual bool initTileDigitsTriggerTowers(const TileDigitsContainer &tileDigitsContainer) override
virtual std::vector< const TileDigits * > tileDigits(const Identifier &ttId) const override
virtual void dumpDigits(const Identifier &ttId) const override
static const TileCablingService * getInstance()
get pointer to service instance
std::vector< double > get_digits(void) const
Definition TileDigits.h:65
Identifier identify(void) const
Definition TileRawData.h:52
Identifier cell_ID(void) const
AsgTool(const std::string &name)
Constructor specifying the tool instance's name.
Definition AsgTool.cxx:58
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
-event-from-file