5#ifndef ASSOCIATIONUTILS_BASEOVERLAPTOOL_H
6#define ASSOCIATIONUTILS_BASEOVERLAPTOOL_H
28namespace ADD_CMODE(ORUtils)
66 virtual StatusCode initializeDerived()
67 {
return StatusCode::SUCCESS; }
76 template<columnar::RegularContainerIdConcept CI1,columnar::RegularContainerIdConcept CI2>
82 template<
typename XAODContainer,columnar::RegularContainerIdConcept CI>
85 if constexpr (columnar::ColumnarMode::isXAOD) {
86 if(
typeid(cont.getXAODObjectNoexcept()) !=
typeid(XAODContainer) &&
89 return StatusCode::FAILURE;
92 return StatusCode::SUCCESS;
99 std::string m_inputLabel;
101 std::string m_outputLabel;
105 bool m_outputPassValue;
108 bool m_linkOverlapObjects;
111 bool m_enableUserPrio;
123 using ColumnarTool::ColumnarTool;
125 std::unique_ptr<BaseAccessors> m_baseAccessors {std::make_unique<BaseAccessors> (
this)};
128 std::unique_ptr<OverlapDecorationHelper<columnar::Particle1Def>> m_decHelper1;
129 std::unique_ptr<OverlapDecorationHelper<columnar::Particle2Def>> m_decHelper2;
132 std::unique_ptr<OverlapLinkHelper<columnar::Particle1Def>> m_objLinkHelper1;
133 std::unique_ptr<OverlapLinkHelper<columnar::Particle2Def>> m_objLinkHelper2;
143 m_decHelper1->initializeDecorations (container); }
145 m_decHelper2->initializeDecorations (container); }
147 return m_decHelper1->getObjectPriority (obj); }
149 return m_decHelper2->getObjectPriority (obj); }
151 return m_decHelper1->isSurvivingObject (obj);}
153 return m_decHelper2->isSurvivingObject (obj);}
155 return m_decHelper1->isRejectedObject (obj); }
157 return m_decHelper2->isRejectedObject (obj); }
159 m_decHelper1->setObjectFail (obj); }
161 m_decHelper2->setObjectFail (obj); }
162 template<columnar::ContainerIdConcept CI>
164 return m_objLinkHelper1->addObjectLink (p1, p2); }
165 template<columnar::ContainerIdConcept CI>
167 return m_objLinkHelper2->addObjectLink (p1, p2); }
176 template<columnar::RegularContainerIdConcept CI1,columnar::RegularContainerIdConcept CI2>
177 StatusCode BaseOverlapTool ::
182 if(!m_enableUserPrio ||
183 getObjectPriority(testParticle) <=
184 getObjectPriority(refParticle))
186 if constexpr (columnar::ColumnarMode::isXAOD)
189 const float invGeV = 1e-3;
190 ATH_MSG_DEBUG(
" Found overlap " << testParticle.getXAODObject().type() <<
191 " pt " << testParticle.getXAODObject().pt()*
invGeV);
196 setObjectFail(testParticle);
197 if(m_linkOverlapObjects) {
198 ATH_CHECK( addObjectLink(testParticle, refParticle) );
201 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_ERROR(x,...)
DataVector adapter that acts like it holds const pointers.
a class representing a single object (electron, muons, etc.)
a class representing a continuous sequence of objects (a.k.a. a container)
AccessorTemplate< Particle1Def, CT, ColumnAccessMode::input, CM > Particle1Accessor
ObjectRange< EventContextDef > EventContextRange
ObjectId< Particle1Def > Particle1Id
AccessorTemplate< Particle2Def, CT, ColumnAccessMode::input, CM > Particle2Accessor
ObjectRange< Particle2Def > Particle2Range
ObjectRange< Particle1Def > Particle1Range
ObjectId< Particle2Def > Particle2Id