package contouring; import java.awt.geom.Point2D; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; /** * @author Marc A. Suchard */ public class ContourWithSynder extends KernelDensityEstimator2D { public ContourWithSynder(final double[] x, final double[] y, final double[] h, final int n, final double[] lims) { super(x, y, h, n, lims); } public ContourWithSynder(final double[] x, final double[] y) { super(x, y); } public ContourWithSynder(final double[] x, final double[] y, int n) { super(x, y, n); } public ContourPath[] getContourPaths(double hpdValue) { if (contourPaths == null) { double thresholdDensity = findLevelCorrespondingToMass(hpdValue); SnyderContour contourPlot = new SnyderContour(getXGrid().length, getYGrid().length); contourPlot.setDeltas(getXGrid()[1] - getXGrid()[0], getYGrid()[1] - getYGrid()[0]); contourPlot.setOffsets(getXGrid()[0], getYGrid()[0]); List<LinkedList<Point2D>> allPaths = new ArrayList<LinkedList<Point2D>>(); contourPlot.ContourKernel(getKDE(), allPaths, thresholdDensity); contourPaths = new ContourPath[allPaths.size()]; for (int i = 0; i < allPaths.size(); i++) { LinkedList<Point2D> path = allPaths.get(i); int len = path.size(); double[] x = new double[len]; double[] y = new double[len]; for (int j = 0; j < len; j++) { Point2D pt = path.get(j); x[j] = pt.getX(); y[j] = pt.getY(); } contourPaths[i] = new ContourPath(new ContourAttrib( thresholdDensity), 1, x, y); } } return contourPaths; } private ContourPath[] contourPaths = null; }