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

#include <TrigBjetBtagHypoAlg.h>

Inheritance diagram for TrigBjetBtagHypoAlg:
Collaboration diagram for TrigBjetBtagHypoAlg:

Public Member Functions

 TrigBjetBtagHypoAlg (const std::string &name, ISvcLocator *pSvcLocator)
 
virtual StatusCode initialize ()
 
virtual StatusCode execute (const EventContext &context) const
 
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 > &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

StatusCode retrievePreviousDecisionContainer (const EventContext &, const TrigCompositeUtils::DecisionContainer *&) const
 
template<class CONTAINER >
StatusCode retrieveCollectionFromView (const EventContext &, ElementLinkVector< CONTAINER > &, const SG::ReadHandleKey< CONTAINER > &, const TrigCompositeUtils::Decision *) const
 
template<class CONTAINER >
StatusCode retrieveObjectFromNavigation (const std::string &, ElementLink< CONTAINER > &, const TrigCompositeUtils::Decision *) const
 
template<class CONTAINER >
StatusCode retrieveCollectionFromNavigation (const std::string &linkName, ElementLinkVector< CONTAINER > &objELs, const TrigCompositeUtils::DecisionContainer *) const
 
template<class CONTAINER >
StatusCode retrieveObjectFromStoreGate (const EventContext &, ElementLinkVector< CONTAINER > &, const SG::ReadHandleKey< CONTAINER > &) const
 
template<class CONTAINER >
StatusCode retrieveObjectFromEventView (const EventContext &, ElementLinkVector< CONTAINER > &, const SG::ReadHandleKey< CONTAINER > &, const TrigCompositeUtils::DecisionContainer *) const
 
template<class CONTAINER >
StatusCode attachObjectLinkToDecisionFromStoreGate (TrigCompositeUtils::Decision &, const SG::ReadHandleKey< CONTAINER > &, const std::string &, int objIndex=0) const
 
template<class CONTAINER >
StatusCode attachObjectLinkToDecisionsFromStoreGate (std::vector< TrigCompositeUtils::Decision * > &, const SG::ReadHandleKey< CONTAINER > &, const std::string &, int forcedIndex=-1) const
 
template<class CONTAINER >
StatusCode attachObjectLinkToDecisionFromEventView (const EventContext &, TrigCompositeUtils::Decision &, const SG::ReadHandleKey< CONTAINER > &, const std::string &, int objIndex=0) const
 
template<class CONTAINER >
StatusCode attachObjectLinkToDecisionsFromEventView (const EventContext &, std::vector< TrigCompositeUtils::Decision * > &, const SG::ReadHandleKey< CONTAINER > &, const std::string &, int forcedIndex=-1) const
 
template<class CONTAINER >
StatusCode attachObjectCollectionLinkToDecisionsFromEventView (const EventContext &, std::vector< TrigCompositeUtils::Decision * > &, const SG::ReadHandleKey< CONTAINER > &, const std::string &) const
 
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

 TrigBjetBtagHypoAlg ()
 
virtual StatusCode monitor_jets (const ElementLinkVector< xAOD::JetContainer > &jetELs, const ElementLinkVector< xAOD::JetContainer > &all_bTaggedJetELs) const
 
virtual StatusCode monitor_tracks (const EventContext &context, const TrigCompositeUtils::DecisionContainer *prevDecisionContainer) const
 
virtual StatusCode monitor_primary_vertex (const ElementLink< xAOD::VertexContainer > &primVertexEL) const
 
virtual StatusCode monitor_flavor_probabilities (const ElementLinkVector< xAOD::BTaggingContainer > &bTaggingEL, const std::string &var_name) const
 
virtual StatusCode monitor_flavor_bb_probabilities (const ElementLinkVector< xAOD::BTaggingContainer > &bTaggingEL, const std::string &var_name) const
 
virtual ElementLinkVector< xAOD::BTaggingContainercollect_valid_links (const ElementLinkVector< xAOD::BTaggingContainer > &bTaggingEL, std::string tagger) const
 
virtual StatusCode monitor_btagging (const ElementLinkVector< xAOD::BTaggingContainer > &bTaggingEL) const
 
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 > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

ToolHandleArray< TrigBjetBtagHypoToolm_hypoTools {this,"HypoTools",{},"Hypo Tools"}
 
ToolHandle< GenericMonitoringToolm_monTool {this,"MonTool","","Monitoring tool"}
 
SG::ReadHandleKey< xAOD::JetContainerm_bTaggedJetKey {this,"BTaggedJetKey","","Key for b-tagged jets"}
 
SG::ReadHandleKey< xAOD::BTaggingContainerm_bTagKey {this,"BTaggingKey","","Key for BTagging"}
 
SG::ReadHandleKey< xAOD::TrackParticleContainerm_trackKey {this,"TracksKey","","Key for precision tracks"}
 
SG::ReadHandleKey< xAOD::VertexContainerm_inputPrmVtx {this,"PrmVtxKey","","Key for Primary vertex collection for monitoring"}
 
Gaudi::Property< std::string > m_bTaggingLink {this,"BTaggingLink","Unspecified","b-Tagging Link name in navigation (output)"}
 
Gaudi::Property< std::string > m_prmVtxLink {this,"PrmVtxLink","Unspecified","Vertex Link name in navigation (input)"}
 
Gaudi::Property< std::string > m_btaggingLinkName {this, "BtaggingLinkName", "btag"}
 
SG::ReadCondHandleKey< InDet::BeamSpotDatam_beamSpotKey
 
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 39 of file TrigBjetBtagHypoAlg.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

◆ TrigBjetBtagHypoAlg() [1/2]

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

Definition at line 10 of file TrigBjetBtagHypoAlg.cxx.

11  :
12  TrigBjetHypoAlgBase( name, pSvcLocator ) {}

◆ TrigBjetBtagHypoAlg() [2/2]

TrigBjetBtagHypoAlg::TrigBjetBtagHypoAlg ( )
private

Member Function Documentation

◆ attachObjectCollectionLinkToDecisionsFromEventView()

template<class CONTAINER >
StatusCode TrigBjetHypoAlgBase::attachObjectCollectionLinkToDecisionsFromEventView ( const EventContext &  ,
std::vector< TrigCompositeUtils::Decision * > &  ,
const SG::ReadHandleKey< CONTAINER > &  ,
const std::string &   
) const
protectedinherited

◆ attachObjectLinkToDecisionFromEventView()

template<class CONTAINER >
StatusCode TrigBjetHypoAlgBase::attachObjectLinkToDecisionFromEventView ( const EventContext &  ,
TrigCompositeUtils::Decision ,
const SG::ReadHandleKey< CONTAINER > &  ,
const std::string &  ,
int  objIndex = 0 
) const
protectedinherited

◆ attachObjectLinkToDecisionFromStoreGate()

template<class CONTAINER >
StatusCode TrigBjetHypoAlgBase::attachObjectLinkToDecisionFromStoreGate ( TrigCompositeUtils::Decision ,
const SG::ReadHandleKey< CONTAINER > &  ,
const std::string &  ,
int  objIndex = 0 
) const
protectedinherited

◆ attachObjectLinkToDecisionsFromEventView()

template<class CONTAINER >
StatusCode TrigBjetHypoAlgBase::attachObjectLinkToDecisionsFromEventView ( const EventContext &  ,
std::vector< TrigCompositeUtils::Decision * > &  ,
const SG::ReadHandleKey< CONTAINER > &  ,
const std::string &  ,
int  forcedIndex = -1 
) const
protectedinherited

◆ attachObjectLinkToDecisionsFromStoreGate()

template<class CONTAINER >
StatusCode TrigBjetHypoAlgBase::attachObjectLinkToDecisionsFromStoreGate ( std::vector< TrigCompositeUtils::Decision * > &  ,
const SG::ReadHandleKey< CONTAINER > &  ,
const std::string &  ,
int  forcedIndex = -1 
) const
protectedinherited

◆ cardinality()

unsigned int AthReentrantAlgorithm::cardinality ( ) const
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 55 of file AthReentrantAlgorithm.cxx.

56 {
57  return 0;
58 }

◆ collect_valid_links()

ElementLinkVector< xAOD::BTaggingContainer > TrigBjetBtagHypoAlg::collect_valid_links ( const ElementLinkVector< xAOD::BTaggingContainer > &  bTaggingEL,
std::string  tagger 
) const
privatevirtual

Definition at line 400 of file TrigBjetBtagHypoAlg.cxx.

401  {
402 
404  for (const ElementLink< xAOD::BTaggingContainer > bTagLink : bTaggingEL) {
405  SG::ConstAccessor<char> acc(tagger+"_isDefaults");
406  if ( not acc(**bTagLink) ) { valid_bTaggingEL.push_back( bTagLink ); }
407  }
408  return valid_bTaggingEL;
409 }

◆ 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 16 of file HypoBase.cxx.

16  {
17  return m_input;
18 }

◆ 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 20 of file HypoBase.cxx.

20  {
21  return m_output;
22 }

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  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 > &  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 > &  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 > &  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 > &  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 TrigBjetBtagHypoAlg::execute ( const EventContext &  context) const
virtual

Implements TrigBjetHypoAlgBase.

Definition at line 36 of file TrigBjetBtagHypoAlg.cxx.

36  {
37  ATH_MSG_DEBUG ( "Executing " << name() << "..." );
38 
39  // ========================================================================================================================== // ** Retrieve Ingredients
40  // ==========================================================================================================================
41 
42  // Read in previous Decisions made before running this Hypo Alg.
43  const TrigCompositeUtils::DecisionContainer *prevDecisionContainer = nullptr;
44  CHECK( retrievePreviousDecisionContainer( context,prevDecisionContainer ) );
45  ATH_MSG_DEBUG( "Running with "<< prevDecisionContainer->size() <<" previous decisions");
46 
47  // Retrive Precision tracks from Event Views. We get them all in this way!
49  CHECK( retrieveObjectFromEventView( context,trackELs,m_trackKey,prevDecisionContainer ) );
50  ATH_MSG_DEBUG( "Retrieved " << trackELs.size() << " precision tracks..." );
51 
52 
53  for ( const ElementLink< xAOD::TrackParticleContainer > trackLink : trackELs )
54  ATH_MSG_DEBUG( " * pt=" << (*trackLink)->p4().Et() <<
55  " eta=" << (*trackLink)->eta() <<
56  " phi=" << (*trackLink)->phi() );
57 
58 
59  // Retrieve Jets
61  CHECK( retrieveCollectionFromNavigation( TrigCompositeUtils::featureString(), jetELs, prevDecisionContainer ) );
62  ATH_MSG_DEBUG( "Retrieved " << jetELs.size() << " Jets of key " << TrigCompositeUtils::featureString() );
63 
64  // online monitoring for tracks, per decision
65  CHECK( monitor_tracks( context, prevDecisionContainer ) );
66 
67  // Retrieve Vertices
69  CHECK( retrieveObjectFromStoreGate( context,vertexELs,m_inputPrmVtx ) );
70  ATH_MSG_DEBUG( "Retrieved " << vertexELs.size() <<" vertices..." );
71 
72  // opnline monitoring for vertex
73  auto monitor_for_vertex_count = Monitored::Scalar( "vertex_count", vertexELs.size() );
74 
75 
76  // ==========================================================================================================================
77  // ** Prepare Outputs
78  // ==========================================================================================================================
79 
80  // Decisions
82  TrigCompositeUtils::DecisionContainer *outputDecisions = handle.ptr();
83 
84  // ==========================================================================================================================
85  // ** Prepare Decisions
86  // ==========================================================================================================================
87 
88  const unsigned int nDecisions = prevDecisionContainer->size();
89 
90  // Create output decisions
91  ATH_MSG_DEBUG("Creating Output Decisions and Linking Stuff to it");
92  std::vector< TrigCompositeUtils::Decision* > newDecisions;
94  for ( unsigned int index(0); index<nDecisions; index++ ) {
96  prevDecisionContainer->at(index),
98 
99  // Attaching links to the output decisions
100  // Retrieved jets from view on which we have run flavour tagging
103  bTaggedJetEL,
105  prevDecisionContainer->at(index) ) );
106 
107  if ( bTaggedJetEL.size() != 1 ) {
108  ATH_MSG_ERROR( "Did not find only 1 b-tagged jet object from View!" );
109  return StatusCode::FAILURE;
110  }
111 
112  toAdd->setObjectLink< xAOD::JetContainer >( TrigCompositeUtils::featureString(),bTaggedJetEL.front() );
113  all_bTaggedJetELs.push_back( bTaggedJetEL.front() );
114 
115 
116 
117  // Retrieve Flavour Tagging object from view
120  bTaggingEL,
121  m_bTagKey,
122  prevDecisionContainer->at(index) ) );
123 
124  if ( bTaggingEL.size() != 1 ) {
125  ATH_MSG_ERROR( "Did not find only 1 b-tagging object from View!" );
126  return StatusCode::FAILURE;
127  }
128 
129  toAdd->setObjectLink< xAOD::BTaggingContainer >(m_btaggingLinkName,bTaggingEL.front() ); // TM 2021-10-30
130 
131  // online monitoring for btagging, with a check to ensure the PV is marked
133  CHECK( retrieveObjectFromNavigation( m_prmVtxLink.value(), vertexEL, prevDecisionContainer->at(index) ) );
134 
135  if ( (*vertexEL)->vertexType() == xAOD::VxType::VertexType::PriVtx ) {
136  CHECK( monitor_primary_vertex( vertexEL ) );
137  CHECK( monitor_btagging( bTaggingEL ) );
138  }
139 
140 
141 
142 
143  // Add to Decision collection
144  newDecisions.push_back( toAdd );
145  }
146 
147  // online monitoring for jets
148  auto monitor_for_jet_count = Monitored::Scalar( "jet_count", jetELs.size() );
149  CHECK( monitor_jets( jetELs, all_bTaggedJetELs ) );
150 
151  auto monitor_group_for_events = Monitored::Group( m_monTool, monitor_for_jet_count, monitor_for_vertex_count );
152 
153 
154 
156  //auto monitor_for_jet_count = Monitored::Scalar( "jet_count", jetELs.size() );
157  //CHECK( monitor_jets( jetELs ) );
158 
159 
160  // ==========================================================================================================================
161  // ** Prepare input to Hypo Tools
162  // ==========================================================================================================================
163 
165  m_beamSpotKey, context);
166  const InDet::BeamSpotData* beamSpot = beamSpotHandle.retrieve();
167 
168  std::vector< TrigBjetBtagHypoTool::TrigBjetBtagHypoToolInfo > bTagHypoInputs;
169 
170  for ( unsigned int index(0); index<nDecisions; index++ ) {
171 
172  // Extract the IDs of the b-jet chains which are active.
173  // Previous decision IDs.
174  const TrigCompositeUtils::Decision *previousDecision = prevDecisionContainer->at(index);
175 
176  TrigCompositeUtils::DecisionIDContainer previousDecisionIDs {
177  TrigCompositeUtils::decisionIDs( previousDecision ).begin(),
178  TrigCompositeUtils::decisionIDs( previousDecision ).end() };
179 
180  // Retrieve PV from navigation
182  CHECK( retrieveObjectFromNavigation( m_prmVtxLink.value(), vertexEL, previousDecision ) );
183 
184  // Retrieve b-tagging code
186  CHECK( retrieveCollectionFromView< xAOD::BTaggingContainer >( context,
187  bTaggingELs,
188  m_bTagKey,
189  previousDecision ) );
190  CHECK( bTaggingELs.size() == 1 );
191 
192  // Put everything in place
194  infoToAdd.previousDecisionIDs = previousDecisionIDs;
195  infoToAdd.btaggingEL = bTaggingELs.front();
196  infoToAdd.vertexEL = vertexEL;
197  infoToAdd.decision = newDecisions.at( index );
198  infoToAdd.beamSpot = beamSpot;
199  bTagHypoInputs.push_back( infoToAdd );
200  }
201 
202  // ==========================================================================================================================
203 
204  // Run on Trigger Chains
205  for ( const ToolHandle< TrigBjetBtagHypoTool >& tool : m_hypoTools )
206  CHECK( tool->decide( bTagHypoInputs ) );
207 
208  ATH_MSG_DEBUG( "Exiting with " << handle->size() << " decisions" );
209  ATH_MSG_DEBUG( "CHECKING OUTPUT DECISION HANDLE" );
210  CHECK( hypoBaseOutputProcessing(handle) );
211 
212  // ==========================================================================================================================
213 
214  return StatusCode::SUCCESS;
215 }

◆ 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 & AthReentrantAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

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

Definition at line 79 of file AthReentrantAlgorithm.cxx.

80 {
81  // If we didn't find any symlinks to add, just return the collection
82  // from the base class. Otherwise, return the extended collection.
83  if (!m_extendedExtraObjects.empty()) {
85  }
86  return Algorithm::extraOutputDeps();
87 }

◆ filterPassed()

virtual bool AthReentrantAlgorithm::filterPassed ( const EventContext &  ctx) const
inlinevirtualinherited

Definition at line 135 of file AthReentrantAlgorithm.h.

135  {
136  return execState( ctx ).filterPassed();
137  }

◆ 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 33 of file HypoBase.cxx.

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

◆ initialize()

StatusCode TrigBjetBtagHypoAlg::initialize ( )
virtual

Implements TrigBjetHypoAlgBase.

Definition at line 15 of file TrigBjetBtagHypoAlg.cxx.

15  {
16 
17  ATH_CHECK( m_hypoTools.retrieve() );
18  if ( !m_monTool.empty() ) CHECK( m_monTool.retrieve() );
19 
20  ATH_CHECK( m_bTaggedJetKey.initialize() );
21  ATH_CHECK( m_bTagKey.initialize() );
23  ATH_CHECK( m_inputPrmVtx.initialize() );
24 
29 
31 
32  return StatusCode::SUCCESS;
33 }

◆ 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 AthReentrantAlgorithm::isClonable ( ) const
overridevirtualinherited

◆ monitor_btagging()

StatusCode TrigBjetBtagHypoAlg::monitor_btagging ( const ElementLinkVector< xAOD::BTaggingContainer > &  bTaggingEL) const
privatevirtual

Definition at line 412 of file TrigBjetBtagHypoAlg.cxx.

412  {
413  // Monitor high-level tagger flavor probabilites
414  CHECK( monitor_flavor_probabilities(bTaggingEL, "DL1r") );
415  CHECK( monitor_flavor_probabilities(bTaggingEL, "rnnip") );
416  CHECK( monitor_flavor_probabilities(bTaggingEL, "DL1d20211216") );
417  CHECK( monitor_flavor_probabilities(bTaggingEL, "dips20211116") );
418  CHECK( monitor_flavor_probabilities(bTaggingEL, "GN120220813") );
419  CHECK( monitor_flavor_probabilities(bTaggingEL, "GN220240122") );
420 
421  // Monitor JetFitter
422  MONITOR_BTAG_AUX_VAR(JetFitter_isDefaults, char, bTaggingEL);
423  auto validJetFitter_bTaggingEL = collect_valid_links(bTaggingEL, "JetFitter");
424  MONITOR_BTAG_AUX_VAR(JetFitter_N2Tpair, int, validJetFitter_bTaggingEL);
425  MONITOR_BTAG_AUX_VAR(JetFitter_nVTX, int, validJetFitter_bTaggingEL);
426  MONITOR_BTAG_AUX_VAR(JetFitter_nSingleTracks, int, validJetFitter_bTaggingEL);
427  MONITOR_BTAG_AUX_VAR(JetFitter_nTracksAtVtx, int, validJetFitter_bTaggingEL);
428  MONITOR_BTAG_AUX_VAR(JetFitter_mass, float, validJetFitter_bTaggingEL);
429  MONITOR_BTAG_AUX_VAR(JetFitter_energyFraction, float, validJetFitter_bTaggingEL);
430  MONITOR_BTAG_AUX_VAR(JetFitter_significance3d, float, validJetFitter_bTaggingEL);
431  MONITOR_BTAG_AUX_VAR(JetFitter_deltaeta, float, validJetFitter_bTaggingEL);
432  MONITOR_BTAG_AUX_VAR(JetFitter_deltaphi, float, validJetFitter_bTaggingEL);
433  MONITOR_BTAG_AUX_VAR(JetFitter_deltaR, float, validJetFitter_bTaggingEL);
434  auto monitor_group_for_JetFitter = Monitored::Group( m_monTool,
435  monitor_for_JetFitter_N2Tpair, monitor_for_JetFitter_nVTX,
436  monitor_for_JetFitter_nSingleTracks, monitor_for_JetFitter_nTracksAtVtx,
437  monitor_for_JetFitter_mass, monitor_for_JetFitter_energyFraction,
438  monitor_for_JetFitter_significance3d, monitor_for_JetFitter_deltaeta,
439  monitor_for_JetFitter_deltaphi, monitor_for_JetFitter_deltaR
440  );
441 
442  // Monitor SV1
443  MONITOR_BTAG_AUX_VAR(SV1_isDefaults, char, bTaggingEL);
444  auto validSV1_bTaggingEL = collect_valid_links(bTaggingEL, "SV1");
445  MONITOR_BTAG_AUX_VAR(SV1_NGTinSvx, int, validSV1_bTaggingEL);
446  MONITOR_BTAG_AUX_VAR(SV1_masssvx, float, validSV1_bTaggingEL);
447  MONITOR_BTAG_AUX_VAR(SV1_N2Tpair, int, validSV1_bTaggingEL);
448  MONITOR_BTAG_AUX_VAR(SV1_efracsvx, float, validSV1_bTaggingEL);
449  MONITOR_BTAG_AUX_VAR(SV1_deltaR, float, validSV1_bTaggingEL);
450  MONITOR_BTAG_AUX_VAR(SV1_Lxy, float, validSV1_bTaggingEL);
451  MONITOR_BTAG_AUX_VAR(SV1_L3d, float, validSV1_bTaggingEL);
452  MONITOR_BTAG_AUX_VAR(SV1_significance3d, float, validSV1_bTaggingEL);
453  auto monitor_group_for_SV1 = Monitored::Group( m_monTool,
454  monitor_for_SV1_NGTinSvx, monitor_for_SV1_masssvx,
455  monitor_for_SV1_N2Tpair, monitor_for_SV1_efracsvx,
456  monitor_for_SV1_deltaR, monitor_for_SV1_Lxy,
457  monitor_for_SV1_L3d, monitor_for_SV1_significance3d
458  );
459 
460  // Monitor JetFitterSecondaryVertex
461  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_isDefaults, char, bTaggingEL);
462  auto validJFSV_bTaggingEL = collect_valid_links(bTaggingEL, "JetFitterSecondaryVertex");
463  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_nTracks, int, validJFSV_bTaggingEL);
464  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_mass, float, validJFSV_bTaggingEL);
465  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_energy, float, validJFSV_bTaggingEL);
466  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_energyFraction, float, validJFSV_bTaggingEL);
467  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_displacement3d, float, validJFSV_bTaggingEL);
468  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_displacement2d, float, validJFSV_bTaggingEL);
469  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_maximumTrackRelativeEta, float, validJFSV_bTaggingEL);
470  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_minimumTrackRelativeEta, float, validJFSV_bTaggingEL);
471  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_averageTrackRelativeEta, float, validJFSV_bTaggingEL);
472  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_maximumAllJetTrackRelativeEta, float, validJFSV_bTaggingEL);
473  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_minimumAllJetTrackRelativeEta, float, validJFSV_bTaggingEL);
474  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_averageAllJetTrackRelativeEta, float, validJFSV_bTaggingEL);
475  auto monitor_group_for_JFSV = Monitored::Group( m_monTool,
476  monitor_for_JetFitterSecondaryVertex_nTracks,
477  monitor_for_JetFitterSecondaryVertex_mass,
478  monitor_for_JetFitterSecondaryVertex_energy,
479  monitor_for_JetFitterSecondaryVertex_energyFraction,
480  monitor_for_JetFitterSecondaryVertex_displacement3d,
481  monitor_for_JetFitterSecondaryVertex_displacement2d,
482  monitor_for_JetFitterSecondaryVertex_maximumTrackRelativeEta,
483  monitor_for_JetFitterSecondaryVertex_minimumTrackRelativeEta,
484  monitor_for_JetFitterSecondaryVertex_averageTrackRelativeEta,
485  monitor_for_JetFitterSecondaryVertex_maximumAllJetTrackRelativeEta,
486  monitor_for_JetFitterSecondaryVertex_minimumAllJetTrackRelativeEta,
487  monitor_for_JetFitterSecondaryVertex_averageAllJetTrackRelativeEta
488  );
489 
490 
491  auto monitor_group_for_btagging = Monitored::Group( m_monTool,
492  monitor_for_JetFitter_isDefaults,
493  monitor_for_SV1_isDefaults,
494  monitor_for_JetFitterSecondaryVertex_isDefaults
495  );
496 
497  return StatusCode::SUCCESS;
498 }

◆ monitor_flavor_bb_probabilities()

StatusCode TrigBjetBtagHypoAlg::monitor_flavor_bb_probabilities ( const ElementLinkVector< xAOD::BTaggingContainer > &  bTaggingEL,
const std::string &  var_name 
) const
privatevirtual

Definition at line 366 of file TrigBjetBtagHypoAlg.cxx.

366  {
367 
368  auto monitor_pb = Monitored::Collection( "bbtag_"+var_name+"_pb", bTaggingEL,
370  double pb = -1;
372  pb = acc(**bTagLink);
373  return pb;
374  } );
375 
376  auto monitor_pbb = Monitored::Collection( "bbtag_"+var_name+"_pbb", bTaggingEL,
378  double pbb = -1;
380  pbb = acc(**bTagLink);
381  return pbb;
382  } );
383 
384  auto monitor_group_for_flavor_bb_tag_var = Monitored::Group( m_monTool, monitor_pb, monitor_pbb );
385 
386  return StatusCode::SUCCESS;
387 }

◆ monitor_flavor_probabilities()

StatusCode TrigBjetBtagHypoAlg::monitor_flavor_probabilities ( const ElementLinkVector< xAOD::BTaggingContainer > &  bTaggingEL,
const std::string &  var_name 
) const
privatevirtual

Definition at line 332 of file TrigBjetBtagHypoAlg.cxx.

332  {
333  auto monitor_pu = Monitored::Collection( "btag_"+var_name+"_pu", bTaggingEL,
335  double pu = -1;
336  (*bTagLink)->pu( var_name, pu );
337  return pu;
338  } );
339 
340  auto monitor_pb = Monitored::Collection( "btag_"+var_name+"_pb", bTaggingEL,
342  double pb = -1;
343  (*bTagLink)->pb( var_name, pb );
344  return pb;
345  } );
346 
347  auto monitor_pc = Monitored::Collection( "btag_"+var_name+"_pc", bTaggingEL,
349  double pc = -1;
350  (*bTagLink)->pc( var_name, pc );
351  return pc;
352  } );
353 
354  auto monitor_llr = Monitored::Collection( "btag_"+var_name+"_llr", bTaggingEL,
356  double llr = -1;
357  (*bTagLink)->loglikelihoodratio( var_name, llr );
358  return llr;
359  } );
360 
361  auto monitor_group_for_flavor_tag_var = Monitored::Group( m_monTool, monitor_pu, monitor_pb, monitor_pc, monitor_llr );
362 
363  return StatusCode::SUCCESS;
364 }

◆ monitor_jets()

StatusCode TrigBjetBtagHypoAlg::monitor_jets ( const ElementLinkVector< xAOD::JetContainer > &  jetELs,
const ElementLinkVector< xAOD::JetContainer > &  all_bTaggedJetELs 
) const
privatevirtual

Definition at line 217 of file TrigBjetBtagHypoAlg.cxx.

217  {
218 
219  auto monitor_for_jet_pt = Monitored::Collection( "jet_pt", jetELs,
220  [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->pt() / 1000.0 /*Gev*/; } );
221  auto monitor_for_jet_eta = Monitored::Collection( "jet_eta", jetELs,
222  [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->eta(); } );
223  auto monitor_for_jet_phi = Monitored::Collection( "jet_phi", jetELs,
224  [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->phi(); } );
225 
226  auto monitor_for_Bjet_pt = Monitored::Collection( "Bjet_pt", all_bTaggedJetELs,
227  [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->pt() / 1000.0 /*Gev*/; } );
228  auto monitor_for_Bjet_eta = Monitored::Collection( "Bjet_eta", all_bTaggedJetELs,
229  [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->eta(); } );
230  auto monitor_for_Bjet_phi = Monitored::Collection( "Bjet_phi", all_bTaggedJetELs,
231  [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->phi(); } );
232 
233  for( unsigned int i = 0; i < jetELs.size(); i++ ) {
234  const ElementLink< xAOD::JetContainer >& jetLink = jetELs[i];
235  const ElementLink< xAOD::JetContainer >& BjetLink = all_bTaggedJetELs[i];
236  auto monitor_for_jet_delta_pt = Monitored::Scalar( "jet_bjet_delta_pt", (*jetLink)->pt() - (*BjetLink)->pt() );
237  auto monitor_for_jet_delta_eta = Monitored::Scalar( "jet_bjet_delta_eta", (*jetLink)->eta() - (*BjetLink)->eta() );
238  auto monitor_for_jet_delta_phi = Monitored::Scalar( "jet_bjet_delta_phi", (*jetLink)->phi() - (*BjetLink)->phi() );
239  auto monitor_group_for_jet_deltas = Monitored::Group( m_monTool,
240  monitor_for_jet_delta_pt, monitor_for_jet_delta_eta, monitor_for_jet_delta_phi
241  );
242 
243  }
244 
245  auto monitor_group_for_jets = Monitored::Group( m_monTool,
246  monitor_for_jet_pt, monitor_for_jet_eta, monitor_for_jet_phi,
247  monitor_for_Bjet_pt, monitor_for_Bjet_eta, monitor_for_Bjet_phi
248  );
249 
250  return StatusCode::SUCCESS;
251 }

◆ monitor_primary_vertex()

StatusCode TrigBjetBtagHypoAlg::monitor_primary_vertex ( const ElementLink< xAOD::VertexContainer > &  primVertexEL) const
privatevirtual

Definition at line 390 of file TrigBjetBtagHypoAlg.cxx.

390  {
391  auto monitor_for_primVtx_x = Monitored::Scalar( "primVtx_x", (*primVertexEL)->x() );
392  auto monitor_for_primVtx_y = Monitored::Scalar( "primVtx_y", (*primVertexEL)->y() );
393  auto monitor_for_primVtx_z = Monitored::Scalar( "primVtx_z", (*primVertexEL)->z() );
394 
395  auto monitor_group_for_primary_vertex = Monitored::Group( m_monTool, monitor_for_primVtx_x, monitor_for_primVtx_y, monitor_for_primVtx_z );
396  return StatusCode::SUCCESS;
397 }

◆ monitor_tracks()

StatusCode TrigBjetBtagHypoAlg::monitor_tracks ( const EventContext &  context,
const TrigCompositeUtils::DecisionContainer prevDecisionContainer 
) const
privatevirtual

Definition at line 253 of file TrigBjetBtagHypoAlg.cxx.

253  {
254  // This vector is for checking we are not reading more than once from the same View, thus retrieving the same objects multiple times!
255  std::vector< ElementLink< ViewContainer > > readViews;
256  for ( const TrigCompositeUtils::Decision* previousDecision: *prevDecisionContainer ) {
257  // get View
258  ElementLink< ViewContainer > viewEL = previousDecision->objectLink< ViewContainer >( TrigCompositeUtils::viewString() );
259  ATH_CHECK( viewEL.isValid() );
260  ATH_MSG_DEBUG( "Retrieved View" );
261 
262  bool alreadyUsed = false;
263  for ( const ElementLink< ViewContainer >& storedViews : readViews ) {
264  if ( viewEL == storedViews ) {
265  ATH_MSG_DEBUG( "We have already used this view!" );
266  alreadyUsed = true;
267  break;
268  }
269  }
270  if ( alreadyUsed ) continue;
271 
272  readViews.push_back( viewEL );
273 
274  // online monitoring for tracks
276  ATH_CHECK( trackHandle.isValid() );
277  size_t Counter = 0;
279  for ( auto it = trackHandle->begin(); it != trackHandle->end(); ++it, ++Counter ) {
280  ElementLink< xAOD::TrackParticleContainer > tracks = ViewHelper::makeLink< xAOD::TrackParticleContainer >( *viewEL, trackHandle, Counter );
281  ATH_CHECK( tracks.isValid() );
282  trackELs.push_back( tracks );
283  }
284  auto monitor_for_track_count = Monitored::Scalar( "track_count", trackELs.size() );
285  auto monitor_group_for_decision = Monitored::Group( m_monTool, monitor_for_track_count);
286 
287  auto monitor_for_track_Et = Monitored::Collection( "track_Et", trackELs,
288  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->p4().Et() / 1000.0 /*Gev*/; } );
289  auto monitor_for_track_eta = Monitored::Collection( "track_eta", trackELs,
290  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->eta(); } );
291  auto monitor_for_track_phi = Monitored::Collection( "track_phi", trackELs,
292  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->phi(); } );
293 
294  // Monitors for d0 and z0 track impact parameter variables
295  auto monitor_for_track_d0 = Monitored::Collection( "track_d0", trackELs,
296  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->d0(); } );
297 
298  auto monitor_for_track_d0err = Monitored::Collection( "track_d0err", trackELs,
299  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) {
300  return Amg::error( (*trackLink)->definingParametersCovMatrix(), 0);
301  } );
302 
303  auto monitor_for_track_d0sig = Monitored::Collection( "track_d0sig", trackELs,
304  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) {
305  return (*trackLink)->d0() / Amg::error( (*trackLink)->definingParametersCovMatrix(), 0);
306  } );
307 
308  auto monitor_for_track_z0 = Monitored::Collection( "track_z0", trackELs,
309  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->z0(); } );
310 
311  auto monitor_for_track_z0err = Monitored::Collection( "track_z0err", trackELs,
312  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) {
313  return Amg::error( (*trackLink)->definingParametersCovMatrix(), 1);
314  } );
315 
316  auto monitor_for_track_z0sig = Monitored::Collection( "track_z0sig", trackELs,
317  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) {
318  return (*trackLink)->z0() / Amg::error( (*trackLink)->definingParametersCovMatrix(), 1);
319  } );
320 
321  auto monitor_group_for_tracks = Monitored::Group( m_monTool,
322  monitor_for_track_Et, monitor_for_track_eta, monitor_for_track_phi,
323  monitor_for_track_d0, monitor_for_track_d0err, monitor_for_track_d0sig,
324  monitor_for_track_z0, monitor_for_track_z0err, monitor_for_track_z0sig
325  );
326 
327  }
328  return StatusCode::SUCCESS;
329 }

◆ 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 388 of file HypoBase.cxx.

388  {
389  msg << MSG::ERROR << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endmsg;
390 }

◆ 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 404 of file HypoBase.cxx.

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

◆ printErrorHeader()

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

A problem was found, print common output data.

Definition at line 393 of file HypoBase.cxx.

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

◆ 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 69 of file HypoBase.cxx.

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

◆ 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  }

◆ retrieveCollectionFromNavigation()

template<class CONTAINER >
StatusCode TrigBjetHypoAlgBase::retrieveCollectionFromNavigation ( const std::string &  linkName,
ElementLinkVector< CONTAINER > &  objELs,
const TrigCompositeUtils::DecisionContainer  
) const
protectedinherited

◆ retrieveCollectionFromView()

template<class CONTAINER >
StatusCode TrigBjetHypoAlgBase::retrieveCollectionFromView ( const EventContext &  ,
ElementLinkVector< CONTAINER > &  ,
const SG::ReadHandleKey< CONTAINER > &  ,
const TrigCompositeUtils::Decision  
) const
protectedinherited

◆ retrieveObjectFromEventView()

template<class CONTAINER >
StatusCode TrigBjetHypoAlgBase::retrieveObjectFromEventView ( const EventContext &  ,
ElementLinkVector< CONTAINER > &  ,
const SG::ReadHandleKey< CONTAINER > &  ,
const TrigCompositeUtils::DecisionContainer  
) const
protectedinherited

◆ retrieveObjectFromNavigation()

template<class CONTAINER >
StatusCode TrigBjetHypoAlgBase::retrieveObjectFromNavigation ( const std::string &  ,
ElementLink< CONTAINER > &  ,
const TrigCompositeUtils::Decision  
) const
protectedinherited

◆ retrieveObjectFromStoreGate()

template<class CONTAINER >
StatusCode TrigBjetHypoAlgBase::retrieveObjectFromStoreGate ( const EventContext &  ,
ElementLinkVector< CONTAINER > &  ,
const SG::ReadHandleKey< CONTAINER > &   
) const
protectedinherited

◆ retrievePreviousDecisionContainer()

StatusCode TrigBjetHypoAlgBase::retrievePreviousDecisionContainer ( const EventContext &  context,
const TrigCompositeUtils::DecisionContainer *&  prevDecisionContainer 
) const
protectedinherited

Definition at line 15 of file TrigBjetHypoAlgBase.cxx.

16  {
17 
18  ATH_MSG_DEBUG( "Retrieving Previous Decision" );
20  CHECK( prevDecisionContainerHandle.isValid() );
21 
22  prevDecisionContainer = prevDecisionContainerHandle.get();
23  return StatusCode::SUCCESS;
24 }

◆ 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 45 of file HypoBase.cxx.

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

◆ setFilterPassed()

virtual void AthReentrantAlgorithm::setFilterPassed ( bool  state,
const EventContext &  ctx 
) const
inlinevirtualinherited

Definition at line 139 of file AthReentrantAlgorithm.h.

139  {
140  execState( ctx ).setFilterPassed( state );
141  }

◆ sysExecute()

StatusCode AthReentrantAlgorithm::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 67 of file AthReentrantAlgorithm.cxx.

68 {
69  return Gaudi::Algorithm::sysExecute (ctx);
70 }

◆ sysInitialize()

StatusCode HypoBase::sysInitialize ( )
overridevirtualinherited

initialise this base class

Reimplemented from AthReentrantAlgorithm.

Definition at line 24 of file HypoBase.cxx.

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

◆ 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 207 of file HypoBase.cxx.

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

◆ 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 227 of file HypoBase.cxx.

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

◆ 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 336 of file HypoBase.cxx.

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

◆ 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 245 of file HypoBase.cxx.

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

◆ 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 133 of file HypoBase.cxx.

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

Member Data Documentation

◆ m_beamSpotKey

SG::ReadCondHandleKey< InDet::BeamSpotData > TrigBjetBtagHypoAlg::m_beamSpotKey
private
Initial value:
{ this,
"BeamSpotKey", "BeamSpotData", "SG key for beam spot" }

Definition at line 72 of file TrigBjetBtagHypoAlg.h.

◆ m_bTaggedJetKey

SG::ReadHandleKey< xAOD::JetContainer > TrigBjetBtagHypoAlg::m_bTaggedJetKey {this,"BTaggedJetKey","","Key for b-tagged jets"}
private

Definition at line 63 of file TrigBjetBtagHypoAlg.h.

◆ m_bTaggingLink

Gaudi::Property< std::string > TrigBjetBtagHypoAlg::m_bTaggingLink {this,"BTaggingLink","Unspecified","b-Tagging Link name in navigation (output)"}
private

Definition at line 68 of file TrigBjetBtagHypoAlg.h.

◆ m_btaggingLinkName

Gaudi::Property<std::string> TrigBjetBtagHypoAlg::m_btaggingLinkName {this, "BtaggingLinkName", "btag"}
private

Definition at line 70 of file TrigBjetBtagHypoAlg.h.

◆ m_bTagKey

SG::ReadHandleKey< xAOD::BTaggingContainer> TrigBjetBtagHypoAlg::m_bTagKey {this,"BTaggingKey","","Key for BTagging"}
private

Definition at line 64 of file TrigBjetBtagHypoAlg.h.

◆ 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 AthReentrantAlgorithm::m_extendedExtraObjects
privateinherited

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

Empty if no symlinks were found.

Definition at line 153 of file AthReentrantAlgorithm.h.

◆ m_hypoTools

ToolHandleArray< TrigBjetBtagHypoTool > TrigBjetBtagHypoAlg::m_hypoTools {this,"HypoTools",{},"Hypo Tools"}
private

Definition at line 60 of file TrigBjetBtagHypoAlg.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_inputPrmVtx

SG::ReadHandleKey< xAOD::VertexContainer > TrigBjetBtagHypoAlg::m_inputPrmVtx {this,"PrmVtxKey","","Key for Primary vertex collection for monitoring"}
private

Definition at line 66 of file TrigBjetBtagHypoAlg.h.

◆ m_monTool

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

Definition at line 61 of file TrigBjetBtagHypoAlg.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_prmVtxLink

Gaudi::Property< std::string > TrigBjetBtagHypoAlg::m_prmVtxLink {this,"PrmVtxLink","Unspecified","Vertex Link name in navigation (input)"}
private

Definition at line 69 of file TrigBjetBtagHypoAlg.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_trackKey

SG::ReadHandleKey< xAOD::TrackParticleContainer > TrigBjetBtagHypoAlg::m_trackKey {this,"TracksKey","","Key for precision tracks"}
private

Definition at line 65 of file TrigBjetBtagHypoAlg.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:
MONITOR_BTAG_AUX_VAR
#define MONITOR_BTAG_AUX_VAR(VAR_NAME, VAR_TYPE, CONTAINER)
Definition: TrigBjetBtagHypoAlg.h:31
xAOD::JetFitter_deltaeta
@ JetFitter_deltaeta
JetFitter : Delta eta between jet and momentum sum of all tracks associated with displaced vertices r...
Definition: BTaggingEnums.h:56
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
ElementLinkVector::front
const_reference front() const
Definition: AthLinks/ElementLinkVector.h:309
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
runLayerRecalibration.chain
chain
Definition: runLayerRecalibration.py:175
TrigCompositeUtils::DecisionID
unsigned int DecisionID
Definition: TrigComposite_v1.h:27
TrigBjetBtagHypoAlg::m_bTaggedJetKey
SG::ReadHandleKey< xAOD::JetContainer > m_bTaggedJetKey
Definition: TrigBjetBtagHypoAlg.h:63
TrigBjetBtagHypoAlg::monitor_btagging
virtual StatusCode monitor_btagging(const ElementLinkVector< xAOD::BTaggingContainer > &bTaggingEL) const
Definition: TrigBjetBtagHypoAlg.cxx:412
keylayer_zslicemap.pb
pb
Definition: keylayer_zslicemap.py:188
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
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:117
TrigCompositeUtils::hltSeedingNodeName
const std::string & hltSeedingNodeName()
Definition: TrigCompositeUtilsRoot.cxx:894
CheckAppliedSFs.var_name
var_name
Definition: CheckAppliedSFs.py:241
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:46
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
index
Definition: index.py:1
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
hist_file_dump.d
d
Definition: hist_file_dump.py:137
TrigCompositeUtils::hypoAlgNodeName
const std::string & hypoAlgNodeName()
Definition: TrigCompositeUtilsRoot.cxx:906
xAOD::JetFitter_nSingleTracks
@ JetFitter_nSingleTracks
JetFitter : Number of single tracks.
Definition: BTaggingEnums.h:46
ViewHelper::makeHandle
SG::ReadHandle< T > makeHandle(const SG::View *view, const SG::ReadHandleKey< T > &rhKey, const EventContext &context)
navigate from the TrigComposite to nearest view and fetch object from it
Definition: ViewHelper.h:258
TrigBjetBtagHypoTool::TrigBjetBtagHypoToolInfo::beamSpot
const InDet::BeamSpotData * beamSpot
Definition: TrigBjetBtagHypoTool.h:43
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
skel.it
it
Definition: skel.GENtoEVGEN.py:423
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
TrigBjetBtagHypoAlg::m_trackKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackKey
Definition: TrigBjetBtagHypoAlg.h:65
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
TrigBjetHypoAlgBase::retrieveObjectFromEventView
StatusCode retrieveObjectFromEventView(const EventContext &, ElementLinkVector< CONTAINER > &, const SG::ReadHandleKey< CONTAINER > &, const TrigCompositeUtils::DecisionContainer *) const
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:16
HypoBase::printBangs
static void printBangs(MsgStream &msg)
Print header line.
Definition: HypoBase.cxx:388
TrigCompositeUtils::comboHypoAlgNodeName
const std::string & comboHypoAlgNodeName()
Definition: TrigCompositeUtilsRoot.cxx:910
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:30
xAOD::SV1_N2Tpair
@ SV1_N2Tpair
SV1 : Number of 2-track pairs.
Definition: BTaggingEnums.h:35
SG::ConstAccessor< char >
HypoBase::kRequireAll
@ kRequireAll
Definition: HypoBase.h:54
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
TrigBjetBtagHypoTool::TrigBjetBtagHypoToolInfo::btaggingEL
ElementLink< xAOD::BTaggingContainer > btaggingEL
Definition: TrigBjetBtagHypoTool.h:40
TrigBjetHypoAlgBase::retrieveCollectionFromNavigation
StatusCode retrieveCollectionFromNavigation(const std::string &linkName, ElementLinkVector< CONTAINER > &objELs, const TrigCompositeUtils::DecisionContainer *) const
TrigBjetBtagHypoTool::TrigBjetBtagHypoToolInfo::vertexEL
ElementLink< xAOD::VertexContainer > vertexEL
Definition: TrigBjetBtagHypoTool.h:41
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:20
ElementLinkVector::push_back
void push_back(const ElemLink &link)
Definition: AthLinks/ElementLinkVector.h:316
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
TrigBjetBtagHypoAlg::collect_valid_links
virtual ElementLinkVector< xAOD::BTaggingContainer > collect_valid_links(const ElementLinkVector< xAOD::BTaggingContainer > &bTaggingEL, std::string tagger) const
Definition: TrigBjetBtagHypoAlg.cxx:400
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
xAOD::JetFitter_energyFraction
@ JetFitter_energyFraction
JetFitter : Jet efrac.
Definition: BTaggingEnums.h:52
xAOD::JetFitter_nVTX
@ JetFitter_nVTX
JetFitter : Number of vertices.
Definition: BTaggingEnums.h:44
TrigBjetBtagHypoAlg::m_bTagKey
SG::ReadHandleKey< xAOD::BTaggingContainer > m_bTagKey
Definition: TrigBjetBtagHypoAlg.h:64
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:69
TrigBjetBtagHypoAlg::m_prmVtxLink
Gaudi::Property< std::string > m_prmVtxLink
Definition: TrigBjetBtagHypoAlg.h:69
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
TrigBjetBtagHypoAlg::monitor_primary_vertex
virtual StatusCode monitor_primary_vertex(const ElementLink< xAOD::VertexContainer > &primVertexEL) const
Definition: TrigBjetBtagHypoAlg.cxx:390
lumiFormat.i
int i
Definition: lumiFormat.py:92
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:227
TrigCompositeUtils::initialRoIString
const std::string & initialRoIString()
Definition: TrigCompositeUtilsRoot.cxx:870
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:33
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.
SG::ReadHandle::get
const_pointer_type get() const
Dereference the pointer, but don't cache anything.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
HypoBase::m_input
SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > m_input
input decisions
Definition: HypoBase.h:101
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:571
TrigBjetHypoAlgBase::retrievePreviousDecisionContainer
StatusCode retrievePreviousDecisionContainer(const EventContext &, const TrigCompositeUtils::DecisionContainer *&) const
Definition: TrigBjetHypoAlgBase.cxx:15
xAOD::JetFitter_mass
@ JetFitter_mass
JetFitter : Jet mass.
Definition: BTaggingEnums.h:50
xAOD::JetFitter_nTracksAtVtx
@ JetFitter_nTracksAtVtx
JetFitter : Number of tracks at vertex.
Definition: BTaggingEnums.h:48
AthenaPoolTestRead.acc
acc
Definition: AthenaPoolTestRead.py:16
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Preparation.mode
mode
Definition: Preparation.py:95
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:245
xAOD::SV1_efracsvx
@ SV1_efracsvx
SV1 : energy fraction.
Definition: BTaggingEnums.h:39
HypoBase::validateDecisionIDs
static StatusCode validateDecisionIDs(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
Ensure that all present IDs correspond to configured chains.
Definition: HypoBase.cxx:207
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:52
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
HLT::Identifier
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:20
TrigBjetBtagHypoAlg::monitor_flavor_probabilities
virtual StatusCode monitor_flavor_probabilities(const ElementLinkVector< xAOD::BTaggingContainer > &bTaggingEL, const std::string &var_name) const
Definition: TrigBjetBtagHypoAlg.cxx:332
DeMoUpdate.toAdd
bool toAdd
Definition: DeMoUpdate.py:1304
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
AthReentrantAlgorithm::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Definition: AthReentrantAlgorithm.h:153
TrigBjetHypoAlgBase::retrieveObjectFromStoreGate
StatusCode retrieveObjectFromStoreGate(const EventContext &, ElementLinkVector< CONTAINER > &, const SG::ReadHandleKey< CONTAINER > &) const
xAOD::JetFitter_significance3d
@ JetFitter_significance3d
JetFitter : 3D vertex significance.
Definition: BTaggingEnums.h:54
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::featureString
const std::string & featureString()
Definition: TrigCompositeUtilsRoot.cxx:886
xAOD::JetFitter_N2Tpair
@ JetFitter_N2Tpair
JetFitter : Number of 2-track pairs.
Definition: BTaggingEnums.h:60
TrigBjetHypoAlgBase::retrieveCollectionFromView
StatusCode retrieveCollectionFromView(const EventContext &, ElementLinkVector< CONTAINER > &, const SG::ReadHandleKey< CONTAINER > &, const TrigCompositeUtils::Decision *) const
ElementLinkVector
ElementLinkVector implementation for standalone ROOT.
Definition: AthLinks/ElementLinkVector.h:27
TrigBjetBtagHypoAlg::monitor_tracks
virtual StatusCode monitor_tracks(const EventContext &context, const TrigCompositeUtils::DecisionContainer *prevDecisionContainer) const
Definition: TrigBjetBtagHypoAlg.cxx:253
TrigCompositeUtils::isChainId
bool isChainId(const HLT::Identifier &chainIdentifier)
Recognise whether the HLT identifier corresponds to a whole chain.
Definition: TrigCompositeUtilsRoot.cxx:212
xAOD::SV1_NGTinSvx
@ SV1_NGTinSvx
SV1 : Number of good tracks in vertex.
Definition: BTaggingEnums.h:33
TrigBjetBtagHypoAlg::m_inputPrmVtx
SG::ReadHandleKey< xAOD::VertexContainer > m_inputPrmVtx
Definition: TrigBjetBtagHypoAlg.h:66
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
Amg::error
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Definition: EventPrimitivesHelpers.h:40
TrigBjetBtagHypoAlg::monitor_jets
virtual StatusCode monitor_jets(const ElementLinkVector< xAOD::JetContainer > &jetELs, const ElementLinkVector< xAOD::JetContainer > &all_bTaggedJetELs) const
Definition: TrigBjetBtagHypoAlg.cxx:217
AthReentrantAlgorithm::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthReentrantAlgorithm.cxx:96
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
TrigCompositeUtils::filterNodeName
const std::string & filterNodeName()
Definition: TrigCompositeUtilsRoot.cxx:898
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
CheckAppliedSFs.pu
pu
Definition: CheckAppliedSFs.py:311
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
TrigCompositeUtils::seedString
const std::string & seedString()
Definition: TrigCompositeUtilsRoot.cxx:890
DeMoScan.index
string index
Definition: DeMoScan.py:362
ElementLinkVector::size
size_type size() const
Definition: AthLinks/ElementLinkVector.h:292
InDet::BeamSpotData
Definition: BeamSpotData.h:21
a
TList * a
Definition: liststreamerinfos.cxx:10
TrigCompositeUtils::DecisionIDContainer
std::set< DecisionID > DecisionIDContainer
Definition: TrigComposite_v1.h:28
TrigBjetBtagHypoAlg::m_btaggingLinkName
Gaudi::Property< std::string > m_btaggingLinkName
Definition: TrigBjetBtagHypoAlg.h:70
TrigBjetBtagHypoAlg::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrigBjetBtagHypoAlg.h:61
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:404
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:133
TrigBjetBtagHypoAlg::m_hypoTools
ToolHandleArray< TrigBjetBtagHypoTool > m_hypoTools
Definition: TrigBjetBtagHypoAlg.h:60
AthCommonMsg< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
TrigBjetBtagHypoTool::TrigBjetBtagHypoToolInfo
Definition: TrigBjetBtagHypoTool.h:38
TrigCompositeUtils::decisionIDs
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
Definition: TrigCompositeUtilsRoot.cxx:67
HLT::Identifier::name
std::string name() const
reports human redable name if it is enabled or, empty string
Definition: HLTIdentifier.cxx:14
TrigBjetBtagHypoTool::TrigBjetBtagHypoToolInfo::previousDecisionIDs
TrigCompositeUtils::DecisionIDContainer previousDecisionIDs
Definition: TrigBjetBtagHypoTool.h:39
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:616
HypoBase::m_output
SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_output
output decisions
Definition: HypoBase.h:103
xAOD::JetFitter_deltaphi
@ JetFitter_deltaphi
JetFitter : Delta phi between jet and momentum sum of all tracks associated with displaced vertices r...
Definition: BTaggingEnums.h:58
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
TrigBjetHypoAlgBase::retrieveObjectFromNavigation
StatusCode retrieveObjectFromNavigation(const std::string &, ElementLink< CONTAINER > &, const TrigCompositeUtils::Decision *) const
python.BuildSignatureFlags.beamSpot
AthConfigFlags beamSpot(AthConfigFlags flags, str instanceName, str recoMode)
Definition: BuildSignatureFlags.py:402
TrigCompositeUtils::roiString
const std::string & roiString()
Definition: TrigCompositeUtilsRoot.cxx:878
TrigBjetBtagHypoAlg::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: TrigBjetBtagHypoAlg.h:72
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
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:45
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
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
TrigBjetHypoAlgBase::TrigBjetHypoAlgBase
TrigBjetHypoAlgBase()
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:336
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:393
TrigCompositeUtils::viewString
const std::string & viewString()
Definition: TrigCompositeUtilsRoot.cxx:882
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
python.SystemOfUnits.pc
float pc
Definition: SystemOfUnits.py:99
HypoBase::kRequireOne
@ kRequireOne
Require all DecisionIDs to be present in at least one of my parent Decision objects.
Definition: HypoBase.h:53
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
TrigCompositeUtils::inputMakerNodeName
const std::string & inputMakerNodeName()
Definition: TrigCompositeUtilsRoot.cxx:902
fitman.k
k
Definition: fitman.py:528
xAOD::SV1_masssvx
@ SV1_masssvx
SV1 : vertex mass.
Definition: BTaggingEnums.h:37
TrigBjetBtagHypoTool::TrigBjetBtagHypoToolInfo::decision
TrigCompositeUtils::Decision * decision
Definition: TrigBjetBtagHypoTool.h:42
ViewContainer
Definition: View.h:161