20 class DistanceProvider;
38 template<
class ClusterType>
41 const std::vector<ClusterType*>&
clusters)
const;
42 template<
class ClusterType>
46 double energyThreshold)
const;
60 template<
class ClusterType>
62 ClusterType* bestCluster =
nullptr;
64 unsigned int nClusters(
clusters.size());
65 for (
unsigned int iCluster = 0; iCluster < nClusters; ++iCluster){
67 ClusterType* thisCluster =
clusters[iCluster];
69 double mybestdistance = getDRCutSquared(thisCluster);
71 if (thisDistance < mybestdistance){
72 if (thisDistance < bestDistance) {
73 bestDistance = thisDistance;
74 bestCluster = thisCluster;
82 template<
class ClusterType>
85 std::vector<MatchDistance>
result;
86 unsigned const nClusters(
clusters.size());
89 for (
unsigned int iCluster = 0; iCluster < nClusters; ++iCluster) {
90 ClusterType* thisCluster =
clusters[iCluster];
99 int nLoops = nMatches;
100 std::vector<unsigned int> masked;
101 std::vector<int> maskedType;
102 for (
int imatch = 0; imatch < nLoops; ++imatch) {
103 ClusterType* bestCluster =
nullptr;
106 for (
unsigned int iCluster = 0; iCluster < nClusters; ++iCluster) {
108 if (masked.size() != 0 &&
find(masked.begin(), masked.end(), iCluster) != masked.end()) {
112 ClusterType* thisCluster =
clusters[iCluster];
115 if(imatch == 0 && thisCluster->e() <= energyThreshold) {
121 if ((maskedType.size() != 0 &&
find(maskedType.begin(), maskedType.end(),
122 thisCluster->getEfRecCluster()->getClusterType()) != maskedType.end())
123 || (thisCluster->getEfRecCluster()->getClusterType() == 4)) {
129 if (thisDistance < bestDistance) {
131 bestDistance = thisDistance;
132 bestCluster = thisCluster;
135 if (iMasked == -1 ||
nullptr == bestCluster)
break;
137 masked.push_back(iMasked);
138 maskedType.push_back(bestCluster->getEfRecCluster()->getClusterType());
142 assert(maskedType.size() == masked.size());