ATLAS Offline Software
Loading...
Searching...
No Matches
MdtHistCoder.h
Go to the documentation of this file.
1#include <stdint.h>
2
3#include <array>
4
6public:
7 enum { region = 0, layer = 1, crate_region = 2, crate = 3, phi = 4 }; // bitshifts
8
9private:
10 static constexpr std::array<uint16_t, 5> m_bitshift{{0, 2, 4, 6, 8}}; // region, layer, crate_region, crate, phi
11 static constexpr std::array<uint16_t, 5> m_bitmask{{0x3, 0x3, 0x3, 0x3, 0xF}};
12 // region (on two bits)
13 // layer (on two bits)
14 // crate_region (on two bits)
15 // crate (on two bits)
16 // phi (on four bits)
17
18public:
19 static uint16_t encode(const uint16_t regionIn, const uint16_t layerIn, const uint16_t phiIn, const uint16_t crate_regionIn,
20 const uint16_t crateIn) {
21 uint16_t result = (regionIn & m_bitmask[region]) << m_bitshift[region] | (layerIn & m_bitmask[layer]) << m_bitshift[layer] |
22 (phiIn & m_bitmask[phi]) << m_bitshift[phi] |
23 (crate_regionIn & m_bitmask[crate_region]) << m_bitshift[crate_region] |
24 (crateIn & m_bitmask[crate]) << m_bitshift[crate];
25
26 return result;
27 }
28
29 static uint16_t decode(const uint16_t value, const uint16_t field) { return (value >> m_bitshift[field]) & m_bitmask[field]; }
30};
static uint16_t decode(const uint16_t value, const uint16_t field)
static uint16_t encode(const uint16_t regionIn, const uint16_t layerIn, const uint16_t phiIn, const uint16_t crate_regionIn, const uint16_t crateIn)
static constexpr std::array< uint16_t, 5 > m_bitmask
static constexpr std::array< uint16_t, 5 > m_bitshift