From bf076297072b9212f082fe6d3707621ee2bce7b4 Mon Sep 17 00:00:00 2001 From: Nikki Pallat Date: Tue, 23 Sep 2025 12:47:56 -0500 Subject: [PATCH 1/2] Update CAFMaker to fill new trigger variables --- sbncode/CAFMaker/CAFMaker_module.cc | 1 + sbncode/CAFMaker/FillTrigger.cxx | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index 6ede8b23b..c21420c69 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -1606,6 +1606,7 @@ void CAFMaker::produce(art::Event& evt) noexcept { GetByLabelStrict(evt, fParams.TriggerLabel().encode(), extratrig_handle); art::Handle> trig_handle; + std::cout<<"Trigger label: "<> unshifted_trig_handle; diff --git a/sbncode/CAFMaker/FillTrigger.cxx b/sbncode/CAFMaker/FillTrigger.cxx index 8bf82c02c..6a13e420b 100644 --- a/sbncode/CAFMaker/FillTrigger.cxx +++ b/sbncode/CAFMaker/FillTrigger.cxx @@ -23,6 +23,12 @@ namespace caf triggerInfo.trigger_count = addltrig_info.triggerCount; triggerInfo.gate_count = addltrig_info.gateCount; triggerInfo.gate_delta = addltrig_info.gateCountFromPreviousTrigger; + + triggerInfo.passed_trigger = addltrig_info.triggerEmulation; + triggerInfo.num_pairs_over_threshold = addltrig_info.pairsOverThreshold; + triggerInfo.monpulses_flat = addltrig_info.MonPulses; + triggerInfo.monpulse_sizes = addltrig_info.MonPulseSizes; + } void FillTriggerMC(double absolute_time, caf::SRTrigger& triggerInfo) { @@ -32,7 +38,6 @@ namespace caf // Set this to 0 since the "MC" trigger is (for now) always at the spill time triggerInfo.trigger_within_gate = 0.; - // TODO: fill others? } void FillTriggerSBND(caf::SRSBNDTimingInfo& timingInfo, caf::SRTrigger& triggerInfo){ From 4f27e3380b2bcba06e914eb9aed27155e1cbec04 Mon Sep 17 00:00:00 2001 From: Nikki Pallat Date: Tue, 30 Sep 2025 17:59:38 -0500 Subject: [PATCH 2/2] Updated to work with and fill trigger emulation variables --- sbncode/CAFMaker/CAFMakerParams.h | 24 ++++++++++++++++++++++++ sbncode/CAFMaker/CAFMaker_module.cc | 27 +++++++++++++++++++++++++-- sbncode/CAFMaker/CMakeLists.txt | 1 + sbncode/CAFMaker/FillTrigger.cxx | 18 +++++++++++++----- sbncode/CAFMaker/FillTrigger.h | 7 +++++++ 5 files changed, 70 insertions(+), 7 deletions(-) diff --git a/sbncode/CAFMaker/CAFMakerParams.h b/sbncode/CAFMaker/CAFMakerParams.h index 2ecf63f04..06fb87ad6 100644 --- a/sbncode/CAFMaker/CAFMakerParams.h +++ b/sbncode/CAFMaker/CAFMakerParams.h @@ -417,6 +417,30 @@ namespace caf "emuTriggerUnshifted" }; + Atom MonPulsesTriggerLabel { + Name("MonPulsesTriggerLabel"), + Comment("Label of trigger emulation product MonPulses (number of PMT pairs above threshold for all channels) for all flashes."), + art::InputTag("opdaq", "MonPulses", "DetSim") + }; + + Atom MonPulseSizesTriggerLabel { + Name("MonPulseSizesTriggerLabel"), + Comment("Label of trigger emulation product MonPulses Sizes, which gives the length of each trigger response in MonPulses."), + art::InputTag("opdaq", "MonPulseSizes", "DetSim") + }; + + Atom PairsTriggerLabel { + Name("PairsTriggerLabel"), + Comment("Label of number of PMT pairs over threshold."), + art::InputTag("opdaq", "pairsOverThreshold", "DetSim") + }; + + Atom EmulatedTriggerLabel { + Name("EmulatedTriggerLabel"), + Comment("Label of bool of passing the trigger."), + art::InputTag("opdaq", "triggerEmulation", "DetSim") + }; + Atom FlashTrigLabel { Name("FlashTrigLabel"), Comment("Label of bool of passing flash trigger."), diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index c21420c69..80dff4d1f 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -1600,29 +1600,52 @@ void CAFMaker::produce(art::Event& evt) noexcept { //####################################################### // Fill detector & reco //####################################################### - + //Beam gate and Trigger info art::Handle extratrig_handle; GetByLabelStrict(evt, fParams.TriggerLabel().encode(), extratrig_handle); art::Handle> trig_handle; - std::cout<<"Trigger label: "<> unshifted_trig_handle; if (!isRealData) GetByLabelStrict(evt, fParams.UnshiftedTriggerLabel().encode(), unshifted_trig_handle); + //Trigger emulation handles + art::Handle> monpulses_handle; + GetByLabelStrict(evt, fParams.MonPulsesTriggerLabel().encode(), monpulses_handle); + + art::Handle> monpulse_sizes_handle; + GetByLabelStrict(evt, fParams.MonPulseSizesTriggerLabel().encode(), monpulse_sizes_handle); + + art::Handle pairs_handle; + GetByLabelStrict(evt, fParams.PairsTriggerLabel().encode(), pairs_handle); + + art::Handle trigemu_handle; + GetByLabelStrict(evt, fParams.EmulatedTriggerLabel().encode(), trigemu_handle); + + // Check trigger handles const bool isValidTrigger = extratrig_handle.isValid() && trig_handle.isValid() && trig_handle->size() == 1; const bool isValidUnshiftedTrigger = unshifted_trig_handle.isValid() && unshifted_trig_handle->size() == 1; + const bool isValidEmulationTrigger = monpulses_handle.isValid() && monpulse_sizes_handle.isValid() && pairs_handle.isValid() && trigemu_handle.isValid(); const double triggerShift = (isValidUnshiftedTrigger && isValidTrigger)? unshifted_trig_handle->at(0).TriggerTime() - trig_handle->at(0).TriggerTime() : 0.; + // Fill local ExtraTriggerInfo struct + sbn::ExtraTriggerInfo extratrig; + if (extratrig_handle.isValid()) extratrig = *extratrig_handle; + caf::SRTrigger srtrigger; if (isValidTrigger) { FillTrigger(*extratrig_handle, trig_handle->at(0), srtrigger, triggerShift); } + // Fill trigger emulation information + if (isValidEmulationTrigger) { + FillTriggerEmulation(monpulses_handle, monpulse_sizes_handle, pairs_handle, trigemu_handle, srtrigger); + } + // If not real data, fill in enough of the SRTrigger to make (e.g.) the CRT // time referencing work. TODO: add more stuff to a "MC"-Trigger? // No longer needed with incorporation of trigger emulation in the MC. diff --git a/sbncode/CAFMaker/CMakeLists.txt b/sbncode/CAFMaker/CMakeLists.txt index df8b01a54..aa42cba8a 100644 --- a/sbncode/CAFMaker/CMakeLists.txt +++ b/sbncode/CAFMaker/CMakeLists.txt @@ -36,6 +36,7 @@ art_make_library( LIBRARY_NAME sbncode_CAFMaker sbnobj::Common_Reco sbnobj::Common_Analysis sbnobj::Common_PMT_Data + sbnobj::Common_Trigger sbnobj::SBND_CRT sbnobj::SBND_Timing lardataalg::DetectorInfo diff --git a/sbncode/CAFMaker/FillTrigger.cxx b/sbncode/CAFMaker/FillTrigger.cxx index 6a13e420b..03f142dce 100644 --- a/sbncode/CAFMaker/FillTrigger.cxx +++ b/sbncode/CAFMaker/FillTrigger.cxx @@ -24,11 +24,6 @@ namespace caf triggerInfo.gate_count = addltrig_info.gateCount; triggerInfo.gate_delta = addltrig_info.gateCountFromPreviousTrigger; - triggerInfo.passed_trigger = addltrig_info.triggerEmulation; - triggerInfo.num_pairs_over_threshold = addltrig_info.pairsOverThreshold; - triggerInfo.monpulses_flat = addltrig_info.MonPulses; - triggerInfo.monpulse_sizes = addltrig_info.MonPulseSizes; - } void FillTriggerMC(double absolute_time, caf::SRTrigger& triggerInfo) { @@ -49,4 +44,17 @@ namespace caf triggerInfo.trigger_within_gate = diff_ts; } + void FillTriggerEmulation(art::Handle> const& monpulsesFlat, + art::Handle> const& monpulseSizes, + art::Handle const& numPairs, + art::Handle const& passedTrig, + caf::SRTrigger& triggerInfo) { + + triggerInfo.monpulses_flat = *monpulsesFlat; + triggerInfo.monpulse_sizes = *monpulseSizes; + triggerInfo.num_pairs_over_threshold = *numPairs; + triggerInfo.passed_trigger = *passedTrig; + + } + } diff --git a/sbncode/CAFMaker/FillTrigger.h b/sbncode/CAFMaker/FillTrigger.h index ea1aab7eb..1988b6876 100644 --- a/sbncode/CAFMaker/FillTrigger.h +++ b/sbncode/CAFMaker/FillTrigger.h @@ -6,6 +6,7 @@ #include "sbnanaobj/StandardRecord/SRTrigger.h" #include "sbnanaobj/StandardRecord/SRSBNDTimingInfo.h" #include "lardataobj/RawData/TriggerData.h" +#include "art/Framework/Principal/Handle.h" #include @@ -20,6 +21,12 @@ namespace caf void FillTriggerMC(double absolute_time, caf::SRTrigger& triggerInfo); void FillTriggerSBND(caf::SRSBNDTimingInfo& timingInfo, caf::SRTrigger& triggerInfo); + + void FillTriggerEmulation(art::Handle> const& monpulsesFlat, + art::Handle> const& monpulseSizes, + art::Handle const& numPairs, + art::Handle const& passedTrig, + caf::SRTrigger& triggerInfo); } #endif