83 {
84
85 std::vector<MatchDistance>
result;
86 unsigned const nClusters(
clusters.size());
87
88 if (nMatches == -1) {
89 for (unsigned int iCluster = 0; iCluster < nClusters; ++iCluster) {
90 ClusterType* thisCluster =
clusters[iCluster];
94 }
95 }
96 }
97
98 else{
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;
105 int iMasked = -1;
106 for (unsigned int iCluster = 0; iCluster < nClusters; ++iCluster) {
107
108 if (masked.size() != 0 &&
find(masked.begin(), masked.end(), iCluster) != masked.end()) {
109 continue;
110 }
111
112 ClusterType* thisCluster =
clusters[iCluster];
113
114
115 if(imatch == 0 && thisCluster->e() <= energyThreshold) {
116 continue;
117 }
118
119
120
121 if ((maskedType.size() != 0 &&
find(maskedType.begin(), maskedType.end(),
122 thisCluster->getEfRecCluster()->getClusterType()) != maskedType.end())
123 || (thisCluster->getEfRecCluster()->getClusterType() == 4)) {
124 continue;
125 }
126
128
129 if (thisDistance < bestDistance) {
130 iMasked = iCluster;
131 bestDistance = thisDistance;
132 bestCluster = thisCluster;
133 }
134 }
135 if (iMasked == -1 || nullptr == bestCluster) break;
136
137 masked.push_back(iMasked);
138 maskedType.push_back(bestCluster->getEfRecCluster()->getClusterType());
139
141 }
142 assert(maskedType.size() == masked.size());
143 }
144
146
147 }
std::string find(const std::string &s)
return a remapped string