diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx index d6460d99ab73c367ce111ec0434a2a7ade1f3abe..1e5a36a90e1bd766430e600e903838277a06b711 100644 --- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx +++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx @@ -421,12 +421,59 @@ void CbmAlgoBuildRawEvents::CheckSeed(Double_t dSeedTime, UInt_t uSeedDigiIdx) } } + + /// Check if this reference detector passes the trigger conditions to "exit early" + /// then check for each detectors if it also passes + /// => Replaces the call to CheckTriggerCondition after a complete loop + if (kTRUE == CheckTriggerConditions(fCurrentEvent, fRefDet)) { + + /// Search for matches for each detector in selection list + bool bAllTriggersOk = true; + for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) { + SearchMatches(dSeedTime, *det); + + /// Check if this det pass the trigger conditions to "exit early" + if (kFALSE == CheckTriggerConditions(fCurrentEvent, *det)) { // + bAllTriggersOk = false; + break; + } + } + if (bAllTriggersOk) { + fdPrevEvtTime = dSeedTime; + + /// In case of NoOverlap or MergeOverlap, we can and should start checking the next window + /// from end of current window in order to save CPU and avoid duplicating + if (EOverlapModeRaw::NoOverlap == fOverMode || EOverlapModeRaw::MergeOverlap == fOverMode) { + /// Update reference detector + if (fRefDet.detId != ECbmModuleId::kNotExist) { fRefDet.fuStartIndex = fRefDet.fuEndIndex; } + /// Loop on selection detectors + for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) { + (*det).fuStartIndex = (*det).fuEndIndex; + } + } + // LOG(info) << Form("Accept seed %9.0f due to Selection Trigger requirements", dSeedTime); + } + else { + // LOG(info) << Form("Reject seed %9.0f due to Selection Trigger requirements", dSeedTime); + LOG(debug1) << "Reject seed due to Trigger requirements"; + delete fCurrentEvent; + fCurrentEvent = nullptr; /// delete does NOT set a pointer to nullptr... + } + } + else { + // LOG(info) << Form("Reject seed %9.0f due to Reference Trigger requirements", dSeedTime); + LOG(debug1) << "Reject seed due to Trigger requirements"; + delete fCurrentEvent; + fCurrentEvent = nullptr; /// delete does NOT set a pointer to nullptr... + } + /* /// Search for matches for each detector in selection list for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) { SearchMatches(dSeedTime, *det); } CheckTriggerCondition(dSeedTime); + */ } //----------------------------------------------------------------------