12#ifndef CbmMcbm2018UnpackerAlgoRich_H
13#define CbmMcbm2018UnpackerAlgoRich_H
65 std::stringstream stream;
67 <<
" edge:" << ((
fEdge == 1) ?
"R" :
"F");
78 uint32_t tdcTimeDataMarker = (tdcWord >> 31) & 0x1;
79 uint32_t tdcMarker = (tdcWord >> 29) & 0x7;
81 if (tdcTimeDataMarker == 0x1) {
99 outData.
fCoarse =
static_cast<uint32_t
>(tdcWord & 0x7ff);
100 outData.
fEdge =
static_cast<uint32_t
>((tdcWord >> 11) & 0x1);
101 outData.
fFine =
static_cast<uint32_t
>((tdcWord >> 12) & 0x3ff);
102 outData.
fChannel =
static_cast<uint32_t
>((tdcWord >> 22) & 0x7f);
105 static uint32_t
ProcessEpoch(uint32_t tdcWord) {
return static_cast<uint32_t
>(tdcWord & 0xfffffff); }
110 return static_cast<uint16_t
>(tdcWord & 0xff);
116 return static_cast<uint16_t
>(tdcWord & 0xffff);
121 LOG(debug4) <<
"ProcessDebug is not implemented. tdcWord:0x" << std::hex << tdcWord << std::dec;
156 std::stringstream stream;
157 stream <<
"0x" << std::setfill(
'0') << std::setw(
sizeof(uint32_t) * 2) << std::hex << word;
167 i = (i >> 24) | ((i << 8) & 0x00FF0000) | ((i >> 8) & 0x0000FF00) | (i << 24);
180 if (nextWord == 0xffffffff)
return true;
186 uint32_t i = ((uint32_t*) (
fData +
fOffset + 4 * subSubEventSize))[0];
187 i = (i >> 24) | ((i << 8) & 0x00ff0000) | ((i >> 8) & 0x0000ff00) | (i << 24);
188 if (i == 0x00015555)
return true;
199 virtual Bool_t
Init();
201 virtual void Reset();
218 virtual Bool_t
ProcessTs(
const fles::Timeslice& ts);
220 virtual Bool_t
ProcessTs(
const fles::Timeslice& ts,
size_t component);
222 virtual Bool_t
ProcessMs(
const fles::Timeslice& ts,
size_t uMsCompIdx,
size_t uMsIdx);
224 Bool_t
DebugMs(
const fles::Timeslice& ts,
size_t uMsCompIdx,
size_t uMsIdx);
234 Int_t
Debug(
const uint8_t* ptr,
const size_t size);
258 double CalculateTime(uint32_t epoch, uint32_t coarse, uint32_t fine);
263 uint32_t subSubEventId, std::vector<double>& raisingTime);
268 void WriteOutputDigi(Int_t fpgaID, Int_t channel, Double_t time, Double_t tot, uint64_t MSidx);
284 return ((fpgaID << 16) | (ch & 0x00FF));
334 TH1D*
GetTotH1(uint32_t fpgaID, uint32_t channel);
348 std::map<uint32_t, std::map<Int_t, TH1D*>>
fhTotMap;
CbmMcbm2018RichTdcWordType
static constexpr size_t size()
bool IsLastSubSubEvent(uint32_t subSubEventSize)
std::string GetWordAsHexString(uint32_t word)
void SetData(const uint8_t *data, size_t size)
const uint8_t * GetData()
static uint16_t ProcessHeader(uint32_t tdcWord)
static CbmMcbm2018RichTdcWordType GetTdcWordType(uint32_t tdcWord)
static uint32_t ProcessEpoch(uint32_t tdcWord)
static void ProcessDebug(uint32_t tdcWord)
static void ProcessTimeData(uint32_t tdcWord, CbmMcbm2018RichTdcTimeData &outData)
static uint16_t ProcessTrailer(uint32_t tdcWord)
ClassDef(CbmMcbm2018UnpackerAlgoRich, 1)
TH1D * GetTotH1(uint32_t fpgaID, uint32_t channel)
virtual Bool_t InitContainers()
Bool_t CreateHistograms()
void SetMonitorMode(Bool_t bFlagIn=kTRUE)
std::map< uint16_t, uint16_t > fMapFEE
void DoTotCorr(Bool_t bDoToTCorr=kTRUE)
std::string GetLogHeader(CbmMcbm2018RichMicrosliceReader &reader)
Bool_t fbDebugMonitorMode
void AddMsComponentToList(size_t component, UShort_t usDetectorId)
Bool_t fbMonitorMode
Control flags.
void ProcessMbs(CbmMcbm2018RichMicrosliceReader &reader, bool isPrev)
Bool_t DebugMs(const fles::Timeslice &ts, size_t uMsCompIdx, size_t uMsIdx)
std::map< uint32_t, double > fPrevLastCh0ReTime
virtual Bool_t ReInitContainers()
std::map< uint32_t, std::map< Int_t, TH1D * > > fhTotMap
virtual ~CbmMcbm2018UnpackerAlgoRich()
std::map< uint32_t, TH2D * > fhTot2dMap
void ProcessTrbPacket(CbmMcbm2018RichMicrosliceReader &reader)
TH2D * GetTotH2(uint32_t fpgaID)
virtual TList * GetParList()
void WriteOutputDigi(Int_t fpgaID, Int_t channel, Double_t time, Double_t tot, uint64_t MSidx)
void ProcessMicroslice(size_t const size, uint8_t const *const ptr)
CbmMcbm2018UnpackerAlgoRich()
double CalculateTime(uint32_t epoch, uint32_t coarse, uint32_t fine)
void ErrorMsg(uint16_t errbits, CbmMcbm2018RichErrorType type, uint16_t tdcId=0)
CbmMcbm2018RichPar * fUnpackPar
virtual Bool_t ProcessMs(const fles::Timeslice &ts, size_t uMsCompIdx, size_t uMsIdx)
void ProcessHubBlock(CbmMcbm2018RichMicrosliceReader &reader)
void SetRawDataMode(Bool_t bDebug=kFALSE)
std::map< uint32_t, double > fLastCh0ReTime
void ProcessTimeDataWord(CbmMcbm2018RichMicrosliceReader &reader, int iTdc, uint32_t epoch, uint32_t tdcWord, uint32_t subSubEventId, std::vector< double > &raisingTime)
virtual Bool_t ProcessTs(const fles::Timeslice &ts)
std::vector< TCanvas * > fcTot2d
void ProcessCtsSubSubEvent(CbmMcbm2018RichMicrosliceReader &reader, uint32_t subSubEventSize, uint32_t subSubEventId)
void SetTimeOffsetNs(Double_t dOffsetIn=0.0)
Int_t GetPixelUID(Int_t fpgaID, Int_t ch) const
void ProcessSubSubEvent(CbmMcbm2018RichMicrosliceReader &reader, int nofTimeWords, uint32_t subSubEventId)