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 0d4f52118..a6f79d8fa 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -1600,7 +1600,7 @@ 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); @@ -1612,16 +1612,40 @@ void CAFMaker::produce(art::Event& evt) noexcept { 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 392d46566..908bf6559 100644 --- a/sbncode/CAFMaker/FillTrigger.cxx +++ b/sbncode/CAFMaker/FillTrigger.cxx @@ -26,6 +26,7 @@ namespace caf triggerInfo.trigger_count = addltrig_info.triggerCount; triggerInfo.gate_count = addltrig_info.gateCount; triggerInfo.gate_delta = addltrig_info.gateCountFromPreviousTrigger; + } void FillTriggerMC(double absolute_time, caf::SRTrigger& triggerInfo) { @@ -35,7 +36,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){ @@ -49,4 +49,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