docs: public OutlierResult run(Database database, Relation<V> relation) {
      emClustering.setSoft(true);
      Clustering<?> emresult = emClustering.run(database, relation);
      Relation<double[]> soft = null;
      for(It<Relation<double[]>> iter = emresult.getHierarchy().iterChildren(emresult).filter(Relation.class); iter.valid(); iter.advance()) {
        if(iter.get().getDataTypeInformation() == EM.SOFT_TYPE) {
          soft = iter.get();
        }
      }
      if(soft == null) {
        throw new IllegalStateException("No soft assignment generated by EM?");
      }
  
      double globmax = 0.0;
      WritableDoubleDataStore emo_score = DataStoreUtil.makeDoubleStorage(relation.getDBIDs(), DataStoreFactory.HINT_TEMP | DataStoreFactory.HINT_HOT);
      for(DBIDIter iditer = relation.iterDBIDs(); iditer.valid(); iditer.advance()) {
        double maxProb = Double.POSITIVE_INFINITY;
        double[] probs = soft.get(iditer);
        for(double prob : probs) {
          maxProb = Math.min(1. - prob, maxProb);
        }
        emo_score.putDouble(iditer, maxProb);
        globmax = Math.max(maxProb, globmax);
      }
      DoubleRelation scoreres = new MaterializedDoubleRelation("EM outlier scores", "em-outlier", emo_score, relation.getDBIDs());
      OutlierScoreMeta meta = new ProbabilisticOutlierScore(0.0, globmax);
      // combine results.
      OutlierResult result = new OutlierResult(meta, scoreres);
      // TODO: add a keep-EM flag?
      result.addChildResult(emresult);
      return result;
    }