diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx index 1b030220c20dd61ee813969ced421645e5c51940..1c2d221f41b9086a6547e749cdcbbf4cf1a839a0 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx @@ -454,7 +454,10 @@ void CbmStsUnpackAlgo::processHitInfo(const stsxyter::Message& mess) if (fMonitor) fMonitor->CountRawHit(uFebIdx, uChanInFeb); /// Store hit for output only if it is mapped to a module!!! - if (0 != fviFebAddress[uFebIdx] && fdAdcCut < usRawAdc) { + bool apply_adc_cut = fdAdcCut_perFeb.find(uFebIdx) != fdAdcCut_perFeb.end() ? + fdAdcCut_perFeb[uFebIdx] < usRawAdc : + fdAdcCut < usRawAdc ; + if ( fviFebAddress[uFebIdx] != 0 && apply_adc_cut ) { /// Store only if masking is disabled or if channeld is not masked /// 2D vector is safe as always right size if masking enabled if (false == fbUseChannelMask || false == fvvbMaskedChannels[uFebIdx][uChanInFeb]) { diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h index 65ca023c6ef43d77d44a9687f7c5675f2f6ae4aa..2459400cce627c79cd80f2115d4ca0963f3bccf2 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h @@ -58,6 +58,8 @@ public: /** @brief Set the minimum adc cut value @param[in] value */ void SetMinAdcCut(uint32_t value) { fdAdcCut = value; } + + void SetMinAdcCut(uint32_t febid, uint32_t value) { fdAdcCut_perFeb[febid] = value; } /** @brief Set the time offset per Asic */ void SetAsicTimeOffsetVec(std::vector<double> value) { fvdTimeOffsetNsAsics.swap(value); } @@ -110,6 +112,9 @@ protected: /** @brief Minimum adc cut to store a hit */ uint32_t fdAdcCut = 0; + /** @brief Minimum adc cut per Feb to store a hit */ + std::map<uint32_t,uint32_t> fdAdcCut_perFeb; + /** @brief Time offsets per Asic??? @todo expert confirmation required */ std::vector<double> fvdTimeOffsetNsAsics = {}; diff --git a/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx b/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx index 3c12a48db0c9fe8da20237de57b1805501f562a8..a3b519b3e4f2a9b4194fe9aee7b46785f4dd2910 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx @@ -44,6 +44,11 @@ void CbmStsUnpackConfig::InitUnpacker() // Set the minimum adc cut algo->SetMinAdcCut(fdAdcCut); + // Set the minimum adc cut Feb independent + for (auto cut=fdAdcCut_perFeb.begin() ; cut!=fdAdcCut_perFeb.end() ; cut++){ + algo->SetMinAdcCut(cut->first,cut->second); + } + // Set the single asics time offsets algo->SetAsicTimeOffsetVec(fvdTimeOffsetNsAsics); diff --git a/reco/detectors/sts/unpack/CbmStsUnpackConfig.h b/reco/detectors/sts/unpack/CbmStsUnpackConfig.h index 83522fc08d3514501dbf64e582b666c6808edee2..eefd2cca0e3e9a64006fd45c7fb7cdd5032b4fa9 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackConfig.h +++ b/reco/detectors/sts/unpack/CbmStsUnpackConfig.h @@ -103,6 +103,8 @@ public: /** @brief Set the minimum adc cut value @param[in] value */ void SetMinAdcCut(uint32_t value) { fdAdcCut = value; } + void SetMinAdcCut(uint32_t febid, uint32_t value) { fdAdcCut_perFeb[febid] = value; } + /** @brief Add a monitor to the unpacker. @param value CbmStsUnpackMonitor */ void SetMonitor(std::shared_ptr<CbmStsUnpackMonitor> value) { fMonitor = value; } @@ -121,6 +123,9 @@ protected: /** @brief Minimum adc cut to store a hit */ uint32_t fdAdcCut = 0; + /** @brief Minimum adc cut per Feb to store a hit */ + std::map<uint32_t,uint32_t> fdAdcCut_perFeb; + /** @brief Vector with the Asic time offsets */ std::vector<double> fvdTimeOffsetNsAsics = {};