23 const uint64_t tTimeslice)
const
35 auto msSize = msDescr.size;
37 std::get<1>(result).fNumErrInvalidMsSize++;
41 if (numMessages < 2) {
42 std::get<1>(result).fNumErrInvalidMsSize++;
49 const uint32_t maxDigis = numMessages - 2;
50 std::get<0>(result).reserve(maxDigis);
54 std::get<1>(result).fNumErrInvalidFirstMessage++;
59 const uint64_t msStartEpoch =
61 if (message[0].getGdpbEpEpochNb() != msStartEpoch) {
62 std::get<1>(result).fNumErrInvalidStartEpoch++;
68 if (!message[numMessages - 1].isEndOfMs()) {
69 std::get<1>(result).fNumErrInvalidLastMessage++;
75 for (uint32_t messageNr = 0; messageNr < numMessages; messageNr++) {
78 switch (message[messageNr].getMessageType()) {
81 ProcessHitMessage(message[messageNr], std::get<0>(result), std::get<1>(result), time);
90 std::get<1>(result).fNumErrInvalidAsicEpochs++;
96 std::get<1>(result).fNumNonHitOrTsbMessage++;
100 std::get<1>(result).fNumNonHitOrTsbMessage++;
104 std::get<1>(result).fNumNonHitOrTsbMessage++;
128 const uint32_t channelUId = (elinkPar.fChannelUId)[channel];
130 double messageTime = message.
getMsgFullTimeD(time.currentEpochInTs) - elinkPar.fTimeOffset;
134 digiVec.emplace_back(channelUId, messageTime, charge);
std::tuple< std::vector< Digi_t >, Monitor_t, Aux_t > Result_t
Result_t operator()(const uint8_t *msContent, const fles::MicrosliceDescriptor &msDescr, const uint64_t tTimeslice) const override
Algorithm execution.
void ProcessEpochMessage(const critof001::Message &message, TimeSpec &time) const
Process an epoch message.
UnpackPar fParams
Parameter container.
~UnpackMS() override
Destructor.
UnpackMS(const UnpackPar &pars)
Default constructor.
void ProcessHitMessage(const critof001::Message &message, std::vector< CbmTofDigi > &digiVec, UnpackMonitorData &monitor, TimeSpec &time) const
Process a hit message.
uint16_t getGdpbHit32Tot() const
uint16_t getGet4Idx() const
uint16_t getGdpbHitChanId() const
uint32_t getGdpbEpEpochNb() const
double getMsgFullTimeD(uint64_t epoch) const
Returns expanded and adjusted time of message in double (in ns)
const uint64_t kulEpochCycleEp
const uint32_t kuChipIdMergedEpoch
u64 currentTsTime
Unix time of timeslice in units of epoch length.
u32 currentEpochInTs
Current epoch number relative to timeslice start epoch.
uint32_t fNumErrElinkOutOfRange
Elink not contained in parameters.
Parameters required for the STS unpacking (specific to one component)
std::vector< UnpackElinkPar > fElinkParams
Parameters for each eLink.