From d687c5f03861f1c4e96e16d585b09047279e0bc4 Mon Sep 17 00:00:00 2001 From: Dominik Smith <smith@th.physik.uni-frankfurt.de> Date: Tue, 23 Mar 2021 14:40:05 +0100 Subject: [PATCH] CbmAlgoBuildRawEvents: Implemented timing using TStopwatch. --- .../mcbm2020/unpack_tsa_mcbm_with_eb.C | 7 +++--- .../digis/CbmAlgoBuildRawEvents.cxx | 25 ++++++++++++++++++- .../digis/CbmAlgoBuildRawEvents.h | 14 ++++++++--- .../digis/CbmTaskBuildRawEvents.h | 5 ++++ 4 files changed, 44 insertions(+), 7 deletions(-) diff --git a/macro/beamtime/mcbm2020/unpack_tsa_mcbm_with_eb.C b/macro/beamtime/mcbm2020/unpack_tsa_mcbm_with_eb.C index dc23fab9eb..29981ad068 100644 --- a/macro/beamtime/mcbm2020/unpack_tsa_mcbm_with_eb.C +++ b/macro/beamtime/mcbm2020/unpack_tsa_mcbm_with_eb.C @@ -634,6 +634,7 @@ Bool_t unpack_tsa_mcbm_with_eb(TString inFile = "", CbmTaskBuildRawEvents* eventBuilder = new CbmTaskBuildRawEvents(); eventBuilder->SetFillHistos(kTRUE); + eventBuilder->SetTimings(kTRUE); //activate for diagnostic runs eventBuilder->SetEventOverlapMode(EOverlapModeRaw::NoOverlap); // eventBuilder->SetEventOverlapMode(EOverlapModeRaw::MergeOverlap); @@ -743,9 +744,9 @@ Bool_t unpack_tsa_mcbm_with_eb(TString inFile = "", Double_t rtime = timer.RealTime(); Double_t ctime = timer.CpuTime(); std::cout << std::endl << std::endl; - std::cout << ">>> unpack_tsa_mcbm: Macro finished successfully." << std::endl; - std::cout << ">>> unpack_tsa_mcbm: Output file is " << unpOutFile << std::endl; - std::cout << ">>> unpack_tsa_mcbm: Real time " << rtime << " s, CPU time " << ctime << " s" << std::endl; + std::cout << ">>> unpack_tsa_mcbm_with_eb: Macro finished successfully." << std::endl; + std::cout << ">>> unpack_tsa_mcbm_with_eb: Output file is " << unpOutFile << std::endl; + std::cout << ">>> unpack_tsa_mcbm_with_eb: Real time " << rtime << " s, CPU time " << ctime << " s" << std::endl; std::cout << std::endl; /// --- Screen output for automatic tests diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx index 486597bb90..8b1882681c 100644 --- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx +++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx @@ -31,6 +31,7 @@ #include <TH1.h> #include <TH2.h> #include <THttpServer.h> +#include <TStopwatch.h> template<> void CbmAlgoBuildRawEvents::LoopOnSeeds<Double_t>(); @@ -39,6 +40,11 @@ Bool_t CbmAlgoBuildRawEvents::InitAlgo() { LOG(info) << "CbmAlgoBuildRawEvents::InitAlgo => Starting sequence"; + if (fbGetTimings) { + fTimer = new TStopwatch; + fTimer->Start(); + } + /// Check if reference detector is set and seed data are available, /// otherwise look for explicit seed times if (fRefDet.detId == ECbmModuleId::kNotExist) { @@ -73,12 +79,26 @@ Bool_t CbmAlgoBuildRawEvents::InitAlgo() } } if (fbFillHistos) { CreateHistograms(); } + if (fTimer != nullptr) { fTimer->Stop(); } LOG(info) << "CbmAlgoBuildRawEvents::InitAlgo => Done"; return kTRUE; } -void CbmAlgoBuildRawEvents::Finish() {} +void CbmAlgoBuildRawEvents::Finish() +{ + if (fbGetTimings) { PrintTimings(); } +} + +void CbmAlgoBuildRawEvents::PrintTimings() +{ + if (fTimer == nullptr) { LOG(fatal) << "Trying to print timings but timer not set"; } + else { + Double_t rtime = fTimer->RealTime(); + Double_t ctime = fTimer->CpuTime(); + LOG(info) << "CbmAlgoBuildRawEvents: Real time " << rtime << " s, CPU time " << ctime << " s"; + } +} void CbmAlgoBuildRawEvents::ClearEventVector() { @@ -95,6 +115,7 @@ void CbmAlgoBuildRawEvents::ClearEventVector() void CbmAlgoBuildRawEvents::ProcessTs() { LOG_IF(info, fuNrTs % 1000 == 0) << "Begin of TS " << fuNrTs; + if (fTimer != nullptr) { fTimer->Start(kFALSE); } InitTs(); InitSeedWindow(); BuildEvents(); @@ -113,6 +134,8 @@ void CbmAlgoBuildRawEvents::ProcessTs() LOG(debug) << "Found " << fEventVector.size() << " triggered events"; if (fbFillHistos) { FillHistos(); } + if (fTimer != nullptr) { fTimer->Stop(); } + fuNrTs++; } diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h index 9327618610..13730e12ae 100644 --- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h +++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h @@ -38,6 +38,7 @@ class TClonesArray; class TH1; class TH2; class TNamed; +class TStopwatch; class TCanvas; enum class EOverlapModeRaw @@ -130,6 +131,10 @@ public: void SetFillHistos(Bool_t var) { fbFillHistos = var; } void ResetHistograms(Bool_t bResetTime = kTRUE); + /** stopwatch timing **/ + void SetTimings(Bool_t var) { fbGetTimings = var; } + void PrintTimings(); + void SetReferenceDetector(ECbmModuleId refDet, ECbmDataType dataTypeIn, std::string sNameIn, UInt_t uTriggerMinDigisIn = 0, Int_t iTriggerMaxDigisIn = -1, Double_t fdTimeWinBegIn = -100, Double_t fdTimeWinEndIn = 100); @@ -239,12 +244,15 @@ private: /// User parameters /// Control flags - Bool_t fbIgnoreTsOverlap = kFALSE; //! Ignore data in Overlap part of the TS - Bool_t fbFillHistos {kTRUE}; //! Switch ON/OFF filling of histograms - Bool_t fbUseMuchBeamtimeDigi = kTRUE; //! Switch between MUCH digi classes + Bool_t fbIgnoreTsOverlap = kFALSE; //! Ignore data in Overlap part of the TS + Bool_t fbFillHistos {kTRUE}; //! Switch ON/OFF filling of histograms + Bool_t fbUseMuchBeamtimeDigi = kTRUE; //! Switch between MUCH digi classes + Bool_t fbGetTimings = kFALSE; //! Measure CPU time using stopwatch /// Event building mode and detectors selection EOverlapModeRaw fOverMode {EOverlapModeRaw::AllowOverlap}; + TStopwatch* fTimer = nullptr; //! is create when fbGetTimings is set before init + RawEventBuilderDetector fRefDet = RawEventBuilderDetector(ECbmModuleId::kT0, ECbmDataType::kT0Digi, "T0"); std::vector<RawEventBuilderDetector> fvDets = { RawEventBuilderDetector(ECbmModuleId::kSts, ECbmDataType::kStsDigi, "kSts"), diff --git a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h index aa683472f5..deaf093bf6 100644 --- a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h +++ b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h @@ -115,6 +115,11 @@ public: if (nullptr != fpAlgo) fpAlgo->ChangeMuchBeamtimeDigiFlag(bFlagIn); fbUseMuchBeamtimeDigi = bFlagIn; } + void SetTimings(Bool_t bFlagIn = kTRUE) + { + if (nullptr != fpAlgo) fpAlgo->SetTimings(bFlagIn); + } + void SetSeedTimeFiller(RawEventBuilderDetector seedDet); void AddSeedTimeFillerToList(RawEventBuilderDetector seedDet); void DumpSeedTimesFromDetList(); -- GitLab