Here you can find the source of medianAbsValAboveThresh(List vals, double thresh)
public static double medianAbsValAboveThresh(List vals, double thresh)
//package com.java2s; /*//from w w w. j a v a 2 s .c o m ** Copyright (C) 2003-2018 Institute for Systems Biology ** Seattle, Washington, USA. ** ** This library is free software; you can redistribute it and/or ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. ** ** This library is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ** Lesser General Public License for more details. ** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ import java.util.Collections; import java.util.List; import java.util.ArrayList; public class Main { /*************************************************************************** ** ** Return median of numbers above threshold */ public static double medianAbsValAboveThresh(List vals, double thresh) { int num = vals.size(); ArrayList above = new ArrayList(); for (int i = 0; i < num; i++) { Double valObj = (Double) vals.get(i); if (valObj.isNaN()) { return (Double.NaN); } double val = Math.abs(valObj.doubleValue()); if (val >= thresh) { above.add(valObj); } } return (medianAbsVal(above)); } /*************************************************************************** ** ** Median absolute value */ public static double medianAbsVal(List vals) { if (vals.isEmpty()) { return (Double.NaN); } int num = vals.size(); ArrayList sorted = new ArrayList(); for (int i = 0; i < num; i++) { Double val0bj = (Double) vals.get(i); if (val0bj.isNaN()) { return (Double.NaN); } sorted.add(new Double(Math.abs(val0bj.doubleValue()))); } Collections.sort(sorted); int lindex = num / 2; if ((num % 2) == 0) { Double lower = (Double) sorted.get(lindex - 1); Double upper = (Double) sorted.get(lindex); return ((lower.doubleValue() + upper.doubleValue()) / 2.0); } else { Double median = (Double) sorted.get(lindex); return (median.doubleValue()); } } }