8 #ifndef LAR_TRACK_CLUSTER_CREATION_ALGORITHM_H
9 #define LAR_TRACK_CLUSTER_CREATION_ALGORITHM_H 1
11 #include "Pandora/Algorithm.h"
13 #include <unordered_map>
42 HitAssociation(
const pandora::CaloHit *
const pPrimaryTarget,
const float primaryDistanceSquared);
50 void SetSecondaryTarget(
const pandora::CaloHit *
const pSecondaryTarget,
const float secondaryDistanceSquared);
88 typedef std::unordered_map<const pandora::CaloHit *, const pandora::CaloHit *>
HitJoinMap;
89 typedef std::unordered_map<const pandora::CaloHit *, const pandora::Cluster *>
HitToClusterMap;
91 pandora::StatusCode
Run();
92 pandora::StatusCode
ReadSettings(
const pandora::TiXmlHandle xmlHandle);
101 pandora::StatusCode
FilterCaloHits(
const pandora::CaloHitList *
const pCaloHitList, pandora::OrderedCaloHitList &selectedCaloHitList,
102 pandora::OrderedCaloHitList &rejectedCaloHitList)
const;
111 pandora::StatusCode
AddFilteredCaloHits(
const pandora::OrderedCaloHitList &selectedCaloHitList,
112 const pandora::OrderedCaloHitList &rejectedCaloHitList,
HitToClusterMap &hitToClusterMap)
const;
211 m_pPrimaryTarget(pPrimaryTarget),
212 m_pSecondaryTarget(NULL),
213 m_primaryDistanceSquared(primaryDistanceSquared),
214 m_secondaryDistanceSquared(
std::numeric_limits<float>::max())
222 m_pSecondaryTarget = pSecondaryTarget;
223 m_secondaryDistanceSquared = secondaryDistanceSquared;
230 return m_pPrimaryTarget;
237 return m_pSecondaryTarget;
244 return m_primaryDistanceSquared;
251 return m_secondaryDistanceSquared;
256 #endif // #ifndef LAR_TRACK_CLUSTER_CREATION_ALGORITHM_H
const pandora::CaloHit * m_pSecondaryTarget
the secondary target
std::unordered_map< const pandora::CaloHit *, const pandora::Cluster * > HitToClusterMap
double std(const std::vector< short > &wf, const double ped_mean, size_t start, size_t nsample)
pandora::StatusCode FilterCaloHits(const pandora::CaloHitList *const pCaloHitList, pandora::OrderedCaloHitList &selectedCaloHitList, pandora::OrderedCaloHitList &rejectedCaloHitList) const
Filter out low pulse height hits in close proximity to high pulse height hits.
TrackClusterCreationAlgorithm()
Default constructor.
float m_primaryDistanceSquared
the primary distance squared
float m_maxCaloHitSeparationSquared
Square of maximum calo hit separation.
pandora::StatusCode AddFilteredCaloHits(const pandora::OrderedCaloHitList &selectedCaloHitList, const pandora::OrderedCaloHitList &rejectedCaloHitList, HitToClusterMap &hitToClusterMap) const
Merge previously filtered hits back into their associated clusters.
void IdentifyJoins(const pandora::OrderedCaloHitList &orderedCaloHitList, const HitAssociationMap &forwardHitAssociationMap, const HitAssociationMap &backwardHitAssociationMap, HitJoinMap &hitJoinMap) const
Identify final hit joins for use in cluster formation.
pandora::StatusCode Run()
float GetSecondaryDistanceSquared() const
Get the secondary distance squared.
std::unordered_map< const pandora::CaloHit *, HitAssociation > HitAssociationMap
void MakePrimaryAssociations(const pandora::OrderedCaloHitList &orderedCaloHitList, HitAssociationMap &forwardHitAssociationMap, HitAssociationMap &backwardHitAssociationMap) const
Control primary association formation.
const pandora::CaloHit * GetPrimaryTarget() const
Get the primary target.
std::unordered_map< const pandora::CaloHit *, const pandora::CaloHit * > HitJoinMap
float GetPrimaryDistanceSquared() const
Get the primary distance squared.
void SetSecondaryTarget(const pandora::CaloHit *const pSecondaryTarget, const float secondaryDistanceSquared)
Set secondary target.
void CreateClusters(const pandora::OrderedCaloHitList &orderedCaloHitList, const HitJoinMap &hitJoinMap, HitToClusterMap &hitToClusterMap) const
Final cluster formation.
void CreatePrimaryAssociation(const pandora::CaloHit *const pCaloHitI, const pandora::CaloHit *const pCaloHitJ, HitAssociationMap &forwardHitAssociationMap, HitAssociationMap &backwardHitAssociationMap) const
Create primary association if appropriate, hitI<->hitJ.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
unsigned int m_maxGapLayers
Maximum number of layers for a gap.
const pandora::CaloHit * GetSecondaryTarget() const
Get the secondary target.
float m_secondaryDistanceSquared
the secondary distance squared
TrackClusterCreationAlgorithm class.
const pandora::CaloHit * m_pPrimaryTarget
the primary target
const pandora::CaloHit * GetJoinHit(const pandora::CaloHit *const pCaloHit, const HitAssociationMap &hitAssociationMapI, const HitAssociationMap &hitAssociationMapJ) const
Get hit to join by tracing associations via map I, checking via map J.
bool m_mergeBackFilteredHits
Merge rejected hits into their associated clusters.
void MakeSecondaryAssociations(const pandora::OrderedCaloHitList &orderedCaloHitList, HitAssociationMap &forwardHitAssociationMap, HitAssociationMap &backwardHitAssociationMap) const
Control secondary association formation.
HitAssociation(const pandora::CaloHit *const pPrimaryTarget, const float primaryDistanceSquared)
Constructor.
void CreateSecondaryAssociation(const pandora::CaloHit *const pCaloHitI, const pandora::CaloHit *const pCaloHitJ, HitAssociationMap &forwardHitAssociationMap, HitAssociationMap &backwardHitAssociationMap) const
Create secondary association if appropriate, hitI<->hitJ.
float m_minCaloHitSeparationSquared
Square of minimum calo hit separation.
float m_closeSeparationSquared
Length scale (squared) for close hit separation.
const pandora::CaloHit * TraceHitAssociation(const pandora::CaloHit *const pCaloHit, const HitAssociationMap &hitAssociationMapI, const HitAssociationMap &hitAssociationMapJ, unsigned int &nSteps) const
Get last hit obtained by tracing associations via map I, checking via map J.