42{ this->clearCache(); }
52 while ( fCont != lCont && (*fCont)->metObject() != pMET ) { ++fCont; }
60 while ( fCont != lCont && (*fCont)->metObject() != pMET ) { ++fCont; }
68 while (fCont != lCont && (*fCont)->metObject()->name() !=
name ) { ++fCont; }
76 while ( fCont != lCont && (*fCont)->metObject()->name() !=
name ) { ++fCont; }
84 while ( fCont != lCont && (*fCont)->metObject()->source() != src ) { ++fCont; }
92 while ( fCont != lCont && (*fCont)->metObject()->source() != src ) { ++fCont; }
100 while ( fCont != lCont && (*fCont)->metObject() != pMET ) { ++fCont; }
101 if ( fCont != lCont )
return (
size_t)std::distance<const_iterator>(this->
begin(),fCont);
109 while ( fCont != lCont && (*fCont)->metObject()->name() !=
name ) { ++fCont; }
110 if ( fCont != lCont )
return (
size_t)std::distance<const_iterator>(this->
begin(),fCont);
118 while ( fCont != lCont && (*fCont)->metObject()->source() != src ) { ++fCont; }
119 if ( fCont != lCont )
return (
size_t)std::distance<const_iterator>(this->
begin(),fCont);
131 while ( fCont != lCont && (*fCont)->metObject()->name() !=
name ) { ++fCont; }
132 if ( fCont != lCont )
return (*fCont)->metObject();
150 while ( fCont != lCont && (*fCont)->metObject()->source() != src ) { ++fCont; }
151 if ( fCont != lCont )
return (*fCont)->metObject();
159 while ( fCont != lCont && ( (*fCont)->metObject()->source() != src || (*fCont)->statusWord() != sw ) ) { ++fCont; }
160 if ( fCont != lCont )
return (*fCont)->metObject();
169 if ( fCont != lCont )
return (*fCont)->metObject();
179 if ( fCont != lCont )
return (*fCont)->metObject();
207 signals.insert(signals.end(),ins.begin(),ins.end());
208 retVal = signals.size() == nSig;
221 if ( signals.empty() || signalLinks.empty() )
return false;
223 size_t oldSize(signals.size());
224 MissingETBase::Types::object_vector_t::iterator fSig(signals.begin());
225 while ( fSig != signals.end() )
227 size_t fIdx((*fSig)->index());
228 if( fIdx >= signalLinks.size() ) {
231 printf(
"MissingETComponentMap::f_checkObjectUsage(...) - ERROR - searching for a signal with index (%zu) beyond signal container range (%zu).", fIdx, signalLinks.size());
232 printf(
"MissingETComponentMap::f_checkObjectUsage(...) - ERROR - this may indicate an inconsistency in the signal containers.");
239 return oldSize != signals.size();
244 if ( objects.empty() ) {
return false; }
246 size_t oldSize(objects.size());
247 MissingETBase::Types::object_vector_t::iterator fObj(objects.begin());
248 while ( fObj != objects.end() )
249 {
if ( physicsLinks.find(*fObj) != physicsLinks.end() ) { fObj = objects.erase(fObj); }
else { ++fObj; } }
250 return objects.size() != oldSize;
263 { flag = this->
setClusters(pMET,pPart,signalList);
break; }
265 { flag = this->
setTracks(pMET,pPart,signalList);
break; }
267 {
bool cFlg(this->
setClusters(pMET,pPart,signalList));
bool tFlg(this->
setTracks(pMET,pPart,signalList)); flag = cFlg || tFlg;
break; }
269 { flag = this->
setObjects(pMET,pPart,signalList);
break; }
285 bool firstCluster =
true;
286 MissingETBase::Types::object_vector_t::const_iterator fSig(signalList.begin());
287 MissingETBase::Types::object_vector_t::const_iterator lSig(signalList.end());
288 for ( ; fSig != lSig; ++fSig ) {
291 firstCluster =
false;
305 return !firstCluster;
317 bool firstTrack =
true;
318 MissingETBase::Types::object_vector_t::const_iterator fSig(signalList.begin());
319 MissingETBase::Types::object_vector_t::const_iterator lSig(signalList.end());
320 for ( ; fSig != lSig; ++fSig ) {
346 MissingETBase::Types::object_vector_t::const_iterator fObj(objects.begin());
347 MissingETBase::Types::object_vector_t::const_iterator lObj(objects.end());
358{ signalLinks.clear();
if (
reserve > 0 ) { signalLinks.reserve(
reserve); } }
DataModel_detail::const_iterator< DataVector > const_iterator
void reserve(size_type n)
const MissingETComponent_v1 * at(size_type n) const
DataModel_detail::iterator< DataVector > iterator
DataVector(SG::OwnershipPolicy ownPolicy=SG::OWN_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES)
const_iterator end() const noexcept
const_iterator begin() const noexcept
size_type size() const noexcept
Returns the number of elements in the collection.
Class providing the definition of the 4-vector interface.
bool checkUsage(const IParticle *pPart, MissingETBase::UsageHandler::Policy p=MissingETBase::UsageHandler::OnlyCluster) const
Check if a given object is already used in MET.
particle_map_t m_particleLinks
Store for linked physics object information lookup.
static const size_t m_clusterLinkReserve
const MissingET * retrieveMissingET(const std::string &name) const
Retrieve MissingET object by name.
static const size_t m_trackLinkReserve
bool setTracks(const MissingET *pMET, const IParticle *pPart, const MissingETBase::Types::object_vector_t &signalList)
void f_setupLookupCache(signal_vector_t &signalLinks, size_t reserve)
Set up the signal object lookup.
bool f_checkObjectUsage(MissingETBase::Types::object_vector_t &sig, const signal_vector_t &signalLinks) const
Check signal object usage.
bool addObjects(const MissingET *pMET, const IParticle *pPart, const MissingETBase::Types::object_vector_t &signalList, MissingETBase::UsageHandler::Policy p=MissingETBase::UsageHandler::OnlyCluster)
signal_vector_t m_clusterLinks
Store for linked cluuster signal information lookup.
MissingETComponentMap_v1(SG::OwnershipPolicy own=SG::OWN_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES)
Default constructor.
std::vector< indexedlink_t > signal_vector_t
Indexed list type for signal object link locations.
bool setClusters(const MissingET *pMET, const IParticle *pPart, const MissingETBase::Types::object_vector_t &signalList)
signal_vector_t m_trackLinks
Store for linked track signal information lookup.
void f_clearLookupCache()
Clear the lookup cache.
const_iterator find(const MissingET *pMET) const
Find MET object referenced by pointer.
bool f_extractSignal(MissingETBase::Types::object_vector_t &sig) const
Signal type extractor.
size_t getObjectIndex(const IParticle *pPart) const
size_t getComponentIndex(const IParticle *pPart) const
const MissingET * f_retrieveMissingETIncl(MissingETBase::Types::bitmask_t src) const
void f_fillLookupCache()
Fill the lookup cache from the composition map data content.
size_t findIndex(const MissingET *pMET) const
MissingETBase::Types::indexedlink_t indexedlink_t
Type for the description of the link locations.
bool setObjects(const MissingET *pMET, const IParticle *pPart, const MissingETBase::Types::object_vector_t &objectList)
const MissingET * f_retrieveMissingETExcl(MissingETBase::Types::bitmask_t src) const
virtual ~MissingETComponentMap_v1()
Base class destructor.
size_t f_getIndex(const IParticle *pPart) const
std::map< particle_key_t, indexedlink_t > particle_map_t
Map type for physics object.
MET component descriptor contains object links and corresponding parameters.
std::vector< const xAOD::IParticle * > object_vector_t
Vector of object type.
uint64_t bitmask_t
Type for status word bit mask.
Policy
Policies on usage checks.
@ OnlyTrack
Track based only.
@ OnlyCluster
CaloCluster based only.
@ PhysicsObject
Physics object based.
@ TrackCluster
Both cluster and track based.
@ TrackParticle
The object is a charged track particle.
@ CaloCluster
The object is a calorimeter cluster.
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
MissingET_v1 MissingET
Version control by type defintion.
DataVector< IParticle > IParticleContainer
Simple convenience declaration of IParticleContainer.
static size_t invalidIndex()
Access invalid index indicator.
static Types::indexedlink_t invalidLink()
Access invaalid link tag.
static bool hasPattern(E bits, F mask)
Generic check for given pattern.