diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx index f9992f794ad3cebcad198198b654af452e2b892b..917c66b4aeb7fab8b4d5bb29ba40e5eb3ddc93bd 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx @@ -48,22 +48,6 @@ uint64_t CbmStsUnpackAlgo::getFullTimeStamp(const uint16_t usRawTs) return ulTime; } - -// ---- GetParContainerRequest ---- -std::vector<std::pair<std::string, std::shared_ptr<FairParGenericSet>>>* - CbmStsUnpackAlgo::GetParContainerRequest(std::string /*geoTag*/, std::uint32_t /*runId*/) -{ - // Basepath for default Trd parameter sets (those connected to a geoTag) - std::string basepath = Form("%s", fParFilesBasePath.data()); - std::string temppath = ""; - - // // Get parameter container - temppath = basepath + "mStsPar.par"; - fParContVec.emplace_back(std::make_pair(temppath, std::make_shared<CbmMcbm2018StsPar>())); - - return &fParContVec; -} - // ---- init Bool_t CbmStsUnpackAlgo::init() { return kTRUE; } diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h index b59acc51392576084ca67cea889dba49a1054aea..eae2500fd741347e0c7b709067b017c07b1aaad6 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h @@ -39,18 +39,6 @@ public: /** @brief Assignment operator - not implemented **/ CbmStsUnpackAlgo& operator=(const CbmStsUnpackAlgo&) = delete; - /** - * @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 - * files to. - * - * @param[in] std::string geoTag as used in CbmSetup - * @param[in] std::uint32_t runId for runwise defined parameters - * @return fParContVec - */ - virtual std::vector<std::pair<std::string, std::shared_ptr<FairParGenericSet>>>* - GetParContainerRequest(std::string geoTag, std::uint32_t runId); - /** * @brief Mask a Noisy Channel * @@ -60,12 +48,6 @@ public: */ void MaskNoisyChannel(const uint32_t uFeb, const uint32_t uChan, const bool bMasked = true); - /** @brief Set the minimum adc cut value @param[in] value */ - void SetMinAdcCut(uint32_t value) { fdAdcCut = value; } - - /** @brief Set the minimum adc cut value @param[in] value */ - void SetAsicTimeOffsetVec(std::vector<double> value) { fvdTimeOffsetNsAsics.swap(value); } - /** @brief Set a predefined monitor @param monitor predefined unpacking monitor */ void SetMonitor(std::shared_ptr<CbmStsUnpackMonitor> monitor) { fMonitor = monitor; } @@ -241,12 +223,6 @@ protected: /** @brief Vector used for the translation between eLink index and Asic index first is feb type A second is feb type b*/ std::vector<std::pair<uint32_t, uint32_t>> fElinkIdxToAsicIdxVec = {}; - /** @brief Minimum adc cut to store a hit */ - uint32_t fdAdcCut = 0; - - /** @brief Time offsets per Asic??? @todo expert confirmation required */ - std::vector<double> fvdTimeOffsetNsAsics = {}; - /** @brief flag if channel mask is to be used or not. Set automatically via MaskNoisyChannels */ bool fbUseChannelMask = false; diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx index a4af6daa95486c2cee81273db0019ea92aae3eaa..a1576547ad67f422aebbfc0b3aea0df6e3f4c9b6 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx @@ -8,5 +8,26 @@ CbmStsUnpackAlgoBase::CbmStsUnpackAlgoBase(std::string name) : CbmRecoUnpackAlgo CbmStsUnpackAlgoBase::~CbmStsUnpackAlgoBase() {} +// ---- GetParContainerRequest ---- +std::vector<std::pair<std::string, std::shared_ptr<FairParGenericSet>>>* + CbmStsUnpackAlgoBase::GetParContainerRequest(std::string /*geoTag*/, std::uint32_t /*runId*/) +{ + // Basepath for default Trd parameter sets (those connected to a geoTag) + std::string basepath = Form("%s", fParFilesBasePath.data()); + std::string temppath = ""; + + // // Get parameter container + temppath = basepath + "mStsPar.par"; + fParContVec.emplace_back(std::make_pair(temppath, std::make_shared<CbmMcbm2018StsPar>())); + + 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 32634cff69e7f94eb308d1c93a45783eb8f0895a..319044d2774ee3e9f54976c68cc66974f9e1d5ac 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h @@ -56,12 +56,51 @@ public: /** @brief Set a predefined monitor @param monitor predefined unpacking monitor */ void SetMonitor(std::shared_ptr<CbmStsUnpackMonitor> monitor) { fMonitor = monitor; } + /** @brief Set the minimum adc cut value @param[in] value */ + void SetMinAdcCut(uint32_t value) { fdAdcCut = value; } + + /** @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 + * files to. + * + * @param[in] std::string geoTag as used in CbmSetup + * @param[in] std::uint32_t runId for runwise defined parameters + * @return fParContVec + */ + virtual std::vector<std::pair<std::string, std::shared_ptr<FairParGenericSet>>>* + GetParContainerRequest(std::string geoTag, std::uint32_t runId); + + /** + * @brief Mask a Noisy Channel + * + * @param uFeb + * @param uChan + * @param bMasked + */ + virtual void MaskNoisyChannel(const uint32_t uFeb, const uint32_t uChan, const bool bMasked = true) + { + (void) uFeb; + (void) uChan; + (void) bMasked; + }; protected: // Monitoring /** @brief Potential (online) monitor for the unpacking process */ std::shared_ptr<CbmStsUnpackMonitor> fMonitor = nullptr; + /** @brief Minimum adc cut to store a hit */ + uint32_t fdAdcCut = 0; + + /** @brief Time offsets per Asic??? @todo expert confirmation required */ + std::vector<double> fvdTimeOffsetNsAsics = {}; private: ClassDef(CbmStsUnpackAlgoBase, 2) diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx index 0561a7295b8a35633fb5f182ce9a808c0949bd27..57480fd737fd8470f67de6e819bbe27edf343c30 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx @@ -45,10 +45,8 @@ CbmStsUnpackAlgoLegacy::CbmStsUnpackAlgoLegacy() , fvdFebAdcGain() , fvdFebAdcOffs() , fdTimeOffsetNs(0.0) - , fvdTimeOffsetNsAsics() , fbUseChannelMask(false) , fvvbMaskedChannels() - , fdAdcCut(0) , fulCurrentMsIdx(0) , fuCurrDpbIdx(0) , fvulCurrentTsMsb() @@ -402,6 +400,9 @@ void CbmStsUnpackAlgoLegacy::AddHitsToDigiVect(std::vector<stsxyter::FinalHit>* bool CbmStsUnpackAlgoLegacy::unpack(const fles::Timeslice* ts, std::uint16_t uMsCompIdx, UInt_t uMsIdx) { + /// Ignore First TS as first MS is typically corrupt + if (0 == fTsIndex) { return true; } + auto msDescriptor = ts->descriptor(uMsCompIdx, uMsIdx); //Current equipment ID, tells from which DPB the current MS is originating @@ -529,6 +530,7 @@ void CbmStsUnpackAlgoLegacy::LoopMsMessages(const uint8_t* msContent, const uint for (uint32_t uIdx = 0; uIdx < uNbMessages; uIdx++) { /// Get message type const stsxyter::MessType typeMess = pMess[uIdx].GetMessType(); + if (fbMonitorMode && fbDebugMonitorMode) { fUnpackMonitor->ProcessDebugInfo(pMess[uIdx], fuCurrDpbIdx); } switch (typeMess) { case stsxyter::MessType::Hit: { @@ -621,7 +623,7 @@ void CbmStsUnpackAlgoLegacy::ProcessHitInfo(const stsxyter::Message& mess) const double dHitTimeNs = ulHitTime * stsxyter::kdClockCycleNs; /// If EM flag ON, store a corresponding error message with the next flag after all other possible status flags set - if (mess.IsHitMissedEvts()) + if (mess.IsHitMissedEvts() && fOptOutAVec != nullptr) fOptOutAVec->push_back( CbmErrorMessage(ECbmModuleId::kSts, dHitTimeNs, uAsicIdx, 1 << stsxyter::kusLenStatStatus, usChan)); @@ -751,13 +753,6 @@ void CbmStsUnpackAlgoLegacy::ProcessErrorInfo(const stsxyter::Message& mess) } } -// ------------------------------------------------------------------------- -void CbmStsUnpackAlgoLegacy::SetTimeOffsetNsAsic(const uint32_t uAsicIdx, const double dOffsetIn) -{ - if (uAsicIdx >= fvdTimeOffsetNsAsics.size()) { fvdTimeOffsetNsAsics.resize(uAsicIdx + 1, 0.0); } - fvdTimeOffsetNsAsics[uAsicIdx] = dOffsetIn; -} - // ------------------------------------------------------------------------- void CbmStsUnpackAlgoLegacy::MaskNoisyChannel(const uint32_t uFeb, const uint32_t uChan, const bool bMasked) { diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h index 34c1af708468d649bc34173ab8d3c0f539925029..f75b05e5507c849f86099fd064256945a316ee1f 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h @@ -48,9 +48,7 @@ public: 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 SetTimeOffsetNsAsic(const uint32_t uAsicIdx, const double dOffsetIn = 0.0); void MaskNoisyChannel(const uint32_t uFeb, const uint32_t uChan, const bool bMasked = true); - void SetMinAdcCut(uint32_t uAdc) { fdAdcCut = uAdc; } void SetUnpackStsMonitor(CbmStsUnpackMonitor* inMonitor) { fUnpackMonitor = inMonitor; } @@ -125,11 +123,9 @@ private: /// User settings: Data correction parameters double fdTimeOffsetNs; - std::vector<double> fvdTimeOffsetNsAsics; bool fbUseChannelMask; std::vector<std::vector<bool>> fvvbMaskedChannels; //! Vector of channel masks, [ NbFeb ][ NbCHanInFeb ], used only if fbUseChannelMask is true - uint32_t fdAdcCut; /// Running indices /// TS/MS info diff --git a/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx b/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx index 513cf2a0632e9330906bcc0a596a0b9e60b5f3c1..c4dea57ece3cc081257bf8cb0b2d2435c3f71efb 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx @@ -5,6 +5,7 @@ #include "CbmStsUnpackConfig.h" #include "CbmStsUnpackAlgo.h" +#include "CbmStsUnpackAlgoLegacy.h" #include <Logger.h> @@ -50,7 +51,6 @@ void CbmStsUnpackConfig::InitUnpacker() for (auto chmask : fvChanMasks) algo->MaskNoisyChannel(chmask.uFeb, chmask.uChan, chmask.bMasked); - // Now we have all information required to initialise the algorithm algo->Init(); @@ -64,13 +64,14 @@ void CbmStsUnpackConfig::InitUnpacker() } // ---- chooseAlgo ---- -std::shared_ptr<CbmStsUnpackAlgo> CbmStsUnpackConfig::chooseAlgo() +std::shared_ptr<CbmStsUnpackAlgoBase> CbmStsUnpackConfig::chooseAlgo() { if (fDoLog) LOG(info) << fName << "::Init - 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>(); LOG(info) << fName << "::chooseAlgo() - selected algo = " << algo->Class_Name(); return algo; diff --git a/reco/detectors/sts/unpack/CbmStsUnpackConfig.h b/reco/detectors/sts/unpack/CbmStsUnpackConfig.h index a930aa0aa610db3761fd3f3a14d19fe0d5e96f19..8fb6d904689ee0c898a9b2efa1a9e47eae9f0c51 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackConfig.h +++ b/reco/detectors/sts/unpack/CbmStsUnpackConfig.h @@ -35,7 +35,7 @@ #include <memory> #include <vector> -class CbmStsUnpackConfig : public CbmRecoUnpackConfig<CbmStsUnpackAlgo, CbmStsDigi, CbmErrorMessage> { +class CbmStsUnpackConfig : public CbmRecoUnpackConfig<CbmStsUnpackAlgoBase, CbmStsDigi, CbmErrorMessage> { public: /** @@ -107,7 +107,7 @@ protected: * * @return Bool_t initOk */ - virtual std::shared_ptr<CbmStsUnpackAlgo> chooseAlgo(); + virtual std::shared_ptr<CbmStsUnpackAlgoBase> chooseAlgo(); /** @brief pointer to the monitor object */ std::shared_ptr<CbmStsUnpackMonitor> fMonitor = nullptr; @@ -121,7 +121,6 @@ protected: /// Temporary storage of user parameters std::vector<FebChanMaskReco> fvChanMasks = {}; - /** @brief Geometry setup tag for the given detector as used by CbmSetup objects */ std::string fGeoSetupTag = "";