ATLAS Offline Software
RoIsUnpackingToolBase.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 #include <iostream>
8 
9 
11  const std::string& name,
12  const IInterface* parent)
13  : base_class(type, name, parent) {}
14 
15 
17 
18  if ( !m_monTool.empty() ) ATH_CHECK( m_monTool.retrieve() );
21  if ( !m_roiupdater.empty() ) ATH_CHECK( m_roiupdater.retrieve() );
22 
23  ATH_CHECK( m_decisionsKey.initialize() );
28 
29  return StatusCode::SUCCESS;
30 }
31 
32 
34  const std::string& thrType,
35  std::optional<ThrVecRef>& thrVec) const {
36  try {
37  thrVec = ThrVecRef(l1Menu.thresholds(thrType));
38  }
39  catch (const std::exception& ex) {
40  ATH_MSG_ERROR("Failed to retrieve " << thrType << " thresholds from L1 menu. Exception:" << ex.what());
41  return StatusCode::FAILURE;
42  }
43  return StatusCode::SUCCESS;
44 }
45 
46 
47 std::string RoIsUnpackingToolBase::getProbeThresholdName(const std::string& thresholdName) {
48  return "PROBE" + thresholdName;
49 }
50 
51 
52 StatusCode RoIsUnpackingToolBase::decodeMapping( std::function<bool(const std::string&)>&& filter ) {
54  ATH_CHECK( hltMenuHandle.isValid() );
55  // Cleanup in case there was a stop/start transition
57 
58  for ( const TrigConf::Chain& chain: *hltMenuHandle ) {
59  const HLT::Identifier chainIdentifier(chain.name());
60  const std::vector<std::string> thresholds{ chain.l1thresholds() };
61  const std::vector<size_t> legMultiplicities{ chain.legMultiplicities() };
62  if (thresholds.size() != legMultiplicities.size()) {
63  ATH_MSG_ERROR("Encountered a chain " << chain.name() << " with " << legMultiplicities.size()
64  << " legs but only " << thresholds.size() << " thresholds. These should be the same.");
65  return StatusCode::FAILURE;
66  }
67  size_t counter = 0;
68  for ( const std::string& th: thresholds ) {
69  if ( filter(th) ) {
70  const HLT::Identifier thresholdIdentifier(th);
71  m_thresholdToChainMapping[ thresholdIdentifier ].push_back( chainIdentifier );
72  ATH_MSG_DEBUG( "Associating " << chainIdentifier << " with threshold " << th );
73  if ( thresholds.size() > 1 ) {
74  HLT::Identifier legIdentifier = TrigCompositeUtils::createLegName(chainIdentifier, counter);
75  m_thresholdToChainMapping[ thresholdIdentifier ].push_back( legIdentifier );
76  m_legToChainMapping.insert( std::make_pair( legIdentifier, chainIdentifier ) );
77  ATH_MSG_DEBUG( "Associating additional chain leg " << legIdentifier
78  << " with threshold " << thresholdIdentifier );
79  }
80  }
81  ++counter;
82  }
83  }
84  return StatusCode::SUCCESS;
85 }
86 
87 
90  const HLT::IDSet& activeChains ) const {
91  auto chains = m_thresholdToChainMapping.find( thresholdId );
92  if ( chains == m_thresholdToChainMapping.end() ) {
93  ATH_MSG_DEBUG("Threshold not known " << thresholdId);
94  return;
95  }
96 
98  for ( auto chainId: chains->second ) {
99  if ( activeChains.find(chainId) != activeChains.end() ) {
100  ids.insert( chainId.numeric() );
101  ATH_MSG_DEBUG( "Added " << chainId << " to the RoI/threshold decision " << thresholdId );
102  } else { // maybe it is a leg?
103  auto legIterator = m_legToChainMapping.find( chainId );
104  if ( legIterator != m_legToChainMapping.end() ) {
105  // this is a leg we care about, need to check if respective chain was active, and activate
106  if ( activeChains.find( legIterator->second ) != activeChains.end() ) {
107  ids.insert( chainId.numeric() );
108  ATH_MSG_DEBUG( "Added " << chainId << " to the RoI/threshold decision " << thresholdId );
109  }
110  }
111  }
112  }
114  ATH_MSG_DEBUG( "Number of decisions in this RoI after adding chains using threshold " << thresholdId
115  << " " << TrigCompositeUtils::decisionIDs( d ).size() );
116 }
RoIsUnpackingToolBase.h
TriggerItem.h
RoIsUnpackingToolBase::m_roiupdater
ToolHandle< IRoiUpdaterTool > m_roiupdater
Definition: RoIsUnpackingToolBase.h:68
runLayerRecalibration.chain
chain
Definition: runLayerRecalibration.py:175
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
hist_file_dump.d
d
Definition: hist_file_dump.py:137
RoIsUnpackingToolBase::ThrVecRef
std::reference_wrapper< const ThrVec > ThrVecRef
Definition: RoIsUnpackingToolBase.h:74
TrigCompositeUtils::insertDecisionIDs
void insertDecisionIDs(const Decision *src, Decision *dest)
Appends the decision IDs of src to the dest decision object.
Definition: TrigCompositeUtilsRoot.cxx:80
RoIsUnpackingToolBase::addChainsToDecision
void addChainsToDecision(HLT::Identifier thresholdId, TrigCompositeUtils::Decision *d, const HLT::IDSet &activeChains) const
Definition: RoIsUnpackingToolBase.cxx:88
TrigConf::L1Menu
L1 menu configuration.
Definition: L1Menu.h:28
covarianceTool.filter
filter
Definition: covarianceTool.py:514
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
RoIsUnpackingToolBase::m_decisionsKeyProbe
SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_decisionsKeyProbe
Definition: RoIsUnpackingToolBase.h:54
python.TriggerHandler.th
th
Definition: TriggerHandler.py:296
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
RoIsUnpackingToolBase::decodeMapping
StatusCode decodeMapping(std::function< bool(const std::string &)> &&filter)
Fills mapping from L1 threshold -> to HLT chain.
Definition: RoIsUnpackingToolBase.cxx:52
RoIsUnpackingToolBase::m_legToChainMapping
std::map< HLT::Identifier, HLT::Identifier > m_legToChainMapping
Definition: RoIsUnpackingToolBase.h:71
RoIsUnpackingToolBase::getL1Thresholds
StatusCode getL1Thresholds(const TrigConf::L1Menu &l1Menu, const std::string &thrType, std::optional< ThrVecRef > &thrVec) const
Retrieve a vector of thresholds with type thrType from L1Menu.
Definition: RoIsUnpackingToolBase.cxx:33
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
calibdata.exception
exception
Definition: calibdata.py:496
TrigConf::L1Menu::thresholds
std::vector< std::shared_ptr< TrigConf::L1Threshold > > thresholds() const
Access to list of all L1Thresholds.
Definition: L1Menu.cxx:267
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
xAOD::TrigComposite_v1
Class used to describe composite objects in the HLT.
Definition: TrigComposite_v1.h:52
RoIsUnpackingToolBase::m_decisionsKey
SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_decisionsKey
Definition: RoIsUnpackingToolBase.h:51
HLT::Identifier
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:20
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
RoIsUnpackingToolBase::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: RoIsUnpackingToolBase.h:67
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
python.subdetectors.mmg.ids
ids
Definition: mmg.py:8
TrigCompositeUtils::createLegName
HLT::Identifier createLegName(const HLT::Identifier &chainIdentifier, size_t counter)
Generate the HLT::Identifier which corresponds to a specific leg of a given chain.
Definition: TrigCompositeUtilsRoot.cxx:166
RoIsUnpackingToolBase::m_trigRoIsKey
SG::WriteHandleKey< TrigRoiDescriptorCollection > m_trigRoIsKey
Definition: RoIsUnpackingToolBase.h:57
RoIsUnpackingToolBase::m_l1MenuKey
SG::ReadHandleKey< TrigConf::L1Menu > m_l1MenuKey
Definition: RoIsUnpackingToolBase.h:60
python.copyTCTOutput.chains
chains
Definition: copyTCTOutput.py:81
TrigCompositeUtils::DecisionIDContainer
std::set< DecisionID > DecisionIDContainer
Definition: TrigComposite_v1.h:28
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
RoIsUnpackingToolBase::m_HLTMenuKey
SG::ReadHandleKey< TrigConf::HLTMenu > m_HLTMenuKey
Definition: RoIsUnpackingToolBase.h:63
TrigCompositeUtils::decisionIDs
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
Definition: TrigCompositeUtilsRoot.cxx:67
HLT::IDSet
std::set< HLT::Identifier > IDSet
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:63
RoIsUnpackingToolBase::initialize
virtual StatusCode initialize() override
Definition: RoIsUnpackingToolBase.cxx:16
RoIsUnpackingToolBase::m_thresholdToChainMapping
std::map< HLT::Identifier, HLT::IDVec > m_thresholdToChainMapping
Definition: RoIsUnpackingToolBase.h:70
RoIsUnpackingToolBase::RoIsUnpackingToolBase
RoIsUnpackingToolBase(const std::string &type, const std::string &name, const IInterface *parent)
Definition: RoIsUnpackingToolBase.cxx:10
TrigConf::Chain
HLT chain configuration.
Definition: TrigConfData/TrigConfData/HLTChain.h:18
test_pyathena.counter
counter
Definition: test_pyathena.py:15
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
RoIsUnpackingToolBase::getProbeThresholdName
static std::string getProbeThresholdName(const std::string &thresholdName)
Concatenate the probe identifier string with the threshold name string.
Definition: RoIsUnpackingToolBase.cxx:47