APRILContent
Algorithm of Particle Reconstruction for ILC - implementation with PandoraSDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations
ClusterHelper.h
Go to the documentation of this file.
1 /*
3  *
4  * ClusterHelper.h header template automatically generated by a class generator
5  * Creation date : ven. avr. 10 2015
6  *
7  * This file is part of APRILContent libraries.
8  *
9  * APRILContent is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  * based upon these libraries are permitted. Any copy of these libraries
14  * must include this copyright notice.
15  *
16  * APRILContent is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with APRILContent. If not, see <http://www.gnu.org/licenses/>.
23  *
24  * @author Remi Ete
25  * @copyright CNRS , IPNL
26  */
27 
28 
29 #ifndef CLUSTERHELPER_H
30 #define CLUSTERHELPER_H
31 
32 #include "Pandora/PandoraInternal.h"
33 #include "Pandora/PandoraInputTypes.h"
35 #include "Helpers/ClusterFitHelper.h"
36 
37 namespace april_content
38 {
39 
44 {
45 public:
51  ClusterPca(const pandora::Cluster *const pCluster);
52 
60  float GetEigenValue(int component) const;
61 
69  const pandora::CartesianVector &GetEigenVector(int component) const;
70 
74  float GetTransverseRatio() const;
75 
79  const pandora::Cluster *GetCluster() const;
80 
81 private:
85  struct Component
86  {
90  Component();
91 
92  float m_eigenValue;
93  pandora::CartesianVector m_eigenVector;
94  };
95 
98  const pandora::Cluster *m_pCluster;
99 };
100 
101 //------------------------------------------------------------------------------------------------------------------------------------------
102 //------------------------------------------------------------------------------------------------------------------------------------------
103 
108 {
109 public:
116  static pandora::StatusCode GetCentroid(const pandora::Cluster *const pCluster, pandora::CartesianVector &centroid);
117 
125  static pandora::StatusCode GetClosestDistanceApproach(const pandora::Cluster *const pCluster, const pandora::CartesianVector &point,
126  float &closestDistance, bool onlyUseConnectedHit = true);
127 
128  static pandora::StatusCode GetClosestDistanceApproach(const pandora::CaloHitList& caloHitList, const pandora::CartesianVector &point,
129  float &closestDistance, bool onlyUseConnectedHit = true);
130 
138  static pandora::StatusCode GetCentroidDistance(const pandora::Cluster *const pCluster, const pandora::CartesianVector &point,
139  float &centroidDistance);
140 
141  static float GetHadronicEnergyInECAL(const pandora::Cluster *const pCluster);
142  static float GetEnergyRatio(const pandora::OrderedCaloHitList& orderedCaloHitList);
143  static pandora::StatusCode GetEnergyRatio(const pandora::OrderedCaloHitList& orderedCaloHitList, float& energyRatio, unsigned int& nHits);
144 
145  static pandora::HitRegion GetRegion(const pandora::Cluster *const pCluster);
146 
147  static float GetElectromagneticEnergyInECAL(const pandora::Cluster *const pCluster);
148 
149  static pandora::StatusCode GetClusterVolume(const pandora::Cluster *const pCluster, float& clusterVolume);
150 
151  static pandora::StatusCode FitStart(const pandora::Cluster *const pCluster, const unsigned int maxOccupiedLayers, pandora::ClusterFitResult &clusterFitResult);
152 
153  static pandora::StatusCode FitFullCluster(const pandora::Cluster *const pCluster, pandora::ClusterFitResult &clusterFitResult, bool useMainCluster = false, float eps = 50.);
154 
155  static pandora::StatusCode GetMainClusterHits(const pandora::Cluster *const pCluster, pandora::CaloHitList& mainClusterHits);
156 
157  static pandora::OrderedCaloHitList GetOrderedConnectedCaloHitList(const pandora::Cluster *const pCluster);
158 
159  static float GetClusterAxisStartingPointAngle(const pandora::Cluster *const pCluster);
160 
161  static void GetShowerStartingPoint(const pandora::Cluster *const pCluster, pandora::CartesianVector& startingPoint);
162  static void GetShowerStartingLayer(const pandora::Cluster *const pCluster, int& showerStartLayer);
163 
171  static pandora::StatusCode GetClosestDistanceApproach(const pandora::Cluster *const pCluster, const pandora::CartesianVector &point,
172  float &closestDistance, pandora::CartesianVector& distanceVector, bool onlyUseConnectedHit = true);
173 
174  static pandora::StatusCode GetClosestDistanceApproach(const pandora::Cluster *const pCluster1, const pandora::Cluster *const pCluster2,
175  float &closestDistance, pandora::CartesianVector& distanceVector, bool onlyUseConnectedHit = true);
176 
177  static pandora::StatusCode GetClosestDistanceApproach(const pandora::Cluster *const pCluster1, const pandora::Cluster *const pCluster2,
178  float &closestDistance, bool onlyUseConnectedHit = true);
179 
180  static pandora::StatusCode GetClosestDistanceApproach(const pandora::CaloHitList& caloHitList1,
181  const pandora::CaloHitList& caloHitList2, float &closestDistance, bool onlyUseConnectedHit = true);
182 
183  static pandora::StatusCode GetTrackClusterDistance(const pandora::TrackState *const pTrackState, const pandora::Cluster *const pCluster,
184  const unsigned int maxSearchLayer, const float parallelDistanceCut, const float minTrackClusterCosAngle, float &trackClusterDistance);
185 
192  static pandora::StatusCode GetNCaloHitSeeds(const pandora::Cluster *const pCluster, unsigned int &nSeeds);
193 
204  static bool IsClusterLeavingDetector(const pandora::Cluster *const pCluster, const unsigned int nOuterLayersToExamine = 4,
205  const unsigned int nMipLikeOccupiedLayers = 4, const unsigned int nShowerLikeOccupiedLayers = 3,
206  const float showerLikeEnergyInOuterLayers = 1.f);
207 
208  static bool ContainsHitInOuterSamplingLayer(const pandora::Cluster *const pCluster);
209 
210  static bool IsClusterLeavingDetector(const pandora::Pandora &pandora, const pandora::Cluster *const pCluster, unsigned int nOuterLayersToExamine = 3,
211  float maxDistanceToDetectorEdge = 50.f, unsigned int minNHitsNearEdges = 3);
212 
219  static bool ContainsHitType(const pandora::Cluster *const pCluster, const pandora::HitType hitType);
220 
227  static pandora::StatusCode GetMeanSurroundingEnergy(const pandora::Cluster *const pCluster, float &meanSurroundingEnergy);
228 
235  static pandora::StatusCode GetMeanDensity(const pandora::Cluster *const pCluster, float &meanDensity);
236  static float GetMeanDensity(const pandora::Cluster *const pCluster);
237 
247  static pandora::StatusCode GetChiClusterMerging(const pandora::Pandora &pandora, const pandora::Cluster *const pClusterToEnlarge, const pandora::Cluster *const pClusterToMerge, float& trackEnergy, float &oldChi, float &newChi);
248 
255  static pandora::StatusCode MergeClusters(const pandora::Algorithm &algorithm, ClusterToClusterMap &clusterToClusterMap);
256 
266  static pandora::StatusCode GetTrackClusterDistance(const pandora::Pandora &pandora, const pandora::Cluster *const pCluster, const pandora::Track *const pTrack, const float maxTransverseDistance, float &trackClusterDistance);
267 
281  static bool DoesClusterCrossGapRegion(const pandora::Pandora &pandora, const pandora::Cluster *const pCluster, const unsigned int startLayer,
282  const unsigned int endLayer, const pandora::DetectorGap *&pDetectorGap, const unsigned int nSamplingPoints = 50);
283 
298  static bool DoesFitCrossGapRegion(const pandora::Pandora &pandora, const pandora::ClusterFitResult &clusterFitResult,
299  const pandora::CartesianVector &startPosition, const float propagationDistance, const pandora::DetectorGap *&pDetectorGap, const unsigned int nSamplingPoints = 50);
300 
308  static pandora::StatusCode GetDistanceToDetectorGap(const pandora::CartesianVector &positionVector, const pandora::DetectorGap *const pDetectorGap, float &distanceToGap);
309 
319  static pandora::StatusCode GetCaloHitsNearDetectorGaps(const pandora::Pandora &pandora, const pandora::Cluster *const pCluster, const float maxDistanceFine,
320  const float maxDistanceCoarse, pandora::CaloHitList &caloHitList, bool shouldUseIsolatedHits);
321 
332  static pandora::StatusCode GetCaloHitsNearDetectorGap(const pandora::Pandora &pandora, const pandora::Cluster *const pCluster, const pandora::DetectorGap *const pDetectorGap, const float maxDistanceFine,
333  const float maxDistanceCoarse, pandora::CaloHitList &caloHitList, bool shouldUseIsolatedHits);
334 
338  static pandora::StatusCode CleanAndDeleteCluster(const pandora::Algorithm &algorithm, const pandora::Cluster *const pCluster);
339 
343  static pandora::StatusCode CleanAndDeleteClusters(const pandora::Algorithm &algorithm, const pandora::ClusterList &clusterList);
344 
345  static bool CanMergeCluster(const pandora::Pandora &pandora, const pandora::Cluster *const pCluster, const float minMipFraction,
346  const float maxAllHitsFitRms);
347 
348  static float GetAverageTime(const pandora::Cluster *const pCluster, bool onlyForECALHit = false);
349  static float GetMeanHitPerLayer(const pandora::Cluster *const pCluster);
350 
351  static pandora::StatusCode GetMainClusterHits(const pandora::Cluster *const pCluster, pandora::CaloHitList& mainClusterHits, float eps);
352 
353  static pandora::StatusCode GetRMS(const pandora::Cluster *const pCluster, pandora::CartesianVector cog, pandora::CartesianVector axis, float& rms1, float& rms2);
354  static pandora::StatusCode GetRMS(const pandora::CaloHitList& clusterHits, pandora::CartesianVector cog, pandora::CartesianVector axis, float& rms1, float& rms2);
355 
356  static unsigned int GetClusterConnectorNumber(const pandora::Cluster *const pCluster);
357 };
358 
359 //------------------------------------------------------------------------------------------------------------------------------------------
360 //------------------------------------------------------------------------------------------------------------------------------------------
361 
362 inline float ClusterPca::GetEigenValue(int component) const
363 {
364  if(component < 0 || component > 2)
365  throw pandora::StatusCodeException(pandora::STATUS_CODE_INVALID_PARAMETER);
366 
367  return m_components[component].m_eigenValue;
368 }
369 
370 //------------------------------------------------------------------------------------------------------------------------------------------
371 
372 inline const pandora::CartesianVector &ClusterPca::GetEigenVector(int component) const
373 {
374  if(component < 0 || component > 2)
375  throw pandora::StatusCodeException(pandora::STATUS_CODE_INVALID_PARAMETER);
376 
377  return m_components[component].m_eigenVector;
378 }
379 
380 //------------------------------------------------------------------------------------------------------------------------------------------
381 
382 inline float ClusterPca::GetTransverseRatio() const
383 {
384  return m_transverseRatio;
385 }
386 
387 //------------------------------------------------------------------------------------------------------------------------------------------
388 
389 inline const pandora::Cluster *ClusterPca::GetCluster() const
390 {
391  return m_pCluster;
392 }
393 
394 }
395 
396 #endif // CLUSTERHELPER_H
static pandora::StatusCode GetNCaloHitSeeds(const pandora::Cluster *const pCluster, unsigned int &nSeeds)
Get the number of calo hit seeds in the cluster.
Definition: ClusterHelper.cc:993
Component struct.
Definition: ClusterHelper.h:85
const pandora::Cluster * GetCluster() const
Get the input cluster.
Definition: ClusterHelper.h:389
static pandora::StatusCode GetMeanSurroundingEnergy(const pandora::Cluster *const pCluster, float &meanSurroundingEnergy)
Get the mean surrounding energy of the cluster.
Definition: ClusterHelper.cc:1170
static pandora::StatusCode GetDistanceToDetectorGap(const pandora::CartesianVector &positionVector, const pandora::DetectorGap *const pDetectorGap, float &distanceToGap)
Get the distance to detector gap.
Definition: ClusterHelper.cc:1539
Component()
Contructor.
Definition: ClusterHelper.cc:48
static bool DoesFitCrossGapRegion(const pandora::Pandora &pandora, const pandora::ClusterFitResult &clusterFitResult, const pandora::CartesianVector &startPosition, const float propagationDistance, const pandora::DetectorGap *&pDetectorGap, const unsigned int nSamplingPoints=50)
Whether a linear fit crosses a registered gap region. The fit will be propagated through the specifie...
Definition: ClusterHelper.cc:1507
static bool DoesClusterCrossGapRegion(const pandora::Pandora &pandora, const pandora::Cluster *const pCluster, const unsigned int startLayer, const unsigned int endLayer, const pandora::DetectorGap *&pDetectorGap, const unsigned int nSamplingPoints=50)
Whether a linear fit to a cluster crosses a registered gap region. Only the region between the startl...
Definition: ClusterHelper.cc:1486
static pandora::StatusCode GetCentroidDistance(const pandora::Cluster *const pCluster, const pandora::CartesianVector &point, float &centroidDistance)
Get the distance between the cluster centroid and the given position vector.
Definition: ClusterHelper.cc:862
static bool IsClusterLeavingDetector(const pandora::Cluster *const pCluster, const unsigned int nOuterLayersToExamine=4, const unsigned int nMipLikeOccupiedLayers=4, const unsigned int nShowerLikeOccupiedLayers=3, const float showerLikeEnergyInOuterLayers=1.f)
Whether the cluster is leaving the detector.
Definition: ClusterHelper.cc:1018
static bool ContainsHitType(const pandora::Cluster *const pCluster, const pandora::HitType hitType)
Whether the cluster contains at least one hit of target type.
Definition: ClusterHelper.cc:1150
ClusterPca(const pandora::Cluster *const pCluster)
Constructor.
Definition: ClusterHelper.cc:58
static pandora::StatusCode GetChiClusterMerging(const pandora::Pandora &pandora, const pandora::Cluster *const pClusterToEnlarge, const pandora::Cluster *const pClusterToMerge, float &trackEnergy, float &oldChi, float &newChi)
Evaluate the chi before and after to merge the two clusters.
Definition: ClusterHelper.cc:1329
static pandora::StatusCode GetCaloHitsNearDetectorGap(const pandora::Pandora &pandora, const pandora::Cluster *const pCluster, const pandora::DetectorGap *const pDetectorGap, const float maxDistanceFine, const float maxDistanceCoarse, pandora::CaloHitList &caloHitList, bool shouldUseIsolatedHits)
Get the calo hit list belonging to the cluster, close to all registered detector gaps.
Definition: ClusterHelper.cc:1670
static pandora::StatusCode MergeClusters(const pandora::Algorithm &algorithm, ClusterToClusterMap &clusterToClusterMap)
Perform intelligent merging of clusters (daughter &lt;-&gt; parent relationship management) ...
Definition: ClusterHelper.cc:1371
float m_eigenValue
The eigen value.
Definition: ClusterHelper.h:92
pandora::CartesianVector m_eigenVector
The eigen vector.
Definition: ClusterHelper.h:93
Component m_components[3]
The eigen values and vectors for each component.
Definition: ClusterHelper.h:96
ClusterHelper class.
Definition: ClusterHelper.h:107
static pandora::StatusCode GetMeanDensity(const pandora::Cluster *const pCluster, float &meanDensity)
Get the mean density of the cluster.
Definition: ClusterHelper.cc:1296
static pandora::StatusCode GetClosestDistanceApproach(const pandora::Cluster *const pCluster, const pandora::CartesianVector &point, float &closestDistance, bool onlyUseConnectedHit=true)
Get the closest distance approach between all the hits of the cluster and the given position vector...
Definition: ClusterHelper.cc:767
static pandora::StatusCode GetCaloHitsNearDetectorGaps(const pandora::Pandora &pandora, const pandora::Cluster *const pCluster, const float maxDistanceFine, const float maxDistanceCoarse, pandora::CaloHitList &caloHitList, bool shouldUseIsolatedHits)
Get the calo hit list belonging to the cluster, close to all registered detector gaps.
Definition: ClusterHelper.cc:1654
float m_transverseRatio
The cluster transverse ratio.
Definition: ClusterHelper.h:97
float GetEigenValue(int component) const
Get the eigen value for a given component. Components are sorted by descending order.
Definition: ClusterHelper.h:362
float GetTransverseRatio() const
Get the transverse ratio of the cluster.
Definition: ClusterHelper.h:382
const pandora::CartesianVector & GetEigenVector(int component) const
Get the eigen vector for a given component. Components are sorted by descending order.
Definition: ClusterHelper.h:372
const pandora::Cluster * m_pCluster
The inout cluster.
Definition: ClusterHelper.h:98
ClusterPca class.
Definition: ClusterHelper.h:43
static pandora::StatusCode GetCentroid(const pandora::Cluster *const pCluster, pandora::CartesianVector &centroid)
Get the cluster centroid.
Definition: ClusterHelper.cc:278