File indexing completed on 2026-09-27 09:14:59
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef LC_FORCED_CLUSTERING_ALGORITHM_H
0009 #define LC_FORCED_CLUSTERING_ALGORITHM_H 1
0010
0011 #include "Pandora/Algorithm.h"
0012
0013 #include "Objects/CartesianVector.h"
0014
0015 namespace lc_content {
0016
0017
0018
0019
0020 class ForcedClusteringAlgorithm : public pandora::Algorithm {
0021 public:
0022
0023
0024
0025 ForcedClusteringAlgorithm();
0026
0027 private:
0028 pandora::StatusCode Run();
0029 pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle);
0030
0031
0032
0033
0034 pandora::StatusCode RemoveEmptyClusters() const;
0035
0036
0037
0038
0039 class TrackDistanceInfo {
0040 public:
0041
0042
0043
0044
0045
0046
0047
0048
0049 TrackDistanceInfo(const pandora::CaloHit* const pCaloHit, const pandora::Cluster* const pCluster, float trackEnergy,
0050 float trackDistance);
0051
0052
0053
0054
0055
0056
0057 const pandora::CaloHit* GetCaloHit() const;
0058
0059
0060
0061
0062
0063
0064 const pandora::Cluster* GetCluster() const;
0065
0066
0067
0068
0069
0070
0071 float GetTrackEnergy() const;
0072
0073
0074
0075
0076
0077
0078 float GetTrackDistance() const;
0079
0080 private:
0081 const pandora::CaloHit* m_pCaloHit;
0082 const pandora::Cluster* m_pCluster;
0083 float m_trackEnergy;
0084 float m_trackDistance;
0085 };
0086
0087 typedef std::vector<TrackDistanceInfo> TrackDistanceInfoVector;
0088
0089
0090
0091
0092
0093
0094
0095 static bool SortByDistanceToTrack(const TrackDistanceInfo& lhs, const TrackDistanceInfo& rhs);
0096
0097 bool m_shouldRunStandardClusteringAlgorithm;
0098 std::string m_standardClusteringAlgorithmName;
0099
0100 bool m_shouldClusterIsolatedHits;
0101 bool m_shouldAssociateIsolatedHits;
0102 std::string m_isolatedHitAssociationAlgorithmName;
0103 };
0104
0105
0106
0107 inline bool ForcedClusteringAlgorithm::SortByDistanceToTrack(const TrackDistanceInfo& lhs,
0108 const TrackDistanceInfo& rhs) {
0109 return (lhs.GetTrackDistance() < rhs.GetTrackDistance());
0110 }
0111
0112
0113
0114
0115 inline ForcedClusteringAlgorithm::TrackDistanceInfo::TrackDistanceInfo(const pandora::CaloHit* const pCaloHit,
0116 const pandora::Cluster* const pCluster,
0117 float trackEnergy, float trackDistance)
0118 : m_pCaloHit(pCaloHit), m_pCluster(pCluster), m_trackEnergy(trackEnergy), m_trackDistance(trackDistance) {}
0119
0120
0121
0122 inline const pandora::CaloHit* ForcedClusteringAlgorithm::TrackDistanceInfo::GetCaloHit() const { return m_pCaloHit; }
0123
0124
0125
0126 inline const pandora::Cluster* ForcedClusteringAlgorithm::TrackDistanceInfo::GetCluster() const { return m_pCluster; }
0127
0128
0129
0130 inline float ForcedClusteringAlgorithm::TrackDistanceInfo::GetTrackEnergy() const { return m_trackEnergy; }
0131
0132
0133
0134 inline float ForcedClusteringAlgorithm::TrackDistanceInfo::GetTrackDistance() const { return m_trackDistance; }
0135
0136 }
0137
0138 #endif