CbmRoot
Loading...
Searching...
No Matches
mvd/UnpackMS.h
Go to the documentation of this file.
1/* Copyright (C) 2025 IKF Frankfurt University, Frankfurt am Main
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Ajit Kumar [committer], Bartosz Sobol, Benedikt Gutsche */
4
5#pragma once
6
7#include "CbmMvdAddress.h"
8#include "CbmMvdRawDigi.h"
9#include "MicrosliceDescriptor.hpp"
10#include "MimosisMessage.h"
11#include "Timeslice.hpp"
13
14#include <cassert>
15#include <cstddef>
16#include <cstdint>
17#include <memory>
18#include <sstream>
19#include <vector>
20
21namespace cbm::algo::mvd
22{
23
24
31 std::vector<uint32_t> fStation;
32 std::vector<uint8_t> fPixX;
33 std::vector<uint8_t> fPixY;
34 uint64_t fTimeOffset = 0.;
35 };
36
37
43 struct UnpackPar {
44 std::vector<UnpackElinkPar> fElinkParams = {};
45 };
46
47
57 uint32_t fNumErrInvalidMsSize = 0;
59 bool HasErrors()
60 {
63 return (numErrors > 0 ? true : false);
64 }
65 std::string print() const
66 {
67 std::stringstream ss;
68 ss << "errors " << fNumNonHitOrTsbMessage << " | " << fNumErrElinkOutOfRange << " | "
70 return ss.str();
71 }
80 };
81
89 };
90
97 class UnpackMS : public UnpackMSBase<CbmMvdRawDigi, UnpackMonitorData, UnpackAuxData> {
98
99 public:
101 UnpackMS(const UnpackPar& pars, const uint64_t& frameLengthNs);
102 // UnpackMS(const UnpackPar& pars, std::vector<CbmMvdRawDigi>& vec);
103
105 ~UnpackMS() override;
106
107
114 Result_t operator()(const uint8_t* msContent, const fles::MicrosliceDescriptor& msDescr,
115 const uint64_t tTimeslice) const override;
116
117 void dcd_pxl(const uint16_t& regionIn, const uint16_t& word, uint32_t& column, uint32_t& row) const;
118
119 private: // methods
128 void ProcessData(const uint32_t& data, const uint64_t& time, std::vector<CbmMvdRawDigi>& digiVec,
129 UnpackMonitorData& monitor, UnpackAuxData& aux, uint16_t& eq_idx) const;
130
131 void printMsContent(const uint8_t* msContent, size_t size) const;
132
133 private: // members
135
137 uint64_t fFrameLengthNs = 5000;
138
139 // static constexpr uint64_t fTimeStamp = mimosis::Time;
140 static constexpr uint64_t fTimeStamp = 0;
141
142 mutable unsigned int frameNumber = 0;
143 mutable uint64_t frameTime = 0;
144 mutable unsigned int region = 0;
145 mutable unsigned int headersnow = 0;
146 };
147
148} // namespace cbm::algo::mvd
static constexpr size_t size()
Definition KfSimdPseudo.h:2
std::tuple< std::vector< Digi_t >, Monitor_t, Aux_t > Result_t
uint64_t fFrameLengthNs
Frame length in ns, default value from mCBM 2025.
UnpackPar fParams
Parameter container.
void ProcessData(const uint32_t &data, const uint64_t &time, std::vector< CbmMvdRawDigi > &digiVec, UnpackMonitorData &monitor, UnpackAuxData &aux, uint16_t &eq_idx) const
Process a hit message.
void dcd_pxl(const uint16_t &regionIn, const uint16_t &word, uint32_t &column, uint32_t &row) const
static constexpr uint64_t fTimeStamp
~UnpackMS() override
Destructor.
UnpackMS(const UnpackPar &pars, const uint64_t &frameLengthNs)
Construct with parameters.
Result_t operator()(const uint8_t *msContent, const fles::MicrosliceDescriptor &msDescr, const uint64_t tTimeslice) const override
Algorithm execution.
void printMsContent(const uint8_t *msContent, size_t size) const
MVD Unpacking parameters for one eLink / ASIC.
std::vector< uint8_t > fPixX
col masking flags
std::vector< uint32_t > fStation
CbmMuchAddress for different channels.
uint64_t fTimeOffset
Time calibration parameter.
std::vector< uint8_t > fPixY
row masking flags
uint32_t fNumErrElinkOutOfRange
Elink not contained in parameters.
void add(const UnpackMonitorData &rhs)
uint32_t fNumErrTimestampOverflow
Overflow in 64 bit time stamp.
uint32_t fNumErrInvalidMsSize
Microslice size is not multiple of message size.
uint32_t fNumErrInvalidFirstMessage
First message is not TS_MSB or second is not EPOCH.
Parameters required for the MVD unpacking (specific to one component)
std::vector< UnpackElinkPar > fElinkParams
Parameters for each eLink.