35 if (caloHitList.empty())
36 return STATUS_CODE_SUCCESS;
45 return STATUS_CODE_SUCCESS;
52 for (
const CaloHit *
const pCaloHit : *pInputList)
55 outputList.push_back(pCaloHit);
63 for (
const CaloHit *
const pCaloHitI : caloHitList)
65 for (
const CaloHit *
const pCaloHitJ : caloHitList)
67 if (pCaloHitI == pCaloHitJ)
72 CaloHitList &caloHitListI(hitAssociationMap[pCaloHitI]);
74 if (caloHitListI.end() == std::find(caloHitListI.begin(), caloHitListI.end(), pCaloHitJ))
75 caloHitListI.push_back(pCaloHitJ);
77 CaloHitList &caloHitListJ(hitAssociationMap[pCaloHitI]);
79 if (caloHitListJ.end() == std::find(caloHitListJ.begin(), caloHitListJ.end(), pCaloHitI))
80 caloHitListJ.push_back(pCaloHitI);
91 CaloHitVector caloHitVector(caloHitList.begin(), caloHitList.end());
94 for (
const CaloHit *
const pSeedCaloHit : caloHitVector)
96 if (vetoList.count(pSeedCaloHit))
102 const Cluster *pCluster = NULL;
103 PandoraContentApi::Cluster::Parameters parameters;
104 parameters.m_caloHitList.push_back(pSeedCaloHit);
105 PANDORA_THROW_RESULT_IF(STATUS_CODE_SUCCESS, !=, PandoraContentApi::Cluster::Create(*
this, parameters, pCluster));
106 vetoList.insert(pSeedCaloHit);
108 for (
const CaloHit *
const pAssociatedCaloHit : mergeList)
111 vetoList.insert(pAssociatedCaloHit);
121 if (vetoList.count(pCurrentCaloHit))
124 HitAssociationMap::const_iterator iter1 = hitAssociationMap.find(pCurrentCaloHit);
125 if (iter1 == hitAssociationMap.end())
128 CaloHitVector caloHitVector(iter1->second.begin(), iter1->second.end());
131 for (
const CaloHit *
const pAssociatedCaloHit : caloHitVector)
133 if (pAssociatedCaloHit == pSeedCaloHit)
136 if (mergeList.end() != std::find(mergeList.begin(), mergeList.end(), pAssociatedCaloHit))
139 mergeList.push_back(pAssociatedCaloHit);
141 this->
CollectAssociatedHits(pSeedCaloHit, pAssociatedCaloHit, hitAssociationMap, vetoList, mergeList);
152 return STATUS_CODE_SUCCESS;
Header file for the cluster helper class.
Header file for the cluster creation algorithm class.
#define PANDORA_THROW_RESULT_IF(StatusCode1, Operator, Command)
#define PANDORA_RETURN_RESULT_IF_AND_IF(StatusCode1, StatusCode2, Operator, Command)
#define PANDORA_RETURN_RESULT_IF(StatusCode1, Operator, Command)
static bool IsAvailable(const pandora::Algorithm &algorithm, const T *const pT)
Is object, or a list of objects, available as a building block.
static pandora::StatusCode GetCurrentList(const pandora::Algorithm &algorithm, const T *&pT)
Get the current list.
static pandora::StatusCode AddToCluster(const pandora::Algorithm &algorithm, const pandora::Cluster *const pCluster, const T *const pT)
Add a calo hit, or a list of calo hits, to a cluster.
static bool SortHitsByPosition(const pandora::CaloHit *const pLhs, const pandora::CaloHit *const pRhs)
Sort calo hits by their position (use Z, followed by X, followed by Y)
void CreateClusters(const pandora::CaloHitList &caloHitList, const HitAssociationMap &hitAssociationMap) const
Create clusters from selected calo hits and their associations.
SimpleClusterCreationAlgorithm()
Default constructor.
void SelectCaloHits(const pandora::CaloHitList *const pInputList, pandora::CaloHitList &outputList) const
Select calo hits for clustering.
std::unordered_map< const pandora::CaloHit *, pandora::CaloHitList > HitAssociationMap
void CollectAssociatedHits(const pandora::CaloHit *const pSeedCaloHit, const pandora::CaloHit *const pCurrentCaloHit, const HitAssociationMap &hitAssociationMap, const pandora::CaloHitSet &vetoList, pandora::CaloHitList &mergeList) const
For a given seed calo hits, collect up all the associated calo hits.
pandora::StatusCode Run()
Run the algorithm.
void BuildAssociationMap(const pandora::CaloHitList &caloHitList, HitAssociationMap &hitAssociationMap) const
Create map of associations between calo hits.
float m_clusteringWindowSquared
Maximum distance (squared) for two hits to be joined.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
static StatusCode ReadValue(const TiXmlHandle &xmlHandle, const std::string &xmlElementName, T &t)
Read a value from an xml element.
std::vector< const CaloHit * > CaloHitVector
std::unordered_set< const CaloHit * > CaloHitSet
MANAGED_CONTAINER< const CaloHit * > CaloHitList
StatusCode
The StatusCode enum.