ATLAS Offline Software
ITkStripsRodEncoder.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 ITkStripsRawDataByteStreamCnv_ITkStripsRodEncoder_h
6 #define ITkStripsRawDataByteStreamCnv_ITkStripsRodEncoder_h
7 
10 
12 #include "GaudiKernel/ToolHandle.h"
13 
14 #include <set>
15 #include <atomic>
16 
17 class SCT_ID;
18 class SCT_RDORawData;
19 class Identifier;
20 class IdentifierHash;
21 
29 class
30 ITkStripsRodEncoder : public extends<AthAlgTool, IITkStripsRodEncoder>{
31  public:
32 
33  using base_class::base_class;
34 
36  virtual ~ITkStripsRodEncoder() = default;
37 
39  virtual StatusCode initialize() override;
40 
52  virtual void fillROD(std::vector<uint32_t>& vec32Data, const uint32_t& robID,
53  const std::vector<const SCT_RDORawData*>& vecRDOs) const override;
54 
55 
56  private:
57 
70  mutable std::atomic<uint8_t> m_bcid = 0;
71  mutable std::atomic<uint8_t> m_l0tag = 0;
72 
73  void encodeData(const std::vector<uint16_t>& clusters, const uint16_t ichannel, std::vector<uint8_t>& data_encode,
74  int typ, uint8_t l0tag, uint8_t bc_count) const;
75 
84  void packFragments(std::vector<uint8_t>& vec8Words, std::vector<uint32_t>& vec32Words) const;
85 
96  std::vector<uint16_t> clusterFinder(const std::bitset<256>& inputData, const uint8_t maxCluster=63) const;
97  uint16_t clusterFinder_sub(uint64_t& hits_high64, uint64_t& hits_low64, bool isSecondRow) const;
98 
99  uint32_t set32Bits(const unsigned short int* arr8Words,
100  const unsigned short int* position,
101  const unsigned short int& numWords) const;
102 
103  bool getBit_128b(uint8_t bit_addr, uint64_t data_high64, uint64_t data_low64) const;
104  void setBit_128b(uint8_t bit_addr, bool value, uint64_t& data_high64, uint64_t& data_low64) const;
105  bool getParity_8bits(uint8_t val) const;
106 
108  int getBarrelEC(const SCT_RDORawData* rdo) const;
109 
111  int getDiskLayer(const SCT_RDORawData* rdo) const;
112 
114  int getPhiModule(const SCT_RDORawData* rdo) const;
115 
117  int getEtaModule(const SCT_RDORawData* rdo) const;
118 
120  int getStripMax(const SCT_RDORawData* rdo) const;
121 
123  int side(const SCT_RDORawData* rdo) const;
124 
126  int getTimeBin(const SCT_RDORawData* rdo) const;
127 
129  int getStrip(const SCT_RDORawData* rdo) const;
130 
132  Identifier offlineID(const SCT_RDORawData* rdo) const;
133 
135  uint32_t onlineID(const SCT_RDORawData* rdo) const;
136 
138  int getRODLink(const SCT_RDORawData* rdo) const;
139 
141  uint16_t getHeaderPhysicsPacket(int typ, uint8_t l0tag, uint8_t bc_count) const;
142 
144  uint16_t getHeaderUsingRDO(const SCT_RDORawData* rdo) const;
145 
147  uint16_t getHeaderUsingHash(const IdentifierHash& linkHash, const int& errorWord) const;
148 
150  uint16_t getTrailer(const int& errorWord) const;
151 
153  ToolHandle<IITkStripCablingTool> m_cabling{this,
154  "ITkStripCablingTool",
155  "ITkStripCablingTool",
156  "Tool to retrieve ITkStrips Cabling"};
157 
160  const SCT_ID* m_itkStripsID{nullptr};
161 
163  BooleanProperty m_condensed{this, "CondensedMode", false, "Condensed mode (true) or Expanded mode (false)"};
164 
166  std::set<Identifier> m_swapModuleID{};
167 };
168 
169 #endif // ITKSTRIP_RAWDATABYTESTREAMCNV_ITKSTRIP_RODENCODER_H
ITkStripsRodEncoder::initialize
virtual StatusCode initialize() override
Initialize.
Definition: ITkStripsRodEncoder.cxx:45
ITkStripsRodEncoder::m_cabling
ToolHandle< IITkStripCablingTool > m_cabling
Providing mappings of online and offline identifiers and also serial numbers.
Definition: ITkStripsRodEncoder.h:153
ITkStripsRodEncoder
Athena Algorithm Tool that provides conversion from ITkStrips RDO to ROD format Bytestream.
Definition: ITkStripsRodEncoder.h:30
ITkStripsRodEncoder::getDiskLayer
int getDiskLayer(const SCT_RDORawData *rdo) const
Get disk/layer info from the RDO.
Definition: ITkStripsRodEncoder.cxx:329
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:558
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
ITkStripsRodEncoder::m_swapModuleID
std::set< Identifier > m_swapModuleID
Swap Module identifier, set by SCTRawContByteStreamTool.
Definition: ITkStripsRodEncoder.h:166
ITkStripsRodEncoder::clusterFinder
std::vector< uint16_t > clusterFinder(const std::bitset< 256 > &inputData, const uint8_t maxCluster=63) const
@breif Method to set pairs of 8 bit words to a 32 bit word.
Definition: ITkStripsRodEncoder.cxx:162
athena.value
value
Definition: athena.py:124
SCT_RDORawData
Definition: SCT_RDORawData.h:24
IITkStripsRodEncoder.h
ITkStripsRodEncoder::onlineID
uint32_t onlineID(const SCT_RDORawData *rdo) const
Get the online Identifier from the RDO.
Definition: ITkStripsRodEncoder.cxx:303
ITkStripsRodEncoder::clusterFinder_sub
uint16_t clusterFinder_sub(uint64_t &hits_high64, uint64_t &hits_low64, bool isSecondRow) const
Definition: ITkStripsRodEncoder.cxx:223
ITkStripsRodEncoder::getPhiModule
int getPhiModule(const SCT_RDORawData *rdo) const
Get the phi value info from the RDO.
Definition: ITkStripsRodEncoder.cxx:336
ITkStripsRodEncoder::getHeaderUsingHash
uint16_t getHeaderUsingHash(const IdentifierHash &linkHash, const int &errorWord) const
Get the 16-bit word for a header for a link with a ByteStream error.
Definition: ITkStripsRodEncoder.cxx:384
ITkStripsRodEncoder::set32Bits
uint32_t set32Bits(const unsigned short int *arr8Words, const unsigned short int *position, const unsigned short int &numWords) const
Definition: ITkStripsRodEncoder.cxx:275
ITkStripsRodEncoder::getStripMax
int getStripMax(const SCT_RDORawData *rdo) const
Get the maxumum strip value info from the RDO.
Definition: ITkStripsRodEncoder.cxx:350
ITkStripsRodEncoder::m_condensed
BooleanProperty m_condensed
Example Boolean used to determine decoding mode, maybe unused finally.
Definition: ITkStripsRodEncoder.h:163
ITkStripsRodEncoder::getRODLink
int getRODLink(const SCT_RDORawData *rdo) const
Get the ROD link number info in the RDO header data.
Definition: ITkStripsRodEncoder.cxx:310
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:93
ITkStripsRodEncoder::encodeData
void encodeData(const std::vector< uint16_t > &clusters, const uint16_t ichannel, std::vector< uint8_t > &data_encode, int typ, uint8_t l0tag, uint8_t bc_count) const
Definition: ITkStripsRodEncoder.cxx:128
ITkStripsRodEncoder::offlineID
Identifier offlineID(const SCT_RDORawData *rdo) const
Get the offline Identifier from the RDO.
Definition: ITkStripsRodEncoder.cxx:297
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
AthAlgTool.h
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
ITkStripsRodEncoder::getParity_8bits
bool getParity_8bits(uint8_t val) const
Definition: ITkStripsRodEncoder.cxx:357
ITkStripsRodEncoder::getEtaModule
int getEtaModule(const SCT_RDORawData *rdo) const
Get the eta value info from the RDO.
Definition: ITkStripsRodEncoder.cxx:343
ITkStripsRodEncoder::getHeaderUsingRDO
uint16_t getHeaderUsingRDO(const SCT_RDORawData *rdo) const
Get the 16-bit word for a header for a hit.
Definition: ITkStripsRodEncoder.cxx:377
IITkStripCablingTool.h
ITkStripsRodEncoder::m_bcid
std::atomic< uint8_t > m_bcid
Method to encode RDO data to vector of 16 bin words.
Definition: ITkStripsRodEncoder.h:70
ITkStripsRodEncoder::setBit_128b
void setBit_128b(uint8_t bit_addr, bool value, uint64_t &data_high64, uint64_t &data_low64) const
Definition: ITkStripsRodEncoder.cxx:212
ITkStripsRodEncoder::m_l0tag
std::atomic< uint8_t > m_l0tag
Definition: ITkStripsRodEncoder.h:71
ITkStripsRodEncoder::getBit_128b
bool getBit_128b(uint8_t bit_addr, uint64_t data_high64, uint64_t data_low64) const
Definition: ITkStripsRodEncoder.cxx:205
ITkStripsRodEncoder::getTimeBin
int getTimeBin(const SCT_RDORawData *rdo) const
Get the time bin info from the RDO.
ITkStripsRodEncoder::fillROD
virtual void fillROD(std::vector< uint32_t > &vec32Data, const uint32_t &robID, const std::vector< const SCT_RDORawData * > &vecRDOs) const override
Main Convert method.
Definition: ITkStripsRodEncoder.cxx:67
ITkStripsRodEncoder::getHeaderPhysicsPacket
uint16_t getHeaderPhysicsPacket(int typ, uint8_t l0tag, uint8_t bc_count) const
Get the 16-bit word for a header with Type (PR or LP), L0Tag event and BCID.
Definition: ITkStripsRodEncoder.cxx:365
ITkStripsRodEncoder::side
int side(const SCT_RDORawData *rdo) const
Get the side info from the RDO.
Definition: ITkStripsRodEncoder.cxx:315
ITkStripsRodEncoder::getStrip
int getStrip(const SCT_RDORawData *rdo) const
Get the strip number info from the RDO.
Definition: ITkStripsRodEncoder.cxx:291
ITkStripsRodEncoder::getTrailer
uint16_t getTrailer(const int &errorWord) const
Get the 16-bit word for a trailer, with or without ByteStream errors.
Definition: ITkStripsRodEncoder.cxx:391
ITkStripsRodEncoder::getBarrelEC
int getBarrelEC(const SCT_RDORawData *rdo) const
Get the barrel/endcape info from the RDO.
Definition: ITkStripsRodEncoder.cxx:322
SCT_ID
Definition: SCT_ID.h:68
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
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
ITkStripsRodEncoder::m_itkStripsID
const SCT_ID * m_itkStripsID
Identifier helper class for the ITkStrips subdetector that creates compact Identifier objects and Ide...
Definition: ITkStripsRodEncoder.h:160
ITkStripsRodEncoder::packFragments
void packFragments(std::vector< uint8_t > &vec8Words, std::vector< uint32_t > &vec32Words) const
Method to pack vector of 8 bit words intto a vector of 32 bit words.
Definition: ITkStripsRodEncoder.cxx:249
ITkStripsRodEncoder::~ITkStripsRodEncoder
virtual ~ITkStripsRodEncoder()=default
Destructor.
Identifier
Definition: IdentifierFieldParser.cxx:14