From 0cb04aec872d89cc357c5a1f3dd536a6b1d662d4 Mon Sep 17 00:00:00 2001 From: Michael Deveaux <deveaux@physik.uni-frankfurt.de> Date: Tue, 17 Jan 2023 13:51:41 +0100 Subject: [PATCH] CbmMvdDetector::DetectPlugin (pluginID) added This method is to detect the position of a plugin with the ID = plugin ID in the plugin array of the sensors. The plugin ID is defined in the constructor of the plugin. The position is used to send data directly to the plugins. --- mvd/CbmMvdDetector.cxx | 23 +++++++++++++++++-- mvd/CbmMvdDetector.h | 4 +++- mvd/CbmMvdDigitizer.cxx | 22 +++++++++++++++++- mvd/CbmMvdDigitizer.h | 3 ++- mvd/CbmMvdSensor.h | 1 + .../tasks/CbmMvdSensorDigitizerTask.cxx | 11 +++++++-- mvd/plugins/tasks/CbmMvdSensorDigitizerTask.h | 1 + 7 files changed, 58 insertions(+), 7 deletions(-) diff --git a/mvd/CbmMvdDetector.cxx b/mvd/CbmMvdDetector.cxx index d7c0ee9e09..560141e41e 100644 --- a/mvd/CbmMvdDetector.cxx +++ b/mvd/CbmMvdDetector.cxx @@ -265,6 +265,26 @@ void CbmMvdDetector::AddPlugin(CbmMvdSensorPlugin* plugin) //---------------------------------------------------------------------- +Int_t CbmMvdDetector::DetectPlugin(Int_t pluginID) +{ + // Detects the position of a plugin with a given Plugin-ID (set in the plugin implementation constructor) in the plugin-array of the sensors + + Int_t nDigitizerPlugin=-1; + + if (!fSensorArrayFilled) {cout << "-W - CbmMvdDetector::DetectPlugin: You tried to access sensor plugins while the detector is not initialized yet." << endl; return -1;} + CbmMvdSensor* sensor=GetSensor(0); + TObjArray* pluginArray= sensor->GetPluginArray(); + + Int_t nPlugin=pluginArray->GetEntries(); + for(Int_t i=0; i<nPlugin;i++) { + CbmMvdSensorPlugin* plugin= (CbmMvdSensorPlugin*) pluginArray->At(i); + // cout << "- I - CbmMvdDetector::DetectPlugin: PlugInID = " << plugin->GetPluginIDNumber() << " Position: "<< i << endl; + if (pluginID==plugin->GetPluginIDNumber()){return i;} + } + + + return -1; +} //----------------------------------------------------------------------- void CbmMvdDetector::Init() @@ -344,7 +364,6 @@ void CbmMvdDetector::SendInput(TClonesArray* input) * * **/ - CbmMvdPoint* point; Int_t nEntries = input->GetEntriesFast(); Int_t nSensors = fSensorArray->GetEntriesFast(); @@ -357,7 +376,7 @@ void CbmMvdDetector::SendInput(TClonesArray* input) sensor = (CbmMvdSensor*) fSensorArray->At(k); if (point->GetDetectorID() == sensor->GetDetectorID()) { - sensor->SendInput(point); + sensor->SendInputToPlugin(sensor->GetDigiPlugin(),(TObject*) point); send = true; } } diff --git a/mvd/CbmMvdDetector.h b/mvd/CbmMvdDetector.h index 31cac62bc8..53bcf8a702 100644 --- a/mvd/CbmMvdDetector.h +++ b/mvd/CbmMvdDetector.h @@ -73,10 +73,12 @@ public: TClonesArray* GetOutputCluster(); //khun TClonesArray* GetOutputArray(Int_t nPlugin); TClonesArray* GetSensorArray(){return fSensorArray;}; + CbmMvdSensor* GetSensor(Int_t nSensor) {return (CbmMvdSensor*) fSensorArray->At(nSensor);} TClonesArray* GetSensorIDArray(){return fSensorIDArray;}; // TClonesArray* GetClonesArray(Int_t dataLevel){ return 0;} Int_t GetSensorArraySize() { return (fSensorArray->GetEntriesFast()); } - UInt_t GetPluginArraySize() { return fPluginCount - 1; } + Int_t GetPluginArraySize() { return fPluginCount - 1; } + Int_t DetectPlugin(Int_t pluginID); TClonesArray* GetCurrentEvent(); diff --git a/mvd/CbmMvdDigitizer.cxx b/mvd/CbmMvdDigitizer.cxx index a8f0eeef0e..deb978ea94 100644 --- a/mvd/CbmMvdDigitizer.cxx +++ b/mvd/CbmMvdDigitizer.cxx @@ -270,6 +270,7 @@ InitStatus CbmMvdDigitizer::Init() return kERROR; } } + CbmMvdSensorDigitizerTask* digiTask = new CbmMvdSensorDigitizerTask(); fDetector->AddPlugin(digiTask); @@ -307,7 +308,8 @@ InitStatus CbmMvdDigitizer::ReInit() { return kSUCCESS; } // ----- Virtual method Finish ----------------------------------------- void CbmMvdDigitizer::Finish() -{ +{ //Int_t i = DetectPlugin (100); + //cout << "CbmMvdDigitizer::Finish() Autodetect: " << i <<" Manual Detect " << fDigiPluginNr << endl; // cout<< endl << "finishing" << endl; fDetector->Finish(); PrintParameters(); @@ -336,6 +338,24 @@ void CbmMvdDigitizer::ResetArrays() void CbmMvdDigitizer::GetMvdGeometry() {} // ------------------------------------------------------------------------- +Int_t CbmMvdDigitizer::DetectPlugin(Int_t pluginID) +{ Int_t nDigitizerPlugin=-1; + + CbmMvdDetector* detector= CbmMvdDetector::Instance(); + return detector->DetectPlugin(pluginID); + /*CbmMvdSensor* sensor=detector->GetSensor(0); + TObjArray* pluginArray= sensor->GetPluginArray(); + + Int_t nPlugin=pluginArray->GetEntries(); + for(Int_t i=0; i<nPlugin;i++) { + CbmMvdSensorPlugin* plugin= (CbmMvdSensorPlugin*) pluginArray->At(i); + cout << "CbmMvdDigitizer::DetectDigitizerPlugin: PlugInID = " << plugin->GetPluginIDNumber() << endl; + if (pluginID==plugin->GetPluginIDNumber()){return i;} + } + + + return -1;*/ +} // ----- Private method PrintParameters -------------------------------- void CbmMvdDigitizer::PrintParameters() diff --git a/mvd/CbmMvdDigitizer.h b/mvd/CbmMvdDigitizer.h index c5ea494d58..9be5dea481 100644 --- a/mvd/CbmMvdDigitizer.h +++ b/mvd/CbmMvdDigitizer.h @@ -66,6 +66,7 @@ public: void ShowDebugHistograms() { fShowDebugHistos = kTRUE; } void SetProduceNoise() { fNoiseSensors = kTRUE; }; + Int_t DetectPlugin(Int_t pluginID); /** @brief Clear data arrays **/ @@ -92,7 +93,7 @@ private: std::pair<Float_t, Int_t> fPerformanceDigi; - UInt_t fDigiPluginNr; + Int_t fDigiPluginNr; Double_t fFakeRate; // Fake hit rate Int_t fNPileup; // Number of pile-up background events diff --git a/mvd/CbmMvdSensor.h b/mvd/CbmMvdSensor.h index f93f9ecb79..15678fb606 100644 --- a/mvd/CbmMvdSensor.h +++ b/mvd/CbmMvdSensor.h @@ -93,6 +93,7 @@ public: Int_t GetDigiPlugin() const { return fDigiPlugin; }; Int_t GetHitPlugin() const { return fHitPlugin; }; Int_t GetClusterPlugin() const { return fClusterPlugin; } + TObjArray* GetPluginArray() {return fPluginArray;} void SetDigiPlugin(const Int_t& nPlugin) { fDigiPlugin = nPlugin; }; void SetHitPlugin(const Int_t& nPlugin) { fHitPlugin = nPlugin; }; diff --git a/mvd/plugins/tasks/CbmMvdSensorDigitizerTask.cxx b/mvd/plugins/tasks/CbmMvdSensorDigitizerTask.cxx index fadbfc5680..9f3abbe13c 100644 --- a/mvd/plugins/tasks/CbmMvdSensorDigitizerTask.cxx +++ b/mvd/plugins/tasks/CbmMvdSensorDigitizerTask.cxx @@ -155,7 +155,7 @@ CbmMvdSensorDigitizerTask::CbmMvdSensorDigitizerTask() { fRandGen.SetSeed(2736); fproduceNoise = kFALSE; - fPluginIDNumber= 00100; + fPluginIDNumber= 100; } // ------------------------------------------------------------------------- @@ -256,7 +256,7 @@ CbmMvdSensorDigitizerTask::CbmMvdSensorDigitizerTask(Int_t iMode) , h_LengthVsEloss(NULL) , h_ElossVsMomIn(NULL) -{ fPluginIDNumber= 00100; +{ fPluginIDNumber= 100; cout << "Starting CbmMvdSensorDigitizerTask::CbmMvdSensorDigitizerTask() " << endl; fRandGen.SetSeed(2736); @@ -386,6 +386,13 @@ void CbmMvdSensorDigitizerTask::SetInput(CbmMvdPoint* point) new ((*fInputPoints)[fInputPoints->GetEntriesFast()]) CbmMvdPoint(*((CbmMvdPoint*) point)); } +//----------------------------------------------------------------------------- + +void CbmMvdSensorDigitizerTask::SetInput(TObject* point) +{ + + new ((*fInputPoints)[fInputPoints->GetEntriesFast()]) CbmMvdPoint(*((CbmMvdPoint*) point)); +} // -------------- public method ExecChain ------------------------------------ diff --git a/mvd/plugins/tasks/CbmMvdSensorDigitizerTask.h b/mvd/plugins/tasks/CbmMvdSensorDigitizerTask.h index 9984b57099..026ab52cef 100644 --- a/mvd/plugins/tasks/CbmMvdSensorDigitizerTask.h +++ b/mvd/plugins/tasks/CbmMvdSensorDigitizerTask.h @@ -67,6 +67,7 @@ public: /** fill buffer **/ void SetInputArray(TClonesArray* inputStream); void SetInput(CbmMvdPoint* point); + void SetInput(TObject*); //overwrite /** Execute **/ void Exec(); -- GitLab