00001
00013 #ifndef CLUSTER_DATA_H
00014 #define CLUSTER_DATA_H
00015
00016 #include <vector>
00017 #include <functional>
00018
00019 #include "PhotonInfo.h"
00020 #include "ClusterInfo.h"
00021
00022
00023
00024
00025 class ClusterData
00026 {
00027 public:
00031 ClusterData();
00032
00033
00037 const double triggerLikelihood(const std::vector<PhotonInfo> &photonData);
00038
00039 private:
00043 void calcAvgDistance();
00044
00048 void calcUseDistance();
00049
00053 const double cosDistance(const long index1, const long index2) const;
00054
00064 void fillUseDistance(const long index);
00065
00070 void extractClusterData(const long chosenphot);
00071
00075 const double jointLikelihood() const;
00076
00080 const double likelihood(const double dist, const double dt,
00081 const double psf) const;
00082
00086 const double pdistValue(const double distance) const;
00087
00091 const double pdtValue(const double deltaTime) const;
00092
00096 const double psfValue(const double energy, const double denom) const;
00097
00098
00099
00100
00101 std::vector<PhotonInfo> m_photonData;
00102 std::vector<std::vector<double> > m_useDist;
00103 std::vector<double> m_avgDist;
00104 std::vector<ClusterInfo> m_extractedClusterData;
00105 double m_jointLike;
00106
00107
00108
00112 struct greater_equal : public std::unary_function<ClusterInfo, ClusterInfo>
00113 {
00114 greater_equal(double value) : m_value(value) {}
00115 const bool operator() (ClusterInfo &x) const;
00116
00117 double m_value;
00118 };
00119
00120
00124 struct less : public std::unary_function<ClusterInfo, ClusterInfo>
00125 {
00126 less(double value) : m_value(value) {}
00127 const bool operator() (ClusterInfo &x) const;
00128
00129 double m_value;
00130 };
00131 };
00132
00133
00134
00138 class distCmp
00139 {
00140 public:
00141 bool operator()(ClusterInfo &data1, ClusterInfo &data2)
00142 {
00143 return data1.dist() < data2.dist();
00144 }
00145 };
00146
00147
00148 #endif