public static int[] maxIndex(double[] __array) throws Exception {
        ArrayList best_list = new ArrayList();
        double best_val=Double.NEGATIVE_INFINITY;
        double val;
        int[] RET;
        int _MAX = __array.length;

        for (int i=0; i < _MAX; i++) {
            val = __array[i];
            if (val > best_val) {
                best_val = val;
            }
        }
        for (int i=0; i < _MAX; i++) {
            if (__array[i] == best_val) {
                best_list.add(new Integer(i));
            }
        }

        _MAX = best_list.size();
        RET = new int[_MAX];
        for (int i=0; i < _MAX; i++) {
            RET[i] = ((Integer) best_list.get(i)).intValue();
        }
        return RET;
    }