ATLAS Offline Software
Loading...
Searching...
No Matches
InputMakerBase Class Reference

Input Makers are used at the start of a sequence: retrieve filtered collection via the input decision from the previous step and write it out directly so it can be used as input by the reconstruction algorithms that follow in sequence. More...

#include <InputMakerBase.h>

Inheritance diagram for InputMakerBase:
Collaboration diagram for InputMakerBase:

Classes

struct  MatchingCache
 Used to cache each incoming Decision object's ElementLink which is being used to identify the Decision object for the purposes of de-duplication merging. More...

Public Member Functions

 InputMakerBase (const std::string &name, ISvcLocator *pSvcLocator)
 constructor, to be called by sub-class constructors
virtual ~InputMakerBase ()
 destructor
virtual StatusCode sysInitialize () override
 initialise this base class and renounce input decision key handles
virtual bool isClonable () const override
 Specify if the algorithm is clonable.
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
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.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

const SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionInputs () const
 methods for derived classes to access handles of the base class input and output decisions; other read/write handles may be implemented by derived classes
const SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > & decisionOutputs () const
 methods for derived classes to access handles of the base class input and output decisions; other read/write handles may be implemented by derived classes
void debugPrintOut (const EventContext &context, SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle) const
 provides debug printout of the output of the algorithm
StatusCode decisionInputToOutput (const EventContext &context, SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle) const
 does the standard handling of input decisions: read from handles with all the checks, create merged output handles and link them, copies links and return outputHandles
size_t matchDecision (const TrigCompositeUtils::DecisionContainer *outDecisions, const TrigCompositeUtils::Decision *toMatch, const std::string &linkNameToMatch, MatchingCache &matchingCache) const
 Checks for merge-able Decision objects coming from N upstream filters. Check based on most-recent element link with name 'linkNameToMatch'. Works for any link type.
bool matchInCollection (const TrigCompositeUtils::DecisionContainer *outDecisions, const TrigCompositeUtils::Decision *toMatch, size_t &matchIndex, bool &usedROIMatchingFlag, MatchingCache &matchingCache) const
 Wrapper around matchDecision. Returns boolean if the match was successful.
uint64_t getMatchingHashForDecision (const TrigCompositeUtils::Decision *toMatch, const std::string &linkNameToMatch) const
 Searches from toMatch to locate a single (type-less) Element Link with given edge name. Returns a hash corresponding to this Element Link.
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
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.

Protected Attributes

StringProperty m_roisLink
Gaudi::Property< bool > m_mergeUsingFeature
Gaudi::Property< bool > m_isEmptyStep

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainerm_inputs { this, "InputMakerInputDecisions", {}, "Input Decisions (implicit)" }
 input decisions array, will be implicit (renounced).
SG::WriteHandleKey< TrigCompositeUtils::DecisionContainerm_outputs { this, "InputMakerOutputDecisions", "", "Output Decisions" }
 output decisions
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Input Makers are used at the start of a sequence: retrieve filtered collection via the input decision from the previous step and write it out directly so it can be used as input by the reconstruction algorithms that follow in sequence.

This is a base class for HLT InputMakers to reduce boilerplate and enforce the common naming scheme for decision handle keys. Derived classes implement how the reconstruction is started. Current options are via WriteHandle<TrigROIDecscriptorCollection>, as used by the InputMakerForRoI specialisation. Or via the spawning of EventView instances over a given sequencer, as used by the EventViewCreatorAlgorithm specialisation.

Definition at line 20 of file InputMakerBase.h.

Member Typedef Documentation

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ InputMakerBase()

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

constructor, to be called by sub-class constructors

Definition at line 12 of file InputMakerBase.cxx.

13: ::AthReentrantAlgorithm( name, pSvcLocator ) {}

◆ ~InputMakerBase()

InputMakerBase::~InputMakerBase ( )
virtual

destructor

Definition at line 15 of file InputMakerBase.cxx.

15{}

Member Function Documentation

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::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.

Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.

64{
65 return 0;
66}

◆ debugPrintOut()

void InputMakerBase::debugPrintOut ( const EventContext & context,
SG::WriteHandle< TrigCompositeUtils::DecisionContainer > & outputHandle ) const
protected

provides debug printout of the output of the algorithm

Definition at line 200 of file InputMakerBase.cxx.

200 {
201 size_t validInput=0;
202 for ( const auto& inputKey: decisionInputs() ) {
203 auto inputHandle = SG::makeHandle( inputKey, context );
204 ATH_MSG_DEBUG(" " << inputKey.key() << " " << (inputHandle.isValid()? "valid": "not valid" ) );
205 if (inputHandle.isValid()) {
206 if (inputHandle->size() > 0) {
207 validInput++;
208 } else {
209 ATH_MSG_DEBUG(" " << inputKey.key() << " actually NOT valid due to size() == 0");
210 }
211 }
212 }
213 ATH_MSG_DEBUG( "Number of implicit ReadHandles for input decisions is " << decisionInputs().size() << ", " << validInput << " are valid/not-empty" );
214
215 ATH_MSG_DEBUG("Output " << outputHandle.key() <<" with "<< outputHandle->size() <<" decisions:");
216 for (const auto outdecision : *outputHandle){
218 TrigCompositeUtils::decisionIDs( outdecision, objDecisions );
219 ATH_MSG_DEBUG("Number of positive decisions for this output: " << objDecisions.size() );
220 for ( TrigCompositeUtils::DecisionID id : objDecisions ) {
221 ATH_MSG_DEBUG( " --- decision " << HLT::Identifier( id ) );
222 }
223 }
224}
#define ATH_MSG_DEBUG(x)
const SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionInputs() const
methods for derived classes to access handles of the base class input and output decisions; other rea...
virtual const std::string & key() const override final
Return the StoreGate ID for the referenced object.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
unsigned int DecisionID
std::set< DecisionID > DecisionIDContainer
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.

◆ decisionInputs()

const SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > & InputMakerBase::decisionInputs ( ) const
protected

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

Definition at line 17 of file InputMakerBase.cxx.

17 {
18 return m_inputs;
19}
SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > m_inputs
input decisions array, will be implicit (renounced).

◆ decisionInputToOutput()

StatusCode InputMakerBase::decisionInputToOutput ( const EventContext & context,
SG::WriteHandle< TrigCompositeUtils::DecisionContainer > & outputHandle ) const
protected

does the standard handling of input decisions: read from handles with all the checks, create merged output handles and link them, copies links and return outputHandles

Definition at line 43 of file InputMakerBase.cxx.

43 {
44
45 ATH_MSG_DEBUG("Creating one merged output per Decision object, IsEmptyStep flag = " << m_isEmptyStep);
46 ATH_CHECK( outputHandle.isValid() );
47 TrigCompositeUtils::DecisionContainer* outDecisions = outputHandle.ptr();
48
49 // Empty IMs have a dynamic (runtime) matching configuration. But any single IM should find itself using exclusively-feature or exclusively-ROI based matching
50 size_t usedROIMatching = 0, usedFeatureMatching = 0;
51
52 MatchingCache matchingCache; // Used to remember temporarily which hash is associated with each Decision object when performing the de-duplication matching
53 size_t totalInput = 0;
54 for ( const auto& inputKey: decisionInputs() ) {
55 auto inputHandle = SG::makeHandle( inputKey, context );
56
57 if( not inputHandle.isValid() ) {
58 ATH_MSG_DEBUG( "Got no decisions from input "<< inputKey.key() << " because implicit handle not valid");
59 continue;
60 }
61 if( inputHandle->size() == 0){
62 ATH_MSG_DEBUG( "Got no decisions from input "<< inputKey.key()<<": implicit handle is valid but container is empty.");
63 continue;
64 }
65 ATH_MSG_DEBUG( "Running on input "<< inputKey.key()<<" with " << inputHandle->size() << " elements" );
66
67
68 size_t input_counter = 0;
69 for (const TrigCompositeUtils::Decision* inputDecision : *inputHandle){
70 ATH_MSG_DEBUG( " -- Input Decision " << input_counter <<": has " <<TrigCompositeUtils::getLinkToPrevious(inputDecision).size()<<" previous links");
71
72 bool usedROIMatchingFlag = false;
73 size_t alreadyAddedIndex = std::numeric_limits<std::size_t>::max();
74 const bool alreadyAdded = matchInCollection(outDecisions, inputDecision, alreadyAddedIndex, usedROIMatchingFlag, matchingCache);
75
76 TrigCompositeUtils::Decision* outputDecision = nullptr;
77 if (alreadyAdded) { // Already added, at alreadyAddedIndex
78 if (usedROIMatchingFlag) {
79 ++usedROIMatching;
80 } else {
81 ++usedFeatureMatching;
82 }
83 outputDecision = outDecisions->at( alreadyAddedIndex );
84 ATH_MSG_DEBUG( " -- Matched to existing, " << inputKey.key() << " index " << input_counter << " is merged into existing output index " << alreadyAddedIndex << (usedROIMatchingFlag ? " Matched using ROI" : " Matched using Feature"));
85 } else { // Not already added, make new
86 outputDecision = TrigCompositeUtils::newDecisionIn( outDecisions );
87 outputDecision->setName(inputMakerNodeName());
88 outputDecision->setDetail<int32_t>("isEmpty", static_cast<int32_t>(m_isEmptyStep)); // Transient detail (only used by runtime navigation validation, never persisted)
89 matchingCache.linkOutputToInput(outputDecision, inputDecision);
90 ATH_MSG_DEBUG( " -- Did not match to existing, " << inputKey.key() << " index " << input_counter << " creates output index " << outDecisions->size()-1);
91 }
92
93 // Note: We will call linkToPrevious and insertDecisionIDs N times on a single "outputDecision", where N is the number of inputDecision which checkExisting determines are the same object.
94 TrigCompositeUtils::linkToPrevious( outputDecision, inputDecision, context ); // Link inputDecision object as the 'seed' of outputDecision
95 TrigCompositeUtils::insertDecisionIDs( inputDecision, outputDecision ); // Copy decision IDs from inputDecision into outputDecision
96 ATH_MSG_DEBUG(" -- This output decision now has " << TrigCompositeUtils::getLinkToPrevious(outputDecision).size() << " seeds and "<< outputDecision->decisions().size() << " decisionIds");
97 input_counter++;
98 } // loop over input decisions
99 totalInput+=input_counter;
100 } // end of: for ( auto inputKey: decisionInputs() )
101
102 if (usedROIMatching and usedFeatureMatching) {
103 ATH_MSG_DEBUG("This input maker used Feature-based mapping on " << usedFeatureMatching << " inputs and ROI-based mapping on " << usedROIMatching
104 << " inputs. The isEmptyIM flag is " << m_isEmptyStep);
105 }
106
107 // Print some debug messages summarising the content of the outputHandles.
108 if (msgLvl(MSG::DEBUG)) {
109 debugPrintOut(context, outputHandle);
110 }
111 ATH_MSG_DEBUG("Merging complete: from "<<totalInput<<" input decision to "<<outputHandle->size()<<" output decisions");
112
113 return StatusCode::SUCCESS;
114}
#define ATH_CHECK
Evaluate an expression and check for errors.
bool msgLvl(const MSG::Level lvl) const
const T * at(size_type n) const
Access an element, as an rvalue.
size_type size() const noexcept
Returns the number of elements in the collection.
Gaudi::Property< bool > m_isEmptyStep
bool matchInCollection(const TrigCompositeUtils::DecisionContainer *outDecisions, const TrigCompositeUtils::Decision *toMatch, size_t &matchIndex, bool &usedROIMatchingFlag, MatchingCache &matchingCache) const
Wrapper around matchDecision. Returns boolean if the match was successful.
void debugPrintOut(const EventContext &context, SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle) const
provides debug printout of the output of the algorithm
virtual bool isValid() override final
Can the handle be successfully dereferenced?
pointer_type ptr()
Dereference the pointer.
void setName(const std::string &name)
Set a human-readable name for the object.
const std::vector< TrigCompositeUtils::DecisionID > & decisions() const
Get positive HLT chain decisions associated with this TrigComposite. Navigation use.
bool setDetail(const std::string &name, const TYPE &value)
Set an TYPE detail on the object.
const std::string & inputMakerNodeName()
void insertDecisionIDs(const Decision *src, Decision *dest)
Appends the decision IDs of src to the dest decision object.
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.
const std::vector< ElementLink< DecisionContainer > > getLinkToPrevious(const Decision *d)
returns links to previous decision object 'seed'
void linkToPrevious(Decision *d, const std::string &previousCollectionKey, size_t previousIndex)
Links to the previous object, location of previous 'seed' decision supplied by hand.
Used to cache each incoming Decision object's ElementLink which is being used to identify the Decisio...

◆ decisionOutputs()

const SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > & InputMakerBase::decisionOutputs ( ) const
protected

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

Definition at line 21 of file InputMakerBase.cxx.

21 {
22 return m_outputs;
23}
SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_outputs
output decisions

◆ declareGaudiProperty()

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

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

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

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

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

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

◆ evtStore()

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.

◆ extraDeps_update_handler()

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

Add StoreName to extra input/output deps as needed.

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

◆ extraOutputDeps()

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

Return the list of extra output dependencies.

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

Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.

90{
91 // If we didn't find any symlinks to add, just return the collection
92 // from the base class. Otherwise, return the extended collection.
93 if (!m_extendedExtraObjects.empty()) {
95 }
97}
An algorithm that can be simultaneously executed in multiple threads.

◆ filterPassed()

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

Definition at line 96 of file AthCommonReentrantAlgorithm.h.

96 {
97 return execState( ctx ).filterPassed();
98 }
virtual bool filterPassed(const EventContext &ctx) const

◆ getMatchingHashForDecision()

uint64_t InputMakerBase::getMatchingHashForDecision ( const TrigCompositeUtils::Decision * toMatch,
const std::string & linkNameToMatch ) const
protected

Searches from toMatch to locate a single (type-less) Element Link with given edge name. Returns a hash corresponding to this Element Link.

< Used to accelerate the recursive typelessFindLinks.

Definition at line 159 of file InputMakerBase.cxx.

159 {
160 std::set<const Decision*> cache;
161 std::vector<SG::sgkey_t> keys;
162 std::vector<uint32_t> clids;
163 std::vector<Decision::index_type> indicies;
164 std::vector<const Decision*> sources; // Unused
165 TrigCompositeUtils::typelessFindLinks(toMatch, linkNameToMatch, keys, clids, indicies, sources, TrigDefs::lastFeatureOfType, &cache);
166 ATH_MSG_DEBUG("getMatchingHashForDecision keys.size()="<<keys.size());
167 if (keys.size() != 1) {
168 bool suppressError = false;
169 // We silence this ERROR when the IM isEmptyStep and we are tentatively testing at runtime if there is an available "feature" link.
170 if (m_isEmptyStep and linkNameToMatch == featureString()) {
171 suppressError = true;
172 }
173 // However... we _always_ want to print the ERROR if we got here not because keys.size() == 0 but because keys.size() > 1!
174 // This is an ambiguous situation, and such things are always bad.
175 if ( keys.size() > 1) {
176 suppressError = false;
177 }
178 if (not suppressError) {
179 ATH_MSG_ERROR("InputMakerBase::getMatchingHashForDecision Did not locate exactly one object having searched for a link named '" << linkNameToMatch
180 << "', found " << keys.size() << ". Unable to match this Decision object.");
181 for (size_t i = 0; i < keys.size(); ++i) {
182 const std::string* sgKeyStr = evtStore()->keyToString(keys.at(i));
183 ATH_MSG_ERROR(" -- Key:" << keys.at(i) << " KeyStr:" << (sgKeyStr ? *sgKeyStr : "UNKNOWN") << " Index:" << indicies.at(i) << " CLID:" << clids.at(i));
184 }
185 // Super verbose output
186 ATH_MSG_ERROR(" -- -- TRACKING FULL HISTORY ");
187 NavGraph navGraph;
188 recursiveGetDecisions(toMatch, navGraph);
189 navGraph.printAllPaths(msg(), MSG::ERROR);
190 }
191 return std::numeric_limits<std::size_t>::max();
192 }
193
194 // Construct a new hash by combining the SGkey (a hash), the CLID (a hash) and the index (an offset)
195 const uint64_t matchingHash = keys.at(0) + clids.at(0) + indicies.at(0);
196 return matchingHash;
197}
#define ATH_MSG_ERROR(x)
void printAllPaths(MsgStream &log, MSG::Level msgLevel=MSG::VERBOSE) const
Helper function.
Definition NavGraph.cxx:165
const std::string & featureString()
void recursiveGetDecisions(const Decision *start, NavGraph &navGraph, const DecisionIDContainer &ids, const bool enforceDecisionOnStartNode)
Search back in time from "node" and locate all paths back through Decision objects for a given chain.
bool typelessFindLinks(const Decision *start, const std::string &linkName, std::vector< sgkey_t > &keyVec, std::vector< CLID > &clidVec, std::vector< Decision::index_type > &indexVec, std::vector< const Decision * > &sourceVec, const unsigned int behaviour, std::set< const Decision * > *fullyExploredFrom)
search back the TC links for the object of type T linked to the one of TC (recursively) Returns the l...
static const unsigned int lastFeatureOfType
Run 3 "enum". Only return the final feature along each route through the navigation.

◆ 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()

◆ matchDecision()

size_t InputMakerBase::matchDecision ( const TrigCompositeUtils::DecisionContainer * outDecisions,
const TrigCompositeUtils::Decision * toMatch,
const std::string & linkNameToMatch,
MatchingCache & matchingCache ) const
protected

Checks for merge-able Decision objects coming from N upstream filters. Check based on most-recent element link with name 'linkNameToMatch'. Works for any link type.

Definition at line 140 of file InputMakerBase.cxx.

140 {
141 const uint64_t matchingHash = getMatchingHashForDecision(toMatch, linkNameToMatch);
142 ATH_MSG_DEBUG("matchDecision "<<linkNameToMatch<<" with matchingHash="<<matchingHash);
143 // Cache this matching hash, so that in subsequent calls we can compare other incoming decision object's matching hash against this one
144 matchingCache.setMatchingHash(toMatch, matchingHash);
145
146 // Look for match
147 for (size_t index = 0; index < outDecisions->size(); ++index) {
148 const TrigCompositeUtils::Decision* checkDecision = outDecisions->at(index);
149 const uint64_t checkHash = matchingCache.getMatchingHash(checkDecision);
150 ATH_MSG_DEBUG("matchDecision checkHash="<<checkHash<<" index="<<index);
151 if (checkHash == matchingHash) {
152 return index;
153 }
154 }
155
156 return std::numeric_limits<std::size_t>::max();
157}
uint64_t getMatchingHashForDecision(const TrigCompositeUtils::Decision *toMatch, const std::string &linkNameToMatch) const
Searches from toMatch to locate a single (type-less) Element Link with given edge name....
str index
Definition DeMoScan.py:362

◆ matchInCollection()

bool InputMakerBase::matchInCollection ( const TrigCompositeUtils::DecisionContainer * outDecisions,
const TrigCompositeUtils::Decision * toMatch,
size_t & matchIndex,
bool & usedROIMatchingFlag,
MatchingCache & matchingCache ) const
protected

Wrapper around matchDecision. Returns boolean if the match was successful.

< Used to accelerate the recursive typelessFindLinks.

Definition at line 117 of file InputMakerBase.cxx.

117 {
118 std::set<const Decision*> cache;
119 std::vector<SG::sgkey_t> keys;
120 std::vector<uint32_t> clids;
121 std::vector<Decision::index_type> indicies;
122 std::vector<const Decision*> sources; // Unused
123 TrigCompositeUtils::typelessFindLinks(toMatch, featureString(), keys, clids, indicies, sources, TrigDefs::lastFeatureOfType, &cache);
124 bool hasFeature = false;
125 if (keys.size() != 0) hasFeature=true;
126 ATH_MSG_DEBUG("This decision hasFeature="<< hasFeature);
127 // Do feature based matching if configured to do so, or do it tentatively for empty step IMs (will not generate an ERROR if it fails for the empty step case)
128 if ( m_mergeUsingFeature == true or (m_isEmptyStep and hasFeature) ) {
129 matchIndex = matchDecision(outDecisions, toMatch, featureString(), matchingCache);
130 ATH_MSG_DEBUG("matchDecision in features: "<< matchIndex);
131 }
132 // Do ROI based batching if configured to do so, or if feature matching failed for an empty step IM.
133 else {
134 matchIndex = matchDecision(outDecisions, toMatch, m_roisLink.value(), matchingCache);
135 usedROIMatchingFlag = true;
136 }
137 return (matchIndex != std::numeric_limits<std::size_t>::max());
138}
StringProperty m_roisLink
size_t matchDecision(const TrigCompositeUtils::DecisionContainer *outDecisions, const TrigCompositeUtils::Decision *toMatch, const std::string &linkNameToMatch, MatchingCache &matchingCache) const
Checks for merge-able Decision objects coming from N upstream filters. Check based on most-recent ele...
Gaudi::Property< bool > m_mergeUsingFeature

◆ msg()

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

Definition at line 24 of file AthCommonMsg.h.

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

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

◆ 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();
384 }
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)

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

◆ setFilterPassed()

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

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100 {
102 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const

◆ sysExecute()

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

Execute an algorithm.

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

Definition at line 85 of file AthCommonReentrantAlgorithm.cxx.

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

◆ sysInitialize()

StatusCode InputMakerBase::sysInitialize ( )
overridevirtual

initialise this base class and renounce input decision key handles

Reimplemented from AthCommonReentrantAlgorithm< Gaudi::Algorithm >.

Definition at line 25 of file InputMakerBase.cxx.

25 {
26 CHECK( AthReentrantAlgorithm::sysInitialize() ); // initialise base class
29 ATH_MSG_DEBUG("roisLink="<<m_roisLink);
30 CHECK( m_inputs.initialize() );
31 renounceArray(m_inputs); // make inputs implicit, i.e. not required by scheduler
32 ATH_MSG_DEBUG("Will consume implicit decisions:" );
33 for (auto& input: m_inputs){
34 ATH_MSG_DEBUG( " "<<input.key() );
35 }
36 CHECK( m_outputs.initialize() );
37 ATH_MSG_DEBUG(" and produce decisions: " << m_outputs.key());
38 return StatusCode::SUCCESS;
39}
#define CHECK(...)
Evaluate an expression and check for errors.
void renounceArray(SG::VarHandleKeyArray &handlesArray)

◆ 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) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }

Member Data Documentation

◆ m_detStore

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

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

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

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

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

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

Empty if no symlinks were found.

Definition at line 114 of file AthCommonReentrantAlgorithm.h.

◆ m_inputs

SG::ReadHandleKeyArray<TrigCompositeUtils::DecisionContainer> InputMakerBase::m_inputs { this, "InputMakerInputDecisions", {}, "Input Decisions (implicit)" }
private

input decisions array, will be implicit (renounced).

Definition at line 87 of file InputMakerBase.h.

87{ this, "InputMakerInputDecisions", {}, "Input Decisions (implicit)" };

◆ m_isEmptyStep

Gaudi::Property<bool> InputMakerBase::m_isEmptyStep
protected
Initial value:
{this, "isEmptyStep", false,
"True if this InputMaker instance is being used in an empty step. Forgoes the requirement to link an ROI, and auto-configures the 'mergeUsingFeature' property at runtime." }

Definition at line 56 of file InputMakerBase.h.

56 {this, "isEmptyStep", false,
57 "True if this InputMaker instance is being used in an empty step. Forgoes the requirement to link an ROI, and auto-configures the 'mergeUsingFeature' property at runtime." };

◆ m_mergeUsingFeature

Gaudi::Property<bool> InputMakerBase::m_mergeUsingFeature
protected
Initial value:
{this, "mergeUsingFeature", false,
"True=the IParicle-derived feature from the previous step is used to determine identical inputs. False=the ROI located with the RoIsLink property is used to determine identical inputs" }

Definition at line 53 of file InputMakerBase.h.

53 {this, "mergeUsingFeature", false,
54 "True=the IParicle-derived feature from the previous step is used to determine identical inputs. False=the ROI located with the RoIsLink property is used to determine identical inputs" };

◆ m_outputs

SG::WriteHandleKey<TrigCompositeUtils::DecisionContainer> InputMakerBase::m_outputs { this, "InputMakerOutputDecisions", "", "Output Decisions" }
private

output decisions

Definition at line 90 of file InputMakerBase.h.

90{ this, "InputMakerOutputDecisions", "", "Output Decisions" };

◆ m_roisLink

StringProperty InputMakerBase::m_roisLink
protected
Initial value:
{this, "RoIsLink", "initialRoI",
"Name of EL to RoI object linked to the decision, used in merging input Decision objects when mergeUsingFeature=False." }

Definition at line 50 of file InputMakerBase.h.

50 {this, "RoIsLink", "initialRoI",
51 "Name of EL to RoI object linked to the decision, used in merging input Decision objects when mergeUsingFeature=False." };

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