From 6c772d25ceff600f0aea7999fe6b171ab48789f3 Mon Sep 17 00:00:00 2001
From: P-A Loizeau <p.-a.loizeau@gsi.de>
Date: Thu, 26 Nov 2020 15:08:05 +0100
Subject: [PATCH] Use dynamic cast when getting the pointer on CbmEvent array

---
 fles/mcbm2018/tasks/CbmCheckEvents.cxx         | 18 +++++++++++++++---
 macro/beamtime/mcbm2019/check_events.C         |  6 ++++--
 .../rich/mcbm/CbmRichMCbmAerogelAna.cxx        |  2 +-
 reco/detectors/rich/mcbm/CbmRichMCbmQaReal.cxx |  4 ++--
 .../rich/mcbm/CbmRichMCbmQaRichOnly.cxx        |  2 +-
 5 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/fles/mcbm2018/tasks/CbmCheckEvents.cxx b/fles/mcbm2018/tasks/CbmCheckEvents.cxx
index 7467c4e91e..3db4b26f44 100644
--- a/fles/mcbm2018/tasks/CbmCheckEvents.cxx
+++ b/fles/mcbm2018/tasks/CbmCheckEvents.cxx
@@ -27,6 +27,8 @@
 #include <TFile.h>
 
 #include <iomanip>
+#include <typeinfo>
+
 using std::fixed;
 using std::setprecision;
 
@@ -79,8 +81,18 @@ InitStatus CbmCheckEvents::Init() {
     LOG(info) << "No TClonesArray with TOF digis found.";
   }
 
-  fEvents = static_cast<TClonesArray*>(ioman->GetObject("CbmEvent"));
-  if (!fEvents) { LOG(fatal) << "No TClonesArray with events found."; }
+  fEvents = dynamic_cast<TClonesArray*>(ioman->GetObject("CbmEvent"));
+  if (nullptr == fEvents) {
+
+    if (nullptr != (ioman->GetObject("Event"))) {
+      LOG(error) << "Got pointer of type"
+                 << typeid(ioman->GetObject("Event")).name();
+      LOG(error) << "Got Object of type"
+                 << typeid(*(ioman->GetObject("Event"))).name();
+    }  // if( nullptr != (ioman->GetObject("Event") )
+    LOG(fatal) << "No TClonesArray with events found.";
+  }  // if (nullptr == fEvents)
+
 
   CreateHistos();
 
@@ -188,7 +200,7 @@ void CbmCheckEvents::Exec(Option_t* /*option*/) {
 
   // Loop over all CbmEvents in the time slice
   for (Int_t iEvent = 0; iEvent < nrEvents; iEvent++) {
-    CbmEvent* event = static_cast<CbmEvent*>(fEvents->At(iEvent));
+    CbmEvent* event = dynamic_cast<CbmEvent*>(fEvents->At(iEvent));
     fEventSize->Fill(event->GetNofData());
     fEventLength->Fill(event->GetEndTime() - event->GetStartTime());
     fLengthvsTS->Fill(fNrTs, event->GetEndTime() - event->GetStartTime(), 1);
diff --git a/macro/beamtime/mcbm2019/check_events.C b/macro/beamtime/mcbm2019/check_events.C
index d4616a22ad..ab35b5918e 100644
--- a/macro/beamtime/mcbm2019/check_events.C
+++ b/macro/beamtime/mcbm2019/check_events.C
@@ -46,9 +46,11 @@ void check_events(Int_t nEvents      = 10,
 
   FairFileSource* inputSource = new FairFileSource(InputFile);
   inputSource->AddFriend(InputFileEvent);
-
   run->SetSource(inputSource);
-  run->SetOutputFile(OutputFile);
+
+  FairRootFileSink* outputSink = new FairRootFileSink(OutputFile);
+  run->SetSink(outputSink);
+
 
   run->SetEventHeaderPersistence(kFALSE);
 
diff --git a/reco/detectors/rich/mcbm/CbmRichMCbmAerogelAna.cxx b/reco/detectors/rich/mcbm/CbmRichMCbmAerogelAna.cxx
index 693cfd0cb7..3fae18de7b 100644
--- a/reco/detectors/rich/mcbm/CbmRichMCbmAerogelAna.cxx
+++ b/reco/detectors/rich/mcbm/CbmRichMCbmAerogelAna.cxx
@@ -103,7 +103,7 @@ InitStatus CbmRichMCbmAerogelAna::Init() {
 
   //fT0Digis = ioman->InitObjectAs<std::vector<CbmTofDigi> const *>("T0Digi");
 
-  fCbmEvent = (TClonesArray*) ioman->GetObject("CbmEvent");
+  fCbmEvent = dynamic_cast<TClonesArray*>(ioman->GetObject("CbmEvent"));
   if (nullptr == fCbmEvent) { Fatal("fTofDigis::Init", "No Event!"); }
 
   InitHistograms();
diff --git a/reco/detectors/rich/mcbm/CbmRichMCbmQaReal.cxx b/reco/detectors/rich/mcbm/CbmRichMCbmQaReal.cxx
index 1df0986057..338c8eb515 100644
--- a/reco/detectors/rich/mcbm/CbmRichMCbmQaReal.cxx
+++ b/reco/detectors/rich/mcbm/CbmRichMCbmQaReal.cxx
@@ -135,13 +135,13 @@ InitStatus CbmRichMCbmQaReal::Init() {
 	if ( pSetup->IsActive(ECbmModuleId::kRich) ) {
 		pSetup->GetGeoTag(ECbmModuleId::kRich, geoTag);
     }
-    
+
     if (geoTag == "v20d") RichZPos = 340.8;
     std::cout<<"mRICH Geo Tag is "<< geoTag<< ". Z Position of PMT plane set to "<<RichZPos<<"."<<std::endl;
     */
   // ---------------------------------
 
-  fCbmEvent = (TClonesArray*) ioman->GetObject("CbmEvent");
+  fCbmEvent = dynamic_cast<TClonesArray*>(ioman->GetObject("CbmEvent"));
   if (nullptr == fCbmEvent) { Fatal("CbmRichMCbmQaReal::Init", "No Event!"); }
 
   InitHistograms();
diff --git a/reco/detectors/rich/mcbm/CbmRichMCbmQaRichOnly.cxx b/reco/detectors/rich/mcbm/CbmRichMCbmQaRichOnly.cxx
index 5699df0332..68c6a3eda6 100644
--- a/reco/detectors/rich/mcbm/CbmRichMCbmQaRichOnly.cxx
+++ b/reco/detectors/rich/mcbm/CbmRichMCbmQaRichOnly.cxx
@@ -101,7 +101,7 @@ InitStatus CbmRichMCbmQaRichOnly::Init() {
     Fatal("CbmRichMCbmQaRichOnly::Init", "No Rich Rings!");
   }
 
-  fCbmEvent = (TClonesArray*) ioman->GetObject("CbmEvent");
+  fCbmEvent = dynamic_cast<TClonesArray*>(ioman->GetObject("CbmEvent"));
   if (nullptr == fCbmEvent) {
     Fatal("CbmRichMCbmQaRichOnly::Init", "No Event!");
   }
-- 
GitLab