package jas.hist.test; import jas.hist.HistogramUpdate; import jas.hist.Rebinnable1DHistogramData; import jas.hist.Rebinnable2DHistogramData; import jas.hist.Statistics; import java.util.Observable; public class Gauss2D extends Observable implements Rebinnable2DHistogramData { public Gauss2D(String name, int entries) { if (entries > MAXSIZE) throw new IllegalArgumentException("Gauss2D: Size too big"); m_tupleX = new double[MAXSIZE]; m_tupleY = new double[MAXSIZE]; m_entries = entries; m_name = name; for (int j=0; j<MAXSIZE; j++) { double k = Math.random()+Math.random()+Math.random()+Math.random()+Math.random()+Math.random(); double l = Math.random()+Math.random()+Math.random()+Math.random()+Math.random()+Math.random(); m_tupleX[j] = k/6; m_tupleY[j] = ymax*l/6; } } public String getTitle() { return m_name; } public double getXMin() { return 0; } public double getXMax() { return 1; } public double getYMin() { return 0; } public double getYMax() { return ymax; } public boolean isRebinnable() { return true; } public String[] getXAxisLabels() { return null; } public String[] getYAxisLabels() { return null; } public int getXBins() { return 40; } public int getYBins() { return 40; } public int getXAxisType() { return Rebinnable1DHistogramData.DOUBLE; } public int getYAxisType() { return Rebinnable1DHistogramData.DOUBLE; } public double[][][] rebin(int Xbins, double Xmin, double Xmax, int Ybins, double Ymin, double Ymax, boolean wantErrors, boolean hurry, boolean overflow) { synchronized (this) { setChanged(); } double[][] hist = new double[Xbins + (overflow?2:0)][Ybins + (overflow?2:0)]; double XbinWidth = (Xmax - Xmin)/Xbins; double YbinWidth = (Ymax - Ymin)/Ybins; for (int k=0; k<m_entries; k++) { int Xbin = (int) ((m_tupleX[k] - Xmin)/XbinWidth); int Ybin = (int) ((m_tupleY[k] - Ymin)/YbinWidth); if (Xbin>=0 && Xbin<Xbins && Ybin>=0 && Ybin<Ybins) hist[Xbin][Ybin] += 1; else if (overflow) { if (Xbin < 0 ) Xbin = Xbins; if (Xbin >Xbins) Xbin = Xbins+1; if (Ybin < 0 ) Ybin = Ybins; if (Ybin >Ybins) Ybin = Ybins+1; hist[Xbin][Ybin] += 1; } } double[][][] result = new double[1][][]; result[0] = hist; return result; } public int getSize() { return m_entries; } public void setSize(int newSize) { if (newSize > MAXSIZE) throw new IllegalArgumentException("Gauss: Size too big"); m_entries = newSize; synchronized (this) { notifyObservers(new HistogramUpdate(HistogramUpdate.DATA_UPDATE,true)); } } public double getXData(int i) { return m_tupleX[i]; } public double getYData(int i) { return m_tupleY[i]; } public Statistics getStatistics() { return null; } double ymax = Math.random(); double m_tupleX[]; double m_tupleY[]; int m_entries; String m_name; protected final static int MAXSIZE = 10000; }