ATLAS Offline Software
Loading...
Searching...
No Matches
LVL1::jSuperCellTowerMapper Class Reference

#include <jSuperCellTowerMapper.h>

Inheritance diagram for LVL1::jSuperCellTowerMapper:
Collaboration diagram for LVL1::jSuperCellTowerMapper:

Public Member Functions

 jSuperCellTowerMapper (const std::string &type, const std::string &name, const IInterface *parent)
virtual ~jSuperCellTowerMapper ()
virtual StatusCode initialize () override
 standard Athena-Algorithm method
virtual StatusCode AssignSuperCellsToTowers (std::unique_ptr< jTowerContainer > &my_jTowerContainerRaw) const override
virtual StatusCode AssignTriggerTowerMapper (std::unique_ptr< jTowerContainer > &my_jTowerContainerRaw) const override
virtual void reset () override
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Static Public Member Functions

static const InterfaceID & interfaceID ()

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

virtual int FindAndConnectTower (std::unique_ptr< jTowerContainer > &my_jTowerContainerRaw, CaloSampling::CaloSample sample, const int region, int layer, const int pos_neg, const int eta_index, const int phi_index, Identifier ID, float et, int prov, bool doPrint, float eta_min, float eta_max, float eta0, float phi_min, float phi_max, float phi0) const override
virtual void ConnectSuperCellToTower (std::unique_ptr< jTowerContainer > &my_jTowerContainerRaw, int iETower, Identifier ID, int iCell, float et, int layer) const override
virtual int FindTowerIDForSuperCell (int towereta, int towerphi) const override
virtual void PrintCellSpec (const CaloSampling::CaloSample sample, int layer, const int region, const int eta_index, const int phi_index, const int pos_neg, int iETower, int iCell, int prov, Identifier ID, bool doenergysplit, float eta_min, float eta_max, float eta0, float phi_min, float phi_max, float phi0, bool cellValid=true) const override
std::string DetectorName (const CaloSampling::CaloSample sample) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

SG::ReadHandleKey< CaloCellContainerm_scellsCollectionSGKey {this, "SCell", "SCell", "SCell"}
SG::ReadHandleKey< xAOD::TriggerTowerContainerm_triggerTowerCollectionSGKey {this, "xODTriggerTowers", "xAODTriggerTowers", "xAODTriggerTowers"}
Gaudi::Property< bool > m_apply_masking {this, "SCellMasking", false, "Applies masking. Only use for data"}
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 28 of file jSuperCellTowerMapper.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ jSuperCellTowerMapper()

LVL1::jSuperCellTowerMapper::jSuperCellTowerMapper ( const std::string & type,
const std::string & name,
const IInterface * parent )

Definition at line 23 of file jSuperCellTowerMapper.cxx.

23 :
24 AthAlgTool(type,name,parent)
25{
26 declareInterface<IjSuperCellTowerMapper>(this);
27
28}
AthAlgTool()
Default constructor:

◆ ~jSuperCellTowerMapper()

LVL1::jSuperCellTowerMapper::~jSuperCellTowerMapper ( )
virtual

Definition at line 30 of file jSuperCellTowerMapper.cxx.

31{
32
33}

Member Function Documentation

◆ AssignSuperCellsToTowers()

StatusCode LVL1::jSuperCellTowerMapper::AssignSuperCellsToTowers ( std::unique_ptr< jTowerContainer > & my_jTowerContainerRaw) const
overridevirtual

Implements LVL1::IjSuperCellTowerMapper.

Definition at line 91 of file jSuperCellTowerMapper.cxx.

92{
93
94 bool doPrint = false;
95
96 SG::ReadHandle<CaloCellContainer> scellsCollection(m_scellsCollectionSGKey/*,ctx*/);
97 if(!scellsCollection.isValid()) {
98 ATH_MSG_ERROR("Could not retrieve collection " << m_scellsCollectionSGKey.key() );
99 return StatusCode::FAILURE;
100 }
101
102 //const CaloCell_Base_ID* idHelper = caloIdManager->getCaloCell_SuperCell_ID(); // getting the id helper class
103 const CaloCell_Base_ID* idHelper = nullptr;
104 ATH_CHECK( detStore()->retrieve (idHelper, "CaloCell_SuperCell_ID") );
105
106 for (const CaloCell* cell : * scellsCollection) {
107
108 const CaloSampling::CaloSample sample = (cell)->caloDDE()->getSampling(); // corresponds 'module' for FCAL/MiniFCAL
109 const Identifier ID = (cell)->ID(); // super cell unique ID
110 int region = idHelper->region(ID); // no region for FCAL, is 'depth' for MiniFCAL
111 int layer = -1;
112 int pos_neg = idHelper->pos_neg(ID); // corresponds to 'barrel_ec' for LArEM
113 int eta_index = idHelper->eta(ID);
114 const int phi_index = idHelper->phi(ID);
115 float et = (cell)->energy()/cosh((cell)->eta());
116 int prov = (cell)->provenance();
117
118
119 float eta_min = 0.0;//idHelper->eta_min(ID);
120 float eta_max = idHelper->eta_max(ID);
121 float eta0 = idHelper->eta0(ID);
122 float phi_min = 0.0;//idHelper->phi_min(ID);
123 float phi_max = idHelper->phi_max(ID);
124 float phi0 = idHelper->phi0(ID);
125
126 /*
127 CaloSampling:
128 PreSamplerB 0 (LAr Barrel)
129 EMB1 1
130 EMB2 2
131 EMB3 3
132
133 PreSamplerE 4 (LAr EM Endcap)
134 EME1 5
135 EME2 6
136 EME3 7
137
138 HEC0 8 (Hadronic Endcap)
139 HEC1 9
140 HEC2 10
141 HEC3 11
142
143 TileBar0 12 (Tile Barrel)
144 TileBar1 13
145 TileBar2 14
146
147 TileGap1 15 (ITC and Scintillator)
148 TileGap2 16
149 TileGap3 17
150
151 TileExt0 18 (Tile Extended Barrel)
152 TileExt1 19
153 TileExt2 20
154
155 FCAL0 21 (Forward EM Endcap)
156 FCAL1 22
157 FCAL2 23
158
159 MINIFCAL0 24
160 MINIFCAL1 25
161 MINIFCAL2 26
162 MINIFCAL3 27
163
164 Unknown 28
165 */
166
167 //We need NOT to explicitly avoid +/- 3 pos_neg supercells! These go beyond |eta| == 2.5 - we WANT these for the jFEX!
168 //PrintCellSpec(sample, layer, region, eta_index, phi_index, pos_neg, -999/*iJTower*/, -999/*iCell*/, prov, ID, false, eta_min, eta_max, eta0, phi_min, phi_max, phi0);
169 //if(std::abs(pos_neg) == 3){ /*continue;*/ } //PrintCellSpec(sample, layer, region, eta_index, phi_index, pos_neg, -999/*iJTower*/, -999/*iCell*/, prov, ID, false, eta_min, eta_max, eta0, phi_min, phi_max, phi0); continue; }
170
171 // LOCAL TO GLOBAL ETA INDEX PATCH - USE A 'TOWER OFFSET' TO MARK THE START OF THE ETA_INDEX COUNTING (e.g. the rounded eta value of the innermost supercell)
172 switch(sample) {
173 case CaloSampling::PreSamplerB: {
174 break;
175 }
176 case CaloSampling::EMB1: {
177 if(region == 1) {
178 eta_index += 56;
179 }
180 break;
181 }
182 case CaloSampling::EMB2: {
183 if(region == 1) {
184 eta_index += 56;
185 }
186 break;
187 }
188 case CaloSampling::EMB3: {
189 break;
190 }
191 case CaloSampling::PreSamplerE: {
192 eta_index += 15;
193 break;
194 }
195 case CaloSampling::EME1: {
196 if(region == 0) {
197 eta_index += 14;
198 }
199 else if (region == 1) { /* doesn't exist */ }
200 else if (region == 2) {
201 eta_index += 60;
202 }
203 else if (region == 3) {
204 eta_index += 108; //6 supercell region
205 }
206 else if (region == 4) {
207 eta_index += 80;
208 }
209 else if (region == 5) {
210 eta_index += 24;
211 }
212 break;
213 }
214 case CaloSampling::EME2: {
215 if(region == 0) {
216 if(eta0 < 2.5) {
217 eta_index += 14;
218 }
219 else {
220 eta_index += 25;
221 }
222 }
223 else if (region == 1) {
224 if(eta0 < 2.5) {
225 eta_index += 57;
226 }
227 else {
228 eta_index += 28;
229 }
230 }
231 break;
232 }
233 case CaloSampling::EME3: {
234 if(region == 0) {
235 if(/*eta0 < 2.5*/ phi_max == 63) {
236 //if(eta0 < 2.5) {
237 eta_index += 15; // We should use eta0 here but the MC information is bugged for EME3 positive-side supercells
238 }
239 else {
240 eta_index += 25;
241 }
242 }
243 else if (region == 1) {
244 if(/*eta0 < 2.5*/ phi_max == 63) {
245 //if(eta0 < 2.5) {
246 eta_index += 15; // We should use eta0 here but the MC information is bugged for EME3 positive-side supercells
247 }
248 else {
249 eta_index += 28;
250 }
251 }
252 break;
253 }
254 case CaloSampling::HEC0:
255 case CaloSampling::HEC1:
256 case CaloSampling::HEC2:
257 case CaloSampling::HEC3: {
258 if(region == 0){
259 eta_index += 15;
260 }
261 else if (region == 1){ // to push these supercells to 2.5 and above
262 eta_index += 25;
263 }
264 break;
265 }
266 default: {
267 /*ATH_MSG_DEBUG("Not doing anything since sample = " << sample);*/ break;
268 }
269 }
270
271
272 FindAndConnectTower(my_jTowerContainerRaw,sample,region,layer,pos_neg,eta_index,phi_index,ID,et,prov,doPrint, eta_min, eta_max, eta0, phi_min, phi_max, phi0);
273
274 }
275
276 //multi linear digitisation encoding after filling all TT with the corresponding SC
277 for(auto tmpTower : *my_jTowerContainerRaw){
278 tmpTower->Do_LAr_encoding();
279 }
280
281 return StatusCode::SUCCESS;
282
283}
Scalar eta() const
pseudorapidity method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
std::vector< Identifier > ID
float et(const xAOD::jFexSRJetRoI *j)
const ServiceHandle< StoreGateSvc > & detStore() const
int phi(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
float phi0(const Identifier regId) const
minimum LAr phi for this region
int phi_max(const Identifier regId) const
max value of phi index (-999 == failure)
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_max(const Identifier regId) const
max value of eta index (-999 == failure)
int eta(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
float eta0(const Identifier regId) const
minimum LAr eta for this region
SG::ReadHandleKey< CaloCellContainer > m_scellsCollectionSGKey
virtual int FindAndConnectTower(std::unique_ptr< jTowerContainer > &my_jTowerContainerRaw, CaloSampling::CaloSample sample, const int region, int layer, const int pos_neg, const int eta_index, const int phi_index, Identifier ID, float et, int prov, bool doPrint, float eta_min, float eta_max, float eta0, float phi_min, float phi_max, float phi0) const override
@ layer
Definition HitInfo.h:79

◆ AssignTriggerTowerMapper()

StatusCode LVL1::jSuperCellTowerMapper::AssignTriggerTowerMapper ( std::unique_ptr< jTowerContainer > & my_jTowerContainerRaw) const
overridevirtual

Implements LVL1::IjSuperCellTowerMapper.

Definition at line 45 of file jSuperCellTowerMapper.cxx.

45 {
46
47 static constexpr float pi_over_32 = M_PI/32;
48
49 SG::ReadHandle<xAOD::TriggerTowerContainer> triggerTowerCollection(m_triggerTowerCollectionSGKey/*,ctx*/);
50 if(!triggerTowerCollection.isValid()) {
51 ATH_MSG_ERROR("Could not retrieve collection " << m_triggerTowerCollectionSGKey.key() );
52 return StatusCode::FAILURE;
53 }
54 for(auto eachTower : *triggerTowerCollection) {
55 if(std::fabs(eachTower->eta())<1.5 && eachTower->sampling()==1) {
56 int i_phi = static_cast<int>(eachTower->phi()/pi_over_32);
57 int etaSign{-1};
58 int towerID_Modifier{100000};
59 if (eachTower->eta() > 0) {
60 etaSign = 1;
61 towerID_Modifier = 200000;
62 }
63 int i_eta = static_cast<int>(eachTower->eta() * 10) * etaSign;
64 if(i_eta * etaSign == -14) {
65 towerID_Modifier = 300000;
66 } else if (i_eta * etaSign == 14) {
67 towerID_Modifier = 400000;
68 }
69
70 int towerid = FindTowerIDForSuperCell(i_eta, i_phi) + towerID_Modifier;
71 LVL1::jTower * targetTower;
72 if((targetTower = my_jTowerContainerRaw->findTower(towerid))) {
73 if (targetTower->getET_float(1, 0) > 0) {
74 ATH_MSG_WARNING("\n==== jSuperCellTowerMapper ============ Hadronic layer energy filled more than once - it will be ignored. (Needs investigation). Please report this!");
75 }
76
77 targetTower->set_TileCal_Et(1, static_cast<int>(eachTower->cpET()) * 500.); // cf 500.0
78 } else {
79 ATH_MSG_WARNING("\n==== jSuperCellTowerMapper ============ Tower ID is officially unknown - it will be ignored. (Needs investigation). Please report this!");
80 }
81 }
82 }
83 return StatusCode::SUCCESS;
84}
#define M_PI
#define ATH_MSG_WARNING(x)
virtual int FindTowerIDForSuperCell(int towereta, int towerphi) const override
SG::ReadHandleKey< xAOD::TriggerTowerContainer > m_triggerTowerCollectionSGKey
void set_TileCal_Et(int layer, int et)
Definition jTower.cxx:105
float getET_float(unsigned int layer, int cell=0) const
Get ET of a specified cell in MeV FLOAT VERSION.
Definition jTower.cxx:187

◆ ConnectSuperCellToTower()

void LVL1::jSuperCellTowerMapper::ConnectSuperCellToTower ( std::unique_ptr< jTowerContainer > & my_jTowerContainerRaw,
int iETower,
Identifier ID,
int iCell,
float et,
int layer ) const
overrideprivatevirtual

Implements LVL1::IjSuperCellTowerMapper.

Definition at line 286 of file jSuperCellTowerMapper.cxx.

286 {
287
288 LVL1::jTower * tmpTower = my_jTowerContainerRaw->findTower(iJTower);
289 if(tmpTower){
290 tmpTower->set_LAr_Et(ID,iCell,et,layer);
291 }
292
293}
void set_LAr_Et(Identifier ID, int cell, float et, int layer)
Set LAr supercell position ID.
Definition jTower.cxx:122

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ DetectorName()

std::string LVL1::jSuperCellTowerMapper::DetectorName ( const CaloSampling::CaloSample sample) const
private

Definition at line 1137 of file jSuperCellTowerMapper.cxx.

1137 {
1138 std::string sampleName ="";
1139 switch (sample) {
1140 case CaloSampling::PreSamplerB: { sampleName = "PreSamplerB"; break; }
1141 case CaloSampling::EMB1: { sampleName = "EMB1"; break; }
1142 case CaloSampling::EMB2: { sampleName = "EMB2"; break; }
1143 case CaloSampling::EMB3: { sampleName = "EMB3"; break; }
1144 case CaloSampling::PreSamplerE: { sampleName = "PreSamplerE"; break; }
1145 case CaloSampling::EME1: { sampleName = "EME1"; break; }
1146 case CaloSampling::EME2: { sampleName = "EME2"; break; }
1147 case CaloSampling::EME3: { sampleName = "EME3"; break; }
1148 case CaloSampling::HEC0: { sampleName = "HEC0"; break; }
1149 case CaloSampling::HEC1: { sampleName = "HEC1"; break; }
1150 case CaloSampling::HEC2: { sampleName = "HEC2"; break; }
1151 case CaloSampling::HEC3: { sampleName = "HEC3"; break; }
1152 case CaloSampling::FCAL0: { sampleName = "FCAL0"; break; }
1153 case CaloSampling::FCAL1: { sampleName = "FCAL1"; break; }
1154 case CaloSampling::FCAL2: { sampleName = "FCAL2"; break; }
1155 default: {
1156 ATH_MSG_DEBUG("\n==== jSuperCellTowerMapper ============ Supercell has invalid CaloSampling value: " << sample << " (Needs investigation). Please report this!");
1157 sampleName = "----";
1158 break;
1159 }
1160 }
1161 return sampleName;
1162}
#define ATH_MSG_DEBUG(x)

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ FindAndConnectTower()

int LVL1::jSuperCellTowerMapper::FindAndConnectTower ( std::unique_ptr< jTowerContainer > & my_jTowerContainerRaw,
CaloSampling::CaloSample sample,
const int region,
int layer,
const int pos_neg,
const int eta_index,
const int phi_index,
Identifier ID,
float et,
int prov,
bool doPrint,
float eta_min,
float eta_max,
float eta0,
float phi_min,
float phi_max,
float phi0 ) const
overrideprivatevirtual

These are actually all bunched together in the MC as Region 0 posneg +-2

Implements LVL1::IjSuperCellTowerMapper.

Definition at line 295 of file jSuperCellTowerMapper.cxx.

296{
297
298 // bool for the special case of 1.8 < eta < 2.0 only in the front layer
299 bool doenergysplit = false;
300
301 // bool as a flag to enable or disable the connection of supercells to towers according to their location and identities
302 bool validcell = true;
303
304 // We tell the jTower which supercell unique ID is in each of it's available 'slots'
305 int towereta = -99; // to be filled with tower eta value to help find it
306 int towerphi = -99; // to be filled with tower phi value to help find it
307 int iJTower = -99; // The tower ID which the supercell will be assigned to
308 int iCell = -1; // The position within the Tower that the supercell will be assigned to
309 int towerID_Modifier = -999999999; // adjustable tower ID modifier to fit tower Id scheme
310
311 /*
312 ** iCell Numbering Scheme **
313
314 Let's use the following scheme (from low to high eta regardless of detector side):
315 Layer 0: Cell 0 (Anything EM related)
316 Layer 1: Cell 1 (HEC or TILE, if we have them!)
317 */
318
319
320 /*
321 ** Structure of the EMB in Supercells **
322
323 0 < 1.4 in steps of 0.1 == 14 towers
324 1.4 < 1.52 in steps of 0.12 ==> THIS TOWER IS MOVED TO TRANS TOWER REGION
325 14 towers total (all by presampler)
326 64 towers in phi in total
327
328 896 towers in EMB per side
329 1792 towers in EMB total
330 */
331
332 /*
333 ** Structure of the TRANS in Supercells **
334
335 1.4 < 1.5, 1 special tower made from EMB and EME supercells together
336 1 tower in eta
337 64 towers in phi
338
339 64 towers in TRANS total
340 */
341
342 /*
343 ** Structure of the EMEC in Supercells **
344
345 1.375 < 1.5, funny behaviour, treated as 1 special tower ==> 1 tower === TRANSITION TOWER NOW!
346 1.5 < 1.8 standard towers by presampler ==> 3 towers
347 1.8 < 2.0 standard towers by back ==> 2 towers
348 2.0 < 2.4 standard towers by back ==> 4 towers
349 2.4 < 2.5 standard tower by back ==> 1 tower
350 2.5 < 3.1, funny behaviour, treated as 3 wide towers ==> 3 towers. Also wide in phi!
351 3.1 < 3.2 standard tower by back ==> 1 tower. Also wide in phi!
352 10 towers in eta in total (by different means) (IGNORING ABOVE |ETA| > 2.5)
353 64 towers initially in phi (IGNORING ABOVE |ETA| > 2.5)
354
355 640 towers in EME per side
356 1280 towers in EME total
357 */
358
359
360 /*
361 ** Structure of the HEC in Supercells **
362
363 1.5 - 2.5, [Region 0] standard towers by presampler ==> layer on top of existing towers
364
365 */
366
367 /*
368 ** Notes on overall structure **
369 Total number of expected towers can be as high as: 896+640 = 1536 per side + 64 transition region towers (TRANS) each side = 3200 total <=== This is the correct value!
370 */
371
372 /*
373 ** Notes on Tower ID Number Scheme **
374
375 Left Barrel IETower = 100000 + X;
376 Right Barrel IETower = 200000 + X;
377 Left TRANS IETower = 300000 + X;
378 Right TRANS IETower = 400000 + X;
379 Left Endcap IETower = 500000 + X;
380 Right Endcap IETower = 600000 + X;
381 Left FCAL IETower = 700000 + X;
382 Right FCAL IETower = 800000 + X;
383 Left Hadronic Endcap IETower = 11100000 + X --> These are just Layer 5 of Endcap Towers. They will never be generated as standalone jTowers.
384 Right Hadronic Endcap IETower = 22200000 + X --> These are just Layer 5 of Endcap Towers. They will never be generated as standalone jTowers.
385
386 */
387
388
389 //----------------------------------------------------------
390
391 // Begin assigning supercells to Towers
392
393 //----------------------------------------------------------
394
395 switch (sample) {
396 // E.M. Barrel (EMB)
397 case CaloSampling::PreSamplerB: { // DONE
398 // Presampler of the EMBarrel. Supercells are 0.1 x 0.1 unless stated otherwise
399 // Region 0 has 14 supercells in 0 < eta < 1.4 and 64 supercells in phi.
400 // Region 0 has 1 supercell (0.12 x 0.1) in 1.4 < eta < 1.52 and 64 supercells in phi. // Documentation describes this as Region 1 but the code does not. We go with Region 0.
401
402 layer = 0; // By definition for jFEX
403
404 towereta = eta_index; // Layer 0 has super cells which are 0.1 x 0.1 - i.e. the full width of a tower - sothe eta_index matches up to the Tower Eta
405 towerphi = phi_index; // phi is standard also
406
407 if(eta_index == 14) { // special treatment for TRANSITION tower
408 if(pos_neg < 0) {
409 towerID_Modifier = 300000;
410 }
411 else if(pos_neg > 0) {
412 towerID_Modifier = 400000;
413 }
414 iCell = 0; // By definition for jFEX
415 }
416 else { // standard treatment for non-transition towers
417 if(pos_neg < 0) {
418 towerID_Modifier = 100000;
419 }
420 else if(pos_neg > 0) {
421 towerID_Modifier = 200000;
422 }
423 iCell = 0; // By definition for jFEX
424 }
425
426 break;
427 }
428 case CaloSampling::EMB1:
429 case CaloSampling::EMB2: {
430 // Layer 1 of the EMBarrel. Supercells are 0.025 x 0.1 unless stated otherwise
431 // Region 0 has 56 supercells in 0 < eta < 1.4 and 64 supercells in phi.
432 // Region 1 has 3 supercells in 1.4 < eta < 1.475 and 64 supercells in phi.
433
434 // Layer 2 of the EMBarrel. Supercells are 0.025 x 0.1 unless stated otherwise
435 // Region 0 has 56 supercells in 0 < eta < 1.4 and 64 supercells in phi.
436 // Region 1 has 1 supercells (0.075 x 0.1) in 1.4 < eta < 1.475 and 64 supercells in phi.
437
438 if (region == 0) {
439 towereta = eta_index / 4; // this divides integers by 4 and truncates away the decimals (rounds DOWN to an integer)
440 towerphi = phi_index;
441 if(pos_neg < 0) {
442 towerID_Modifier = 100000;
443 }
444 else if(pos_neg > 0) {
445 towerID_Modifier = 200000;
446 }
447 }
448 else if (region == 1) {
449 towereta = 14; // hardcoded but is correct
450 towerphi = phi_index;
451 if(pos_neg < 0) {
452 towerID_Modifier = 300000;
453 }
454 else if(pos_neg > 0) {
455 towerID_Modifier = 400000;
456 }
457 }
458 else {
459 ATH_MSG_DEBUG("[CaloSampling::EMB1 or CaloSampling::EMB2] -> invalid 'region' value: " << region << " (Under investigation) ");
460 }
461
462 switch(sample) {
463 case CaloSampling::EMB1: {
464 iCell = 0; // By definition for jFEX
465 layer = 0; // By definition for jFEX
466 break;
467 }
468 case CaloSampling::EMB2: {
469 //if (region == 0) { iCell = (eta_index % 4) + 5; }
470 //else if (region == 1){ iCell = 5; }
471 iCell = 0; // By definition for jFEX
472 layer = 0; // By definition for jFEX
473 break;
474 }
475 default: {
476 ATH_MSG_DEBUG("CaloSampling::EMBX -> invalid sample for assigning iCell value! " << sample << " (Under investigation) ");
477 break;
478 }
479 }
480
481 break;
482 }
483 case CaloSampling::EMB3: {
484 // Layer 3 of the EMBarrel. Supercells are 0.1 x 0.1 unless stated otherwise
485 // Region 0 has 14 supercells in 0 < eta < 1.4 and 64 supercells in phi.
486 // Region 1 does not exist
487
488 layer = 0; // By definition for jFEX
489 towereta = eta_index; // Analogous to PreSamplerB
490 towerphi = phi_index;
491
492 iCell = 0; // By definition for jFEX
493
494 if(pos_neg < 0) {
495 towerID_Modifier = 100000;
496 }
497 else if(pos_neg > 0) {
498 towerID_Modifier = 200000;
499 }
500
501 break;
502 }
503 // E.M. End-cap (EMEC)
504 case CaloSampling::PreSamplerE: {
505 // Region 1 has 3 supercells in 1.5 < eta < 1.8, and 64 supercells in phi.
506 // Supercells are 0.1 x 0.1.
507
508 layer = 0; // By definition for jFEX
509
510 towereta = eta_index;
511 towerphi = phi_index;
512
513 iCell = 0; // By definition for jFEX
514
515 if(pos_neg < 0) {
516 towerID_Modifier = 500000;
517 }
518 else if(pos_neg > 0) {
519 towerID_Modifier = 600000;
520 }
521
522 break;
523 }
524 case CaloSampling::EME1: {
525 // Layer 1 of the EM End-Cap. Supercells very frequently change in size.
526 // Region 0 has 1 supercell in 1.375 < eta < 1.5, and 64 supercells in phi. Supercells are 0.125 x 0.1.
527 // Region 1 has 12 supercells in 1.5 < eta < 1.8, and 64 supercells in phi. Supercells are 0.025 x 0.1.
528 // Region 2 has 6 (now 12??) supercells in 1.8 < eta < 2.0, and 64 supercells in phi. Supercells are 0.0333 (0.016667 ???) x 0.1.
529 // Region 3 has 16 supercells in 2.0 < eta < 2.4, and 64 supercells in phi. Supercells are 0.025 x 0.1.
530 // Region 4 has 1 supercell in 2.4 < eta < 2.5, and 64 supercells in phi. Supercells are 0.1 x 0.1.
531 // Region 5 has 3 supercells in 2.5 < eta < 3.1, and 32 supercells in phi. Supercells are 0.2 x 0.2.
532 // Region 6 has 1 supercell in 3.1 < eta < 3.2, and 32 supercells in phi. Supercells are 0.1 x 0.2
533
534 // 1.375 < 1.5, funny behaviour, treated as 1 special tower ==> 1 tower
535 // 1.5 < 1.8 standard towers by presampler ==> 3 towers
536 // 1.8 < 2.0 standard towers by back ==> 2 towers
537 // 2.0 < 2.4 standard towers by back ==> 4 towers
538 // 2.4 < 2.5 standard tower by back ==> 1 tower
539 // 2.5 < 3.1, funny behaviour, treated as 3 wide towers ==> 3 towers
540 // 3.1 < 3.2, funny behaviour, treated as 1 tower ==> 1 tower
541 // 15 towers in total (by different means)
542
543 layer = 0; // By definition for jFEX
544
545 switch (region) {
546 case 0: { // special treatment for transition region
547
548 towereta = eta_index;
549 towerphi = phi_index;
550
551 iCell = 0; // By definition for jFEX
552 break;
553 }
554 case 2: {
555
556 towereta = (eta_index / 4);
557 towerphi = phi_index;
558
559 //iCell = (eta_index % 4) + 1;
560 iCell = 0; // By definition for jFEX
561 break;
562 }
563 case 3: {
564
565 // calc ID
566 towereta = (eta_index / 6);
567 towerphi = phi_index;
568
569 //iCell = (eta_index % 6) + 1;
570 iCell = 0; // By definition for jFEX
571
572 /*
573 if(iCell == 1){ iCell = 1; doenergysplit = false; }
574 else if( iCell == 2 ){ iCell = 1; doenergysplit = true; }
575 else if( iCell == 3 ){ iCell = 2; doenergysplit = false; }
576 else if( iCell == 4 ){ iCell = 3; doenergysplit = false; }
577 else if( iCell == 5 ){ iCell = 3; doenergysplit = true; }
578 else if( iCell == 6 ){ iCell = 4; doenergysplit = false; }
579 */
580
581 break;
582
583 // OUTDATED CODE LEFT HERE AS A FRIENDLY REMINDER OF SPECIAL STRUCTURE INCASE A FUTURE ISSUE ARISES======================
584 // Begin Dima---
585 // This is the special region, with 6 supercells per tower
586 // Idea here is to divide 2 out of 6 by 2 and add half ET to each of 2 "normal" SC
587 //iJTower = (eta_index / 6) + 18;
588
589 // These are the cells we will split
590 //if (eta_index % 3 == 1) {
591 //iCell = (eta_index % 6 < 3 ? 0 : 2);
592 //iCell2 = iCell + 1;
593 //} else {
594 // These ones just need assigning to the correct location
595 // So that 0, 2, 3, 5 => 0, 1, 2, 3
596 //iCell = (eta_index % 6) / 1.45;
597 //}
598 // end DIMA---
599 // ======================================================================================================================
600 }
601 case 4: {
602
603 towereta = (eta_index / 4);
604 towerphi = phi_index;
605
606 //iCell = (eta_index % 4) + 1;
607 iCell = 0; // By definition for jFEX
608 break;
609 }
610 case 5: {
611
612 towereta = eta_index ;
613 towerphi = phi_index;
614
615 //iCell = 1;
616 iCell = 0; // By definition for jFEX
617 break;
618 }
619 default: {
620 ATH_MSG_DEBUG("CaloSampling::EME1 -> invalid 'region' value: " << region << " (Under investigation) ");
621 break;
622 }
623 break;
624 }
625
626 if(region != 0) {
627 if(pos_neg < 0) {
628 towerID_Modifier = 500000;
629 }
630 else if(pos_neg > 0) {
631 towerID_Modifier = 600000;
632 }
633 }
634 else if(region == 0) {
635 // TRANSITION REGION TREATMENT!
636 if(pos_neg < 0) {
637 towerID_Modifier = 300000;
638 }
639 else if(pos_neg > 0) {
640 towerID_Modifier = 400000;
641 }
642 }
643
644 break;
645 }
646 case CaloSampling::EME2: {
647
648 // Layer 2 of the EM End-Cap. Supercells very frequently change in size.
649 // Region 0 has 1 supercell in 1.375 < eta < 1.425, and 64 supercells in phi. Supercells are 0.05 x 0.1.
650 // These are in the MC as Region 0 posneg +-2
651 // Region 1 has 43 supercells in 1.425 < eta < 2.5, and 64 supercells in phi. Supercells are 0.025 x 0.1.
652 // These are all bunched together in the MC as Region 1 posneg +-2
653
654 // Region 0 also has 3 supercells in 2.5 < eta < 3.1, and 32 supercells in phi. Supercells are 0.2 x 0.2.
655 // These are all bunched together in the MC as Region 1 posneg +-3
656 // Region 1 also has 1 supercell in 3.1 < eta < 3.2, and 32 supercells in phi. Supercells are 0.1 x 0.2.
657 // These are in the MC as Region 1 posneg +-3
658
659 // Focusing 20/01/2021 to finding these jFEX cells in the specified ranges - will update this note if they are found and understood.
660 // 20/01/2021: These supercells have been found. Check log file eme2_phi0.log
661 // 20/01/2021: Side note - does this mean we have the structure of EME2 completely wrong in eSuperCellTowerMapper? Need to check... eFEX IMPORTANT
662
663 // from code way up above we have:
664 /*
665 case CaloSampling::EME2: {
666 if(region == 0){ eta_index += 14; }
667 else if (region == 1){ eta_index += 57; }
668 break;
669 }
670 */
671
672 layer = 0; // By definition for jFEX
673
674 switch (region) {
675 case 0: { // special treatment for TRANSITON region
676
677 //layer = 3; // change layer label for ET threshold treatment since we are treating this as a layer3 cell - it's an extreme special case cell as part of the transition region
678 layer = 0; // By definition for jFEX
679
680 switch (std::abs(pos_neg)) {
681 case 2: {
682 towereta = eta_index;
683 towerphi = phi_index;
684 break;
685 }
686 case 3: {
687 towereta = eta_index;
688 towerphi = phi_index;
689 break;
690 }
691 default: {
692 ATH_MSG_DEBUG("CaloSampling::EME2 -> invalid 'pos_neg' value: " << pos_neg << " (Under investigation) ");
693 break;
694 }
695 }
696
697 iCell = 0; // By definition for jFEX since the jTower only has one big EM section
698
699 break;
700 }
701 case 1: {
702
703 switch (std::abs(pos_neg)) {
704 case 2: {
705 towereta = (eta_index / 4);
706 towerphi = phi_index;
707 break;
708 }
709 case 3: {
710 towereta = eta_index;
711 towerphi = phi_index;
712 break;
713 }
714 default: {
715 ATH_MSG_DEBUG("CaloSampling::EME2 -> invalid 'pos_neg' value: " << pos_neg << " (Under investigation) ");
716 break;
717 }
718 }
719
720
721 iCell = 0; // By definition for jFEX since the jTower only has one big EM section
722
723 break;
724 }
725 default: {
726 ATH_MSG_DEBUG("CaloSampling::EME2 -> invalid 'region' value: " << region << " (Under investigation) ");
727 break;
728 }
729 break;
730 }
731
732/* if(region == 0) {
733 // TRANSITION REGION TREATMENT!
734 if(eta0 < 1.5) {
735 //if(eta0 < 2.5) {
736 if(pos_neg < 0) {
737 towerID_Modifier = 300000;
738 }
739 else if(pos_neg > 0) {
740 towerID_Modifier = 400000;
741 }
742 }
743 else {
744 if(pos_neg < 0) {
745 towerID_Modifier = 500000;
746 }
747 else if(pos_neg > 0) {
748 towerID_Modifier = 600000;
749 }
750 }
751 }
752 else {
753 //if( (eta_index / 4) < 15 ){
754 //if(eta0 < 2.5) {
755 if(eta0 < 1.5) {
756 if(pos_neg < 0) {
757 towerID_Modifier = 300000;
758 }
759 else if(pos_neg > 0) {
760 towerID_Modifier = 400000;
761 }
762 }
763 else {
764 if(pos_neg < 0) {
765 towerID_Modifier = 500000;
766 }
767 else if(pos_neg > 0) {
768 towerID_Modifier = 600000;
769 }
770 }
771 }*/
772
773
774 // testing *********************************
775 if(region == 0) {
776 if(eta0 < 2.5) {
777 if(pos_neg < 0) {
778 towerID_Modifier = 300000;
779 }
780 else if(pos_neg > 0) {
781 towerID_Modifier = 400000;
782 }
783 }
784 else {
785 if(pos_neg < 0) {
786 towerID_Modifier = 500000;
787 }
788 else if(pos_neg > 0) {
789 towerID_Modifier = 600000;
790 }
791 }
792 }
793 else {
794 if(eta0 <= 1.5) {
795 if(towereta < 15) {
796 if(pos_neg < 0 && pos_neg > -3) {
797 towerID_Modifier = 300000;
798 }
799 else if(pos_neg > 0 && pos_neg < 3) {
800 towerID_Modifier = 400000;
801 }
802 }
803 else {
804 if(pos_neg < 0 && pos_neg >= -3) {
805 towerID_Modifier = 500000;
806 }
807 else if(pos_neg > 0 && pos_neg <= 3) {
808 towerID_Modifier = 600000;
809 }
810 }
811 }
812 else {
813 if(pos_neg < 0) {
814 towerID_Modifier = 500000;
815 }
816 else if(pos_neg > 0) {
817 towerID_Modifier = 600000;
818 }
819 }
820 }
821 // end of testing *********************************
822
823 break;
824 }
825 case CaloSampling::EME3: {
826
827 // Layer 3 of the EM End-Cap. Supercells are 0.1 x 0.1 unless stated otherwise.
828 // Region 0 does not exist. - FALSE!
829 // Region 1 has 3 supercells in 1.5 < eta < 1.8, and 64 supercells in phi. Supercells are 0.1 x 0.1.
830 // Region 2 has 2 supercells in 1.8 < eta < 2.0, and 64 supercells in phi. Supercells are 0.1 x 0.1.
831 // Region 3 has 4 supercells in 2.0 < eta < 2.4, and 64 supercells in phi. Supercells are 0.1 x 0.1.
832 // Region 4 has 1 supercells in 2.4 < eta < 2.5, and 64 supercells in phi. Supercells are 0.1 x 0.1.
834 // No other Regions exist
835 // Actually there should be supercells here in also covering 2.5 < eta < 3.1 and 3.1 < eta < 3.2, in the same vein as EME2 - let's find them! // JFEX IMPORTANT
836 // Focusing 20/01/2021 to finding these jFEX cells in the specified ranges - will update this note if they are found and understood
837 // 21/01/2021: These supercells have been found. Check log file eme2_phi0.log
838 // 21/01/2021: Side note - does this mean we have the structure of EME2 completely wrong in eSuperCellTowerMapper? Need to check... eFEX IMPORTANT
839
840 // The supercells for the 2.5<eta<3.1 are bunched together in the MC as Region 0 posneg +-3
841 // The supercells from the 3.1<eta<3.2 are in the MC as Region 1 posneg +-3
842
843
844 // from code way up above we have:
845 //case CaloSampling::EME3: { eta_index += 15; break; }
846
847 layer = 0; // By definition for jFEX
848
849 switch (region) {
850 case 0: {
851
852 towereta = eta_index;
853 towerphi = phi_index;
854
855 iCell = 0; // By definition for jFEX
856
857 break;
858 }
859 case 1: {
860 towereta = eta_index;
861 towerphi = phi_index;
862 iCell = 0; // By definition for jFEX
863 break;
864 }
865 default: {
866 ATH_MSG_DEBUG("CaloSampling::EME3 -> invalid 'region' value: " << region << " (Under investigation) ");
867 break;
868 }
869 break;
870 }
871
872 if(pos_neg < 0) {
873 towerID_Modifier = 500000;
874 }
875 else if(pos_neg > 0) {
876 towerID_Modifier = 600000;
877 }
878
879 break;
880 }
881 // Hadronic End-cap (HEC)
882 case CaloSampling::HEC0:
883 case CaloSampling::HEC1:
884 case CaloSampling::HEC2:
885 case CaloSampling::HEC3: {
886
887 // All Layers of the Hadronic End-Cap.
888 // Region 0 has 10 supercells in 1.5 < eta < 2.5, and 32 supercells in phi. Supercells are 0.1 x 0.1. [posneg +-2]
889 // Region 1 has 4 supercells in 2.5 < eta < 3.3, and 16 supercells in phi. Supercells are 0.2 x 0.2. [posneg +-2] // JFEX IMPORTANT
890
891 // VERIFIED THAT I CAN SEE THESE MC IN THE MC ON 21/02/2021
892 towereta = eta_index;
893 towerphi = phi_index;
894
895 layer = 1; // By definition for jFEX
896 iCell = 1; //for all cases HEC0, HEC1, HEC2, HEC3
897 switch(region) {
898 case 0: {
899
900 towereta = eta_index;
901 towerphi = phi_index;
902
903 layer = 1; // By definition for jFEX
904 iCell = 1; //for all cases HEC0, HEC1, HEC2, HEC3
905
906 break;
907
908 }
909 case 1: {
910
911 towereta = eta_index;
912 towerphi = phi_index;
913
914 layer = 1; // By definition for jFEX
915 iCell = 1; //for all cases HEC0, HEC1, HEC2, HEC3
916
917 break;
918
919 }
920 default: {
921 break;
922 }
923 }
924 // Tower connection
925 if(pos_neg < 0) {
926 towerID_Modifier = 500000;
927 }
928 else if(pos_neg > 0) {
929 towerID_Modifier = 600000;
930 }
931
932 break;
933 }
934 case CaloSampling::TileBar0:
935 case CaloSampling::TileBar1:
936 case CaloSampling::TileBar2: {
937 //REPORT_MESSAGE_WITH_CONTEXT (MSG::DEBUG, "jSuperCellTowerMapper") << "Supercell is from Tile Barrel - it will be ignored.";
938 validcell = false;
939 //PrintCellSpec(sample, layer, region, eta_index, phi_index, pos_neg, iJTower, iCell, prov, ID, doenergysplit, eta_min, eta_max, eta0, phi_min, phi_max, phi0);
940 ATH_MSG_DEBUG("\n==== jSuperCellTowerMapper ============ Supercell is from Tile Barrel - it will be ignored.");
941 break;
942 }
943 case CaloSampling::TileGap1:
944 case CaloSampling::TileGap2:
945 case CaloSampling::TileGap3: {
946 ATH_MSG_DEBUG("\n==== jSuperCellTowerMapper ============ Supercell is from Tile Gap (ITC and scintillator) - it will be ignored.");
947 //PrintCellSpec(sample, layer, region, eta_index, phi_index, pos_neg, iJTower, iCell, prov, ID, doenergysplit, eta_min, eta_max, eta0, phi_min, phi_max, phi0);
948 validcell = false;
949 break;
950 }
951 case CaloSampling::TileExt0:
952 case CaloSampling::TileExt1:
953 case CaloSampling::TileExt2: {
954 ATH_MSG_DEBUG("\n==== jSuperCellTowerMapper ============ Supercell is from Tile Extended Barrel - it will be ignored.");
955 //PrintCellSpec(sample, layer, region, eta_index, phi_index, pos_neg, iJTower, iCell, prov, ID, doenergysplit, eta_min, eta_max, eta0, phi_min, phi_max, phi0);
956 validcell = false;
957 break;
958 }
959 case CaloSampling::FCAL0:
960 case CaloSampling::FCAL1:
961 case CaloSampling::FCAL2: {
962 // FCAL 0 Region [NOT SPECIFIED IN MC] has 12 supercells in 3.2 < eta < 4.88, and 16 supercells in phi. Supercells are 0.14 x 0.4. posneg +-2
963 // FCAL 1 Region [NOT SPECIFIED IN MC] has 8 supercells in 3.2 < eta < 4.48, and 16 supercells in phi. Supercells are 0.16 x 0.4. posneg +-2
964 // FCAL 2 Region [NOT SPECIFIED IN MC] has 4 supercells in 3.2 < eta < 4.48, and 16 supercells in phi. Supercells are 0.32 x 0.4. posneg +-2
965
966 switch (sample) {
967 case CaloSampling::FCAL0: {
968 if(pos_neg < 0) {
969 towerID_Modifier = 700000;
970 }
971 else if(pos_neg > 0) {
972 towerID_Modifier = 800000;
973 }
974 iCell = 0;
975 layer = 0;
976 break;
977 }
978 case CaloSampling::FCAL1: {
979 if(pos_neg < 0) {
980 towerID_Modifier = 900000;
981 }
982 else if(pos_neg > 0) {
983 towerID_Modifier = 1000000;
984 }
985 iCell = 1;
986 layer = 1;
987 break;
988 }
989 case CaloSampling::FCAL2: {
990 if(pos_neg < 0) {
991 towerID_Modifier = 1100000;
992 }
993 else if(pos_neg > 0) {
994 towerID_Modifier = 1200000;
995 }
996 iCell = 1;
997 layer = 1;
998 break;
999 }
1000 default: {
1001 break;
1002 }
1003 }
1004
1005 towereta = eta_index;
1006 towerphi = phi_index;
1007
1008 break;
1009
1010 }
1011 case CaloSampling::MINIFCAL0:
1012 case CaloSampling::MINIFCAL1:
1013 case CaloSampling::MINIFCAL2:
1014 case CaloSampling::MINIFCAL3: {
1015 ATH_MSG_DEBUG("\n==== jSuperCellTowerMapper ============ Supercells is from MiniFCAL - it will be ignored.");
1016 validcell = false;
1017 break;
1018 }
1019 case CaloSampling::Unknown: {
1020 ATH_MSG_WARNING("\n==== jSuperCellTowerMapper ============ Supercell sampling is officially unknown - it will be ignored. (Needs investigation). Please report this!");
1021 validcell = false;
1022 break;
1023 }
1024 default: {
1025 ATH_MSG_DEBUG("\n==== jSuperCellTowerMapper ============ Supercell has invalid CaloSampling value: " << sample << " (Needs investigation). Please report this!");
1026 validcell = false;
1027 break;
1028 }
1029 }
1030
1031
1032 if(validcell) {
1033 iJTower = FindTowerIDForSuperCell(towereta, towerphi) + towerID_Modifier;
1034
1035 //Applying the SCell masking!
1036 if( (prov >> 7 & 1) and m_apply_masking ){
1037 //if masked then Et = 0
1038 et = 0.0;
1039 }
1040 if(doPrint) {
1041 PrintCellSpec(sample, layer, region, eta_index, phi_index, pos_neg, iJTower, iCell, prov, ID, doenergysplit, eta_min, eta_max, eta0, phi_min, phi_max, phi0);
1042 }
1043 ConnectSuperCellToTower( my_jTowerContainerRaw, iJTower, ID, iCell, et, layer);
1044
1045
1046 }
1047 else {
1048 PrintCellSpec(sample, layer, region, eta_index, phi_index, pos_neg, iJTower, iCell, prov, ID, doenergysplit, eta_min, eta_max, eta0, phi_min, phi_max, phi0,false);
1049 }
1050
1051 // END ITERATING OVER SUPER CELLS+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++
1052
1053 return 1;
1054}
virtual void PrintCellSpec(const CaloSampling::CaloSample sample, int layer, const int region, const int eta_index, const int phi_index, const int pos_neg, int iETower, int iCell, int prov, Identifier ID, bool doenergysplit, float eta_min, float eta_max, float eta0, float phi_min, float phi_max, float phi0, bool cellValid=true) const override
virtual void ConnectSuperCellToTower(std::unique_ptr< jTowerContainer > &my_jTowerContainerRaw, int iETower, Identifier ID, int iCell, float et, int layer) const override
Gaudi::Property< bool > m_apply_masking

◆ FindTowerIDForSuperCell()

int LVL1::jSuperCellTowerMapper::FindTowerIDForSuperCell ( int towereta,
int towerphi ) const
overrideprivatevirtual

Implements LVL1::IjSuperCellTowerMapper.

Definition at line 1058 of file jSuperCellTowerMapper.cxx.

1059{
1060 return (towerphi + (64 * towereta));
1061}

◆ initialize()

StatusCode LVL1::jSuperCellTowerMapper::initialize ( )
overridevirtual

standard Athena-Algorithm method

Definition at line 35 of file jSuperCellTowerMapper.cxx.

36{
37
38 ATH_CHECK( m_scellsCollectionSGKey.initialize() );
40
41 return StatusCode::SUCCESS;
42
43}

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ interfaceID()

const InterfaceID & LVL1::IjSuperCellTowerMapper::interfaceID ( )
inlinestaticinherited

Definition at line 54 of file IjSuperCellTowerMapper.h.

55 {
57 }
static const InterfaceID IID_IjSuperCellTowerMapper("LVL1::IjSuperCellTowerMapper", 1, 0)

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ PrintCellSpec()

void LVL1::jSuperCellTowerMapper::PrintCellSpec ( const CaloSampling::CaloSample sample,
int layer,
const int region,
const int eta_index,
const int phi_index,
const int pos_neg,
int iETower,
int iCell,
int prov,
Identifier ID,
bool doenergysplit,
float eta_min,
float eta_max,
float eta0,
float phi_min,
float phi_max,
float phi0,
bool cellValid = true ) const
overrideprivatevirtual

Implements LVL1::IjSuperCellTowerMapper.

Definition at line 1063 of file jSuperCellTowerMapper.cxx.

1064{
1065
1066 std::string sampleName = "";
1067
1068 switch (sample) {
1069 case CaloSampling::PreSamplerB: { sampleName = "PreSamplerB"; break; }
1070 case CaloSampling::EMB1: { sampleName = "EMB1"; break; }
1071 case CaloSampling::EMB2: { sampleName = "EMB2"; break; }
1072 case CaloSampling::EMB3: { sampleName = "EMB3"; break; }
1073 case CaloSampling::PreSamplerE: { sampleName = "PreSamplerE"; break; }
1074 case CaloSampling::EME1: { sampleName = "EME1"; break; }
1075 case CaloSampling::EME2: { sampleName = "EME2"; break; }
1076 case CaloSampling::EME3: { sampleName = "EME3"; break; }
1077 case CaloSampling::HEC0: { sampleName = "HEC0"; break; }
1078 case CaloSampling::HEC1: { sampleName = "HEC1"; break; }
1079 case CaloSampling::HEC2: { sampleName = "HEC2"; break; }
1080 case CaloSampling::HEC3: { sampleName = "HEC3"; break; }
1081 case CaloSampling::FCAL0: { sampleName = "FCAL0"; break; }
1082 case CaloSampling::FCAL1: { sampleName = "FCAL1"; break; }
1083 case CaloSampling::FCAL2: { sampleName = "FCAL2"; break; }
1084 default: {
1085 ATH_MSG_DEBUG("\n==== jSuperCellTowerMapper ============ Supercell has invalid CaloSampling value: " << sample << " (Needs investigation). Please report this!");
1086 break;
1087 }
1088 }
1089
1090 if(cellValid){
1091 ATH_MSG_DEBUG("ASSIGNED CELL::: CASE: " << sampleName
1092 << "\tSample: " << sample
1093 << "\tLayer: " << layer
1094 << "\tRegion: " << region
1095 << "\tEta0: " << eta0
1096 << "\tEta_min: " << eta_min
1097 << "\tEta_max: " << eta_max
1098 << "\tEta_Index: " << eta_index
1099 << "\tPhi0: " << phi0
1100 << "\tPhi_min: " << phi_min
1101 << "\tPhi_max: " << phi_max
1102 << "\tPhi_Index: " << phi_index
1103 << "\tPosNeg: " << pos_neg
1104 << "\tiJTower: " << iJTower
1105 << "\tiCell: " << iCell
1106 << "\tDoEnergySplit: " << doenergysplit
1107 << "\tProvenance: " << prov
1108 << "\tID: " << ID
1109 << " ");
1110 }
1111 else{
1112 ATH_MSG_DEBUG("INVALID CELL IDENTIFIED::: CASE: " << sampleName
1113 << "\tSample: " << sample
1114 << "\tLayer: " << layer
1115 << "\tRegion: " << region
1116 << "\tEta0: " << eta0
1117 << "\tEta_min: " << eta_min
1118 << "\tEta_max: " << eta_max
1119 << "\tEta_Index: " << eta_index
1120 << "\tPhi0: " << phi0
1121 << "\tPhi_min: " << phi_min
1122 << "\tPhi_max: " << phi_max
1123 << "\tPhi_Index: " << phi_index
1124 << "\tPosNeg: " << pos_neg
1125 << "\tiJTower: " << iJTower
1126 << "\tiCell: " << iCell
1127 << "\tDoEnergySplit: " << doenergysplit
1128 << "\tProvenance: " << prov
1129 << "\tID: " << ID
1130 << " ");
1131 }
1132
1133 return;
1134}

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ reset()

void LVL1::jSuperCellTowerMapper::reset ( )
overridevirtual

Implements LVL1::IjSuperCellTowerMapper.

Definition at line 86 of file jSuperCellTowerMapper.cxx.

86 {
87 return;
88}

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_apply_masking

Gaudi::Property<bool> LVL1::jSuperCellTowerMapper::m_apply_masking {this, "SCellMasking", false, "Applies masking. Only use for data"}
private

Definition at line 48 of file jSuperCellTowerMapper.h.

48{this, "SCellMasking", false, "Applies masking. Only use for data"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_scellsCollectionSGKey

SG::ReadHandleKey<CaloCellContainer> LVL1::jSuperCellTowerMapper::m_scellsCollectionSGKey {this, "SCell", "SCell", "SCell"}
private

Definition at line 45 of file jSuperCellTowerMapper.h.

45{this, "SCell", "SCell", "SCell"};

◆ m_triggerTowerCollectionSGKey

SG::ReadHandleKey<xAOD::TriggerTowerContainer> LVL1::jSuperCellTowerMapper::m_triggerTowerCollectionSGKey {this, "xODTriggerTowers", "xAODTriggerTowers", "xAODTriggerTowers"}
private

Definition at line 46 of file jSuperCellTowerMapper.h.

46{this, "xODTriggerTowers", "xAODTriggerTowers", "xAODTriggerTowers"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: