From 1bd2188be7a446b163c8e4aefab70e90667e26e9 Mon Sep 17 00:00:00 2001 From: P-A Loizeau <p.-a.loizeau@gsi.de> Date: Fri, 22 Jan 2021 15:50:29 +0100 Subject: [PATCH] Add interface to override the TS params with user values in TimeWinEvtBuild --- .../CbmMcbm2019TimeWinEventBuilderAlgo.cxx | 60 +++++++++++-------- .../CbmMcbm2019TimeWinEventBuilderAlgo.h | 12 ++++ .../CbmMcbm2019TimeWinEventBuilderTask.cxx | 9 +++ .../CbmMcbm2019TimeWinEventBuilderTask.h | 4 ++ 4 files changed, 61 insertions(+), 24 deletions(-) diff --git a/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderAlgo.cxx b/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderAlgo.cxx index f1191e94ad..0973a3c480 100644 --- a/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderAlgo.cxx +++ b/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderAlgo.cxx @@ -67,17 +67,19 @@ Bool_t CbmMcbm2019TimeWinEventBuilderAlgo::InitAlgo() { } // if( kFALSE == CheckDataAvailable( *det ) ) } // for (std::vector<EventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) - /// Access the TS metadata to know TS start tim - fTimeSliceMetaDataArray = - dynamic_cast<TClonesArray*>(ioman->GetObject("TimesliceMetaData")); - if (!fTimeSliceMetaDataArray) { - LOG(fatal) - << "No TS metadata input found" - << " => Please check in the unpacking macro if the following line was " - "present!" - << std::endl - << "source->SetWriteOutputFlag(kTRUE); // For writing TS metadata"; - } // if (!fTimeSliceMetaDataArray) + /// Access the TS metadata to know TS start time if needed + if (fdTsStartTime < 0 || fdTsLength < 0 || fdTsOverLength < 0) { + fTimeSliceMetaDataArray = + dynamic_cast<TClonesArray*>(ioman->GetObject("TimesliceMetaData")); + if (!fTimeSliceMetaDataArray) { + LOG(fatal) + << "No TS metadata input found" + << " => Please check in the unpacking macro if the following line was " + "present!" + << std::endl + << "source->SetWriteOutputFlag(kTRUE); // For writing TS metadata"; + } // if (!fTimeSliceMetaDataArray) + } // if ( fdTsStartTime < 0 || fdTsLength < 0 || fdTsOverLength < 0 ) if (fbFillHistos) { CreateHistograms(); } // if( fbFillHistos ) @@ -209,37 +211,47 @@ void CbmMcbm2019TimeWinEventBuilderAlgo::BuildEvents() { template<class DigiSeed> void CbmMcbm2019TimeWinEventBuilderAlgo::LoopOnSeeds() { - pTsMetaData = - dynamic_cast<TimesliceMetaData*>(fTimeSliceMetaDataArray->At(0)); - if (nullptr == pTsMetaData) - LOG(fatal) << Form("CbmMcbm2019TimeWinEventBuilderAlgo::LoopOnSeeds => " - "No TS metadata found for TS %6u.", - fuNrTs); + /// Access the TS metadata if needed to know TS start time and overlap size + Double_t dTsStartTime = fdTsStartTime; + Double_t dOverlapStart = fdTsStartTime + fdTsLength; + Double_t dOverlapSize = fdTsOverLength; + if (fdTsStartTime < 0 || fdTsLength < 0 || fdTsOverLength < 0) { + pTsMetaData = + dynamic_cast<TimesliceMetaData*>(fTimeSliceMetaDataArray->At(0)); + if (nullptr == pTsMetaData) + LOG(fatal) << Form("CbmMcbm2019TimeWinEventBuilderAlgo::LoopOnSeeds => " + "No TS metadata found for TS %6u.", + fuNrTs); + + dTsStartTime = pTsMetaData->GetStartTime(); + dOverlapStart = pTsMetaData->GetOverlapStartTime(); + dOverlapSize = pTsMetaData->GetOverlapDuration(); + } // if ( fdTsStartTime < 0 || fdTsLength < 0 || fdTsOverLength < 0 ) /// Print warning in first TS if time window borders out of potential overlap if ((0.0 < fdEarliestTimeWinBeg - && pTsMetaData->GetOverlapDuration() < fdLatestTimeWinEnd) - || (pTsMetaData->GetOverlapDuration() < fdWidestTimeWinRange)) { + && dOverlapSize < fdLatestTimeWinEnd) + || (dOverlapSize < fdWidestTimeWinRange)) { LOG(warning) << "CbmMcbm2019TimeWinEventBuilderAlgo::LoopOnSeeds => " << Form("Event window not fitting in TS overlap, risk of " "incomplete events: %f %f %f %llu", fdEarliestTimeWinBeg, fdLatestTimeWinEnd, fdWidestTimeWinRange, - pTsMetaData->GetOverlapDuration()); + dOverlapSize); } // if end of event window does not fit in overlap for a seed at edge of TS core /// Define an acceptance window for the seeds in order to use the overlap /// part of the TS to avoid incomplete events Double_t dSeedWindowBeg = - pTsMetaData->GetStartTime() + dTsStartTime + (0.0 < fdEarliestTimeWinBeg ? 0.0 : -fdEarliestTimeWinBeg); Double_t dSeedWindowEnd = - pTsMetaData->GetOverlapStartTime() + dOverlapStart + (0.0 < fdEarliestTimeWinBeg ? 0.0 : -fdEarliestTimeWinBeg); if (fbIgnoreTsOverlap) { - dSeedWindowBeg = pTsMetaData->GetStartTime(); - dSeedWindowEnd = pTsMetaData->GetOverlapStartTime(); + dSeedWindowBeg = dTsStartTime; + dSeedWindowEnd = dOverlapStart; } // if( fbIgnoreTsOverlap ) if (ECbmModuleId::kT0 == fRefDet.detId) { diff --git a/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderAlgo.h b/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderAlgo.h index af47dcd01b..2173184714 100644 --- a/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderAlgo.h +++ b/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderAlgo.h @@ -153,6 +153,14 @@ public: void SetTriggerWindow(ECbmModuleId selDet, Double_t dWinBeg, Double_t dWinEnd); + void SetTsParameters(Double_t dTsStartTime, + Double_t dTsLength, + Double_t dTsOverLength) { + fdTsStartTime = dTsStartTime; + fdTsLength = dTsLength; + fdTsOverLength = fdTsOverLength; + } + /// Control flags void SetEventOverlapMode(EOverlapMode mode) { fOverMode = mode; } void SetIgnoreTsOverlap(Bool_t bFlagIn = kTRUE) { @@ -225,6 +233,10 @@ private: Double_t fdLatestTimeWinEnd = kdDefaultTimeWinEnd; Double_t fdWidestTimeWinRange = kdDefaultTimeWinEnd - kdDefaultTimeWinBeg; + Double_t fdTsStartTime = -1; + Double_t fdTsLength = -1; + Double_t fdTsOverLength = -1; + /// Data input /// FIXME: usage of CbmDigiManager in FairMq context?!? /// => Maybe by registering vector (or vector reference) to ioman in Device? diff --git a/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.cxx b/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.cxx index a3e7cd99b0..56792605a7 100644 --- a/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.cxx +++ b/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.cxx @@ -169,6 +169,15 @@ void CbmMcbm2019TimeWinEventBuilderTask::SetTriggerWindow(ECbmModuleId det, if (nullptr != fpAlgo) fpAlgo->SetTriggerWindow(det, dWinBeg, dWinEnd); } + +void CbmMcbm2019TimeWinEventBuilderTask::SetTsParameters(Double_t dTsStartTime, + Double_t dTsLength, + Double_t dTsOverLength) { + if (nullptr != fpAlgo) fpAlgo->SetTsParameters(dTsStartTime, + dTsLength, + dTsOverLength); +} + void CbmMcbm2019TimeWinEventBuilderTask::SetEventOverlapMode( EOverlapMode mode) { if (nullptr != fpAlgo) fpAlgo->SetEventOverlapMode(mode); diff --git a/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.h b/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.h index 4748f0c8c4..2c3b87dd97 100644 --- a/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.h +++ b/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.h @@ -72,6 +72,10 @@ public: void SetTriggerWindow(ECbmModuleId det, Double_t dWinBeg, Double_t dWinEnd); + void SetTsParameters(Double_t dTsStartTime, + Double_t dTsLength, + Double_t dTsOverLength); + void SetEventOverlapMode(EOverlapMode mode); void SetIgnoreTsOverlap(Bool_t bFlagIn); -- GitLab