ATLAS Offline Software
L1CaloCells2TriggerTowers.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 
8 namespace 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),
16  m_bLArDigitsInitialized(false),
17  m_bTileDigitsInitialized(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(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 
98  float L1CaloCells2TriggerTowers::energy(const Identifier& ttId) const {
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 = (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 
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 
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 
356  m_bInitialized = false;
357  m_mTTCaloCells.clear();
358  }
359 
361  m_bLArDigitsInitialized = false;
362  m_mTTLArDigits.clear();
363  }
364 
366  m_bTileDigitsInitialized = false;
367  m_mTTTileDigits.clear();
368  }
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
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
RunTileCalibRec.cells
cells
Definition: RunTileCalibRec.py:271
LVL1::L1CaloCells2TriggerTowers::m_tileID
const TileID * m_tileID
Definition: L1CaloCells2TriggerTowers.h:121
LVL1::L1CaloCells2TriggerTowers::m_mTTCaloCells
std::map< unsigned int, std::vector< const CaloCell * > > m_mTTCaloCells
Definition: L1CaloCells2TriggerTowers.h:139
et
Extra patterns decribing particle interation process.
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:17
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
CaloCell_Base_ID::region
int region(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
CaloCell_Base_ID::tower
int tower(const Identifier id) const
Tile field values (NOT_VALID == invalid request)
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
LVL1::L1CaloCells2TriggerTowers::m_lvl1Helper
const CaloLVL1_ID * m_lvl1Helper
Definition: L1CaloCells2TriggerTowers.h:120
TileCablingService::pmt2tt_id
Identifier pmt2tt_id(const Identifier &id) const
Definition: TileCablingService.cxx:375
LVL1::L1CaloCells2TriggerTowers::initLArDigitsTriggerTowers
virtual bool initLArDigitsTriggerTowers(const LArDigitContainer &larDigitContainer) override
Definition: L1CaloCells2TriggerTowers.cxx:220
TileCablingService::getInstance
static const TileCablingService * getInstance()
get pointer to service instance
Definition: TileCablingService.cxx:24
LVL1::L1CaloCells2TriggerTowers::tileDigits
virtual std::vector< const TileDigits * > tileDigits(const Identifier &ttId) const override
Definition: L1CaloCells2TriggerTowers.cxx:382
L1CaloCells2TriggerTowers.h
LVL1::L1CaloCells2TriggerTowers::reset
virtual void reset() override
Definition: L1CaloCells2TriggerTowers.cxx:349
LVL1::L1CaloCells2TriggerTowers::L1CaloCells2TriggerTowers
L1CaloCells2TriggerTowers()=delete
delete the big 4
CaloCell_Base_ID::pos_neg
int pos_neg(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
LVL1::L1CaloCells2TriggerTowers::dumpTileDigits
virtual void dumpTileDigits() const override
Definition: L1CaloCells2TriggerTowers.cxx:625
LVL1::L1CaloCells2TriggerTowers::resetCaloCells
virtual void resetCaloCells() override
Definition: L1CaloCells2TriggerTowers.cxx:355
ReadCellNoiseFromCool.cabling
cabling
Definition: ReadCellNoiseFromCool.py:154
module_driven_slicing.layers
layers
Definition: module_driven_slicing.py:114
LArDigit::samples
const std::vector< short > & samples() const
Definition: LArDigit.h:78
LVL1::L1CaloCells2TriggerTowers::resetLArDigits
virtual void resetLArDigits() override
Definition: L1CaloCells2TriggerTowers.cxx:360
skel.it
it
Definition: skel.GENtoEVGEN.py:396
asg
Definition: DataHandleTestTool.h:28
Tile_Base_ID::sample
int sample(const Identifier &id) const
Definition: Tile_Base_ID.cxx:171
Identifier::get_identifier32
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
Identifier::get_compact
value_type get_compact() const
Get the compact id.
CaloLVL1_ID::region
int region(const Identifier id) const
return region according to :
Definition: CaloLVL1_ID.h:647
LVL1::L1CaloCells2TriggerTowers::m_mTTLArDigits
std::map< unsigned int, std::vector< const LArDigit * > > m_mTTLArDigits
Definition: L1CaloCells2TriggerTowers.h:140
LVL1::L1CaloCells2TriggerTowers::m_bLArDigitsInitialized
bool m_bLArDigitsInitialized
Definition: L1CaloCells2TriggerTowers.h:135
CaloCell_Base_ID::calo_sample
int calo_sample(const Identifier id) const
returns an int taken from Sampling enum and describing the subCalo to which the Id belongs.
Definition: CaloCell_Base_ID.cxx:141
CaloCell_Base_ID::is_tile
bool is_tile(const Identifier id) const
test if the id belongs to the Tiles
CaloCell_Base_ID::module
int module(const Identifier id) const
Tile field values (NOT_VALID == invalid request)
TileDigitsContainer
Definition: TileDigitsContainer.h:13
HWIdentifier
Definition: HWIdentifier.h:13
LVL1
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
Definition: ICMMCPHitsCnvTool.h:18
LVL1::L1CaloCells2TriggerTowers::m_caloCellHelper
const CaloCell_ID * m_caloCellHelper
Definition: L1CaloCells2TriggerTowers.h:122
Identifier32::get_compact
value_type get_compact() const
Get the compact id.
Definition: Identifier32.h:44
CaloLVL1_ID::tower_end
id_iterator tower_end() const
end iterator over towers
Definition: CaloLVL1_ID.h:603
CaloLVL1_ID::layer
int layer(const Identifier id) const
return layer according to :
Definition: CaloLVL1_ID.h:665
LVL1::L1CaloCells2TriggerTowers::m_ttSvc
ToolHandle< CaloTriggerTowerService > m_ttSvc
Definition: L1CaloCells2TriggerTowers.h:130
ReadCondHandle.h
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
CaloLVL1_ID::is_hec
bool is_hec(const Identifier id) const
Test wether given tower or layer is part of the HEC.
Definition: CaloLVL1_ID.h:703
TRT::Hit::side
@ side
Definition: HitInfo.h:83
LVL1::L1CaloCells2TriggerTowers::finalize
virtual StatusCode finalize() override
Definition: L1CaloCells2TriggerTowers.cxx:179
CaloLVL1_ID::phi
int phi(const Identifier id) const
return phi according to :
Definition: CaloLVL1_ID.h:659
python.PyAthena.module
module
Definition: PyAthena.py:131
TileDigits::get_digits
std::vector< double > get_digits(void) const
Definition: TileDigits.h:65
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
CaloIdManager
This class initializes the Calo (LAr and Tile) offline identifiers.
Definition: CaloIdManager.h:45
FullCPAlgorithmsTest_eljob.sample
sample
Definition: FullCPAlgorithmsTest_eljob.py:113
CaloCell_Base_ID::sample
int sample(const Identifier id) const
Tile field values (NOT_VALID == invalid request)
LArDigit
Liquid Argon digit base class.
Definition: LArDigit.h:25
lumiFormat.i
int i
Definition: lumiFormat.py:85
LVL1::L1CaloCells2TriggerTowers::initCaloCellsTriggerTowers
virtual bool initCaloCellsTriggerTowers(const CaloCellContainer &cellContainer) override
Declare the interface that the class provides.
Definition: L1CaloCells2TriggerTowers.cxx:183
LVL1::L1CaloCells2TriggerTowers::energy
virtual float energy(const std::vector< const CaloCell * > &cells) const override
Definition: L1CaloCells2TriggerTowers.cxx:85
CaloCell_Base_ID::is_fcal
bool is_fcal(const Identifier id) const
test if the id belongs to the FCAL - true also for MiniFCAL
CaloCell_Base_ID::sampling
int sampling(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
LVL1::L1CaloCells2TriggerTowers::resetTileDigits
virtual void resetTileDigits() override
Definition: L1CaloCells2TriggerTowers.cxx:365
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
LVL1::L1CaloCells2TriggerTowers::dump
virtual void dump(const std::vector< const CaloCell * > &vCells) const override
Definition: L1CaloCells2TriggerTowers.cxx:493
LVL1::L1CaloCells2TriggerTowers::dumpLArDigits
virtual void dumpLArDigits() const override
Definition: L1CaloCells2TriggerTowers.cxx:574
CaloCell_Base_ID::eta
int eta(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
TileRawData::cell_ID
Identifier cell_ID(void) const
Definition: TileRawData.cxx:61
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Preparation.mode
mode
Definition: Preparation.py:94
CaloJiveXML_DataTypes.tileDigitsContainer
string tileDigitsContainer
Definition: CaloJiveXML_DataTypes.py:11
LVL1::L1CaloCells2TriggerTowers::layerNames
virtual std::vector< int > layerNames(const Identifier &ttID) const override
Definition: L1CaloCells2TriggerTowers.cxx:61
IdentifiableContainerMT::const_iterator
Definition: IdentifiableContainerMT.h:79
LVL1::L1CaloCells2TriggerTowers::m_mTTTileDigits
std::map< unsigned int, std::vector< const TileDigits * > > m_mTTTileDigits
Definition: L1CaloCells2TriggerTowers.h:141
TrigConf::name
Definition: HLTChainList.h:35
LVL1::L1CaloCells2TriggerTowers::dumpDigits
virtual void dumpDigits(const Identifier &ttId) const override
Definition: L1CaloCells2TriggerTowers.cxx:548
LVL1::L1CaloCells2TriggerTowers::caloCells
virtual std::vector< const CaloCell * > caloCells(const Identifier &ttId) const override
Definition: L1CaloCells2TriggerTowers.cxx:22
CaloCell_Base_ID::is_em_barrel
bool is_em_barrel(const Identifier id) const
test if the id belongs to the EM barrel
LVL1::L1CaloCells2TriggerTowers::dumpCaloCells
virtual void dumpCaloCells() const override
Definition: L1CaloCells2TriggerTowers.cxx:478
CaloLVL1_ID
Helper class for offline TT identifiers.
Definition: CaloLVL1_ID.h:66
LVL1::L1CaloCells2TriggerTowers::m_cellMatch
ToolHandle< LVL1::IL1CaloMatchCell2Tower > m_cellMatch
Definition: L1CaloCells2TriggerTowers.h:128
LVL1::L1CaloCells2TriggerTowers::caloCellsByLayer
virtual std::vector< std::vector< const CaloCell * > > caloCellsByLayer(const Identifier &ttId) const override
Definition: L1CaloCells2TriggerTowers.cxx:34
TileDigits
Definition: TileDigits.h:30
CaloIdManager::getCaloCell_ID
const CaloCell_ID * getCaloCell_ID(void) const
Access to IdHelper.
Definition: CaloIdManager.cxx:63
CaloLVL1_ID::eta
int eta(const Identifier id) const
return eta according to :
Definition: CaloLVL1_ID.h:653
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
CaloCell_Base_ID::phi
int phi(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
TileRawData::identify
Identifier identify(void) const
Definition: TileRawData.h:52
CaloCellContainer
Container class for CaloCell.
Definition: CaloCellContainer.h:55
LVL1::L1CaloCells2TriggerTowers::samples
virtual std::vector< double > samples(const Identifier &ttId) const override
Definition: L1CaloCells2TriggerTowers.cxx:395
CaloLVL1_ID::pos_neg_z
int pos_neg_z(const Identifier id) const
return pos_neg_z according to :
Definition: CaloLVL1_ID.h:635
LVL1::L1CaloCells2TriggerTowers::m_cablingKey
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
Definition: L1CaloCells2TriggerTowers.h:126
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
LVL1::L1CaloCells2TriggerTowers::m_bInitialized
bool m_bInitialized
Definition: L1CaloCells2TriggerTowers.h:134
CaloCell_Base_ID::side
int side(const Identifier id) const
Tile field values (NOT_VALID == invalid request)
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
LVL1::L1CaloCells2TriggerTowers::m_tileCablingService
const TileCablingService * m_tileCablingService
Definition: L1CaloCells2TriggerTowers.h:132
Tile_Base_ID::pmt_id
Identifier pmt_id(const Identifier &any_id) const
Definition: Tile_Base_ID.cxx:640
LVL1::L1CaloCells2TriggerTowers::et
virtual float et(const std::vector< const CaloCell * > &cells) const override
Definition: L1CaloCells2TriggerTowers.cxx:92
CaloLVL1_ID::tower_begin
id_iterator tower_begin() const
begin iterator over towers
Definition: CaloLVL1_ID.h:597
CaloLVL1_ID::sampling
int sampling(const Identifier id) const
return sampling according to :
Definition: CaloLVL1_ID.h:641
LArDigitContainer
Container class for LArDigit.
Definition: LArDigitContainer.h:24
LArDigit::channelID
const HWIdentifier & channelID() const
Definition: LArDigit.h:69
Tile_Base_ID::section
int section(const Identifier &id) const
Definition: Tile_Base_ID.cxx:147
section
void section(const std::string &sec)
Definition: TestTriggerMenuAccess.cxx:22
CaloLVL1_ID::tower_id
Identifier tower_id(int pos_neg_z, int sampling, int region, int eta, int phi) const
build a tower identifier
Definition: CaloLVL1_ID.h:429
CaloLVL1_ID::is_tile
bool is_tile(const Identifier id) const
Test wether given tower or layer is part of the Tile Calorimeter.
Definition: CaloLVL1_ID.h:672
LVL1::L1CaloCells2TriggerTowers::larDigits
virtual std::vector< const LArDigit * > larDigits(const Identifier &ttId) const override
Definition: L1CaloCells2TriggerTowers.cxx:371
TileCablingService::cell2tt_id
Identifier cell2tt_id(const Identifier &id) const
Definition: TileCablingService.cxx:368
LVL1::L1CaloCells2TriggerTowers::calcEnergyOrEt
virtual float calcEnergyOrEt(const std::vector< const CaloCell * > &cells, const unsigned int mode) const override
Definition: L1CaloCells2TriggerTowers.cxx:107
LVL1::L1CaloCells2TriggerTowers::initTileDigitsTriggerTowers
virtual bool initTileDigitsTriggerTowers(const TileDigitsContainer &tileDigitsContainer) override
Definition: L1CaloCells2TriggerTowers.cxx:280
LVL1::L1CaloCells2TriggerTowers::m_bTileDigitsInitialized
bool m_bTileDigitsInitialized
Definition: L1CaloCells2TriggerTowers.h:136
LVL1::L1CaloCells2TriggerTowers::initialize
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
Definition: L1CaloCells2TriggerTowers.cxx:143
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
python.handimod.cc
int cc
Definition: handimod.py:523
CaloCell_Base_ID::section
int section(const Identifier id) const
Tile field values (NOT_VALID == invalid request)
Identifier
Definition: IdentifierFieldParser.cxx:14