From d7b4ca5fc86955254f0985622022e0ca1d14d35a Mon Sep 17 00:00:00 2001
From: Michael Deveaux <deveaux@physik.uni-frankfurt.de>
Date: Tue, 17 Jan 2023 10:18:53 +0100
Subject: [PATCH] Unique Identifier for CbmMvdSensor Plugins added. This is to
 allow for giving the implementations of the plugins a unique ID. See
 /plugins/PluginNamingConvention.txt for details.

Added SendData(Int_t nSensor, Int_t nPlugin, TObject* data) to CbmMvdSensor and CbmMvdDetector
This is to send data directly from the FairTask.
---
 mvd/CMakeLists.txt                            |  8 ++--
 mvd/CbmMvdDetector.cxx                        | 41 ++++++++++++++++++-
 mvd/CbmMvdDetector.h                          |  4 ++
 mvd/CbmMvdSensor.cxx                          | 14 ++++++-
 mvd/CbmMvdSensor.h                            |  1 +
 mvd/plugins/CbmMvdSensorPlugin.cxx            |  2 +
 mvd/plugins/CbmMvdSensorPlugin.h              |  4 ++
 mvd/plugins/PluginNamingConvention.txt        | 14 +++++++
 .../tasks/CbmMvdSensorDigitizerTask.cxx       |  4 +-
 9 files changed, 84 insertions(+), 8 deletions(-)
 create mode 100644 mvd/plugins/PluginNamingConvention.txt

diff --git a/mvd/CMakeLists.txt b/mvd/CMakeLists.txt
index d0dd43e9f5..b8696c1a12 100644
--- a/mvd/CMakeLists.txt
+++ b/mvd/CMakeLists.txt
@@ -44,7 +44,7 @@ set(SRCS
   CbmMvdDetector.cxx
   CbmMvdSensor.cxx
   CbmMvdDigiToHit.cxx
-  CbmMvdDigiToHitTB.cxx
+ # CbmMvdDigiToHitTB.cxx
   CbmMvdTrackingInterface.cxx
   
   #OLD
@@ -92,9 +92,9 @@ install(FILES tools/CbmMvdHelper.h
 install(FILES plugins/CbmMvdSensorPlugin.h
         DESTINATION include/mvd/plugins
        )
-install(FILES SensorDataSheets/CbmMvdMimosa26AHR.h
+install(FILES #SensorDataSheets/CbmMvdMimosa26AHR.h
               SensorDataSheets/CbmMvdSensorDataSheet.h
-              SensorDataSheets/CbmMvdMimosa34.h
+              #SensorDataSheets/CbmMvdMimosa34.h
               SensorDataSheets/CbmMvdMimosis.h
         DESTINATION include/mvd/SensorDataSheets
        )
@@ -107,7 +107,7 @@ install(FILES plugins/tasks/CbmMvdSensorClusterfinderTask.h
               plugins/tasks/CbmMvdSensorDigitizerTask.h
               plugins/tasks/CbmMvdSensorDigitizerTBTask.h
               plugins/tasks/CbmMvdSensorDigiToHitTask.h
-#              plugins/tasks/CbmMvdSensorFindHitTask.h
+              plugins/tasks/CbmMvdSensorFindHitTask.h
               plugins/tasks/CbmMvdSensorHitfinderTask.h
               plugins/tasks/CbmMvdSensorTask.h
         DESTINATION include/mvd/plugins/tasks
diff --git a/mvd/CbmMvdDetector.cxx b/mvd/CbmMvdDetector.cxx
index d4566456f9..d7c0ee9e09 100644
--- a/mvd/CbmMvdDetector.cxx
+++ b/mvd/CbmMvdDetector.cxx
@@ -327,7 +327,11 @@ void CbmMvdDetector::SetProduceNoise()
   }
 }
 //-----------------------------------------------------------------------
-
+void CbmMvdDetector::SendInputToSensorPlugin(Int_t nSensor, Int_t nPlugin, TObject* input)
+{
+  CbmMvdSensor* sensor=(CbmMvdSensor*)fSensorArray->At(nSensor);
+  sensor->SendInputToPlugin(nPlugin,input);
+}
 //-----------------------------------------------------------------------
 void CbmMvdDetector::SendInput(TClonesArray* input)
 {
@@ -362,6 +366,41 @@ void CbmMvdDetector::SendInput(TClonesArray* input)
 }
 //-----------------------------------------------------------------------
 
+//-----------------------------------------------------------------------
+void CbmMvdDetector::SendInputNeutral(TClonesArray* input)
+{
+  /**
+   *
+   * Sending event to sensors,
+   * each sensor gets only his own points
+   *
+   *
+   *
+   * **/
+/*
+
+  TObject* point;
+  Int_t nEntries = input->GetEntriesFast();
+  Int_t nSensors = fSensorArray->GetEntriesFast();
+  CbmMvdSensor* sensor;
+  Bool_t send = kFALSE;
+  for (Int_t i = 0; i < nEntries; i++) {
+    point = (CbmMvdPoint*) input->At(i);
+    point->SetPointId(i);
+    for (Int_t k = 0; k < nSensors; k++) {
+      sensor = (CbmMvdSensor*) fSensorArray->At(k);
+
+      if (point->GetDetectorID() == sensor->GetDetectorID()) {
+        sensor->SendInput(point);
+        send = true;
+      }
+    }
+    if (!send) LOG(warn) << "Point not send to any sensor: " << point->GetDetectorID();
+  }
+
+*/
+}
+//-----------------------------------------------------------------------
 
 //-----------------------------------------------------------------------
 void CbmMvdDetector::SendInputDigis(CbmDigiManager* digiMan)
diff --git a/mvd/CbmMvdDetector.h b/mvd/CbmMvdDetector.h
index f899f42a5c..31cac62bc8 100644
--- a/mvd/CbmMvdDetector.h
+++ b/mvd/CbmMvdDetector.h
@@ -58,6 +58,8 @@ public:
 
   /** Data interface */
   void SendInput(TClonesArray* input);
+  void SendInputNeutral(TClonesArray* input);
+  void SendInputToSensorPlugin(Int_t nSensor, Int_t nPlugin, TObject* input);
   void SendInputDigis(CbmDigiManager* digiMan);
   void SendInputDigis(TClonesArray* digis);
   void SendInputDigisToHits(TClonesArray* digis);
@@ -70,6 +72,8 @@ public:
   TClonesArray* GetOutputDigiMatchs();
   TClonesArray* GetOutputCluster();  //khun
   TClonesArray* GetOutputArray(Int_t nPlugin);
+  TClonesArray* GetSensorArray(){return fSensorArray;};
+  TClonesArray* GetSensorIDArray(){return fSensorIDArray;};
   // TClonesArray* GetClonesArray(Int_t dataLevel){ return 0;}
   Int_t GetSensorArraySize() { return (fSensorArray->GetEntriesFast()); }
   UInt_t GetPluginArraySize() { return fPluginCount - 1; }
diff --git a/mvd/CbmMvdSensor.cxx b/mvd/CbmMvdSensor.cxx
index ca6cd870bc..84f5bbcf90 100644
--- a/mvd/CbmMvdSensor.cxx
+++ b/mvd/CbmMvdSensor.cxx
@@ -10,9 +10,11 @@
 #include "CbmMvdSensor.h"
 
 //---Plugins
-#include "plugins/buffers/CbmMvdSensorFrameBuffer.h"
-#include "plugins/buffers/CbmMvdSensorTrackingBuffer.h"
+#include "CbmMvdSensorPlugin.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"
@@ -326,6 +328,14 @@ void CbmMvdSensor::SendInput(CbmMvdPoint* point)
 }
 // -------------------------------------------------------------------------
 
+void CbmMvdSensor::SendInputToPlugin(Int_t nPlugin, TObject* input)
+{
+  CbmMvdSensorPlugin* digitask;
+  digitask=(CbmMvdSensorPlugin*) fPluginArray->At(nPlugin);
+  digitask->SetInput(input);
+}
+
+
 
 // -------------------------------------------------------------------------
 void CbmMvdSensor::SendInputDigi(CbmMvdDigi* digi)  //for old CF
diff --git a/mvd/CbmMvdSensor.h b/mvd/CbmMvdSensor.h
index 5b1f3eda22..f93f9ecb79 100644
--- a/mvd/CbmMvdSensor.h
+++ b/mvd/CbmMvdSensor.h
@@ -79,6 +79,7 @@ public:
   void SendInputDigiToHit(CbmMvdDigi* digi);
   void SendInputCluster(CbmMvdCluster* cluster);
   void SetStation(Int_t StationNumber) { fStationNr = StationNumber; }
+  void SendInputToPlugin(Int_t nPlugin, TObject* input);
 
 
   /** Coordinate transformations **/
diff --git a/mvd/plugins/CbmMvdSensorPlugin.cxx b/mvd/plugins/CbmMvdSensorPlugin.cxx
index 9f5bcae6b7..efc92db4f4 100644
--- a/mvd/plugins/CbmMvdSensorPlugin.cxx
+++ b/mvd/plugins/CbmMvdSensorPlugin.cxx
@@ -21,6 +21,7 @@ CbmMvdSensorPlugin::CbmMvdSensorPlugin()
   , initialized(kFALSE)
   , fShowDebugHistos(kFALSE)
   , fName("CbmMvdSensorPlugin")
+  , fPluginIDNumber(-1)
 {
 }
 // -------------------------------------------------------------------------
@@ -33,6 +34,7 @@ CbmMvdSensorPlugin::CbmMvdSensorPlugin(const char* name)
   , initialized(kFALSE)
   , fShowDebugHistos(kFALSE)
   , fName(name)
+  , fPluginIDNumber(-1)
 {
 }
 // -------------------------------------------------------------------------
diff --git a/mvd/plugins/CbmMvdSensorPlugin.h b/mvd/plugins/CbmMvdSensorPlugin.h
index 86a6f2d314..6067439ec5 100644
--- a/mvd/plugins/CbmMvdSensorPlugin.h
+++ b/mvd/plugins/CbmMvdSensorPlugin.h
@@ -21,6 +21,7 @@
 
 class TClonesArray;
 class CbmMvdSensor;
+class TObject;
 
 enum MvdSensorPluginType
 {
@@ -39,6 +40,7 @@ public:
   virtual ~CbmMvdSensorPlugin();
 
   virtual MvdSensorPluginType GetPluginType() = 0;
+  virtual Int_t GetPluginIDNumber (){return fPluginIDNumber;}
   virtual void Init() { ; }
   virtual void Exec() { ; }
   virtual void ExecChain() { ; }
@@ -51,6 +53,7 @@ public:
 
   virtual void SetInputArray(TClonesArray*) { ; }
   virtual void SetInput(CbmMvdPoint*) { ; }
+  virtual void SetInput(TObject*) {;}
   virtual void SetOutputArray(TClonesArray*) { ; }
 
   virtual void SetNextPlugin(CbmMvdSensorPlugin* plugin) { fNextPlugin = plugin; }
@@ -74,6 +77,7 @@ protected:
   Bool_t initialized;
   Bool_t fShowDebugHistos;
   const char* fName;
+  Int_t fPluginIDNumber; //Identifier for the Plugin for debugging purposes. Hardcode in implementation please.
 
 private:
   CbmMvdSensorPlugin& operator=(const CbmMvdSensorPlugin&);
diff --git a/mvd/plugins/PluginNamingConvention.txt b/mvd/plugins/PluginNamingConvention.txt
new file mode 100644
index 0000000000..874f392543
--- /dev/null
+++ b/mvd/plugins/PluginNamingConvention.txt
@@ -0,0 +1,14 @@
+Plugin Naming convention
+--------------------------------------
+fPluginIDNumber
+
+0????? = Task
+1????? = Buffer
+
+?0???  = Designed for event based simulation
+?1???  = Designed for TB simulation
+
+
+0?1??  = Digitizer-Type. Expects CbmMvdPoint as input. Provides CbmMvdDigi as output.
+0?2??  = Clusterfinder-Type. Expects CbmMvdDigi as input. Provides CbmMvdCluster as output.
+0?3??  = Hitfinder-Type. Expects CbmMvdCluster as input. Provides CbmMvdHit as output.
diff --git a/mvd/plugins/tasks/CbmMvdSensorDigitizerTask.cxx b/mvd/plugins/tasks/CbmMvdSensorDigitizerTask.cxx
index 8b376854fa..fadbfc5680 100644
--- a/mvd/plugins/tasks/CbmMvdSensorDigitizerTask.cxx
+++ b/mvd/plugins/tasks/CbmMvdSensorDigitizerTask.cxx
@@ -155,6 +155,7 @@ CbmMvdSensorDigitizerTask::CbmMvdSensorDigitizerTask()
 {
   fRandGen.SetSeed(2736);
   fproduceNoise = kFALSE;
+  fPluginIDNumber= 00100;
 }
 // -------------------------------------------------------------------------
 
@@ -254,7 +255,8 @@ CbmMvdSensorDigitizerTask::CbmMvdSensorDigitizerTask(Int_t iMode)
   , h_LengthVsAngle(NULL)
   , h_LengthVsEloss(NULL)
   , h_ElossVsMomIn(NULL)
-{
+
+{ fPluginIDNumber= 00100;
   cout << "Starting CbmMvdSensorDigitizerTask::CbmMvdSensorDigitizerTask() " << endl;
 
   fRandGen.SetSeed(2736);
-- 
GitLab