ATLAS Offline Software
TTOnlineID.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef CALOIDENTIFIER_TTONLINEID_H
6 #define CALOIDENTIFIER_TTONLINEID_H
7 
12 #include "Identifier/Range.h"
13 #include "Identifier/MultiRange.h"
14 #include "AthenaKernel/CLASS_DEF.h"
15 #include <vector>
16 #include <algorithm>
17 
18 
29 {
30  public:
31 
33 
34  TTOnlineID();
36 
37 
38  /* build towerId HWIdentifier */
39  /*=========================== */
41  HWIdentifier crateId( int crate ) const;
42  HWIdentifier crateId( int crate, bool checks ) const;
44  HWIdentifier crateId( IdentifierHash crate_hash ) const;
46  IdentifierHash crateHash( HWIdentifier crate_id ) const;
48  std::vector<HWIdentifier>::const_iterator crate_begin() const;
49  std::vector<HWIdentifier>::const_iterator crate_end() const;
50 
51  /* build moduleId HWIdentifier */
52  /*=========================== */
54  HWIdentifier moduleId( int crate, int module) const;
55  HWIdentifier moduleId( int crate, int module, bool checks) const;
57  HWIdentifier moduleId( IdentifierHash crate_hash ) const;
59  IdentifierHash moduleHash( HWIdentifier crate_id ) const;
61  std::vector<HWIdentifier>::const_iterator module_begin() const;
62  std::vector<HWIdentifier>::const_iterator module_end() const;
63 
64  /* build submoduleId HWIdentifier */
65  /*=========================== */
67  HWIdentifier submoduleId( int crate, int module, int submodule) const;
68  HWIdentifier submoduleId( int crate, int module, int submodule, bool checks) const;
70  HWIdentifier submoduleId( IdentifierHash crate_hash ) const;
72  IdentifierHash submoduleHash( HWIdentifier crate_id ) const;
74  std::vector<HWIdentifier>::const_iterator submodule_begin() const;
75  std::vector<HWIdentifier>::const_iterator submodule_end() const;
76 
77  /* build moduleId HWIdentifier */
78  /*=========================== */
80  HWIdentifier channelId( int crate, int module, int submodule, int channel) const;
81  HWIdentifier channelId( int crate, int module, int submodule, int channel, bool checks) const;
83  HWIdentifier channelId( IdentifierHash crate_hash ) const;
85  IdentifierHash channelHash( HWIdentifier crate_id ) const;
87  std::vector<HWIdentifier>::const_iterator channel_begin() const;
88  std::vector<HWIdentifier>::const_iterator channel_end() const;
89 
90 
91 
92  /* hash tables max size */
93  /*====================== */
94  size_type crateHashMax () const;
95  size_type moduleHashMax () const;
96  size_type submoduleHashMax () const;
97  size_type channelHashMax () const;
98 
99 
101  virtual int initialize_from_dictionary (const IdDictMgr& dict_mgr);
102 
103 
104  // HWIdentifier Fields for TTOnlineID
105  // ========================================
106  int crate( const HWIdentifier id )const;
107  int module( const HWIdentifier id )const;
108  int submodule( const HWIdentifier id )const;
109  int channel( const HWIdentifier id )const;
110 
111 
114  IdContext crateContext() const;
115  IdContext moduleContext() const;
116  IdContext submoduleContext() const;
117  IdContext channelContext() const;
118 
119 
120 private:
121 
122  enum {NOT_VALID_HASH = 256000};
123 
125 
126  // Check methods
127  void channel_Id_checks(int crate, int module, int submodule, int channel ) const;
128  void channel_Id_checks(const HWIdentifier crateId, int module, int submodule, int channel ) const;
129  void channel_Id_checks(const HWIdentifier moduleId, int submodule, int channel ) const;
130  void channel_Id_checks(const HWIdentifier submoduleId, int channel ) const;
131 
132  void submodule_Id_checks(int crate, int module, int submodule ) const;
133  void module_Id_checks(int crate, int module ) const;
134  void crate_Id_checks( int crate ) const;
135 
137  int get_expanded_id (const HWIdentifier& id, ExpandedIdentifier& exp_id,
138  const IdContext* context) const;
139 
141  int detzside_field_value() const;
142 
144  int initLevelsFromDict();
145  int init_hashes();
146 
155 
161 
166 
167  std::vector<HWIdentifier> m_crate_vec;
168  std::vector<HWIdentifier> m_module_vec;
169  std::vector<HWIdentifier> m_submodule_vec;
170  std::vector<HWIdentifier> m_channel_vec;
171 
173 
178  class HashCalc
179  {
180  public:
182  m_hash(0),
183  m_channelmin(0) {}
186  };
187  std::vector<HashCalc> m_hash_calcs;
188 
189 
197 };
198 
199 
200 //using the macro below we can assign an identifier (and a version)
201 //This is required and checked at compile time when you try to record/retrieve
202 CLASS_DEF( TTOnlineID , 38321944 , 1 )
203 
204 
205 //=====================
206 // Inline Definitions
207 //=====================
208 
209 /* Crates */
210 
211 //==========================================================================================================
212 inline HWIdentifier TTOnlineID::crateId( int crate, bool checks ) const
213 //==========================================================================================================
214 {
215  HWIdentifier result(0);
216  m_calo_impl.pack (10 , result);
217  m_calo_detzside_impl.pack (0 , result);
218  m_crate_impl.pack (crate , result);
219 
220  /* Do checks */
221  if(checks) {
222  crate_Id_checks( crate );
223  }
224  return result;
225 }
226 inline HWIdentifier TTOnlineID::crateId( int crate ) const
227 {
228  return crateId (crate, do_checks());
229 }
230 
231 //============================================================================== */
233 //===============================================================================*/
234 {
235  return(m_crate_vec[cratehash_id]);
236 }
237 
238 //=============================================================================
240 //=============================================================================
241  std::vector<HWIdentifier>::const_iterator it = std::lower_bound(m_crate_vec.begin(),m_crate_vec.end(),crate_id);
242  if ( it != m_crate_vec.end() ){
243  return (it - m_crate_vec.begin());
244  }
245  return (0);
246 }
247 
248 //=============================================================================
249 inline std::vector<HWIdentifier>::const_iterator TTOnlineID::crate_begin() const {
250 //=============================================================================
251  return(m_crate_vec.begin());
252 }
253 
254 //=============================================================================
255 inline std::vector<HWIdentifier>::const_iterator TTOnlineID::crate_end() const {
256 //=============================================================================
257  return(m_crate_vec.end());
258 }
259 
260 /* Modules */
261 
262 //==========================================================================================================
263 inline HWIdentifier TTOnlineID::moduleId( int crate, int module, bool checks ) const
264 //==========================================================================================================
265 {
266  HWIdentifier result(0);
267  m_calo_impl.pack (10 , result);
268  m_calo_detzside_impl.pack (0 , result);
269  m_crate_impl.pack (crate , result);
270  m_module_impl.pack (module , result);
271 
272  /* Do checks */
273  if(checks) {
274  module_Id_checks( crate, module );
275  }
276  return result;
277 }
278 
279 inline HWIdentifier TTOnlineID::moduleId( int crate, int module ) const
280 {
281  return moduleId (crate, module, do_checks());
282 }
283 
284 //============================================================================== */
286 //===============================================================================*/
287 {
288  return(m_module_vec[modulehash_id]);
289 }
290 
291 //=============================================================================
293 //=============================================================================
294  std::vector<HWIdentifier>::const_iterator it = std::lower_bound(m_module_vec.begin(),m_module_vec.end(),module_id);
295  if ( it != m_module_vec.end() ){
296  return (it - m_module_vec.begin());
297  }
298  return (0);
299 }
300 
301 //=============================================================================
302 inline std::vector<HWIdentifier>::const_iterator TTOnlineID::module_begin() const {
303 //=============================================================================
304  return(m_module_vec.begin());
305 }
306 
307 //=============================================================================
308 inline std::vector<HWIdentifier>::const_iterator TTOnlineID::module_end() const {
309 //=============================================================================
310  return(m_module_vec.end());
311 }
312 
313 
314 /* SubModules */
315 
316 //==========================================================================================================
317 inline HWIdentifier TTOnlineID::submoduleId( int crate, int module, int submodule, bool checks ) const
318 //==========================================================================================================
319 {
320  HWIdentifier result(0);
321  m_calo_impl.pack (10 , result);
322  m_calo_detzside_impl.pack (0 , result);
323  m_crate_impl.pack (crate , result);
324  m_module_impl.pack (module , result);
325  m_submodule_impl.pack (submodule , result);
326 
327  /* Do checks */
328  if(checks) {
329  submodule_Id_checks( crate, module, submodule );
330  }
331  return result;
332 }
333 inline HWIdentifier TTOnlineID::submoduleId( int crate, int module, int submodule ) const
334 {
336 }
337 
338 
339 //============================================================================== */
341 //===============================================================================*/
342 {
343  return(m_submodule_vec[submodulehash_id]);
344 }
345 
346 //=============================================================================
348 //=============================================================================
349  std::vector<HWIdentifier>::const_iterator it = std::lower_bound(m_submodule_vec.begin(),m_submodule_vec.end(),submodule_id);
350  if ( it != m_submodule_vec.end() ){
351  return (it - m_submodule_vec.begin());
352  }
353  return (0);
354 }
355 
356 //=============================================================================
357 inline std::vector<HWIdentifier>::const_iterator TTOnlineID::submodule_begin() const {
358 //=============================================================================
359  return(m_submodule_vec.begin());
360 }
361 
362 //=============================================================================
363 inline std::vector<HWIdentifier>::const_iterator TTOnlineID::submodule_end() const {
364 //=============================================================================
365  return(m_submodule_vec.end());
366 }
367 
368 
369 /* Channels */
370 
371 //==========================================================================================================
372 inline HWIdentifier TTOnlineID::channelId( int crate, int module, int submodule, int channel, bool checks ) const
373 //==========================================================================================================
374 {
375  HWIdentifier result(0);
376  m_calo_impl.pack (10 , result);
377  m_calo_detzside_impl.pack (0 , result);
378  m_crate_impl.pack (crate , result);
379  m_module_impl.pack (module , result);
380  m_submodule_impl.pack (submodule , result);
381  m_channel_impl.pack (channel , result);
382 
383  /* Do checks */
384  if(checks) {
385  channel_Id_checks( crate, module, submodule, channel );
386  }
387  return result;
388 }
389 
390 inline HWIdentifier TTOnlineID::channelId( int crate, int module, int submodule, int channel ) const
391 {
393 }
394 
395 //============================================================================== */
397 //===============================================================================*/
398 {
399  return(m_channel_vec[channelhash_id]);
400 }
401 
402 //=============================================================================
404 //=============================================================================
405  std::vector<HWIdentifier>::const_iterator it = std::lower_bound(m_channel_vec.begin(),m_channel_vec.end(),channel_id);
406  if ( it != m_channel_vec.end() ){
407  return (it - m_channel_vec.begin());
408  }
409  return (0);
410 }
411 
412 //=============================================================================
413 inline std::vector<HWIdentifier>::const_iterator TTOnlineID::channel_begin() const {
414 //=============================================================================
415  return(m_channel_vec.begin());
416 }
417 
418 //=============================================================================
419 inline std::vector<HWIdentifier>::const_iterator TTOnlineID::channel_end() const {
420 //=============================================================================
421  return(m_channel_vec.end());
422 }
423 
424 
425 /* Hash indices */
426 
428 /*====================================================================*/
429 {
430  return m_crateHashMax;
431 }
432 
434 /*====================================================================*/
435 {
436  return m_moduleHashMax;
437 }
438 
440 /*====================================================================*/
441 {
442  return m_submoduleHashMax;
443 }
444 
446 /*====================================================================*/
447 {
448  return m_channelHashMax;
449 }
450 
451 inline int TTOnlineID::crate(const HWIdentifier id)const
452 /*===========================================================*/
453 {
454  return (m_crate_impl.unpack(id));
455 }
456 
457 inline int TTOnlineID::module(const HWIdentifier id)const
458 /*===========================================================*/
459 {
460  return (m_module_impl.unpack(id));
461 }
462 
463 inline int TTOnlineID::submodule(const HWIdentifier id)const
464 /*===========================================================*/
465 {
466  return (m_submodule_impl.unpack(id));
467 }
468 
469 inline int TTOnlineID::channel(const HWIdentifier id)const
470 /*===========================================================*/
471 {
472  return (m_channel_impl.unpack(id));
473 }
474 
476 {
477  return m_iDetZSideFieldValue;
478 }
479 
480 #endif // TTOnlineID_H
TTOnlineID::m_channel_impl
IdDictFieldImplementation m_channel_impl
Definition: TTOnlineID.h:196
TTOnlineID::channel
int channel(const HWIdentifier id) const
Definition: TTOnlineID.h:469
TTOnlineID::m_calo_detzside_impl
IdDictFieldImplementation m_calo_detzside_impl
Definition: TTOnlineID.h:192
get_generator_info.result
result
Definition: get_generator_info.py:21
TTOnlineID::m_submodule_vec
std::vector< HWIdentifier > m_submodule_vec
Definition: TTOnlineID.h:169
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:24
TTOnlineID::channel_end
std::vector< HWIdentifier >::const_iterator channel_end() const
Definition: TTOnlineID.h:419
TTOnlineID::crate_Id_checks
void crate_Id_checks(int crate) const
Definition: TTOnlineID.cxx:348
TTOnlineID::submoduleContext
IdContext submoduleContext() const
Definition: TTOnlineID.cxx:61
TTOnlineID::channelHashMax
size_type channelHashMax() const
Definition: TTOnlineID.h:445
TTOnlineID::HashCalc::HashCalc
HashCalc()
Definition: TTOnlineID.h:181
TTOnlineID
Helper class for Calo TT online identifiers.
Definition: TTOnlineID.h:29
TTOnlineID::m_submodule_index
size_type m_submodule_index
Definition: TTOnlineID.h:153
Range.h
TTOnlineID::module_end
std::vector< HWIdentifier >::const_iterator module_end() const
Definition: TTOnlineID.h:308
skel.it
it
Definition: skel.GENtoEVGEN.py:407
TTOnlineID::crateHash
IdentifierHash crateHash(HWIdentifier crate_id) const
(3) create towerId from hash
Definition: TTOnlineID.h:239
TTOnlineID::m_l1online_regions_index
size_type m_l1online_regions_index
Definition: TTOnlineID.h:150
ExpandedIdentifier
Definition: DetectorDescription/Identifier/Identifier/ExpandedIdentifier.h:102
TTOnlineID::m_full_channel_range
MultiRange m_full_channel_range
Definition: TTOnlineID.h:160
TTOnlineID::m_crate_index
size_type m_crate_index
Definition: TTOnlineID.h:151
TTOnlineID::channel_begin
std::vector< HWIdentifier >::const_iterator channel_begin() const
(4) iterator over towerId
Definition: TTOnlineID.h:413
TTOnlineID::initialize_from_dictionary
virtual int initialize_from_dictionary(const IdDictMgr &dict_mgr)
Initialization from the identifier dictionary.
Definition: TTOnlineID.cxx:76
TTOnlineID::moduleHashMax
size_type moduleHashMax() const
Definition: TTOnlineID.h:433
TTOnlineID::submodule_end
std::vector< HWIdentifier >::const_iterator submodule_end() const
Definition: TTOnlineID.h:363
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
TTOnlineID::m_module_impl
IdDictFieldImplementation m_module_impl
Definition: TTOnlineID.h:194
HWIdentifier
Definition: HWIdentifier.h:13
TTOnlineID::HashCalc::m_channelmin
size_type m_channelmin
Definition: TTOnlineID.h:185
TTOnlineID::moduleHash
IdentifierHash moduleHash(HWIdentifier crate_id) const
(3) create towerId from hash
Definition: TTOnlineID.h:292
TTOnlineID::m_iDetZSideFieldValue
int m_iDetZSideFieldValue
Definition: TTOnlineID.h:172
TTOnlineID::HashCalc::m_hash
IdentifierHash m_hash
Definition: TTOnlineID.h:184
TTOnlineID::moduleId
HWIdentifier moduleId(int crate, int module) const
(1) create towerId from fields
Definition: TTOnlineID.h:279
TTOnlineID::channelHash
IdentifierHash channelHash(HWIdentifier crate_id) const
(3) create towerId from hash
Definition: TTOnlineID.h:403
TTOnlineID::submoduleHash
IdentifierHash submoduleHash(HWIdentifier crate_id) const
(3) create towerId from hash
Definition: TTOnlineID.h:347
TTOnlineID::init_hashes
int init_hashes()
Definition: TTOnlineID.cxx:513
TTOnlineID::crate_begin
std::vector< HWIdentifier >::const_iterator crate_begin() const
(4) iterator over towerId
Definition: TTOnlineID.h:249
python.PyAthena.module
module
Definition: PyAthena.py:131
TTOnlineID::size_type
Identifier::size_type size_type
Definition: TTOnlineID.h:32
AtlasDetectorID.h
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
IdDictMgr
Definition: IdDictMgr.h:14
TTOnlineID::m_module_vec
std::vector< HWIdentifier > m_module_vec
Definition: TTOnlineID.h:168
TTOnlineID::module
int module(const HWIdentifier id) const
Definition: TTOnlineID.h:457
TTOnlineID::submodule_begin
std::vector< HWIdentifier >::const_iterator submodule_begin() const
(4) iterator over towerId
Definition: TTOnlineID.h:357
TTOnlineID::module_begin
std::vector< HWIdentifier >::const_iterator module_begin() const
(4) iterator over towerId
Definition: TTOnlineID.h:302
TTOnlineID::~TTOnlineID
~TTOnlineID()
TTOnlineID::submoduleId
HWIdentifier submoduleId(int crate, int module, int submodule) const
(1) create towerId from fields
Definition: TTOnlineID.h:333
TTOnlineID::m_detzside_index
size_type m_detzside_index
Definition: TTOnlineID.h:149
createCoolChannelIdFile.channel_id
channel_id
Definition: createCoolChannelIdFile.py:51
TTOnlineID::m_submoduleHashMax
size_type m_submoduleHashMax
Definition: TTOnlineID.h:164
TTOnlineID::detzside_field_value
int detzside_field_value() const
return the value of the detzside field (initialized in initialize_from_dictionary())
Definition: TTOnlineID.h:475
TTOnlineID::m_hash_calcs
std::vector< HashCalc > m_hash_calcs
Definition: TTOnlineID.h:187
TTOnlineID::channel_Id_checks
void channel_Id_checks(int crate, int module, int submodule, int channel) const
Definition: TTOnlineID.cxx:238
TTOnlineID::m_moduleHashMax
size_type m_moduleHashMax
Definition: TTOnlineID.h:163
TTOnlineID::channel_hash_binary_search
IdentifierHash channel_hash_binary_search(HWIdentifier channelId) const
TTOnlineID::m_crate_impl
IdDictFieldImplementation m_crate_impl
Definition: TTOnlineID.h:193
TTOnlineID::m_full_module_range
MultiRange m_full_module_range
Definition: TTOnlineID.h:158
TTOnlineID::m_calo_index
size_type m_calo_index
Member Data index.
Definition: TTOnlineID.h:148
MultiRange
A MultiRange combines several Ranges.
Definition: MultiRange.h:17
HWIdentifier.h
TTOnlineID::moduleContext
IdContext moduleContext() const
Definition: TTOnlineID.cxx:55
IdentifierHash.h
TTOnlineID::m_submodule_impl
IdDictFieldImplementation m_submodule_impl
Definition: TTOnlineID.h:195
TTOnlineID::initLevelsFromDict
int initLevelsFromDict()
init() hashes
Definition: TTOnlineID.cxx:364
TTOnlineID::TTOnlineID
TTOnlineID()
Definition: TTOnlineID.cxx:27
TTOnlineID::m_calo_impl
IdDictFieldImplementation m_calo_impl
Field Implementation.
Definition: TTOnlineID.h:191
MultiRange.h
TTOnlineID::HashCalc
small class holding the starting hash value, the min eta and the number of phi bins of each region ...
Definition: TTOnlineID.h:179
IdDictDictionary
Definition: IdDictDictionary.h:30
IdDictFieldImplementation.h
TTOnlineID::get_expanded_id
int get_expanded_id(const HWIdentifier &id, ExpandedIdentifier &exp_id, const IdContext *context) const
create expanded HWIdentifier from HWIdentifier (return == 0 for OK)
Definition: TTOnlineID.cxx:213
TTOnlineID::submodule_Id_checks
void submodule_Id_checks(int crate, int module, int submodule) const
Definition: TTOnlineID.cxx:318
TTOnlineID::m_full_crate_range
MultiRange m_full_crate_range
Definition: TTOnlineID.h:157
TTOnlineID::submodule
int submodule(const HWIdentifier id) const
Definition: TTOnlineID.h:463
TTOnlineID::m_channel_index
size_type m_channel_index
Definition: TTOnlineID.h:154
CLASS_DEF
#define CLASS_DEF(NAME, CID, VERSION)
associate a clid and a version to a type eg
Definition: Control/AthenaKernel/AthenaKernel/CLASS_DEF.h:67
TTOnlineID::crateId
HWIdentifier crateId(int crate) const
(1) create towerId from fields
Definition: TTOnlineID.h:226
TTOnlineID::channelId
HWIdentifier channelId(int crate, int module, int submodule, int channel) const
(1) create towerId from fields
Definition: TTOnlineID.h:390
TTOnlineID::m_dict
const IdDictDictionary * m_dict
Definition: TTOnlineID.h:156
TTOnlineID::crate_end
std::vector< HWIdentifier >::const_iterator crate_end() const
Definition: TTOnlineID.h:255
TTOnlineID::m_module_index
size_type m_module_index
Definition: TTOnlineID.h:152
Identifier::size_type
unsigned long long size_type
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:29
IdDictFieldImplementation
IdDictFieldImplementation is used to capture the specification of a single field of an Identifier.
Definition: IdDictFieldImplementation.h:58
IdentifierHash
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
TTOnlineID::m_crate_vec
std::vector< HWIdentifier > m_crate_vec
Definition: TTOnlineID.h:167
TTOnlineID::m_channelHashMax
size_type m_channelHashMax
Definition: TTOnlineID.h:165
TTOnlineID::crate
int crate(const HWIdentifier id) const
Definition: TTOnlineID.h:451
TTOnlineID::submoduleHashMax
size_type submoduleHashMax() const
Definition: TTOnlineID.h:439
TTOnlineID::module_Id_checks
void module_Id_checks(int crate, int module) const
Definition: TTOnlineID.cxx:333
TTOnlineID::m_crateHashMax
size_type m_crateHashMax
Definition: TTOnlineID.h:162
AtlasDetectorID::do_checks
virtual bool do_checks(void) const override
Checks are performed by default in debug compilation and NOT in optimized compilation.
Definition: AtlasDetectorID.cxx:476
IdContext
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
Definition: IdContext.h:26
CLASS_DEF.h
macros to associate a CLID to a type
TTOnlineID::channelContext
IdContext channelContext() const
Definition: TTOnlineID.cxx:67
AtlasDetectorID
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
Definition: AtlasDetectorID.h:52
TTOnlineID::NOT_VALID_HASH
@ NOT_VALID_HASH
Definition: TTOnlineID.h:122
TTOnlineID::crateContext
IdContext crateContext() const
context for feedthroughs, feb & channels
Definition: TTOnlineID.cxx:49
TTOnlineID::m_full_submodule_range
MultiRange m_full_submodule_range
Definition: TTOnlineID.h:159
TTOnlineID::crateHashMax
size_type crateHashMax() const
Definition: TTOnlineID.h:427
TTOnlineID::m_channel_vec
std::vector< HWIdentifier > m_channel_vec
Definition: TTOnlineID.h:170