ATLAS Offline Software
Loading...
Searching...
No Matches
gSuperCellTowerMapper.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4//***************************************************************************
5// gSuperCellTowerMapper - supercells and Tile tower assignment to gTowers
6// -------------------
7// begin : 01 04 2021
8// email : cecilia.tosciri@cern.ch
9//***************************************************************************
10
12#include "gTowerBuilder.h"
13#include "GaudiKernel/MsgStream.h"
15
16
17// This class is designed to receive a list of supercells and a list of gTowers and to match them together appropriately.
18
19
20namespace LVL1 {
21
22gSuperCellTowerMapper::gSuperCellTowerMapper(const std::string& type,const std::string& name,const IInterface* parent):
23 AthAlgTool(type,name,parent)
24{
25 declareInterface<IgSuperCellTowerMapper>(this);
26
27}
28
32
34{
35
36 ATH_CHECK( m_scellsCollectionSGKey.initialize() );
38
39 return StatusCode::SUCCESS;
40}
41
42StatusCode gSuperCellTowerMapper::AssignTriggerTowerMapper(std::unique_ptr<gTowerContainer> & my_gTowerContainerRaw) const {
43
44 static constexpr float delta_phi = M_PI/32;
45 static constexpr float delta_eta = 0.1;
46
48 if(!triggerTowerCollection.isValid()){
49 ATH_MSG_FATAL("Could not retrieve triggerTowerCollection " << m_triggerTowerCollectionSGKey.key() );
50 return StatusCode::FAILURE;
51 }
52
53
54 for(auto eachTower : *triggerTowerCollection) {
55
56 if(std::abs(eachTower->eta())<1.5 && eachTower->sampling()==1) {
57 int tile_iphi = int(eachTower->phi()/delta_phi);
58 int tower_iphi = tile_iphi/2;
59 int tile_ieta = int(std::abs(eachTower->eta())/delta_eta);
60 int tower_ieta = tile_ieta/2;
61 int nphi = 32;
62 int etaSign{-1};
63 int towerID_Modifier{100000};
64
65
66 if (eachTower->eta() > 0) {
67 etaSign = 1;
68 towerID_Modifier = 200000;
69 }
70
71 if(tower_ieta * etaSign == -7) {
72 towerID_Modifier = 300000;
73 }
74
75 else if (tower_ieta * etaSign == 7) {
76 towerID_Modifier = 400000;
77 }
78 int towerid = FindTowerIDForSuperCell(tower_ieta, tower_iphi, nphi) + towerID_Modifier;
79
80 LVL1::gTower * targetTower;
81 if((targetTower = my_gTowerContainerRaw->findTower(towerid)))
82 {
83 // Set the ET to the gTower, with layer 1 to specify this comes from the HAD
84 targetTower->addET(static_cast<int>(eachTower->jepET()) * 1000., 1);
85 } else
86 {
87 ATH_MSG_WARNING("\n==== gSuperCellTowerMapper ============ Tower id is officially unknown - it will be ignored. (Needs investigation). Please report this!");
88 }
89 }
90 }
91 return StatusCode::SUCCESS;
92}
93
95 return;
96}
97
98// works for real supercells from MC
99StatusCode gSuperCellTowerMapper::AssignSuperCellsToTowers(std::unique_ptr<gTowerContainer> & my_gTowerContainerRaw) const
100{
101 bool doPrint = true;
102
104 if(!scellsCollection.isValid()){
105 ATH_MSG_FATAL("Could not retrieve scellsCollection " << m_scellsCollectionSGKey.key() );
106 return StatusCode::FAILURE;
107 }
108
109
110 const CaloCell_Base_ID* idHelper = nullptr;
111 ATH_CHECK( detStore()->retrieve (idHelper, "CaloCell_SuperCell_ID") );
112
113 for (const CaloCell* cell : * scellsCollection){
114
115 const CaloSampling::CaloSample sample = (cell)->caloDDE()->getSampling();
116 const Identifier ID = (cell)->ID(); // super cell unique ID
117 int region = idHelper->region(ID);
118 int pos_neg = idHelper->pos_neg(ID);
119 int eta_index = idHelper->eta(ID);
120 const int phi_index = idHelper->phi(ID);
121 float et = (cell)->energy()/std::cosh((cell)->eta());
122 int prov = (cell)->provenance();
123
124
125 // std::cout<< ID << " " << (cell)->eta() << " " << (cell)->phi() << " " << sample << " " << region << std::endl;
126 // The following is to check if any SuperCells from data are permanently masked, and if so the masking is applied
127 int SCprov = prov&0xFFF;
128 bool isMasked = (SCprov&0x80)==0x80;//prov looks like 0000 0000 1000 0000 if the cell is masked
129 if (isMasked and m_apply_masking) et = 0;
130
131 // I removed the LOCAL TO GLOBAL ETA INDEX PATCH for gFEX
132 // Since in any case the SC assignment won't be regular, the eta and phi bins are combined directly in the FindAndConnectTower
133 FindAndConnectTower(my_gTowerContainerRaw,sample,region,pos_neg,eta_index,phi_index,ID,et,prov,doPrint);
134
135
136 }
137
138 for (auto gTower : *my_gTowerContainerRaw)
139 {
140 gTower->setET();
141
142 }
143
144
145 return StatusCode::SUCCESS;
146
147}
148
149
150void gSuperCellTowerMapper::ConnectSuperCellToTower(std::unique_ptr<gTowerContainer> & my_gTowerContainerRaw, int iGTower, Identifier ID, float et) const {
151
152 LVL1::gTower * tmpTower = my_gTowerContainerRaw->findTower(iGTower);
153
154 if(tmpTower){
155 tmpTower->setSCID(ID);
156 tmpTower->addET(et, 0); // layer is always 0 (EM) for SuperCells
157
158 }
159
160}
161
162int gSuperCellTowerMapper::FindAndConnectTower(std::unique_ptr<gTowerContainer> & my_gTowerContainerRaw,CaloSampling::CaloSample sample,const int region, const int pos_neg, const int eta_index, const int phi_index, Identifier ID, float et, int prov,bool doPrint) const
163{
164
165 bool validcell = true;
166
167 // We tell the gTower which supercell unique ID is in each tower
168 int nphi = -1; // to be filled with number of phi bins
169 int towereta = -99; // to be filled with tower eta value to help find it
170 int towerphi = -99; // to be filled with tower phi value to help find it
171 int iGTower = -99; // The tower ID which the supercell will be assigned to
172 int towerID_Modifier = -999999999; // adjustable tower ID modifier to fit tower Id scheme
173
174
175 //----------------------------------------------------------
176
177 // Begin assigning supercells to Towers
178
179 //----------------------------------------------------------
180
181 switch (sample) {
182 // E.M. Barrel (EMB)
183 case CaloSampling::PreSamplerB: {
184 // The following divides integers by 2 and truncates away the decimals (rounds DOWN to an integer)
185 towereta = eta_index / 2; // Layer 0 has super cells which are 0.1 x 0.1 - gTower is 0.2 x 0.2
186 towerphi = phi_index / 2; // phi is 32 for gTowers
187
188 nphi = 32;
189
190 if(eta_index == 14){ // special treatment for the tower where EMB and EMEC overlap (for gFEX: Eta Range 1.4-1.6)
191 if(pos_neg < 0){ towerID_Modifier = 300000; }
192 else if(pos_neg > 0){ towerID_Modifier = 400000; }
193 }
194 else{ // standard treatment for non-transition towers
195 if(pos_neg < 0){ towerID_Modifier = 100000; }
196 else if(pos_neg > 0){ towerID_Modifier = 200000; }
197 }
198
199 break;
200 }
201 case CaloSampling::EMB1:
202 case CaloSampling::EMB2: {
203
204 nphi = 32;
205
206 if (region == 0) {
207 towereta = eta_index / 8;
208 towerphi = phi_index / 2;
209 if(pos_neg < 0){ towerID_Modifier = 100000; }
210 else if(pos_neg > 0){ towerID_Modifier = 200000; }
211 }
212 else if (region == 1){
213 towereta = 7;
214 towerphi = phi_index/2;
215 if(pos_neg < 0){ towerID_Modifier = 300000; }
216 else if(pos_neg > 0){ towerID_Modifier = 400000; }
217 }
218 else {
219 ATH_MSG_DEBUG("[CaloSampling::EMB1 or CaloSampling::EMB2] -> invalid 'region' value: " << region << " (Under investigation) ");
220 }
221
222 switch(sample){
223 case CaloSampling::EMB1: {
224 break;
225 }
226 case CaloSampling::EMB2: {
227 break;
228 }
229 default: {
230 ATH_MSG_DEBUG("CaloSampling::EMBX -> invalid sample for assigning iCell value! " << sample << " (Under investigation) ");
231 break;
232 }
233 }
234
235 break;
236 }
237 case CaloSampling::EMB3: {
238
239 nphi = 32;
240 towereta = eta_index/2; // Analogous to PreSamplerB
241 towerphi = phi_index/2;
242
243
244 if(pos_neg < 0){ towerID_Modifier = 100000; }
245 else if(pos_neg > 0){ towerID_Modifier = 200000; }
246
247 break;
248 }
249 // E.M. End-cap (EMEC)
250 case CaloSampling::PreSamplerE: {
251
252 nphi = 32;
253 // towereta = 7 + std::ceil(eta_index / 2.); //This is a special case, as there are only 3 cells in eta 1.56 (gFEX bin 7), 1.66 (gFEX bin 8), 1.76 (gFEX bin 8)
254 if (eta_index < 1) {towereta = 7;}
255 else {towereta = 8;}
256 towerphi = phi_index / 2; // phi is 32 for gTowers
257
258
259 if (towereta == 7){
260 if(pos_neg < 0){ towerID_Modifier = 300000; }
261 else if(pos_neg > 0){ towerID_Modifier = 400000; }
262 }
263 else if (towereta != 7){
264 if(pos_neg < 0){ towerID_Modifier = 500000; }
265 else if(pos_neg > 0){ towerID_Modifier = 600000; }
266 }
267
268 break;
269 }
270 case CaloSampling::EME1: {
271
272 nphi = 32;
273
274 switch (region) {
275 case 0: {
276
277 towereta = 7;
278 towerphi = phi_index/2;
279
280 break;
281 }
282 case 2: {
283
284 if (eta_index < 4) {towereta = 7;}
285 else {towereta = 8;}
286 towerphi = phi_index/2;
287
288 break;
289 }
290 case 3: {
291
292 if (eta_index < 11) {towereta = 8;}
293 else {towereta = 9;}
294 towerphi = phi_index/2;
295 break;
296
297 }
298 case 4: {
299
300 if (eta_index < 8) {towereta = 10;}
301 else {towereta = 11;}
302 towerphi = phi_index/2;
303
304 break;
305 }
306 case 5: {
307
308 towereta = 11 ;
309 towerphi = phi_index/2;
310
311 break;
312 }
313 default: {
314 ATH_MSG_DEBUG("CaloSampling::EME1 -> invalid 'region' value: " << region << " (Under investigation) ");
315 break;
316 }
317 break;
318 }
319
320 if (towereta == 7){
321 if(pos_neg < 0){ towerID_Modifier = 300000; }
322 else if(pos_neg > 0){ towerID_Modifier = 400000; }
323 }
324 else if (towereta != 7){
325 if(pos_neg < 0){ towerID_Modifier = 500000; }
326 else if(pos_neg > 0){ towerID_Modifier = 600000; }
327 }
328
329 break;
330 }
331 case CaloSampling::EME2: {
332
333 nphi = 32;
334
335 switch (region) {
336 case 0: {
337
338 if(abs(pos_neg) == 2){
339 towereta = 7;
340 towerphi = phi_index/2;
341 }
342 else if(abs(pos_neg) == 3){
343 if (eta_index == 0){
344 towereta = 12;
345 towerphi = phi_index;
346 }
347 else if (eta_index == 1){
348 towereta = 13;
349 towerphi = phi_index;
350 }
351 else if (eta_index == 2){
352 towereta = 14;
353 towerphi = phi_index;
354 }
355 }
356 break;
357 }
358 case 1: {
359 if(abs(pos_neg) == 2){
360 towerphi = phi_index/2;
361 if (eta_index < 7) {towereta = 7;}
362 else if (eta_index < 15) {towereta = 8;}
363 else if (eta_index < 23) {towereta = 9;}
364 else if (eta_index < 31) {towereta = 10;}
365 else if (eta_index < 43) {towereta = 11;}
366 }
367 else if(abs(pos_neg) == 3){
368 towerphi = phi_index;
369 towereta = 15;
370 }
371 break;
372 }
373
374 default: {
375 ATH_MSG_DEBUG("CaloSampling::EME2 -> invalid 'region' value: " << region << " (Under investigation) ");
376 break;
377 }
378 break;
379 }
380
381 if (towereta == 7){
382 if(pos_neg < 0){ towerID_Modifier = 300000; }
383 else if(pos_neg > 0){ towerID_Modifier = 400000; }
384 }
385 else if (towereta == 12 || towereta == 13 || towereta == 14 || towereta == 15){
386 if(pos_neg < 0){ towerID_Modifier = 700000; }
387 else if(pos_neg > 0){ towerID_Modifier = 800000; }
388 }
389 else {
390 if(pos_neg < 0){ towerID_Modifier = 500000; }
391 else if(pos_neg > 0){ towerID_Modifier = 600000; }
392 }
393
394 break;
395 }
396 case CaloSampling::EME3: {
397
398 nphi = 32;
399 switch (region) {
400 case 0: {
401 if(abs(pos_neg) == 2){
402 towerphi = phi_index/2;
403 if (eta_index == 0){
404 towereta = 7;
405 }
406 else if(eta_index < 3){
407 towereta = 8;
408 }
409 else if(eta_index < 5){
410 towereta = 9;
411 }
412 else if(eta_index < 7){
413 towereta = 10;
414 }
415 else if(eta_index < 10){
416 towereta = 11;
417 }
418
419 }
420 else if(abs(pos_neg) == 3){
421 if (eta_index == 0){
422 towereta = 12;
423 towerphi = phi_index;
424 }
425 else if (eta_index == 1){
426 towereta = 13;
427 towerphi = phi_index;
428 }
429 else if (eta_index == 2){
430 towereta = 14;
431 towerphi = phi_index;
432 }
433 }
434 break;
435 }
436 case 1: { // we only have the case: abs(pos_neg) = 3
437 towerphi = phi_index;
438 towereta = 15;
439 break;
440 }
441 default: {
442 ATH_MSG_DEBUG("CaloSampling::EME3 -> invalid 'region' value: " << region << " (Under investigation) ");
443 break;
444 }
445 break;
446 }
447
448 if (towereta == 7){
449 if(pos_neg < 0){ towerID_Modifier = 300000; }
450 else if(pos_neg > 0){ towerID_Modifier = 400000; }
451 }
452 else if (towereta == 12 || towereta == 13 || towereta == 14 || towereta == 15){
453 if(pos_neg < 0){ towerID_Modifier = 700000; }
454 else if(pos_neg > 0){ towerID_Modifier = 800000; }
455 }
456 else {
457 if(pos_neg < 0){ towerID_Modifier = 500000; }
458 else if(pos_neg > 0){ towerID_Modifier = 600000; }
459 }
460 break;
461 }
462 // Hadronic End-cap (HEC)
463 case CaloSampling::HEC0:{
464 nphi = 32;
465 switch(region){
466 case 0: {
467 if(abs(pos_neg) == 2){
468 towerphi = phi_index/2;
469 if (eta_index == 0){
470 towereta = 7;
471 }
472 else if(eta_index < 3){
473 towereta = 8;
474 }
475 else if(eta_index < 5){
476 towereta = 9;
477 }
478 else if(eta_index < 7){
479 towereta = 10;
480 }
481 else if(eta_index < 10){
482 towereta = 11;
483 }
484 }
485 break;
486
487 }
488
489 case 1: {
490 if(abs(pos_neg) == 2){
491 if (eta_index == 0){
492 towereta = 12;
493 towerphi = phi_index;
494 }
495 else if(eta_index == 1){
496 towereta = 13;
497 towerphi = phi_index;
498 }
499 else if(eta_index == 2){
500 towereta = 14;
501 towerphi = phi_index;
502 }
503 else if(eta_index == 3){
504 towereta = 15;
505 towerphi = phi_index;
506 }
507 }
508 break;
509
510 }
511
512 default: {
513 ATH_MSG_DEBUG("CaloSampling::HEC0 -> invalid 'region' value: " << region << " (Under investigation) ");
514 break;
515 }
516
517 }
518
519 // Tower connection
520 if (towereta == 7){
521 nphi = 32;
522 if(pos_neg < 0){ towerID_Modifier = 300000; }
523 else if(pos_neg > 0){ towerID_Modifier = 400000; }
524 }
525 else if (towereta == 12 || towereta == 13 || towereta == 14 || towereta == 15){
526 if(pos_neg < 0){ towerID_Modifier = 700000; }
527 else if(pos_neg > 0){ towerID_Modifier = 800000; }
528 }
529 else {
530 nphi = 32;
531 if(pos_neg < 0){ towerID_Modifier = 500000; }
532 else if(pos_neg > 0){ towerID_Modifier = 600000; }
533 }
534
535 break;
536 }
537 case CaloSampling::TileBar0:
538 case CaloSampling::TileBar1:
539 case CaloSampling::TileBar2: {
540 REPORT_MESSAGE_WITH_CONTEXT (MSG::DEBUG, "gSuperCellTowerMapper") << "Supercell is from Tile Barrel - it will be ignored.";
541 validcell = false;
542 ATH_MSG_DEBUG("\n==== gSuperCellTowerMapper ============ Supercell is from Tile Barrel - it will be ignored.");
543 break;
544 }
545 case CaloSampling::TileGap1:
546 case CaloSampling::TileGap2:
547 case CaloSampling::TileGap3: {
548 ATH_MSG_DEBUG("\n==== gSuperCellTowerMapper ============ Supercell is from Tile Gap (ITC and scintillator) - it will be ignored.");
549 validcell = false;
550 break;
551 }
552 case CaloSampling::TileExt0:
553 case CaloSampling::TileExt1:
554 case CaloSampling::TileExt2: {
555 ATH_MSG_DEBUG("\n==== gSuperCellTowerMapper ============ Supercell is from Tile Extended Barrel - it will be ignored.");
556 validcell = false;
557 break;
558 }
559 case CaloSampling::FCAL0:{
560 nphi = 16;
561 towerphi = phi_index;
562 if(eta_index < 5){
563 towereta = 16;
564 }
565 else if(eta_index < 8){
566 towereta = 17;
567 }
568 else if(eta_index < 10){
569 towereta = 18;
570 }
571 else if(eta_index < 12){
572 towereta = 19;
573 }
574
575 if(pos_neg < 0){ towerID_Modifier = 900000; }
576 else if(pos_neg > 0){ towerID_Modifier = 1000000; }
577
578 break;
579 }
580 case CaloSampling::FCAL1:{
581 nphi = 16;
582 towerphi = phi_index;
583 if (eta_index < 4){
584 towereta = 16;
585 }
586 else if(eta_index < 6){
587 towereta = 17;
588 }
589 else if(eta_index < 7){
590 towereta = 18;
591 }
592 else if(eta_index < 8){
593 towereta = 19;
594 }
595
596 if(pos_neg < 0){ towerID_Modifier = 900000; }
597 else if(pos_neg > 0){ towerID_Modifier = 1000000; }
598
599 break;
600 }
601 case CaloSampling::FCAL2:{
602 nphi = 16;
603 towerphi = phi_index;
604 if (eta_index < 1){
605 towereta = 16;
606 }
607 else if(eta_index < 3){
608 towereta = 17;
609 }
610 else if(eta_index < 4){
611 towereta = 18;
612 }
613
614 if(pos_neg < 0){ towerID_Modifier = 900000; }
615 else if(pos_neg > 0){ towerID_Modifier = 1000000; }
616 break;
617 }
618
619
620 case CaloSampling::MINIFCAL0:
621 case CaloSampling::MINIFCAL1:
622 case CaloSampling::MINIFCAL2:
623 case CaloSampling::MINIFCAL3: {
624 ATH_MSG_DEBUG("\n==== gSuperCellTowerMapper ============ Supercells is from MiniFCAL - it will be ignored.");
625 validcell = false;
626 break;
627 }
628 case CaloSampling::Unknown: {
629 ATH_MSG_WARNING("\n==== gSuperCellTowerMapper ============ Supercell sampling is officially unknown - it will be ignored. (Needs investigation). Please report this!");
630 validcell = false;
631 break;
632 }
633 default: {
634 ATH_MSG_DEBUG("\n==== gSuperCellTowerMapper ============ Supercell has invalid CaloSampling value: " << sample << " (Needs investigation). Please report this!");
635 validcell = false;
636 break;
637 }
638 }
639
640 if(validcell){
641 iGTower = FindTowerIDForSuperCell(towereta, towerphi, nphi) + towerID_Modifier;
642 if(doPrint){
643 PrintCellSpec(sample, region, eta_index, phi_index, pos_neg, towereta, towerphi, nphi, towerID_Modifier, iGTower, prov, ID);
644 }
645 ConnectSuperCellToTower(my_gTowerContainerRaw, iGTower, ID, et);
646 }
647
648 // END ITERATING OVER SUPER CELLS+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++
649
650 return 1;
651
652}
653
654int gSuperCellTowerMapper::FindTowerIDForSuperCell(int towereta, int towerphi, int nphi) const
655{
656
657 return (towerphi + (nphi * towereta));
658
659}
660
662 const int eta_index, const int phi_index, const int pos_neg,
663 int towereta, int towerphi, int nphi, int towerID_Modifier,
664 int iGTower, int prov, Identifier ID) const
665{
666
667 std::string sampleName = "";
668
669 switch (sample) {
670 case CaloSampling::PreSamplerB: { sampleName = "PreSamplerB"; break; }
671 case CaloSampling::EMB1: { sampleName = "EMB1"; break; }
672 case CaloSampling::EMB2: { sampleName = "EMB2"; break; }
673 case CaloSampling::EMB3: { sampleName = "EMB3"; break; }
674 case CaloSampling::PreSamplerE: { sampleName = "PreSamplerE"; break; }
675 case CaloSampling::EME1: { sampleName = "EME1"; break; }
676 case CaloSampling::EME2: { sampleName = "EME2"; break; }
677 case CaloSampling::EME3: { sampleName = "EME3"; break; }
678 case CaloSampling::HEC0: { sampleName = "HEC0"; break; }
679 case CaloSampling::HEC1: { sampleName = "HEC1"; break; }
680 case CaloSampling::HEC2: { sampleName = "HEC2"; break; }
681 case CaloSampling::HEC3: { sampleName = "HEC3"; break; }
682 case CaloSampling::TileBar0: { sampleName = "TileBar0"; break; }
683 case CaloSampling::TileBar1: { sampleName = "TileBar1"; break; }
684 case CaloSampling::TileBar2: { sampleName = "TileBar2"; break; }
685 case CaloSampling::TileGap1: { sampleName = "TileGap1"; break; }
686 case CaloSampling::TileGap2: { sampleName = "TileGap2"; break; }
687 case CaloSampling::TileGap3: { sampleName = "TileGap3"; break; }
688 case CaloSampling::TileExt0: { sampleName = "TileExt0"; break; }
689 case CaloSampling::TileExt1: { sampleName = "TileExt1"; break; }
690 case CaloSampling::TileExt2: { sampleName = "TileExt2"; break; }
691 case CaloSampling::FCAL0: { sampleName = "FCAL0"; break; }
692 case CaloSampling::FCAL1: { sampleName = "FCAL1"; break; }
693 case CaloSampling::FCAL2: { sampleName = "FCAL2"; break; }
694
695 default: {
696 ATH_MSG_DEBUG("\n==== gSuperCellTowerMapper ============ Supercell has invalid CaloSampling value: " << sample << " (Needs investigation). Please report this!");
697 break;
698 }
699 }
700
701 ATH_MSG_DEBUG("ASSIGNED CELL::: CASE: " << sampleName
702 << "\tSample: " << sample
703 << "\tRegion: " << region
704 << "\tEta_Index: " << eta_index
705 << "\tPhi_Index: " << phi_index
706 << "\tPosNeg: " << pos_neg
707 << "\tgTower Eta: " << towereta
708 << "\tgTower Phi: " << towerphi
709 << "\tgTower nphi: " << nphi
710 << "\tgTower modifier: " << towerID_Modifier
711 << "\tiGTower: " << iGTower
712 << "\tProvenance: " << prov
713 << "\tID: " << ID
714 << " ");
715
716
717 return;
718}
719
720
721} // end of LVL1 namespace
#define M_PI
Scalar eta() const
pseudorapidity method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
std::vector< Identifier > ID
Helpers for checking error return status codes and reporting errors.
#define REPORT_MESSAGE_WITH_CONTEXT(LVL, CONTEXT_NAME)
Report a message, with an explicitly specified context name.
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
const ServiceHandle< StoreGateSvc > & detStore() const
Helper base class for offline cell identifiers.
int phi(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
int region(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
int pos_neg(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
int eta(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
Data object for each calorimeter readout cell.
Definition CaloCell.h:57
SG::ReadHandleKey< xAOD::TriggerTowerContainer > m_triggerTowerCollectionSGKey
virtual void PrintCellSpec(const CaloSampling::CaloSample sample, const int region, const int eta_index, const int phi_index, const int pos_neg, int towereta, int towerphi, int nphi, int towerID_Modifier, int iGTower, int prov, Identifier ID) const override
virtual StatusCode AssignTriggerTowerMapper(std::unique_ptr< gTowerContainer > &my_gTowerContainerRaw) const override
Gaudi::Property< bool > m_apply_masking
gSuperCellTowerMapper(const std::string &type, const std::string &name, const IInterface *parent)
virtual StatusCode initialize() override
standard Athena-Algorithm method
SG::ReadHandleKey< CaloCellContainer > m_scellsCollectionSGKey
virtual void ConnectSuperCellToTower(std::unique_ptr< gTowerContainer > &my_gTowerContainerRaw, int iGTower, Identifier ID, float et) const override
virtual int FindAndConnectTower(std::unique_ptr< gTowerContainer > &my_gTowerContainerRaw, CaloSampling::CaloSample sample, const int region, const int pos_neg, const int eta_index, const int phi_index, Identifier ID, float et, int prov, bool doPrint) const override
virtual int FindTowerIDForSuperCell(int towereta, int towerphi, int nphi) const override
virtual StatusCode AssignSuperCellsToTowers(std::unique_ptr< gTowerContainer > &my_gTowerContainerRaw) const override
The gTower class is an interface object for gFEX trigger algorithms The purposes are twofold:
Definition gTower.h:38
void setET()
Definition gTower.cxx:70
void setSCID(Identifier ID)
Set supercell position ID.
Definition gTower.cxx:97
void addET(float et, int layer)
Add ET in MeV, layer refers to EM or HAD (Tile)
Definition gTower.cxx:60
virtual bool isValid() override final
Can the handle be successfully dereferenced?
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
Extra patterns decribing particle interation process.