docs: @Override
    public double[][] processIds(DBIDs ids, Relation<? extends NumberVector> relation) {
      final int dim = RelationUtil.dimensionality(relation);
      final CovarianceMatrix cmat = new CovarianceMatrix(dim);
      final Centroid centroid = Centroid.make(relation, ids);
  
      // find maximum distance
      double maxdist = 0.0, stddev = 0.0;
      {
        for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
          double distance = weightDistance.distance(centroid, relation.get(iter));
          stddev += distance * distance;
          if(distance > maxdist) {
            maxdist = distance;
          }
        }
        if(maxdist == 0.0) {
          maxdist = 1.0;
        }
        // compute standard deviation.
        stddev = FastMath.sqrt(stddev / ids.size());
      }
  
      for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
        NumberVector obj = relation.get(iter);
        double distance = weightDistance.distance(centroid, obj);
        double weight = weightfunction.getWeight(distance, maxdist, stddev);
        cmat.put(obj, weight);
      }
      return cmat.destroyToPopulationMatrix();
    }