Skip to content
Snippets Groups Projects
Commit 4abe765e authored by Alexandru Bercuci's avatar Alexandru Bercuci
Browse files

add support for full TS reconstruction in TRD2D

parent cb1adc3a
No related branches found
No related tags found
1 merge request!1228Rebasing MR1179
...@@ -79,12 +79,24 @@ Bool_t CbmTrdClusterFinder::AddCluster(CbmTrdCluster* c) ...@@ -79,12 +79,24 @@ Bool_t CbmTrdClusterFinder::AddCluster(CbmTrdCluster* c)
// ---- addDigisToModules ---- // ---- addDigisToModules ----
UInt_t CbmTrdClusterFinder::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))); UInt_t ndigis = static_cast<UInt_t>(std::abs(CbmDigiManager::Instance()->GetNofDigis(ECbmModuleId::kTrd)));
if (ndigis == 0) return 0; 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); 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 ---- // ---- addDigisToModules ----
...@@ -118,14 +130,16 @@ void CbmTrdClusterFinder::addDigiToModule(UInt_t digiIdx) ...@@ -118,14 +130,16 @@ void CbmTrdClusterFinder::addDigiToModule(UInt_t digiIdx)
} }
// ---- processDigisInModules ---- // ---- 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); CbmTrdModuleRec* mod(NULL);
Int_t digiCounter(0), clsCounter(0); Int_t digiCounter(0), clsCounter(0);
for (std::map<Int_t, CbmTrdModuleRec*>::iterator imod = fModules.begin(); imod != fModules.end(); imod++) { for (std::map<Int_t, CbmTrdModuleRec*>::iterator imod = fModules.begin(); imod != fModules.end(); imod++) {
mod = imod->second; mod = imod->second;
digiCounter += mod->GetOverThreshold(); digiCounter += mod->GetOverThreshold();
clsCounter += mod->FindClusters(); clsCounter += mod->FindClusters(event || clr);
AddClusters(mod->GetClusters(), event, kTRUE); AddClusters(mod->GetClusters(), event, kTRUE);
} }
......
...@@ -187,10 +187,11 @@ private: ...@@ -187,10 +187,11 @@ private:
/** /**
* @brief Call the clusterizer function of each module * @brief Call the clusterizer function of each module
* *
* @param ndigis * @param ndigis total number of digis processed
* @param event * @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) * @brief Adds the module corresponding to the address of the passed digi to the ModuleMap (fModules)
......
...@@ -45,7 +45,7 @@ public: ...@@ -45,7 +45,7 @@ public:
/** /**
* \brief Steering routine for finding digits clusters * \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 Int_t GetOverThreshold() const { return 0; }
virtual TClonesArray* GetClusters() { return fClusters; } virtual TClonesArray* GetClusters() { return fClusters; }
virtual const TClonesArray* GetClusters() const { return fClusters; } virtual const TClonesArray* GetClusters() const { return fClusters; }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment