public void setSolutions(Solution[] solutions) { // apply +2, filter DNF long[] times = SolutionUtils.realTimes( solutions, true, this.configurationManager.getConfiguration("TIMER-PRECISION").equals("CENTISECONDS")); // define interval size if (times.length == 0) { this.intervalStart = 17000; this.intervalEnd = 23000; } else { // mean long mean = 0; for (int i = 0; i < times.length; i++) { mean += times[i]; } mean /= times.length; // standard deviation long variance = 0; for (int i = 0; i < times.length; i++) { variance += Math.pow(times[i] - mean, 2d); } variance /= times.length; long stddev = (long) Math.sqrt(variance); this.intervalStart = mean - 3 * Math.max(50, stddev); this.intervalEnd = mean + 3 * Math.max(50, stddev); } // calculate histogram for (int i = 0; i < this.bins.length; i++) { this.bins[i] = 0; } for (int i = 0; i < times.length; i++) { if (times[i] >= this.intervalStart && times[i] < this.intervalEnd) { int bin = (int) (this.bins.length * (times[i] - this.intervalStart) / (this.intervalEnd - this.intervalStart)); this.bins[bin]++; } } // repaint repaint(); }