ATLAS Offline Software
Loading...
Searching...
No Matches
columnar::MetAssociationHelper< CM > Class Template Reference

a columnar version of xAOD::MissingETAssociationHelper More...

#include <MetAssociation.h>

Collaboration diagram for columnar::MetAssociationHelper< CM >:

Public Types

using PartId = ObjectId<ParticleDef,CM>
using JetId = ObjectId<JetDef,CM>
using AssocId = ObjectId<MetAssociationDef,CM>
using OptAssocId = OptObjectId<MetAssociationDef,CM>
using ObjectLinkType = MetAssocationAccessors<CM>::ObjectLinkType
using constvec_t = MissingETBase::Types::constvec_t
using ConstVec = xAOD::MissingETAssociation::ConstVec
using bitmask_t = MissingETBase::Types::bitmask_t

Public Member Functions

 MetAssociationHelper (xAOD::MissingETAssociationHelper &val_helper, const columnar::MetAssocationAccessors< CM > &val_accessors)
 MetAssociationHelper (ObjectRange< MetAssociationDef, CM > map, const columnar::MetAssocationAccessors< CM > &val_accessors)
xAOD::MissingETAssociationHelper & getXAODObject () const
ObjectRange< MetAssociationDef, CM > map () const noexcept
 the underlying association map
bool objSelected (const xAOD::IParticle *obj) const
template<ContainerIdConcept CI>
bool objSelected (ObjectId< CI, CM > obj) const
bool objSelected (ObjectLinkType obj) const
bool objSelected (AssocId assocId, std::size_t objIdx) const
bool objSelected (AssocId assocId, const xAOD::IParticle *pPart) const
template<ContainerIdConcept CI>
bool objSelected (AssocId assocId, ObjectId< CI, CM > pPart) const
bool objSelected (AssocId assocId, ObjectLinkType pPart) const
bitmask_t getObjSelectionFlags (AssocId assocId) const
void setObjSelectionFlag (AssocId assocId, size_t objIdx, bool status)
void setObjSelectionFlag (AssocId assocId, const xAOD::IParticle *pPart, bool status)
template<ContainerIdConcept CI>
void setObjSelectionFlag (AssocId assocId, ObjectId< CI, CM > pPart, bool status)
void setObjSelectionFlag (AssocId assocId, const ObjectLinkType &pPart, bool status)
bool hasOverlaps (AssocId assocId, size_t objIdx, MissingETBase::UsageHandler::Policy p) const
bool selectIfNoOverlaps (const xAOD::IParticle *obj, MissingETBase::UsageHandler::Policy p)
bool selectIfNoOverlaps (PartId obj, MissingETBase::UsageHandler::Policy p)
OptAssocId getJetAssociation (const xAOD::Jet *pJet) const
OptAssocId getJetAssociation (JetId pJet) const
auto getAssociations (const xAOD::IParticle *pPart) const
template<ContainerIdConcept CI>
auto getAssociations (ObjectId< CI, CM > pPart) const
auto getMiscAssociation () const
constvec_t getConstVec (const xAOD::IParticle *pPart, MissingETBase::UsageHandler::Policy p) const
constvec_t getConstVec (PartId pPart, MissingETBase::UsageHandler::Policy p) const
ConstVec overlapCalVec (AssocId assoc) const
ConstVec overlapTrkVec (AssocId assoc) const

Static Public Attributes

static constexpr bool useMissingETAssociationHelper = std::is_same_v<CM,ColumnarModeXAOD>
static constexpr std::size_t invalidIndex = MissingETBase::Constants::invalidIndex

Private Attributes

xAOD::MissingETAssociationHelper * m_xaodHelper = nullptr
 the xAOD helper object, only used in xAOD mode, but its easier to define it in both modes regardless
ObjectRange< MetAssociationDef, CM > m_map
 the underlying MET association map
const MetAssocationAccessors< CM > * m_accessors = nullptr
 the accessors for the members of the MET association map

Detailed Description

template<typename CM>
class columnar::MetAssociationHelper< CM >

a columnar version of xAOD::MissingETAssociationHelper

Definition at line 341 of file MetAssociation.h.

Member Typedef Documentation

◆ AssocId

template<typename CM>
using columnar::MetAssociationHelper< CM >::AssocId = ObjectId<MetAssociationDef,CM>

Definition at line 349 of file MetAssociation.h.

◆ bitmask_t

template<typename CM>
using columnar::MetAssociationHelper< CM >::bitmask_t = MissingETBase::Types::bitmask_t

Definition at line 355 of file MetAssociation.h.

◆ ConstVec

template<typename CM>
using columnar::MetAssociationHelper< CM >::ConstVec = xAOD::MissingETAssociation::ConstVec

Definition at line 354 of file MetAssociation.h.

◆ constvec_t

template<typename CM>
using columnar::MetAssociationHelper< CM >::constvec_t = MissingETBase::Types::constvec_t

Definition at line 353 of file MetAssociation.h.

◆ JetId

template<typename CM>
using columnar::MetAssociationHelper< CM >::JetId = ObjectId<JetDef,CM>

Definition at line 348 of file MetAssociation.h.

◆ ObjectLinkType

template<typename CM>
using columnar::MetAssociationHelper< CM >::ObjectLinkType = MetAssocationAccessors<CM>::ObjectLinkType

Definition at line 351 of file MetAssociation.h.

◆ OptAssocId

template<typename CM>
using columnar::MetAssociationHelper< CM >::OptAssocId = OptObjectId<MetAssociationDef,CM>

Definition at line 350 of file MetAssociation.h.

◆ PartId

template<typename CM>
using columnar::MetAssociationHelper< CM >::PartId = ObjectId<ParticleDef,CM>

Public Members

Definition at line 347 of file MetAssociation.h.

Constructor & Destructor Documentation

◆ MetAssociationHelper() [1/2]

template<typename CM>
columnar::MetAssociationHelper< CM >::MetAssociationHelper ( xAOD::MissingETAssociationHelper & val_helper,
const columnar::MetAssocationAccessors< CM > & val_accessors )
inline

Definition at line 361 of file MetAssociation.h.

363 {}
a columnar version of xAOD::MissingETAssociationHelper
const MetAssocationAccessors< CM > * m_accessors
the accessors for the members of the MET association map
ObjectRange< MetAssociationDef, CM > map() const noexcept
the underlying association map
ObjectRange< MetAssociationDef, CM > m_map
the underlying MET association map
xAOD::MissingETAssociationHelper * m_xaodHelper
the xAOD helper object, only used in xAOD mode, but its easier to define it in both modes regardless

◆ MetAssociationHelper() [2/2]

template<typename CM>
columnar::MetAssociationHelper< CM >::MetAssociationHelper ( ObjectRange< MetAssociationDef, CM > map,
const columnar::MetAssocationAccessors< CM > & val_accessors )
inline

Definition at line 365 of file MetAssociation.h.

367 {}

Member Function Documentation

◆ getAssociations() [1/2]

template<typename CM>
auto columnar::MetAssociationHelper< CM >::getAssociations ( const xAOD::IParticle * pPart) const
inlinenodiscard

Definition at line 504 of file MetAssociation.h.

504 {
505 return getAssociations(PartId(*pPart));}
ObjectId< ParticleDef, CM > PartId
auto getAssociations(const xAOD::IParticle *pPart) const

◆ getAssociations() [2/2]

template<typename CM>
template<ContainerIdConcept CI>
auto columnar::MetAssociationHelper< CM >::getAssociations ( ObjectId< CI, CM > pPart) const
inlinenodiscard

Definition at line 507 of file MetAssociation.h.

507 {
508 // In the original xAOD code, this returned a `std::vector` by
509 // value. In columnar code we prefer not to pass vectors by
510 // value, so we return a filtered range instead.
511 return FilterRange (m_map.begin(), m_map.end(),
513 return (accessors->findIndex(assoc,pPart) != invalidIndex);});}
ObjectId< MetAssociationDef, CM > AssocId

◆ getConstVec() [1/2]

template<typename CM>
constvec_t columnar::MetAssociationHelper< CM >::getConstVec ( const xAOD::IParticle * pPart,
MissingETBase::UsageHandler::Policy p ) const
inlinenodiscard

Other Members

Definition at line 522 of file MetAssociation.h.

522 {
523 return getConstVec(PartId(*pPart), p);}
constvec_t getConstVec(const xAOD::IParticle *pPart, MissingETBase::UsageHandler::Policy p) const

◆ getConstVec() [2/2]

template<typename CM>
constvec_t columnar::MetAssociationHelper< CM >::getConstVec ( PartId pPart,
MissingETBase::UsageHandler::Policy p ) const
inlinenodiscard

Definition at line 524 of file MetAssociation.h.

524 {
526 for (decltype(auto) assoc : getAssociations(pPart)) {
528 totalvec += m_accessors->trkVec(assoc, pPart);
529 } else {
530 totalvec += m_accessors->calVec(assoc, pPart);
531 }
532 }
533 return totalvec;}
MissingETBase::Types::constvec_t constvec_t

◆ getJetAssociation() [1/2]

template<typename CM>
OptAssocId columnar::MetAssociationHelper< CM >::getJetAssociation ( const xAOD::Jet * pJet) const
inlinenodiscard

Object Association Members

Definition at line 492 of file MetAssociation.h.

492 {
493 return getJetAssociation(JetId(*pJet));}
ObjectId< JetDef, CM > JetId
OptAssocId getJetAssociation(const xAOD::Jet *pJet) const

◆ getJetAssociation() [2/2]

template<typename CM>
OptAssocId columnar::MetAssociationHelper< CM >::getJetAssociation ( JetId pJet) const
inlinenodiscard

Definition at line 494 of file MetAssociation.h.

494 {
495 // this uses a linear search, which is the same as the original
496 // xAOD code, but was flagged there as potentially inefficient
497 for (auto assoc : m_map) {
498 if (m_accessors->jetLink(assoc) == pJet) {
499 return assoc;
500 }
501 }
502 return std::nullopt;}

◆ getMiscAssociation()

template<typename CM>
auto columnar::MetAssociationHelper< CM >::getMiscAssociation ( ) const
inlinenodiscard

Definition at line 515 of file MetAssociation.h.

515 {
516 return m_accessors->getMiscAssociation(m_map);}

◆ getObjSelectionFlags()

template<typename CM>
bitmask_t columnar::MetAssociationHelper< CM >::getObjSelectionFlags ( AssocId assocId) const
inlinenodiscard

Definition at line 411 of file MetAssociation.h.

411 {
412 if constexpr (useMissingETAssociationHelper)
413 return m_xaodHelper->getObjSelectionFlags(&assocId.getXAODObject());
414 else
415 return m_accessors->useObjectFlagsAcc(assocId);
416 }
static constexpr bool useMissingETAssociationHelper
xAOD::MissingETAssociationHelper & getXAODObject() const

◆ getXAODObject()

template<typename CM>
xAOD::MissingETAssociationHelper & columnar::MetAssociationHelper< CM >::getXAODObject ( ) const
inlinenodiscard

Definition at line 370 of file MetAssociation.h.

370 {
371 if constexpr (useMissingETAssociationHelper)
372 return *m_xaodHelper;
373 else
374 throw std::logic_error ("can't call xAOD function in columnar mode");}

◆ hasOverlaps()

template<typename CM>
bool columnar::MetAssociationHelper< CM >::hasOverlaps ( AssocId assocId,
size_t objIdx,
MissingETBase::UsageHandler::Policy p ) const
inlinenodiscard

Object Overlap Members

Definition at line 443 of file MetAssociation.h.

443 {
444 if ( objIdx == invalidIndex ) return false;
445 auto indices = m_accessors->overlapIndices(assocId, objIdx);
446 auto types = m_accessors->overlapTypes(assocId, objIdx);
447 for(size_t iOL=0; iOL<indices.size(); ++iOL) {
449 // printf("Test object %lu for overlaps: OL type %i\n",indices[iOL],(int)types[iOL]);
450 switch(p) {
453 else {continue;}
455 if(types[iOL] & 1<<xAOD::Type::CaloCluster) {break;}
456 else {continue;}
458 if(types[iOL] & 1<<xAOD::Type::TrackParticle) {break;}
459 else {continue;}
461 if(types[iOL] & 1<<xAOD::Type::ParticleFlow) {break;}
462 else {continue;}
464 if(types[iOL] & 1) {break;}
465 else {continue;}
467 if(types[iOL] & ~(1<<xAOD::Type::TrackParticle)) {break;}
468 else {continue;}
469 default: continue;
470 }
471 return true;
472 }
473 }
474 return false;
475 }
bool objSelected(const xAOD::IParticle *obj) const
static constexpr std::size_t invalidIndex

◆ map()

template<typename CM>
ObjectRange< MetAssociationDef, CM > columnar::MetAssociationHelper< CM >::map ( ) const
inlinenodiscardnoexcept

the underlying association map

Definition at line 378 of file MetAssociation.h.

378 {
379 return m_map;}

◆ objSelected() [1/7]

template<typename CM>
bool columnar::MetAssociationHelper< CM >::objSelected ( AssocId assocId,
const xAOD::IParticle * pPart ) const
inlinenodiscard

Definition at line 402 of file MetAssociation.h.

402 {
403 return objSelected(assocId, PartId(*pPart));}

◆ objSelected() [2/7]

template<typename CM>
template<ContainerIdConcept CI>
bool columnar::MetAssociationHelper< CM >::objSelected ( AssocId assocId,
ObjectId< CI, CM > pPart ) const
inlinenodiscard

Definition at line 405 of file MetAssociation.h.

405 {
406 return objSelected(assocId, m_accessors->findIndex(assocId,pPart));}

◆ objSelected() [3/7]

template<typename CM>
bool columnar::MetAssociationHelper< CM >::objSelected ( AssocId assocId,
ObjectLinkType pPart ) const
inlinenodiscard

Definition at line 407 of file MetAssociation.h.

407 {
408 return objSelected(assocId, m_accessors->findIndex(assocId,pPart));}

◆ objSelected() [4/7]

template<typename CM>
bool columnar::MetAssociationHelper< CM >::objSelected ( AssocId assocId,
std::size_t objIdx ) const
inlinenodiscard

Definition at line 394 of file MetAssociation.h.

394 {
395 if constexpr (useMissingETAssociationHelper)
396 return m_xaodHelper->objSelected(&assocId.getXAODObject(), objIdx);
397 else {
398 if (objIdx >= sizeof(bitmask_t)*8) return false;
399 return bool(m_accessors->useObjectFlagsAcc(assocId) & (static_cast<MissingETBase::Types::bitmask_t>(1)<<objIdx));
400 }
401 }
MissingETBase::Types::bitmask_t bitmask_t

◆ objSelected() [5/7]

template<typename CM>
bool columnar::MetAssociationHelper< CM >::objSelected ( const xAOD::IParticle * obj) const
inlinenodiscard

Object Selection Flag Members

Definition at line 385 of file MetAssociation.h.

385 {
386 return objSelected(PartId(*obj));}

◆ objSelected() [6/7]

template<typename CM>
template<ContainerIdConcept CI>
bool columnar::MetAssociationHelper< CM >::objSelected ( ObjectId< CI, CM > obj) const
inlinenodiscard

Definition at line 388 of file MetAssociation.h.

388 {
389 for (decltype(auto) assoc : getAssociations(obj)) if(objSelected(assoc,obj)) return true;
390 return false;}

◆ objSelected() [7/7]

template<typename CM>
bool columnar::MetAssociationHelper< CM >::objSelected ( ObjectLinkType obj) const
inlinenodiscard

Definition at line 391 of file MetAssociation.h.

391 {
392 for (decltype(auto) assoc : getAssociations(obj)) if(objSelected(assoc,obj)) return true;
393 return false;}

◆ overlapCalVec()

template<typename CM>
ConstVec columnar::MetAssociationHelper< CM >::overlapCalVec ( AssocId assoc) const
inlinenodiscard

Definition at line 535 of file MetAssociation.h.

535 {
537 for (size_t iKey = 0; iKey < m_accessors->sizeCal(assoc); iKey++) {
538 bool selector = (getObjSelectionFlags(assoc) & m_accessors->calkey(assoc)[iKey]) ? !m_accessors->isMisc(assoc) : m_accessors->isMisc(assoc);
539 if (selector) calvec+=m_accessors->calVec(assoc,iKey);
540 }
541 return calvec;}
bitmask_t getObjSelectionFlags(AssocId assocId) const

◆ overlapTrkVec()

template<typename CM>
ConstVec columnar::MetAssociationHelper< CM >::overlapTrkVec ( AssocId assoc) const
inlinenodiscard

Definition at line 543 of file MetAssociation.h.

543 {
545 for (size_t iKey = 0; iKey < m_accessors->sizeTrk(assoc); iKey++) {
546 bool selector = (getObjSelectionFlags(assoc) & m_accessors->trkkey(assoc)[iKey]) ? !m_accessors->isMisc(assoc) : m_accessors->isMisc(assoc);
548 }
549 return trkvec;
550 }
xAOD::MissingETAssociation::ConstVec ConstVec

◆ selectIfNoOverlaps() [1/2]

template<typename CM>
bool columnar::MetAssociationHelper< CM >::selectIfNoOverlaps ( const xAOD::IParticle * obj,
MissingETBase::UsageHandler::Policy p )
inlinenodiscard

Definition at line 477 of file MetAssociation.h.

477 {
478 return selectIfNoOverlaps(PartId(*obj), p);}
bool selectIfNoOverlaps(const xAOD::IParticle *obj, MissingETBase::UsageHandler::Policy p)

◆ selectIfNoOverlaps() [2/2]

template<typename CM>
bool columnar::MetAssociationHelper< CM >::selectIfNoOverlaps ( PartId obj,
MissingETBase::UsageHandler::Policy p )
inlinenodiscard

Definition at line 479 of file MetAssociation.h.

479 {
480 auto assocs = getAssociations(obj);
481 bool overlaps(false);
482 for(decltype(auto) assoc : assocs) overlaps |= hasOverlaps(assoc,m_accessors->findIndex(assoc,obj),p);
483 if (overlaps) return false;
484 for(decltype(auto) assoc : assocs) setObjSelectionFlag(assoc,obj,true);
485 return true;}
bool hasOverlaps(AssocId assocId, size_t objIdx, MissingETBase::UsageHandler::Policy p) const
void setObjSelectionFlag(AssocId assocId, size_t objIdx, bool status)

◆ setObjSelectionFlag() [1/4]

template<typename CM>
void columnar::MetAssociationHelper< CM >::setObjSelectionFlag ( AssocId assocId,
const ObjectLinkType & pPart,
bool status )
inline

Definition at line 435 of file MetAssociation.h.

◆ setObjSelectionFlag() [2/4]

template<typename CM>
void columnar::MetAssociationHelper< CM >::setObjSelectionFlag ( AssocId assocId,
const xAOD::IParticle * pPart,
bool status )
inline

Definition at line 430 of file MetAssociation.h.

◆ setObjSelectionFlag() [3/4]

template<typename CM>
template<ContainerIdConcept CI>
void columnar::MetAssociationHelper< CM >::setObjSelectionFlag ( AssocId assocId,
ObjectId< CI, CM > pPart,
bool status )
inline

Definition at line 433 of file MetAssociation.h.

◆ setObjSelectionFlag() [4/4]

template<typename CM>
void columnar::MetAssociationHelper< CM >::setObjSelectionFlag ( AssocId assocId,
size_t objIdx,
bool status )
inline

Definition at line 419 of file MetAssociation.h.

419 {
420 if constexpr (useMissingETAssociationHelper)
421 m_xaodHelper->setObjSelectionFlag(&assocId.getXAODObject(), objIdx, status);
422 else
423 {
424 if (objIdx >= sizeof(bitmask_t)*8) return;
425 bitmask_t mask = static_cast<bitmask_t>(1) << objIdx;
426 if (status) m_accessors->useObjectFlagsAcc(assocId) |= mask;
427 else m_accessors->useObjectFlagsAcc(assocId) &= ~mask;
428 }
429 }

Member Data Documentation

◆ invalidIndex

template<typename CM>
std::size_t columnar::MetAssociationHelper< CM >::invalidIndex = MissingETBase::Constants::invalidIndex
staticconstexpr

Definition at line 358 of file MetAssociation.h.

◆ m_accessors

template<typename CM>
const MetAssocationAccessors<CM>* columnar::MetAssociationHelper< CM >::m_accessors = nullptr
private

the accessors for the members of the MET association map

Definition at line 566 of file MetAssociation.h.

◆ m_map

template<typename CM>
ObjectRange<MetAssociationDef,CM> columnar::MetAssociationHelper< CM >::m_map
private

the underlying MET association map

Definition at line 563 of file MetAssociation.h.

◆ m_xaodHelper

template<typename CM>
xAOD::MissingETAssociationHelper* columnar::MetAssociationHelper< CM >::m_xaodHelper = nullptr
private

the xAOD helper object, only used in xAOD mode, but its easier to define it in both modes regardless

Private Members

Definition at line 560 of file MetAssociation.h.

◆ useMissingETAssociationHelper

template<typename CM>
bool columnar::MetAssociationHelper< CM >::useMissingETAssociationHelper = std::is_same_v<CM,ColumnarModeXAOD>
staticconstexpr

Definition at line 357 of file MetAssociation.h.


The documentation for this class was generated from the following file: