From f7620c47179e8db91dba4b1e04792a21aee3324e Mon Sep 17 00:00:00 2001
From: Florian Uhlig <f.uhlig@gsi.de>
Date: Wed, 18 Jan 2023 16:30:36 +0100
Subject: [PATCH] Cleanup dependencies in CbmMvdSensor

Remove function SetProduceNoise from CbmMvdSensor and CbmMvdDetector. The
function from the plugin is now called directly from the digitizer.
Exchange some casts to the final taks by using the base class instead.
---
 core/detectors/mvd/CbmMvdDetector.cxx | 11 ------
 core/detectors/mvd/CbmMvdDetector.h   |  2 -
 core/detectors/mvd/CbmMvdSensor.cxx   | 56 ++++-----------------------
 core/detectors/mvd/CbmMvdSensor.h     |  3 --
 sim/detectors/mvd/CbmMvdDigitizer.cxx |  1 +
 5 files changed, 9 insertions(+), 64 deletions(-)

diff --git a/core/detectors/mvd/CbmMvdDetector.cxx b/core/detectors/mvd/CbmMvdDetector.cxx
index b99d53ee6b..c4cea769a7 100644
--- a/core/detectors/mvd/CbmMvdDetector.cxx
+++ b/core/detectors/mvd/CbmMvdDetector.cxx
@@ -311,17 +311,6 @@ void CbmMvdDetector::ShowDebugHistos()
 }
 //-----------------------------------------------------------------------
 
-//-----------------------------------------------------------------------
-void CbmMvdDetector::SetProduceNoise()
-{
-  Int_t nSensors = fSensorArray->GetEntriesFast();
-  CbmMvdSensor* sensor;
-
-  for (Int_t j = 0; j < nSensors; j++) {
-    sensor = (CbmMvdSensor*) fSensorArray->At(j);
-    sensor->SetProduceNoise();
-  }
-}
 //-----------------------------------------------------------------------
 void CbmMvdDetector::SendInputToSensorPlugin(Int_t detectorid, Int_t nPlugin, TObject* input)
 {
diff --git a/core/detectors/mvd/CbmMvdDetector.h b/core/detectors/mvd/CbmMvdDetector.h
index 7e4dc3fb57..89fc571f16 100644
--- a/core/detectors/mvd/CbmMvdDetector.h
+++ b/core/detectors/mvd/CbmMvdDetector.h
@@ -115,8 +115,6 @@ public:
   CbmMvdSensor* GetSensor(UInt_t nSensor) { return (CbmMvdSensor*) fSensorArray->At(nSensor); };
   void PrintParameter() { fParameter->Print(); };
 
-  void SetProduceNoise();
-
   static void SetSensorTyp(CbmMvdSensorTyp typ) { fSensorTyp = typ; };
 
   void SetSensorArrayFilled(Bool_t value = kTRUE) {fSensorArrayFilled=value;}
diff --git a/core/detectors/mvd/CbmMvdSensor.cxx b/core/detectors/mvd/CbmMvdSensor.cxx
index ae0f732ffc..bd06febbc9 100644
--- a/core/detectors/mvd/CbmMvdSensor.cxx
+++ b/core/detectors/mvd/CbmMvdSensor.cxx
@@ -11,18 +11,8 @@
 
 //---Plugins
 #include "CbmMvdSensorPlugin.h"
-#include "CbmMvdSensorTask.h"
 #include "CbmMvdSensorBuffer.h"
-//#include "plugins/buffers/CbmMvdSensorFrameBuffer.h" // -> Not used
-//#include "plugins/buffers/CbmMvdSensorTrackingBuffer.h" // -> Not used
-//#include "plugins/tasks/CbmMvdSensorClusterfinderTask.h"  //not needed 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"  //not needed khun
-//---Plugins
+#include "plugins/tasks/CbmMvdSensorTask.h"
 
 /// includes from ROOT
 #include "TGeoManager.h"
@@ -281,33 +271,6 @@ void CbmMvdSensor::ShowDebugHistos()
 }
 // -------------------------------------------------------------------------
 
-// -------------------------------------------------------------------------
-void CbmMvdSensor::SetProduceNoise()
-{
-  CbmMvdSensorPlugin* pluginFirst;
-  // CbmMvdSensorFrameBuffer* framebuffer;
-  CbmMvdSensorDigitizerTask* digitask;
-
-  pluginFirst = (CbmMvdSensorPlugin*) fPluginArray->At(0);
-  if (pluginFirst->GetPluginType() == buffer) { return; }
-  else if (pluginFirst->GetPluginType() == task) {
-    TString digitizername = "CbmMvdSensorDigitizerTask";
-
-    if (pluginFirst->ClassName() == digitizername) {
-      digitask = (CbmMvdSensorDigitizerTask*) fPluginArray->At(0);
-      digitask->SetProduceNoise();
-    }
-
-    else {
-      LOG(fatal) << "Invalid input typ";
-    }
-  }
-  else {
-    cout << endl << "ERROR!! undefind plugin!" << endl;
-  }
-}
-// -------------------------------------------------------------------------
-
 // -------------------------------------------------------------------------
 
 void CbmMvdSensor::SendInputToPlugin(Int_t nPlugin, TObject* input)
@@ -317,9 +280,6 @@ void CbmMvdSensor::SendInputToPlugin(Int_t nPlugin, TObject* input)
   digitask->SetInput(input);
 }
 
-
-
-
 // -------------------------------------------------------------------------
 
 void CbmMvdSensor::ExecChain()
@@ -448,20 +408,20 @@ TClonesArray* CbmMvdSensor::GetOutputArray(Int_t nPlugin) const
 
   if (nPlugin == fHitPlugin) GetOutputBuffer();
   else if (nPlugin == fDigiPlugin) {
-    CbmMvdSensorDigitizerTask* digiplugin = (CbmMvdSensorDigitizerTask*) fPluginArray->At(nPlugin);
-    Int_t ArrayLength                     = digiplugin->GetOutputArray()->GetEntriesFast() - 1;
+    CbmMvdSensorTask* plugin = static_cast<CbmMvdSensorTask*>(fPluginArray->At(nPlugin));
+    Int_t ArrayLength = plugin->GetOutputArray()->GetEntriesFast() - 1;
     if (ArrayLength >= 0) {
-      foutputDigis->AbsorbObjects(digiplugin->GetOutputArray());
-      foutputDigiMatch->AbsorbObjects(digiplugin->GetMatchArray());
+      foutputDigis->AbsorbObjects(plugin->GetOutputArray());
+      foutputDigiMatch->AbsorbObjects(plugin->GetMatchArray());
       //cout << endl << "got digis " << foutputDigis->GetEntriesFast() << " and matches " << foutputDigiMatch->GetEntriesFast() << endl;
     }
     return (foutputDigis);
   }
   else if (nPlugin == fClusterPlugin)  //khun not needed
   {
-    CbmMvdSensorClusterfinderTask* clusterplugin = (CbmMvdSensorClusterfinderTask*) fPluginArray->At(nPlugin);
-    Int_t ArrayLength                            = clusterplugin->GetOutputArray()->GetEntriesFast() - 1;
-    if (ArrayLength >= 0) foutputCluster->AbsorbObjects(clusterplugin->GetOutputArray(), 0, ArrayLength);
+    CbmMvdSensorTask* plugin = static_cast<CbmMvdSensorTask*>(fPluginArray->At(nPlugin));
+    Int_t ArrayLength                            = plugin->GetOutputArray()->GetEntriesFast() - 1;
+    if (ArrayLength >= 0) foutputCluster->AbsorbObjects(plugin->GetOutputArray(), 0, ArrayLength);
     return (foutputCluster);
   }
   else {
diff --git a/core/detectors/mvd/CbmMvdSensor.h b/core/detectors/mvd/CbmMvdSensor.h
index 37ab20480c..244e55788e 100644
--- a/core/detectors/mvd/CbmMvdSensor.h
+++ b/core/detectors/mvd/CbmMvdSensor.h
@@ -142,9 +142,6 @@ public:
   //TClonesArray* GetOutputMatch() const;
   Int_t GetOutputArrayLen(Int_t nPlugin) const;
 
-  void SetProduceNoise();
-
-
 protected:
   Int_t fStationNr;   // Station identifier
   Int_t fSensorNr;    // Sensor identifier
diff --git a/sim/detectors/mvd/CbmMvdDigitizer.cxx b/sim/detectors/mvd/CbmMvdDigitizer.cxx
index 66a9bfc4c6..a73f88411c 100644
--- a/sim/detectors/mvd/CbmMvdDigitizer.cxx
+++ b/sim/detectors/mvd/CbmMvdDigitizer.cxx
@@ -316,6 +316,7 @@ InitStatus CbmMvdDigitizer::Init()
   for (auto itr = sensorMap.begin();
               itr != sensorMap.end(); itr++) {
     CbmMvdSensorDigitizerTask* digiTask = new CbmMvdSensorDigitizerTask();
+    if (fNoiseSensors) digiTask->SetProduceNoise();
     itr->second->AddPlugin(digiTask);
     itr->second->SetDigiPlugin(plugincount);
   }
-- 
GitLab