diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h index eae2500fd741347e0c7b709067b017c07b1aaad6..ec0d26f9efa2e57c90a277f1f3c725902d80d04c 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h @@ -46,23 +46,12 @@ public: * @param uChan * @param bMasked */ - void MaskNoisyChannel(const uint32_t uFeb, const uint32_t uChan, const bool bMasked = true); + virtual void MaskNoisyChannel(const uint32_t uFeb, const uint32_t uChan, const bool bMasked = true); /** @brief Set a predefined monitor @param monitor predefined unpacking monitor */ void SetMonitor(std::shared_ptr<CbmStsUnpackMonitor> monitor) { fMonitor = monitor; } protected: - // /** @brief Add the sts-xyter-hits to the output buffer as Digis */ - // void AddHitsToDigiVect(std::vector<stsxyter::FinalHit>* vmHitsIn, std::vector<CbmStsDigi>* vDigiVectOut); - - - /** @brief Finish function for this algorithm base clase */ - void finish() - { - if (fMonitor) fMonitor->Finish(); - return; - } - /** * @brief Get the Asic Index * diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx index a1576547ad67f422aebbfc0b3aea0df6e3f4c9b6..379c30452452f4f6e8f97cde6d2ee679f0be4d3d 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx @@ -23,11 +23,4 @@ std::vector<std::pair<std::string, std::shared_ptr<FairParGenericSet>>>* return &fParContVec; } -// ------------------------------------------------------------------------- -void CbmStsUnpackAlgoBase::SetTimeOffsetNsAsic(const uint32_t uAsicIdx, const double dOffsetIn) -{ - if (uAsicIdx >= fvdTimeOffsetNsAsics.size()) { fvdTimeOffsetNsAsics.resize(uAsicIdx + 1, 0.0); } - fvdTimeOffsetNsAsics[uAsicIdx] = dOffsetIn; -} - ClassImp(CbmStsUnpackAlgoBase) diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h index 319044d2774ee3e9f54976c68cc66974f9e1d5ac..d6a8acace16ef945e00eaa4b1f77b92c5c9b0285 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h @@ -62,9 +62,6 @@ public: /** @brief Set the time offset per Asic */ void SetAsicTimeOffsetVec(std::vector<double> value) { fvdTimeOffsetNsAsics.swap(value); } - /** @brief Set the time offset per Asic */ - void SetTimeOffsetNsAsic(const uint32_t uAsicIdx, const double dOffsetIn = 0.0); - /** * @brief Get the requested parameter containers. To be defined in the derived classes! * Return the required parameter containers together with the paths to the ascii @@ -92,6 +89,13 @@ public: }; protected: + /** @brief Finish function for this algorithm base clase */ + virtual void finish() + { + if (fMonitor) fMonitor->Finish(); + return; + } + // Monitoring /** @brief Potential (online) monitor for the unpacking process */ std::shared_ptr<CbmStsUnpackMonitor> fMonitor = nullptr; diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx index 57480fd737fd8470f67de6e819bbe27edf343c30..4332a646c695ce68ecabb1fb0552d721e142f530 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx @@ -33,9 +33,7 @@ CbmStsUnpackAlgoLegacy::CbmStsUnpackAlgoLegacy() : CbmStsUnpackAlgoBase("CbmStsUnpackAlgoLegacy") , /// From the class itself - fbMonitorMode(false) - , fbDebugMonitorMode(false) - , fvbMaskedComponents() + fvbMaskedComponents() , fUnpackPar(nullptr) , fuNbFebs(0) , fDpbIdIndexMap() @@ -78,12 +76,6 @@ bool CbmStsUnpackAlgoLegacy::init() // ------------------------------------------------------------------------- void CbmStsUnpackAlgoLegacy::reset() {} -// ------------------------------------------------------------------------- -void CbmStsUnpackAlgoLegacy::finish() -{ - /// Printout Goodbye message and stats - /// Write Output histos -} // ---- initParSet(FairParGenericSet* parset) ---- Bool_t CbmStsUnpackAlgoLegacy::initParSet(FairParGenericSet* parset) @@ -342,33 +334,6 @@ void CbmStsUnpackAlgoLegacy::InitInternalStatus() } } -/* -// ------------------------------------------------------------------------- -bool CbmStsUnpackAlgoLegacy::Unpack(const fles::Timeslice& ts, const uint32_t uMsComp) -{ - fTsIndex = ts.index(); - - /// Loop over core microslices (and overlap ones if chosen) - for (uint32_t uMsIndex = 0; uMsIndex < fuNbMsLoop; uMsIndex++) { - if (false == ProcessMs(ts, uMsComp, uMsIndex)) { - LOG(error) << "Failed to process ts " << fTsIndex << " MS " << uMsIndex << " for component " << uMsComp; - return false; - } - } - /// Sort the buffers of hits - /// => Commented out as for now problems at MS borders due to offsets - // std::sort( fvmHitsInMs.begin(), fvmHitsInMs.end() ); - - /// Add the hits to the output buffer as Digis - AddHitsToDigiVect(&fvmHitsInMs, &fOutputVec); - - /// Clear the buffer of hits - fvmHitsInMs.clear(); - - return true; -} -*/ - void CbmStsUnpackAlgoLegacy::AddHitsToDigiVect(std::vector<stsxyter::FinalHit>* vmHitsIn, std::vector<CbmStsDigi>* vDigiVectOut) { @@ -419,12 +384,12 @@ bool CbmStsUnpackAlgoLegacy::unpack(const fles::Timeslice* ts, std::uint16_t uMs //Temp holder until current equipment ID is properly filled in MS const uint32_t uCurrDpbId = static_cast<uint32_t>(uCurrentEquipmentId & 0xFFFF); - if (fbMonitorMode && fbDebugMonitorMode) { + if (fMonitor && fMonitor->GetDebugMode()) { const double dMsTime = (1e-9) * static_cast<double>(fulCurrentMsIdx); - if (uMsCompIdx < fUnpackMonitor->GetMaxNbFlibLinks()) { + if (uMsCompIdx < fMonitor->GetMaxNbFlibLinks()) { if (fdStartTimeMsSz < 0) fdStartTimeMsSz = dMsTime; - fUnpackMonitor->FillMsSize(uMsCompIdx, uSize); - fUnpackMonitor->FillMsSizeTime(uMsCompIdx, dMsTime - fdStartTimeMsSz, uSize); + fMonitor->FillMsSize(uMsCompIdx, uSize); + fMonitor->FillMsSizeTime(uMsCompIdx, dMsTime - fdStartTimeMsSz, uSize); } } @@ -452,25 +417,25 @@ bool CbmStsUnpackAlgoLegacy::unpack(const fles::Timeslice* ts, std::uint16_t uMs else fuCurrDpbIdx = fDpbIdIndexMap[uCurrDpbId]; - if (fbMonitorMode || fbDebugMonitorMode) fUnpackMonitor->FillMsCntEvo(fulCurrentMsIdx); + if (fMonitor) fMonitor->FillMsCntEvo(fulCurrentMsIdx); // Check the current TS_MSb cycle and correct it if wrong RefreshTsMsbFields(uMsIdx); //Reset internal monitor variables for debugging info - if (fbMonitorMode && fbDebugMonitorMode) { fUnpackMonitor->ResetDebugInfo(); } + if (fMonitor && fMonitor->GetDebugMode()) { fMonitor->ResetDebugInfo(); } //Main processing of MS content LoopMsMessages(msContent, uSize, uMsIdx); //Output debugging info - if (fbMonitorMode) { - if (fbDebugMonitorMode) { fUnpackMonitor->PrintDebugInfo(fulCurrentMsIdx, fTsIndex, msDescriptor.flags, uSize); } + if (fMonitor) { + if (fMonitor->GetDebugMode()) { fMonitor->PrintDebugInfo(fulCurrentMsIdx, fTsIndex, msDescriptor.flags, uSize); } for (auto itHit = fOutputVec.begin(); itHit != fOutputVec.end(); ++itHit) { - fUnpackMonitor->FillDigisTimeInRun(itHit->GetTime()); //check whether this does what it should + fMonitor->FillDigisTimeInRun(itHit->GetTime()); //check whether this does what it should } - fUnpackMonitor->FillVectorSize(ts->index(), fOutputVec.size()); //check whether this does what it should - //fUnpackMonitor->DrawCanvases(); + fMonitor->FillVectorSize(ts->index(), fOutputVec.size()); //check whether this does what it should + //fMonitor->DrawCanvases(); } AddHitsToDigiVect(&fvmHitsInMs, &fOutputVec); @@ -531,7 +496,7 @@ void CbmStsUnpackAlgoLegacy::LoopMsMessages(const uint8_t* msContent, const uint /// Get message type const stsxyter::MessType typeMess = pMess[uIdx].GetMessType(); - if (fbMonitorMode && fbDebugMonitorMode) { fUnpackMonitor->ProcessDebugInfo(pMess[uIdx], fuCurrDpbIdx); } + if (fMonitor && fMonitor->GetDebugMode()) { fMonitor->ProcessDebugInfo(pMess[uIdx], fuCurrDpbIdx); } switch (typeMess) { case stsxyter::MessType::Hit: { ProcessHitInfo(pMess[uIdx]); @@ -627,19 +592,18 @@ void CbmStsUnpackAlgoLegacy::ProcessHitInfo(const stsxyter::Message& mess) fOptOutAVec->push_back( CbmErrorMessage(ECbmModuleId::kSts, dHitTimeNs, uAsicIdx, 1 << stsxyter::kusLenStatStatus, usChan)); - if (fbMonitorMode) { + if (fMonitor) { // Check Starting point of histos with time as X axis if (-1 == fdStartTime) { fdStartTime = dHitTimeNs; } - if (fbDebugMonitorMode) { - fUnpackMonitor->FillHitDebugMonitoringHistos(uAsicIdx, usChan, usRawAdc, usRawTs, mess.IsHitMissedEvts()); + if (fMonitor->GetDebugMode()) { + fMonitor->FillHitDebugMonitoringHistos(uAsicIdx, usChan, usRawAdc, usRawTs, mess.IsHitMissedEvts()); } const uint32_t uAsicInFeb = uAsicIdx % fUnpackPar->GetNbAsicsPerFeb(); const double dTimeSinceStartSec = (dHitTimeNs - fdStartTime) * 1e-9; const double dCalAdc = fvdFebAdcOffs[uFebIdx] + (usRawAdc - 1) * fvdFebAdcGain[uFebIdx]; - fUnpackMonitor->FillHitMonitoringHistos(uFebIdx, usChan, uChanInFeb, usRawAdc, dCalAdc, usRawTs, - mess.IsHitMissedEvts()); - fUnpackMonitor->FillHitEvoMonitoringHistos(uFebIdx, uAsicIdx, uAsicInFeb, uChanInFeb, dTimeSinceStartSec, - mess.IsHitMissedEvts()); + fMonitor->FillHitMonitoringHistos(uFebIdx, usChan, uChanInFeb, usRawAdc, dCalAdc, usRawTs, mess.IsHitMissedEvts()); + fMonitor->FillHitEvoMonitoringHistos(uFebIdx, uAsicIdx, uAsicInFeb, uChanInFeb, dTimeSinceStartSec, + mess.IsHitMissedEvts()); } } @@ -681,10 +645,10 @@ void CbmStsUnpackAlgoLegacy::ProcessTsMsbInfo(const stsxyter::Message& mess, uin else fvulCurrentTsMsb[fuCurrDpbIdx] = uVal; - if (fbMonitorMode && fbDebugMonitorMode) { //also if( 1 < uMessIdx )? - fUnpackMonitor->FillStsDpbRawTsMsb(fuCurrDpbIdx, fvulCurrentTsMsb[fuCurrDpbIdx]); - fUnpackMonitor->FillStsDpbRawTsMsbSx(fuCurrDpbIdx, fvulCurrentTsMsb[fuCurrDpbIdx]); - fUnpackMonitor->FillStsDpbRawTsMsbDpb(fuCurrDpbIdx, fvulCurrentTsMsb[fuCurrDpbIdx]); + if (fMonitor && fMonitor->GetDebugMode()) { //also if( 1 < uMessIdx )? + fMonitor->FillStsDpbRawTsMsb(fuCurrDpbIdx, fvulCurrentTsMsb[fuCurrDpbIdx]); + fMonitor->FillStsDpbRawTsMsbSx(fuCurrDpbIdx, fvulCurrentTsMsb[fuCurrDpbIdx]); + fMonitor->FillStsDpbRawTsMsbDpb(fuCurrDpbIdx, fvulCurrentTsMsb[fuCurrDpbIdx]); } } @@ -698,7 +662,7 @@ void CbmStsUnpackAlgoLegacy::ProcessEpochInfo(const stsxyter::Message& /*mess*/) // ------------------------------------------------------------------------- void CbmStsUnpackAlgoLegacy::ProcessStatusInfo(const stsxyter::Message& mess, uint32_t uIdx) { - if (fbMonitorMode && fbDebugMonitorMode) { + if (fMonitor && fMonitor->GetDebugMode()) { std::cout << Form("DPB %2u TS %12u MS %12u mess %5u ", fuCurrDpbIdx, fTsIndex, fulCurrentMsIdx, uIdx); mess.PrintMess(std::cout, stsxyter::MessagePrintMask::msg_print_Human); } @@ -715,9 +679,9 @@ void CbmStsUnpackAlgoLegacy::ProcessStatusInfo(const stsxyter::Message& mess, ui (fuCurrDpbIdx * fUnpackPar->GetNbCrobsPerDpb() + uCrobIdx) * fUnpackPar->GetNbAsicsPerCrob() + fUnpackPar->ElinkIdxToAsicIdx(1 == fviFebType[fuCurrDpbIdx][uCrobIdx][uFebIdx], usElinkIdx); - if (fbMonitorMode) { + if (fMonitor) { const uint16_t usStatusField = mess.GetStatusStatus(); - fUnpackMonitor->FillStsStatusMessType(uAsicIdx, usStatusField); + fMonitor->FillStsStatusMessType(uAsicIdx, usStatusField); } /// Compute the Full time stamp const int64_t ulTime = GetFullTimeStamp(0); @@ -745,11 +709,11 @@ int64_t CbmStsUnpackAlgoLegacy::GetFullTimeStamp(const uint16_t usRawTs) void CbmStsUnpackAlgoLegacy::ProcessErrorInfo(const stsxyter::Message& mess) { if (mess.IsMsErrorFlagOn()) { - if (fbMonitorMode || fbDebugMonitorMode) { - fUnpackMonitor->FillMsErrorsEvo(fulCurrentMsIdx, mess.GetMsErrorType()); + if (fMonitor) { fMonitor->FillMsErrorsEvo(fulCurrentMsIdx, mess.GetMsErrorType()); } + if (fOptOutAVec) { + fOptOutAVec->push_back( + CbmErrorMessage(ECbmModuleId::kSts, fulCurrentMsIdx, fuCurrDpbIdx, 0x20, mess.GetMsErrorType())); } - fOptOutAVec->push_back( - CbmErrorMessage(ECbmModuleId::kSts, fulCurrentMsIdx, fuCurrDpbIdx, 0x20, mess.GetMsErrorType())); } } diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h index f75b05e5507c849f86099fd064256945a316ee1f..b38f4b9a20ffe666e5182770c035a47f7493b03c 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h @@ -39,18 +39,13 @@ public: virtual bool init(); virtual void reset(); - virtual void finish(); bool InitParameters(); //virtual bool Unpack(const fles::Timeslice& ts, const uint32_t uMsComp); - inline void SetMonitorMode(bool bFlagIn = true) { fbMonitorMode = bFlagIn; } - inline void SetDebugMonitorMode(bool bFlagIn = true) { fbDebugMonitorMode = bFlagIn; } inline void SetTimeOffsetNs(double dOffsetIn = 0.0) { fdTimeOffsetNs = dOffsetIn; } - void MaskNoisyChannel(const uint32_t uFeb, const uint32_t uChan, const bool bMasked = true); - - void SetUnpackStsMonitor(CbmStsUnpackMonitor* inMonitor) { fUnpackMonitor = inMonitor; } + virtual void MaskNoisyChannel(const uint32_t uFeb, const uint32_t uChan, const bool bMasked = true); protected: /** @@ -68,13 +63,8 @@ protected: private: /// Control flags - bool fbMonitorMode; //! Switch ON the filling of a minimal set of histograms - bool fbDebugMonitorMode; //! Switch ON the filling of a additional set of histograms std::vector<bool> fvbMaskedComponents; - /// Storage of monitoring histograms - CbmStsUnpackMonitor* fUnpackMonitor = nullptr; - /// Settings from parameter file CbmMcbm2018StsPar* fUnpackPar; //! /// Readout chain dimensions and mapping diff --git a/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx b/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx index c4dea57ece3cc081257bf8cb0b2d2435c3f71efb..c862b1d93f7fa217c6f911ed48878bebb65ded04 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx @@ -47,13 +47,13 @@ void CbmStsUnpackConfig::InitUnpacker() // Set the single asics time offsets algo->SetAsicTimeOffsetVec(fvdTimeOffsetNsAsics); + // Now we have all information required to initialise the algorithm + algo->Init(); + // Mask the noisy channels set by the user for (auto chmask : fvChanMasks) algo->MaskNoisyChannel(chmask.uFeb, chmask.uChan, chmask.bMasked); - // Now we have all information required to initialise the algorithm - algo->Init(); - if (fMonitor) { fMonitor->Init(static_cast<CbmMcbm2018StsPar*>(reqparvec->at(0).second.get())); algo->SetMonitor(fMonitor); @@ -71,7 +71,8 @@ std::shared_ptr<CbmStsUnpackAlgoBase> CbmStsUnpackConfig::chooseAlgo() // Default unpacker selection // Unpacker algo from mcbm 2021 on and hopefully default for a long time. auto algo = std::make_shared<CbmStsUnpackAlgo>(); - //auto algo = std::make_shared<CbmStsUnpackAlgoLegacy>(); + //auto algo = std::make_shared<CbmStsUnpackAlgoLegacy>(); // for 2020 runs + LOG(info) << fName << "::chooseAlgo() - selected algo = " << algo->Class_Name(); return algo;