docs: public Clustering<Model> run(Relation<V> rel) {
      fulldatabase = preprocess(rel);
      processedIDs = DBIDUtil.newHashSet(fulldatabase.size());
      noiseDim = dimensionality(fulldatabase);
  
      FiniteProgress progress = LOG.isVerbose() ? new FiniteProgress("CASH Clustering", fulldatabase.size(), LOG) : null;
      Clustering<Model> result = doRun(fulldatabase, progress);
      LOG.ensureCompleted(progress);
  
      if(LOG.isVerbose()) {
        StringBuilder msg = new StringBuilder(1000);
        for(Cluster<Model> c : result.getAllClusters()) {
          if(c.getModel() instanceof LinearEquationModel) {
            LinearEquationModel s = (LinearEquationModel) c.getModel();
            msg.append("\n Cluster: Dim: " + s.getLes().subspacedim() + " size: " + c.size());
          }
          else {
            msg.append("\n Cluster: " + c.getModel().getClass().getName() + " size: " + c.size());
          }
        }
        LOG.verbose(msg.toString());
      }
      return result;
    }