22 m_minHitsInCluster(5),
23 m_vertexProximity(5.f),
24 m_minClusterSeparation(2.5f),
25 m_touchingDistance(0.001f)
37 const Vertex *
const pVertex(
38 ((pVertexList->size() == 1) && (
VERTEX_3D == (*(pVertexList->begin()))->GetVertexType())) ? *(pVertexList->begin()) : NULL);
40 ClusterVector sortedPfoClusters(pfoClusters.begin(), pfoClusters.end());
43 ClusterVector sortedRemnantClusters(remnantClusters.begin(), remnantClusters.end());
46 for (
const Cluster *
const pClusterP : sortedPfoClusters)
52 const float innerPV((vertexPosition2D - pClusterP->GetCentroid(pClusterP->GetInnerPseudoLayer())).GetMagnitude());
53 const float outerPV((vertexPosition2D - pClusterP->GetCentroid(pClusterP->GetOuterPseudoLayer())).GetMagnitude());
55 for (
const Cluster *
const pClusterR : sortedRemnantClusters)
60 const float innerRV((vertexPosition2D - pClusterR->GetCentroid(pClusterR->GetInnerPseudoLayer())).GetMagnitude());
61 const float outerRV((vertexPosition2D - pClusterR->GetCentroid(pClusterR->GetOuterPseudoLayer())).GetMagnitude());
71 const float minSeparation(std::min(innerRP, outerRP));
83 if (!associationDetails.insert(AssociationDetails::value_type(pClusterP, figureOfMerit)).second)
Header file for the cluster helper class.
Header file for the geometry helper class.
Header file for the nearby cluster mop up algorithm class.
#define PANDORA_THROW_RESULT_IF(StatusCode1, Operator, Command)
#define PANDORA_RETURN_RESULT_IF_AND_IF(StatusCode1, StatusCode2, Operator, Command)
static pandora::StatusCode GetCurrentList(const pandora::Algorithm &algorithm, const T *&pT)
Get the current list.
std::unordered_map< const pandora::Cluster *, AssociationDetails > ClusterAssociationMap
virtual pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
virtual void MakeClusterMerges(const ClusterAssociationMap &clusterAssociationMap) const
Make the cluster merges specified in the cluster association map, using list name information in the ...
std::unordered_map< const pandora::Cluster *, float > AssociationDetails
static pandora::HitType GetClusterHitType(const pandora::Cluster *const pCluster)
Get the hit type associated with a two dimensional cluster.
static bool SortByNHits(const pandora::Cluster *const pLhs, const pandora::Cluster *const pRhs)
Sort clusters by number of hits, then layer span, then inner layer, then position,...
static float GetClosestDistance(const pandora::ClusterList &clusterList1, const pandora::ClusterList &clusterList2)
Get closest distance between clusters in a pair of cluster lists.
static pandora::CartesianVector ProjectPosition(const pandora::Pandora &pandora, const pandora::CartesianVector &position3D, const pandora::HitType view)
Project 3D position into a given 2D view.
void ClusterMopUp(const pandora::ClusterList &pfoClusters, const pandora::ClusterList &remnantClusters) const
Cluster mop up for a single view. This function is responsible for instructing pandora to make cluste...
float m_minClusterSeparation
Minimum distance between parent and daughter clusters to declare clusters associated.
float m_vertexProximity
Distance between cluster inner/outer centroid and vtx to declare cluster vtx associated.
float m_touchingDistance
Threshold (small) distance below which parent and daughter clusters are declated touching.
NearbyClusterMopUpAlgorithm()
Default constructor.
unsigned int m_minHitsInCluster
Minimum number of hits in order to consider a cluster.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
const Pandora & GetPandora() const
Get the associated pandora instance.
StatusCodeException class.
const CartesianVector & GetPosition() const
Get the vertex position.
static StatusCode ReadValue(const TiXmlHandle &xmlHandle, const std::string &xmlElementName, T &t)
Read a value from an xml element.
HitType
Calorimeter hit type enum.
std::vector< const Cluster * > ClusterVector
MANAGED_CONTAINER< const Cluster * > ClusterList
MANAGED_CONTAINER< const Vertex * > VertexList
StatusCode
The StatusCode enum.