6#include "GaudiKernel/Incident.h"
7#include "GaudiKernel/IIncidentSvc.h"
8#include "GaudiKernel/GaudiException.h"
21#define BOOST_BIND_GLOBAL_PLACEHOLDERS
22#include <boost/property_tree/ptree.hpp>
23#include <boost/property_tree/json_parser.hpp>
28 : base_class(
name, svcLoc ),
51 CHECK( incSvc.retrieve() );
52 incSvc->addListener(
this, IncidentType::BeginEvent, 0,
61 incSvc->addListener(
this, IncidentType::BeginInputFile, 0,
65 m_tmcAux = std::make_unique<xAOD::TriggerMenuAuxContainer>();
66 m_tmc = std::make_unique<xAOD::TriggerMenuContainer>();
70 m_hltJsonAux = std::make_unique<xAOD::TriggerMenuJsonAuxContainer>();
71 m_hltJson = std::make_unique<xAOD::TriggerMenuJsonContainer>();
78 m_l1JsonAux = std::make_unique<xAOD::TriggerMenuJsonAuxContainer>();
79 m_l1Json = std::make_unique<xAOD::TriggerMenuJsonContainer>();
82 m_hltpsJsonAux = std::make_unique<xAOD::TriggerMenuJsonAuxContainer>();
83 m_hltpsJson = std::make_unique<xAOD::TriggerMenuJsonContainer>();
86 m_l1psJsonAux = std::make_unique<xAOD::TriggerMenuJsonAuxContainer>();
87 m_l1psJson = std::make_unique<xAOD::TriggerMenuJsonContainer>();
90 m_bgJsonAux = std::make_unique<xAOD::TriggerMenuJsonAuxContainer>();
91 m_bgJson = std::make_unique<xAOD::TriggerMenuJsonContainer>();
103 return StatusCode::SUCCESS;
109 return StatusCode::SUCCESS;
117 <<
"Trigger menu not loaded";
118 throw GaudiException(
"Service not initialised correctly",
119 "TrigConf::xAODConfigSvc::ctpConfig",
120 StatusCode::FAILURE );
132 <<
"Trigger menu not loaded";
133 throw GaudiException(
"Service not initialised correctly",
134 "TrigConf::xAODConfigSvc::bunchGroupSet",
135 StatusCode::FAILURE );
148 <<
"Trigger menu not loaded";
149 throw GaudiException(
"Service not initialised correctly",
150 "TrigConf::xAODConfigSvc::chains",
151 StatusCode::FAILURE );
163 <<
"Trigger menu not loaded";
164 throw GaudiException(
"Service not initialised correctly",
165 "TrigConf::xAODConfigSvc::chains",
166 StatusCode::FAILURE );
177 if( !hltMenuHandle.
isValid() ) {
180 return std::numeric_limits<uint32_t>::max();
182 return hltMenuHandle->smk();
193 if( !
m_menu.get()->m_ptr ) {
195 <<
"Trigger menu not yet known. Configuration key not returned.";
196 throw GaudiException(
"Service not initialised correctly",
197 "TrigConf::xAODConfigSvc::masterKey",
198 StatusCode::FAILURE );
203 return m_menu.get()->m_ptr->smk();
211 const bool firstEvent = !
m_currentL1ps.get()->isInitialized();
213 return std::numeric_limits<uint32_t>::max();
220 return std::numeric_limits<uint32_t>::max();
222 return l1psRCH->psk();
233 if( !
m_menu.get()->m_ptr ) {
235 <<
"Trigger menu not yet known. Configuration key not returned.";
236 throw GaudiException(
"Service not initialised correctly",
237 "TrigConf::xAODConfigSvc::lvl1PrescaleKey",
238 StatusCode::FAILURE );
243 return m_menu.get()->m_ptr->l1psk();
249 const bool firstEvent = !
m_currentBg.get()->isInitialized();
251 return std::numeric_limits<uint32_t>::max();
257 return std::numeric_limits<uint32_t>::max();
260 return l1BGS->bgsk();
265 <<
"There's no way to access the bunch group set key from a legacy AOD!" <<
endmsg;
266 return std::numeric_limits<uint32_t>::max();
275 return std::numeric_limits<uint32_t>::max();
282 return std::numeric_limits<uint32_t>::max();
284 return hltpsRCH->psk();
295 if( !
m_menu.get()->m_ptr ) {
297 <<
"Trigger menu not yet known. Configuration key not returned.";
298 throw GaudiException(
"Service not initialised correctly",
299 "TrigConf::xAODConfigSvc::hltPrescaleKey",
300 StatusCode::FAILURE );
305 return m_menu.get()->m_ptr->hltpsk();
313 if( hltMenuHandle.
isValid() ) {
314 return *hltMenuHandle;
319 throw GaudiException(
"Service not initialised correctly",
320 "TrigConf::xAODConfigSvc::hltMenu",
321 StatusCode::FAILURE );
330 throw GaudiException(
"Service not initialised correctly",
331 "TrigConf::xAODConfigSvc::hltMenu",
332 StatusCode::FAILURE );
342 return *l1MenuHandle;
347 throw GaudiException(
"Service not initialised correctly",
348 "TrigConf::xAODConfigSvc::l1Menu",
349 StatusCode::FAILURE );
364 throw GaudiException(
"Service not initialised correctly",
365 "TrigConf::xAODConfigSvc::hltPrescalesSet",
366 StatusCode::FAILURE );
381 throw GaudiException(
"Service not initialised correctly",
382 "TrigConf::xAODConfigSvc::l1PrescalesSet",
383 StatusCode::FAILURE );
397 throw GaudiException(
"Service not initialised correctly",
398 "TrigConf::xAODConfigSvc::l1BunchGroupSet",
399 StatusCode::FAILURE );
408 REPORT_MESSAGE( MSG::DEBUG ) <<
"Callback received with incident: "
413 if( inc.type() == IncidentType::BeginInputFile ) {
416 <<
"Couldn't read in the input file's metadata";
417 throw GaudiException(
"Couldn't read in the input file's "
419 "TrigConf::xAODConfigSvc::handle",
420 StatusCode::FAILURE );
426 else if( inc.type() == IncidentType::BeginEvent ) {
429 <<
"Couldn't prepare the trigger configuration for the "
431 throw GaudiException(
"Couldn't prepare the trigger configuration "
432 "for the current event",
433 "TrigConf::xAODConfigSvc::handle",
434 StatusCode::FAILURE );
440 REPORT_MESSAGE( MSG::WARNING ) <<
"Unknown incident type received: "
512 REPORT_MESSAGE( MSG::FATAL ) <<
"Couldn't retrieve xAOD::TriggerMenuContainer or xAOD::TriggerMenuJsonContainer(s)" <<
endmsg;
513 return StatusCode::FAILURE;
515 REPORT_MESSAGE( MSG::WARNING ) <<
"Couldn't retrieve xAOD::TriggerMenuContainer or xAOD::TriggerMenuJsonContainer(s)" <<
endmsg;
516 return StatusCode::SUCCESS;
530 <<
"In this input file we found xAOD::TriggerMenuJsonContainer(s), but no xAOD::TriggerMenuContainer. "
531 <<
"This is inconsistent with previous input files." <<
endmsg;
532 return StatusCode::FAILURE;
535 <<
"In this input file we found xAOD::TriggerMenuJsonContainer(s), but no xAOD::TriggerMenuContainer. "
536 <<
"This is inconsistent with previous input files." <<
endmsg;
537 return StatusCode::SUCCESS;
546 <<
"In this input file we found xAOD::TriggerMenuContainer, but no xAOD::TriggerMenuJsonContainer. "
547 <<
"This is inconsistent with previous input files." <<
endmsg;
548 return StatusCode::FAILURE;
551 <<
"In this input file we found xAOD::TriggerMenuContainer, but no xAOD::TriggerMenuJsonContainer. "
552 <<
"This is inconsistent with previous input files." <<
endmsg;
553 return StatusCode::SUCCESS;
564 if (input_hltmonitoring) {
574 return StatusCode::SUCCESS;
579 if( ! input_tmc->
size() ) {
580 REPORT_MESSAGE( MSG::WARNING ) <<
"No trigger configurations are available on the input" <<
endmsg;
581 return StatusCode::SUCCESS;
586 bool alreadyHave =
false;
598 m_tmc->push_back( newMenu );
599 *newMenu = *inputMenu;
600 REPORT_MESSAGE( MSG::DEBUG ) <<
"Imported new configuration: SMK = " << newMenu->
smk()
601 <<
", L1PSK = " << newMenu->
l1psk()
605 return StatusCode::SUCCESS;
610 ATH_MSG_ERROR(
"Both m_menuJSONContainerAvailable and m_triggerMenuContainerAvailable are false" );
611 return StatusCode::FAILURE;
616 bool alreadyHave =
false;
618 if (inputTriggerMenuJson->key() == existingTriggerMenuJson->key()) {
628 existing->push_back( newTriggerMenuJson );
629 *newTriggerMenuJson = *inputTriggerMenuJson;
630 REPORT_MESSAGE( MSG::DEBUG ) <<
"Imported new configuration: Name = " << newTriggerMenuJson->
name() <<
" Key = " << newTriggerMenuJson->
key() <<
endmsg;
645 keys = keysRH.
cptr();
652 <<
"Coudln't retrieve xAOD::TrigConfKeys";
653 return StatusCode::FAILURE;
656 return StatusCode::SUCCESS;
663 bgKey = bgKeyRH.
cptr();
671 ATH_MSG_ERROR(
"Both m_menuJSONContainerAvailable and m_triggerMenuContainerAvailable are false" );
672 return StatusCode::FAILURE;
680 if( loadedMenuInSlot !=
nullptr &&
xAODKeysMatch( keys, loadedMenuInSlot ) ) {
682 <<
"Configuration matches the loaded one, nothing to do." <<
endmsg;
683 return StatusCode::SUCCESS;
693 for( ; menu_itr != menu_end; ++menu_itr ) {
697 loadedMenuInSlot = *menu_itr;
698 m_menu.get(context)->m_ptr = loadedMenuInSlot;
705 chainList, sequenceList,
708 <<
" chainList.size() = " << chainList.size()
709 <<
" sequenceList.size() = " << sequenceList.size()
712 return StatusCode::SUCCESS;
717 <<
"Couldn't find configuration for current event (SMK:"
718 << keys->smk() <<
", L1PSK:" << keys->l1psk()
719 <<
", HLTPSK:" << keys->hltpsk() <<
")";
720 return StatusCode::FAILURE;
735 bool validConfig =
true;
742 if( !hltMenuHandle.
isValid() ) {
746 if (!currentHlt.
isInitialized() or currentHlt.
smk() != hltMenuHandle->smk()) {
749 currentHlt.
setData( hltMenuHandle->data() );
750 currentHlt.
setSMK( hltMenuHandle->smk() );
755 if( !l1MenuHandle.
isValid() ) {
762 currentL1.
setData( l1MenuHandle->data() );
763 currentL1.
setSMK( l1MenuHandle->smk() );
770 <<
"L1 and HLT prescales will not be available via the TrigConf::xAODConfigSvc in the first "
771 <<
"event when running with UseInFileMetadata=False" <<
endmsg;
783 currentL1ps.
setData( l1psRCH->data() );
784 currentL1ps.
setPSK( l1psRCH->psk() );
793 if (!currentHltps.
isInitialized() or currentHltps.
psk() != hltpsRCH->psk()) {
795 currentHltps.
clear();
796 currentHltps.
setData( hltpsRCH->data() );
797 currentHltps.
setPSK( hltpsRCH->psk() );
808 <<
"Configuration matches the loaded one, nothing to do." <<
endmsg;
809 return StatusCode::SUCCESS;
829 REPORT_MESSAGE( MSG::INFO ) <<
"Loaded Trigger configuration from Conditions Store and Detector Store:"
830 <<
" SMK = " << (currentHlt.
isInitialized() ? std::to_string(currentHlt.
smk()) : std::string(
"UNKNOWN"))
831 <<
", L1PSK = " << (currentL1ps.
isInitialized() ? std::to_string(currentL1ps.
psk()) : std::string(
"UNKNOWN"))
832 <<
", HLTPSK = " << (currentHltps.
isInitialized() ? std::to_string(currentHltps.
psk()) : std::string(
"UNKNOWN"))
833 <<
", BGSK = " << (currentBg.
isInitialized() ? std::to_string(currentBg.
bgsk()) : std::string(
"UNKNOWN")) <<
endmsg;
836 <<
" chainList.size() = " << chainList.size()
837 <<
" sequenceList.size() = " << sequenceList.size()
840 return StatusCode::SUCCESS;
852 bool validConfig =
true;
853 if (loadedHltJson ==
nullptr || loadedHltJson->
key() != keys->smk()) {
857 if (loadedL1Json ==
nullptr || loadedL1Json->
key() != keys->smk()) {
860 if (loadedHltpsJson ==
nullptr || loadedHltpsJson->
key() != keys->hltpsk()) {
863 if (loadedL1psJson ==
nullptr || loadedL1psJson->
key() != keys->l1psk()) {
867 if (loadedBgJson ==
nullptr || loadedBgJson->
key() !=
static_cast<unsigned int>(bgKey->
id())) {
874 <<
"Configuration matches the loaded one, nothing to do." <<
endmsg;
875 return StatusCode::SUCCESS;
910 if (currentHltmonitoringJson.
m_ptr) {
911 currentHltmonitoring.
setSMK( currentHltmonitoringJson.
m_ptr->
key() );
937 REPORT_MESSAGE( MSG::INFO ) <<
"Loaded xAOD::TriggerMenuJson configuration:"
938 <<
" SMK = " << keys->smk()
939 <<
", L1PSK = " << keys->l1psk()
940 <<
", HLTPSK = " << keys->hltpsk()
941 <<
", BGSK = " << (bgKey ? std::to_string(bgKey->
id()) : std::string(
"UNKNOWN")) <<
endmsg;
944 <<
" chainList.size() = " << chainList.size()
945 <<
" sequenceList.size() = " << sequenceList.size()
948 return StatusCode::SUCCESS;
954 const uint32_t keyToCheck,
957 const bool optional) {
961 cacheOfLoadedMenuPtr.
m_ptr =
nullptr;
962 for( ; menu_itr != menu_end; ++menu_itr ) {
964 if( keyToCheck != (*menu_itr)->key() )
continue;
966 ptrToLocatedMenu = *menu_itr;
967 cacheOfLoadedMenuPtr.
m_ptr = ptrToLocatedMenu;
968 std::stringstream rawData;
969 rawData << ptrToLocatedMenu->
payload();
970 dataStructure.
clear();
972 boost::property_tree::ptree pt;
973 boost::property_tree::read_json(rawData, pt);
974 dataStructure.
setData(std::move(pt));
975 }
catch (
const boost::property_tree::json_parser_error& e) {
976 REPORT_MESSAGE( MSG::FATAL ) <<
"Unable to decode a JSON trigger menu metadata payload for " << humanName <<
" with key " << keyToCheck <<
endmsg;
978 return StatusCode::FAILURE;
983 if (not optional and ptrToLocatedMenu ==
nullptr) {
985 <<
"Couldn't find configuration for current event"
986 <<
", Requested key=" << keyToCheck
987 <<
", Requested menu=" << humanName
989 return StatusCode::FAILURE;
991 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
Helpers for checking error return status codes and reporting errors.
#define REPORT_MESSAGE(LVL)
Report a message.
#define CHECK(...)
Evaluate an expression and check for errors.
DataModel_detail::const_iterator< DataVector > const_iterator
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
const std::vector< BunchGroup > & bunchGroups() const
Base class for Trigger configuration data and wrapper around underlying representation.
bool isInitialized() const
void setData(const ptree &data)
Setting the configuration data.
virtual void clear()
Clearing the configuration data.
list of all HLT chains in a trigger menu
HLT monitoring configuration.
void setSMK(unsigned int psk)
void setPSK(unsigned int psk)
unsigned int psk() const
setter and getter for the HLT prescale key
virtual void clear() override
Clearing the configuration data.
void setBGSK(unsigned int bgsk)
unsigned int bgsk() const
setter and getter for the bunch group key
virtual void clear() override
Clearing the configuration data.
unsigned int psk() const
setter and getter for the L1 prescale key
void setPSK(unsigned int psk)
SG::ReadCondHandleKey< TrigConf::HLTPrescalesSet > m_HLTPrescaleSetKey
StatusCode prepareEvent(const EventContext &context)
Function setting up the service for a new event.
xAODConfigSvc(const std::string &name, ISvcLocator *svcLoc)
Standard service constructor.
SG::SlotSpecificObj< TriggerMenuJsonPtrWrapper > m_currentHltpsJson
virtual uint32_t lvl1PrescaleKey() const override
Get the LVL1 prescale key.
Gaudi::Property< std::string > m_metaNameJSON_l1ps
bool m_menuJSONContainerAvailable
Is decoded R3 format data available?
Gaudi::Property< std::string > m_metaNameJSON_hlt
SG::SlotSpecificObj< TriggerMenuJsonPtrWrapper > m_currentBgJson
bool m_triggerMenuContainerAvailable
Is decoded R2 format data available?
Gaudi::Property< std::string > m_metaName
virtual StatusCode finalize() override
Function finalising the service.
SG::SlotSpecificObj< HLTMenu > m_currentHlt
virtual const L1BunchGroupSet & l1BunchGroupSet(const EventContext &ctx) const override
Returns the JSON configured bunchgroup ptree.
std::unique_ptr< xAOD::TriggerMenuJsonContainer > m_hltpsJson
virtual const HLTSequenceList & sequences() const override
Get the HLT sequences.
StatusCode prepareEventRun3Athena(const EventContext &context)
Do per-event updating of R3 JSON-based metadata, reading the data direct from the Conditions and Dete...
virtual void handle(const Incident &inc) override
Function handling the incoming incidents.
SG::SlotSpecificObj< HLTChainList > m_chainList
The "translated" HLT configuration object.
std::unique_ptr< xAOD::TriggerMenuJsonContainer > m_hltmonitoringJson
Gaudi::Property< std::string > m_metaNameJSON_l1
SG::SlotSpecificObj< TriggerMenuJsonPtrWrapper > m_currentHltmonitoringJson
SG::SlotSpecificObj< L1PrescalesSet > m_currentL1ps
SG::SlotSpecificObj< TriggerMenuJsonPtrWrapper > m_currentHltJson
std::unique_ptr< xAOD::TriggerMenuJsonContainer > m_l1psJson
SG::ReadHandleKey< xAOD::BunchConfKey > m_eventBGKey
SG::SlotSpecificObj< CTPConfig > m_ctpConfig
std::unique_ptr< xAOD::TriggerMenuContainer > m_tmc
SG::ReadHandleKey< HLTMenu > m_hltMenuKey
SG::SlotSpecificObj< BunchGroupSet > m_bgSet
The "translated" bunch group set object.
SG::ReadHandleKey< L1Menu > m_l1MenuKey
Gaudi::Property< bool > m_stopOnFailure
std::unique_ptr< xAOD::TriggerMenuJsonAuxContainer > m_hltJsonAux
virtual uint32_t bunchGroupSetKey() const override
Get the LVL1 bunch group set key.
std::unique_ptr< xAOD::TriggerMenuJsonAuxContainer > m_l1psJsonAux
virtual const L1Menu & l1Menu(const EventContext &ctx) const override
Returns the JSON configured L1 ptree.
SG::SlotSpecificObj< HLTSequenceList > m_sequenceList
The "translated" HLT configuration object.
std::unique_ptr< xAOD::TriggerMenuJsonContainer > m_l1Json
Gaudi::Property< bool > m_useInFileMetadata
StatusCode prepareEventxAODTriggerMenuJson(const xAOD::TrigConfKeys *keys, const xAOD::BunchConfKey *bgKey, const EventContext &context)
Do per-event decoding for R3 in-file serialised xAOD::TriggerMenuJson metadata.
std::unique_ptr< xAOD::TriggerMenuJsonAuxContainer > m_bgJsonAux
virtual const CTPConfig * ctpConfig() const override
Get the LVL1 trigger menu.
SG::ReadCondHandleKey< TrigConf::L1BunchGroupSet > m_L1BunchGroupSetKey
std::unique_ptr< xAOD::TriggerMenuJsonContainer > m_hltJson
SG::SlotSpecificObj< MenuPtrWrapper > m_menu
SG::SlotSpecificObj< TriggerMenuJsonPtrWrapper > m_currentL1Json
SG::SlotSpecificObj< L1BunchGroupSet > m_currentBg
SG::ReadHandleKey< xAOD::TrigConfKeys > m_eventKey
virtual const BunchGroupSet * bunchGroupSet() const override
Get the LVL1 bunch group set.
Gaudi::Property< std::string > m_metaNameJSON_hltmonitoring
virtual const HLTMonitoring & hltMonitoring(const EventContext &ctx) const override
Returns the JSON configured HLTMonitoring ptree.
virtual const HLTChainList & chains() const override
Get the HLT chains.
std::unique_ptr< xAOD::TriggerMenuJsonAuxContainer > m_hltmonitoringJsonAux
virtual const HLTPrescalesSet & hltPrescalesSet(const EventContext &ctx) const override
Returns the JSON configured HLT prescales ptree.
SG::SlotSpecificObj< HLTMonitoring > m_currentHltmonitoring
std::shared_mutex m_sharedMutex
The mutex used to to restrict access to m_tmc when it is being written to.
std::unique_ptr< xAOD::TriggerMenuAuxContainer > m_tmcAux
std::unique_ptr< xAOD::TriggerMenuJsonAuxContainer > m_hltpsJsonAux
SG::SlotSpecificObj< TriggerMenuJsonPtrWrapper > m_currentL1psJson
StatusCode prepareEventxAODTriggerMenu(const xAOD::TrigConfKeys *keys, const EventContext &context)
Do per-event decoding for R2 in-file serialised xAOD::TriggerMenu metadata.
virtual const HLTMenu & hltMenu(const EventContext &ctx) const override
Returns the JSON configured HLTMenu ptree.
StatusCode readMetadata()
Function reading in a new metadata object from the input.
std::unique_ptr< xAOD::TriggerMenuJsonContainer > m_bgJson
std::unique_ptr< xAOD::TriggerMenuJsonAuxContainer > m_l1JsonAux
virtual uint32_t hltPrescaleKey() const override
Get the HLT prescale key.
virtual StatusCode initialize() override
Function initialising the service.
Gaudi::Property< std::string > m_metaNameJSON_hltps
SG::SlotSpecificObj< HLTPrescalesSet > m_currentHltps
SG::SlotSpecificObj< L1Menu > m_currentL1
StatusCode loadPtree(const std::string &humanName, const xAOD::TriggerMenuJsonContainer *metaContainer, const uint32_t keyToCheck, TriggerMenuJsonPtrWrapper &cacheOfLoadedMenuPtr, DataStructure &dataStructure, const bool optional=false)
Helper function to find a JSON in a given TriggerMenuJsonContainer using a given key,...
Gaudi::Property< std::string > m_metaNameJSON_bg
virtual const L1PrescalesSet & l1PrescalesSet(const EventContext &ctx) const override
Returns the JSON configured L1 prescales ptree.
bool m_isInFailure
Internal state of the service.
ServiceHandle< StoreGateSvc > m_metaStore
Connection to the metadata store.
SG::ReadCondHandleKey< TrigConf::L1PrescalesSet > m_L1PrescaleSetKey
virtual uint32_t masterKey() const override
Get the Super Master Key.
void copyMetadataToPersonalStore(const xAOD::TriggerMenuJsonContainer *input, xAOD::TriggerMenuJsonContainer *existing)
Helper function for copying into the service's private data store.
uint32_t id() const
Get the 32-bit identifier of the bunch configuration.
Forward iterator to traverse the main components of the trigger configuration.
StatusCode prepareTriggerMenu(const xAOD::TriggerMenu *menu, CTPConfig &ctpConfig, HLTChainList &chainList, HLTSequenceList &sequenceList, BunchGroupSet &bgSet, MsgStream &msg)
In order to avoid duplicating code between how the dual-use and the Athena-only code translates the x...
bool xAODKeysMatch(const xAOD::TrigConfKeys *keys, const xAOD::TriggerMenu *menu)
Since this is used in a couple of places, it seemed to make sense to put this simple code into a cent...
TriggerMenuJson_v1 TriggerMenuJson
Define the latest version of the trigger menu JSON class.
TriggerMenu_v1 TriggerMenu
Define the latest version of the trigger menu class.
TriggerMenuContainer_v1 TriggerMenuContainer
Define the latest version of the trigger menu container class.
BunchConfKey_v1 BunchConfKey
Declare the current version of the bunch configuration key type.
TriggerMenuJsonContainer_v1 TriggerMenuJsonContainer
TrigConfKeys_v1 TrigConfKeys
Declare the current version of the trigger configuration keys type.