From e8bc01ab018a572d38a10ac228a6c2a40c6c4a82 Mon Sep 17 00:00:00 2001
From: Marco Clemencic <marco.clemencic@cern.ch>
Date: Thu, 30 Sep 2021 10:10:02 +0200
Subject: [PATCH] Renamed ODIN::timeAlignmentEventWindow to
 ODIN::timeAlignmentEventIndex and added ODIN::isTAE()

---
 DAQ/DAQUtils/src/OdinTypesFilter.cpp          | 25 ++++++++++---------
 DAQ/MDF/src/RawEventHelpers.cpp               |  3 +--
 Event/DAQEvent/include/Event/ODIN.h           | 13 +++++-----
 Event/DAQEvent/src/ODIN.cpp                   |  4 +--
 .../tests/scripts/test_ODIN_bad_time.py       |  2 +-
 .../LHCbAlgs/tests/scripts/test_ODIN_codec.py |  2 +-
 6 files changed, 25 insertions(+), 24 deletions(-)

diff --git a/DAQ/DAQUtils/src/OdinTypesFilter.cpp b/DAQ/DAQUtils/src/OdinTypesFilter.cpp
index 5be7e2d25e3..374cd4b67cb 100644
--- a/DAQ/DAQUtils/src/OdinTypesFilter.cpp
+++ b/DAQ/DAQUtils/src/OdinTypesFilter.cpp
@@ -170,8 +170,8 @@ private:
   Gaudi::Property<std::vector<odin_bx_type_t>>          m_bxs{this, "BXTypes", {odin_bx_type_t::All()}};
   Gaudi::Property<std::vector<odin_calibration_type_t>> m_cls{
       this, "CalibrationTypes", {odin_calibration_type_t::All()}};
-  Gaudi::Property<int>                           m_winmin{this, "TAEWindowMoreThan", -1};
-  Gaudi::Property<int>                           m_winmax{this, "TAEWindowLessThan", 99};
+  Gaudi::Property<int>                           m_idxmin{this, "TAEIndexMoreThan", -1};
+  Gaudi::Property<int>                           m_idxmax{this, "TAEIndexLessThan", 99};
   mutable Gaudi::Accumulators::BinomialCounter<> m_acc{this, "#accept"};
 };
 
@@ -190,20 +190,20 @@ StatusCode OdinTypesFilter::initialize() {
     info() << toString( m_log.value() ) << endmsg;
     info() << "Accepted CalibrationTypes : " << m_cls.value() << endmsg;
     info() << toString( m_log.value() ) << endmsg;
-    info() << "TAE Window in [" << m_winmin + 1 << "," << m_winmax - 1 << "]" << endmsg;
+    info() << "TAE Index in [" << m_idxmin + 1 << "," << m_idxmax - 1 << "]" << endmsg;
 
     // warn about trivial requests
     if ( m_log == Log_t::And &&
-         boolean_combine( Log_t::Or, m_bxs.empty(), m_trs.empty(), m_winmin >= m_winmax, m_cls.empty() ) )
-      warning() << "BXTypes, TriggerTypes, ReadoutTypes or TAEWindow is empty : ALL events will be rejected !!"
+         boolean_combine( Log_t::Or, m_bxs.empty(), m_trs.empty(), m_idxmin >= m_idxmax, m_cls.empty() ) )
+      warning() << "BXTypes, TriggerTypes, ReadoutTypes or TAEIndex is empty : ALL events will be rejected !!"
                 << endmsg;
     if ( m_log == Log_t::Or &&
-         boolean_combine( Log_t::And, m_bxs.empty(), m_trs.empty(), m_winmin >= m_winmax, m_cls.empty() ) )
-      warning() << "BXTypes, TriggerTypes, ReadoutTypes and TAEWindow are empties : ALL events will be rejected !!"
+         boolean_combine( Log_t::And, m_bxs.empty(), m_trs.empty(), m_idxmin >= m_idxmax, m_cls.empty() ) )
+      warning() << "BXTypes, TriggerTypes, ReadoutTypes and TAEIndex are empties : ALL events will be rejected !!"
                 << endmsg;
     if ( boolean_combine( m_log, m_bxs.value().front() == odin_bx_type_t::All(),
                           m_cls.value().front() == odin_calibration_type_t::All(),
-                          m_trs.value().front() == odin_trigger_type_t::All(), m_winmin<0, m_winmax> 7 ) )
+                          m_trs.value().front() == odin_trigger_type_t::All(), m_idxmin<0, m_idxmax> 7 ) )
       warning() << "OdinTypesFilter has no effect : ALL events will be accepted !!" << endmsg;
   } );
 }
@@ -216,12 +216,12 @@ bool OdinTypesFilter::operator()( const LHCb::ODIN& odin ) const {
   // treat trivial requests
   if ( boolean_combine( m_log, m_bxs.value().front() == odin_bx_type_t::All(),
                         m_cls.value().front() == odin_calibration_type_t::All(),
-                        m_trs.value().front() == odin_trigger_type_t::All(), m_winmin < 0 && m_winmax > 7 ) ) {
+                        m_trs.value().front() == odin_trigger_type_t::All(), m_idxmin < 0 && m_idxmax > 7 ) ) {
     m_acc += true;
     return true;
   }
 
-  if ( boolean_combine( m_log, ( m_bxs.empty(), m_cls.empty(), m_trs.empty(), m_winmin >= m_winmax ) ) ) {
+  if ( boolean_combine( m_log, ( m_bxs.empty(), m_cls.empty(), m_trs.empty(), m_idxmin >= m_idxmax ) ) ) {
     m_acc += false;
     return false;
   }
@@ -233,7 +233,8 @@ bool OdinTypesFilter::operator()( const LHCb::ODIN& odin ) const {
   bool clPass  = std::any_of( m_cls.begin(), m_cls.end(), equals_( odin.calibrationType() ) );
   bool bxPass  = std::any_of( m_bxs.begin(), m_bxs.end(), equals_( odin.bunchCrossingType() ) );
   bool trPass  = std::any_of( m_trs.begin(), m_trs.end(), equals_( odin.triggerType() ) );
-  bool taePass = ( (int)odin.timeAlignmentEventWindow() > m_winmin && (int)odin.timeAlignmentEventWindow() < m_winmax );
+  auto taeIdx  = static_cast<int>( odin.timeAlignmentEventIndex() );
+  bool taePass = ( taeIdx > m_idxmin && taeIdx < m_idxmax );
 
   auto filterPassed = boolean_combine( m_log, trPass, bxPass, taePass, clPass );
 
@@ -249,7 +250,7 @@ StatusCode OdinTypesFilter::finalize() {
   info() << "Accepted BXTypes : " << m_bxs.value() << endmsg << toString( m_log.value() ) << endmsg
          << "Accepted TriggerTypes : " << m_trs.value() << endmsg << toString( m_log.value() ) << endmsg
          << "Accepted CalibrationTypes : " << m_cls.value() << endmsg << toString( m_log.value() ) << endmsg
-         << "TAE Window in [" << m_winmin.value() << "," << m_winmax.value() << "]" << endmsg << "   ---> "
+         << "TAE Index in [" << m_idxmin.value() << "," << m_idxmax.value() << "]" << endmsg << "   ---> "
          << m_acc.nTrueEntries() << " accepted events among " << m_acc.nEntries() << endmsg;
 
   return FilterPredicate::finalize(); // must be called after all other actions
diff --git a/DAQ/MDF/src/RawEventHelpers.cpp b/DAQ/MDF/src/RawEventHelpers.cpp
index 475dafcd1df..cfa83d34931 100755
--- a/DAQ/MDF/src/RawEventHelpers.cpp
+++ b/DAQ/MDF/src/RawEventHelpers.cpp
@@ -637,7 +637,6 @@ bool LHCb::isTAERawEvent( RawEvent* raw ) {
   const auto& oBnks = raw->banks( RawBank::ODIN );
   return std::any_of( oBnks.begin(), oBnks.end(), []( const RawBank* bank ) {
     const LHCb::ODIN odin{bank->range<std::uint32_t>()};
-    return odin.triggerType() == static_cast<std::uint8_t>( ODIN::TriggerTypes::TimingTrigger ) ||
-           odin.timeAlignmentEventWindow() != 0;
+    return odin.triggerType() == static_cast<std::uint8_t>( ODIN::TriggerTypes::TimingTrigger ) || odin.isTAE();
   } );
 }
diff --git a/Event/DAQEvent/include/Event/ODIN.h b/Event/DAQEvent/include/Event/ODIN.h
index a2d8ffeed5c..b4286bec8d4 100644
--- a/Event/DAQEvent/include/Event/ODIN.h
+++ b/Event/DAQEvent/include/Event/ODIN.h
@@ -211,8 +211,8 @@ namespace LHCb {
         NonZeroSuppressionModeOffset    = 6 * 32 + 14,
         TimeAlignmentEventCentralSize   = 1,
         TimeAlignmentEventCentralOffset = 6 * 32 + 15,
-        TimeAlignmentEventWindowSize    = 6,
-        TimeAlignmentEventWindowOffset  = 6 * 32 + 16,
+        TimeAlignmentEventIndexSize     = 6,
+        TimeAlignmentEventIndexOffset   = 6 * 32 + 16,
         StepRunEnableSize               = 1,
         StepRunEnableOffset             = 6 * 32 + 22,
         TriggerTypeSize                 = 4,
@@ -290,12 +290,13 @@ namespace LHCb {
       constexpr void setTimeAlignmentEventCentral( bool value ) {
         details::set_bits<TimeAlignmentEventCentralSize, TimeAlignmentEventCentralOffset>( data, value );
       }
-      [[nodiscard]] constexpr ACCEL_TARGET_SPEC auto timeAlignmentEventWindow() const {
-        return details::get_bits<TimeAlignmentEventWindowSize, TimeAlignmentEventWindowOffset>( data );
+      [[nodiscard]] constexpr ACCEL_TARGET_SPEC auto timeAlignmentEventIndex() const {
+        return details::get_bits<TimeAlignmentEventIndexSize, TimeAlignmentEventIndexOffset>( data );
       }
-      constexpr void setTimeAlignmentEventWindow( std::uint8_t value ) {
-        details::set_bits<TimeAlignmentEventWindowSize, TimeAlignmentEventWindowOffset>( data, value );
+      constexpr void setTimeAlignmentEventIndex( std::uint8_t value ) {
+        details::set_bits<TimeAlignmentEventIndexSize, TimeAlignmentEventIndexOffset>( data, value );
       }
+      [[nodiscard]] constexpr ACCEL_TARGET_SPEC bool isTAE() const { return timeAlignmentEventIndex() != 0; }
       [[nodiscard]] constexpr ACCEL_TARGET_SPEC auto stepRunEnable() const {
         return details::get_bits<StepRunEnableSize, StepRunEnableOffset>( data );
       }
diff --git a/Event/DAQEvent/src/ODIN.cpp b/Event/DAQEvent/src/ODIN.cpp
index 87f4b18ef3c..523a6e027fb 100644
--- a/Event/DAQEvent/src/ODIN.cpp
+++ b/Event/DAQEvent/src/ODIN.cpp
@@ -36,7 +36,7 @@ namespace LHCb::ODINImplementation::v7 {
     // error bits + detector status (dropped): buffer[7]
     // misc fields (buffer[8], ignoring bits 15, 21, 24-31)
     odin.setBunchId( get_bits<12, 8 * 32 + 0>( buffer ) );
-    odin.setTimeAlignmentEventWindow( get_bits<3, 8 * 32 + 12>( buffer ) );
+    odin.setTimeAlignmentEventIndex( get_bits<3, 8 * 32 + 12>( buffer ) );
     odin.setTriggerType( get_bits<3, 8 * 32 + 16>( buffer ) );
     odin.setCalibrationType( get_bits<2, 8 * 32 + 19>( buffer ) );
     odin.setBunchCrossingType( static_cast<ODIN::BXTypes>( get_bits<2, 8 * 32 + 22>( buffer ) ) );
@@ -61,7 +61,7 @@ namespace LHCb::ODINImplementation::v7 {
     buffer[9] = data[4]; // TCK
 
     set_bits<12, 8 * 32 + 0>( buffer, bunchId() );
-    set_bits<3, 8 * 32 + 12>( buffer, timeAlignmentEventWindow() );
+    set_bits<3, 8 * 32 + 12>( buffer, timeAlignmentEventIndex() );
     assert( triggerType() <= 7 ); // change of width between v6 and v7
     set_bits<3, 8 * 32 + 16>( buffer, triggerType() );
     assert( calibrationType() <= 3 ); // change of width between v6 and v7
diff --git a/Kernel/LHCbAlgs/tests/scripts/test_ODIN_bad_time.py b/Kernel/LHCbAlgs/tests/scripts/test_ODIN_bad_time.py
index 8550528f3d9..60a2750097d 100644
--- a/Kernel/LHCbAlgs/tests/scripts/test_ODIN_bad_time.py
+++ b/Kernel/LHCbAlgs/tests/scripts/test_ODIN_bad_time.py
@@ -116,7 +116,7 @@ fields = [
     # "version", # not checked, usually overwritten
     "calibrationStep",
     "triggerConfigurationKey",
-    "timeAlignmentEventWindow",
+    "timeAlignmentEventIndex",
     "calibrationType"
 ]
 
diff --git a/Kernel/LHCbAlgs/tests/scripts/test_ODIN_codec.py b/Kernel/LHCbAlgs/tests/scripts/test_ODIN_codec.py
index 6d3581ca3c3..73ecb844ba0 100644
--- a/Kernel/LHCbAlgs/tests/scripts/test_ODIN_codec.py
+++ b/Kernel/LHCbAlgs/tests/scripts/test_ODIN_codec.py
@@ -64,7 +64,7 @@ fields = [  # (name, bits)
          "BunchCrossingType",
          "NonZeroSuppressionMode",
          "TimeAlignmentEventCentral",
-         "TimeAlignmentEventWindow",
+         "TimeAlignmentEventIndex",
          "StepRunEnable",
          "TriggerType",
          "TimeAlignmentEventFirst",
-- 
GitLab