docs: public Clustering<DimensionModel> run(Database database, Relation<V> relation) {
      COPACNeighborPredicate.Instance npred = new COPACNeighborPredicate<V>(settings).instantiate(database, relation);
      CorePredicate.Instance<DBIDs> cpred = new MinPtsCorePredicate(settings.minpts).instantiate(database);
      Clustering<Model> dclusters = new GeneralizedDBSCAN.Instance<>(npred, cpred, false).run();
      // Re-wrap the detected clusters for COPAC:
      Clustering<DimensionModel> result = new Clustering<>("COPAC clustering", "copac-clustering");
      // Generalized DBSCAN clusterings will be flat.
      for(It<Cluster<Model>> iter = dclusters.iterToplevelClusters(); iter.valid(); iter.advance()) {
        Cluster<Model> clus = iter.get();
        if(clus.size() > 0) {
          int dim = npred.dimensionality(clus.getIDs().iter());
          DimensionModel model = new DimensionModel(dim);
          result.addToplevelCluster(new Cluster<>(clus.getIDs(), model));
        }
      }
      return result;
    }