### Question:
ComputeEnrichment { public static DenseVector computeFDRqval(int N, DenseVector pvals) { DenseVector ranks = pvals.copy(); MatrixUtils.rank(ranks); DenseVector ordered = new DenseVector(pvals.size()); for (int i=0; i<ranks.size(); i++) { int p = (int) Math.round(ranks.get(i))-1; ordered.set(p, pvals.get(i)); } DenseVector qval = new DenseVector(pvals.size()); double minSoFar = Double.MAX_VALUE; for (int i=ranks.size()-1; i>=0; i--) { double p = ordered.get(i); int m = i+1; minSoFar = Math.min(minSoFar, N*p/m); qval.set(i, minSoFar); } DenseVector unOrderedqval = new DenseVector(pvals.size()); for (int i=0; i<unOrderedqval.size(); i++) { int p = (int) Math.round(ranks.get(i))-1; unOrderedqval.set(i, qval.get(p)); } return unOrderedqval; } ComputeEnrichment(DataCache cache, EnrichmentEngineRequestDto request); EnrichmentEngineResponseDto process(); static double computeHyperGeo(double x, double N, double n, double k); static double computeCumulHyperGeo(double x, double N, double n, double k); static DenseVector computeFDRqval(int N, DenseVector pvals);  }### Answer:
@Test public void testComputeFDRqval() { double[] data = {.5, .3, .8, .02, .1}; DenseVector pval = new DenseVector(data); DenseVector qval = ComputeEnrichment.computeFDRqval(10, pval); assertNotNull(qval); System.out.println(qval); }