SOM::uint SOM::getWinnerAndStoreOutput(const Sample &input, Output &output) { uint winnerId = 0; float distance, localDistanceMin = 0, localDistanceMax = 0; float modelOutput, localOutputMin = 0, localOutputMax = 0; Model *model; output.clear(); uint modelId = 0; for(vector<Model*>::iterator i = models.begin(); i != models.end(); ++i) { model = *i; distance = model->getDistance(input); modelOutput = (float) (::sqrt(distance) / maxDistance); if(i == models.begin()) { localDistanceMin = localDistanceMax = distance; winnerId = modelId; localOutputMin = localOutputMax = modelOutput; } else if(distance < localDistanceMin) { localDistanceMin = distance; winnerId = modelId; localOutputMin = modelOutput; } else if(distance > localDistanceMax) { localDistanceMax = distance; localOutputMax = modelOutput; } output.push_back(modelOutput); modelId++; } outputMin = localOutputMin; outputMax = localOutputMax; return winnerId; }