diff --git a/core/detectors/sts/CbmStsParAsic.h b/core/detectors/sts/CbmStsParAsic.h index af6f65191e993f8dfa0b889bedf2491b82a0dc7a..2dcfc568624ca59364dac0c59e3521ba19b2a86c 100644 --- a/core/detectors/sts/CbmStsParAsic.h +++ b/core/detectors/sts/CbmStsParAsic.h @@ -190,6 +190,16 @@ public: **/ void SetWalkCoef(std::array<double, 4> par) { fWalkCoef = par; } + /** @brief Get one of the coefficients for walk correction + ** @param uIdx Index of the correction parameter + ** @return Double value of coeff + **/ + double GetWalkCoef(uint32_t uIdx) const + { + if (uIdx < 4) return fWalkCoef[uIdx]; + return 0.; + } + /** @brief Info to string **/ std::string ToString() const; diff --git a/macro/beamtime/mcbm2021/mStsAsicTimeWalk.par b/macro/beamtime/mcbm2021/mStsAsicTimeWalk.par new file mode 100644 index 0000000000000000000000000000000000000000..6117b10f01e914f8247bafb83d068454cc25c39c --- /dev/null +++ b/macro/beamtime/mcbm2021/mStsAsicTimeWalk.par @@ -0,0 +1,94 @@ +0x10008002 0 -24.343851 2.794827 -0.103235 0.001478 +0x10008002 1 -24.453138 2.485316 -0.084344 0.001143 +0x10008002 2 -21.335244 2.585311 -0.094605 0.001301 +0x10008002 3 -27.042286 3.172233 -0.124657 0.001763 +0x10008002 4 -25.045089 3.203871 -0.127637 0.001794 +0x10008002 5 -26.779818 3.087139 -0.119053 0.001645 +0x10008002 6 -24.481546 3.110816 -0.121333 0.001657 +0x10008002 7 -22.591301 2.877937 -0.113311 0.001577 +0x10008002 8 -19.424627 2.142350 -0.076907 0.001131 +0x10008002 9 -18.569512 2.213657 -0.077985 0.001104 +0x10008002 10 -16.501049 2.082342 -0.076398 0.001047 +0x10008002 11 -19.052489 2.548761 -0.098873 0.001388 +0x10008002 12 -21.833524 2.704140 -0.105664 0.001495 +0x10008002 13 -17.299280 2.451026 -0.100094 0.001467 +0x10008002 14 -19.148061 2.444700 -0.094107 0.001301 +0x10008002 15 -27.609664 2.979764 -0.118827 0.001815 +0x10008402 0 -16.073344 2.122262 -0.077667 0.001089 +0x10008402 1 -14.128047 1.925380 -0.068603 0.000927 +0x10008402 2 -14.816346 2.138562 -0.086058 0.001264 +0x10008402 3 -15.495564 2.221024 -0.090255 0.001300 +0x10008402 4 -14.726348 2.047140 -0.081099 0.001143 +0x10008402 5 -14.639612 2.115243 -0.088436 0.001292 +0x10008402 6 -15.862068 2.403059 -0.105667 0.001625 +0x10008402 7 -10.630106 1.633339 -0.067333 0.001027 +0x10008402 8 -18.162918 1.839778 -0.062554 0.000903 +0x10008402 9 -14.766435 1.629818 -0.054458 0.000773 +0x10008402 10 -13.242281 1.478376 -0.050540 0.000684 +0x10008402 11 -13.184870 1.835602 -0.069212 0.000971 +0x10008402 13 -15.820881 2.125931 -0.085089 0.001243 +0x10008402 14 -17.079033 2.253279 -0.095055 0.001457 +0x10008402 15 -21.763771 2.444369 -0.097365 0.001488 +0x10008412 0 -21.062298 2.403890 -0.102558 0.001589 +0x10008412 1 -24.543860 2.389462 -0.096190 0.001471 +0x10008412 2 -20.704607 1.996227 -0.075500 0.001141 +0x10008412 3 -22.341229 2.170088 -0.084561 0.001281 +0x10008412 4 -22.427438 2.116928 -0.079242 0.001178 +0x10008412 5 -23.909809 2.120500 -0.077669 0.001144 +0x10008412 6 -23.474690 2.298446 -0.091476 0.001419 +0x10008412 7 -21.015222 2.099456 -0.081011 0.001165 +0x10008412 8 -17.923666 2.086692 -0.082284 0.001242 +0x10008412 9 -14.506690 1.860290 -0.069751 0.001043 +0x10008412 10 -15.961562 1.900934 -0.073619 0.001135 +0x10008412 11 -15.770385 1.936563 -0.073541 0.001112 +0x10008412 12 -16.316668 1.803342 -0.066135 0.000997 +0x10008412 13 -14.351899 1.640790 -0.057478 0.000828 +0x10008412 14 -15.640816 1.622711 -0.052814 0.000721 +0x10008412 15 -29.251989 3.538843 -0.151628 0.002310 +0x10018002 0 -25.056458 3.219929 -0.125826 0.001851 +0x10018002 1 -24.371339 2.918229 -0.110544 0.001599 +0x10018002 2 -23.462901 3.175956 -0.124907 0.001805 +0x10018002 3 -24.111189 3.086661 -0.123224 0.001715 +0x10018002 4 -29.824286 3.758626 -0.156249 0.002269 +0x10018002 6 -27.337549 3.448515 -0.136996 0.001904 +0x10018002 7 -28.369105 3.765852 -0.157456 0.002274 +0x10018002 8 -20.791849 2.486259 -0.089749 0.001276 +0x10018002 9 -17.363288 2.371768 -0.088625 0.001300 +0x10018002 10 -18.272911 2.389323 -0.090529 0.001260 +0x10018002 11 -17.764736 2.624238 -0.105000 0.001490 +0x10018002 12 -19.324053 2.746429 -0.113868 0.001655 +0x10018002 13 -19.358567 2.818979 -0.117600 0.001718 +0x10018002 14 -23.161820 2.978407 -0.117120 0.001645 +0x10018002 15 -27.423694 3.107933 -0.123165 0.001840 +0x10018402 0 -16.145571 2.285077 -0.084840 0.001184 +0x10018402 1 -16.710720 2.333578 -0.088014 0.001256 +0x10018402 2 -13.307549 2.055841 -0.082222 0.001205 +0x10018402 3 -18.324998 2.492320 -0.106166 0.001586 +0x10018402 4 -12.216834 2.021692 -0.085865 0.001282 +0x10018402 5 -16.246236 2.224143 -0.094434 0.001413 +0x10018402 6 -16.092803 2.422394 -0.103351 0.001556 +0x10018402 7 -14.283653 2.054059 -0.089415 0.001367 +0x10018402 8 -16.091609 1.761754 -0.058745 0.000843 +0x10018402 9 -15.368578 1.813220 -0.061890 0.000874 +0x10018402 10 -15.429614 1.815415 -0.064702 0.000879 +0x10018402 11 -14.695207 2.035016 -0.076519 0.001062 +0x10018402 12 -14.439320 1.914747 -0.075799 0.001113 +0x10018402 13 -13.936573 1.896988 -0.071429 0.001002 +0x10018402 14 -16.212322 2.087315 -0.082074 0.001192 +0x10018402 15 -19.711627 2.072715 -0.076144 0.001141 +0x10018412 0 -14.367412 1.870214 -0.068419 0.000953 +0x10018412 1 -15.059765 1.700618 -0.056864 0.000772 +0x10018412 2 -14.580617 1.835231 -0.065276 0.000935 +0x10018412 3 -17.815214 2.049838 -0.076863 0.001137 +0x10018412 4 -15.237744 1.915726 -0.069146 0.001000 +0x10018412 5 -16.830010 1.644316 -0.054014 0.000760 +0x10018412 6 -18.143719 2.165342 -0.081457 0.001200 +0x10018412 7 -13.713480 1.750551 -0.067606 0.000995 +0x10018412 8 -15.973608 1.941389 -0.070457 0.001006 +0x10018412 9 -14.568116 1.794739 -0.061400 0.000856 +0x10018412 10 -17.442979 1.840064 -0.062072 0.000876 +0x10018412 11 -17.495727 2.166743 -0.083457 0.001253 +0x10018412 12 -15.841103 1.836733 -0.065771 0.000969 +0x10018412 13 -18.192644 2.166289 -0.082612 0.001239 +0x10018412 14 -21.460571 2.277799 -0.084761 0.001226 +0x10018412 15 -25.006354 2.532571 -0.098309 0.001455 diff --git a/macro/run/run_unpack_tsa.C b/macro/run/run_unpack_tsa.C index 0b3580be025a27932f23b6cbdcb7d3f164db06b1..f02406cb3042423c2f0e9dc61dd2665d9f157b56 100644 --- a/macro/run/run_unpack_tsa.C +++ b/macro/run/run_unpack_tsa.C @@ -137,121 +137,47 @@ void run_unpack_tsa(std::vector<std::string> infile = {"test.tsa"}, UInt_t runid stsconfig->SetMinAdcCut(3, 1); stsconfig->SetMinAdcCut(4, 1); - stsconfig->MaskNoisyChannel(7, 715); - stsconfig->MaskNoisyChannel(7, 162); - stsconfig->MaskNoisyChannel(7, 159); - stsconfig->MaskNoisyChannel(7, 158); - stsconfig->MaskNoisyChannel(7, 125); - stsconfig->MaskNoisyChannel(7, 124); - stsconfig->MaskNoisyChannel(7, 123); - stsconfig->MaskNoisyChannel(12, 119); - stsconfig->MaskNoisyChannel(3, 85); - stsconfig->MaskNoisyChannel(3, 79); - stsconfig->MaskNoisyChannel(3, 75); stsconfig->MaskNoisyChannel(3, 56); + stsconfig->MaskNoisyChannel(3, 75); + stsconfig->MaskNoisyChannel(3, 79); + stsconfig->MaskNoisyChannel(3, 85); + stsconfig->MaskNoisyChannel(7, 123); + stsconfig->MaskNoisyChannel(7, 124); + stsconfig->MaskNoisyChannel(7, 125); + stsconfig->MaskNoisyChannel(7, 158); + stsconfig->MaskNoisyChannel(7, 159); + stsconfig->MaskNoisyChannel(7, 162); + stsconfig->MaskNoisyChannel(7, 715); stsconfig->MaskNoisyChannel(9, 709); + stsconfig->MaskNoisyChannel(12, 119); + + // Time Walk correction + std::map<uint32_t, CbmStsParModule> walkMap; + auto parAsic = new CbmStsParAsic(128, 31, 31., 1., 5., 800., 1000., 3.9789e-3); + + // Module params: number of channels, number of channels per ASIC + auto parMod = new CbmStsParModule(2048, 128); + + // default + double p0 = 0, p1 = 0, p2 = 0, p3 = 0; + parAsic->SetWalkCoef({p0, p1, p2, p3}); + parMod->SetAllAsics(*parAsic); - // Time OffSet - // U2 MOD1 - stsconfig->SetAsicTimeOffset(104, 0.235097); - stsconfig->SetAsicTimeOffset(105, -0.919854); - stsconfig->SetAsicTimeOffset(106, 0.470871); - stsconfig->SetAsicTimeOffset(107, -0.302136); - stsconfig->SetAsicTimeOffset(108, 0.0538701); - stsconfig->SetAsicTimeOffset(109, -0.726945); - stsconfig->SetAsicTimeOffset(110, -0.474958); - stsconfig->SetAsicTimeOffset(111, -0.426105); - stsconfig->SetAsicTimeOffset(112, -0.642128); - stsconfig->SetAsicTimeOffset(113, 3.90217); - stsconfig->SetAsicTimeOffset(114, 4.50206); - stsconfig->SetAsicTimeOffset(115, 4.16447); - stsconfig->SetAsicTimeOffset(116, 5.00525); - stsconfig->SetAsicTimeOffset(117, 4.2554); - stsconfig->SetAsicTimeOffset(118, 5.51313); - stsconfig->SetAsicTimeOffset(119, 3.38058); - // U2 MOD0 - stsconfig->SetAsicTimeOffset(88, 5.32785); - stsconfig->SetAsicTimeOffset(89, 5.10337); - stsconfig->SetAsicTimeOffset(90, 6.63223); - stsconfig->SetAsicTimeOffset(91, 4.44318); - stsconfig->SetAsicTimeOffset(92, 6.5406); - stsconfig->SetAsicTimeOffset(93, 3.82063); - stsconfig->SetAsicTimeOffset(94, 5.8673); - stsconfig->SetAsicTimeOffset(95, 4.41679); - stsconfig->SetAsicTimeOffset(96, 0.917994); - stsconfig->SetAsicTimeOffset(97, 2.7819); - stsconfig->SetAsicTimeOffset(98, 5.61836); - stsconfig->SetAsicTimeOffset(99, 5.9533); - stsconfig->SetAsicTimeOffset(100, 5.9789); - stsconfig->SetAsicTimeOffset(101, 5.24167); - stsconfig->SetAsicTimeOffset(102, 7.14848); - stsconfig->SetAsicTimeOffset(103, 6.12267); - // U1 MOD1 - stsconfig->SetAsicTimeOffset(64, 6.94614); - stsconfig->SetAsicTimeOffset(65, 6.79433); - stsconfig->SetAsicTimeOffset(66, 5.57188); - stsconfig->SetAsicTimeOffset(67, 4.78256); - stsconfig->SetAsicTimeOffset(68, 4.47773); - stsconfig->SetAsicTimeOffset(69, 3.70702); - stsconfig->SetAsicTimeOffset(70, 4.02281); - stsconfig->SetAsicTimeOffset(71, 4.74402); - stsconfig->SetAsicTimeOffset(72, 2.13448); - stsconfig->SetAsicTimeOffset(73, 3.28798); - stsconfig->SetAsicTimeOffset(74, 4.13604); - stsconfig->SetAsicTimeOffset(76, 5.02552); - stsconfig->SetAsicTimeOffset(77, 3.55128); - stsconfig->SetAsicTimeOffset(78, 4.66596); - stsconfig->SetAsicTimeOffset(79, 3.76298); - // U1 MOD0 - stsconfig->SetAsicTimeOffset(48, 10.0742); - stsconfig->SetAsicTimeOffset(49, 9.31221); - stsconfig->SetAsicTimeOffset(50, 6.09788); - stsconfig->SetAsicTimeOffset(51, 2.85866); - stsconfig->SetAsicTimeOffset(52, 5.45111); - stsconfig->SetAsicTimeOffset(53, 3.18376); - stsconfig->SetAsicTimeOffset(54, 4.77448); - stsconfig->SetAsicTimeOffset(55, 3.20388); - stsconfig->SetAsicTimeOffset(56, 3.37812); - stsconfig->SetAsicTimeOffset(57, 4.08165); - stsconfig->SetAsicTimeOffset(58, 5.06481); - stsconfig->SetAsicTimeOffset(59, 4.39388); - stsconfig->SetAsicTimeOffset(60, 5.63931); - stsconfig->SetAsicTimeOffset(61, 4.15354); - stsconfig->SetAsicTimeOffset(62, 6.67062); - stsconfig->SetAsicTimeOffset(63, 6.33579); - // U0 MOD1 - stsconfig->SetAsicTimeOffset(24, 5.01505); - stsconfig->SetAsicTimeOffset(25, 3.84039); - stsconfig->SetAsicTimeOffset(26, 5.36344); - stsconfig->SetAsicTimeOffset(27, 2.96807); - stsconfig->SetAsicTimeOffset(28, 4.14668); - stsconfig->SetAsicTimeOffset(29, 2.4282); - stsconfig->SetAsicTimeOffset(30, 4.02055); - stsconfig->SetAsicTimeOffset(31, 4.13309); - stsconfig->SetAsicTimeOffset(32, 1.2073); - stsconfig->SetAsicTimeOffset(33, 4.02747); - stsconfig->SetAsicTimeOffset(34, 5.03306); - stsconfig->SetAsicTimeOffset(35, 3.5234); - stsconfig->SetAsicTimeOffset(36, 5.41946); - stsconfig->SetAsicTimeOffset(37, 4.82807); - stsconfig->SetAsicTimeOffset(38, 6.33436); - stsconfig->SetAsicTimeOffset(39, 4.71413); - // U0 MOD0 - stsconfig->SetAsicTimeOffset(8, 8.15031); - stsconfig->SetAsicTimeOffset(9, 6.99897); - stsconfig->SetAsicTimeOffset(10, 8.14826); - stsconfig->SetAsicTimeOffset(11, 3.29095); - stsconfig->SetAsicTimeOffset(12, 3.04337); - stsconfig->SetAsicTimeOffset(14, 3.71628); - stsconfig->SetAsicTimeOffset(15, 3.82512); - stsconfig->SetAsicTimeOffset(16, 4.05862); - stsconfig->SetAsicTimeOffset(17, 4.53291); - stsconfig->SetAsicTimeOffset(18, 5.22825); - stsconfig->SetAsicTimeOffset(19, 4.93144); - stsconfig->SetAsicTimeOffset(20, 6.33821); - stsconfig->SetAsicTimeOffset(21, 5.66979); - stsconfig->SetAsicTimeOffset(22, 9.33802); - stsconfig->SetAsicTimeOffset(23, 7.41302); + walkMap[0x10107C02] = CbmStsParModule(*parMod); // Make a copy for storage + walkMap[0x101FFC02] = CbmStsParModule(*parMod); // Make a copy for storage + + /// To be replaced by a storage in a new parameter class later + int sensor, asic; + std::ifstream asicTimeWalk_par(Form("%s/mStsAsicTimeWalk.par", parfilesbasepathSts.data())); + while (asicTimeWalk_par >> std::hex >> sensor >> std::dec >> asic >> p0 >> p1 >> p2 >> p3) { + std::cout << Form("Setting time-walk parametersfor: module %x, ASIC %u\n", sensor, asic); + parAsic->SetWalkCoef({p0, p1, p2, p3}); + + if (walkMap.find(sensor) == walkMap.end()) { walkMap[sensor] = CbmStsParModule(*parMod); } + walkMap[sensor].SetAsic(asic, *parAsic); + } + + stsconfig->SetWalkMap(walkMap); } // ------------- @@ -317,20 +243,19 @@ void run_unpack_tsa(std::vector<std::string> infile = {"test.tsa"}, UInt_t runid // In general, the following parts need not be touched // ======================================================================== - // ----- Timer -------------------------------------------------------- TStopwatch timer; timer.Start(); // ------------------------------------------------------------------------ - // ----- CbmSourceTsArchive ------------------------------------------- auto source = new CbmSourceTsArchive(infile); auto unpack = source->GetRecoUnpack(); unpack->SetDoPerfProfiling(doPerfProfiling); unpack->SetOutputFilename(perfProfFileName); - /// Enable full time sorting instead of time sorting per FLIM link - //unpack->SetTimeSorting(true); + // Enable full time sorting instead sorting per FLIM link + unpack->SetTimeSorting(true); + if (psdconfig) unpack->SetUnpackConfig(psdconfig); if (richconfig) unpack->SetUnpackConfig(richconfig); if (stsconfig) unpack->SetUnpackConfig(stsconfig); @@ -339,7 +264,6 @@ void run_unpack_tsa(std::vector<std::string> infile = {"test.tsa"}, UInt_t runid if (tofconfig) unpack->SetUnpackConfig(tofconfig); // ------------------------------------------------------------------------ - // ----- FairRunAna --------------------------------------------------- auto run = new FairRunOnline(source); auto sink = new FairRootFileSink(outfilename.data()); diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx index 4a0f00e7070019a3215cd7978ba79151aa7c867b..52bc7a98eeafefffff8910256514902badece8f3 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx @@ -509,6 +509,11 @@ void CbmStsUnpackAlgo::processHitInfo(const stsxyter::Message& mess) double dTimeInNs = tsreltime - fSystemTimeOffset; if (uAsicIdx < fvdTimeOffsetNsAsics.size()) dTimeInNs -= fvdTimeOffsetNsAsics[uAsicIdx]; + // Time-Walk correction + if (fbUseTimeWalkCorrection == true) { + dTimeInNs += fWalkLookup[fviFebAddress[uFebIdx]][uChanInMod / fNrChsPerAsic][usRawAdc]; + } + const uint64_t ulTimeInNs = static_cast<uint64_t>(dTimeInNs); const double dCalAdc = fvdFebAdcOffs[uFebIdx] + (usRawAdc - 1) * fvdFebAdcGain[uFebIdx]; diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx index bc021b48a27f977df5cfae6fd740626b4f5e5771..e3a4308b416ab29a79c881ee758bb70319d159dd 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx @@ -23,4 +23,23 @@ std::vector<std::pair<std::string, std::shared_ptr<FairParGenericSet>>>* return &fParContVec; } +void CbmStsUnpackAlgoBase::SetWalkMap(const std::map<uint32_t, CbmStsParModule>& mapIn) +{ + auto modIt = mapIn.begin(); + for (auto& mapInEntry : mapIn) { + const std::vector<CbmStsParAsic>& asicPars = (mapInEntry.second).GetAsicParams(); + uint32_t uNbAsics = asicPars.size(); + fWalkLookup[mapInEntry.first].resize(uNbAsics); + for (uint32_t asicIdx = 0; asicIdx < uNbAsics; ++asicIdx) { + fWalkLookup[mapInEntry.first][asicIdx].resize(32); + for (double uAdc = 0; uAdc < 32; ++uAdc) { + fWalkLookup[mapInEntry.first][asicIdx][uAdc] = + asicPars[asicIdx].GetWalkCoef(3) * uAdc * uAdc * uAdc + asicPars[asicIdx].GetWalkCoef(2) * uAdc * uAdc + + asicPars[asicIdx].GetWalkCoef(1) * uAdc + asicPars[asicIdx].GetWalkCoef(0); + } + } + } + fbUseTimeWalkCorrection = true; +} + ClassImp(CbmStsUnpackAlgoBase) diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h index 3dd9c004f39d1de736321305dc4afe8f4e03f013..7c77c64b479a399f60761177221892f47cf92c23 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h +++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h @@ -24,6 +24,7 @@ #include "CbmErrorMessage.h" // REMARK see remark in CbmStsUnpackConfig #include "CbmRecoUnpackAlgo.tmpl" #include "CbmStsDigi.h" +#include "CbmStsParModule.h" #include "CbmStsUnpackMonitor.h" #include "Timeslice.hpp" // timeslice @@ -64,6 +65,9 @@ public: /** @brief Set the time offset per Asic */ void SetAsicTimeOffsetVec(std::vector<double> value) { fvdTimeOffsetNsAsics.swap(value); } + /** @brief Enable/Disable time-walk correction */ + void SetWalkMap(const std::map<uint32_t, CbmStsParModule>& mapIn); + /** @brief Enable/Disable the duplicate digis rejection, without or with same ADC checks */ void SetDuplicatesRejection(bool bIn = true, bool bDiffAdc = true) { @@ -118,6 +122,12 @@ protected: /** @brief Time offsets per Asic??? @todo expert confirmation required */ std::vector<double> fvdTimeOffsetNsAsics = {}; + /** @brief Enable/Disable time-walk correction */ + bool fbUseTimeWalkCorrection = false; + + /** @brief Per-ASIC's sensors Time-Walk correction mapping */ + std::map<uint32_t, std::vector<std::vector<double>>> fWalkLookup = {}; + /** @brief Enables the rejection of duplicate digis */ bool fbRejectDuplicateDigis = false; diff --git a/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx b/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx index b6c7be4c2284d00566865f978a9c64749c3c998b..d8b0ad0f1bf2819d079edfc3119171079a5857f0 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx @@ -36,6 +36,9 @@ void CbmStsUnpackConfig::InitAlgo() // Set the single asics time offsets fAlgo->SetAsicTimeOffsetVec(fvdTimeOffsetNsAsics); + // Set Time Walk Correction map + fAlgo->SetWalkMap(fWalkMap); + // Set the flags for duplicate digis rejections fAlgo->SetDuplicatesRejection(fbRejectDuplicateDigis, fbDupliWithoutAdc); diff --git a/reco/detectors/sts/unpack/CbmStsUnpackConfig.h b/reco/detectors/sts/unpack/CbmStsUnpackConfig.h index d71c152a649d5f6e775faab39c31f422d5459837..8a377c5b51681328260face946a8fe514ca3a90f 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackConfig.h +++ b/reco/detectors/sts/unpack/CbmStsUnpackConfig.h @@ -21,6 +21,7 @@ #include "CbmErrorMessage.h" // REMARK this should become a Sts specific container I Would propose PR #include "CbmRecoUnpackConfig.tmpl" #include "CbmStsDigi.h" +#include "CbmStsParModule.h" #include "CbmStsUnpackAlgo.h" #include "CbmStsUnpackMonitor.h" @@ -92,6 +93,8 @@ public: if (fvdTimeOffsetNsAsics.size() < (asicid + 1)) fvdTimeOffsetNsAsics.resize(asicid + 1); fvdTimeOffsetNsAsics.at(asicid) = value; } + /** @brief Set Time-Walk correction map */ + void SetWalkMap(const std::map<uint32_t, CbmStsParModule>& mapIn) { fWalkMap = mapIn; } /** @brief Enable/Disable the duplicate digis rejection, without or with same ADC checks */ void SetDuplicatesRejection(bool bIn = true, bool bDiffAdc = true) @@ -129,6 +132,12 @@ protected: /** @brief Vector with the Asic time offsets */ std::vector<double> fvdTimeOffsetNsAsics = {}; + /** @brief Enables time-walk correction */ + bool fbUseTimeWalkCorrection = false; + + /** @brief Time-Walk Parameters map */ + std::map<uint32_t, CbmStsParModule> fWalkMap = {}; + /** @brief Enables the rejection of duplicate digis */ bool fbRejectDuplicateDigis = false;