ATLAS Offline Software
TrigComposite_v1.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 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
21 #include "AthenaKernel/BaseInfo.h"
22 #endif
23 
24 
25 namespace 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.
37  static const SG::Accessor< std::vector< std::string > > acc_linkColNames( "linkColNames" );
38  static const SG::Accessor< std::vector< TrigComposite_v1::sgkey_t > > acc_linkColKeys( "linkColKeys" );
39  static const SG::Accessor< std::vector< TrigComposite_v1::index_type > > acc_linkColIndices( "linkColIndices" ); // Caution: Schema evolution, October 2024
40  static const SG::Accessor< std::vector< uint32_t > > acc_linkColClids( "linkColClids" );
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.
44  static const SG::Accessor< std::vector< TrigComposite_v1::sgkey_t > > acc_remap_linkColKeys( "remap_linkColKeys" );
45  static const SG::Accessor< std::vector< TrigComposite_v1::index_type > > acc_remap_linkColIndices( "remap_linkColIndices" );
46 
48  : std::runtime_error (msg)
49  {
50  }
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 
62  const std::string TrigComposite_v1::s_hltSeedingNodeNameString{"L1"};
63  const std::string TrigComposite_v1::s_filterNodeNameString{"F"};
64  const std::string TrigComposite_v1::s_inputMakerNodeNameString{"IM"};
65  const std::string TrigComposite_v1::s_hypoAlgNodeNameString{"H"};
66  const std::string TrigComposite_v1::s_comboHypoAlgNodeNameString{"CH"};
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 
75  }
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 
111  void TrigComposite_v1::copyLinkInternal(const xAOD::TrigComposite_v1& other, const size_t index, const std::string& newName) {
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 {
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  const bool isCollection = (name.size() > s_collectionSuffix.size() &&
184  std::equal(s_collectionSuffix.rbegin(), s_collectionSuffix.rend(), name.rbegin()));
185  if (isCollection) {
186  // The copyLinkCollectionFrom call needs the un-mangled name as it is a public fn. It will re-mangle.
187  const std::string unmangledName = name.substr(0, name.size() - s_collectionSuffix.size());
188  copyLinkCollectionFrom(other, unmangledName);
189  } else { // !isCollection
191  }
192  didCopy = true;
193  }
194  return didCopy;
195  }
196 
198  return copyAllLinksFrom(*other);
199  }
200 
201  //
203 
205  //
206  // Implementation for the link accessor functions
207  //
208 
209 
210  bool TrigComposite_v1::removeObjectLink(const std::string& name) {
211  bool removed = false;
212  const std::vector< std::string >& names = linkColNames();
213  for( size_t i = 0; i < names.size(); ++i ) {
214  if( names.at(i) != name ) continue;
215  // Remove
216  linkColNamesNC().erase( linkColNamesNC().begin() + i );
217  linkColKeysNC().erase( linkColKeysNC().begin() + i );
218  linkColIndicesNC().erase( linkColIndicesNC().begin() + i );
219  linkColClidsNC().erase( linkColClidsNC().begin() + i );
220  removed = true;
221  break;
222  }
223  return removed;
224  }
225 
226 
228  bool removed = false;
229  const std::vector< std::string >& names = linkColNames();
230  const std::string mangledName = name + s_collectionSuffix;
231  for( size_t i = 0; i < names.size(); /*noop*/ ) {
232  if( names.at(i) == mangledName ) {
233  // Remove
234  linkColNamesNC().erase( linkColNamesNC().begin() + i );
235  linkColKeysNC().erase( linkColKeysNC().begin() + i );
236  linkColIndicesNC().erase( linkColIndicesNC().begin() + i );
237  linkColClidsNC().erase( linkColClidsNC().begin() + i );
238  removed = true;
239  } else {
240  ++i;
241  }
242  }
243  return removed;
244  }
245 
246  bool TrigComposite_v1::hasObjectLink( const std::string& name, const CLID clid ) const {
247 
248  // Since this function shouldn't throw exceptions too easily,
249  // let's be super careful here...
250  if( ! (acc_linkColNames.isAvailable( *this ) || acc_linkColClids.isAvailable( *this) ) ) {
251  return false;
252  }
253 
254  // The check itself is pretty simple:
255  const std::vector< std::string >& names = acc_linkColNames( *this );
256  const std::vector< uint32_t >& clids = acc_linkColClids( *this );
257 
258  std::vector<std::string>::const_iterator vecIt = std::find( names.begin(), names.end(), name );
259  if (vecIt == names.end()) {
260  return false; // Could not find name
261  }
262 
263  if (clid != CLID_NULL) { // Also check against clid
264  const uint32_t storedCLID = clids.at( std::distance( names.begin(), vecIt ) );
266  return derivesFromIParticle(storedCLID);
267  } else if (storedCLID != clid) { // Otherwise we require the ID to match
268  return false; // Type missmatch
269  }
270  }
271 
272  return true; // Satisfied
273  }
274 
275  bool TrigComposite_v1::hasObjectCollectionLinks( const std::string& collectionName, const CLID clid ) const {
276  const std::string mangledName = collectionName + s_collectionSuffix;
277  return hasObjectLink( mangledName, clid );
278  }
279 
280 
281  bool TrigComposite_v1::hasObjectLinkExact(const std::string& name, const sgkey_t key, const TrigComposite_v1::index_type index, const uint32_t clid) const {
282  for (size_t i = 0; i < this->linkColNames().size(); ++i) {
283  if (this->linkColNames().at(i) != name) continue;
284  if (!SG::sgkeyEqual (this->linkColKeys().at(i), key)) continue;
285  if (this->linkColIndices().at(i) != index) continue;
286  if (this->linkColClids().at(i) != clid) continue;
287  return true;
288  }
289  return false;
290  }
291 
292  bool TrigComposite_v1::derivesFromIParticle(const CLID clid [[maybe_unused]]) const {
293 #ifndef XAOD_STANDALONE
294  const SG::BaseInfoBase* bib = SG::BaseInfoBase::find (clid);
295  if (bib) {
297  }
298  // No base info available means we never called any of the macros declaring bases so it's
299  // likely that the clid doesn't inherit from IParticle...
300  return false;
301 #endif
302  return true;
303  }
304 
305  AUXSTORE_OBJECT_GETTER( TrigComposite_v1, std::vector< std::string >,
306  linkColNames )
307  AUXSTORE_OBJECT_GETTER( TrigComposite_v1, std::vector< uint32_t >,
308  linkColClids )
309 
310  const std::vector< SG::sgkey_t >& TrigComposite_v1::linkColKeys() const {
311  return acc_linkColKeys( *this );
312  }
313 
314  const std::vector< TrigComposite_v1::index_type >& TrigComposite_v1::linkColIndices() const {
315  return acc_linkColIndices( *this );
316  }
317 
318  const std::vector< SG::sgkey_t >& TrigComposite_v1::linkColKeysRemap() const {
319  return acc_remap_linkColKeys( *this );
320  }
321 
322  const std::vector< TrigComposite_v1::index_type >& TrigComposite_v1::linkColIndicesRemap() const {
323  return acc_remap_linkColIndices( *this );
324  }
325 
327 
328  std::vector< std::string >& TrigComposite_v1::linkColNamesNC() {
329  return acc_linkColNames( *this );
330  }
331 
332  std::vector< SG::sgkey_t >& TrigComposite_v1::linkColKeysNC() {
333  return acc_linkColKeys( *this );
334  }
335 
336  std::vector< TrigComposite_v1::index_type >& TrigComposite_v1::linkColIndicesNC() {
337  return acc_linkColIndices( *this );
338  }
339 
340  std::vector< uint32_t >& TrigComposite_v1::linkColClidsNC() {
341  return acc_linkColClids( *this );
342  }
343 
344  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 ) {
345 
346  // Loop over collections
347  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
348 
349  // Check uniqueness
350  const std::string mangledName = name + s_collectionSuffix;
351  const std::vector< std::string >& names = linkColNames();
352  int oldStart = -1;
353  int oldEnd = -1;
354  for( size_t nameIndex = 0; nameIndex < names.size(); ++nameIndex ) {
355 
356  // Look for an existing collection with the same name
357  if( names[ nameIndex ] == mangledName ) {
358  oldEnd = nameIndex + 1;
359  if ( oldStart == -1 ) oldStart = nameIndex;
360  }
361  else if ( oldStart != -1 ) {
362  // If the start has been found, we must now be past the ned
363  break;
364  }
365  }
366 
367  // Erase the old collection, if there was one
368  if ( oldStart != -1 ) {
369  this->linkColNamesNC().erase( this->linkColNamesNC().begin() + oldStart, this->linkColNamesNC().begin() + oldEnd );
370  this->linkColKeysNC().erase( this->linkColKeysNC().begin() + oldStart, this->linkColKeysNC().begin() + oldEnd );
371  this->linkColIndicesNC().erase( this->linkColIndicesNC().begin() + oldStart, this->linkColIndicesNC().begin() + oldEnd );
372  this->linkColClidsNC().erase( this->linkColClidsNC().begin() + oldStart, this->linkColClidsNC().begin() + oldEnd );
373  }
374 
375  // Append the new collection
376  for ( TrigComposite_v1::index_type index = beginIndex; index < endIndex; ++index ) {
377  this->linkColNamesNC().push_back( mangledName );
378  this->linkColKeysNC().push_back( key );
379  this->linkColIndicesNC().push_back( index );
380  this->linkColClidsNC().push_back( clid );
381  }
382 
383  } else { // Adding a *single* link
384 
385  // Check uniqueness
387 
388  this->linkColNamesNC().push_back( name );
389  this->linkColKeysNC().push_back( key );
390  this->linkColIndicesNC().push_back( beginIndex );
391  this->linkColClidsNC().push_back( clid );
392 
393  } else {
394 
395  // Over-write an existing object
396  const std::vector< std::string >& names = linkColNames();
397  for( size_t nameIndex = 0; nameIndex < names.size(); ++nameIndex ) {
398  if( names[ nameIndex ] == name ) {
399  this->linkColKeysNC()[ nameIndex ] = key;
400  this->linkColIndicesNC()[ nameIndex ] = beginIndex;
401  this->linkColClidsNC()[ nameIndex ] = clid;
402  break; // Names are unique, so stop once found
403  } // Check of names
404  } // Loop over names
405 
406  } // Check of uniqueness of adding single link
407 
408  } // Check of adding single link vs link collection
409  }
410 
412  std::vector<std::string>::const_iterator it = std::find(linkColNames().begin(), linkColNames().end(), name);
413  if (it == linkColNames().end()) {
414  return false;
415  }
416  const size_t location = std::distance(linkColNames().begin(), it);
417  if (isRemapped()) {
418  key = linkColKeysRemap().at(location);
419  clid = linkColClids().at(location);
420  index = linkColIndicesRemap().at(location);
421  } else {
422  key = linkColKeys().at(location);
423  clid = linkColClids().at(location);
424  index = linkColIndices().at(location);
425  }
426  return true;
427  }
428 
429 
431  std::vector<sgkey_t>& keyVec, std::vector<uint32_t>& clidVec, std::vector<TrigComposite_v1::index_type>& indexVec ) const
432  {
433  bool found = false;
434  const std::string mangledName = name + s_collectionSuffix;
435  for (size_t i = 0; i < this->linkColNames().size(); ++i) {
436  if (linkColNames().at(i) != mangledName) {
437  continue;
438  }
439  if (isRemapped()) {
440  keyVec.push_back( linkColKeysRemap().at(i) );
441  clidVec.push_back( linkColClids().at(i) );
442  indexVec.push_back( linkColIndicesRemap().at(i) );
443  } else {
444  keyVec.push_back( linkColKeys().at(i) );
445  clidVec.push_back( linkColClids().at(i) );
446  indexVec.push_back( linkColIndices().at(i) );
447  }
448  found = true;
449  }
450  return found;
451  }
452 
453 
455  size_t nDecorations = 0;
456  if (acc_remap_linkColKeys.isAvailable( *this )) ++nDecorations;
457  if (acc_remap_linkColIndices.isAvailable( *this )) ++nDecorations;
458  if (nDecorations == 1) {
459  throw std::runtime_error("TrigComposite_v1::isRemapped Only one of the 'remap_linkColKeys' and 'remap_linkColIndices' "
460  "decorations were found on this object. This should never happen, a remapped element link must have both of these collections.");
461  }
462  return static_cast<bool>(nDecorations); //0=False, 2=True
463  }
464 
465 
466  //
468 
469 
470 std::ostream& operator<<(std::ostream& os, const xAOD::TrigComposite_v1& tc) {
471  os << "TrigComposite_v1 name:'" << tc.name() << "'" << std::endl;
472  const bool isRemapped = tc.isRemapped();
473  os << " N Links:" << tc.linkColNames().size() << ", isRemapped:" << (isRemapped ? "YES" : "NO");
474  for (size_t i=0; i<tc.linkColNames().size(); ++i){
475  if (!i) os << std::endl;
476  os << " Link Name:" << tc.linkColNames()[i];
477  os << ", Key:" << tc.linkColKeys()[i];
478  if (isRemapped) os << ", RemappedKey:" << tc.linkColKeysRemap()[i];
479  os << ", Index:" << tc.linkColIndices()[i];
480  if (isRemapped) os << ", RemappedIndex:" << tc.linkColIndicesRemap()[i];
481  os << ", CLID:" << tc.linkColClids()[i];
482  if (i != tc.linkColNames().size() - 1) os << std::endl;
483  }
484  if (!tc.decisions().empty()) {
485  os << std::endl << " N Decisions:" << tc.decisions().size() << std::endl << " ";
486  for (const TrigCompositeUtils::DecisionID id : tc.decisions()) os << id << ", ";
487  }
488  return os;
489 }
490 
491 } // namespace xAOD
xAOD::TrigComposite_v1::linkColKeysRemap
const std::vector< sgkey_t > & linkColKeysRemap() const
Raw access to the persistent link labels. Will attempt to access remapped link data.
Definition: TrigComposite_v1.cxx:318
xAOD::name
name
Definition: TriggerMenuJson_v1.cxx:29
xAOD::ExcNotIParticleContainer::ExcNotIParticleContainer
ExcNotIParticleContainer(const std::string &msg)
Definition: TrigComposite_v1.cxx:47
xAOD::TrigComposite_v1::s_collectionSuffix
static const std::string s_collectionSuffix
Definition: TrigComposite_v1.h:305
TrigCompositeUtils::DecisionID
unsigned int DecisionID
Definition: TrigComposite_v1.h:27
SG
Forward declaration.
Definition: CaloCellPacker_400_500.h:32
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:68
xAOD::TrigComposite_v1::typelessGetObjectLink
bool typelessGetObjectLink(const std::string &name, sgkey_t &key, uint32_t &clid, index_type &index) const
Fetches a single link without type.
Definition: TrigComposite_v1.cxx:411
AuxStoreAccessorMacros.h
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
index
Definition: index.py:1
xAOD::TrigComposite_v1::hasObjectLink
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.
Definition: TrigComposite_v1.cxx:246
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
skel.it
it
Definition: skel.GENtoEVGEN.py:396
xAOD::TrigComposite_v1::s_featureString
static const std::string s_featureString
Constant used to identify a feature.
Definition: TrigComposite_v1.h:254
xAOD::other
@ other
Definition: TrackingPrimitives.h:509
xAOD
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Definition: ICaloAffectedTool.h:24
xAOD::TrigComposite_v1::s_seedString
static const std::string s_seedString
Constant used to identify a seed (parent)
Definition: TrigComposite_v1.h:256
xAOD::TrigComposite_v1::hasObjectCollectionLinks
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...
Definition: TrigComposite_v1.cxx:275
xAOD::TrigComposite_v1::s_initialRoIString
static const std::string s_initialRoIString
Constant used to identify an initial ROI from L1.
Definition: TrigComposite_v1.h:246
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
xAOD::TrigComposite_v1::sgkey_t
SG::sgkey_t sgkey_t
Definition: TrigComposite_v1.h:55
xAOD::TrigComposite_v1::linkColNamesNC
std::vector< std::string > & linkColNamesNC()
Raw access to the persistent link names (non-const)
Definition: TrigComposite_v1.cxx:328
xAOD::TrigComposite_v1::linkColClids
const std::vector< uint32_t > & linkColClids() const
Raw access to the persistent link CLIDs.
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
xAOD::TrigComposite_v1::s_hypoAlgNodeNameString
static const std::string s_hypoAlgNodeNameString
Constant used to identify a navigation graph node as being from a Hypo Alg.
Definition: TrigComposite_v1.h:265
CxxUtils::fpcompare::equal
bool equal(double a, double b)
Compare two FP numbers, working around x87 precision issues.
Definition: fpcompare.h:114
xAOD::TrigComposite_v1::typelessSetObjectLink
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.
Definition: TrigComposite_v1.cxx:344
StringSerializer.h
xAOD::TrigComposite_v1::s_summaryPassNodeNameString
static const std::string s_summaryPassNodeNameString
Constant used to identify the single terminus graph node the end point of all chains which accept the...
Definition: TrigComposite_v1.h:273
SG::IAuxElement::index
size_t index() const
Return the index of this element within its container.
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
xAOD::TrigComposite_v1::copyLinkCollectionFrom
bool copyLinkCollectionFrom(const xAOD::TrigComposite_v1 &other, const std::string &name, std::string newName="")
Copy one named link collection from another object.
Definition: TrigComposite_v1.cxx:148
xAOD::TrigComposite_v1::s_comboHypoAlgNodeNameString
static const std::string s_comboHypoAlgNodeNameString
Constant used to identify a navigation graph node as being from a Combo Hypo Alg.
Definition: TrigComposite_v1.h:267
lumiFormat.i
int i
Definition: lumiFormat.py:85
BaseInfo.h
Provide an interface for finding inheritance information at run time.
vector
Definition: MultiHisto.h:13
xAOD::TrigComposite_v1::s_filterNodeNameString
static const std::string s_filterNodeNameString
Constant used to identify a navigation graph node as being from a Filter.
Definition: TrigComposite_v1.h:261
xAOD::TrigComposite_v1::copyLinkFrom
bool copyLinkFrom(const xAOD::TrigComposite_v1 &other, const std::string &name, std::string newName="")
Copy one named link from another object.
Definition: TrigComposite_v1.cxx:123
xAOD::TrigComposite_v1::hasObjectLinkExact
bool hasObjectLinkExact(const std::string &name, const sgkey_t key, const index_type index, const uint32_t clid) const
Definition: TrigComposite_v1.cxx:281
xAOD::TrigComposite_v1::operator=
TrigComposite_v1 & operator=(const TrigComposite_v1 &rhs)
Assignment operator.
Definition: TrigComposite_v1.cxx:81
xAOD::TrigComposite_v1::copyAllLinksFrom
bool copyAllLinksFrom(const xAOD::TrigComposite_v1 &other)
Copy all single links and collections of links from another object.
Definition: TrigComposite_v1.cxx:177
xAOD::TrigComposite_v1::linkColKeysNC
std::vector< sgkey_t > & linkColKeysNC()
Raw access to the persistent link labels (non-const)
Definition: TrigComposite_v1.cxx:332
xAOD::TrigComposite_v1::linkColIndicesRemap
const std::vector< index_type > & linkColIndicesRemap() const
Raw access to the persistent link indices. Will attempt to access remapped link data.
Definition: TrigComposite_v1.cxx:322
ClassID_traits
Default, invalid implementation of ClassID_traits.
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:40
test_pyathena.parent
parent
Definition: test_pyathena.py:15
xAOD::TrigComposite_v1::s_summaryFilterNodeNameString
static const std::string s_summaryFilterNodeNameString
Constant used to identify a navigation graph node as being from a final Filter created by the Decisio...
Definition: TrigComposite_v1.h:270
xAOD::TrigComposite_v1::decisions
const std::vector< TrigCompositeUtils::DecisionID > & decisions() const
Get positive HLT chain decisions associated with this TrigComposite. Navigation use.
xAOD::TrigComposite_v1::linkColIndicesNC
std::vector< index_type > & linkColIndicesNC()
Raw access to the persistent link indices (non-const)
Definition: TrigComposite_v1.cxx:336
xAOD::TrigComposite_v1
Class used to describe composite objects in the HLT.
Definition: TrigComposite_v1.h:52
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
ReadFromCoolCompare.os
os
Definition: ReadFromCoolCompare.py:231
xAOD::TrigComposite_v1::linkColIndices
const std::vector< index_type > & linkColIndices() const
Raw access to the persistent link indices.
Definition: TrigComposite_v1.cxx:314
xAOD::decisions
decisions
Definition: TrigComposite_v1.cxx:101
xAOD::TrigComposite_v1::s_hltSeedingNodeNameString
static const std::string s_hltSeedingNodeNameString
Constant used to identify a navigation graph node as being from the HLTSeeding.
Definition: TrigComposite_v1.h:259
SG::BaseInfoBase::find
static const BaseInfoBase * find(CLID clid)
Find the BaseInfoBase instance for clid.
Definition: BaseInfo.cxx:569
MakeNewFileFromOldAndSubstitution.newName
dictionary newName
Definition: ICHEP2016/MakeNewFileFromOldAndSubstitution.py:95
xAOD::TrigComposite_v1::index_type
uint32_t index_type
Definition: TrigComposite_v1.h:56
xAOD::TrigComposite_v1::s_initialRecRoIString
static const std::string s_initialRecRoIString
Constant used to identify an initial HLT ROI derived from L1.
Definition: TrigComposite_v1.h:248
xAOD::TrigComposite_v1::copyLinkInternal
void copyLinkInternal(const xAOD::TrigComposite_v1 &other, const size_t index, const std::string &newName)
Helper function, copy one link into this object.
Definition: TrigComposite_v1.cxx:111
SG::AuxElement::makePrivateStore
void makePrivateStore()
Create a new (empty) private store for this object.
Definition: AuxElement.cxx:192
SG::AuxElement::operator=
AuxElement & operator=(const AuxElement &other)
Assignment.
xAOD::TrigComposite_v1::removeObjectCollectionLinks
bool removeObjectCollectionLinks(const std::string &name)
Delete any stored collection of element links with the given name.
Definition: TrigComposite_v1.cxx:227
xAOD::TrigComposite_v1::linkColNames
const std::vector< std::string > & linkColNames() const
Raw access to the persistent link names.
xAOD::TrigComposite_v1::name
const std::string & name() const
Get a human-readable name for the object.
SG::AuxElement::hasStore
bool hasStore() const
Return true if this object has an associated store.
Definition: AuxElement.cxx:398
xAOD::TrigComposite_v1::TrigComposite_v1
TrigComposite_v1()
Default constructor.
Definition: TrigComposite_v1.cxx:74
xAOD::TrigComposite_v1::linkColKeys
const std::vector< sgkey_t > & linkColKeys() const
Raw access to the persistent link labels.
Definition: TrigComposite_v1.cxx:310
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
xAOD::TrigComposite_v1::isRemapped
bool isRemapped() const
Information on if linkColKeys() and linkColIndices() are able to access remapped link data Remapping ...
Definition: TrigComposite_v1.cxx:454
xAOD::AUXSTORE_OBJECT_GETTER
AUXSTORE_OBJECT_GETTER(TrigComposite_v1, std::vector< std::string >, linkColNames) AUXSTORE_OBJECT_GETTER(TrigComposite_v1
SG::BaseInfoBase
The non-template portion of the BaseInfo implementation.
Definition: Control/AthenaKernel/AthenaKernel/BaseInfo.h:451
TrigComposite_v1.h
xAOD::TrigComposite_v1::s_viewString
static const std::string s_viewString
Constant used to identify a view.
Definition: TrigComposite_v1.h:252
xAOD::TrigComposite_v1::removeObjectLink
bool removeObjectLink(const std::string &name)
Delete any stored element link with the given name.
Definition: TrigComposite_v1.cxx:210
xAOD::TrigComposite_v1::s_inputMakerNodeNameString
static const std::string s_inputMakerNodeNameString
Constant used to identify a navigation graph node as being from a Input Maker.
Definition: TrigComposite_v1.h:263
xAOD::TrigComposite_v1::s_summaryPrescaledNodeNameString
static const std::string s_summaryPrescaledNodeNameString
Constant used to identify the single prescaled graph node.
Definition: TrigComposite_v1.h:279
SG::AuxElement::container
const SG::AuxVectorData * container() const
Return the container holding this element.
xAOD::TrigComposite_v1::s_summaryPassExpressNodeNameString
static const std::string s_summaryPassExpressNodeNameString
Constant used to identify the single express-accept graph node.
Definition: TrigComposite_v1.h:276
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
SG::sgkeyEqual
constexpr bool sgkeyEqual(const sgkey_t a, const sgkey_t b)
Compare two sgkeys for equality.
Definition: CxxUtils/CxxUtils/sgkey_t.h:39
xAOD::TrigComposite_v1::derivesFromIParticle
bool derivesFromIParticle(const CLID clid) const
Helper function. Check if the requested type can be down cast to an IParticle transient interface.
Definition: TrigComposite_v1.cxx:292
xAOD::TrigComposite_v1::typelessGetObjectCollectionLinks
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.
Definition: TrigComposite_v1.cxx:430
xAOD::operator<<
std::ostream & operator<<(std::ostream &out, const std::pair< FIRST, SECOND > &pair)
Helper print operator.
Definition: RDataSource.cxx:53
xAOD::TrigComposite_v1::s_roiString
static const std::string s_roiString
Constant used to identify an (explicitly) updated HLT ROI.
Definition: TrigComposite_v1.h:250
xAOD::AUXSTORE_OBJECT_SETTER_AND_GETTER
AUXSTORE_OBJECT_SETTER_AND_GETTER(CaloRings_v1, RingSetLinks, ringSetLinks, setRingSetLinks) unsigned CaloRings_v1
Definition: CaloRings_v1.cxx:27
xAOD::TrigComposite_v1::linkColClidsNC
std::vector< uint32_t > & linkColClidsNC()
Raw access to the persistent link CLIDs (non-const)
Definition: TrigComposite_v1.cxx:340
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
SG::BaseInfoBase::is_base
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