Skip to content
Snippets Groups Projects
Commit 4f140bb2 authored by Dominik Smith's avatar Dominik Smith
Browse files

UnpackTrd2d: Updated monitoring information.

parent e6f491b3
No related branches found
No related tags found
1 merge request!1156TRD2D Unpacker in cbm::algo.
Pipeline #22465 passed
......@@ -32,6 +32,9 @@ namespace cbm::algo
// --- Output data
resultType result = {};
// Reset monitoring data
fMonitor = UnpackTrd2dMonitorData();
// define time wrt start of time slice in TRD/FASP clks [80 MHz]. Contains:
// - relative offset of the MS wrt the TS
// - FASP epoch offset for current CROB
......@@ -74,16 +77,17 @@ namespace cbm::algo
lFaspOld = fasp_id;
}
if (data & 0x1) {
LOG(warn) << "UnpackTrd2d - Data corrupted : detect end bit set.";
fMonitor.fNumErrEndBitSet++;
continue;
}
if (data & 0x2000) {
LOG(debug) << "UnpackTrd2d - Self-triggered data.";
fMonitor.fNumSelfTriggeredData++;
data &= 0x1fff;
}
vMess.emplace_back(ch_id, kData, slice, data >> 1, crob_id, lFaspOld);
}
result.first = FinalizeComponent();
result.first = FinalizeComponent(); //TO DO: Original (non-algo) version calls this after MS loop!!
result.second = fMonitor;
return result;
}
......@@ -181,7 +185,7 @@ namespace cbm::algo
// clear digi buffer wrt the digi which was forwarded to higher structures
fDigiBuffer[ipad].clear();
if (nIncomplete > 2) {
LOG(warn) << "FinalizeComponent() skip " << nIncomplete << " incomplete digi at pad " << ipad << ".\n";
fMonitor.fNumIncompleteDigis++; //TO DO: This must be moved if finalization is done after MS loop
}
}
return outputDigis;
......
......@@ -85,22 +85,20 @@ namespace cbm::algo
** @brief Monitoring data for TRD unpacking
**/
struct UnpackTrd2dMonitorData {
uint32_t fNumNonHitOrTsbMessage = 0;
uint32_t fNumErrElinkOutOfRange = 0; ///< Elink not contained in parameters
uint32_t fNumErrInvalidFirstMessage = 0; ///< First message is not TS_MSB or second is not EPOCH
uint32_t fNumErrInvalidMsSize = 0; ///< Microslice size is not multiple of message size
uint32_t fNumErrTimestampOverflow = 0; ///< Overflow in 64 bit time stampa
uint32_t fNumSelfTriggeredData = 0; ///< word fulfills data & 0x2000
uint32_t fNumIncompleteDigis = 0; ///< incomplete digis left in pads after finalization
uint32_t fNumErrEndBitSet = 0; ///< Corrupted data with end bit set
bool HasErrors()
{
uint32_t numErrors = fNumNonHitOrTsbMessage + fNumErrElinkOutOfRange + fNumErrInvalidFirstMessage
+ fNumErrInvalidMsSize + fNumErrTimestampOverflow;
uint32_t numErrors = fNumErrEndBitSet;
return (numErrors > 0 ? true : false);
}
std::string print()
{
std::stringstream ss;
ss << "errors " << fNumNonHitOrTsbMessage << " | " << fNumErrElinkOutOfRange << " | "
<< fNumErrInvalidFirstMessage << " | " << fNumErrInvalidMsSize << " | " << fNumErrTimestampOverflow << " | ";
ss << "stats " << fNumSelfTriggeredData << " | " << fNumIncompleteDigis << " | errors " << fNumErrEndBitSet
<< " | ";
return ss.str();
}
};
......@@ -141,6 +139,8 @@ namespace cbm::algo
private: // members
UnpackTrd2dPar fParams = {}; ///< Parameter container
UnpackTrd2dMonitorData fMonitor; ///< Container for monitoring data
/**
** @brief Time offset for the system
** @todo This should be module and channel dependent and included into the asic parameters
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment