From b872dcccd3a3894289ff2444e68d06d2b6ccaa13 Mon Sep 17 00:00:00 2001
From: Florian Uhlig <f.uhlig@gsi.de>
Date: Wed, 18 Jan 2023 11:11:09 +0100
Subject: [PATCH] Move AddPlugins from MvdDetector to tasks

Up to now the CbmMvdDetector class has dependencies to all plugin classes. This
prevents a restructering of the mvd code. With this commit the plugins are
added to the sensors from the tasks.
---
 mvd/CbmMvd.h                |  2 +-
 mvd/CbmMvdClusterfinder.cxx | 16 +++++++--
 mvd/CbmMvdDetector.cxx      | 71 ++++++++++++-------------------------
 mvd/CbmMvdDigiToHit.cxx     | 15 ++++++--
 mvd/CbmMvdDigitizer.cxx     |  2 +-
 mvd/CbmMvdDigitizerTB.cxx   | 15 ++++++--
 mvd/CbmMvdHitfinder.cxx     | 25 +++++++------
 7 files changed, 78 insertions(+), 68 deletions(-)

diff --git a/mvd/CbmMvd.h b/mvd/CbmMvd.h
index a377ddc998..f6dbbc68b5 100644
--- a/mvd/CbmMvd.h
+++ b/mvd/CbmMvd.h
@@ -19,7 +19,7 @@
 #define CBMMVD_H 1
 
 
-#include "SensorDataSheets/CbmMvdMimosa26AHR.h"
+//#include "SensorDataSheets/CbmMvdMimosa26AHR.h"
 
 #include "FairDetector.h"
 
diff --git a/mvd/CbmMvdClusterfinder.cxx b/mvd/CbmMvdClusterfinder.cxx
index 9b566b3c89..4e17674ba2 100644
--- a/mvd/CbmMvdClusterfinder.cxx
+++ b/mvd/CbmMvdClusterfinder.cxx
@@ -158,10 +158,22 @@ InitStatus CbmMvdClusterfinder::Init()
     LOG(fatal) << "Geometry couldn't be loaded from file. No MVD digitizer available.";
   }
 
-  CbmMvdSensorClusterfinderTask* clusterTask = new CbmMvdSensorClusterfinderTask();
 
-  fDetector->AddPlugin(clusterTask);
+  // Add the digitizer plugin to all sensors
+  std::map<int, CbmMvdSensor*>& sensorMap = fDetector->GetSensorMap();
+  UInt_t plugincount=fDetector->GetPluginCount();
+
+  for (auto itr = sensorMap.begin();
+              itr != sensorMap.end(); itr++) {
+    CbmMvdSensorClusterfinderTask* clusterTask = new CbmMvdSensorClusterfinderTask();
+
+    itr->second->AddPlugin(clusterTask);
+    itr->second->SetDigiPlugin(plugincount);
+  }
+  fDetector->SetSensorArrayFilled(kTRUE);
+  fDetector->SetPluginCount(plugincount+1);
   fClusterPluginNr = (UInt_t)(fDetector->GetPluginArraySize());
+
   if (fShowDebugHistos) fDetector->ShowDebugHistos();
   fDetector->Init();
 
diff --git a/mvd/CbmMvdDetector.cxx b/mvd/CbmMvdDetector.cxx
index 21c151ed82..28ea7cd6cc 100644
--- a/mvd/CbmMvdDetector.cxx
+++ b/mvd/CbmMvdDetector.cxx
@@ -10,23 +10,27 @@
 #include "CbmMvdDetector.h"
 
 /// includes from CbmRoot
+#include "CbmDigiManager.h"
+#include "CbmMvdDetectorId.h"
 #include "CbmMvdDigi.h"
 #include "CbmMvdSensor.h"
 #include "plugins/CbmMvdSensorPlugin.h"
-#include "plugins/buffers/CbmMvdSensorBuffer.h"
-#include "plugins/buffers/CbmMvdSensorFrameBuffer.h"
-#include "plugins/buffers/CbmMvdSensorTrackingBuffer.h"
-#include "plugins/tasks/CbmMvdSensorClusterfinderTask.h"  //khun
-#include "plugins/tasks/CbmMvdSensorDigiToHitTask.h"
-#include "plugins/tasks/CbmMvdSensorDigitizerTBTask.h"
-//#include "plugins/tasks/CbmMvdSensorDigitizerTask.h"
-//#include "plugins/tasks/CbmMvdSensorFindHitTask.h"
-#include "CbmDigiManager.h"
-#include "plugins/tasks/CbmMvdSensorHitfinderTask.h"  //khun
 #include "plugins/tasks/CbmMvdSensorTask.h"
 #include "tools/CbmMvdGeoHandler.h"
 
-#include "CbmMvdDetectorId.h"
+
+// #include "plugins/buffers/CbmMvdSensorBuffer.h"
+// #include "plugins/buffers/CbmMvdSensorFrameBuffer.h"
+// #include "plugins/buffers/CbmMvdSensorTrackingBuffer.h"
+
+//   #include "plugins/tasks/CbmMvdSensorClusterfinderTask.h"  //khun
+//   #include "plugins/tasks/CbmMvdSensorDigiToHitTask.h"
+//   #include "plugins/tasks/CbmMvdSensorDigitizerTBTask.h"
+//   #include "plugins/tasks/CbmMvdSensorDigitizerTask.h"
+//   #include "plugins/tasks/CbmMvdSensorFindHitTask.h"
+//   #include "plugins/tasks/CbmMvdSensorHitfinderTask.h"  //khun
+
+
 
 /// includes from FairRoot
 #include <Logger.h>
@@ -35,6 +39,7 @@
 #include "TGeoBBox.h"
 #include "TGeoMatrix.h"
 #include "TGeoVolume.h"
+#include "TRandom.h"
 #include "TString.h"
 
 /// includes from c
@@ -195,12 +200,12 @@ void CbmMvdDetector::AddPlugin(CbmMvdSensorPlugin* plugin)
 
   CbmMvdSensor* sensor;
   Int_t nSensors                = fSensorArray->GetEntriesFast();
-  const TString digitizername   = "CbmMvdSensorDigitizerTask";
+  const TString digitizername   = "CbmMvdSensorDigitizerTask";    //done
   const TString digitizerTBname = "CbmMvdSensorDigitizerTBTask";
   //  const TString findername      = "CbmMvdSensorFindHitTask";
   //const TString framename = "CbmMvdSensorFrameBuffer";
   //const TString trackingname = "CbmMvdSensorTrackingBuffer";
-  const TString clustername   = "CbmMvdSensorClusterfinderTask";  //khun
+  const TString clustername   = "CbmMvdSensorClusterfinderTask";  //khun //done
   const TString hitname       = "CbmMvdSensorHitfinderTask";      //khun
   const TString digitohitname = "CbmMvdSensorDigiToHitTask";
 
@@ -211,54 +216,22 @@ void CbmMvdDetector::AddPlugin(CbmMvdSensorPlugin* plugin)
 
       if (plugin->ClassName() == digitizername) {
         LOG(fatal) << "Should never come here. Tasks are now added in CbmMvdDigitizer class";
-/*
-        CbmMvdSensorDigitizerTask* digiTask = new CbmMvdSensorDigitizerTask();
-        sensor                              = (CbmMvdSensor*) fSensorArray->At(i);
-        sensor->AddPlugin(digiTask);
-        sensor->SetDigiPlugin(fPluginCount);
-
-        //cout <<  "Adding Task CbmMvdSensorDigitizerTask at Sensor " << sensor->GetName() << endl;
-*/
       }
       else if (plugin->ClassName() == digitizerTBname) {
-        CbmMvdSensorDigitizerTBTask* digiTask = new CbmMvdSensorDigitizerTBTask();
-        sensor                                = (CbmMvdSensor*) fSensorArray->At(i);
-        sensor->AddPlugin(digiTask);
-        sensor->SetDigiPlugin(fPluginCount);
-
-        //cout <<  "Adding Task CbmMvdSensorDigitizerTask at Sensor " << sensor->GetName() << endl;
-        /*      } else if (plugin->ClassName() == findername) {
-        CbmMvdSensorFindHitTask* findTask = new CbmMvdSensorFindHitTask();
-        sensor                            = (CbmMvdSensor*) fSensorArray->At(i);
-        sensor->AddPlugin(findTask);
-        sensor->SetHitPlugin(fPluginCount);
-        // cout <<  "Adding Task CbmMvdSensorFindHitTask at Sensor " << sensor->GetName() << endl;
-*/
+        LOG(fatal) << "Should never come here. Tasks are now added in CbmMvdDigitizerTB class";
       }
 
       //Re-enable cluster and hit finder in addition to khun
       else if (plugin->ClassName() == clustername) {
-        CbmMvdSensorClusterfinderTask* clusterTask = new CbmMvdSensorClusterfinderTask();
-        sensor                                     = (CbmMvdSensor*) fSensorArray->At(i);
-        sensor->AddPlugin(clusterTask);
-        sensor->SetClusterPlugin(fPluginCount);
-        // cout <<  "Adding Task CbmMvdSensorClusterfinderTask at Sensor " << sensor->GetName() << endl;
+        LOG(fatal) << "Should never come here. Tasks are now added in CbmMvdClusterfinder class";
       }
       else if (plugin->ClassName() == hitname) {
-        CbmMvdSensorHitfinderTask* hitTask = new CbmMvdSensorHitfinderTask();
-        sensor                             = (CbmMvdSensor*) fSensorArray->At(i);
-        sensor->AddPlugin(hitTask);
-        sensor->SetHitPlugin(fPluginCount);
-        // cout <<  "Adding Task CbmMvdSensorHitfinderTask at Sensor " << sensor->GetName() << endl;
+        LOG(fatal) << "Should never come here. Tasks are now added in CbmMvdHitfinder class";
       }
       //end: re-enable cluster and hit finder in addition to khun
 
       else if (plugin->ClassName() == digitohitname) {
-        CbmMvdSensorDigiToHitTask* digitohitTask = new CbmMvdSensorDigiToHitTask();
-        sensor                                   = (CbmMvdSensor*) fSensorArray->At(i);
-        sensor->AddPlugin(digitohitTask);
-        sensor->SetHitPlugin(fPluginCount);
-        // cout <<  "Adding Task CbmMvdSensorClusterfinderTask at Sensor " << sensor->GetName() << endl;
+        LOG(fatal) << "Should never come here. Tasks are now added in CbmMvdDigiToHit class";
       }
       else {
         cout << endl << "task not included yet, adding standart task." << endl;
diff --git a/mvd/CbmMvdDigiToHit.cxx b/mvd/CbmMvdDigiToHit.cxx
index b40b9cd2c4..955ca07e9d 100644
--- a/mvd/CbmMvdDigiToHit.cxx
+++ b/mvd/CbmMvdDigiToHit.cxx
@@ -149,10 +149,21 @@ InitStatus CbmMvdDigiToHit::Init()
     LOG(fatal) << "Geometry couldn't be loaded from file. No MVD digitizer available.";
   }
 
-  CbmMvdSensorDigiToHitTask* hitTask = new CbmMvdSensorDigiToHitTask();
+  // Add the digitizer plugin to all sensors
+  std::map<int, CbmMvdSensor*>& sensorMap = fDetector->GetSensorMap();
+  UInt_t plugincount=fDetector->GetPluginCount();
 
-  fDetector->AddPlugin(hitTask);
+  for (auto itr = sensorMap.begin();
+              itr != sensorMap.end(); itr++) {
+    CbmMvdSensorDigiToHitTask* hitTask = new CbmMvdSensorDigiToHitTask();
+
+    itr->second->AddPlugin(hitTask);
+    itr->second->SetDigiPlugin(plugincount);
+  }
+  fDetector->SetSensorArrayFilled(kTRUE);
+  fDetector->SetPluginCount(plugincount+1);
   fHitPluginNr = (UInt_t)(fDetector->GetPluginArraySize());
+
   if (fShowDebugHistos) fDetector->ShowDebugHistos();
   fDetector->Init();
 
diff --git a/mvd/CbmMvdDigitizer.cxx b/mvd/CbmMvdDigitizer.cxx
index cbb8e4668b..bc2c46ffbe 100644
--- a/mvd/CbmMvdDigitizer.cxx
+++ b/mvd/CbmMvdDigitizer.cxx
@@ -14,7 +14,7 @@
 #include "CbmMvdDigi.h"
 #include "CbmMvdPileupManager.h"
 #include "CbmMvdPoint.h"
-#include "SensorDataSheets/CbmMvdMimosa26AHR.h"
+//#include "SensorDataSheets/CbmMvdMimosa26AHR.h"
 #include "plugins/tasks/CbmMvdSensorDigitizerTask.h"
 #include "tools/CbmMvdGeoHandler.h"
 
diff --git a/mvd/CbmMvdDigitizerTB.cxx b/mvd/CbmMvdDigitizerTB.cxx
index 3c011806c4..451ed9095d 100644
--- a/mvd/CbmMvdDigitizerTB.cxx
+++ b/mvd/CbmMvdDigitizerTB.cxx
@@ -138,10 +138,21 @@ InitStatus CbmMvdDigitizerTB::Init()
 
   fDetector = CbmMvdDetector::Instance();
 
-  CbmMvdSensorDigitizerTBTask* digiTask = new CbmMvdSensorDigitizerTBTask();
+  // Add the digitizer plugin to all sensors
+  std::map<int, CbmMvdSensor*>& sensorMap = fDetector->GetSensorMap();
+  UInt_t plugincount=fDetector->GetPluginCount();
 
-  fDetector->AddPlugin(digiTask);
+  for (auto itr = sensorMap.begin();
+              itr != sensorMap.end(); itr++) {
+    CbmMvdSensorDigitizerTBTask* digiTask = new CbmMvdSensorDigitizerTBTask();
+
+    itr->second->AddPlugin(digiTask);
+    itr->second->SetDigiPlugin(plugincount);
+  }
+  fDetector->SetSensorArrayFilled(kTRUE);
+  fDetector->SetPluginCount(plugincount+1);
   fDigiPluginNr = (UInt_t)(fDetector->GetPluginArraySize());
+
   fDetector->Init();
 
   // Screen output
diff --git a/mvd/CbmMvdHitfinder.cxx b/mvd/CbmMvdHitfinder.cxx
index 2664b764cd..00205b6033 100644
--- a/mvd/CbmMvdHitfinder.cxx
+++ b/mvd/CbmMvdHitfinder.cxx
@@ -203,19 +203,22 @@ InitStatus CbmMvdHitfinder::Init()
 
   fDetector = CbmMvdDetector::Instance();
 
-  //  if(!useClusterfinder)
-  //      {
-  //  	CbmMvdSensorFindHitTask* HitfinderTask = new CbmMvdSensorFindHitTask();
-  //      fDetector->AddPlugin(HitfinderTask);
-  //      }
-  //  else
-  //      {
-  CbmMvdSensorHitfinderTask* HitfinderTask = new CbmMvdSensorHitfinderTask();
-  fDetector->AddPlugin(HitfinderTask);
-  cout << endl << "running with external clusterfinder" << endl;
-  //       }
 
+  // Add the digitizer plugin to all sensors
+  std::map<int, CbmMvdSensor*>& sensorMap = fDetector->GetSensorMap();
+  UInt_t plugincount=fDetector->GetPluginCount();
+
+  for (auto itr = sensorMap.begin();
+              itr != sensorMap.end(); itr++) {
+    CbmMvdSensorHitfinderTask* hitfinderTask = new CbmMvdSensorHitfinderTask();
+
+    itr->second->AddPlugin(hitfinderTask);
+    itr->second->SetDigiPlugin(plugincount);
+  }
+  fDetector->SetSensorArrayFilled(kTRUE);
+  fDetector->SetPluginCount(plugincount+1);
   fHitfinderPluginNr = (UInt_t)(fDetector->GetPluginArraySize());
+
   if (fShowDebugHistos) fDetector->ShowDebugHistos();
   fDetector->Init();
 
-- 
GitLab