private @Nullable UsageCluster getTheMostSimilarCluster(@NotNull Bag features) {
    UsageCluster mostUsageCluster = null;
    double maxSimilarity = 0;
    synchronized (myClusters) {
      for (UsageCluster cluster : myClusters) {
        double similarity = myDistance.findMinimalSimilarity(cluster, features);
        if (isCompleteMatch(similarity)) {
          return cluster;
        }
        if (lessThen(maxSimilarity, similarity)) {
          mostUsageCluster = cluster;
          maxSimilarity = similarity;
        }
      }
    }
    return mostUsageCluster;
  }
private @Nullable UsageCluster getTheMostSimilarCluster(@NotNull Bag features)