LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
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 
15 namespace lar_content
16 {
17 
21 class TrackClusterCreationAlgorithm : public pandora::Algorithm
22 {
23 public:
28 
29 private:
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 
57  const pandora::CaloHit *GetPrimaryTarget() const;
58 
64  const pandora::CaloHit *GetSecondaryTarget() const;
65 
71  float GetPrimaryDistanceSquared() const;
72 
78  float GetSecondaryDistanceSquared() const;
79 
80  private:
81  const pandora::CaloHit *m_pPrimaryTarget;
82  const pandora::CaloHit *m_pSecondaryTarget;
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 
91  pandora::StatusCode Run();
92  pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle);
93 
101  pandora::StatusCode FilterCaloHits(const pandora::CaloHitList *const pCaloHitList, pandora::OrderedCaloHitList &selectedCaloHitList, pandora::OrderedCaloHitList& rejectedCaloHitList) const;
102 
110  pandora::StatusCode AddFilteredCaloHits(const pandora::OrderedCaloHitList &selectedCaloHitList, const pandora::OrderedCaloHitList& rejectedCaloHitList, HitToClusterMap& hitToClusterMap) const;
111 
119  void MakePrimaryAssociations(const pandora::OrderedCaloHitList &orderedCaloHitList, HitAssociationMap &forwardHitAssociationMap,
120  HitAssociationMap &backwardHitAssociationMap) const;
121 
129  void MakeSecondaryAssociations(const pandora::OrderedCaloHitList &orderedCaloHitList, HitAssociationMap &forwardHitAssociationMap,
130  HitAssociationMap &backwardHitAssociationMap) const;
131 
140  void IdentifyJoins(const pandora::OrderedCaloHitList &orderedCaloHitList, const HitAssociationMap &forwardHitAssociationMap,
141  const HitAssociationMap &backwardHitAssociationMap, HitJoinMap &hitJoinMap) const;
142 
150  void CreateClusters(const pandora::OrderedCaloHitList &orderedCaloHitList, const HitJoinMap &hitJoinMap, HitToClusterMap& hitToClusterMap) const;
151 
160  void CreatePrimaryAssociation(const pandora::CaloHit *const pCaloHitI, const pandora::CaloHit *const pCaloHitJ, HitAssociationMap &forwardHitAssociationMap,
161  HitAssociationMap &backwardHitAssociationMap) const;
162 
171  void CreateSecondaryAssociation(const pandora::CaloHit *const pCaloHitI, const pandora::CaloHit *const pCaloHitJ, HitAssociationMap &forwardHitAssociationMap,
172  HitAssociationMap &backwardHitAssociationMap) const;
173 
183  const pandora::CaloHit *GetJoinHit(const pandora::CaloHit *const pCaloHit, const HitAssociationMap &hitAssociationMapI, const HitAssociationMap &hitAssociationMapJ) const;
184 
195  const pandora::CaloHit *TraceHitAssociation(const pandora::CaloHit *const pCaloHit, const HitAssociationMap &hitAssociationMapI, const HitAssociationMap &hitAssociationMapJ,
196  unsigned int &nSteps) const;
197 
199  unsigned int m_maxGapLayers;
203 };
204 
205 //------------------------------------------------------------------------------------------------------------------------------------------
206 
207 inline TrackClusterCreationAlgorithm::HitAssociation::HitAssociation(const pandora::CaloHit *const pPrimaryTarget, const float primaryDistanceSquared) :
208  m_pPrimaryTarget(pPrimaryTarget),
209  m_pSecondaryTarget(NULL),
210  m_primaryDistanceSquared(primaryDistanceSquared),
211  m_secondaryDistanceSquared(std::numeric_limits<float>::max())
212 {
213 }
214 
215 //------------------------------------------------------------------------------------------------------------------------------------------
216 
217 inline void TrackClusterCreationAlgorithm::HitAssociation::SetSecondaryTarget(const pandora::CaloHit *const pSecondaryTarget, const float secondaryDistanceSquared)
218 {
219  m_pSecondaryTarget = pSecondaryTarget;
220  m_secondaryDistanceSquared = secondaryDistanceSquared;
221 }
222 
223 //------------------------------------------------------------------------------------------------------------------------------------------
224 
226 {
227  return m_pPrimaryTarget;
228 }
229 
230 //------------------------------------------------------------------------------------------------------------------------------------------
231 
233 {
234  return m_pSecondaryTarget;
235 }
236 
237 //------------------------------------------------------------------------------------------------------------------------------------------
238 
240 {
242 }
243 
244 //------------------------------------------------------------------------------------------------------------------------------------------
245 
247 {
249 }
250 
251 } // namespace lar_content
252 
253 #endif // #ifndef LAR_TRACK_CLUSTER_CREATION_ALGORITHM_H
const pandora::CaloHit * m_pSecondaryTarget
the secondary target
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.
float m_maxCaloHitSeparationSquared
Square of maximum calo hit separation.
STL namespace.
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.
float GetSecondaryDistanceSquared() const
Get the secondary distance squared.
Int_t max
Definition: plot.C:27
void MakePrimaryAssociations(const pandora::OrderedCaloHitList &orderedCaloHitList, HitAssociationMap &forwardHitAssociationMap, HitAssociationMap &backwardHitAssociationMap) const
Control primary association formation.
std::unordered_map< const pandora::CaloHit *, const pandora::CaloHit * > HitJoinMap
const pandora::CaloHit * GetPrimaryTarget() const
Get the primary target.
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.
std::unordered_map< const pandora::CaloHit *, HitAssociation > HitAssociationMap
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
std::unordered_map< const pandora::CaloHit *, const pandora::Cluster * > HitToClusterMap
unsigned int m_maxGapLayers
Maximum number of layers for a gap.
const pandora::CaloHit * GetSecondaryTarget() const
Get the secondary 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.