ATLAS Offline Software
Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
FastTrackFinderLRTHypoAlg Class Reference

#include <FastTrackFinderLRTHypoAlg.h>

Inheritance diagram for FastTrackFinderLRTHypoAlg:
Collaboration diagram for FastTrackFinderLRTHypoAlg:

Public Member Functions

 FastTrackFinderLRTHypoAlg (const std::string &name, ISvcLocator *pSvcLocator)
 
virtual ~FastTrackFinderLRTHypoAlg ()=default
 
virtual StatusCode initialize () override
 
virtual StatusCode execute (const EventContext &context) const override
 
virtual StatusCode sysInitialize () override
 initialise this base class More...
 
virtual bool isClonable () const override
 Specify if the algorithm is clonable. More...
 
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant. More...
 
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm. More...
 
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies. More...
 
virtual bool filterPassed (const EventContext &ctx) const
 
virtual void setFilterPassed (bool state, const EventContext &ctx) const
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 

Static Public Member Functions

static StatusCode runtimeValidation (SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle, MsgStream &msg, bool onlyValidateOneStep=true, bool runTwoConversion=false)
 Executes all individual runtime tests. More...
 

Protected Member Functions

const SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > & decisionInput () const
 methods for derived classes to access handles of the base class input other read/write handles may be implemented by derived classes More...
 
const SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > & decisionOutput () const
 methods for derived classes to access handles of the base class output other read/write handles may be implemented by derived classes
More...
 
StatusCode hypoBaseOutputProcessing (SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle, MSG::Level lvl=MSG::DEBUG) const
 Base class function to be called once slice specific code has finished. Handles debug printing and validation. More...
 
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
 
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed. More...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

 FastTrackFinderLRTHypoAlg ()
 
StatusCode printDebugInformation (SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle, MSG::Level lvl) const
 Common base function to print information on chains passed by objects considered in the hypo. More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

ToolHandleArray< FastTrackFinderLRTHypoToolm_hypoTools {this, "HypoTools", {},"Tools that perform actual selection"}
 
SG::ReadHandleKey< xAOD::TrackParticleContainerm_tracksKey {this,"tracksKey","Undefined",""}
 
SG::WriteHandleKey< xAOD::TrigCompositeContainerm_trackCountKey {this,"trackCountKey","Undefined",""}
 
Gaudi::Property< std::vector< float > > m_min_pt {this, "min_pt",{0}, "Accept events with momentum higher than this limit"}
 
Gaudi::Property< std::vector< float > > m_min_d0 {this, "min_d0",{0}, "Accept events with d0 above this limit"}
 
Gaudi::Property< std::vector< float > > m_max_d0 {this, "max_d0",{900}, "Accept events with d0 below this limit"}
 
Gaudi::Property< std::vector< float > > m_max_xi2 {this, "max_xi2",{10}, "Accept events with Xi2 of the track less than this limit"}
 
ToolHandle< GenericMonitoringToolm_monTool {this,"MonTool","","Monitoring tool"}
 
SG::ReadHandleKey< TrigCompositeUtils::DecisionContainerm_input { this, "HypoInputDecisions", "UNSPECIFIED_INPUT", "Input Decision (implicit)" }
 input decisions More...
 
SG::WriteHandleKey< TrigCompositeUtils::DecisionContainerm_output { this, "HypoOutputDecisions", "UNSPECIFIED_OUTPUT", "Ouput Decision" }
 output decisions More...
 
Gaudi::Property< bool > m_runtimeValidation { this, "RuntimeValidation", false, "Enable detailed runtime validation of HypoAlg output, and upstream Decisions." }
 Enabling of detailed validation checks for use during development. More...
 
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks. More...
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Runtime validation methods


enum  LogicalFlowCheckMode { kRequireOne, kRequireAll }
 
static StatusCode validateHasLinks (const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
 Ensure all Decisions have the named ElementLink graph edges which they are required to by spec. More...
 
static StatusCode validateLogicalFlow (const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg, const LogicalFlowCheckMode mode)
 Ensure that all DecisionIDs have propagated correctly from their parent. More...
 
static StatusCode validateDuplicatedDecisionID (const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
 Ensure that no space is being wasted by duplicated DecisionIDs in any Decision objects. More...
 
static StatusCode validateDecisionIDs (const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
 Ensure that all present IDs correspond to configured chains. More...
 
static StatusCode validateParentLinking (const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg, bool runTwoConversion)
 Ensure that the Decision has at least one valid parent, unless it is a initial Decision from the HLTSeeding. More...
 
static StatusCode recursiveValidateGraph (const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg, bool onlyValidateOneStep, bool runTwoConversion, size_t callDepth, std::set< const TrigCompositeUtils::Decision * > &fullyExploredFrom)
 Execute all checks on one node in the graph, d, then recursive call self on all parent nodes up to L1. More...
 
static void printBangs (MsgStream &msg)
 Print header line. More...
 
static void printErrorHeader (const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
 A problem was found, print common output data. More...
 

Detailed Description

Definition at line 20 of file FastTrackFinderLRTHypoAlg.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ LogicalFlowCheckMode

enum HypoBase::LogicalFlowCheckMode
privateinherited
Enumerator
kRequireOne 

Require all DecisionIDs to be present in at least one of my parent Decision objects.

kRequireAll 

Definition at line 52 of file HypoBase.h.

52  {
53  kRequireOne,
54  kRequireAll //<! Require all DecisionIDs to be present in all of my parent Decision objects
55  };

Constructor & Destructor Documentation

◆ FastTrackFinderLRTHypoAlg() [1/2]

FastTrackFinderLRTHypoAlg::FastTrackFinderLRTHypoAlg ( const std::string &  name,
ISvcLocator *  pSvcLocator 
)

Definition at line 23 of file FastTrackFinderLRTHypoAlg.cxx.

23  :
24 ::HypoBase(name, pSvcLocator)
25 {
26 }

◆ ~FastTrackFinderLRTHypoAlg()

virtual FastTrackFinderLRTHypoAlg::~FastTrackFinderLRTHypoAlg ( )
virtualdefault

◆ FastTrackFinderLRTHypoAlg() [2/2]

FastTrackFinderLRTHypoAlg::FastTrackFinderLRTHypoAlg ( )
private

Member Function Documentation

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::cardinality
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Override this to return 0 for reentrant algorithms.

Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.

64 {
65  return 0;
66 }

◆ decisionInput()

const SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > & HypoBase::decisionInput ( ) const
protectedinherited

methods for derived classes to access handles of the base class input other read/write handles may be implemented by derived classes

Definition at line 18 of file HypoBase.cxx.

18  {
19  return m_input;
20 }

◆ decisionOutput()

const SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > & HypoBase::decisionOutput ( ) const
protectedinherited

methods for derived classes to access handles of the base class output other read/write handles may be implemented by derived classes

Definition at line 22 of file HypoBase.cxx.

22  {
23  return m_output;
24 }

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKeyArray>

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  hndl,
const SG::VarHandleKeyType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleBase>

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ detStore()

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ evtStore() [1/2]

ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( ) const
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ execute()

StatusCode FastTrackFinderLRTHypoAlg::execute ( const EventContext &  context) const
overridevirtual

Definition at line 46 of file FastTrackFinderLRTHypoAlg.cxx.

47 {
48  ATH_MSG_DEBUG ( "Executing " << name() << "..." );
49  auto previousDecisionsHandle = SG::makeHandle( decisionInput(), context );
50 
51  if( not previousDecisionsHandle.isValid() ) {//implicit
52  ATH_MSG_DEBUG( "No implicit RH for previous decisions "<< decisionInput().key()<<": is this expected?" );
53  return StatusCode::SUCCESS;
54  }
55 
56  if (previousDecisionsHandle->size() == 0) {
57  ATH_MSG_DEBUG( "No previous decision, nothing to do.");
58  return StatusCode::SUCCESS;
59  } else if (previousDecisionsHandle->size() > 1) {
60  ATH_MSG_ERROR("Found " << previousDecisionsHandle->size() <<" previous decisions.");
61  return StatusCode::FAILURE;
62  }
63 
64  ATH_MSG_DEBUG( "Running with "<< previousDecisionsHandle->size() <<" implicit ReadHandles for previous decisions. Looking for :"<<viewString());
65 
66  std::vector<int> counts(m_min_pt.size());
67 
68 
69  //taken from isohightpt
70 
71  ATH_MSG_DEBUG( "Getting Track Handle "<<m_tracksKey);
72  // get tracks from the key :
73  auto trackHandle = SG::makeHandle(m_tracksKey, context );
74 
75  ATH_CHECK( trackHandle.isValid() );
76  ATH_MSG_DEBUG ( "track handle size: " << trackHandle->size() << "..." );
77 
78  int ntrks = trackHandle->size();
79 
80  const xAOD::TrackParticleContainer * AllTracks = trackHandle.get(); //Later this could be updated to run with tracks above a certain threshold
81 
82  // Loop over all tracks and get a track decision associated with it and create the input
83  for ( const xAOD::TrackParticle_v1* track : *AllTracks) {
84  const double pT = track->pt();
85  const float d0 = track->d0();
86  const double xi2 = 0.0; //fq.chiSquared();
87  const float abs_d0 = std::fabs(d0);
88  for (long unsigned int i=0;i<m_min_pt.size();i++){
89  if(pT >= m_min_pt[i] && abs_d0 < m_max_d0[i] && abs_d0 >= m_min_d0[i] && std::fabs(xi2) < m_max_xi2[i]) counts[i]++;
90  }
91  }
92 
93  //end taken section
94 
95  // Recording Data
96  auto trackCountContainer = std::make_unique< xAOD::TrigCompositeContainer>();
97  auto trackCountContainerAux = std::make_unique< xAOD::TrigCompositeAuxContainer>();
98  trackCountContainer->setStore(trackCountContainerAux.get());
99 
100  xAOD::TrigComposite * trackCount = new xAOD::TrigComposite();
101  trackCountContainer->push_back(trackCount);
102  trackCount->setDetail("ntrks", ntrks);
103  trackCount->setDetail("pTcuts", static_cast<std::vector<float>>(m_min_pt));
104  trackCount->setDetail("d0mincuts", static_cast<std::vector<float>>(m_min_d0));
105  trackCount->setDetail("d0maxcuts", static_cast<std::vector<float>>(m_max_d0));
106  trackCount->setDetail("xi2cuts", static_cast<std::vector<float>>(m_max_xi2));
107  trackCount->setDetail("counts", counts);
108 
109  // TODO revisit
110 
111  auto mon_ntrks = Monitored::Scalar<int>("ntrks",ntrks);
112  Monitored::Group(m_monTool,mon_ntrks);
113  for(long unsigned int i=0;i<counts.size();i++){
114  auto mon_counts = Monitored::Scalar<int>("counts"+std::to_string(i),counts[i]);
115  Monitored::Group(m_monTool,mon_counts);
116  }
117 
119  auto decisions = outputHandle.ptr();
120 
121  TrigCompositeUtils::Decision* d = newDecisionIn(decisions, previousDecisionsHandle->at(0), hypoAlgNodeName(), context);
122 
124  TrigCompositeUtils::decisionIDs( previousDecisionsHandle->at(0), prev );
125 
126  FastTrackFinderLRTHypoTool::TrkCountsInfo trkinfo{d, trackCount, prev};
127 
128  for(auto &tool:m_hypoTools)
129  {
130  ATH_CHECK(tool->decide(trkinfo));
131  }
132 
134  ATH_CHECK(trackCountHandle.record( std::move( trackCountContainer ), std::move( trackCountContainerAux ) ) );
136  ATH_CHECK( hypoBaseOutputProcessing(outputHandle) );
137  return StatusCode::SUCCESS;
138 }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase &  ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthCommonReentrantAlgorithm< Gaudi::Algorithm >::extraOutputDeps
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.

90 {
91  // If we didn't find any symlinks to add, just return the collection
92  // from the base class. Otherwise, return the extended collection.
93  if (!m_extendedExtraObjects.empty()) {
95  }
96  return BaseAlg::extraOutputDeps();
97 }

◆ filterPassed()

virtual bool AthCommonReentrantAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext &  ctx) const
inlinevirtualinherited

Definition at line 96 of file AthCommonReentrantAlgorithm.h.

96  {
97  return execState( ctx ).filterPassed();
98  }

◆ hypoBaseOutputProcessing()

StatusCode HypoBase::hypoBaseOutputProcessing ( SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &  outputHandle,
MSG::Level  lvl = MSG::DEBUG 
) const
protectedinherited

Base class function to be called once slice specific code has finished. Handles debug printing and validation.

Definition at line 35 of file HypoBase.cxx.

35  {
36 
37  ATH_CHECK( printDebugInformation(outputHandle, lvl) );
38 
39  if (m_runtimeValidation) {
40  ATH_CHECK( runtimeValidation(outputHandle, msg()) );
41  }
42 
43  return StatusCode::SUCCESS;
44 }

◆ initialize()

StatusCode FastTrackFinderLRTHypoAlg::initialize ( )
overridevirtual

Definition at line 28 of file FastTrackFinderLRTHypoAlg.cxx.

29 {
31  ATH_CHECK(m_trackCountKey.initialize());
33  ATH_CHECK(m_min_pt.size()==m_min_d0.size());
34 
35  if (m_tracksKey.key() == "Undefined" || m_trackCountKey.key() == "Undefined") {
36  ATH_MSG_ERROR("either track Key name or track count key name is undefined " );
37  return StatusCode::FAILURE;
38  }
39 
40  ATH_CHECK(m_hypoTools.retrieve());
41  if (!m_monTool.empty()) ATH_CHECK(m_monTool.retrieve());
42 
43  return StatusCode::SUCCESS;
44 }

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isClonable()

bool AthCommonReentrantAlgorithm< Gaudi::Algorithm >::isClonable
overridevirtualinherited

Specify if the algorithm is clonable.

Reentrant algorithms are clonable.

Definition at line 68 of file AthCommonReentrantAlgorithm.cxx.

52 {
53  // Reentrant algorithms are clonable.
54  return true;
55 }

◆ msg() [1/2]

MsgStream& AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24  {
25  return this->msgStream();
26  }

◆ msg() [2/2]

MsgStream& AthCommonMsg< Gaudi::Algorithm >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30  {
31  return this->msgLevel(lvl);
32  }

◆ outputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ printBangs()

void HypoBase::printBangs ( MsgStream &  msg)
staticprivateinherited

Print header line.

Definition at line 390 of file HypoBase.cxx.

390  {
391  msg << MSG::ERROR << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endmsg;
392 }

◆ printDebugInformation()

StatusCode HypoBase::printDebugInformation ( SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &  outputHandle,
MSG::Level  lvl 
) const
privateinherited

Common base function to print information on chains passed by objects considered in the hypo.

Definition at line 406 of file HypoBase.cxx.

406  {
407  if (msgLvl(lvl)) {
408  msg() << lvl;
409  msg() << "Exiting with " << outputHandle->size() <<" Decision objects" << endmsg;
410  size_t count = 0;
411  for (const Decision* d : *outputHandle){
412  DecisionIDContainer objDecisions;
413  decisionIDs( d, objDecisions );
414  msg() << "Number of positive decisions for Decision object #" << count++ << ": " << objDecisions.size() << endmsg;
415  for (const TrigCompositeUtils::DecisionID id : objDecisions ) {
416  msg() << " --- Passes: " << HLT::Identifier( id ) << endmsg;
417  }
418  }
419  }
420  return StatusCode::SUCCESS;
421 }

◆ printErrorHeader()

void HypoBase::printErrorHeader ( const ElementLink< TrigCompositeUtils::DecisionContainer > &  dEL,
MsgStream &  msg 
)
staticprivateinherited

A problem was found, print common output data.

Definition at line 395 of file HypoBase.cxx.

397 {
398  printBangs(msg);
399  msg << MSG::ERROR << "! RUNTIME TRIGGER NAVIGATION VALIDATION ERROR" << endmsg;
400  msg << MSG::ERROR << "! Caused by Decision with index:" << (*dEL)->index() << endmsg;
401  msg << MSG::ERROR << "! From collection:" << dEL.dataID() << endmsg;
402  msg << MSG::ERROR << "! " << **dEL << endmsg;
403 }

◆ recursiveValidateGraph()

StatusCode HypoBase::recursiveValidateGraph ( const ElementLink< TrigCompositeUtils::DecisionContainer > &  dEL,
MsgStream &  msg,
bool  onlyValidateOneStep,
bool  runTwoConversion,
size_t  callDepth,
std::set< const TrigCompositeUtils::Decision * > &  fullyExploredFrom 
)
staticprivateinherited

Execute all checks on one node in the graph, d, then recursive call self on all parent nodes up to L1.

Definition at line 71 of file HypoBase.cxx.

77 {
78  if (onlyValidateOneStep && callDepth > 0) {
79  if ((*dEL)->name() == hypoAlgNodeName()) {
80  // Validation is called from HypoAlg nodes. So if we have reached the _previous_ HypoAlg node, then we have already
81  // validated back from here in the past. Can stop at this point.
82  return StatusCode::SUCCESS;
83  }
84  }
85 
86  // Check logical flow at this place in the graph
87  if ((*dEL)->name() == hypoAlgNodeName()) {
88  // Check that all Hypo Decisions produced here satisfy the more-strict all-parent logical flow
89  if ( validateLogicalFlow(dEL, msg, kRequireAll).isFailure() ) {
90  return StatusCode::FAILURE;
91  }
92  } else {
93  // (looser requirement of one-valid-parent-with-decision than we had when we knew that d corresponded to a HypoAlg output)
94  if ( validateLogicalFlow(dEL, msg, kRequireOne).isFailure() ) {
95  return StatusCode::FAILURE;
96  }
97  }
98 
99  // Check my IDs
100  if ( validateDecisionIDs(dEL, msg).isFailure() ) {
101  return StatusCode::FAILURE;
102  }
103  if ( validateDuplicatedDecisionID(dEL, msg).isFailure() ) {
104  return StatusCode::FAILURE;
105  }
106 
107  // Check my linking
108  if( validateParentLinking(dEL, msg, runTwoConversion).isFailure() ) {
109  return StatusCode::FAILURE;
110  }
111  if ( validateHasLinks(dEL, msg).isFailure() ) {
112  return StatusCode::FAILURE;
113  }
114 
115  // Continue upstream
116  const std::vector<ElementLink<DecisionContainer>> seeds = (*dEL)->objectCollectionLinks<DecisionContainer>(seedString());
117  for (const ElementLink<DecisionContainer>& seed : seeds) {
118  if (fullyExploredFrom.count( (*seed) ) == 1) {
119  continue; // Already fully explored from this seed and up
120  }
121  if ( not seed.isValid() ) {
122  msg << MSG::ERROR << "Invalid seed element link in recursiveValidateGraph" << endmsg;
123  return StatusCode::FAILURE;
124  }
125  if ( recursiveValidateGraph(seed, msg, onlyValidateOneStep, runTwoConversion, callDepth + 1, fullyExploredFrom).isFailure() ) {
126  return StatusCode::FAILURE;
127  }
128  }
129 
130  fullyExploredFrom.insert( *dEL );
131  return StatusCode::SUCCESS;
132 }

◆ renounce()

std::enable_if_t<std::is_void_v<std::result_of_t<decltype(&T::renounce)(T)> > && !std::is_base_of_v<SG::VarHandleKeyArray, T> && std::is_base_of_v<Gaudi::DataHandle, T>, void> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ runtimeValidation()

StatusCode HypoBase::runtimeValidation ( SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &  outputHandle,
MsgStream &  msg,
bool  onlyValidateOneStep = true,
bool  runTwoConversion = false 
)
staticinherited

Executes all individual runtime tests.

Definition at line 47 of file HypoBase.cxx.

51 {
52  // Detailed checks on the output container of this HypoAlg
53  std::set<const Decision*> fullyExploredFrom; // Cache used to avoid exploring regions of the graph more than once
54  for (const Decision* d : *outputHandle) {
55  const DecisionContainer* dContainer = dynamic_cast<const DecisionContainer*>( d->container() );
56  const ElementLink<DecisionContainer> dEL = ElementLink<DecisionContainer>(*dContainer, d->index());
57  if (not dEL.isValid()) {
58  msg << MSG::ERROR << "Invalid seed element link in recursiveValidateGraph" << endmsg;
59  return StatusCode::FAILURE;
60  }
61  // Check that we can reach L1 along all navigation paths up from each Decision
62  // and validate these Decisions on the way up too.
63  if (recursiveValidateGraph(dEL, msg, onlyValidateOneStep, runTwoConversion, 0, fullyExploredFrom).isFailure()) {
64  return StatusCode::FAILURE;
65  }
66  }
67  return StatusCode::SUCCESS;
68 }

◆ setFilterPassed()

virtual void AthCommonReentrantAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool  state,
const EventContext &  ctx 
) const
inlinevirtualinherited

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100  {
101  execState( ctx ).setFilterPassed( state );
102  }

◆ sysExecute()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext &  ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Definition at line 85 of file AthCommonReentrantAlgorithm.cxx.

77 {
78  return BaseAlg::sysExecute (ctx);
79 }

◆ sysInitialize()

StatusCode HypoBase::sysInitialize ( )
overridevirtualinherited

initialise this base class

Reimplemented from AthCommonReentrantAlgorithm< Gaudi::Algorithm >.

Definition at line 26 of file HypoBase.cxx.

26  {
27  CHECK( AthReentrantAlgorithm::sysInitialize() ); // initialise base class
28  CHECK( m_input.initialize() );
29  ATH_MSG_DEBUG("HypoBase::sysInitialize() Will consume decision: " << m_input.key() );
30  CHECK( m_output.initialize() );
31  ATH_MSG_DEBUG("HypoBase::sysInitialize() And produce decision: " << m_output.key() );
32  return StatusCode::SUCCESS;
33 }

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase &  )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308  {
309  // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310  // << " size: " << m_vhka.size() << endmsg;
311  for (auto &a : m_vhka) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

◆ validateDecisionIDs()

StatusCode HypoBase::validateDecisionIDs ( const ElementLink< TrigCompositeUtils::DecisionContainer > &  dEL,
MsgStream &  msg 
)
staticprivateinherited

Ensure that all present IDs correspond to configured chains.

Definition at line 209 of file HypoBase.cxx.

211 {
212  // All numeric IDs must correspond to a know, configured, HLT chain
213  DecisionIDContainer decisionIDSet;
214  decisionIDs(*dEL, decisionIDSet);
215  for (const DecisionID id : decisionIDSet) {
216  const std::string chain = HLT::Identifier( id ).name();
217  if (!isChainId(chain) and !isLegId(chain)) {
218  printErrorHeader(dEL, msg);
219  msg << MSG::ERROR << "! Decision contains an ID which does not correspond to a configured chain or a configured chain-leg: " << HLT::Identifier( id ) << endmsg;
220  msg << MSG::ERROR << "! SOLUTION: Locate the producer of the collection, investigate how this bad ID could have been added." << endmsg;
221  printBangs(msg);
222  return StatusCode::FAILURE;
223  }
224  }
225  return StatusCode::SUCCESS;
226 }

◆ validateDuplicatedDecisionID()

StatusCode HypoBase::validateDuplicatedDecisionID ( const ElementLink< TrigCompositeUtils::DecisionContainer > &  dEL,
MsgStream &  msg 
)
staticprivateinherited

Ensure that no space is being wasted by duplicated DecisionIDs in any Decision objects.

Definition at line 229 of file HypoBase.cxx.

231 {
232  // Persistent vector storage does not guarantee against duplicate entries
233  DecisionIDContainer decisionIDSet;
234  decisionIDs(*dEL, decisionIDSet);
235  if (decisionIDSet.size() != (*dEL)->decisions().size()) {
236  printErrorHeader(dEL, msg);
237  msg << MSG::ERROR << "! Decision contains duplicate DecisionIDs." << endmsg;
238  msg << MSG::ERROR << "! SOLUTION: If combining DecisionIDs from multiple parents, de-duplicate the internal std::vector<DecisionID> of 'Decision* d' with:" << endmsg;
239  msg << MSG::ERROR << "! TrigCompositeUtils::insertDecisionIDs(DecisionIDContainer(), d);" << endmsg;
240  printBangs(msg);
241  return StatusCode::FAILURE;
242  }
243  return StatusCode::SUCCESS;
244 }

◆ validateHasLinks()

StatusCode HypoBase::validateHasLinks ( const ElementLink< TrigCompositeUtils::DecisionContainer > &  dEL,
MsgStream &  msg 
)
staticprivateinherited

Ensure all Decisions have the named ElementLink graph edges which they are required to by spec.

Definition at line 338 of file HypoBase.cxx.

340 {
341  const std::string& name = (*dEL)->name();
342  if (name == hypoAlgNodeName()) {
343 
344  // Check that I have a "feature"
345  if ((*dEL)->hasObjectLink( featureString() )) {
346  return StatusCode::SUCCESS;
347  }
348  printErrorHeader(dEL, msg);
349  msg << MSG::ERROR << "! Decision has no '" << featureString() << "' ElementLink." << endmsg;
350  msg << MSG::ERROR << "! Every Decision created by a HypoAlg must correspond to some physics object, and be linked to the object." << endmsg;
351  msg << MSG::ERROR << "! SOLUTION: Ensure that all produced Decision objects are assigned their feature:" << endmsg;
352  msg << MSG::ERROR << "! SOLUTION: decision->setObjectLink<MY_FEATURE_CONTANER_TYPE>(featureString(), MY_FEATURE_ELEMENT_LINK);" << endmsg;
353  printBangs(msg);
354  return StatusCode::FAILURE;
355 
356  } else if (name == inputMakerNodeName()) {
357 
358  // This requirement is dropped for empty input makers to avoid unnecessary graph clutter.
359  bool exempt = false;
360  if ((*dEL)->hasDetail<int32_t>("isEmpty") and (*dEL)->getDetail<int32_t>("isEmpty") == 1) {
361  exempt = true;
362  }
363 
364  if (not (*dEL)->hasObjectLink( roiString() ) and not exempt) {
365  printErrorHeader(dEL, msg);
366  msg << MSG::ERROR << "! Decision has no '" << roiString() << "' ElementLink." << endmsg;
367  msg << MSG::ERROR << "! Every Decision created by a InputMaker must link to the ROI which reconstruction will run on for that Decision object in this Step." << endmsg;
368  msg << MSG::ERROR << "! It can be the FullScan ROI created by the HLTSeeding (FSNOSEED) if no other suitable ROI exists." << endmsg;
369  msg << MSG::ERROR << "! SOLUTION: Check the configuration of InputMakerForRoI or EventViewCreatorAlgorithm responsible for creating this Decision Object" << endmsg;
370  msg << MSG::ERROR << "! SOLUTION: The algorithm must have an ROITool which must attach an '"<< roiString() <<"' link to each Decision Object" << endmsg;
371  printBangs(msg);
372  }
373 
374  } else if (name == hltSeedingNodeName()) {
375 
376  if (not (*dEL)->hasObjectLink( initialRoIString() )) {
377  printErrorHeader(dEL, msg);
378  msg << MSG::ERROR << "! Decision has no '" << initialRoIString() << "' ElementLink." << endmsg;
379  msg << MSG::ERROR << "! Every Decision created by the HLTSeeding must link to the initial ROI which caused it to be created." << endmsg;
380  msg << MSG::ERROR << "! This includes the Decision Object created to represent the Full-Scan/NoSeed (FSNOSEED) ROI." << endmsg;
381  msg << MSG::ERROR << "! SOLUTION: Check the configuration of the HLTSeeding tool responsible for creating this Decision Object" << endmsg;
382  printBangs(msg);
383  }
384 
385  }
386  return StatusCode::SUCCESS;
387 }

◆ validateLogicalFlow()

StatusCode HypoBase::validateLogicalFlow ( const ElementLink< TrigCompositeUtils::DecisionContainer > &  dEL,
MsgStream &  msg,
const LogicalFlowCheckMode  mode 
)
staticprivateinherited

Ensure that all DecisionIDs have propagated correctly from their parent.

Definition at line 247 of file HypoBase.cxx.

250 {
251  // Do not need to validate for L1 Decisions as these have no parents
252  if ((*dEL)->name() == hltSeedingNodeName()) {
253  return StatusCode::SUCCESS;
254  }
255 
256  // Get all my passed DecisionIDs
257  DecisionIDContainer decisionIDSet;
258  decisionIDs(*dEL, decisionIDSet);
259  const std::vector<ElementLink<DecisionContainer>> seeds = (*dEL)->objectCollectionLinks<DecisionContainer>(seedString());
260  for (const DecisionID id : decisionIDSet) {
261  // For each chain that I'm passing, check how many of my parents were also passing the chain
262  size_t parentsWithDecision = 0;
263  for (const ElementLink<DecisionContainer>& seed : seeds) {
264  if ( not seed.isValid() ) {
265  msg << MSG::ERROR << "Invalid seed element link in recursiveValidateGraph" << endmsg;
266  return StatusCode::FAILURE;
267  }
268  DecisionIDContainer seedIDSet;
269  decisionIDs(*seed, seedIDSet);
270  // Id may be a chain-ID (represents a whole chain) or a leg-ID (represents just a single leg of a multi-leg chain)
271  // Is ID is in this parent's set of passed IDs?
272  // Or, (if ID is a leg-ID) is the chain-ID of leg-ID in the parent's set of passed IDs?
273  if (passed(id, seedIDSet) or passed(getIDFromLeg(id).numeric(), seedIDSet)) {
274  ++parentsWithDecision;
275  }
276  else{ // Or, for each of the seed IDs, if the seed ID is a leg-ID, is the seed chain-ID of the seed leg-ID the same as ID?
277  for (auto sid: seedIDSet){
278  if (getIDFromLeg(sid).numeric() == id){
279  ++parentsWithDecision;
280  break;
281  }
282  }
283  }
284  }
285 
286  if (mode == kRequireOne && parentsWithDecision == 0) {
287  // InputMakers may merge multiple of their input collections in order to run reconstruction on a common set of ROI (for example)
288  // So the DecisionIDs may have come from any one or more of the inputs. But zero is not allowed.
289  printErrorHeader(dEL, msg);
290  msg << MSG::ERROR << "! This Decision object is not respecting logical flow of DecisionIDs for chain: " << HLT::Identifier( id ) << endmsg;
291  msg << MSG::ERROR << "! This chain's DecisionID can not be found in any parents of this Decision object:" << endmsg;
292  size_t seed_n = 0;
293  for (const ElementLink<DecisionContainer>& seed : seeds) {
294  msg << MSG::ERROR << "! Index:" << (*seed)->index() << " from collection:" << seed.dataID() << endmsg;
295  msg << MSG::ERROR << "! " << **seed << endmsg;
296  DecisionIDContainer objDecisions;
297  decisionIDs(*seed, objDecisions);
298  for (const TrigCompositeUtils::DecisionID id : objDecisions ) {
299  msg << "! --- Passing in parent #" << seed_n << ": " << HLT::Identifier( id ) << endmsg;
300  }
301  ++seed_n;
302  }
303  msg << MSG::ERROR << "! SOLUTION: Ensure that the producer of this Decision object only adds DecisionIDs"
304  " which were present in at least one of its parents." << endmsg;
305  printBangs(msg);
306  return StatusCode::FAILURE;
307  } else if (mode == kRequireAll && parentsWithDecision != seeds.size()) {
308  // HypoAlgs may form a new physics object from multiple objects in the previous step
309  // (think a BPhysics object whose parents are two Decisions which each correspond to a different L1 MU RoI,
310  // both ROI need to be in active state for the chain, if the chain's HypoTool considers the BPhysics object)
311  // This case requires *all* of the physics objects which are being combined together to be active for the chain
312  // in order to preserve logical flow
313  printErrorHeader(dEL, msg);
314  msg << MSG::ERROR << "! This Decision object is not respecting logical flow of DecisionIDs for chain: " << HLT::Identifier( id ) << endmsg;
315  msg << MSG::ERROR << "! As this Decision object represents the output of a HypoAlg, it must respect logical flow on all "
316  << seeds.size() << " of its parent(s):" << endmsg;
317  size_t seed_n = 0;
318  for (const ElementLink<DecisionContainer>& seed : seeds) {
319  msg << MSG::ERROR << "! Index:" << (*seed)->index() << " from collection:" << seed.dataID() << endmsg;
320  msg << MSG::ERROR << "! " << **seed << endmsg;
321  DecisionIDContainer objDecisions;
322  decisionIDs(*seed, objDecisions);
323  for (const TrigCompositeUtils::DecisionID id : objDecisions ) {
324  msg << "! --- Passing in parent #" << seed_n << ": " << HLT::Identifier( id ) << endmsg;
325  }
326  ++seed_n;
327  }
328  msg << MSG::ERROR << "! SOLUTION: Ensure that the HypoTool responsible for " << HLT::Identifier( id )
329  << " in this HypoAlg only runs if this ID is present in all parent decisions." << endmsg;
330  printBangs(msg);
331  return StatusCode::FAILURE;
332  }
333  }
334  return StatusCode::SUCCESS;
335 }

◆ validateParentLinking()

StatusCode HypoBase::validateParentLinking ( const ElementLink< TrigCompositeUtils::DecisionContainer > &  dEL,
MsgStream &  msg,
bool  runTwoConversion 
)
staticprivateinherited

Ensure that the Decision has at least one valid parent, unless it is a initial Decision from the HLTSeeding.

Definition at line 135 of file HypoBase.cxx.

138 {
139  const std::vector<ElementLink<DecisionContainer>> seeds = (*dEL)->objectCollectionLinks<DecisionContainer>(seedString());
140  // All Decision object must have at least one parent, unless they are the initial set of objects created by the HLTSeeding
141  const std::string& name = (*dEL)->name();
142  if (seeds.size() == 0 && name != hltSeedingNodeName()) {
143  printErrorHeader(dEL, msg);
144  msg << MSG::ERROR << "! Decision has zero parents. This is only allowed for the initial Decisions created by the HLTSeeding." << endmsg;
145  msg << MSG::ERROR << "! SOLUTION: Attach parent Decision(s) with TrigCompositeUtils::linkToPrevious" << endmsg;
146  printBangs(msg);
147  return StatusCode::FAILURE;
148  }
149 
150  if (name == hltSeedingNodeName()) {
151  if (seeds.size() > 0) {
152  printErrorHeader(dEL, msg);
153  msg << MSG::ERROR << "! Decision has parents. This is not allowed for the initial Decisions created by the HLTSeeding." << endmsg;
154  msg << MSG::ERROR << "! SOLUTION: Check HLTSeeding, no where should it be adding a parent link." << endmsg;
155  printBangs(msg);
156  return StatusCode::FAILURE;
157  }
158  return StatusCode::SUCCESS;
159  }
160 
161  static const std::set<std::string> expectedParentsFilter = {hypoAlgNodeName(), comboHypoAlgNodeName(), hltSeedingNodeName()};
162  static const std::set<std::string> expectedParentsInputMaker = {filterNodeName()};
163  static const std::set<std::string> expectedParentsHypoAlg = {inputMakerNodeName()};
164  static const std::set<std::string> expectedParentsComboHypoAlg = {hypoAlgNodeName(), inputMakerNodeName(), hltSeedingNodeName()}; // TODO check hltSeedingNodeName(), needed for newJO
165  static const std::set<std::string> expectedParentsSummaryFilter = {hypoAlgNodeName(), comboHypoAlgNodeName(), hltSeedingNodeName()};
166  static const std::set<std::string> expectedParentsSummaryPassed = {summaryFilterNodeName()};
167 
168  const std::set<std::string>* expectedParentsPtr = nullptr;
169  if (name == filterNodeName()) {
170  expectedParentsPtr = &expectedParentsFilter;
171  } else if (name == inputMakerNodeName() and !runTwoConversion) {
172  expectedParentsPtr = &expectedParentsInputMaker;
173  } else if (name == inputMakerNodeName() and runTwoConversion) {
174  expectedParentsPtr = &expectedParentsFilter; // We don't have Filter nodes in the R2->R3 conversion
175  } else if (name == hypoAlgNodeName()) {
176  expectedParentsPtr = &expectedParentsHypoAlg;
177  } else if (name == comboHypoAlgNodeName()) {
178  expectedParentsPtr = &expectedParentsComboHypoAlg;
179  } else if (name == summaryFilterNodeName()) {
180  expectedParentsPtr = &expectedParentsSummaryFilter;
181  } else if (name == summaryPassNodeName()) {
182  expectedParentsPtr = &expectedParentsSummaryPassed;
183  } else {
184  printErrorHeader(dEL, msg);
185  msg << MSG::ERROR << "! Invalid Node name '" << name << "'." << endmsg;
186  msg << MSG::ERROR << "! SOLUTION: Find the alg which made a node with this name. Allowed named may be found in TrigCompositeUtils.h, See:'Constant string literals used within the HLT'." << endmsg;
187  printBangs(msg);
188  return StatusCode::FAILURE;
189  }
190 
191  for (const ElementLink<DecisionContainer>& seed : seeds) {
192  if (!expectedParentsPtr->contains( (*seed)->name() )) {
193  printErrorHeader(dEL, msg);
194  msg << MSG::ERROR << "! Invalid linking from node with name '" << name << "' to one with name '"<< (*seed)->name() << "'." << endmsg;
195  msg << MSG::ERROR << "! Allowed seed names are:" << endmsg;
196  for (const std::string& allowed : *expectedParentsPtr) {
197  msg << MSG::ERROR << "! " << allowed << endmsg;
198  }
199  msg << MSG::ERROR << "! SOLUTION: Find where this invalid parent was added and correct it." << endmsg;
200  printBangs(msg);
201  return StatusCode::FAILURE;
202  }
203  }
204 
205  return StatusCode::SUCCESS;
206 }

Member Data Documentation

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 114 of file AthCommonReentrantAlgorithm.h.

◆ m_hypoTools

ToolHandleArray< FastTrackFinderLRTHypoTool > FastTrackFinderLRTHypoAlg::m_hypoTools {this, "HypoTools", {},"Tools that perform actual selection"}
private

Definition at line 30 of file FastTrackFinderLRTHypoAlg.h.

◆ m_input

SG::ReadHandleKey<TrigCompositeUtils::DecisionContainer> HypoBase::m_input { this, "HypoInputDecisions", "UNSPECIFIED_INPUT", "Input Decision (implicit)" }
privateinherited

input decisions

Definition at line 101 of file HypoBase.h.

◆ m_max_d0

Gaudi::Property<std::vector<float> > FastTrackFinderLRTHypoAlg::m_max_d0 {this, "max_d0",{900}, "Accept events with d0 below this limit"}
private

Definition at line 35 of file FastTrackFinderLRTHypoAlg.h.

◆ m_max_xi2

Gaudi::Property<std::vector<float> > FastTrackFinderLRTHypoAlg::m_max_xi2 {this, "max_xi2",{10}, "Accept events with Xi2 of the track less than this limit"}
private

Definition at line 36 of file FastTrackFinderLRTHypoAlg.h.

◆ m_min_d0

Gaudi::Property<std::vector<float> > FastTrackFinderLRTHypoAlg::m_min_d0 {this, "min_d0",{0}, "Accept events with d0 above this limit"}
private

Definition at line 34 of file FastTrackFinderLRTHypoAlg.h.

◆ m_min_pt

Gaudi::Property<std::vector<float> > FastTrackFinderLRTHypoAlg::m_min_pt {this, "min_pt",{0}, "Accept events with momentum higher than this limit"}
private

Definition at line 33 of file FastTrackFinderLRTHypoAlg.h.

◆ m_monTool

ToolHandle<GenericMonitoringTool> FastTrackFinderLRTHypoAlg::m_monTool {this,"MonTool","","Monitoring tool"}
private

Definition at line 37 of file FastTrackFinderLRTHypoAlg.h.

◆ m_output

SG::WriteHandleKey<TrigCompositeUtils::DecisionContainer> HypoBase::m_output { this, "HypoOutputDecisions", "UNSPECIFIED_OUTPUT", "Ouput Decision" }
privateinherited

output decisions

Definition at line 103 of file HypoBase.h.

◆ m_runtimeValidation

Gaudi::Property<bool> HypoBase::m_runtimeValidation { this, "RuntimeValidation", false, "Enable detailed runtime validation of HypoAlg output, and upstream Decisions." }
privateinherited

Enabling of detailed validation checks for use during development.

Definition at line 105 of file HypoBase.h.

◆ m_trackCountKey

SG::WriteHandleKey<xAOD::TrigCompositeContainer> FastTrackFinderLRTHypoAlg::m_trackCountKey {this,"trackCountKey","Undefined",""}
private

Definition at line 32 of file FastTrackFinderLRTHypoAlg.h.

◆ m_tracksKey

SG::ReadHandleKey<xAOD::TrackParticleContainer> FastTrackFinderLRTHypoAlg::m_tracksKey {this,"tracksKey","Undefined",""}
private

Definition at line 31 of file FastTrackFinderLRTHypoAlg.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files:
TrigCompositeUtils::featureString
const std::string & featureString()
Definition: TrigCompositeUtils.h:420
CalculateHighPtTerm.pT
pT
Definition: ICHEP2016/CalculateHighPtTerm.py:57
FastTrackFinderLRTHypoAlg::m_min_pt
Gaudi::Property< std::vector< float > > m_min_pt
Definition: FastTrackFinderLRTHypoAlg.h:33
xAOD::TrigComposite_v1::setDetail
bool setDetail(const std::string &name, const TYPE &value)
Set an TYPE detail on the object.
FastTrackFinderLRTHypoAlg::m_max_d0
Gaudi::Property< std::vector< float > > m_max_d0
Definition: FastTrackFinderLRTHypoAlg.h:35
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
runLayerRecalibration.chain
chain
Definition: runLayerRecalibration.py:175
TrigCompositeUtils::DecisionID
unsigned int DecisionID
Definition: TrigComposite_v1.h:27
TrigCompositeUtils::passed
bool passed(DecisionID id, const DecisionIDContainer &idSet)
checks if required decision ID is in the set of IDs in the container
Definition: TrigCompositeUtilsRoot.cxx:118
xAOD::TrigComposite
TrigComposite_v1 TrigComposite
Declare the latest version of the class.
Definition: Event/xAOD/xAODTrigger/xAODTrigger/TrigComposite.h:16
TrigCompositeUtils::newDecisionIn
Decision * newDecisionIn(DecisionContainer *dc, const std::string &name)
Helper method to create a Decision object, place it in the container and return a pointer to it.
Definition: TrigCompositeUtilsRoot.cxx:44
hist_file_dump.d
d
Definition: hist_file_dump.py:142
TrigCompositeUtils::summaryFilterNodeName
const std::string & summaryFilterNodeName()
Definition: TrigCompositeUtils.h:428
TrigCompositeUtils::summaryPassNodeName
const std::string & summaryPassNodeName()
Definition: TrigCompositeUtils.h:429
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
Definition: AthCommonDataStore.h:380
python.TrigCompositeUtils.isLegId
def isLegId(chainName)
Definition: DecisionHandling/python/TrigCompositeUtils.py:18
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
DataVector::get
const T * get(size_type n) const
Access an element, as an rvalue.
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
HypoBase::decisionInput
const SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > & decisionInput() const
methods for derived classes to access handles of the base class input other read/write handles may be...
Definition: HypoBase.cxx:18
HypoBase::printBangs
static void printBangs(MsgStream &msg)
Print header line.
Definition: HypoBase.cxx:390
TrigCompositeUtils::comboHypoAlgNodeName
const std::string & comboHypoAlgNodeName()
Definition: TrigCompositeUtils.h:427
HypoBase::kRequireAll
@ kRequireAll
Definition: HypoBase.h:54
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
TrigCompositeUtils::createAndStore
SG::WriteHandle< DecisionContainer > createAndStore(const SG::WriteHandleKey< DecisionContainer > &key, const EventContext &ctx)
Creates and right away records the DecisionContainer with the key.
Definition: TrigCompositeUtilsRoot.cxx:28
TrigCompositeUtils::roiString
const std::string & roiString()
Definition: TrigCompositeUtils.h:418
HypoBase::decisionOutput
const SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > & decisionOutput() const
methods for derived classes to access handles of the base class output other read/write handles may b...
Definition: HypoBase.cxx:22
XMLtoHeader.count
count
Definition: XMLtoHeader.py:84
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
FastTrackFinderLRTHypoAlg::m_trackCountKey
SG::WriteHandleKey< xAOD::TrigCompositeContainer > m_trackCountKey
Definition: FastTrackFinderLRTHypoAlg.h:32
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:274
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
HypoBase::recursiveValidateGraph
static StatusCode recursiveValidateGraph(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg, bool onlyValidateOneStep, bool runTwoConversion, size_t callDepth, std::set< const TrigCompositeUtils::Decision * > &fullyExploredFrom)
Execute all checks on one node in the graph, d, then recursive call self on all parent nodes up to L1...
Definition: HypoBase.cxx:71
AthCommonReentrantAlgorithm::extraOutputDeps
virtual const DataObjIDColl & extraOutputDeps() const override
Return the list of extra output dependencies.
Definition: AthCommonReentrantAlgorithm.cxx:89
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
AthCommonDataStore
Definition: AthCommonDataStore.h:52
Generate_dsid_ranseed.seed
seed
Definition: Generate_dsid_ranseed.py:10
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TrigCompositeUtils::filterNodeName
const std::string & filterNodeName()
Definition: TrigCompositeUtils.h:424
lumiFormat.i
int i
Definition: lumiFormat.py:85
HypoBase::validateDuplicatedDecisionID
static StatusCode validateDuplicatedDecisionID(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
Ensure that no space is being wasted by duplicated DecisionIDs in any Decision objects.
Definition: HypoBase.cxx:229
L1TopoRatesCalculator_submatrix_plotter.counts
counts
Definition: L1TopoRatesCalculator_submatrix_plotter.py:74
HypoBase::hypoBaseOutputProcessing
StatusCode hypoBaseOutputProcessing(SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle, MSG::Level lvl=MSG::DEBUG) const
Base class function to be called once slice specific code has finished. Handles debug printing and va...
Definition: HypoBase.cxx:35
HypoBase::m_runtimeValidation
Gaudi::Property< bool > m_runtimeValidation
Enabling of detailed validation checks for use during development.
Definition: HypoBase.h:105
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition: AthCommonDataStore.h:145
HypoBase::m_input
SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > m_input
input decisions
Definition: HypoBase.h:101
AthCommonReentrantAlgorithm::sysExecute
virtual StatusCode sysExecute(const EventContext &ctx) override
Execute an algorithm.
Definition: AthCommonReentrantAlgorithm.cxx:76
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Preparation.mode
mode
Definition: Preparation.py:107
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
HypoBase::validateLogicalFlow
static StatusCode validateLogicalFlow(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg, const LogicalFlowCheckMode mode)
Ensure that all DecisionIDs have propagated correctly from their parent.
Definition: HypoBase.cxx:247
HypoBase::validateDecisionIDs
static StatusCode validateDecisionIDs(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
Ensure that all present IDs correspond to configured chains.
Definition: HypoBase.cxx:209
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
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:49
TrigCompositeUtils::initialRoIString
const std::string & initialRoIString()
Definition: TrigCompositeUtils.h:416
DataVector
Derived DataVector<T>.
Definition: DataVector.h:795
HLT::Identifier
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:19
TrigCompositeUtils::hltSeedingNodeName
const std::string & hltSeedingNodeName()
Definition: TrigCompositeUtils.h:423
xAOD::decisions
decisions
Definition: TrigComposite_v1.cxx:101
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
TrigCompositeUtils::isChainId
bool isChainId(const HLT::Identifier &chainIdentifier)
Recognise whether the HLT identifier corresponds to a whole chain.
Definition: TrigCompositeUtilsRoot.cxx:227
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
FastTrackFinderLRTHypoAlg::m_min_d0
Gaudi::Property< std::vector< float > > m_min_d0
Definition: FastTrackFinderLRTHypoAlg.h:34
FastTrackFinderLRTHypoAlg::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: FastTrackFinderLRTHypoAlg.h:37
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:452
FastTrackFinderLRTHypoAlg::m_tracksKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_tracksKey
Definition: FastTrackFinderLRTHypoAlg.h:31
TrigCompositeUtils::viewString
const std::string & viewString()
Definition: TrigCompositeUtils.h:419
FastTrackFinderLRTHypoAlg::m_hypoTools
ToolHandleArray< FastTrackFinderLRTHypoTool > m_hypoTools
Definition: FastTrackFinderLRTHypoAlg.h:30
TrigCompositeUtils::seedString
const std::string & seedString()
Definition: TrigCompositeUtils.h:421
FastTrackFinderLRTHypoAlg::m_max_xi2
Gaudi::Property< std::vector< float > > m_max_xi2
Definition: FastTrackFinderLRTHypoAlg.h:36
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
a
TList * a
Definition: liststreamerinfos.cxx:10
TrigCompositeUtils::DecisionIDContainer
std::set< DecisionID > DecisionIDContainer
Definition: TrigComposite_v1.h:28
h
HypoBase::printDebugInformation
StatusCode printDebugInformation(SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle, MSG::Level lvl) const
Common base function to print information on chains passed by objects considered in the hypo.
Definition: HypoBase.cxx:406
HypoBase::validateParentLinking
static StatusCode validateParentLinking(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg, bool runTwoConversion)
Ensure that the Decision has at least one valid parent, unless it is a initial Decision from the HLTS...
Definition: HypoBase.cxx:135
TrigCompositeUtils::hypoAlgNodeName
const std::string & hypoAlgNodeName()
Definition: TrigCompositeUtils.h:426
FastTrackFinderLRTHypoTool::TrkCountsInfo
Definition: FastTrackFinderLRTHypoTool.h:23
HypoBase::HypoBase
HypoBase(const std::string &name, ISvcLocator *pSvcLocator)
constructor, to be called by sub-class constructors
Definition: HypoBase.cxx:12
AthCommonMsg< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
TrigCompositeUtils::decisionIDs
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
Definition: TrigCompositeUtilsRoot.cxx:65
HLT::Identifier::name
std::string name() const
reports human redable name
Definition: HLTIdentifier.cxx:12
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:629
HypoBase::m_output
SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_output
output decisions
Definition: HypoBase.h:103
AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthCommonReentrantAlgorithm.cxx:107
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:801
HypoBase::runtimeValidation
static StatusCode runtimeValidation(SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle, MsgStream &msg, bool onlyValidateOneStep=true, bool runTwoConversion=false)
Executes all individual runtime tests.
Definition: HypoBase.cxx:47
TrigCompositeUtils::getIDFromLeg
HLT::Identifier getIDFromLeg(const HLT::Identifier &legIdentifier)
Generate the HLT::Identifier which corresponds to the chain name from the leg name.
Definition: TrigCompositeUtilsRoot.cxx:180
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Definition: AthCommonReentrantAlgorithm.h:114
HypoBase::validateHasLinks
static StatusCode validateHasLinks(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
Ensure all Decisions have the named ElementLink graph edges which they are required to by spec.
Definition: HypoBase.cxx:338
TrigCompositeUtils::inputMakerNodeName
const std::string & inputMakerNodeName()
Definition: TrigCompositeUtils.h:425
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
HypoBase::printErrorHeader
static void printErrorHeader(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
A problem was found, print common output data.
Definition: HypoBase.cxx:395
HypoBase::kRequireOne
@ kRequireOne
Require all DecisionIDs to be present in at least one of my parent Decision objects.
Definition: HypoBase.h:53
fitman.k
k
Definition: fitman.py:528
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37