/* * ContourWithSynder.java * * Copyright (c) 2002-2015 Alexei Drummond, Andrew Rambaut and Marc Suchard * * This file is part of BEAST. * See the NOTICE file distributed with this work for additional * information regarding copyright ownership and licensing. * * BEAST 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 * of the License, or (at your option) any later version. * * BEAST 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 BEAST; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301 USA */ package dr.geo.contouring; import dr.geo.KernelDensityEstimator2D; import java.util.*; import java.awt.geom.Point2D; /** * @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, boolean bandwidthLimit) { super(x, y, bandwidthLimit); } 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; }