8#ifndef LAR_OVERLAP_TENSOR_H
9#define LAR_OVERLAP_TENSOR_H 1
13#include <unordered_map>
153 unsigned int &nU,
unsigned int &nV,
unsigned int &nW)
const;
156 typedef std::unordered_map<const pandora::Cluster *, OverlapResult>
OverlapList;
157 typedef std::unordered_map<const pandora::Cluster *, OverlapList>
OverlapMatrix;
158 typedef std::unordered_map<const pandora::Cluster *, OverlapMatrix>
TheTensor;
299 const pandora::Cluster *
const pCluster,
const bool ignoreUnavailable,
unsigned int &nU,
unsigned int &nV,
unsigned int &nW)
const
302 this->GetConnectedElements(pCluster, ignoreUnavailable, elementList, nU, nV, nW);
310 unsigned int nU(0), nV(0), nW(0);
311 this->GetConnectedElements(pCluster, ignoreUnavailable, elementList, nU, nV, nW);
319 return m_overlapTensor.begin();
327 return m_overlapTensor.end();
336 const OverlapList &overlapList(this->GetOverlapList(pClusterU, pClusterV));
337 typename OverlapList::const_iterator iter = overlapList.find(pClusterW);
339 if (overlapList.end() == iter)
351 const OverlapMatrix &overlapMatrix(this->GetOverlapMatrix(pClusterU));
354 if (overlapMatrix.end() == iter)
365 typename TheTensor::const_iterator iter = m_overlapTensor.find(pClusterU);
367 if (m_overlapTensor.end() == iter)
378 return m_clusterNavigationMapUV;
386 return m_clusterNavigationMapVW;
394 return m_clusterNavigationMapWU;
402 m_overlapTensor.clear();
403 m_clusterNavigationMapUV.clear();
404 m_clusterNavigationMapVW.clear();
405 m_clusterNavigationMapWU.clear();
414 m_pClusterU(pClusterU),
415 m_pClusterV(pClusterV),
416 m_pClusterW(pClusterW),
417 m_overlapResult(overlapResult)
450 return m_overlapResult;
Header file defining relevant internal typedefs, sort and string conversion functions.
DeltaRayOverlapResult class.
TheMatrix::const_iterator const_iterator
OverlapResult m_overlapResult
The overlap result.
const pandora::Cluster * GetClusterW() const
Get the address of the w cluster.
const pandora::Cluster * GetCluster(const pandora::HitType hitType) const
Get the address of the given hit type cluster.
const OverlapResult & GetOverlapResult() const
Get the overlap result.
bool operator<(const Element &rhs) const
Element less than operator.
const pandora::Cluster * m_pClusterW
The address of the w cluster.
const pandora::Cluster * m_pClusterU
The address of the u cluster.
Element(const pandora::Cluster *const pClusterU, const pandora::Cluster *const pClusterV, const pandora::Cluster *const pClusterW, const OverlapResult &overlapResult)
Constructor.
const pandora::Cluster * GetClusterU() const
Get the address of the u cluster.
const pandora::Cluster * m_pClusterV
The address of the v cluster.
const pandora::Cluster * GetClusterV() const
Get the address of the v cluster.
const ClusterNavigationMap & GetClusterNavigationMapVW() const
Get the cluster navigation map V->W.
std::unordered_map< const pandora::Cluster *, OverlapList > OverlapMatrix
const ClusterNavigationMap & GetClusterNavigationMapWU() const
Get the cluster navigation map W->U.
const_iterator end() const
Returns an iterator referring to the past-the-end element in the overlap tensor.
ClusterNavigationMap m_clusterNavigationMapWU
The cluster navigation map W->U.
void SetOverlapResult(const pandora::Cluster *const pClusterU, const pandora::Cluster *const pClusterV, const pandora::Cluster *const pClusterW, const OverlapResult &overlapResult)
Set overlap result.
void GetConnectedElements(const pandora::Cluster *const pCluster, const bool ignoreUnavailable, ElementList &elementList) const
Get a list of elements connected to a specified cluster.
const OverlapResult & GetOverlapResult(const pandora::Cluster *const pClusterU, const pandora::Cluster *const pClusterV, const pandora::Cluster *const pClusterW) const
Get the overlap result for a specified trio of clusters.
void ReplaceOverlapResult(const pandora::Cluster *const pClusterU, const pandora::Cluster *const pClusterV, const pandora::Cluster *const pClusterW, const OverlapResult &overlapResult)
SetReplace an existing overlap result.
const OverlapList & GetOverlapList(const pandora::Cluster *const pClusterU, const pandora::Cluster *const pClusterV) const
Get the overlap list for a specified pair of clusters.
ClusterNavigationMap m_clusterNavigationMapUV
The cluster navigation map U->V.
TheTensor::const_iterator const_iterator
std::unordered_map< const pandora::Cluster *, pandora::ClusterList > ClusterNavigationMap
void GetNConnections(const pandora::Cluster *const pCluster, const bool ignoreUnavailable, unsigned int &nU, unsigned int &nV, unsigned int &nW) const
Get the number of connections for a specified cluster.
void Clear()
Clear overlap tensor.
const OverlapMatrix & GetOverlapMatrix(const pandora::Cluster *const pClusterU) const
Get the cluster overlap matrix for a specified cluster.
TheTensor m_overlapTensor
The overlap tensor.
void GetUnambiguousElements(const bool ignoreUnavailable, ElementList &elementList) const
Get unambiguous elements.
void ExploreConnections(const pandora::Cluster *const pCluster, const bool ignoreUnavailable, pandora::ClusterList &clusterListU, pandora::ClusterList &clusterListV, pandora::ClusterList &clusterListW) const
Explore connections associated with a given cluster.
const_iterator begin() const
Returns an iterator referring to the first element in the overlap tensor.
void GetSortedKeyClusters(pandora::ClusterVector &sortedKeyClusters) const
Get a sorted vector of key clusters (U clusters with current implementation)
std::unordered_map< const pandora::Cluster *, OverlapResult > OverlapList
bool DefaultAmbiguityFunction(const pandora::ClusterList &clusterListU, const pandora::ClusterList &clusterListV, const pandora::ClusterList &clusterListW, const pandora::Cluster *&pClusterU, const pandora::Cluster *&pClusterV, const pandora::Cluster *&pClusterW) const
Default ambiguity function, checking that only one U, V and W cluster is found.
std::vector< Element > ElementList
void RemoveCluster(const pandora::Cluster *const pCluster)
Remove entries from tensor corresponding to specified cluster.
const ClusterNavigationMap & GetClusterNavigationMapUV() const
Get the cluster navigation map U->V.
ClusterNavigationMap m_clusterNavigationMapVW
The cluster navigation map V->W.
std::unordered_map< const pandora::Cluster *, OverlapMatrix > TheTensor
StatusCodeException class.
HitType
Calorimeter hit type enum.
std::vector< const Cluster * > ClusterVector
MANAGED_CONTAINER< const Cluster * > ClusterList