ATLAS Offline Software
Loading...
Searching...
No Matches
TileHWID.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/***************************************************************************
6 Tile Calorimeter detector description package
7 -----------------------------------------
8 ***************************************************************************/
9
10//<doc><file> $Id: TileHWID.h,v 1.11 2008-11-03 15:25:00 solodkov Exp $
11//<version> $Name: not supported by cvs2svn $
12
13// TileHWID.h
14//
15// Atlas detector Identifier class for Tile Calorimeter (hardware identifier)
16//
17
18#ifndef TILEIDENTIFIER_TILEHWID_H
19#define TILEIDENTIFIER_TILEHWID_H
20
24
47
48
49class TileHWID : public AtlasDetectorID {
50
51public:
52
53 typedef Identifier::size_type size_type ;
54
58 TileHWID();
59
63 virtual ~TileHWID();
64
67 enum ROSID { BEAM_ROS = 0,
74
78 HWIdentifier tilehw_id ( ) const;
82 HWIdentifier ros_id ( int ros) const;
86 HWIdentifier drawer_id ( int frag ) const;
90 HWIdentifier drawer_id ( int ros, int drawer ) const;
95 int channel ) const;
99 HWIdentifier adc_id ( int ros, int drawer,
100 int channel, int adc ) const;
101
105 HWIdentifier drawer_id ( const HWIdentifier& id ) const;
109 HWIdentifier channel_id ( const HWIdentifier& id ) const;
114 int channel ) const;
118 HWIdentifier adc_id ( const HWIdentifier& id,
119 int channel, int adc ) const;
123 HWIdentifier adc_id ( const HWIdentifier& id,
124 int adc ) const;
125
130 inline HWIdentifier channel_id ( IdentifierHash hash_id ) const
131 { return m_channel_vec[hash_id]; }
132
138 int adc ) const
139 { return adc_id(m_channel_vec[hash_id],adc); }
140
141
145 bool is_tilehw ( const HWIdentifier& id ) const;
149 bool is_low_gain ( const HWIdentifier& id ) const;
153 bool is_high_gain ( const HWIdentifier& id ) const;
154
155
159 inline int system ( const HWIdentifier & id ) const { return m_system_impl.unpack(id); }
163 inline int section ( const HWIdentifier & id ) const { return m_section_impl.unpack(id); }
167 inline int ros ( const HWIdentifier & id ) const { return m_ros_impl.unpack(id); }
171 inline int drawer ( const HWIdentifier & id ) const { return m_drawer_impl.unpack(id); }
175 inline int drawerIdx( const HWIdentifier & id ) const {
176 return std::max(0,(int)(std::upper_bound(m_drawer_vec.begin(),m_drawer_vec.end(),id) - m_drawer_vec.begin())-1);
177 }
178
181 inline int frag ( const HWIdentifier & id ) const { return ((ros(id) << 8) | drawer(id)); }
185 inline int frag ( int ros, int drawer ) const { return ((ros << 8) | drawer); }
189 inline int channel ( const HWIdentifier & id ) const { return m_channel_impl.unpack(id); }
193 inline int adc ( const HWIdentifier & id ) const { return m_adc_impl.unpack(id); }
194
200
204 std::string to_string ( const HWIdentifier & id, int level=0 ) const;
205
207
211 IdContext ros_context () const;
215 IdContext drawer_context () const;
219 IdContext channel_context () const;
223 IdContext adc_context () const;
224
228 virtual int get_id (const IdentifierHash& hash_id, HWIdentifier& id, const IdContext* context = 0 ) const;
232 virtual int get_id (const IdentifierHash& hash_id, Identifier& id, const IdContext* context = 0 ) const
233 { HWIdentifier hwid(id); int stat=get_id(hash_id, hwid, context); id = hwid.get_compact(); return stat; }
234
238 virtual IdentifierHash get_hash (const HWIdentifier& id) const;
239
243 virtual int get_hash (const HWIdentifier& id, IdentifierHash& hash_id, const IdContext* context = 0 ) const;
247 virtual int get_hash (const Identifier& id, IdentifierHash& hash_id, const IdContext* context = 0 ) const
248 { HWIdentifier hwid(id); return get_hash(hwid, hash_id, context); }
249
253 virtual IdentifierHash get_channel_hash (const HWIdentifier& id) const;
254
255
259 virtual int initialize_from_dictionary (const IdDictMgr& dict_mgr);
260
264 inline size_type ros_hash_max () const { return m_ros_hash_max; }
268 inline size_type drawer_hash_max () const { return m_drawer_hash_max; }
276 inline size_type adc_hash_max () const { return m_adc_hash_max; }
277
281 std::vector<HWIdentifier>::const_iterator ros_begin () const { return(m_ros_vec.begin()); }
285 std::vector<HWIdentifier>::const_iterator ros_end () const { return(m_ros_vec.end()); }
286
290 std::vector<HWIdentifier>::const_iterator drawer_begin () const { return(m_drawer_vec.begin()); }
294 std::vector<HWIdentifier>::const_iterator drawer_end () const { return(m_drawer_vec.end()); }
295
299 std::vector<HWIdentifier>::const_iterator channel_begin () const { return(m_channel_vec.begin()); }
303 std::vector<HWIdentifier>::const_iterator channel_end () const { return(m_channel_vec.end()); }
304
308 std::vector<HWIdentifier>::const_iterator adc_begin () const { return(m_adc_vec.begin()); }
312 std::vector<HWIdentifier>::const_iterator adc_end () const { return(m_adc_vec.end()); }
313
314 enum {NOT_VALID_HASH = 64000};
315
316private:
317
321 int get_expanded_id (const HWIdentifier& id, ExpandedIdentifier& exp_id, const IdContext* context) const;
322
326 int get_field ( const HWIdentifier & id,
327 size_type index ) const;
328
329 int initLevelsFromDict();
330
331 int init_hashes();
332
336 bool adc_id (const HWIdentifier& channel_id, int adc, HWIdentifier& adc_id );
337 int fill_vec (std::set<HWIdentifier> & ids,
338 unsigned int hash_max, std::vector<HWIdentifier> & vec);
339
347
349
356
365 std::vector<HWIdentifier> m_ros_vec;
366 std::vector<HWIdentifier> m_drawer_vec;
367 std::vector<HWIdentifier> m_channel_vec;
368 std::vector<HWIdentifier> m_adc_vec;
369
371
372};
373
374//using the macro below we can assign an identifier (and a version)
375//This is required and checked at compile time when you try to record/retrieve
376CLASS_DEF( TileHWID , 2902 , 1 )
377
378#endif // TILEIDENTIFIER_TILEHWID_H
379
std::vector< size_t > vec
#define CLASS_DEF(NAME, CID, VERSION)
associate a clid and a version to a type eg
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.
value_type get_compact() const
Get the compact id.
A MultiRange combines several Ranges.
Definition MultiRange.h:17
Helper class for TileCal online (hardware) identifiers.
Definition TileHWID.h:49
IdContext drawer_context() const
idContext for drawers
Definition TileHWID.cxx:471
int frag(const HWIdentifier &id) const
extract frag field from HW identifier
Definition TileHWID.h:181
int channel(const HWIdentifier &id) const
extract channel field from HW identifier
Definition TileHWID.h:189
size_type adc_hash_max() const
ADC hash table max size.
Definition TileHWID.h:276
HWIdentifier adc_id(IdentifierHash hash_id, int adc) const
create adc ID from channel hash ID
Definition TileHWID.h:137
std::vector< HWIdentifier > m_ros_vec
Definition TileHWID.h:365
IdContext ros_context() const
access to IdContext's which define which levels of fields are contained in the id
Definition TileHWID.cxx:464
@ BARREL_POS
Definition TileHWID.h:68
@ EXTBAR_NEG
Definition TileHWID.h:71
@ BEAM_ROS
Definition TileHWID.h:67
@ BARREL_NEG
Definition TileHWID.h:69
@ EXTBAR_POS
Definition TileHWID.h:70
virtual IdentifierHash get_hash(const HWIdentifier &id) const
create hash id from compact ADC id without error checking
Definition TileHWID.cxx:540
size_type m_SYSTEM_INDEX
Definition TileHWID.h:341
std::vector< HWIdentifier >::const_iterator drawer_end() const
end iterator for drawer Identifiers
Definition TileHWID.h:294
size_type m_SECTION_INDEX
Definition TileHWID.h:342
HWIdentifier channel_id(IdentifierHash hash_id) const
create channel ID from channel hash ID
Definition TileHWID.h:130
bool is_high_gain(const HWIdentifier &id) const
Test ID for high gain.
Definition TileHWID.cxx:107
virtual int get_hash(const Identifier &id, IdentifierHash &hash_id, const IdContext *context=0) const
create hash id from compact id (return == 0 for OK)
Definition TileHWID.h:247
size_type m_ADC_INDEX
Definition TileHWID.h:346
std::vector< HWIdentifier >::const_iterator adc_end() const
end iterator for ADC Identifiers
Definition TileHWID.h:312
std::vector< HWIdentifier >::const_iterator ros_end() const
end iterator for ROS Identifiers
Definition TileHWID.h:285
MultiRange m_full_adc_range
Definition TileHWID.h:360
@ HIGHGAIN
Definition TileHWID.h:73
@ LOWGAIN
Definition TileHWID.h:72
size_type m_ROS_INDEX
Definition TileHWID.h:343
size_type m_tile_region_index
Definition TileHWID.h:340
@ NOT_VALID_HASH
Definition TileHWID.h:314
std::vector< HWIdentifier > m_drawer_vec
Definition TileHWID.h:366
std::vector< HWIdentifier > m_channel_vec
Definition TileHWID.h:367
std::vector< HWIdentifier >::const_iterator ros_begin() const
begin iterator for ROS Identifiers
Definition TileHWID.h:281
size_type m_channel_hash_max
Definition TileHWID.h:363
int adc(const HWIdentifier &id) const
extract adc field from HW identifier
Definition TileHWID.h:193
size_type ros_hash_max() const
ROS hash table max size.
Definition TileHWID.h:264
virtual int get_id(const IdentifierHash &hash_id, Identifier &id, const IdContext *context=0) const
create compact ID from hash id (return == 0 for OK)
Definition TileHWID.h:232
int drawer(const HWIdentifier &id) const
extract drawer field from HW identifier
Definition TileHWID.h:171
int initLevelsFromDict()
Definition TileHWID.cxx:690
std::vector< HWIdentifier >::const_iterator channel_end() const
end iterator for channel Identifiers
Definition TileHWID.h:303
int system(const HWIdentifier &id) const
extract system field from HW identifier
Definition TileHWID.h:159
virtual int get_id(const IdentifierHash &hash_id, HWIdentifier &id, const IdContext *context=0) const
create compact HW ID from hash id (return == 0 for OK)
Definition TileHWID.cxx:491
bool is_low_gain(const HWIdentifier &id) const
Test ID for low gain.
Definition TileHWID.cxx:98
IdContext channel_context() const
idContext for channels
Definition TileHWID.cxx:478
IdDictFieldImplementation m_system_impl
Definition TileHWID.h:350
std::vector< HWIdentifier > m_adc_vec
Definition TileHWID.h:368
MultiRange m_full_ros_range
Definition TileHWID.h:357
int drawerIdx(const HWIdentifier &id) const
construct drawer index from HW identifier
Definition TileHWID.h:175
int get_field(const HWIdentifier &id, size_type index) const
unpack one field from Identifier
Definition TileHWID.cxx:75
virtual ~TileHWID()
Default destructor.
Definition TileHWID.cxx:42
size_type m_drawer_hash_max
Definition TileHWID.h:362
IdDictFieldImplementation m_drawer_impl
Definition TileHWID.h:353
HWIdentifier drawer_id(int frag) const
ROS HWIdentifer.
Definition TileHWID.cxx:187
std::vector< HWIdentifier >::const_iterator adc_begin() const
begin iterator for ADC Identifiers
Definition TileHWID.h:308
size_type m_DRAWER_INDEX
Definition TileHWID.h:344
size_type m_CHANNEL_INDEX
Definition TileHWID.h:345
int section(const HWIdentifier &id) const
extract section field from HW identifier
Definition TileHWID.h:163
int frag(int ros, int drawer) const
make frag from ROS and drawer
Definition TileHWID.h:185
int init_hashes()
Definition TileHWID.cxx:794
int fill_vec(std::set< HWIdentifier > &ids, unsigned int hash_max, std::vector< HWIdentifier > &vec)
Definition TileHWID.cxx:890
IdDictFieldImplementation m_adc_impl
Definition TileHWID.h:355
TileHWID()
Default constructor.
Definition TileHWID.cxx:25
const IdDictDictionary * m_dict
Definition TileHWID.h:348
MultiRange m_full_channel_range
Definition TileHWID.h:359
virtual int initialize_from_dictionary(const IdDictMgr &dict_mgr)
initialization from the identifier dictionary
Definition TileHWID.cxx:597
size_type m_adc_hash_max
Definition TileHWID.h:364
int get_expanded_id(const HWIdentifier &id, ExpandedIdentifier &exp_id, const IdContext *context) const
create expanded Identifier from Identifier (return == 0 for OK)
Definition TileHWID.cxx:669
HWIdentifier channel_id(int ros, int drawer, int channel) const
channel HWIdentifer
Definition TileHWID.cxx:199
IdDictFieldImplementation m_ros_impl
Definition TileHWID.h:352
std::string to_string(const HWIdentifier &id, int level=0) const
extract all fields from HW identifier HWIdentifier get_all_fields ( const HWIdentifier & id,...
Definition TileHWID.cxx:50
MultiRange m_full_drawer_range
Definition TileHWID.h:358
IdDictFieldImplementation m_section_impl
Definition TileHWID.h:351
HWIdentifier adc_id(int ros, int drawer, int channel, int adc) const
adc HWIdentifer
Definition TileHWID.cxx:229
std::vector< HWIdentifier >::const_iterator channel_begin() const
begin iterator for channel Identifiers
Definition TileHWID.h:299
SECTION
Identifier numbering.
Definition TileHWID.h:66
@ TILE_ONLINE
Definition TileHWID.h:66
HWIdentifier ros_id(int ros) const
ROS HWIdentifer.
Definition TileHWID.cxx:130
IdContext adc_context() const
idContext for ADCs
Definition TileHWID.cxx:485
int ros(const HWIdentifier &id) const
extract ros field from HW identifier
Definition TileHWID.h:167
std::vector< HWIdentifier >::const_iterator drawer_begin() const
begin iterator for drawer Identifiers
Definition TileHWID.h:290
size_type m_ros_hash_max
Definition TileHWID.h:361
virtual IdentifierHash get_channel_hash(const HWIdentifier &id) const
create hash id from compact Channel id
Definition TileHWID.cxx:586
size_type channel_hash_max() const
channel hash table max size
Definition TileHWID.h:272
IdDictFieldImplementation m_channel_impl
Definition TileHWID.h:354
HWIdentifier m_base_tile_ros
Definition TileHWID.h:370
Identifier::size_type size_type
Definition TileHWID.h:53
size_type drawer_hash_max() const
drawer hash table max size
Definition TileHWID.h:268
bool is_tilehw(const HWIdentifier &id) const
Test ID for Tile online ID.
Definition TileHWID.cxx:89
HWIdentifier tilehw_id() const
online identifer for whole Tile
Definition TileHWID.cxx:119
Definition index.py:1