ATLAS Offline Software
Loading...
Searching...
No Matches
ITkPixelOnlineId.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4#ifndef ITkPixelOnlineId_h
5#define ITkPixelOnlineId_h
12#include <cstdint>
13#include <iosfwd>
14#include <compare>
15#include <utility>
16#include <typeindex> //provides std::hash
17
18// ***************************************
19// The 'online' ID is 64-bits, encoding
20//
21// sourceID [32b] | DetectorResourceID [32b]
22//
23// sourceID is also known as ROD/ROB ID, calculated as
24//
25// 0 [8b] | subdetector ID [8b] | FELIX host [8b] | 0b00 | FELIX card [1b] | FELIX device [1b] | 0b00 | DMA buffer number [2b]
26//
27// DetectorResourceID is ITk-specific, and constructed as
28//
29// chipID [2b] | 0b00 | chipID on/off [1b] | BCID on/off [1b] | 0b00 | module ID [24b]
30
31namespace ITkPixelCabling {
32
33 //mask for the source ID part
34 static constexpr uint64_t SOURCE_ID_MASK = 0xFFFFFFFF00000000;
35
36 //mask for the DetectorResourceID part
37 static constexpr uint64_t DRID_MASK = 0x00000000FFFFFFFF;
38
39 //mask for the moduleID part of the full DetectorResourceID and the chipID, needed in encoding
40 static constexpr uint32_t OFFLINE_DRID_MASK = 0xC0FFFFFF;
41
42 //mask for the upper 8 bits of the full DetectorResourceID, which encodes
43 //chipID [31:30], unused [29:28], chip ID on/off [27] and BCID on/off [26], unused [25]
44 static constexpr uint32_t ONLINE_DRID_MASK = 0xFF000000;
45
46 //mask for the module ID part
47 static constexpr uint32_t MODULE_DRID_MASK = 0x00FFFFFF;
48
49 //mask for the chipID part
50 static constexpr uint32_t CHIP_DRID_MASK = 0xC0000000;
51
52 //DRID to module ID
53 inline uint32_t dridToModuleID(const uint32_t& drid){ return (drid & MODULE_DRID_MASK) << 8;}
54
55 //DRID to chip ID
56 inline uint8_t dridToChipID(const uint32_t& drid){ return static_cast<uint8_t>((drid & CHIP_DRID_MASK) >> 30);}
57
58}
59
61public:
63 friend std::ostream& operator<<(std::ostream & os, const ITkPixelOnlineId & id);
65 ITkPixelOnlineId() = default;
67 ITkPixelOnlineId(const std::uint64_t onlineId);
69 ITkPixelOnlineId(const std::uint32_t rodId, const std::uint32_t detectorResourceID);
71 std::uint32_t sourceID() const;
73 std::uint32_t detectorResourceID() const;
75 std::uint32_t offlineDetectorResourceID() const;
77 std::uint32_t offlineModuleID() const;
79 explicit operator unsigned long int() const {return m_onlineId;}
81 auto operator<=>(const ITkPixelOnlineId & other) const = default;
82
83 bool isValid() const;
84
85 enum {
86 INVALID_DETECTORRESOURCE_ID=0xFFFFFFFF, INVALID_SOURCE_ID=0xFFFFFFFF, INVALID_ONLINE_ID=0xFFFFFFFFFFFFFFFF
87 };
88
89private:
91
92};
93
94namespace std {
95 template<>
96 struct hash<ITkPixelOnlineId>{
97 size_t operator()(const ITkPixelOnlineId& id) const{
98 return static_cast<size_t>((uint64_t)id);
99 }
100 };
101}
102
103
104
105#endif
ITkPixelOnlineId()=default
Default constructor produces an invalid serial number.
std::uint32_t offlineModuleID() const
Return the offline module ID part.
std::uint32_t detectorResourceID() const
Return the detectorResourceID.
friend std::ostream & operator<<(std::ostream &os, const ITkPixelOnlineId &id)
representation for debugging, messages
std::uint64_t m_onlineId
std::uint32_t offlineDetectorResourceID() const
Return the offline part of detectorResourceID.
auto operator<=>(const ITkPixelOnlineId &other) const =default
Equality etc.
std::uint32_t sourceID() const
Return the rod/rob Id.
static constexpr uint32_t MODULE_DRID_MASK
uint32_t dridToModuleID(const uint32_t &drid)
static constexpr uint32_t ONLINE_DRID_MASK
static constexpr uint64_t SOURCE_ID_MASK
static constexpr uint32_t CHIP_DRID_MASK
uint8_t dridToChipID(const uint32_t &drid)
static constexpr uint32_t OFFLINE_DRID_MASK
static constexpr uint64_t DRID_MASK
STL namespace.
size_t operator()(const ITkPixelOnlineId &id) const