ATLAS Offline Software
Loading...
Searching...
No Matches
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"
15#include <vector>
16#include <algorithm>
17
18
29{
30 public:
31
32 typedef Identifier::size_type size_type;
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;
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;
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
113
114 IdContext crateContext() const;
115 IdContext moduleContext() const;
118
119
120private:
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
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
202CLASS_DEF( TTOnlineID , 38321944 , 1 )
203
204
205//=====================
206// Inline Definitions
207//=====================
208
209/* Crates */
210
211//==========================================================================================================
212inline HWIdentifier TTOnlineID::crateId( int crate, bool checks ) const
213//==========================================================================================================
214{
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) {
223 }
224 return result;
225}
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//=============================================================================
249inline std::vector<HWIdentifier>::const_iterator TTOnlineID::crate_begin() const {
250//=============================================================================
251 return(m_crate_vec.begin());
252}
253
254//=============================================================================
255inline std::vector<HWIdentifier>::const_iterator TTOnlineID::crate_end() const {
256//=============================================================================
257 return(m_crate_vec.end());
258}
259
260/* Modules */
261
262//==========================================================================================================
263inline HWIdentifier TTOnlineID::moduleId( int crate, int module, bool checks ) const
264//==========================================================================================================
265{
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) {
275 }
276 return result;
277}
278
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//=============================================================================
302inline std::vector<HWIdentifier>::const_iterator TTOnlineID::module_begin() const {
303//=============================================================================
304 return(m_module_vec.begin());
305}
306
307//=============================================================================
308inline std::vector<HWIdentifier>::const_iterator TTOnlineID::module_end() const {
309//=============================================================================
310 return(m_module_vec.end());
311}
312
313
314/* SubModules */
315
316//==========================================================================================================
317inline HWIdentifier TTOnlineID::submoduleId( int crate, int module, int submodule, bool checks ) const
318//==========================================================================================================
319{
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);
326
327 /* Do checks */
328 if(checks) {
330 }
331 return result;
332}
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//=============================================================================
357inline std::vector<HWIdentifier>::const_iterator TTOnlineID::submodule_begin() const {
358//=============================================================================
359 return(m_submodule_vec.begin());
360}
361
362//=============================================================================
363inline std::vector<HWIdentifier>::const_iterator TTOnlineID::submodule_end() const {
364//=============================================================================
365 return(m_submodule_vec.end());
366}
367
368
369/* Channels */
370
371//==========================================================================================================
372inline HWIdentifier TTOnlineID::channelId( int crate, int module, int submodule, int channel, bool checks ) const
373//==========================================================================================================
374{
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);
382
383 /* Do checks */
384 if(checks) {
386 }
387 return result;
388}
389
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//=============================================================================
413inline std::vector<HWIdentifier>::const_iterator TTOnlineID::channel_begin() const {
414//=============================================================================
415 return(m_channel_vec.begin());
416}
417
418//=============================================================================
419inline 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
451inline int TTOnlineID::crate(const HWIdentifier id)const
452/*===========================================================*/
453{
454 return (m_crate_impl.unpack(id));
455}
456
457inline int TTOnlineID::module(const HWIdentifier id)const
458/*===========================================================*/
459{
460 return (m_module_impl.unpack(id));
461}
462
463inline int TTOnlineID::submodule(const HWIdentifier id)const
464/*===========================================================*/
465{
466 return (m_submodule_impl.unpack(id));
467}
468
469inline int TTOnlineID::channel(const HWIdentifier id)const
470/*===========================================================*/
471{
472 return (m_channel_impl.unpack(id));
473}
474
476{
478}
479
480#endif // TTOnlineID_H
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
macros to associate a CLID to a type
#define CLASS_DEF(NAME, CID, VERSION)
associate a clid and a version to a type eg
virtual bool do_checks(void) const override
Checks are performed by default in debug compilation and NOT in optimized compilation.
AtlasDetectorID(const std::string &name, const std::string &group)
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
Definition IdContext.h:26
IdDictFieldImplementation is used to capture the specification of a single field of an Identifier.
This is a "hash" representation of an Identifier.
A MultiRange combines several Ranges.
Definition MultiRange.h:17
IdentifierHash m_hash
Definition TTOnlineID.h:184
Helper class for Calo TT online identifiers.
Definition TTOnlineID.h:29
HWIdentifier moduleId(int crate, int module) const
(1) create towerId from fields
Definition TTOnlineID.h:279
size_type m_crateHashMax
Definition TTOnlineID.h:162
size_type m_submodule_index
Definition TTOnlineID.h:153
virtual int initialize_from_dictionary(const IdDictMgr &dict_mgr)
Initialization from the identifier dictionary.
int initLevelsFromDict()
init() hashes
size_type m_l1online_regions_index
Definition TTOnlineID.h:150
std::vector< HWIdentifier > m_channel_vec
Definition TTOnlineID.h:170
IdDictFieldImplementation m_channel_impl
Definition TTOnlineID.h:196
IdDictFieldImplementation m_submodule_impl
Definition TTOnlineID.h:195
MultiRange m_full_submodule_range
Definition TTOnlineID.h:159
size_type m_submoduleHashMax
Definition TTOnlineID.h:164
HWIdentifier channelId(int crate, int module, int submodule, int channel) const
(1) create towerId from fields
Definition TTOnlineID.h:390
int get_expanded_id(const HWIdentifier &id, ExpandedIdentifier &exp_id, const IdContext *context) const
create expanded HWIdentifier from HWIdentifier (return == 0 for OK)
HWIdentifier crateId(int crate) const
(1) create towerId from fields
Definition TTOnlineID.h:226
IdDictFieldImplementation m_calo_detzside_impl
Definition TTOnlineID.h:192
std::vector< HWIdentifier >::const_iterator module_end() const
Definition TTOnlineID.h:308
int module(const HWIdentifier id) const
Definition TTOnlineID.h:457
int detzside_field_value() const
return the value of the detzside field (initialized in initialize_from_dictionary())
Definition TTOnlineID.h:475
void channel_Id_checks(int crate, int module, int submodule, int channel) const
std::vector< HWIdentifier >::const_iterator submodule_begin() const
(4) iterator over towerId
Definition TTOnlineID.h:357
IdentifierHash channelHash(HWIdentifier crate_id) const
(3) create towerId from hash
Definition TTOnlineID.h:403
std::vector< HashCalc > m_hash_calcs
Definition TTOnlineID.h:187
void module_Id_checks(int crate, int module) const
IdContext crateContext() const
context for feedthroughs, feb & channels
std::vector< HWIdentifier > m_module_vec
Definition TTOnlineID.h:168
size_type crateHashMax() const
Definition TTOnlineID.h:427
IdDictFieldImplementation m_crate_impl
Definition TTOnlineID.h:193
std::vector< HWIdentifier >::const_iterator submodule_end() const
Definition TTOnlineID.h:363
size_type m_channel_index
Definition TTOnlineID.h:154
Identifier::size_type size_type
Definition TTOnlineID.h:32
IdentifierHash submoduleHash(HWIdentifier crate_id) const
(3) create towerId from hash
Definition TTOnlineID.h:347
const IdDictDictionary * m_dict
Definition TTOnlineID.h:156
std::vector< HWIdentifier >::const_iterator crate_end() const
Definition TTOnlineID.h:255
void crate_Id_checks(int crate) const
IdContext moduleContext() const
size_type moduleHashMax() const
Definition TTOnlineID.h:433
MultiRange m_full_crate_range
Definition TTOnlineID.h:157
std::vector< HWIdentifier >::const_iterator channel_begin() const
(4) iterator over towerId
Definition TTOnlineID.h:413
size_type submoduleHashMax() const
Definition TTOnlineID.h:439
size_type channelHashMax() const
Definition TTOnlineID.h:445
int m_iDetZSideFieldValue
Definition TTOnlineID.h:172
IdDictFieldImplementation m_calo_impl
Field Implementation.
Definition TTOnlineID.h:191
MultiRange m_full_module_range
Definition TTOnlineID.h:158
size_type m_module_index
Definition TTOnlineID.h:152
size_type m_moduleHashMax
Definition TTOnlineID.h:163
int init_hashes()
std::vector< HWIdentifier > m_crate_vec
Definition TTOnlineID.h:167
size_type m_calo_index
Member Data index.
Definition TTOnlineID.h:148
void submodule_Id_checks(int crate, int module, int submodule) const
HWIdentifier submoduleId(int crate, int module, int submodule) const
(1) create towerId from fields
Definition TTOnlineID.h:333
int submodule(const HWIdentifier id) const
Definition TTOnlineID.h:463
IdContext submoduleContext() const
size_type m_crate_index
Definition TTOnlineID.h:151
MultiRange m_full_channel_range
Definition TTOnlineID.h:160
size_type m_channelHashMax
Definition TTOnlineID.h:165
size_type m_detzside_index
Definition TTOnlineID.h:149
std::vector< HWIdentifier >::const_iterator crate_begin() const
(4) iterator over towerId
Definition TTOnlineID.h:249
int crate(const HWIdentifier id) const
Definition TTOnlineID.h:451
std::vector< HWIdentifier > m_submodule_vec
Definition TTOnlineID.h:169
IdContext channelContext() const
int channel(const HWIdentifier id) const
Definition TTOnlineID.h:469
IdentifierHash moduleHash(HWIdentifier crate_id) const
(3) create towerId from hash
Definition TTOnlineID.h:292
IdentifierHash crateHash(HWIdentifier crate_id) const
(3) create towerId from hash
Definition TTOnlineID.h:239
std::vector< HWIdentifier >::const_iterator module_begin() const
(4) iterator over towerId
Definition TTOnlineID.h:302
IdDictFieldImplementation m_module_impl
Definition TTOnlineID.h:194
std::vector< HWIdentifier >::const_iterator channel_end() const
Definition TTOnlineID.h:419
IdentifierHash channel_hash_binary_search(HWIdentifier channelId) const