22 m_minTrackLength(7.5f),
23 m_maxClusterLength(15.f),
24 m_halfWindowLayers(25)
45 this->
GetReclusteredHits(slidingFitResultList, showerClusters, clustersToExpand, clustersToContract);
53 return STATUS_CODE_SUCCESS;
61 for (ClusterList::const_iterator iter = pClusterList->begin(), iterEnd = pClusterList->end(); iter != iterEnd; ++iter)
63 const Cluster *
const pCluster = *iter;
68 showerClusters.push_back(pCluster);
71 trackClusters.push_back(pCluster);
84 for (ClusterVector::const_iterator iter = trackClusters.begin(), iterEnd = trackClusters.end(); iter != iterEnd; ++iter)
89 slidingFitResultList.push_back(slidingFitResult);
93 if (STATUS_CODE_FAILURE == statusCodeException.
GetStatusCode())
94 throw statusCodeException;
104 for (
const auto &mapEntry : clustersToContract)
105 clusterList.push_back(mapEntry.first);
108 for (
const Cluster *
const pCluster : clusterList)
110 const CaloHitList &caloHitListToRemove(clustersToContract.at(pCluster));
112 if (caloHitListToRemove.empty())
115 if (unavailableClusters.count(pCluster))
119 pCluster->GetOrderedCaloHitList().FillCaloHitList(caloHitList);
121 for (
const CaloHit *
const pCaloHit : caloHitList)
123 if (caloHitListToRemove.end() == std::find(caloHitListToRemove.begin(), caloHitListToRemove.end(), pCaloHit))
124 caloHitListToKeep.push_back(pCaloHit);
127 if (caloHitListToKeep.empty())
130 unavailableClusters.insert(pCluster);
135 for (
const CaloHit *
const pCaloHit : caloHitListToRemove)
141 return STATUS_CODE_SUCCESS;
150 for (
const auto &mapEntry : clustersToExpand)
152 if (!unavailableClusters.count(mapEntry.first))
153 clusterList.push_back(mapEntry.first);
158 for (
const Cluster *
const pCluster : clusterList)
160 const CaloHitList &caloHitList(clustersToExpand.at(pCluster));
162 if (caloHitList.empty())
165 if (unavailableClusters.count(pCluster))
168 unavailableClusters.insert(pCluster);
170 for (
const CaloHit *
const pCaloHit : caloHitList)
176 return STATUS_CODE_SUCCESS;
183 if (clustersToRebuild.empty())
184 return STATUS_CODE_SUCCESS;
187 for (
const auto &mapEntry : clustersToRebuild)
189 if (!unavailableClusters.count(mapEntry.first))
190 sortedClusters.push_back(mapEntry.first);
195 for (
const Cluster *
const pCluster : sortedClusters)
197 const CaloHitList &caloHitList(clustersToRebuild.at(pCluster));
198 const Cluster *
const pClusterToDelete(pCluster);
200 if (caloHitList.empty())
203 std::string currentClusterListName;
208 std::string newClusterListName;
216 return STATUS_CODE_SUCCESS;
233 return STATUS_CODE_SUCCESS;
Header file for the cluster helper class.
Header file for the geometry helper class.
#define PANDORA_RETURN_RESULT_IF_AND_IF(StatusCode1, StatusCode2, Operator, Command)
#define PANDORA_RETURN_RESULT_IF(StatusCode1, Operator, Command)
Header file for the 2D sliding fit consolidation algorithm class.
static pandora::StatusCode ReplaceCurrentList(const pandora::Algorithm &algorithm, const std::string &newListName)
Replace the current list with a pre-saved list; use this new list as a permanent replacement for the ...
static pandora::StatusCode RunClusteringAlgorithm(const pandora::Algorithm &algorithm, const std::string &clusteringAlgorithmName, const pandora::ClusterList *&pNewClusterList, std::string &newClusterListName)
Run a clustering algorithm (an algorithm that will create new cluster objects)
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 pandora::StatusCode RemoveFromCluster(const pandora::Algorithm &algorithm, const pandora::Cluster *const pCluster, const pandora::CaloHit *const pCaloHit)
Remove a calo hit from a cluster. Note this function will not remove the final calo hit from a cluste...
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 GetLengthSquared(const pandora::Cluster *const pCluster)
Get length squared of cluster.
static float GetWireZPitch(const pandora::Pandora &pandora, const float maxWirePitchDiscrepancy=0.01)
Return the wire pitch.
pandora::StatusCode RemoveHitsFromClusters(const ClusterToHitMap &clustersToRebuild, pandora::ClusterSet &unavailableClusters) const
Remove hits from clusters.
float m_maxClusterLength
Maximum length of shower clusters to use in re-building.
std::string m_reclusteringAlgorithmName
Name of daughter algorithm to use for cluster re-building.
unsigned int m_halfWindowLayers
Size of layer window for sliding fit results.
TwoDSlidingFitConsolidationAlgorithm()
Default constructor.
pandora::StatusCode AddHitsToClusters(const ClusterToHitMap &clustersToRebuild, pandora::ClusterSet &unavailableClusters) const
Add hits to clusters.
void SortInputClusters(const pandora::ClusterList *const pClusterList, pandora::ClusterVector &trackClusters, pandora::ClusterVector &showerClusters) const
Sort input cluster list into track-like clusters and shower-like clusters.
virtual void GetReclusteredHits(const TwoDSlidingFitResultList &slidingFitResultList, const pandora::ClusterVector &showerClusters, ClusterToHitMap &caloHitsToAdd, ClusterToHitMap &caloHitsToRemove) const =0
Get the list of hits to be added or removed from clusters.
float m_minTrackLength
Minimum length of track clusters to consolidate.
std::unordered_map< const pandora::Cluster *, pandora::CaloHitList > ClusterToHitMap
void BuildSlidingLinearFits(const pandora::ClusterVector &trackClusters, TwoDSlidingFitResultList &slidingFitResultList) const
Apply sliding linear fits to track clusters.
pandora::StatusCode Run()
Run the algorithm.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
pandora::StatusCode RebuildClusters(const ClusterToHitMap &clustersAtStart, const pandora::ClusterSet &unavailableClusters) const
Re-build clusters.
TwoDSlidingFitResult class.
const Pandora & GetPandora() const
Get the associated pandora instance.
StatusCodeException class.
StatusCode GetStatusCode() const
Get status code.
static StatusCode ProcessAlgorithm(const Algorithm &algorithm, const TiXmlHandle &xmlHandle, const std::string &description, std::string &algorithmName)
Process an algorithm described in an xml element with a matching "description = .....
static StatusCode ReadValue(const TiXmlHandle &xmlHandle, const std::string &xmlElementName, T &t)
Read a value from an xml element.
std::vector< TwoDSlidingFitResult > TwoDSlidingFitResultList
std::vector< const Cluster * > ClusterVector
MANAGED_CONTAINER< const Cluster * > ClusterList
std::unordered_set< const Cluster * > ClusterSet
MANAGED_CONTAINER< const CaloHit * > CaloHitList
StatusCode
The StatusCode enum.