Skip to content
Snippets Groups Projects
Commit 00294222 authored by Rosen Matev's avatar Rosen Matev :sunny:
Browse files

Add EventType bit accessor and clean up TriggerTypes

parent e0dd6c85
No related branches found
No related tags found
1 merge request!4192Add ODIN EventType bit accessor and clean up TriggerTypes
Pipeline #6841807 passed
......@@ -119,22 +119,22 @@ namespace LHCb {
/// Meaning of the EventType bits
enum class EventTypes : std::uint16_t {
VeloOpen = 0x0001,
Physics = 0x0002,
NoBias = 0x0004,
Lumi = 0x0008,
Beam1Gas = 0x0010,
Beam2Gas = 0x0020,
et_bit_06 = 0x0040,
et_bit_07 = 0x0080,
et_bit_08 = 0x0100,
et_bit_09 = 0x0200,
TriggerMaskPhysics = 0x0400,
TriggerMaskNoBias = 0x0800,
TriggerMaskBeam1Gas = 0x1000,
TriggerMaskBeam2Gas = 0x2000,
SequencerTrigger = 0x4000,
HltFlaggingMode = 0x8000
VeloOpen = 0x0001,
Physics = 0x0002,
NoBias = 0x0004,
Lumi = 0x0008,
Beam1Gas = 0x0010,
Beam2Gas = 0x0020,
et_bit_06 = 0x0040,
et_bit_07 = 0x0080,
et_bit_08 = 0x0100,
et_bit_09 = 0x0200,
et_bit_10 = 0x0400,
et_bit_11 = 0x0800,
et_bit_12 = 0x1000,
et_bit_13 = 0x2000,
et_bit_14 = 0x4000,
HltFlaggingMode = 0x8000
};
/// Calibration types
......@@ -155,14 +155,8 @@ namespace LHCb {
/// Types of trigger broadcasted by ODIN
enum class TriggerTypes : std::uint8_t { //
PhysicsTrigger = 0,
BeamGasTrigger = 1,
LumiTrigger = 2,
TechnicalTrigger = 3,
AuxiliaryTrigger = 4,
NonZSupTrigger = 5,
TimingTrigger = 6,
CalibrationTrigger = 7
CalibrationTrigger = 10
};
static constexpr int BANK_VERSION = 7;
......@@ -255,11 +249,25 @@ namespace LHCb {
[[nodiscard]] constexpr ACCEL_TARGET_SPEC auto eventType() const {
return details::get_bits<EventTypeSize, EventTypeOffset>( data );
}
[[nodiscard]] constexpr bool eventTypeBit( EventTypes mask ) const {
assert( __builtin_popcount( static_cast<std::uint16_t>( mask ) ) == 1 ); // FIXME: C++20 use std::popcount
// instead
return eventType() & static_cast<std::uint16_t>( mask );
}
constexpr void setEventType( std::uint16_t value ) {
details::set_bits<EventTypeSize, EventTypeOffset>( data, value );
}
constexpr void setEventType( EventTypes value ) { setEventType( static_cast<std::uint16_t>( value ) ); }
constexpr void setEventTypeBit( EventTypes mask, bool value ) {
assert( __builtin_popcount( static_cast<std::uint16_t>( mask ) ) == 1 ); // FIXME: C++20 use std::popcount
// instead
std::uint16_t newEventType = eventType();
if ( value ) {
newEventType |= static_cast<std::uint16_t>( mask );
} else {
newEventType &= ~static_cast<std::uint16_t>( mask );
}
setEventType( newEventType );
}
[[nodiscard]] constexpr ACCEL_TARGET_SPEC auto calibrationStep() const {
return details::get_bits<CalibrationStepSize, CalibrationStepOffset>( data );
}
......@@ -359,9 +367,7 @@ namespace LHCb {
}
// Helpers
[[nodiscard]] constexpr bool isFlagging() const {
return eventType() & static_cast<std::uint16_t>( EventTypes::HltFlaggingMode );
}
[[nodiscard]] constexpr bool isFlagging() const { return eventTypeBit( EventTypes::HltFlaggingMode ); }
#ifndef ODIN_WITHOUT_GAUDI
[[nodiscard]] Gaudi::Time eventTime() const {
......
......@@ -101,25 +101,14 @@ namespace LHCb::ODINImplementation::v7_standalone {
}
std::ostream& operator<<( std::ostream& s, ODIN::TriggerTypes e ) {
s << "TriggerType=" << static_cast<int>( e );
switch ( e ) {
case LHCb::ODIN::TriggerTypes::PhysicsTrigger:
return s << "PhysicsTrigger";
case LHCb::ODIN::TriggerTypes::BeamGasTrigger:
return s << "BeamGasTrigger";
case LHCb::ODIN::TriggerTypes::LumiTrigger:
return s << "LumiTrigger";
case LHCb::ODIN::TriggerTypes::TechnicalTrigger:
return s << "TechnicalTrigger";
case LHCb::ODIN::TriggerTypes::AuxiliaryTrigger:
return s << "AuxiliaryTrigger";
case LHCb::ODIN::TriggerTypes::NonZSupTrigger:
return s << "NonZSupTrigger";
case LHCb::ODIN::TriggerTypes::TimingTrigger:
return s << "TimingTrigger";
return s << "(LumiTrigger)";
case LHCb::ODIN::TriggerTypes::CalibrationTrigger:
return s << "CalibrationTrigger";
return s << "(CalibrationTrigger)";
default:
return s << "ERROR unknown value " << static_cast<int>( e ) << " for enum LHCb::ODIN::TriggerTypes";
return s;
}
}
} // namespace LHCb::ODINImplementation::v7
......@@ -23,7 +23,7 @@ BOOST_AUTO_TEST_CASE( basic_tests ) {
constexpr auto constexpr_example( LHCb::ODIN::EventTypes event_type ) {
LHCb::ODIN odin{};
odin.setEventType( event_type );
odin.setEventTypeBit( event_type, true );
return odin.eventType();
}
......
......@@ -102,7 +102,7 @@ namespace LHCbAlgsTests {
switch ( count ) {
case 0: // run 1, flagging
odin->setRunNumber( 1 );
odin->setEventType( ODIN::EventTypes::HltFlaggingMode );
odin->setEventTypeBit( ODIN::EventTypes::HltFlaggingMode, true );
break;
case 1: // run 1, filtering
odin->setRunNumber( 1 );
......@@ -114,11 +114,11 @@ namespace LHCbAlgsTests {
break;
case 3: // run 3, flagging
odin->setRunNumber( 3 );
odin->setEventType( ODIN::EventTypes::HltFlaggingMode );
odin->setEventTypeBit( ODIN::EventTypes::HltFlaggingMode, true );
break;
case 4: // run 4, flagging
odin->setRunNumber( 4 );
odin->setEventType( ODIN::EventTypes::HltFlaggingMode );
odin->setEventTypeBit( ODIN::EventTypes::HltFlaggingMode, true );
break;
case 5: // run 5, filtering
odin->setRunNumber( 5 );
......@@ -126,7 +126,7 @@ namespace LHCbAlgsTests {
break;
case 6: // run 5, flagging
odin->setRunNumber( 5 );
odin->setEventType( ODIN::EventTypes::HltFlaggingMode );
odin->setEventTypeBit( ODIN::EventTypes::HltFlaggingMode, true );
break;
default: // run 5, filtering
odin->setRunNumber( 5 );
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment