ATLAS Offline Software
Loading...
Searching...
No Matches
TrigComposite_v1.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5
6// System include(s):
7#include <algorithm>
8#include <stdexcept>
9#include <utility>
10
11
12// xAOD include(s):
14
16
17// Local include(s):
19
20#ifndef XAOD_STANDALONE
22#endif
23
24
25namespace xAOD {
26
27 // The "linkColIndices" aux type underwent an in-line schema evolution in October 2024
28 // from vector<vector<uint16_t>> to vector<vector<uint32_t>>.
29 //
30 // We need to have a static Accessor object defined for this aux name which lives outside of class scope in libxAODTrigger.so
31 // This object will be instantiated early, when ROOT reads this libraries dictionary upon opening a file.
32 // It will register the updated type in the aux registry at this early time, before any dictionaries
33 // stored in the file are read - which would populate the aux registry with the outdated type if the
34 // file was produced prior to the schema update.
35 //
36 // For consistency, the other Accessors used by the TrigComposite interface implementation are moved up here too.
39 static const SG::Accessor< std::vector< TrigComposite_v1::index_type > > acc_linkColIndices( "linkColIndices" ); // Caution: Schema evolution, October 2024
41
42 // Remapped element link keys and indices are decorated temporarily onto immutable nodes via these accessors.
43 // These become solidified when a navigation graph is run through TrigNavSlimmingMTAlg.
46
51
52 const std::string TrigComposite_v1::s_collectionSuffix{"__COLL"};
53
54 // Note: These definitions shadow those in TrigCompositeUtils.py
55 const std::string TrigComposite_v1::s_initialRoIString{"initialRoI"};
56 const std::string TrigComposite_v1::s_initialRecRoIString{"initialRecRoI"};
57 const std::string TrigComposite_v1::s_roiString{"roi"};
58 const std::string TrigComposite_v1::s_viewString{"view"};
59 const std::string TrigComposite_v1::s_featureString{"feature"};
60 const std::string TrigComposite_v1::s_seedString{"seed"};
61
63 const std::string TrigComposite_v1::s_filterNodeNameString{"F"};
65 const std::string TrigComposite_v1::s_hypoAlgNodeNameString{"H"};
68 const std::string TrigComposite_v1::s_summaryPassNodeNameString{"HLTPassRaw"};
69 const std::string TrigComposite_v1::s_summaryPassExpressNodeNameString{"HLTPassExpress"};
70 const std::string TrigComposite_v1::s_summaryPrescaledNodeNameString{"HLTPrescaled"};
71
72 bool TrigComposite_v1::s_throwOnCopyError = false;
73
76
78 this->makePrivateStore( parent );
79 }
80
82 if(this == &rhs) return *this;
83 if( ( ! hasStore() ) && ( ! container() ) ) this->makePrivateStore();
84
85 // Copy the auxiliary variables:
87
88 // Return this object:
89 return *this;
90 }
91
93 //
94 // Built in accessor functions
95 //
96
98 name, setName )
99
100 AUXSTORE_OBJECT_SETTER_AND_GETTER( TrigComposite_v1, std::vector<TrigCompositeUtils::DecisionID>,
101 decisions, setDecisions )
102
103 //
105
107 //
108 // Implementation for the link copy functions
109 //
110
112 this->linkColNamesNC().push_back( newName );
113 this->linkColClidsNC().push_back( other.linkColClids().at(index) );
114 if (other.isRemapped()) {
115 this->linkColKeysNC().push_back( other.linkColKeysRemap().at(index) );
116 this->linkColIndicesNC().push_back( other.linkColIndicesRemap().at(index) );
117 } else {
118 this->linkColKeysNC().push_back( other.linkColKeys().at(index) );
119 this->linkColIndicesNC().push_back( other.linkColIndices().at(index) );
120 }
121 }
122
123 bool TrigComposite_v1::copyLinkFrom(const xAOD::TrigComposite_v1& other, const std::string& name, std::string newName) {
124 if (newName.empty()) {
125 newName = name;
126 }
127 bool didCopy = false;
128 // Check for the existence of single link
129 std::vector<std::string>::const_iterator locationIt;
130 locationIt = std::find(other.linkColNames().begin(), other.linkColNames().end(), name);
131 if (locationIt != other.linkColNames().end()) {
132 size_t index = std::distance(other.linkColNames().begin(), locationIt);
133 if (this->hasObjectLink(newName)) {
134 if (s_throwOnCopyError) throw std::runtime_error("Already have link with name " + newName);
135 } else {
136 copyLinkInternal(other, index, newName);
137 didCopy = true;
138 }
139 }
140 if (!didCopy && s_throwOnCopyError) throw std::runtime_error("Could not find link with name " + name);
141 return didCopy;
142 }
143
144 bool TrigComposite_v1::copyLinkFrom(const xAOD::TrigComposite_v1* other, const std::string& name, std::string newName) {
145 return copyLinkFrom(*other, name, std::move(newName));
146 }
147
148 bool TrigComposite_v1::copyLinkCollectionFrom(const xAOD::TrigComposite_v1& other, const std::string& name, std::string newName) {
149 bool didCopy = false;
150 // Check for the existence of a collection.
151 if (newName.empty()) {
152 newName = name;
153 }
154 const std::string mangledName = name + s_collectionSuffix;
155 const std::string mangledNewName = newName + s_collectionSuffix;
156 if (other.hasObjectLink(mangledName)) {
157 if (this->hasObjectLink(mangledNewName)) {
158 if (s_throwOnCopyError) throw std::runtime_error("Already have link collection with name " + newName);
159 } else {
160 // Copy all links in the collection. Just iterating through the source vector
161 for (size_t index = 0; index < other.linkColNames().size(); ++index) {
162 if (other.linkColNames().at(index) == mangledName) {
163 copyLinkInternal(other, index, mangledNewName);
164 }
165 }
166 didCopy = true;
167 }
168 }
169 if (!didCopy && s_throwOnCopyError) throw std::runtime_error("Could not find link with name " + name);
170 return didCopy;
171 }
172
173 bool TrigComposite_v1::copyLinkCollectionFrom(const xAOD::TrigComposite_v1* other, const std::string& name, std::string newName) {
174 return copyLinkCollectionFrom(*other, name, std::move(newName));
175 }
176
178 bool didCopy = false;
179 for (const std::string& name : other.linkColNames()) {
180 // Check we don't have one (or more) entries with this raw name (raw = might be mangled).
181 if (this->hasObjectLink(name)) continue;
182 // Check if the link is for a single object or collection of objects by looking for the mangled suffix
183 if (name.ends_with(s_collectionSuffix)) {
184 // The copyLinkCollectionFrom call needs the un-mangled name as it is a public fn. It will re-mangle.
185 const std::string unmangledName = name.substr(0, name.size() - s_collectionSuffix.size());
186 copyLinkCollectionFrom(other, unmangledName);
187 } else { // not a collection
189 }
190 didCopy = true;
191 }
192 return didCopy;
193 }
194
198
199 //
201
203 //
204 // Implementation for the link accessor functions
205 //
206
207
208 bool TrigComposite_v1::removeObjectLink(const std::string& name) {
209 bool removed = false;
210 const std::vector< std::string >& names = linkColNames();
211 for( size_t i = 0; i < names.size(); ++i ) {
212 if( names.at(i) != name ) continue;
213 // Remove
214 linkColNamesNC().erase( linkColNamesNC().begin() + i );
215 linkColKeysNC().erase( linkColKeysNC().begin() + i );
216 linkColIndicesNC().erase( linkColIndicesNC().begin() + i );
217 linkColClidsNC().erase( linkColClidsNC().begin() + i );
218 removed = true;
219 break;
220 }
221 return removed;
222 }
223
224
226 bool removed = false;
227 const std::vector< std::string >& names = linkColNames();
228 const std::string mangledName = name + s_collectionSuffix;
229 for( size_t i = 0; i < names.size(); /*noop*/ ) {
230 if( names.at(i) == mangledName ) {
231 // Remove
232 linkColNamesNC().erase( linkColNamesNC().begin() + i );
233 linkColKeysNC().erase( linkColKeysNC().begin() + i );
234 linkColIndicesNC().erase( linkColIndicesNC().begin() + i );
235 linkColClidsNC().erase( linkColClidsNC().begin() + i );
236 removed = true;
237 } else {
238 ++i;
239 }
240 }
241 return removed;
242 }
243
244 bool TrigComposite_v1::hasObjectLink( const std::string& name, const CLID clid ) const {
245
246 // Since this function shouldn't throw exceptions too easily,
247 // let's be super careful here...
248 if( ! (acc_linkColNames.isAvailable( *this ) || acc_linkColClids.isAvailable( *this) ) ) {
249 return false;
250 }
251
252 // The check itself is pretty simple:
253 const std::vector< std::string >& names = acc_linkColNames( *this );
254 const std::vector< uint32_t >& clids = acc_linkColClids( *this );
255
256 std::vector<std::string>::const_iterator vecIt = std::find( names.begin(), names.end(), name );
257 if (vecIt == names.end()) {
258 return false; // Could not find name
259 }
260
261 if (clid != CLID_NULL) { // Also check against clid
262 const uint32_t storedCLID = clids.at( std::distance( names.begin(), vecIt ) );
264 return derivesFromIParticle(storedCLID);
265 } else if (storedCLID != clid) { // Otherwise we require the ID to match
266 return false; // Type missmatch
267 }
268 }
269
270 return true; // Satisfied
271 }
272
273 bool TrigComposite_v1::hasObjectCollectionLinks( const std::string& collectionName, const CLID clid ) const {
274 const std::string mangledName = collectionName + s_collectionSuffix;
275 return hasObjectLink( mangledName, clid );
276 }
277
278
279 bool TrigComposite_v1::hasObjectLinkExact(const std::string& name, const sgkey_t key, const TrigComposite_v1::index_type index, const uint32_t clid) const {
280 for (size_t i = 0; i < this->linkColNames().size(); ++i) {
281 if (this->linkColNames().at(i) != name) continue;
282 if (!SG::sgkeyEqual (this->linkColKeys().at(i), key)) continue;
283 if (this->linkColIndices().at(i) != index) continue;
284 if (this->linkColClids().at(i) != clid) continue;
285 return true;
286 }
287 return false;
288 }
289
290 bool TrigComposite_v1::derivesFromIParticle(const CLID clid [[maybe_unused]]) const {
291#ifndef XAOD_STANDALONE
292 const SG::BaseInfoBase* bib = SG::BaseInfoBase::find (clid);
293 if (bib) {
295 }
296 // No base info available means we never called any of the macros declaring bases so it's
297 // likely that the clid doesn't inherit from IParticle...
298 return false;
299#endif
300 return true;
301 }
302
303 AUXSTORE_OBJECT_GETTER( TrigComposite_v1, std::vector< std::string >,
304 linkColNames )
305 AUXSTORE_OBJECT_GETTER( TrigComposite_v1, std::vector< uint32_t >,
306 linkColClids )
307
309 return acc_linkColKeys( *this );
310 }
311
312 const std::vector< TrigComposite_v1::index_type >& TrigComposite_v1::linkColIndices() const {
313 return acc_linkColIndices( *this );
314 }
315
316 const std::vector< SG::sgkey_t >& TrigComposite_v1::linkColKeysRemap() const {
317 return acc_remap_linkColKeys( *this );
318 }
319
320 const std::vector< TrigComposite_v1::index_type >& TrigComposite_v1::linkColIndicesRemap() const {
321 return acc_remap_linkColIndices( *this );
322 }
323
325
326 std::vector< std::string >& TrigComposite_v1::linkColNamesNC() {
327 return acc_linkColNames( *this );
328 }
329
330 std::vector< SG::sgkey_t >& TrigComposite_v1::linkColKeysNC() {
331 return acc_linkColKeys( *this );
332 }
333
334 std::vector< TrigComposite_v1::index_type >& TrigComposite_v1::linkColIndicesNC() {
335 return acc_linkColIndices( *this );
336 }
337
338 std::vector< uint32_t >& TrigComposite_v1::linkColClidsNC() {
339 return acc_linkColClids( *this );
340 }
341
342 void TrigComposite_v1::typelessSetObjectLink( const std::string& name, const sgkey_t key, const uint32_t clid, const TrigComposite_v1::index_type beginIndex, const TrigComposite_v1::index_type endIndex ) {
343
344 // Loop over collections
345 if ( int32_t(endIndex) - int32_t(beginIndex) > 1 ) { // Adding a *collection* of links, this needs to be a signed check as a difference <= 0 implies that endIndex is less than or equal to beginIndex
346
347 // Check uniqueness
348 const std::string mangledName = name + s_collectionSuffix;
349 const std::vector< std::string >& names = linkColNames();
350 int oldStart = -1;
351 int oldEnd = -1;
352 for( size_t nameIndex = 0; nameIndex < names.size(); ++nameIndex ) {
353
354 // Look for an existing collection with the same name
355 if( names[ nameIndex ] == mangledName ) {
356 oldEnd = nameIndex + 1;
357 if ( oldStart == -1 ) oldStart = nameIndex;
358 }
359 else if ( oldStart != -1 ) {
360 // If the start has been found, we must now be past the ned
361 break;
362 }
363 }
364
365 // Erase the old collection, if there was one
366 if ( oldStart != -1 ) {
367 this->linkColNamesNC().erase( this->linkColNamesNC().begin() + oldStart, this->linkColNamesNC().begin() + oldEnd );
368 this->linkColKeysNC().erase( this->linkColKeysNC().begin() + oldStart, this->linkColKeysNC().begin() + oldEnd );
369 this->linkColIndicesNC().erase( this->linkColIndicesNC().begin() + oldStart, this->linkColIndicesNC().begin() + oldEnd );
370 this->linkColClidsNC().erase( this->linkColClidsNC().begin() + oldStart, this->linkColClidsNC().begin() + oldEnd );
371 }
372
373 // Append the new collection
374 for ( TrigComposite_v1::index_type index = beginIndex; index < endIndex; ++index ) {
375 this->linkColNamesNC().push_back( mangledName );
376 this->linkColKeysNC().push_back( key );
377 this->linkColIndicesNC().push_back( index );
378 this->linkColClidsNC().push_back( clid );
379 }
380
381 } else { // Adding a *single* link
382
383 // Check uniqueness
384 if ( std::find( linkColNamesNC().begin(), linkColNamesNC().end(), name ) == linkColNamesNC().end() ) {
385
386 this->linkColNamesNC().push_back( name );
387 this->linkColKeysNC().push_back( key );
388 this->linkColIndicesNC().push_back( beginIndex );
389 this->linkColClidsNC().push_back( clid );
390
391 } else {
392
393 // Over-write an existing object
394 const std::vector< std::string >& names = linkColNames();
395 for( size_t nameIndex = 0; nameIndex < names.size(); ++nameIndex ) {
396 if( names[ nameIndex ] == name ) {
397 this->linkColKeysNC()[ nameIndex ] = key;
398 this->linkColIndicesNC()[ nameIndex ] = beginIndex;
399 this->linkColClidsNC()[ nameIndex ] = clid;
400 break; // Names are unique, so stop once found
401 } // Check of names
402 } // Loop over names
403
404 } // Check of uniqueness of adding single link
405
406 } // Check of adding single link vs link collection
407 }
408
410 std::vector<std::string>::const_iterator it = std::find(linkColNames().begin(), linkColNames().end(), name);
411 if (it == linkColNames().end()) {
412 return false;
413 }
414 const size_t location = std::distance(linkColNames().begin(), it);
415 if (isRemapped()) {
416 key = linkColKeysRemap().at(location);
417 clid = linkColClids().at(location);
418 index = linkColIndicesRemap().at(location);
419 } else {
420 key = linkColKeys().at(location);
421 clid = linkColClids().at(location);
422 index = linkColIndices().at(location);
423 }
424 return true;
425 }
426
427
429 std::vector<sgkey_t>& keyVec, std::vector<uint32_t>& clidVec, std::vector<TrigComposite_v1::index_type>& indexVec ) const
430 {
431 bool found = false;
432 const std::string mangledName = name + s_collectionSuffix;
433 for (size_t i = 0; i < this->linkColNames().size(); ++i) {
434 if (linkColNames().at(i) != mangledName) {
435 continue;
436 }
437 if (isRemapped()) {
438 keyVec.push_back( linkColKeysRemap().at(i) );
439 clidVec.push_back( linkColClids().at(i) );
440 indexVec.push_back( linkColIndicesRemap().at(i) );
441 } else {
442 keyVec.push_back( linkColKeys().at(i) );
443 clidVec.push_back( linkColClids().at(i) );
444 indexVec.push_back( linkColIndices().at(i) );
445 }
446 found = true;
447 }
448 return found;
449 }
450
451
453 size_t nDecorations = 0;
454 if (acc_remap_linkColKeys.isAvailable( *this )) ++nDecorations;
455 if (acc_remap_linkColIndices.isAvailable( *this )) ++nDecorations;
456 if (nDecorations == 1) {
457 throw std::runtime_error("TrigComposite_v1::isRemapped Only one of the 'remap_linkColKeys' and 'remap_linkColIndices' "
458 "decorations were found on this object. This should never happen, a remapped element link must have both of these collections.");
459 }
460 return static_cast<bool>(nDecorations); //0=False, 2=True
461 }
462
463
464 std::vector<std::string> TrigComposite_v1::getObjectNames(const CLID clid) const {
465
466 std::vector< std::string > returnVec;
467 const std::vector< std::string >& names = linkColNames();
468 const std::vector< uint32_t >& clids = linkColClids();
469
470 for( size_t i = 0; i < names.size(); ++i ) {
471 if (names[i].find(s_collectionSuffix) != std::string::npos) { //Note: !=
472 continue; // ARE *NOT* interested in collection links here
473 }
474 bool clidMatch = false;
476 clidMatch = derivesFromIParticle(clids[i]);
477 } else if (clid == clids[i]) {
478 clidMatch = true;
479 }
480 if (clidMatch) {
481 returnVec.push_back( names[i] );
482 }
483 }
484 return returnVec;
485 }
486
487 std::vector<std::string> TrigComposite_v1::getObjectCollectionNames(const CLID clid) const {
488
489 std::vector< std::string > returnVec;
490 const std::vector< std::string >& names = linkColNames();
491 const std::vector< uint32_t >& clids = linkColClids();
492
493 for( size_t i = 0; i < names.size(); ++i ) {
494 if (names[i].find(s_collectionSuffix) == std::string::npos) { // Note: ==
495 continue; // ARE interested in collection links here
496 }
497 bool clidMatch = false;
499 clidMatch = derivesFromIParticle(clids[i]);
500 } else if (clid == clids[i]) {
501 clidMatch = true;
502 }
503 if (clidMatch) {
504 // Unlike with single links, we expect to find multiple links here. Only add the name once.
505 // Name is mangled in storage, need to un-mangle it before returning it to the user.
506 const std::string unmangledName = names[i].substr(0, names[i].size() - s_collectionSuffix.size());
507 if ( std::none_of(returnVec.begin(), returnVec.end(), [&](const auto& s) {return unmangledName == s;}) ) {
508 returnVec.push_back( std::move(unmangledName) );
509 }
510 }
511 }
512 return returnVec;
513 }
514
515 //
517
518
519std::ostream& operator<<(std::ostream& os, const xAOD::TrigComposite_v1& tc) {
520 os << "TrigComposite_v1 name:'" << tc.name() << "'" << std::endl;
521 const bool isRemapped = tc.isRemapped();
522 os << " N Links:" << tc.linkColNames().size() << ", isRemapped:" << (isRemapped ? "YES" : "NO");
523 for (size_t i=0; i<tc.linkColNames().size(); ++i){
524 if (!i) os << std::endl;
525 os << " Link Name:" << tc.linkColNames()[i];
526 os << ", Key:" << tc.linkColKeys()[i];
527 if (isRemapped) os << ", RemappedKey:" << tc.linkColKeysRemap()[i];
528 os << ", Index:" << tc.linkColIndices()[i];
529 if (isRemapped) os << ", RemappedIndex:" << tc.linkColIndicesRemap()[i];
530 os << ", CLID:" << tc.linkColClids()[i];
531 if (i != tc.linkColNames().size() - 1) os << std::endl;
532 }
533 if (!tc.decisions().empty()) {
534 os << std::endl << " N Decisions:" << tc.decisions().size() << std::endl << " ";
535 for (const TrigCompositeUtils::DecisionID id : tc.decisions()) os << id << ", ";
536 }
537 return os;
538}
539
540} // namespace xAOD
#define AUXSTORE_OBJECT_GETTER(CL, TYPE, NAME)
Macro creating the reader function for a complex auxiliary property.
#define AUXSTORE_OBJECT_SETTER_AND_GETTER(CL, TYPE, NAME, SETTER)
Macro creating the accessors of complex auxiliary properties.
Provide an interface for finding inheritance information at run time.
uint32_t CLID
The Class ID type.
static Double_t tc
Helper class to provide type-safe access to aux data.
void makePrivateStore()
Create a new (empty) private store for this object.
AuxElement & operator=(const AuxElement &other)
Assignment.
bool hasStore() const
Return true if this object has an associated store.
const SG::AuxVectorData * container() const
Return the container holding this element.
AuxElement()
Default constructor.
The non-template portion of the BaseInfo implementation.
static const BaseInfoBase * find(CLID clid)
Find the BaseInfoBase instance for clid.
Definition BaseInfo.cxx:570
bool is_base(CLID clid) const
Return true if clid is the ID of a class that is known to be a base of T.
Definition BaseInfo.cxx:344
STL class.
ExcNotIParticleContainer(const std::string &msg)
Class used to describe composite objects in the HLT.
bool derivesFromIParticle(const CLID clid) const
Helper function. Check if the requested type can be down cast to an IParticle transient interface.
static const std::string s_summaryFilterNodeNameString
Constant used to identify a navigation graph node as being from a final Filter created by the Decisio...
static const std::string s_collectionSuffix
static const std::string s_filterNodeNameString
Constant used to identify a navigation graph node as being from a Filter.
bool copyAllLinksFrom(const xAOD::TrigComposite_v1 &other)
Copy all single links and collections of links from another object.
bool isRemapped() const
Information on if linkColKeys() and linkColIndices() are able to access remapped link data Remapping ...
std::vector< index_type > & linkColIndicesNC()
Raw access to the persistent link indices (non-const)
const std::vector< sgkey_t > & linkColKeysRemap() const
Raw access to the persistent link labels. Will attempt to access remapped link data.
const std::vector< std::string > & linkColNames() const
Raw access to the persistent link names.
static const std::string s_inputMakerNodeNameString
Constant used to identify a navigation graph node as being from a Input Maker.
void typelessSetObjectLink(const std::string &name, const sgkey_t key, const uint32_t clid, const index_type beginIndex, const index_type endIndex=0)
Add a link without type.
TrigComposite_v1 & operator=(const TrigComposite_v1 &rhs)
Assignment operator.
bool hasObjectLink(const std::string &name, const CLID clid=CLID_NULL) const
Check if a link to an object with a given name and type exists. CLID_NULL to not check type.
void copyLinkInternal(const xAOD::TrigComposite_v1 &other, const size_t index, const std::string &newName)
Helper function, copy one link into this object.
const std::vector< index_type > & linkColIndicesRemap() const
Raw access to the persistent link indices. Will attempt to access remapped link data.
static const std::string s_summaryPrescaledNodeNameString
Constant used to identify the single prescaled graph node.
std::vector< uint32_t > & linkColClidsNC()
Raw access to the persistent link CLIDs (non-const)
bool removeObjectLink(const std::string &name)
Delete any stored element link with the given name.
bool typelessGetObjectLink(const std::string &name, sgkey_t &key, uint32_t &clid, index_type &index) const
Fetches a single link without type.
static const std::string s_seedString
Constant used to identify a seed (parent)
static const std::string s_hltSeedingNodeNameString
Constant used to identify a navigation graph node as being from the HLTSeeding.
bool copyLinkFrom(const xAOD::TrigComposite_v1 &other, const std::string &name, std::string newName="")
Copy one named link from another object.
std::vector< sgkey_t > & linkColKeysNC()
Raw access to the persistent link labels (non-const)
static const std::string s_initialRoIString
Constant used to identify an initial ROI from L1.
std::vector< std::string > & linkColNamesNC()
Raw access to the persistent link names (non-const)
static const std::string s_viewString
Constant used to identify a view.
bool hasObjectLinkExact(const std::string &name, const sgkey_t key, const index_type index, const uint32_t clid) const
TrigComposite_v1()
Default constructor.
const std::vector< index_type > & linkColIndices() const
Raw access to the persistent link indices.
bool typelessGetObjectCollectionLinks(const std::string &name, std::vector< sgkey_t > &keyVec, std::vector< uint32_t > &clidVec, std::vector< index_type > &indexVec) const
Fetches a collection of links without type.
bool hasObjectCollectionLinks(const std::string &collectionName, const CLID clid=CLID_NULL) const
Check if links exist to a collection of objects with given name and type. CLID_NULL to not check type...
static const std::string s_comboHypoAlgNodeNameString
Constant used to identify a navigation graph node as being from a Combo Hypo Alg.
std::vector< std::string > getObjectNames() const
Look up all links stored to objects of (container) type CONTAINER.
const std::vector< sgkey_t > & linkColKeys() const
Raw access to the persistent link labels.
static const std::string s_featureString
Constant used to identify a feature.
static const std::string s_summaryPassExpressNodeNameString
Constant used to identify the single express-accept graph node.
static const std::string s_initialRecRoIString
Constant used to identify an initial HLT ROI derived from L1.
const std::string & name() const
Get a human-readable name for the object.
static const std::string s_hypoAlgNodeNameString
Constant used to identify a navigation graph node as being from a Hypo Alg.
const std::vector< uint32_t > & linkColClids() const
Raw access to the persistent link CLIDs.
std::vector< std::string > getObjectCollectionNames() const
Look up all links stored to collections objects from (container) type CONTAINER.
bool copyLinkCollectionFrom(const xAOD::TrigComposite_v1 &other, const std::string &name, std::string newName="")
Copy one named link collection from another object.
bool removeObjectCollectionLinks(const std::string &name)
Delete any stored collection of element links with the given name.
static const std::string s_summaryPassNodeNameString
Constant used to identify the single terminus graph node the end point of all chains which accept the...
static const std::string s_roiString
Constant used to identify an (explicitly) updated HLT ROI.
std::string find(const std::string &s)
return a remapped string
Definition hcg.cxx:138
Forward declaration.
constexpr bool sgkeyEqual(const sgkey_t a, const sgkey_t b)
Compare two sgkeys for equality.
Definition sgkey_t.h:39
unsigned int DecisionID
Definition index.py:1
STL namespace.
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
static const SG::Accessor< std::vector< TrigComposite_v1::index_type > > acc_linkColIndices("linkColIndices")
static const SG::Accessor< std::vector< uint32_t > > acc_linkColClids("linkColClids")
static const SG::AuxElement::Accessor< std::vector< std::string > > names("thrNames")
Accessor for the names of the passed thresholds.
static const SG::Accessor< std::vector< std::string > > acc_linkColNames("linkColNames")
static const SG::Accessor< std::vector< TrigComposite_v1::index_type > > acc_remap_linkColIndices("remap_linkColIndices")
static const SG::Accessor< std::vector< TrigComposite_v1::sgkey_t > > acc_linkColKeys("linkColKeys")
std::ostream & operator<<(std::ostream &out, const std::pair< FIRST, SECOND > &pair)
Helper print operator.
setEventNumber uint32_t
static const SG::Accessor< std::vector< TrigComposite_v1::sgkey_t > > acc_remap_linkColKeys("remap_linkColKeys")
MsgStream & msg
Definition testRead.cxx:32