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
19
20// Local include(s):
23
24#ifndef XAOD_STANDALONE
26#endif
27
28namespace xAOD {
29
30 // The "linkColIndices" aux type underwent an in-line schema evolution in October 2024
31 // from vector<vector<uint16_t>> to vector<vector<uint32_t>>.
32 //
33 // We need to have a static Accessor object defined for this aux name which lives outside of class scope in libxAODTrigger.so
34 // This object will be instantiated early, when ROOT reads this libraries dictionary upon opening a file.
35 // It will register the updated type in the aux registry at this early time, before any dictionaries
36 // stored in the file are read - which would populate the aux registry with the outdated type if the
37 // file was produced prior to the schema update.
38 //
39 // For consistency, the other Accessors used by the TrigComposite interface implementation are moved up here too.
42 static const SG::Accessor< std::vector< TrigComposite_v1::index_type > > acc_linkColIndices( "linkColIndices" ); // Caution: Schema evolution, October 2024
44
45 // Remapped element link keys and indices are decorated temporarily onto immutable nodes via these accessors.
46 // These become solidified when a navigation graph is run through TrigNavSlimmingMTAlg.
49
54
55 const std::string TrigComposite_v1::s_collectionSuffix{"__COLL"};
56
57 // Note: These definitions shadow those in TrigCompositeUtils.py
58 const std::string TrigComposite_v1::s_initialRoIString{"initialRoI"};
59 const std::string TrigComposite_v1::s_initialRecRoIString{"initialRecRoI"};
60 const std::string TrigComposite_v1::s_roiString{"roi"};
61 const std::string TrigComposite_v1::s_viewString{"view"};
62 const std::string TrigComposite_v1::s_featureString{"feature"};
63 const std::string TrigComposite_v1::s_seedString{"seed"};
64
66 const std::string TrigComposite_v1::s_filterNodeNameString{"F"};
68 const std::string TrigComposite_v1::s_hypoAlgNodeNameString{"H"};
71 const std::string TrigComposite_v1::s_summaryPassNodeNameString{"HLTPassRaw"};
72 const std::string TrigComposite_v1::s_summaryPassExpressNodeNameString{"HLTPassExpress"};
73 const std::string TrigComposite_v1::s_summaryPrescaledNodeNameString{"HLTPrescaled"};
74
75 bool TrigComposite_v1::s_throwOnCopyError = false;
76
79
81 this->makePrivateStore( parent );
82 }
83
85 if(this == &rhs) return *this;
86 if( ( ! hasStore() ) && ( ! container() ) ) this->makePrivateStore();
87
88 // Copy the auxiliary variables:
90
91 // Return this object:
92 return *this;
93 }
94
96 //
97 // Built in accessor functions
98 //
99
101 name, setName )
102
103 AUXSTORE_OBJECT_SETTER_AND_GETTER( TrigComposite_v1, std::vector<TrigCompositeUtils::DecisionID>,
104 decisions, setDecisions )
105
106 //
108
110 //
111 // Implementation for the link copy functions
112 //
113
115 this->linkColNamesNC().push_back( newName );
116 this->linkColClidsNC().push_back( other.linkColClids().at(index) );
117 if (other.isRemapped()) {
118 this->linkColKeysNC().push_back( other.linkColKeysRemap().at(index) );
119 this->linkColIndicesNC().push_back( other.linkColIndicesRemap().at(index) );
120 } else {
121 this->linkColKeysNC().push_back( other.linkColKeys().at(index) );
122 this->linkColIndicesNC().push_back( other.linkColIndices().at(index) );
123 }
124 }
125
126 bool TrigComposite_v1::copyLinkFrom(const xAOD::TrigComposite_v1& other, const std::string& name, std::string newName) {
127 if (newName.empty()) {
128 newName = name;
129 }
130 bool didCopy = false;
131 // Check for the existence of single link
132 std::vector<std::string>::const_iterator locationIt;
133 locationIt = std::find(other.linkColNames().begin(), other.linkColNames().end(), name);
134 if (locationIt != other.linkColNames().end()) {
135 size_t index = std::distance(other.linkColNames().begin(), locationIt);
136 if (this->hasObjectLink(newName)) {
137 if (s_throwOnCopyError) throw std::runtime_error("Already have link with name " + newName);
138 } else {
139 copyLinkInternal(other, index, newName);
140 didCopy = true;
141 }
142 }
143 if (!didCopy && s_throwOnCopyError) throw std::runtime_error("Could not find link with name " + name);
144 return didCopy;
145 }
146
147 bool TrigComposite_v1::copyLinkFrom(const xAOD::TrigComposite_v1* other, const std::string& name, std::string newName) {
148 return copyLinkFrom(*other, name, std::move(newName));
149 }
150
151 bool TrigComposite_v1::copyLinkCollectionFrom(const xAOD::TrigComposite_v1& other, const std::string& name, std::string newName) {
152 bool didCopy = false;
153 // Check for the existence of a collection.
154 if (newName.empty()) {
155 newName = name;
156 }
157 const std::string mangledName = name + s_collectionSuffix;
158 const std::string mangledNewName = newName + s_collectionSuffix;
159 if (other.hasObjectLink(mangledName)) {
160 if (this->hasObjectLink(mangledNewName)) {
161 if (s_throwOnCopyError) throw std::runtime_error("Already have link collection with name " + newName);
162 } else {
163 // Copy all links in the collection. Just iterating through the source vector
164 for (size_t index = 0; index < other.linkColNames().size(); ++index) {
165 if (other.linkColNames().at(index) == mangledName) {
166 copyLinkInternal(other, index, mangledNewName);
167 }
168 }
169 didCopy = true;
170 }
171 }
172 if (!didCopy && s_throwOnCopyError) throw std::runtime_error("Could not find link with name " + name);
173 return didCopy;
174 }
175
176 bool TrigComposite_v1::copyLinkCollectionFrom(const xAOD::TrigComposite_v1* other, const std::string& name, std::string newName) {
177 return copyLinkCollectionFrom(*other, name, std::move(newName));
178 }
179
181 bool didCopy = false;
182 for (const std::string& name : other.linkColNames()) {
183 // Check we don't have one (or more) entries with this raw name (raw = might be mangled).
184 if (this->hasObjectLink(name)) continue;
185 // Check if the link is for a single object or collection of objects by looking for the mangled suffix
186 if (name.ends_with(s_collectionSuffix)) {
187 // The copyLinkCollectionFrom call needs the un-mangled name as it is a public fn. It will re-mangle.
188 const std::string unmangledName = name.substr(0, name.size() - s_collectionSuffix.size());
189 copyLinkCollectionFrom(other, unmangledName);
190 } else { // not a collection
192 }
193 didCopy = true;
194 }
195 return didCopy;
196 }
197
201
202 //
204
206 //
207 // Implementation for the link accessor functions
208 //
209
210
211 bool TrigComposite_v1::removeObjectLink(const std::string& name) {
212 bool removed = false;
213 const std::vector< std::string >& names = linkColNames();
214 for( size_t i = 0; i < names.size(); ++i ) {
215 if( names.at(i) != name ) continue;
216 // Remove
217 linkColNamesNC().erase( linkColNamesNC().begin() + i );
218 linkColKeysNC().erase( linkColKeysNC().begin() + i );
219 linkColIndicesNC().erase( linkColIndicesNC().begin() + i );
220 linkColClidsNC().erase( linkColClidsNC().begin() + i );
221 removed = true;
222 break;
223 }
224 return removed;
225 }
226
227
229 bool removed = false;
230 const std::vector< std::string >& names = linkColNames();
231 const std::string mangledName = name + s_collectionSuffix;
232 for( size_t i = 0; i < names.size(); /*noop*/ ) {
233 if( names.at(i) == mangledName ) {
234 // Remove
235 linkColNamesNC().erase( linkColNamesNC().begin() + i );
236 linkColKeysNC().erase( linkColKeysNC().begin() + i );
237 linkColIndicesNC().erase( linkColIndicesNC().begin() + i );
238 linkColClidsNC().erase( linkColClidsNC().begin() + i );
239 removed = true;
240 } else {
241 ++i;
242 }
243 }
244 return removed;
245 }
246
247 bool TrigComposite_v1::hasObjectLink( const std::string& name, const CLID clid ) const {
248
249 // Since this function shouldn't throw exceptions too easily,
250 // let's be super careful here...
251 if( ! (acc_linkColNames.isAvailable( *this ) || acc_linkColClids.isAvailable( *this) ) ) {
252 return false;
253 }
254
255 // The check itself is pretty simple:
256 const std::vector< std::string >& names = acc_linkColNames( *this );
257 const std::vector< uint32_t >& clids = acc_linkColClids( *this );
258
259 std::vector<std::string>::const_iterator vecIt = std::find( names.begin(), names.end(), name );
260 if (vecIt == names.end()) {
261 return false; // Could not find name
262 }
263
264 if (clid != CLID_NULL) { // Also check against clid
265 const uint32_t storedCLID = clids.at( std::distance( names.begin(), vecIt ) );
267 return derivesFromIParticle(storedCLID);
268 } else if (storedCLID != clid) { // Otherwise we require the ID to match
269 return false; // Type missmatch
270 }
271 }
272
273 return true; // Satisfied
274 }
275
276 bool TrigComposite_v1::hasObjectCollectionLinks( const std::string& collectionName, const CLID clid ) const {
277 const std::string mangledName = collectionName + s_collectionSuffix;
278 return hasObjectLink( mangledName, clid );
279 }
280
281
282 bool TrigComposite_v1::hasObjectLinkExact(const std::string& name, const sgkey_t key, const TrigComposite_v1::index_type index, const uint32_t clid) const {
283 for (size_t i = 0; i < this->linkColNames().size(); ++i) {
284 if (this->linkColNames().at(i) != name) continue;
285 if (!SG::sgkeyEqual (this->linkColKeys().at(i), key)) continue;
286 if (this->linkColIndices().at(i) != index) continue;
287 if (this->linkColClids().at(i) != clid) continue;
288 return true;
289 }
290 return false;
291 }
292
294 // Explicit checks (mostly for AnalysisBase). Hard code any CLIDs which may cause issues.
295 if (clid == ClassID_traits<xAOD::HIEventShapeContainer>::ID()) return false;
296 if (clid == ClassID_traits<xAOD::TrigMissingETContainer>::ID()) return false;
297 if (clid == ClassID_traits<xAOD::TrigCompositeContainer>::ID()) return false; // Used by some legs as a dummy feature
298#ifndef XAOD_STANDALONE
299 // If in an Athena build we can perform a more thorough inheritance check
300 const SG::BaseInfoBase* bib = SG::BaseInfoBase::find (clid);
301 if (bib) {
303 }
304 // No base info available means we never called any of the macros declaring bases so it's
305 // likely that the clid doesn't inherit from IParticle...
306 return false;
307#endif
308 return true;
309 }
310
311 AUXSTORE_OBJECT_GETTER( TrigComposite_v1, std::vector< std::string >,
312 linkColNames )
313 AUXSTORE_OBJECT_GETTER( TrigComposite_v1, std::vector< uint32_t >,
314 linkColClids )
315
317 return acc_linkColKeys( *this );
318 }
319
320 const std::vector< TrigComposite_v1::index_type >& TrigComposite_v1::linkColIndices() const {
321 return acc_linkColIndices( *this );
322 }
323
324 const std::vector< SG::sgkey_t >& TrigComposite_v1::linkColKeysRemap() const {
325 return acc_remap_linkColKeys( *this );
326 }
327
328 const std::vector< TrigComposite_v1::index_type >& TrigComposite_v1::linkColIndicesRemap() const {
329 return acc_remap_linkColIndices( *this );
330 }
331
333
334 std::vector< std::string >& TrigComposite_v1::linkColNamesNC() {
335 return acc_linkColNames( *this );
336 }
337
338 std::vector< SG::sgkey_t >& TrigComposite_v1::linkColKeysNC() {
339 return acc_linkColKeys( *this );
340 }
341
342 std::vector< TrigComposite_v1::index_type >& TrigComposite_v1::linkColIndicesNC() {
343 return acc_linkColIndices( *this );
344 }
345
346 std::vector< uint32_t >& TrigComposite_v1::linkColClidsNC() {
347 return acc_linkColClids( *this );
348 }
349
350 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 ) {
351
352 // Loop over collections
353 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
354
355 // Check uniqueness
356 const std::string mangledName = name + s_collectionSuffix;
357 const std::vector< std::string >& names = linkColNames();
358 int oldStart = -1;
359 int oldEnd = -1;
360 for( size_t nameIndex = 0; nameIndex < names.size(); ++nameIndex ) {
361
362 // Look for an existing collection with the same name
363 if( names[ nameIndex ] == mangledName ) {
364 oldEnd = nameIndex + 1;
365 if ( oldStart == -1 ) oldStart = nameIndex;
366 }
367 else if ( oldStart != -1 ) {
368 // If the start has been found, we must now be past the ned
369 break;
370 }
371 }
372
373 // Erase the old collection, if there was one
374 if ( oldStart != -1 ) {
375 this->linkColNamesNC().erase( this->linkColNamesNC().begin() + oldStart, this->linkColNamesNC().begin() + oldEnd );
376 this->linkColKeysNC().erase( this->linkColKeysNC().begin() + oldStart, this->linkColKeysNC().begin() + oldEnd );
377 this->linkColIndicesNC().erase( this->linkColIndicesNC().begin() + oldStart, this->linkColIndicesNC().begin() + oldEnd );
378 this->linkColClidsNC().erase( this->linkColClidsNC().begin() + oldStart, this->linkColClidsNC().begin() + oldEnd );
379 }
380
381 // Append the new collection
382 for ( TrigComposite_v1::index_type index = beginIndex; index < endIndex; ++index ) {
383 this->linkColNamesNC().push_back( mangledName );
384 this->linkColKeysNC().push_back( key );
385 this->linkColIndicesNC().push_back( index );
386 this->linkColClidsNC().push_back( clid );
387 }
388
389 } else { // Adding a *single* link
390
391 // Check uniqueness
392 if ( std::find( linkColNamesNC().begin(), linkColNamesNC().end(), name ) == linkColNamesNC().end() ) {
393
394 this->linkColNamesNC().push_back( name );
395 this->linkColKeysNC().push_back( key );
396 this->linkColIndicesNC().push_back( beginIndex );
397 this->linkColClidsNC().push_back( clid );
398
399 } else {
400
401 // Over-write an existing object
402 const std::vector< std::string >& names = linkColNames();
403 for( size_t nameIndex = 0; nameIndex < names.size(); ++nameIndex ) {
404 if( names[ nameIndex ] == name ) {
405 this->linkColKeysNC()[ nameIndex ] = key;
406 this->linkColIndicesNC()[ nameIndex ] = beginIndex;
407 this->linkColClidsNC()[ nameIndex ] = clid;
408 break; // Names are unique, so stop once found
409 } // Check of names
410 } // Loop over names
411
412 } // Check of uniqueness of adding single link
413
414 } // Check of adding single link vs link collection
415 }
416
418 std::vector<std::string>::const_iterator it = std::find(linkColNames().begin(), linkColNames().end(), name);
419 if (it == linkColNames().end()) {
420 return false;
421 }
422 const size_t location = std::distance(linkColNames().begin(), it);
423 if (isRemapped()) {
424 key = linkColKeysRemap().at(location);
425 clid = linkColClids().at(location);
426 index = linkColIndicesRemap().at(location);
427 } else {
428 key = linkColKeys().at(location);
429 clid = linkColClids().at(location);
430 index = linkColIndices().at(location);
431 }
432 return true;
433 }
434
435
437 std::vector<sgkey_t>& keyVec, std::vector<uint32_t>& clidVec, std::vector<TrigComposite_v1::index_type>& indexVec ) const
438 {
439 bool found = false;
440 const std::string mangledName = name + s_collectionSuffix;
441 for (size_t i = 0; i < this->linkColNames().size(); ++i) {
442 if (linkColNames().at(i) != mangledName) {
443 continue;
444 }
445 if (isRemapped()) {
446 keyVec.push_back( linkColKeysRemap().at(i) );
447 clidVec.push_back( linkColClids().at(i) );
448 indexVec.push_back( linkColIndicesRemap().at(i) );
449 } else {
450 keyVec.push_back( linkColKeys().at(i) );
451 clidVec.push_back( linkColClids().at(i) );
452 indexVec.push_back( linkColIndices().at(i) );
453 }
454 found = true;
455 }
456 return found;
457 }
458
459
461 size_t nDecorations = 0;
462 if (acc_remap_linkColKeys.isAvailable( *this )) ++nDecorations;
463 if (acc_remap_linkColIndices.isAvailable( *this )) ++nDecorations;
464 if (nDecorations == 1) {
465 throw std::runtime_error("TrigComposite_v1::isRemapped Only one of the 'remap_linkColKeys' and 'remap_linkColIndices' "
466 "decorations were found on this object. This should never happen, a remapped element link must have both of these collections.");
467 }
468 return static_cast<bool>(nDecorations); //0=False, 2=True
469 }
470
471
472 std::vector<std::string> TrigComposite_v1::getObjectNames(const CLID clid) const {
473
474 std::vector< std::string > returnVec;
475 const std::vector< std::string >& names = linkColNames();
476 const std::vector< uint32_t >& clids = linkColClids();
477
478 for( size_t i = 0; i < names.size(); ++i ) {
479 if (names[i].find(s_collectionSuffix) != std::string::npos) { //Note: !=
480 continue; // ARE *NOT* interested in collection links here
481 }
482 bool clidMatch = false;
484 clidMatch = derivesFromIParticle(clids[i]);
485 } else if (clid == clids[i]) {
486 clidMatch = true;
487 }
488 if (clidMatch) {
489 returnVec.push_back( names[i] );
490 }
491 }
492 return returnVec;
493 }
494
495 std::vector<std::string> TrigComposite_v1::getObjectCollectionNames(const CLID clid) const {
496
497 std::vector< std::string > returnVec;
498 const std::vector< std::string >& names = linkColNames();
499 const std::vector< uint32_t >& clids = linkColClids();
500
501 for( size_t i = 0; i < names.size(); ++i ) {
502 if (names[i].find(s_collectionSuffix) == std::string::npos) { // Note: ==
503 continue; // ARE interested in collection links here
504 }
505 bool clidMatch = false;
507 clidMatch = derivesFromIParticle(clids[i]);
508 } else if (clid == clids[i]) {
509 clidMatch = true;
510 }
511 if (clidMatch) {
512 // Unlike with single links, we expect to find multiple links here. Only add the name once.
513 // Name is mangled in storage, need to un-mangle it before returning it to the user.
514 const std::string unmangledName = names[i].substr(0, names[i].size() - s_collectionSuffix.size());
515 if ( std::none_of(returnVec.begin(), returnVec.end(), [&](const auto& s) {return unmangledName == s;}) ) {
516 returnVec.push_back( std::move(unmangledName) );
517 }
518 }
519 }
520 return returnVec;
521 }
522
523 //
525
526
527std::ostream& operator<<(std::ostream& os, const xAOD::TrigComposite_v1& tc) {
528 os << "TrigComposite_v1 name:'" << tc.name() << "'" << std::endl;
529 const bool isRemapped = tc.isRemapped();
530 os << " N Links:" << tc.linkColNames().size() << ", isRemapped:" << (isRemapped ? "YES" : "NO");
531 for (size_t i=0; i<tc.linkColNames().size(); ++i){
532 if (!i) os << std::endl;
533 os << " Link Name:" << tc.linkColNames()[i];
534 os << ", Key:" << tc.linkColKeys()[i];
535 if (isRemapped) os << ", RemappedKey:" << tc.linkColKeysRemap()[i];
536 os << ", Index:" << tc.linkColIndices()[i];
537 if (isRemapped) os << ", RemappedIndex:" << tc.linkColIndicesRemap()[i];
538 os << ", CLID:" << tc.linkColClids()[i];
539 if (i != tc.linkColNames().size() - 1) os << std::endl;
540 }
541 if (!tc.decisions().empty()) {
542 os << std::endl << " N Decisions:" << tc.decisions().size() << std::endl << " ";
543 for (const TrigCompositeUtils::DecisionID id : tc.decisions()) os << id << ", ";
544 }
545 return os;
546}
547
548} // 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