From 4abe765e770fbd58b53c325952af465df11fa94c Mon Sep 17 00:00:00 2001 From: Alexandru Bercuci <abercuci@niham.nipne.ro> Date: Thu, 25 May 2023 12:00:26 +0300 Subject: [PATCH] add support for full TS reconstruction in TRD2D --- reco/detectors/trd/CbmTrdClusterFinder.cxx | 22 ++++++++++++++++++---- reco/detectors/trd/CbmTrdClusterFinder.h | 7 ++++--- reco/detectors/trd/CbmTrdModuleRec.h | 2 +- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/reco/detectors/trd/CbmTrdClusterFinder.cxx b/reco/detectors/trd/CbmTrdClusterFinder.cxx index 2d239d67ca..d470d6825f 100644 --- a/reco/detectors/trd/CbmTrdClusterFinder.cxx +++ b/reco/detectors/trd/CbmTrdClusterFinder.cxx @@ -79,12 +79,24 @@ Bool_t CbmTrdClusterFinder::AddCluster(CbmTrdCluster* c) // ---- addDigisToModules ---- UInt_t CbmTrdClusterFinder::addDigisToModules() { + const int NDIGICHUNK = 100; // force flush of cluster buffer once every NDIGICHUNK digi to avoid memory exhaustion + UInt_t ndigis = static_cast<UInt_t>(std::abs(CbmDigiManager::Instance()->GetNofDigis(ECbmModuleId::kTrd))); if (ndigis == 0) return 0; - for (size_t idigi = 0; idigi < ndigis; idigi++) { + + int jdigi(0); + for (size_t idigi(0); idigi < ndigis; idigi++) { addDigiToModule(idigi); + // once in a while dump finished clusters + // TODO ad hoc condition. Maybe a find a better one + if (jdigi >= NDIGICHUNK) { + processDigisInModules(jdigi, nullptr, false); + jdigi = 0; + } + else + jdigi++; } - return ndigis; + return jdigi; } // ---- addDigisToModules ---- @@ -118,14 +130,16 @@ void CbmTrdClusterFinder::addDigiToModule(UInt_t digiIdx) } // ---- processDigisInModules ---- -void CbmTrdClusterFinder::processDigisInModules(UInt_t ndigis, CbmEvent* event) +void CbmTrdClusterFinder::processDigisInModules(UInt_t ndigis, CbmEvent* event, bool clr) { + // printf("AB :: processDigisInModules(%d, %p) clr[%c]\n", ndigis, (void*) event, (clr?'Y':'N')); + CbmTrdModuleRec* mod(NULL); Int_t digiCounter(0), clsCounter(0); for (std::map<Int_t, CbmTrdModuleRec*>::iterator imod = fModules.begin(); imod != fModules.end(); imod++) { mod = imod->second; digiCounter += mod->GetOverThreshold(); - clsCounter += mod->FindClusters(); + clsCounter += mod->FindClusters(event || clr); AddClusters(mod->GetClusters(), event, kTRUE); } diff --git a/reco/detectors/trd/CbmTrdClusterFinder.h b/reco/detectors/trd/CbmTrdClusterFinder.h index 99a48d1ee8..c01df96f91 100644 --- a/reco/detectors/trd/CbmTrdClusterFinder.h +++ b/reco/detectors/trd/CbmTrdClusterFinder.h @@ -187,10 +187,11 @@ private: /** * @brief Call the clusterizer function of each module * - * @param ndigis - * @param event + * @param ndigis total number of digis processed + * @param event link to digi event in case event-by-event reco is activated + * @param clr force clear clusters buffers */ - void processDigisInModules(UInt_t ndigis, CbmEvent* event = nullptr); + void processDigisInModules(UInt_t ndigis, CbmEvent* event = nullptr, bool clr = true); /** * @brief Adds the module corresponding to the address of the passed digi to the ModuleMap (fModules) diff --git a/reco/detectors/trd/CbmTrdModuleRec.h b/reco/detectors/trd/CbmTrdModuleRec.h index 93dbc1c2e8..bace9c2a79 100644 --- a/reco/detectors/trd/CbmTrdModuleRec.h +++ b/reco/detectors/trd/CbmTrdModuleRec.h @@ -45,7 +45,7 @@ public: /** * \brief Steering routine for finding digits clusters **/ - virtual Int_t FindClusters() = 0; + virtual Int_t FindClusters(bool clr = true) = 0; virtual Int_t GetOverThreshold() const { return 0; } virtual TClonesArray* GetClusters() { return fClusters; } virtual const TClonesArray* GetClusters() const { return fClusters; } -- GitLab