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