docs: public double outresScore(final int s, long[] subspace, DBIDRef id, KernelDensityEstimator kernel, DBIDs cands) {
      double score = 1.0; // Initial score is 1.0
      final SubspaceEuclideanDistanceFunction df = new SubspaceEuclideanDistanceFunction(subspace);
      MeanVariance meanv = new MeanVariance();
      ModifiableDoubleDBIDList neighcand = DBIDUtil.newDistanceDBIDList(cands.size());
      ModifiableDoubleDBIDList nn = DBIDUtil.newDistanceDBIDList(cands.size());
  
      for(int i = s; i < kernel.dim; i++) {
        assert !BitsUtil.get(subspace, i);
        BitsUtil.setI(subspace, i);
        df.setSelectedDimensions(subspace);
        final double adjustedEps = kernel.adjustedEps(kernel.dim);
        DoubleDBIDList neigh = initialRange(id, cands, df, adjustedEps * 2, kernel, neighcand);
        // Relevance test
        if(neigh.size() > 2) {
          if(relevantSubspace(subspace, neigh, kernel)) {
            final double density = kernel.subspaceDensity(subspace, neigh);
            // Compute mean and standard deviation for densities of neighbors.
            meanv.reset();
            for(DoubleDBIDListIter neighbor = neigh.iter(); neighbor.valid(); neighbor.advance()) {
              subsetNeighborhoodQuery(neighcand, neighbor, df, adjustedEps, kernel, nn);
              meanv.put(kernel.subspaceDensity(subspace, nn));
            }
            final double deviation = (meanv.getMean() - density) / (2. * meanv.getSampleStddev());
            // High deviation:
            if(deviation >= 1) {
              score *= density / deviation;
            }
            // Recursion
            score *= outresScore(i + 1, subspace, id, kernel, neighcand);
          }
        }
        BitsUtil.clearI(subspace, i);
      }
      return score;
    }