ATLAS Offline Software
MetAssociation.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 
8 #ifndef COLUMNAR_MET_MET_ASSOCIATION_H
9 #define COLUMNAR_MET_MET_ASSOCIATION_H
10 
13 #include <ColumnarJet/JetDef.h>
14 #include <ColumnarMuon/MuonDef.h>
17 #include <ColumnarMet/MetInput.h>
21 
22 namespace columnar
23 {
29  template<typename IteratorType,class FunctionType>
30  class FilterRange;
31 
32  template<typename IteratorType,class FunctionType>
34  {
35  IteratorType m_iterator;
37  public:
38  FilterRangeIterator (const IteratorType& val_iterator, const FilterRange<IteratorType,FunctionType> *val_range) noexcept
39  : m_iterator (val_iterator), m_range (val_range)
40  {}
41 
42  auto operator * () const noexcept {
43  return *m_iterator;}
44 
46  ++ m_iterator;
47  while (m_range && m_iterator != m_range->m_end && !m_range->m_filter (*m_iterator))
48  ++m_iterator;
49  return *this;
50  }
51 
52  bool operator == (const FilterRangeIterator& that) const noexcept {
53  return m_iterator == that.m_iterator;}
54  bool operator != (const FilterRangeIterator& that) const noexcept {
55  return m_iterator != that.m_iterator;}
56  };
57 
58  template<typename IteratorType,class FunctionType>
59  class FilterRange final
60  {
61  friend class FilterRangeIterator<IteratorType,FunctionType>;
62  IteratorType m_begin;
63  IteratorType m_end;
64  FunctionType m_filter;
65 
66  public:
67  FilterRange (IteratorType begin, IteratorType end, FunctionType&& filter)
68  : m_begin (begin), m_end (end), m_filter (std::move (filter))
69  {
70  while (m_begin != m_end && !m_filter (*m_begin))
71  ++m_begin;
72  }
73  FilterRange (FilterRange&&) = default;
74  FilterRange (const FilterRange&) = default;
76  FilterRange& operator = (const FilterRange&) = default;
77 
80  bool empty () const noexcept { return m_begin == m_end; }
81  };
82 
83 
84 
85  template<typename CM = ColumnarModeDefault> class MetAssociationHelper;
86 
87 
88 
91  template<typename CM = ColumnarModeDefault> class MetAssocationAccessors final
92  {
95  public:
96 
100  static constexpr bool useMissingETAssociationHelper = std::is_same_v<CM,ColumnarModeXAOD>;
101 
105 
106  static constexpr std::size_t invalidIndex = MissingETBase::Constants::invalidIndex;
107 
108  explicit MetAssocationAccessors (ColumnarTool<CM>& columnarBase)
109  : calpx (columnarBase, "calpx"),
110  calpy (columnarBase, "calpy"),
111  calpz (columnarBase, "calpz"),
112  cale (columnarBase, "cale"),
113  calsumpt (columnarBase, "calsumpt"),
114  calkeyAcc (columnarBase, "calkey"),
115  trkpx (columnarBase, "trkpx"),
116  trkpy (columnarBase, "trkpy"),
117  trkpz (columnarBase, "trkpz"),
118  trke (columnarBase, "trke"),
119  trksumpt (columnarBase, "trksumpt"),
120  trkkeyAcc (columnarBase, "trkkey"),
121  jettrkpx (columnarBase, "jettrkpx"),
122  jettrkpy (columnarBase, "jettrkpy"),
123  jettrkpz (columnarBase, "jettrkpz"),
124  jettrke (columnarBase, "jettrke"),
125  jettrksumpt (columnarBase, "jettrksumpt"),
126  objectLinks (columnarBase, "objectLinks"),
127  jetLink (columnarBase, "jetLink"),
128  isMisc (columnarBase, "isMisc"),
129  overlapIndicesAcc (columnarBase, "overlapIndices"),
130  overlapTypesAcc (columnarBase, "overlapTypes"),
131  objectTypeAcc (columnarBase, "objectType")
132  {
133  if constexpr (!useMissingETAssociationHelper)
135  }
136 
139 
146 
153 
159 
163 
165 
167 
170 
172 
174 
175 
176 
179 
180  [[nodiscard]] static bitmask_t getObjMask(size_t objIndex) {
181  if(objIndex==invalidIndex) return 0;
182  return 1<<objIndex;
183  }
184 
185  [[nodiscard]] std::size_t sizeCal(AssocId assoc) const {
186  return cale(assoc).size();}
187 
188  [[nodiscard]] decltype(auto) calkey(AssocId assoc) const {
189  return calkeyAcc(assoc);}
190 
191  [[nodiscard]] bitmask_t calkey (AssocId assoc, size_t keyIdx) const {
192  return keyIdx != invalidIndex && keyIdx < calkeyAcc(assoc).size() ? calkeyAcc(assoc)[keyIdx] : invalidIndex; }
193 
194  [[nodiscard]] ConstVec calVec(AssocId assoc, const xAOD::IParticle* pPart) const {
195  return calVec(assoc, PartId(*pPart)); }
196  template<ContainerIdConcept CI>
197  [[nodiscard]] ConstVec calVec(AssocId assoc, ObjectId<CI,CM> pPart) const {
198  constvec_t totalvec;
199  for (size_t iKey = 0; iKey < this->sizeCal(assoc); iKey++) {
200  if (this->calkey(assoc, iKey) & getObjMask(this->findIndex(assoc,pPart)))
201  totalvec+=this->calVec(assoc, iKey);
202  }
203  return totalvec;
204  }
205 
206  [[nodiscard]] ConstVec calVec(AssocId assoc, std::size_t keyIdx) const {
207  return keyIdx != invalidIndex && keyIdx < this->sizeCal(assoc)
208  ? constvec_t(calpx(assoc)[keyIdx],calpy(assoc)[keyIdx],calpz(assoc)[keyIdx],cale(assoc)[keyIdx],calsumpt(assoc)[keyIdx])
210 
211 
212  [[nodiscard]] std::size_t sizeTrk (AssocId assoc) const {
213  return trke(assoc).size();}
214 
215  [[nodiscard]] decltype(auto) trkkey(AssocId assoc) const {
216  return trkkeyAcc(assoc);}
217 
218  [[nodiscard]] bitmask_t trkkey(AssocId assoc, size_t keyIdx) const {
219  return keyIdx != invalidIndex && keyIdx < this->sizeTrk(assoc) ? this->trkkey(assoc)[keyIdx] : invalidIndex; }
220 
221  [[nodiscard]] ConstVec trkVec(AssocId assoc, const xAOD::IParticle* pPart) const {
222  return trkVec(assoc, PartId(*pPart)); }
223  template<ContainerIdConcept CI>
224  [[nodiscard]] ConstVec trkVec(AssocId assoc, ObjectId<CI,CM> pPart) const {
225  constvec_t totalvec;
226  for (size_t iKey = 0; iKey < this->sizeTrk(assoc); iKey++) {
227  if (this->trkkey(assoc,iKey) & getObjMask(this->findIndex(assoc,pPart)))
228  totalvec+=this->trkVec(assoc,iKey);
229  }
230  return totalvec; }
231  [[nodiscard]] ConstVec trkVec(AssocId assoc, ObjectLinkType pPart) const {
232  constvec_t totalvec;
233  for (size_t iKey = 0; iKey < this->sizeTrk(assoc); iKey++) {
234  if (this->trkkey(assoc,iKey) & getObjMask(this->findIndex(assoc,pPart)))
235  totalvec+=this->trkVec(assoc,iKey);
236  }
237  return totalvec; }
238 
239  [[nodiscard]] ConstVec trkVec(AssocId assoc, size_t keyIdx) const {
240  return keyIdx != invalidIndex && keyIdx < this->sizeTrk(assoc)
241  ? constvec_t(this->trkpx(assoc)[keyIdx],this->trkpy(assoc)[keyIdx],this->trkpz(assoc)[keyIdx],this->trke(assoc)[keyIdx],this->trksumpt(assoc)[keyIdx])
243 
244  [[nodiscard]] ConstVec jetTrkVec(AssocId assoc) const {
245  return constvec_t(this->jettrkpx(assoc),this->jettrkpy(assoc),this->jettrkpz(assoc),this->jettrke(assoc),this->jettrksumpt(assoc)); }
246 
247  [[nodiscard]] size_t size(AssocId assoc) const {
248  return this->objectLinks(assoc).size(); }
249 
250  [[nodiscard]] auto objects(AssocId assoc) const {
251  return this->objectLinks(assoc);}
252 
253  [[nodiscard]] auto overlapIndices(AssocId assoc) const {
254  return overlapIndicesAcc(assoc); }
255 
256  [[nodiscard]] auto overlapIndices(AssocId assoc,const xAOD::IParticle* pPart) const {
257  return this->overlapIndices(assoc, ParticleId(*pPart)); }
258  [[nodiscard]] auto overlapIndices(AssocId assoc,PartId pPart) const {
259  return this->overlapIndices(assoc, this->findIndex(assoc, pPart)); }
260 
261  [[nodiscard]] std::span<const std::size_t> overlapIndices(AssocId assoc,std::size_t objIdx) const {
262  if (objIdx == invalidIndex) return std::span<const std::size_t>();
263  auto indices = overlapIndicesAcc(assoc);
264  return objIdx < indices.size() ? indices[objIdx] : std::span<const std::size_t>(); }
265 
266  [[nodiscard]] std::span<const unsigned char> overlapTypes (AssocId assoc, std::size_t objIdx) const {
267  if (objIdx == invalidIndex) return std::span<const unsigned char>();
268  auto types = this->overlapTypesAcc(assoc);
269  return objIdx < types.size() ? types[objIdx] : std::span<const unsigned char>(); }
270 
271  [[nodiscard]] std::size_t findIndex(AssocId assoc,const xAOD::IParticle* pPart) const {
272  return findIndex(assoc, ParticleId(*pPart));}
273  template<ContainerIdConcept CI>
274  [[nodiscard]] std::size_t findIndex(AssocId assoc,ObjectId<CI,CM> pPart) const {
275  std::size_t idx = 0;
276  for (auto link : this->objectLinks(assoc)) {
277  if (link == pPart)
278  return idx;
279  ++idx;
280  }
281  return invalidIndex;
282  }
283  [[nodiscard]] std::size_t findIndex(AssocId assoc,ObjectLinkType pPart) const {
284  std::size_t idx = 0;
285  for (auto link : this->objectLinks(assoc)) {
286  if (link == pPart)
287  return idx;
288  ++idx;
289  }
290  return invalidIndex;
291  }
292 
293  [[nodiscard]] bool hasAlternateConstVec(AssocId assoc) const {
294  if (isMisc(assoc)) return false;
295  auto refJet = this->refJet(assoc);
296  if (!refJet) return false;
297  return containsPhysics(assoc,refJet.value());}
298 
299  [[nodiscard]] xAOD::JetFourMom_t getAlternateConstVec(AssocId assoc) const {
300  xAOD::JetFourMom_t newvec;
301  constvec_t newpt;
302  auto refJet = this->refJet(assoc);
303  size_t newptIndex = refJet ? findIndex(assoc,refJet.value()) : invalidIndex;
304  if (newptIndex == invalidIndex) return newvec;
305  bitmask_t mask = (bitmask_t)1 << newptIndex;
306 
307  for (size_t iKey = 0; iKey < sizeCal(assoc); iKey++) if (mask & calkey(assoc)[iKey]) newpt += calVec(assoc,iKey);
308  newvec.SetPxPyPzE(newpt.cpx(),newpt.cpy(),newpt.cpz(),newpt.ce());
309  return newvec;
310  }
311 
312  [[nodiscard]] auto refJet(AssocId assoc) const {
313  return this->jetLink(assoc); }
314 
315  [[nodiscard]] bool containsPhysics(AssocId assoc,JetId pPhys) const {
316  for(auto link : this->objectLinks(assoc)) {
317  if(link == pPhys) {
318  return true;
319  }
320  }
321  return false;}
322 
323 
325  // I don't know if it matters, but in the original xAOD code the
326  // iteration is done in reverse order, so I'm doing the same here
327  // as well.
328  for (auto assocIter = map.rbegin(); assocIter != map.rend(); ++assocIter)
329  {
330  if (isMisc(*assocIter))
331  return *assocIter;
332  }
333  // If we reach here, no misc association was found.
334  return OptAssocId{};}
335  };
336 
337 
338 
340  template<typename CM> class MetAssociationHelper final
341  {
344  public:
345 
351 
355 
356  static constexpr bool useMissingETAssociationHelper = std::is_same_v<CM,ColumnarModeXAOD>;
357  static constexpr std::size_t invalidIndex = MissingETBase::Constants::invalidIndex;
358 
359 
361  : m_xaodHelper (&val_helper), m_map (*val_helper.map()), m_accessors (&val_accessors)
362  {}
363 
365  : m_map (map), m_accessors (&val_accessors)
366  {}
367 
368 
370  if constexpr (useMissingETAssociationHelper)
371  return *m_xaodHelper;
372  else
373  throw std::logic_error ("can't call xAOD function in columnar mode");}
374 
375 
378  return m_map;}
379 
380 
383 
384  [[nodiscard]] bool objSelected (const xAOD::IParticle* obj) const {
385  return objSelected(PartId(*obj));}
386  template<ContainerIdConcept CI>
387  [[nodiscard]] bool objSelected (ObjectId<CI,CM> obj) const {
388  for (decltype(auto) assoc : getAssociations(obj)) if(objSelected(assoc,obj)) return true;
389  return false;}
390  [[nodiscard]] bool objSelected (ObjectLinkType obj) const {
391  for (decltype(auto) assoc : getAssociations(obj)) if(objSelected(assoc,obj)) return true;
392  return false;}
393  [[nodiscard]] bool objSelected(AssocId assocId, std::size_t objIdx) const {
394  if constexpr (useMissingETAssociationHelper)
395  return m_xaodHelper->objSelected(&assocId.getXAODObject(), objIdx);
396  else {
397  if (objIdx >= sizeof(bitmask_t)*8) return false;
398  return bool(m_accessors->useObjectFlagsAcc(assocId) & (static_cast<MissingETBase::Types::bitmask_t>(1)<<objIdx));
399  }
400  }
401  [[nodiscard]] bool objSelected(AssocId assocId, const xAOD::IParticle* pPart) const {
402  return objSelected(assocId, PartId(*pPart));}
403  template<ContainerIdConcept CI>
404  [[nodiscard]] bool objSelected(AssocId assocId, ObjectId<CI,CM> pPart) const {
405  return objSelected(assocId, m_accessors->findIndex(assocId,pPart));}
406  [[nodiscard]] bool objSelected(AssocId assocId, ObjectLinkType pPart) const {
407  return objSelected(assocId, m_accessors->findIndex(assocId,pPart));}
408 
409 
410  [[nodiscard]] bitmask_t getObjSelectionFlags(AssocId assocId) const {
411  if constexpr (useMissingETAssociationHelper)
412  return m_xaodHelper->getObjSelectionFlags(&assocId.getXAODObject());
413  else
414  return m_accessors->useObjectFlagsAcc(assocId);
415  }
416 
417 
418  void setObjSelectionFlag(AssocId assocId, size_t objIdx, bool status) {
419  if constexpr (useMissingETAssociationHelper)
420  m_xaodHelper->setObjSelectionFlag(&assocId.getXAODObject(), objIdx, status);
421  else
422  {
423  if (objIdx >= sizeof(bitmask_t)*8) return;
424  bitmask_t mask = static_cast<bitmask_t>(1) << objIdx;
425  if (status) m_accessors->useObjectFlagsAcc(assocId) |= mask;
426  else m_accessors->useObjectFlagsAcc(assocId) &= ~mask;
427  }
428  }
429  void setObjSelectionFlag(AssocId assocId, const xAOD::IParticle* pPart, bool status) {
430  setObjSelectionFlag(assocId,PartId(*pPart),status);}
431  template<ContainerIdConcept CI>
432  void setObjSelectionFlag(AssocId assocId, ObjectId<CI,CM> pPart, bool status) {
433  setObjSelectionFlag(assocId,m_accessors->findIndex(assocId,pPart),status);}
434  void setObjSelectionFlag(AssocId assocId, const ObjectLinkType& pPart, bool status) {
435  setObjSelectionFlag(assocId,m_accessors->findIndex(assocId,pPart),status);}
436 
437 
438 
441 
442  [[nodiscard]] bool hasOverlaps(AssocId assocId, size_t objIdx,MissingETBase::UsageHandler::Policy p) const {
443  if ( objIdx == invalidIndex ) return false;
444  auto indices = m_accessors->overlapIndices(assocId, objIdx);
445  auto types = m_accessors->overlapTypes(assocId, objIdx);
446  for(size_t iOL=0; iOL<indices.size(); ++iOL) {
447  if(objSelected(assocId, indices[iOL])) {
448  // printf("Test object %lu for overlaps: OL type %i\n",indices[iOL],(int)types[iOL]);
449  switch(p) {
451  if((types[iOL] & 1<<xAOD::Type::CaloCluster) || (types[iOL] & 1<<xAOD::Type::TrackParticle)) {break;}
452  else {continue;}
454  if(types[iOL] & 1<<xAOD::Type::CaloCluster) {break;}
455  else {continue;}
457  if(types[iOL] & 1<<xAOD::Type::TrackParticle) {break;}
458  else {continue;}
460  if(types[iOL] & 1<<xAOD::Type::ParticleFlow) {break;}
461  else {continue;}
463  if(types[iOL] & 1) {break;}
464  else {continue;}
466  if(types[iOL] & ~(1<<xAOD::Type::TrackParticle)) {break;}
467  else {continue;}
468  default: continue;
469  }
470  return true;
471  }
472  }
473  return false;
474  }
475 
477  return selectIfNoOverlaps(PartId(*obj), p);}
479  auto assocs = getAssociations(obj);
480  bool overlaps(false);
481  for(decltype(auto) assoc : assocs) overlaps |= hasOverlaps(assoc,m_accessors->findIndex(assoc,obj),p);
482  if (overlaps) return false;
483  for(decltype(auto) assoc : assocs) setObjSelectionFlag(assoc,obj,true);
484  return true;}
485 
486 
487 
490 
491  [[nodiscard]] OptAssocId getJetAssociation(const xAOD::Jet* pJet) const {
492  return getJetAssociation(JetId(*pJet));}
493  [[nodiscard]] OptAssocId getJetAssociation(JetId pJet) const {
494  // this uses a linear search, which is the same as the original
495  // xAOD code, but was flagged there as potentially inefficient
496  for (auto assoc : m_map) {
497  if (m_accessors->jetLink(assoc) == pJet) {
498  return assoc;
499  }
500  }
501  return std::nullopt;}
502 
503  [[nodiscard]] auto getAssociations(const xAOD::IParticle* pPart) const {
504  return getAssociations(PartId(*pPart));}
505  template<ContainerIdConcept CI>
506  [[nodiscard]] auto getAssociations(ObjectId<CI,CM> pPart) const {
507  // In the original xAOD code, this returned a `std::vector` by
508  // value. In columnar code we prefer not to pass vectors by
509  // value, so we return a filtered range instead.
510  return FilterRange (m_map.begin(), m_map.end(),
511  [accessors = m_accessors, pPart] (AssocId assoc) {
512  return (accessors->findIndex(assoc,pPart) != invalidIndex);});}
513 
514  [[nodiscard]] auto getMiscAssociation() const {
515  return m_accessors->getMiscAssociation(m_map);}
516 
517 
520 
522  return getConstVec(PartId(*pPart), p);}
524  constvec_t totalvec;
525  for (decltype(auto) assoc : getAssociations(pPart)) {
527  totalvec += m_accessors->trkVec(assoc, pPart);
528  } else {
529  totalvec += m_accessors->calVec(assoc, pPart);
530  }
531  }
532  return totalvec;}
533 
534  [[nodiscard]] ConstVec overlapCalVec(AssocId assoc) const {
535  constvec_t calvec;
536  for (size_t iKey = 0; iKey < m_accessors->sizeCal(assoc); iKey++) {
537  bool selector = (getObjSelectionFlags(assoc) & m_accessors->calkey(assoc)[iKey]) ? !m_accessors->isMisc(assoc) : m_accessors->isMisc(assoc);
538  if (selector) calvec+=m_accessors->calVec(assoc,iKey);
539  }
540  return calvec;}
541 
542  [[nodiscard]] ConstVec overlapTrkVec(AssocId assoc) const {
543  constvec_t trkvec;
544  for (size_t iKey = 0; iKey < m_accessors->sizeTrk(assoc); iKey++) {
545  bool selector = (getObjSelectionFlags(assoc) & m_accessors->trkkey(assoc)[iKey]) ? !m_accessors->isMisc(assoc) : m_accessors->isMisc(assoc);
546  if (selector) trkvec+=ConstVec(m_accessors->trkpx(assoc)[iKey],m_accessors->trkpy(assoc)[iKey],m_accessors->trkpz(assoc)[iKey],m_accessors->trke(assoc)[iKey],m_accessors->trksumpt(assoc)[iKey]);
547  }
548  return trkvec;
549  }
550 
551 
552 
555  private:
556 
560 
563 
566  };
567 
568 
569 
570  template<typename CM>
573  {
574  return MetAssociationHelper<CM> (helper, *this);
575  }
576 
577  template<typename CM>
580  {
581  return MetAssociationHelper<CM> (map, *this);
582  }
583 }
584 
585 #endif
columnar::MetAssociationHelper::getObjSelectionFlags
bitmask_t getObjSelectionFlags(AssocId assocId) const
Definition: MetAssociation.h:410
columnar::FilterRange::FilterRange
FilterRange(const FilterRange &)=default
columnar::FilterRangeIterator::m_range
const FilterRange< IteratorType, FunctionType > * m_range
Definition: MetAssociation.h:36
columnar::MetAssocationAccessors::objects
auto objects(AssocId assoc) const
Definition: MetAssociation.h:250
columnar::FilterRange::begin
auto begin() const noexcept
Definition: MetAssociation.h:78
columnar::MetAssocationAccessors::hasAlternateConstVec
bool hasAlternateConstVec(AssocId assoc) const
Definition: MetAssociation.h:293
columnar::VariantContainerId
a "variant" ContainerId
Definition: VariantDef.h:98
columnar::MetAssocationAccessors::jettrksumpt
ColumnAccessor< ContainerId::metAssociation, float, CM > jettrksumpt
Definition: MetAssociation.h:158
columnar::MetAssocationAccessors::refJet
auto refJet(AssocId assoc) const
Definition: MetAssociation.h:312
columnar::MetAssociationHelper::objSelected
bool objSelected(ObjectId< CI, CM > obj) const
Definition: MetAssociation.h:387
columnar::MetAssociationHelper::bitmask_t
MissingETBase::Types::bitmask_t bitmask_t
Definition: MetAssociation.h:354
columnar::MetAssocationAccessors::overlapTypesAcc
ColumnAccessor< ContainerId::metAssociation, std::vector< std::vector< unsigned char > >, CM > overlapTypesAcc
Definition: MetAssociation.h:169
columnar::MetAssocationAccessors::calsumpt
ColumnAccessor< ContainerId::metAssociation, std::vector< float >, CM > calsumpt
Definition: MetAssociation.h:144
columnar::FilterRangeIterator::operator!=
bool operator!=(const FilterRangeIterator &that) const noexcept
Definition: MetAssociation.h:54
MissingETBase::UsageHandler::TruthParticle
@ TruthParticle
Truth particle based.
Definition: MissingETCompositionBase.h:189
columnar::MetAssocationAccessors::calkeyAcc
ColumnAccessor< ContainerId::metAssociation, std::vector< bitmask_t >, CM > calkeyAcc
Definition: MetAssociation.h:145
columnar::MetAssociationHelper::map
ObjectRange< ContainerId::metAssociation, CM > map() const noexcept
the underlying association map
Definition: MetAssociation.h:377
columnar::FilterRangeIterator
Definition: MetAssociation.h:34
columnar::MetAssocationAccessors::trkVec
ConstVec trkVec(AssocId assoc, ObjectLinkType pPart) const
Definition: MetAssociation.h:231
columnar::MetAssocationAccessors::getMiscAssociation
OptAssocId getMiscAssociation(MetAssociationRange map) const
Definition: MetAssociation.h:324
columnar::MetAssocationAccessors::trkpz
ColumnAccessor< ContainerId::metAssociation, std::vector< float >, CM > trkpz
Definition: MetAssociation.h:149
Trk::indices
std::pair< long int, long int > indices
Definition: AlSymMatBase.h:24
columnar::MetAssocationAccessors::overlapIndices
auto overlapIndices(AssocId assoc, const xAOD::IParticle *pPart) const
Definition: MetAssociation.h:256
columnar::MetAssocationAccessors::objectLinks
ColumnAccessor< ContainerId::metAssociation, std::vector< ObjectLinkType >, CM > objectLinks
Definition: MetAssociation.h:162
columnar::MetAssociationHelper::overlapCalVec
ConstVec overlapCalVec(AssocId assoc) const
Definition: MetAssociation.h:534
MissingETBase::Numerical::ceError
static double ceError()
Access error return value for constituent vector .
Definition: MissingETBase.h:101
columnar::FilterRange::FilterRange
FilterRange(IteratorType begin, IteratorType end, FunctionType &&filter)
Definition: MetAssociation.h:67
columnar::MetAssociationHelper::getConstVec
constvec_t getConstVec(const xAOD::IParticle *pPart, MissingETBase::UsageHandler::Policy p) const
Definition: MetAssociation.h:521
xAOD::MissingETAssociationHelper::setObjSelectionFlag
void setObjSelectionFlag(const MissingETAssociation_v1 *assoc, size_t objIdx, bool status)
Flag object as selected for MET calculation.
Definition: MissingETAssociationHelper.cxx:28
columnar::FilterRange::FilterRange
FilterRange(FilterRange &&)=default
FilterRange
FilterRange implements the range (ie: [min, max]) the filters will use to take their filtering decisi...
Definition: FilterRange.h:35
columnar::MetAssocationAccessors
the accessors MetAssociationHelper needs to implement its operations
Definition: MetAssociation.h:92
columnar::MetAssocationAccessors::overlapTypes
std::span< const unsigned char > overlapTypes(AssocId assoc, std::size_t objIdx) const
Definition: MetAssociation.h:266
columnar::MetAssocationAccessors::trke
ColumnAccessor< ContainerId::metAssociation, std::vector< float >, CM > trke
Definition: MetAssociation.h:150
MissingETBase::Numerical::cpxError
static double cpxError()
Access error return value for constituent vector .
Definition: MissingETBase.h:98
columnar::MetAssociationHelper::setObjSelectionFlag
void setObjSelectionFlag(AssocId assocId, const ObjectLinkType &pPart, bool status)
Definition: MetAssociation.h:434
columnar::MetAssociationHelper::JetId
ObjectId< ContainerId::jet, CM > JetId
Definition: MetAssociation.h:347
columnar::FilterRange::m_end
IteratorType m_end
Definition: MetAssociation.h:63
columnar::OptObjectId
a class representing a single optional object (electron, muons, etc.)
Definition: ContainerId.h:179
MissingETBase::Numerical::sumptError
static double sumptError()
Access error return value for constituent vector sumpt.
Definition: MissingETBase.h:102
EgammaDef.h
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
MissingETBase::Types::bitmask_t
uint64_t bitmask_t
Type for status word bit mask.
Definition: MissingETBase.h:39
MissingETBase::UsageHandler::OnlyCluster
@ OnlyCluster
CaloCluster based only.
Definition: MissingETCompositionBase.h:184
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition: Event/xAOD/xAODBase/xAODBase/IParticle.h:41
columnar::ObjectRange
a class representing a continuous sequence of objects (a.k.a. a container)
Definition: ContainerId.h:177
columnar::FilterRange::FilterRangeIterator< IteratorType, FunctionType >
friend class FilterRangeIterator< IteratorType, FunctionType >
Definition: MetAssociation.h:61
columnar::MetAssocationAccessors::findIndex
std::size_t findIndex(AssocId assoc, ObjectId< CI, CM > pPart) const
Definition: MetAssociation.h:274
VariantLinkColumn.h
columnar::MetAssocationAccessors::calVec
ConstVec calVec(AssocId assoc, ObjectId< CI, CM > pPart) const
Definition: MetAssociation.h:197
columnar::MetAssociationHelper::m_accessors
const MetAssocationAccessors< CM > * m_accessors
the accessors for the members of the MET association map
Definition: MetAssociation.h:565
xAOD::MissingETAssociation_v1::ConstVec
Vector sum of constituents for subtractive overlap removal.
Definition: MissingETAssociation_v1.h:32
xAOD::CaloCluster
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
Definition: Event/xAOD/xAODCaloEvent/xAODCaloEvent/CaloCluster.h:19
python.utils.AtlRunQueryLookup.mask
string mask
Definition: AtlRunQueryLookup.py:459
columnar::MetAssociationHelper::MetAssociationHelper
MetAssociationHelper(ObjectRange< ContainerId::metAssociation, CM > map, const columnar::MetAssocationAccessors< CM > &val_accessors)
Definition: MetAssociation.h:364
columnar::MetAssociationHelper::selectIfNoOverlaps
bool selectIfNoOverlaps(PartId obj, MissingETBase::UsageHandler::Policy p)
Definition: MetAssociation.h:478
columnar::MetAssociationHelper::MetAssociationHelper
MetAssociationHelper(xAOD::MissingETAssociationHelper &val_helper, const columnar::MetAssocationAccessors< CM > &val_accessors)
Definition: MetAssociation.h:360
columnar::MetAssocationAccessors::calkey
decltype(auto) calkey(AssocId assoc) const
Definition: MetAssociation.h:188
columnar::MetAssociationHelper::getJetAssociation
OptAssocId getJetAssociation(const xAOD::Jet *pJet) const
Definition: MetAssociation.h:491
columnar::MetAssociationHelper::objSelected
bool objSelected(ObjectLinkType obj) const
Definition: MetAssociation.h:390
covarianceTool.filter
filter
Definition: covarianceTool.py:514
runBeamSpotCalibration.helper
helper
Definition: runBeamSpotCalibration.py:115
columnar::MetAssociationHelper::setObjSelectionFlag
void setObjSelectionFlag(AssocId assocId, ObjectId< CI, CM > pPart, bool status)
Definition: MetAssociation.h:432
xAOD::TrackParticle
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Definition: Event/xAOD/xAODTracking/xAODTracking/TrackParticle.h:13
columnar::MetAssocationAccessors::overlapIndices
std::span< const std::size_t > overlapIndices(AssocId assoc, std::size_t objIdx) const
Definition: MetAssociation.h:261
columnar::MetAssociationHelper::m_map
ObjectRange< ContainerId::metAssociation, CM > m_map
the underlying MET association map
Definition: MetAssociation.h:562
columnar::MetAssociationHelper::getAssociations
auto getAssociations(const xAOD::IParticle *pPart) const
Definition: MetAssociation.h:503
columnar::MetAssocationAccessors::isMisc
ColumnAccessor< ContainerId::metAssociation, char, CM > isMisc
Definition: MetAssociation.h:166
columnar::MetAssociationHelper::objSelected
bool objSelected(AssocId assocId, ObjectId< CI, CM > pPart) const
Definition: MetAssociation.h:404
columnar::MetAssocationAccessors::useObjectFlagsAcc
ColumnUpdater< ContainerId::metAssociation, bitmask_t, CM > useObjectFlagsAcc
Definition: MetAssociation.h:173
METHelpers.h
columnar::MetAssocationAccessors::jettrke
ColumnAccessor< ContainerId::metAssociation, float, CM > jettrke
Definition: MetAssociation.h:157
columnar::MetAssocationAccessors::findIndex
std::size_t findIndex(AssocId assoc, ObjectLinkType pPart) const
Definition: MetAssociation.h:283
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
columnar::FilterRange::m_filter
FunctionType m_filter
Definition: MetAssociation.h:64
columnar::MetAssociationHelper::objSelected
bool objSelected(AssocId assocId, ObjectLinkType pPart) const
Definition: MetAssociation.h:406
MissingETBase::Numerical::cpzError
static double cpzError()
Access error return value for constituent vector .
Definition: MissingETBase.h:100
columnar::FilterRange::empty
bool empty() const noexcept
Definition: MetAssociation.h:80
columnar::MetAssocationAccessors::jettrkpy
ColumnAccessor< ContainerId::metAssociation, float, CM > jettrkpy
Definition: MetAssociation.h:155
columnar::MetAssocationAccessors::calVec
ConstVec calVec(AssocId assoc, const xAOD::IParticle *pPart) const
Definition: MetAssociation.h:194
columnar::MetAssocationAccessors::calpx
ColumnAccessor< ContainerId::metAssociation, std::vector< float >, CM > calpx
Definition: MetAssociation.h:140
columnar::MetAssocationAccessors::getObjMask
static bitmask_t getObjMask(size_t objIndex)
Definition: MetAssociation.h:180
columnar::MetAssocationAccessors::calkey
bitmask_t calkey(AssocId assoc, size_t keyIdx) const
Definition: MetAssociation.h:191
columnar::MetAssociationHelper::getXAODObject
xAOD::MissingETAssociationHelper & getXAODObject() const
Definition: MetAssociation.h:369
IParticleContainer.h
columnar::MetAssocationAccessors::trkkeyAcc
ColumnAccessor< ContainerId::metAssociation, std::vector< bitmask_t >, CM > trkkeyAcc
Definition: MetAssociation.h:152
xAOD::MissingETAssociation_v1::ConstVec::cpy
float cpy() const
Returns .
columnar::MetAssocationAccessors::trkkey
decltype(auto) trkkey(AssocId assoc) const
Definition: MetAssociation.h:215
VectorVectorColumn.h
MissingETBase::Types::constvec_t
xAOD::MissingETAssociation_v1::ConstVec constvec_t
Type for constituent vector.
Definition: MissingETAssociation_v1.h:453
columnar::MetAssocationAccessors::trkpx
ColumnAccessor< ContainerId::metAssociation, std::vector< float >, CM > trkpx
Definition: MetAssociation.h:147
columnar::MetAssociationHelper::objSelected
bool objSelected(AssocId assocId, std::size_t objIdx) const
Definition: MetAssociation.h:393
columnar::MetAssocationAccessors::trksumpt
ColumnAccessor< ContainerId::metAssociation, std::vector< float >, CM > trksumpt
Definition: MetAssociation.h:151
columnar::MetAssocationAccessors::jettrkpz
ColumnAccessor< ContainerId::metAssociation, float, CM > jettrkpz
Definition: MetAssociation.h:156
columnar::MetAssociationHelper::ConstVec
xAOD::MissingETAssociation::ConstVec ConstVec
Definition: MetAssociation.h:353
xAODType::ParticleFlow
@ ParticleFlow
The object is a particle-flow object.
Definition: ObjectType.h:41
columnar::MetAssocationAccessors::constvec_t
MissingETBase::Types::constvec_t constvec_t
Definition: MetAssociation.h:102
columnar::MetAssocationAccessors::operator()
MetAssociationHelper< CM > operator()(xAOD::MissingETAssociationHelper &helper) const
Definition: MetAssociation.h:572
columnar::MetAssocationAccessors::jetTrkVec
ConstVec jetTrkVec(AssocId assoc) const
Definition: MetAssociation.h:244
columnar::MetAssocationAccessors::trkVec
ConstVec trkVec(AssocId assoc, ObjectId< CI, CM > pPart) const
Definition: MetAssociation.h:224
columnar::FilterRangeIterator::operator*
auto operator*() const noexcept
Definition: MetAssociation.h:42
columnar::MetAssocationAccessors::useMissingETAssociationHelper
static constexpr bool useMissingETAssociationHelper
Definition: MetAssociation.h:100
MuonDef.h
columnar::MetAssociationHelper::selectIfNoOverlaps
bool selectIfNoOverlaps(const xAOD::IParticle *obj, MissingETBase::UsageHandler::Policy p)
Definition: MetAssociation.h:476
MissingETBase::UsageHandler::TrackCluster
@ TrackCluster
Both cluster and track based.
Definition: MissingETCompositionBase.h:186
columnar::final
CM final
Definition: ColumnAccessor.h:106
xAOD::MissingETAssociation_v1::ConstVec::cpz
float cpz() const
Returns .
columnar::MetAssocationAccessors::size
size_t size(AssocId assoc) const
Definition: MetAssociation.h:247
columnar::MetAssociationHelper::setObjSelectionFlag
void setObjSelectionFlag(AssocId assocId, size_t objIdx, bool status)
Definition: MetAssociation.h:418
columnar::MetAssociationHelper::getJetAssociation
OptAssocId getJetAssociation(JetId pJet) const
Definition: MetAssociation.h:493
columnar::FilterRange::m_begin
IteratorType m_begin
Definition: MetAssociation.h:62
MissingETBase::UsageHandler::Policy
Policy
Policies on usage checks.
Definition: MissingETCompositionBase.h:182
columnar::MetAssociationHelper::invalidIndex
static constexpr std::size_t invalidIndex
Definition: MetAssociation.h:357
xAOD::JetFourMom_t
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > JetFourMom_t
Base 4 Momentum type for Jet.
Definition: JetTypes.h:17
columnar::ObjectId
a class representing a single object (electron, muons, etc.)
Definition: ContainerId.h:178
columnar::MetAssociationHelper::getMiscAssociation
auto getMiscAssociation() const
Definition: MetAssociation.h:514
columnar::FilterRange::operator=
FilterRange & operator=(FilterRange &&)=default
MissingETBase::UsageHandler::AllCalo
@ AllCalo
Inclusive except tracks.
Definition: MissingETCompositionBase.h:183
columnar::MetAssocationAccessors::overlapIndicesAcc
ColumnAccessor< ContainerId::metAssociation, std::vector< std::vector< std::size_t > >, CM > overlapIndicesAcc
Definition: MetAssociation.h:168
columnar::MetAssocationAccessors::jetLink
ColumnAccessor< ContainerId::metAssociation, LinkCastColumn< ContainerId::jet, xAOD::JetContainer >, CM > jetLink
Definition: MetAssociation.h:164
columnar::MetAssocationAccessors::overlapIndices
auto overlapIndices(AssocId assoc) const
Definition: MetAssociation.h:253
columnar::MetAssocationAccessors::calVec
ConstVec calVec(AssocId assoc, std::size_t keyIdx) const
Definition: MetAssociation.h:206
MissingETBase::Numerical::cpyError
static double cpyError()
Access error return value for constituent vector .
Definition: MissingETBase.h:99
columnar::MetAssocationAccessors::trkpy
ColumnAccessor< ContainerId::metAssociation, std::vector< float >, CM > trkpy
Definition: MetAssociation.h:148
MissingETBase::UsageHandler::OnlyTrack
@ OnlyTrack
Track based only.
Definition: MissingETCompositionBase.h:185
columnar::ParticleId
ObjectId< ContainerId::particle > ParticleId
Definition: ParticleDef.h:31
columnar::MetAssociationHelper::objSelected
bool objSelected(const xAOD::IParticle *obj) const
Definition: MetAssociation.h:384
xAOD::MissingETAssociationHelper::objSelected
bool objSelected(const MissingETAssociation_v1 *assoc, size_t objIdx) const
Test if object is selected for MET calculation.
Definition: MissingETAssociationHelper.cxx:43
columnar::MetAssocationAccessors::sizeCal
std::size_t sizeCal(AssocId assoc) const
Definition: MetAssociation.h:185
columnar::MetAssociationHelper::PartId
ObjectId< ContainerId::particle, CM > PartId
Definition: MetAssociation.h:346
xAOD::MissingETAssociationHelper
Definition: MissingETAssociationHelper.h:22
columnar::MetAssociationHelper::m_xaodHelper
xAOD::MissingETAssociationHelper * m_xaodHelper
the xAOD helper object, only used in xAOD mode, but its easier to define it in both modes regardless
Definition: MetAssociation.h:559
columnar::MetAssocationAccessors::objectTypeAcc
MetHelpers::ObjectTypeAccessor< ContainerId::particle > objectTypeAcc
Definition: MetAssociation.h:171
columnar::MetAssocationAccessors::trkVec
ConstVec trkVec(AssocId assoc, const xAOD::IParticle *pPart) const
Definition: MetAssociation.h:221
MissingETBase::UsageHandler::ParticleFlow
@ ParticleFlow
Particle Flow Object based.
Definition: MissingETCompositionBase.h:188
columnar::MetAssocationAccessors< columnar::ColumnarModeXAOD >::bitmask_t
MissingETBase::Types::bitmask_t bitmask_t
Definition: MetAssociation.h:104
columnar::MetAssociationHelper::hasOverlaps
bool hasOverlaps(AssocId assocId, size_t objIdx, MissingETBase::UsageHandler::Policy p) const
Definition: MetAssociation.h:442
columnar::MetAssocationAccessors::findIndex
std::size_t findIndex(AssocId assoc, const xAOD::IParticle *pPart) const
Definition: MetAssociation.h:271
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
columnar::MetAssocationAccessors::overlapIndices
auto overlapIndices(AssocId assoc, PartId pPart) const
Definition: MetAssociation.h:258
python.selector.AtlRunQuerySelectorLhcOlc.selector
selector
Definition: AtlRunQuerySelectorLhcOlc.py:610
columnar
Definition: ClusterDef.h:16
ContainerId.h
columnar::MetAssociationHelper::setObjSelectionFlag
void setObjSelectionFlag(AssocId assocId, const xAOD::IParticle *pPart, bool status)
Definition: MetAssociation.h:429
columnar::ColumnarTool
the base class for all columnar components
Definition: ColumnAccessorDataArray.h:17
columnar::ColumnarModeXAOD
Definition: ColumnarDef.h:18
columnar::MetAssocationAccessors::jettrkpx
ColumnAccessor< ContainerId::metAssociation, float, CM > jettrkpx
Definition: MetAssociation.h:154
columnar::MetAssocationAccessors::cale
ColumnAccessor< ContainerId::metAssociation, std::vector< float >, CM > cale
Definition: MetAssociation.h:143
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
columnar::MetAssociationHelper
a columnar version of xAOD::MissingETAssociationHelper
Definition: MetAssociation.h:85
columnar::MetAssocationAccessors::trkkey
bitmask_t trkkey(AssocId assoc, size_t keyIdx) const
Definition: MetAssociation.h:218
columnar::MetAssocationAccessors::calpy
ColumnAccessor< ContainerId::metAssociation, std::vector< float >, CM > calpy
Definition: MetAssociation.h:141
columnar::MetAssociationHelper::getConstVec
constvec_t getConstVec(PartId pPart, MissingETBase::UsageHandler::Policy p) const
Definition: MetAssociation.h:523
columnar::MetAssocationAccessors::getAlternateConstVec
xAOD::JetFourMom_t getAlternateConstVec(AssocId assoc) const
Definition: MetAssociation.h:299
merge.status
status
Definition: merge.py:16
xAODRootTest.accessors
dictionary accessors
Definition: xAODRootTest.py:73
columnar::MetAssocationAccessors::sizeTrk
std::size_t sizeTrk(AssocId assoc) const
Definition: MetAssociation.h:212
columnar::AccessorTemplate
the raw column accessor template class
Definition: ColumnAccessor.h:81
xAOD::MissingETAssociation_v1::ConstVec::cpx
float cpx() const
Returns .
columnar::MetAssociationHelper::overlapTrkVec
ConstVec overlapTrkVec(AssocId assoc) const
Definition: MetAssociation.h:542
columnar::FilterRange::end
auto end() const noexcept
Definition: MetAssociation.h:79
xAOD::MissingETAssociationHelper::getObjSelectionFlags
MissingETBase::Types::bitmask_t getObjSelectionFlags(const MissingETAssociation_v1 *assoc) const
Return object selection bitmask for the given association.
Definition: MissingETAssociationHelper.cxx:58
python.PyAthena.obj
obj
Definition: PyAthena.py:132
xAOD::bool
setBGCode setTAP setLVL2ErrorBits bool
Definition: TrigDecision_v1.cxx:60
columnar::MetAssocationAccessors::trkVec
ConstVec trkVec(AssocId assoc, size_t keyIdx) const
Definition: MetAssociation.h:239
columnar::FilterRange
a simple range adaptor that filters the elements of a range
Definition: MetAssociation.h:30
columnar::MetAssociationHelper::objSelected
bool objSelected(AssocId assocId, const xAOD::IParticle *pPart) const
Definition: MetAssociation.h:401
MissingETComposition.h
xAOD::MissingETAssociation_v1::ConstVec::ce
float ce() const
Returns .
columnar::MetAssocationAccessors::MetAssocationAccessors
MetAssocationAccessors(ColumnarTool< CM > &columnarBase)
Definition: MetAssociation.h:108
columnar::MetAssocationAccessors::containsPhysics
bool containsPhysics(AssocId assoc, JetId pPhys) const
Definition: MetAssociation.h:315
columnar::MetHelpers::ObjectTypeAccessor
an accessor that allows to access the xAOD object type of an input object
Definition: MetInput.h:169
columnar::MetAssocationAccessors::calpz
ColumnAccessor< ContainerId::metAssociation, std::vector< float >, CM > calpz
Definition: MetAssociation.h:142
columnar::MetAssocationAccessors::PartId
ObjectId< ContainerId::particle, CM > PartId
Definition: MetAssociation.h:99
columnar::MetAssociationHelper::getAssociations
auto getAssociations(ObjectId< CI, CM > pPart) const
Definition: MetAssociation.h:506
columnar::MetAssocationAccessors::invalidIndex
static constexpr std::size_t invalidIndex
Definition: MetAssociation.h:106
columnar::FilterRangeIterator::FilterRangeIterator
FilterRangeIterator(const IteratorType &val_iterator, const FilterRange< IteratorType, FunctionType > *val_range) noexcept
Definition: MetAssociation.h:38
columnar::FilterRangeIterator::operator==
bool operator==(const FilterRangeIterator &that) const noexcept
Definition: MetAssociation.h:52
columnar::MetAssociationHelper::useMissingETAssociationHelper
static constexpr bool useMissingETAssociationHelper
Definition: MetAssociation.h:356
columnar::FilterRangeIterator::operator++
FilterRangeIterator & operator++() noexcept
Definition: MetAssociation.h:45
MetInput.h
JetDef.h
columnar::FilterRangeIterator::m_iterator
IteratorType m_iterator
Definition: MetAssociation.h:35