Pandora
Pandora source code navigator
Loading...
Searching...
No Matches
TrackClusterCreationAlgorithm.h
Go to the documentation of this file.
1
8#ifndef LAR_TRACK_CLUSTER_CREATION_ALGORITHM_H
9#define LAR_TRACK_CLUSTER_CREATION_ALGORITHM_H 1
10
11#include "Pandora/Algorithm.h"
12
13#include <unordered_map>
14
15namespace lar_content
16{
17
22{
23public:
28
29private:
34 {
35 public:
42 HitAssociation(const pandora::CaloHit *const pPrimaryTarget, const float primaryDistanceSquared);
43
50 void SetSecondaryTarget(const pandora::CaloHit *const pSecondaryTarget, const float secondaryDistanceSquared);
51
58
65
71 float GetPrimaryDistanceSquared() const;
72
78 float GetSecondaryDistanceSquared() const;
79
80 private:
85 };
86
87 typedef std::unordered_map<const pandora::CaloHit *, HitAssociation> HitAssociationMap;
88 typedef std::unordered_map<const pandora::CaloHit *, const pandora::CaloHit *> HitJoinMap;
89 typedef std::unordered_map<const pandora::CaloHit *, const pandora::Cluster *> HitToClusterMap;
90
93
101 pandora::StatusCode FilterCaloHits(const pandora::CaloHitList *const pCaloHitList, pandora::OrderedCaloHitList &selectedCaloHitList,
102 pandora::OrderedCaloHitList &rejectedCaloHitList) const;
103
112 const pandora::OrderedCaloHitList &rejectedCaloHitList, HitToClusterMap &hitToClusterMap) const;
113
121 void MakePrimaryAssociations(const pandora::OrderedCaloHitList &orderedCaloHitList, HitAssociationMap &forwardHitAssociationMap,
122 HitAssociationMap &backwardHitAssociationMap) const;
123
131 void MakeSecondaryAssociations(const pandora::OrderedCaloHitList &orderedCaloHitList, HitAssociationMap &forwardHitAssociationMap,
132 HitAssociationMap &backwardHitAssociationMap) const;
133
142 void IdentifyJoins(const pandora::OrderedCaloHitList &orderedCaloHitList, const HitAssociationMap &forwardHitAssociationMap,
143 const HitAssociationMap &backwardHitAssociationMap, HitJoinMap &hitJoinMap) const;
144
152 void CreateClusters(const pandora::OrderedCaloHitList &orderedCaloHitList, const HitJoinMap &hitJoinMap, HitToClusterMap &hitToClusterMap) const;
153
162 void CreatePrimaryAssociation(const pandora::CaloHit *const pCaloHitI, const pandora::CaloHit *const pCaloHitJ,
163 HitAssociationMap &forwardHitAssociationMap, HitAssociationMap &backwardHitAssociationMap) const;
164
173 void CreateSecondaryAssociation(const pandora::CaloHit *const pCaloHitI, const pandora::CaloHit *const pCaloHitJ,
174 HitAssociationMap &forwardHitAssociationMap, HitAssociationMap &backwardHitAssociationMap) const;
175
185 const pandora::CaloHit *GetJoinHit(const pandora::CaloHit *const pCaloHit, const HitAssociationMap &hitAssociationMapI,
186 const HitAssociationMap &hitAssociationMapJ) const;
187
198 const pandora::CaloHit *TraceHitAssociation(const pandora::CaloHit *const pCaloHit, const HitAssociationMap &hitAssociationMapI,
199 const HitAssociationMap &hitAssociationMapJ, unsigned int &nSteps) const;
200
202 unsigned int m_maxGapLayers;
206};
207
208//------------------------------------------------------------------------------------------------------------------------------------------
209
210inline TrackClusterCreationAlgorithm::HitAssociation::HitAssociation(const pandora::CaloHit *const pPrimaryTarget, const float primaryDistanceSquared) :
211 m_pPrimaryTarget(pPrimaryTarget),
212 m_pSecondaryTarget(NULL),
213 m_primaryDistanceSquared(primaryDistanceSquared),
214 m_secondaryDistanceSquared(std::numeric_limits<float>::max())
215{
216}
217
218//------------------------------------------------------------------------------------------------------------------------------------------
219
220inline void TrackClusterCreationAlgorithm::HitAssociation::SetSecondaryTarget(const pandora::CaloHit *const pSecondaryTarget, const float secondaryDistanceSquared)
221{
222 m_pSecondaryTarget = pSecondaryTarget;
223 m_secondaryDistanceSquared = secondaryDistanceSquared;
224}
225
226//------------------------------------------------------------------------------------------------------------------------------------------
227
229{
230 return m_pPrimaryTarget;
231}
232
233//------------------------------------------------------------------------------------------------------------------------------------------
234
236{
237 return m_pSecondaryTarget;
238}
239
240//------------------------------------------------------------------------------------------------------------------------------------------
241
243{
244 return m_primaryDistanceSquared;
245}
246
247//------------------------------------------------------------------------------------------------------------------------------------------
248
250{
251 return m_secondaryDistanceSquared;
252}
253
254} // namespace lar_content
255
256#endif // #ifndef LAR_TRACK_CLUSTER_CREATION_ALGORITHM_H
Header file for the algorithm class.
HitAssociation(const pandora::CaloHit *const pPrimaryTarget, const float primaryDistanceSquared)
Constructor.
const pandora::CaloHit * GetPrimaryTarget() const
Get the primary target.
const pandora::CaloHit * GetSecondaryTarget() const
Get the secondary target.
void SetSecondaryTarget(const pandora::CaloHit *const pSecondaryTarget, const float secondaryDistanceSquared)
Set secondary target.
float GetSecondaryDistanceSquared() const
Get the secondary distance squared.
float GetPrimaryDistanceSquared() const
Get the primary distance squared.
void MakePrimaryAssociations(const pandora::OrderedCaloHitList &orderedCaloHitList, HitAssociationMap &forwardHitAssociationMap, HitAssociationMap &backwardHitAssociationMap) const
Control primary association formation.
unsigned int m_maxGapLayers
Maximum number of layers for a gap.
void IdentifyJoins(const pandora::OrderedCaloHitList &orderedCaloHitList, const HitAssociationMap &forwardHitAssociationMap, const HitAssociationMap &backwardHitAssociationMap, HitJoinMap &hitJoinMap) const
Identify final hit joins for use in cluster formation.
std::unordered_map< const pandora::CaloHit *, const pandora::Cluster * > HitToClusterMap
bool m_mergeBackFilteredHits
Merge rejected hits into their associated clusters.
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.
void CreateClusters(const pandora::OrderedCaloHitList &orderedCaloHitList, const HitJoinMap &hitJoinMap, HitToClusterMap &hitToClusterMap) const
Final cluster formation.
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.
float m_maxCaloHitSeparationSquared
Square of maximum calo hit separation.
std::unordered_map< const pandora::CaloHit *, const pandora::CaloHit * > HitJoinMap
float m_minCaloHitSeparationSquared
Square of minimum calo hit separation.
void CreateSecondaryAssociation(const pandora::CaloHit *const pCaloHitI, const pandora::CaloHit *const pCaloHitJ, HitAssociationMap &forwardHitAssociationMap, HitAssociationMap &backwardHitAssociationMap) const
Create secondary association if appropriate, hitI<->hitJ.
void MakeSecondaryAssociations(const pandora::OrderedCaloHitList &orderedCaloHitList, HitAssociationMap &forwardHitAssociationMap, HitAssociationMap &backwardHitAssociationMap) const
Control secondary association formation.
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.
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 AddFilteredCaloHits(const pandora::OrderedCaloHitList &selectedCaloHitList, const pandora::OrderedCaloHitList &rejectedCaloHitList, HitToClusterMap &hitToClusterMap) const
Merge previously filtered hits back into their associated clusters.
std::unordered_map< const pandora::CaloHit *, HitAssociation > HitAssociationMap
float m_closeSeparationSquared
Length scale (squared) for close hit separation.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
Read the algorithm settings.
Algorithm class. Algorithm addresses are held only by the algorithm manager. They have a fully define...
Definition Algorithm.h:21
CaloHit class.
Definition CaloHit.h:26
Calo hit lists arranged by pseudo layer.
MANAGED_CONTAINER< const CaloHit * > CaloHitList
StatusCode
The StatusCode enum.