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