@@ -1392,9 +1392,19 @@ void CAFMaker::produce(art::Event& evt) noexcept {
13921392 art::Handle<std::vector<raw::Trigger>> trig_handle;
13931393 GetByLabelStrict (evt, fParams .TriggerLabel ().encode (), trig_handle);
13941394
1395+ art::Handle<std::vector<raw::Trigger>> unshifted_trig_handle;
1396+ if (!isRealData)
1397+ GetByLabelStrict (evt, fParams .UnshiftedTriggerLabel ().encode (), unshifted_trig_handle);
1398+
1399+ const bool isValidTrigger = extratrig_handle.isValid () && trig_handle.isValid () && trig_handle->size () == 1 ;
1400+ const bool isValidUnshiftedTrigger = unshifted_trig_handle.isValid () && unshifted_trig_handle->size () == 1 ;
1401+
1402+ const double triggerShift = (isValidUnshiftedTrigger && isValidTrigger)?
1403+ unshifted_trig_handle->at (0 ).TriggerTime () - trig_handle->at (0 ).TriggerTime () : 0 .;
1404+
13951405 caf::SRTrigger srtrigger;
1396- if (extratrig_handle. isValid () && trig_handle. isValid () && trig_handle-> size () == 1 ) {
1397- FillTrigger (*extratrig_handle, trig_handle->at (0 ), srtrigger);
1406+ if (isValidTrigger ) {
1407+ FillTrigger (*extratrig_handle, trig_handle->at (0 ), srtrigger, triggerShift );
13981408 }
13991409 // If not real data, fill in enough of the SRTrigger to make (e.g.) the CRT
14001410 // time referencing work. TODO: add more stuff to a "MC"-Trigger?
@@ -1933,7 +1943,7 @@ void CAFMaker::produce(art::Event& evt) noexcept {
19331943 const sbn::PFPCNNScore *cnnScores = fmCNNScores.at (iPart).at (0 ).get ();
19341944 FillCNNScores (thisParticle, cnnScores, pfp);
19351945 }
1936-
1946+
19371947 if (!thisTrack.empty ()) { // it has a track!
19381948 assert (thisTrack.size () == 1 );
19391949
@@ -2112,7 +2122,23 @@ void CAFMaker::produce(art::Event& evt) noexcept {
21122122 // time from MC.
21132123 //
21142124 // PMT's:
2115- double PMT_reference_time = fParams .ReferencePMTFromTriggerToBeam () ? srtrigger.trigger_within_gate : 0 .;
2125+ //
2126+ // TW (2024-03-29): In MC, when an event doesn't fire the trigger, the raw::Trigger will be
2127+ // filled with the default values, which are set to the numerical limits of double.
2128+ // In this case, we should set the PMT_reference_time to 0.
2129+
2130+ const bool hasValidTriggerTime =
2131+ srtrigger.global_trigger_det_time >
2132+ (std::numeric_limits<double >::min () + std::numeric_limits<double >::epsilon ()) &&
2133+ srtrigger.global_trigger_det_time <
2134+ (std::numeric_limits<double >::max () - std::numeric_limits<double >::epsilon ());
2135+
2136+ double PMT_reference_time = fParams .ReferencePMTFromTriggerToBeam () && hasValidTriggerTime ? triggerShift : 0 .;
2137+
2138+ mf::LogInfo (" CAFMaker" ) << " Setting PMT reference time to " << PMT_reference_time << " us\n "
2139+ << " Trigger Time = " << srtrigger.global_trigger_det_time << " us\n "
2140+ << " Beam Gate Time = " << srtrigger.beam_gate_det_time << " us" ;
2141+
21162142 FixPMTReferenceTimes (rec, PMT_reference_time);
21172143
21182144 // TODO: TPC?
0 commit comments