7#include "eformat/ROBFragment.h"
9#define ENABLE_TIMING = true;
11#define SCOPED_TIMER(name, msg) ITkPixelDecoding::ScopedTimer timer_##__LINE__(name, msg)
13#define SCOPED_TIMER(name, msg)
17using namespace itksw::pix::endec;
37 for (
size_t hash = 0; hash <
m_idHelper->wafer_hash_max(); hash++){
44 return StatusCode::SUCCESS;
57 std::unique_ptr<PixelRDO_Container> rdoCont = std::make_unique<PixelRDO_Container>(
m_idHelper->wafer_hash_max());
66 fmt.options.en_chip_id =
true;
67 fmt.options.en_eos =
true;
69 DecCore<PixelCallbacks::RDOCallback> core(
fmt, cb);
73 std::vector<const eformat::ROBFragment<const uint32_t*>*> ROBs;
81 std::vector<uint64_t> payload64;
82 std::array<std::vector<uint64_t>, 4> split_streams;
84 ATH_MSG_DEBUG(
"***** ITkPixelDecodingRDOAlg::execute --------- ROBs size" << ROBs.size());
85 for (
const auto& ROB : ROBs){
86 const uint32_t* payload = ROB->rod_data();
87 uint32_t
length = ROB->rod_ndata();
95 payload64.resize(
length / 2);
96 for (uint32_t word = 0; word <
length; word += 2){
97 payload64[word / 2] = ((uint64_t)(payload[word]) << 32) | payload[word + 1];
114 core.decode(payload64);
118 for (
auto &v : split_streams) v.clear();
119 for (
const uint64_t& word64: payload64) split_streams[(word64 >> 61) & 0b11].push_back(word64);
120 for (uint8_t chipID = 0; chipID < 4; chipID++){
121 if (!split_streams[chipID].
empty()){
123 core.decode(split_streams[chipID]);
133 return StatusCode::SUCCESS;
137 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define SCOPED_TIMER(name, msg)
Handle class for reading from StoreGate.
static const Attributes_t empty
const ServiceHandle< StoreGateSvc > & detStore() const
An algorithm that can be simultaneously executed in multiple threads.
virtual StatusCode initialize() override
ServiceHandle< IROBDataProviderSvc > m_robDataProviderSvc
std::vector< uint32_t > m_sourceIDs
virtual StatusCode finalize() override
virtual StatusCode execute(const EventContext &ctx) const override
SG::WriteHandleKey< PixelRDO_Container > m_pixelRDOKey
const PixelID * m_idHelper
SG::ReadCondHandleKey< ITkPixelCablingData > m_pixelCablingKey
ITkPixelDecodingAlg(const std::string &name, ISvcLocator *pSvcLocator)
void setChipID(const uint8_t &chipID)
void setOfflineID(const uint32_t &offlineID)
void setTransformType(const ITkPixelCabling::TransformType &transform)
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.