From 1fd57f279b59fcd14ae5c50ece7802bc06bae823 Mon Sep 17 00:00:00 2001 From: VCLanNguyen Date: Tue, 11 Nov 2025 16:26:39 -0600 Subject: [PATCH 1/6] refactor FrameShiftInfo --- sbnobj/SBND/Timing/FrameShiftInfo.cxx | 19 ++-- sbnobj/SBND/Timing/FrameShiftInfo.hh | 119 ++++++++++++++++++-------- sbnobj/SBND/Timing/classes_def.xml | 3 +- 3 files changed, 96 insertions(+), 45 deletions(-) diff --git a/sbnobj/SBND/Timing/FrameShiftInfo.cxx b/sbnobj/SBND/Timing/FrameShiftInfo.cxx index 3c328c11..2d248805 100644 --- a/sbnobj/SBND/Timing/FrameShiftInfo.cxx +++ b/sbnobj/SBND/Timing/FrameShiftInfo.cxx @@ -12,16 +12,15 @@ #include "sbnobj/SBND/Timing/FrameShiftInfo.hh" namespace sbnd::timing { - - FrameShiftInfo::FrameShiftInfo(uint16_t timingType, double frameTdcCrtt1, double frameTdcBes, double frameTdcRwm, double frameHltCrtt1, double frameHltBeamGate, double frameApplyAtCaf) - : fTimingType(timingType) - , fFrameTdcCrtt1(frameTdcCrtt1) - , fFrameTdcBes(frameTdcBes) - , fFrameTdcRwm(frameTdcRwm) - , fFrameHltCrtt1(frameHltCrtt1) - , fFrameHltBeamGate(frameHltBeamGate) - , fFrameApplyAtCaf(frameApplyAtCaf) - {} + FrameShiftInfo::FrameShiftInfo(uint64_t frameCrtt1, uint16_t timingTypeCrtt1, + uint64_t frameBeamGate, uint16_t timingTypeBeamGate, + uint64_t frameEtrig, uint16_t timingTypeEtrig, + uint64_t frameDefault, uint16_t timingTypeDefault) + : fFrameCrtt1(frameCrtt1), fTimingTypeCrtt1(timingTypeCrtt1), + fFrameBeamGate(frameBeamGate), fTimingTypeBeamGate(timingTypeBeamGate), + fFrameEtrig(frameEtrig), fTimingTypeEtrig(timingTypeEtrig), + fFrameDefault(frameDefault), fTimingTypeDefault(timingTypeDefault) + {} } #endif diff --git a/sbnobj/SBND/Timing/FrameShiftInfo.hh b/sbnobj/SBND/Timing/FrameShiftInfo.hh index a7730a3f..27efaa23 100644 --- a/sbnobj/SBND/Timing/FrameShiftInfo.hh +++ b/sbnobj/SBND/Timing/FrameShiftInfo.hh @@ -15,29 +15,68 @@ namespace sbnd::timing { /** - * @brief A class to store the shifts across different time reference frames in SBND Data + * @brief A class to store reference frames in SBND Data + * + * Each reference frame is in UNIX timestamp format [ns] + * Store duplicated information from TimingInfo.hh for easier access at downstream modules. + * + * Reference frames included: + * + * CRT T1 signal frame: + * - Either from TDC or PTB HLT, TDC has higher priority if both are available + * - If selected, TDC CRT T1 frame is shifted to agree with HLT CRT T1 frame + * - Both unshifted TDC CRT T1 and HLT CRT T1 timestamps are saved in TimingInfo + * + * Beam Gate frame: differs between beam vs offbeam stream + * - Beam stream: + * - Either from TDC RWM or PTB HLT Gate, TDC RWM has higher priority if both are available + * - If selected, TDC RWM is shifted to agree with HLT Beam Gate frame + * - Both unshifted TDC RWM and HLT Beam Gate timestamps are saved in TimingInfo + * - Offbeam stream: + * - From PTB HLT Gate only + * - Saved in TimingInfo + * + * ETRIG frame: + * - Either from TDC or PTB HLT, TDC has higher priority if both are available + * - If selected, TDC ETRIG frame is shifted to agree with HLT ETRIG frame + * - Both unshifted TDC ETRIG and HLT ETRIG timestamps are saved in TimingInfo + * + * Default frame: depends on the stream type + * - Beam stream: use Beam Gate frame + * - Offbeam stream: use Beam Gate frame + * - Xmuon stream: use ETRIG frame + * + * Timing Type indicates which source the frame is derived from: + * 0 - SPEC TDC + * 1 - PTB HLT + * 2 - No frame found + * 99 - Not initialized * - * Each shift is in [ns] - * * For more information, see + * [SBN DOCDB ???] ????? + * Legacy -- no longer applied: * [SBN DocDB 43090](https://sbn-docdb.fnal.gov/cgi-bin/sso/ShowDocument?docid=43090). */ class FrameShiftInfo { public: - static constexpr uint16_t InvalidTimingType = 99; ///< Invalid timing type for decoded frame - static constexpr uint64_t NoShift = 0; ///< No shift. + static constexpr uint16_t InvalidTimingType = 99; ///< Invalid timing type for reference frame + static constexpr uint64_t NoFrame = 0; ///< Invalid frame. private: - uint16_t fTimingType = InvalidTimingType; ///< Types of decoded frames: 0 - SPEC TDC ETRIG, 1 - HLT ETRIG, 2 - Do Nothing - double fFrameTdcCrtt1 = NoShift; ///< Shift from decoded frame to SPEC-TDC CRT T1 [ns] - double fFrameTdcBes = NoShift; ///< Shift from decoded frame to SPEC-TDC BES [ns] - double fFrameTdcRwm = NoShift; ///< Shift from decoded frame to SPEC-TDC RWM [ns] - double fFrameHltCrtt1 = NoShift; ///< Shift from decoded frame to HLT CRT T1 [ns] - double fFrameHltBeamGate = NoShift; ///< Shift from decoded frame to HLT Beam Gate [ns] - double fFrameApplyAtCaf = NoShift; ///< Frame to shift to when running at CAF stage + uint64_t fFrameCrtt1 = NoFrame; ///< Frame for CRT T1 signal [ns] + uint16_t fTimingTypeCrtt1 = InvalidTimingType; ///< Types of CRT T1 frame + + uint64_t fFrameBeamGate = NoFrame; ///< Frame for Beam Gate [ns] + uint16_t fTimingTypeBeamGate = InvalidTimingType; ///< Types of Beam Gate frame + + uint64_t fFrameEtrig = NoFrame; ///< Frame for ETRIG [ns] + uint16_t fTimingTypeEtrig = InvalidTimingType; ///< Types of ETRIG frame + + uint64_t fFrameDefault = NoFrame; ///< Default frame depending on the stream type [ns] + uint16_t fTimingTypeDefault = InvalidTimingType; ///< Types of default frame public: @@ -49,36 +88,48 @@ namespace sbnd::timing { /** * Constructor to set all frames * - * @param timingType Types of decoded frames - * @param frameTdcCrtt1 Shift from decoded frame to SPEC-TDC CRT T1 [ns] - * @param frameTdcBes Shift from decoded frame to SPEC-TDC BES [ns] - * @param frameTdcRwm Shift from decoded frame to SPEC-TDC RWM [ns] - * @param frameHltCrtt1 Shift from decoded frame to HLT CRT T1 [ns] - * @param frameHltBeamGate Shift from decoded frame to HLT Beam Gate [ns] - * @param frameApplyAtCaf Frame to shift to when running at CAF stage + * @param frameCrtt1 Frame for CRT T1 [ns] + * @param timingTypeCrtt1 Timing type for CRT T1 frame + * @param frameBeamGate Frame for Beam Gate [ns] + * @param timingTypeBeamGate Timing type for Beam Gate frame + * @param frameEtrig Frame for ETRIG [ns] + * @param timingTypeEtrig Timing type for ETRIG frame + * @param frameDefault Default frame depending on the stream [ns] + * @param timingTypeDefault Timing type for Default frame */ - FrameShiftInfo(uint16_t timingType, double frameTdcCrtt1, double frameTdcBes, double frameTdcRwm, double frameHltCrtt1, double frameHltBeamGate, double frameApplyAtCaf); + FrameShiftInfo(uint64_t frameCrtt1, uint16_t timingTypeCrtt1, + uint64_t frameBeamGate, uint16_t timingTypeBeamGate, + uint64_t frameEtrig, uint16_t timingTypeEtrig, + uint64_t frameDefault, uint16_t timingTypeDefault); /// @name Getters /// @{ - uint16_t TimingType() const { return fTimingType; } - double FrameTdcCrtt1() const { return fFrameTdcCrtt1; } - double FrameTdcBes() const { return fFrameTdcBes; } - double FrameTdcRwm() const { return fFrameTdcRwm; } - double FrameHltCrtt1() const { return fFrameHltCrtt1;} - double FrameHltBeamGate() const { return fFrameHltBeamGate; } - double FrameApplyAtCaf() const { return fFrameApplyAtCaf; } + uint64_t FrameCrtt1() const { return fFrameCrtt1; } + uint16_t TimingTypeCrtt1() const { return fTimingTypeCrtt1; } + + uint64_t FrameBeamGate() const { return fFrameBeamGate; } + uint16_t TimingTypeBeamGate() const { return fTimingTypeBeamGate; } + + uint64_t FrameEtrig() const { return fFrameEtrig; } + uint16_t TimingTypeEtrig() const { return fTimingTypeEtrig; } + + uint64_t FrameDefault() const { return fFrameDefault; } + uint16_t TimingTypeDefault() const { return fTimingTypeDefault; } /// @} /// @name Setters /// @{ - void SetTimingType(uint16_t type){ fTimingType = type; } - void SetFrameTdcCrtt1(double frame){ fFrameTdcCrtt1 = frame; } - void SetFrameTdcBes(double frame){ fFrameTdcBes = frame; } - void SetFrameTdcRwm(double frame){ fFrameTdcRwm = frame; } - void SetFrameHltCrtt1(double frame){ fFrameHltCrtt1 = frame; } - void SetFrameHltBeamGate(double frame){ fFrameHltBeamGate = frame; } - void SetFrameApplyAtCaf(double frame){ fFrameApplyAtCaf = frame; } + void SetFrameCrtt1(uint64_t frame){ fFrameCrtt1 = frame; } + void SetTimingTypeCrtt1(uint16_t type){ fTimingTypeCrtt1 = type; } + + void SetFrameBeamGate(uint64_t frame){ fFrameBeamGate = frame; } + void SetTimingTypeBeamGate(uint16_t type){ fTimingTypeBeamGate = type; } + + void SetFrameEtrig(uint64_t frame){ fFrameEtrig = frame; } + void SetTimingTypeEtrig(uint16_t type){ fTimingTypeEtrig = type; } + + void SetFrameDefault(uint64_t frame){ fFrameDefault = frame; } + void SetTimingTypeDefault(uint16_t type){ fTimingTypeDefault = type; } /// @} }; } diff --git a/sbnobj/SBND/Timing/classes_def.xml b/sbnobj/SBND/Timing/classes_def.xml index 717e1bff..53c96b99 100644 --- a/sbnobj/SBND/Timing/classes_def.xml +++ b/sbnobj/SBND/Timing/classes_def.xml @@ -11,7 +11,8 @@ - + + From d0b2cef51bbbbe7b315884c4920a1f386e78e0e2 Mon Sep 17 00:00:00 2001 From: VCLanNguyen Date: Tue, 11 Nov 2025 18:24:00 -0600 Subject: [PATCH 2/6] add timig channel --- sbnobj/SBND/Timing/FrameShiftInfo.cxx | 16 +++++------ sbnobj/SBND/Timing/FrameShiftInfo.hh | 39 ++++++++++++++++++++++----- sbnobj/SBND/Timing/classes_def.xml | 2 +- 3 files changed, 41 insertions(+), 16 deletions(-) diff --git a/sbnobj/SBND/Timing/FrameShiftInfo.cxx b/sbnobj/SBND/Timing/FrameShiftInfo.cxx index 2d248805..0617c974 100644 --- a/sbnobj/SBND/Timing/FrameShiftInfo.cxx +++ b/sbnobj/SBND/Timing/FrameShiftInfo.cxx @@ -12,14 +12,14 @@ #include "sbnobj/SBND/Timing/FrameShiftInfo.hh" namespace sbnd::timing { - FrameShiftInfo::FrameShiftInfo(uint64_t frameCrtt1, uint16_t timingTypeCrtt1, - uint64_t frameBeamGate, uint16_t timingTypeBeamGate, - uint64_t frameEtrig, uint16_t timingTypeEtrig, - uint64_t frameDefault, uint16_t timingTypeDefault) - : fFrameCrtt1(frameCrtt1), fTimingTypeCrtt1(timingTypeCrtt1), - fFrameBeamGate(frameBeamGate), fTimingTypeBeamGate(timingTypeBeamGate), - fFrameEtrig(frameEtrig), fTimingTypeEtrig(timingTypeEtrig), - fFrameDefault(frameDefault), fTimingTypeDefault(timingTypeDefault) + FrameShiftInfo::FrameShiftInfo(uint64_t frameCrtt1, uint16_t timingTypeCrtt1, uint16_t timingChannelCrtt1, + uint64_t frameBeamGate, uint16_t timingTypeBeamGate, uint16_t timingChannelBeamGate, + uint64_t frameEtrig, uint16_t timingTypeEtrig, uint16_t timingChannelEtrig, + uint64_t frameDefault, uint16_t timingTypeDefault, uint16_t timingChannelDefault) + : fFrameCrtt1(frameCrtt1), fTimingTypeCrtt1(timingTypeCrtt1), fTimingChannelCrtt1(timingChannelCrtt1), + fFrameBeamGate(frameBeamGate), fTimingTypeBeamGate(timingTypeBeamGate), fTimingChannelBeamGate(timingChannelBeamGate), + fFrameEtrig(frameEtrig), fTimingTypeEtrig(timingTypeEtrig), fTimingChannelEtrig(timingChannelEtrig), + fFrameDefault(frameDefault), fTimingTypeDefault(timingTypeDefault), fTimingChannelDefault(timingChannelDefault) {} } diff --git a/sbnobj/SBND/Timing/FrameShiftInfo.hh b/sbnobj/SBND/Timing/FrameShiftInfo.hh index 27efaa23..7d440812 100644 --- a/sbnobj/SBND/Timing/FrameShiftInfo.hh +++ b/sbnobj/SBND/Timing/FrameShiftInfo.hh @@ -50,8 +50,12 @@ namespace sbnd::timing { * 0 - SPEC TDC * 1 - PTB HLT * 2 - No frame found - * 99 - Not initialized - * + * std::numeric_limits::max() - Not initialized + * + * Timing Channel incicates which channel the frame is derived from: + * SPEC TDC: indicates which input channel 0 to 4 + * PTB: indicates the High Level Trigger (HLT) type + * * For more information, see * [SBN DOCDB ???] ????? * Legacy -- no longer applied: @@ -61,22 +65,27 @@ namespace sbnd::timing { class FrameShiftInfo { public: - static constexpr uint16_t InvalidTimingType = 99; ///< Invalid timing type for reference frame static constexpr uint64_t NoFrame = 0; ///< Invalid frame. + static constexpr uint16_t InvalidTimingType = std::numeric_limits::max(); ///< Invalid timing type for reference frame + static constexpr uint16_t InvalidTimingChannel = std::numeric_limits::max(); ///< Invalid timing channel for reference frame private: uint64_t fFrameCrtt1 = NoFrame; ///< Frame for CRT T1 signal [ns] uint16_t fTimingTypeCrtt1 = InvalidTimingType; ///< Types of CRT T1 frame + uint16_t fTimingChannelCrtt1 = InvalidTimingChannel; ///< Channel of CRT T1 frame uint64_t fFrameBeamGate = NoFrame; ///< Frame for Beam Gate [ns] uint16_t fTimingTypeBeamGate = InvalidTimingType; ///< Types of Beam Gate frame + uint16_t fTimingChannelBeamGate = InvalidTimingChannel; ///< Channel of Beam Gate frame uint64_t fFrameEtrig = NoFrame; ///< Frame for ETRIG [ns] uint16_t fTimingTypeEtrig = InvalidTimingType; ///< Types of ETRIG frame + uint16_t fTimingChannelEtrig = InvalidTimingChannel; ///< Channel of ETRIG frame uint64_t fFrameDefault = NoFrame; ///< Default frame depending on the stream type [ns] uint16_t fTimingTypeDefault = InvalidTimingType; ///< Types of default frame + uint16_t fTimingChannelDefault = InvalidTimingChannel; ///< Channel of default frame public: @@ -90,46 +99,62 @@ namespace sbnd::timing { * * @param frameCrtt1 Frame for CRT T1 [ns] * @param timingTypeCrtt1 Timing type for CRT T1 frame + * @param timingChannelCrtt1 Timing channel for CRT T1 frame + * * @param frameBeamGate Frame for Beam Gate [ns] * @param timingTypeBeamGate Timing type for Beam Gate frame + * @param timingChannelBeamGate Timing channel for Beam Gate frame + * * @param frameEtrig Frame for ETRIG [ns] * @param timingTypeEtrig Timing type for ETRIG frame + * @param timingChannelEtrig Timing channel for ETRIG frame + * * @param frameDefault Default frame depending on the stream [ns] * @param timingTypeDefault Timing type for Default frame + * @param timingChannelDefault Timing channel for Default frame + * */ - FrameShiftInfo(uint64_t frameCrtt1, uint16_t timingTypeCrtt1, - uint64_t frameBeamGate, uint16_t timingTypeBeamGate, - uint64_t frameEtrig, uint16_t timingTypeEtrig, - uint64_t frameDefault, uint16_t timingTypeDefault); + FrameShiftInfo(uint64_t frameCrtt1, uint16_t timingTypeCrtt1, uint16_t timingChannelCrtt1, + uint64_t frameBeamGate, uint16_t timingTypeBeamGate, uint16_t timingChannelBeamGate, + uint64_t frameEtrig, uint16_t timingTypeEtrig, uint16_t timingChannelEtrig, + uint64_t frameDefault, uint16_t timingTypeDefault, uint16_t timingChannelDefault); /// @name Getters /// @{ uint64_t FrameCrtt1() const { return fFrameCrtt1; } uint16_t TimingTypeCrtt1() const { return fTimingTypeCrtt1; } + uint16_t TimingChannelCrtt1() const { return fTimingChannelCrtt1; } uint64_t FrameBeamGate() const { return fFrameBeamGate; } uint16_t TimingTypeBeamGate() const { return fTimingTypeBeamGate; } + uint16_t TimingChannelBeamGate() const { return fTimingChannelBeamGate; } uint64_t FrameEtrig() const { return fFrameEtrig; } uint16_t TimingTypeEtrig() const { return fTimingTypeEtrig; } + uint16_t TimingChannelEtrig() const { return fTimingChannelEtrig; } uint64_t FrameDefault() const { return fFrameDefault; } uint16_t TimingTypeDefault() const { return fTimingTypeDefault; } + uint16_t TimingChannelDefault() const { return fTimingChannelDefault; } /// @} /// @name Setters /// @{ void SetFrameCrtt1(uint64_t frame){ fFrameCrtt1 = frame; } void SetTimingTypeCrtt1(uint16_t type){ fTimingTypeCrtt1 = type; } + void SetTimingChannelCrtt1(uint16_t channel){ fTimingChannelCrtt1 = channel; } void SetFrameBeamGate(uint64_t frame){ fFrameBeamGate = frame; } void SetTimingTypeBeamGate(uint16_t type){ fTimingTypeBeamGate = type; } + void SetTimingChannelBeamGate(uint16_t channel){ fTimingChannelBeamGate = channel; } void SetFrameEtrig(uint64_t frame){ fFrameEtrig = frame; } void SetTimingTypeEtrig(uint16_t type){ fTimingTypeEtrig = type; } + void SetTimingChannelEtrig(uint16_t channel){ fTimingChannelEtrig = channel; } void SetFrameDefault(uint64_t frame){ fFrameDefault = frame; } void SetTimingTypeDefault(uint16_t type){ fTimingTypeDefault = type; } + void SetTimingChannelDefault(uint16_t channel){ fTimingChannelDefault = channel; } /// @} }; } diff --git a/sbnobj/SBND/Timing/classes_def.xml b/sbnobj/SBND/Timing/classes_def.xml index 53c96b99..7c7a4415 100644 --- a/sbnobj/SBND/Timing/classes_def.xml +++ b/sbnobj/SBND/Timing/classes_def.xml @@ -12,7 +12,7 @@ - + From 69c5b61f46c1f804918b36f15e3f28d5a6c29075 Mon Sep 17 00:00:00 2001 From: VCLanNguyen Date: Fri, 21 Nov 2025 18:59:48 -0600 Subject: [PATCH 3/6] add Invalid initialisation as max uint64_t --- sbnobj/SBND/Timing/FrameShiftInfo.hh | 10 +++++----- sbnobj/SBND/Timing/TimingInfo.hh | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/sbnobj/SBND/Timing/FrameShiftInfo.hh b/sbnobj/SBND/Timing/FrameShiftInfo.hh index 7d440812..13b8c619 100644 --- a/sbnobj/SBND/Timing/FrameShiftInfo.hh +++ b/sbnobj/SBND/Timing/FrameShiftInfo.hh @@ -65,25 +65,25 @@ namespace sbnd::timing { class FrameShiftInfo { public: - static constexpr uint64_t NoFrame = 0; ///< Invalid frame. + static constexpr uint64_t InvalidFrame = std::numeric_limits::max(); ///< Invalid frame. static constexpr uint16_t InvalidTimingType = std::numeric_limits::max(); ///< Invalid timing type for reference frame static constexpr uint16_t InvalidTimingChannel = std::numeric_limits::max(); ///< Invalid timing channel for reference frame private: - uint64_t fFrameCrtt1 = NoFrame; ///< Frame for CRT T1 signal [ns] + uint64_t fFrameCrtt1 = InvalidFrame; ///< Frame for CRT T1 signal [ns] uint16_t fTimingTypeCrtt1 = InvalidTimingType; ///< Types of CRT T1 frame uint16_t fTimingChannelCrtt1 = InvalidTimingChannel; ///< Channel of CRT T1 frame - uint64_t fFrameBeamGate = NoFrame; ///< Frame for Beam Gate [ns] + uint64_t fFrameBeamGate = InvalidFrame; ///< Frame for Beam Gate [ns] uint16_t fTimingTypeBeamGate = InvalidTimingType; ///< Types of Beam Gate frame uint16_t fTimingChannelBeamGate = InvalidTimingChannel; ///< Channel of Beam Gate frame - uint64_t fFrameEtrig = NoFrame; ///< Frame for ETRIG [ns] + uint64_t fFrameEtrig = InvalidFrame; ///< Frame for ETRIG [ns] uint16_t fTimingTypeEtrig = InvalidTimingType; ///< Types of ETRIG frame uint16_t fTimingChannelEtrig = InvalidTimingChannel; ///< Channel of ETRIG frame - uint64_t fFrameDefault = NoFrame; ///< Default frame depending on the stream type [ns] + uint64_t fFrameDefault = InvalidFrame; ///< Default frame depending on the stream type [ns] uint16_t fTimingTypeDefault = InvalidTimingType; ///< Types of default frame uint16_t fTimingChannelDefault = InvalidTimingChannel; ///< Channel of default frame diff --git a/sbnobj/SBND/Timing/TimingInfo.hh b/sbnobj/SBND/Timing/TimingInfo.hh index 32b89e84..7de1bd99 100644 --- a/sbnobj/SBND/Timing/TimingInfo.hh +++ b/sbnobj/SBND/Timing/TimingInfo.hh @@ -10,6 +10,7 @@ #define SBND_TIMINGINFO_HH #include +#include namespace sbnd::timing { @@ -25,7 +26,7 @@ namespace sbnd::timing { class TimingInfo { public: - static constexpr uint64_t InvalidTimestamp = 0; ///< Invalid timestamp + static constexpr uint64_t InvalidTimestamp = std::numeric_limits::max(); ///< Invalid timestamp private: From 00f6bf495a4426b59183f7368b8be32aa6b97d8a Mon Sep 17 00:00:00 2001 From: Henry Lay Date: Mon, 24 Nov 2025 03:57:31 -0600 Subject: [PATCH 4/6] Avoid duplication and add enumeration --- sbnobj/SBND/Timing/FrameShiftInfo.hh | 41 +++++++++++++++------------- sbnobj/SBND/Timing/TimingInfo.cxx | 4 ++- sbnobj/SBND/Timing/TimingInfo.hh | 23 +++++++--------- 3 files changed, 35 insertions(+), 33 deletions(-) diff --git a/sbnobj/SBND/Timing/FrameShiftInfo.hh b/sbnobj/SBND/Timing/FrameShiftInfo.hh index 13b8c619..97b172e3 100644 --- a/sbnobj/SBND/Timing/FrameShiftInfo.hh +++ b/sbnobj/SBND/Timing/FrameShiftInfo.hh @@ -12,6 +12,8 @@ #include #include +#include "sbnobj/SBND/Timing/TimingInfo.hh" + namespace sbnd::timing { /** @@ -62,30 +64,31 @@ namespace sbnd::timing { * [SBN DocDB 43090](https://sbn-docdb.fnal.gov/cgi-bin/sso/ShowDocument?docid=43090). */ - class FrameShiftInfo { - - public: - static constexpr uint64_t InvalidFrame = std::numeric_limits::max(); ///< Invalid frame. - static constexpr uint16_t InvalidTimingType = std::numeric_limits::max(); ///< Invalid timing type for reference frame - static constexpr uint16_t InvalidTimingChannel = std::numeric_limits::max(); ///< Invalid timing channel for reference frame + enum TimingType : uint16_t { + kSPECTDCType, + kPTBHLTType, + kInvalidType = std::numeric_limits::max() + }; - private: + static constexpr uint16_t kInvalidChannel = std::numeric_limits::max(); + + class FrameShiftInfo { - uint64_t fFrameCrtt1 = InvalidFrame; ///< Frame for CRT T1 signal [ns] - uint16_t fTimingTypeCrtt1 = InvalidTimingType; ///< Types of CRT T1 frame - uint16_t fTimingChannelCrtt1 = InvalidTimingChannel; ///< Channel of CRT T1 frame + uint64_t fFrameCrtt1 = kInvalidTimestamp; ///< Frame for CRT T1 signal [ns] + uint16_t fTimingTypeCrtt1 = kInvalidType; ///< Types of CRT T1 frame + uint16_t fTimingChannelCrtt1 = kInvalidChannel; ///< Channel of CRT T1 frame - uint64_t fFrameBeamGate = InvalidFrame; ///< Frame for Beam Gate [ns] - uint16_t fTimingTypeBeamGate = InvalidTimingType; ///< Types of Beam Gate frame - uint16_t fTimingChannelBeamGate = InvalidTimingChannel; ///< Channel of Beam Gate frame + uint64_t fFrameBeamGate = kInvalidTimestamp; ///< Frame for Beam Gate [ns] + uint16_t fTimingTypeBeamGate = kInvalidType; ///< Types of Beam Gate frame + uint16_t fTimingChannelBeamGate = kInvalidChannel; ///< Channel of Beam Gate frame - uint64_t fFrameEtrig = InvalidFrame; ///< Frame for ETRIG [ns] - uint16_t fTimingTypeEtrig = InvalidTimingType; ///< Types of ETRIG frame - uint16_t fTimingChannelEtrig = InvalidTimingChannel; ///< Channel of ETRIG frame + uint64_t fFrameEtrig = kInvalidTimestamp; ///< Frame for ETRIG [ns] + uint16_t fTimingTypeEtrig = kInvalidType; ///< Types of ETRIG frame + uint16_t fTimingChannelEtrig = kInvalidChannel; ///< Channel of ETRIG frame - uint64_t fFrameDefault = InvalidFrame; ///< Default frame depending on the stream type [ns] - uint16_t fTimingTypeDefault = InvalidTimingType; ///< Types of default frame - uint16_t fTimingChannelDefault = InvalidTimingChannel; ///< Channel of default frame + uint64_t fFrameDefault = kInvalidTimestamp; ///< Default frame depending on the stream type [ns] + uint16_t fTimingTypeDefault = kInvalidType; ///< Types of default frame + uint16_t fTimingChannelDefault = kInvalidChannel; ///< Channel of default frame public: diff --git a/sbnobj/SBND/Timing/TimingInfo.cxx b/sbnobj/SBND/Timing/TimingInfo.cxx index 84ba5dd4..3409238e 100644 --- a/sbnobj/SBND/Timing/TimingInfo.cxx +++ b/sbnobj/SBND/Timing/TimingInfo.cxx @@ -13,7 +13,9 @@ namespace sbnd::timing { - TimingInfo::TimingInfo(uint64_t rawDAQHeaderTimestamp, uint64_t tdcCrtt1, uint64_t tdcBes, uint64_t tdcRwm, uint64_t tdcEtrig, uint64_t hltCrtt1, uint64_t hltEtrig, uint64_t hltBeamGate) + TimingInfo::TimingInfo(uint64_t rawDAQHeaderTimestamp, uint64_t tdcCrtt1, uint64_t tdcBes, + uint64_t tdcRwm, uint64_t tdcEtrig, uint64_t hltCrtt1, uint64_t hltEtrig, + uint64_t hltBeamGate) : fRawDAQHeaderTimestamp(rawDAQHeaderTimestamp) , fTdcCrtt1(tdcCrtt1) , fTdcBes(tdcBes) diff --git a/sbnobj/SBND/Timing/TimingInfo.hh b/sbnobj/SBND/Timing/TimingInfo.hh index 7de1bd99..61a006d1 100644 --- a/sbnobj/SBND/Timing/TimingInfo.hh +++ b/sbnobj/SBND/Timing/TimingInfo.hh @@ -14,6 +14,8 @@ namespace sbnd::timing { + static constexpr uint64_t kInvalidTimestamp = std::numeric_limits::max(); ///< Invalid timestamp + /** * @brief A class to store important timestamps in SBND Data * @@ -25,19 +27,14 @@ namespace sbnd::timing { class TimingInfo { - public: - static constexpr uint64_t InvalidTimestamp = std::numeric_limits::max(); ///< Invalid timestamp - - private: - - uint64_t fRawDAQHeaderTimestamp = InvalidTimestamp; ///< Timestamp when the event is built by the event builder at DAQ-level - uint64_t fTdcCrtt1 = InvalidTimestamp; ///< Timestamp of BNB stream CRT T1 Reset recorded by the SPEC-TDC - uint64_t fTdcBes = InvalidTimestamp; ///< Timestamp of BES signal sent by MFTU recorded by the SPEC-TDC - uint64_t fTdcRwm = InvalidTimestamp; ///< Timestamp of RWM signal recorded by the SPEC-TDC - uint64_t fTdcEtrig = InvalidTimestamp; ///< Timestamp of Event Trigger (ETRIG) sent by the PTB recorded by the SPEC-TDC - uint64_t fHltCrtt1 = InvalidTimestamp; ///< Timestamp of BNB and Offbeam stream CRT T1 Reset High Level Trigger (HLT) created by the PTB - uint64_t fHltEtrig = InvalidTimestamp; ///< Timestamp of ETRIG HLT created by the PTB - uint64_t fHltBeamGate = InvalidTimestamp; ///< Timestamp of Beam Gate Acceptance HLT created by the PTB + uint64_t fRawDAQHeaderTimestamp = kInvalidTimestamp; ///< Timestamp when the event is built by the event builder at DAQ-level + uint64_t fTdcCrtt1 = kInvalidTimestamp; ///< Timestamp of BNB stream CRT T1 Reset recorded by the SPEC-TDC + uint64_t fTdcBes = kInvalidTimestamp; ///< Timestamp of BES signal sent by MFTU recorded by the SPEC-TDC + uint64_t fTdcRwm = kInvalidTimestamp; ///< Timestamp of RWM signal recorded by the SPEC-TDC + uint64_t fTdcEtrig = kInvalidTimestamp; ///< Timestamp of Event Trigger (ETRIG) sent by the PTB recorded by the SPEC-TDC + uint64_t fHltCrtt1 = kInvalidTimestamp; ///< Timestamp of BNB and Offbeam stream CRT T1 Reset High Level Trigger (HLT) created by the PTB + uint64_t fHltEtrig = kInvalidTimestamp; ///< Timestamp of ETRIG HLT created by the PTB + uint64_t fHltBeamGate = kInvalidTimestamp; ///< Timestamp of Beam Gate Acceptance HLT created by the PTB public: From f6f3557e6d73e7b3fd8c73635472f900ff5698c5 Mon Sep 17 00:00:00 2001 From: Henry Lay Date: Mon, 24 Nov 2025 07:30:23 -0600 Subject: [PATCH 5/6] Add no shift --- sbnobj/SBND/Timing/FrameShiftInfo.hh | 1 + 1 file changed, 1 insertion(+) diff --git a/sbnobj/SBND/Timing/FrameShiftInfo.hh b/sbnobj/SBND/Timing/FrameShiftInfo.hh index 97b172e3..952ca195 100644 --- a/sbnobj/SBND/Timing/FrameShiftInfo.hh +++ b/sbnobj/SBND/Timing/FrameShiftInfo.hh @@ -67,6 +67,7 @@ namespace sbnd::timing { enum TimingType : uint16_t { kSPECTDCType, kPTBHLTType, + kNoShiftType, kInvalidType = std::numeric_limits::max() }; From 3730acbf709e42eac2b524c3041dec8b6f86f2fe Mon Sep 17 00:00:00 2001 From: Henry Lay Date: Tue, 25 Nov 2025 07:15:05 -0600 Subject: [PATCH 6/6] Move constexpr upstream so it can be used in more places --- sbnobj/SBND/Timing/TimingInfo.hh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sbnobj/SBND/Timing/TimingInfo.hh b/sbnobj/SBND/Timing/TimingInfo.hh index 61a006d1..12e6a3eb 100644 --- a/sbnobj/SBND/Timing/TimingInfo.hh +++ b/sbnobj/SBND/Timing/TimingInfo.hh @@ -14,7 +14,8 @@ namespace sbnd::timing { - static constexpr uint64_t kInvalidTimestamp = std::numeric_limits::max(); ///< Invalid timestamp + static constexpr uint64_t kSecondInNanoseconds = static_cast(1e9); ///< 1s = 1,000,000,000ns + static constexpr uint64_t kInvalidTimestamp = std::numeric_limits::max(); ///< Invalid timestamp /** * @brief A class to store important timestamps in SBND Data