private ArrayList<MinMax> getRanges() {
        if (useExternalRanges) {
            return externalRanges;
        }

        ArrayList<MinMax> ranges = new ArrayList<MinMax>(numDimensions);
        for (int i = 0; i < numDimensions; i++) {
            ranges.add(new MinMax());
        }

        if (totalNumSamples > 0) {
            for (int j = 0; j < numDimensions; j++) {
                ranges.get(j).minValue = data.get(0).getData(0, 0);
                ranges.get(j).maxValue = data.get(0).getData(0, 0);

                //ranges.add(new MinMax(data.get(0).getData(0, 0), data.get(0).getData(0, 0)));
                for (int x = 0; x < totalNumSamples; x++) {
                    for (int i = 0; i < data.get(x).getLength(); i++) {
                        if (data.get(x).getData(i, j) < ranges.get(j).minValue) {
                            ranges.get(j).minValue = data.get(x).getData(i, j);
                        } //Search for the min value
                        else if (data.get(x).getData(i, j) > ranges.get(j).maxValue) {
                            ranges.get(j).maxValue = data.get(x).getData(i, j);
                        }	//Search for the max value
                    }
                }
            }
        }
        return ranges;
    }