diff --git a/.gitignore b/.gitignore index 42f4a1a..328f93c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ target/ *~ +deploy-*.sh \ No newline at end of file diff --git a/src/main/java/de/genvlin/core/data/DoubleVector.java b/src/main/java/de/genvlin/core/data/DoubleVector.java index ce53eaa..debfc2c 100644 --- a/src/main/java/de/genvlin/core/data/DoubleVector.java +++ b/src/main/java/de/genvlin/core/data/DoubleVector.java @@ -17,7 +17,7 @@ * * @author Peter Karich */ -class DoubleVector extends AbstractCollection implements VectorInterface { +class DoubleVector extends AbstractCollection implements DoubleVectorInterface { private boolean maxIsInvalid = true; private boolean minIsInvalid = true; diff --git a/src/main/java/de/genvlin/core/data/HistogrammInterface.java b/src/main/java/de/genvlin/core/data/HistogrammInterface.java index 715d8b8..8708e20 100644 --- a/src/main/java/de/genvlin/core/data/HistogrammInterface.java +++ b/src/main/java/de/genvlin/core/data/HistogrammInterface.java @@ -13,6 +13,11 @@ */ public interface HistogrammInterface extends VectorInterface { + /** + * @return sum of all entries + */ + double getSum(); + /** * This method returns the root mean squared error of all added values.
* The definition is RMSError = sqrt[ sum_i_to_n((x_i - x_mean)^2) / n]
diff --git a/src/main/java/de/genvlin/core/data/HistogrammVector.java b/src/main/java/de/genvlin/core/data/HistogrammVector.java index a76d747..90d523c 100644 --- a/src/main/java/de/genvlin/core/data/HistogrammVector.java +++ b/src/main/java/de/genvlin/core/data/HistogrammVector.java @@ -4,7 +4,6 @@ * Created on 21. Mai 2007, 14:13 * This stands under Public domain */ - package de.genvlin.core.data; /** @@ -13,94 +12,108 @@ * @author Peter Karich */ class HistogrammVector extends DataVector implements HistogrammInterface { - + /** * Creates a new instance of HistogrammVector */ HistogrammVector(ID id) { super(id, null); } - + public double getRMSError() { int size = size(); - if(size == 0) { + if (size == 0) { return 0; } double mean = getMean(); - + double result = 0; double tmp; Number n; int noOfNonNullValues = size; - - for(int i = 0; i < size; i++) { + + for (int i = 0; i < size; i++) { n = get(i); - if(n != null) { + if (n != null) { tmp = n.doubleValue() - mean; result += tmp * tmp; } else { noOfNonNullValues--; } } - if(noOfNonNullValues > 0) { - return Math.sqrt(result/noOfNonNullValues); + if (noOfNonNullValues > 0) { + return Math.sqrt(result / noOfNonNullValues); } else { return 0; } } - + public double getRMS() { int size = size(); - if(size == 0) { + if (size == 0) { return 0; } - + double result = 0; double tmp; int noOfNonNullValues = size; Number n; - - for(int i = 0; i < size; i++) { + + for (int i = 0; i < size; i++) { n = get(i); - if(n != null) { + if (n != null) { tmp = n.doubleValue(); result += tmp * tmp; } else { noOfNonNullValues--; } } - - if(noOfNonNullValues > 0) { - return Math.sqrt(result/size); + + if (noOfNonNullValues > 0) { + return Math.sqrt(result / size); } else { return 0; } } - + public double getMean() { //TODO PERFORMANCE: we can sum + substract on every add/remove call int size = size(); - if(size == 0) { + if (size == 0) { return 0; } - + double result = 0; Number n; int noOfNonNullValues = size; - - for(int i = 0; i < size; i++) { + + for (int i = 0; i < size; i++) { n = get(i); - if(n != null) { + if (n != null) { result += n.doubleValue(); } else { - noOfNonNullValues --; + noOfNonNullValues--; } } - - if(noOfNonNullValues > 0) { + + if (noOfNonNullValues > 0) { return result / noOfNonNullValues; } else { return 0; } } + + public double getSum() { + double sum = 0; + int size = size(); + if (size == 0) + return 0; + Number n; + for (int i = 0; i < size; i++) { + n = get(i); + if (n != null) + sum += n.doubleValue(); + } + return sum; + } } \ No newline at end of file diff --git a/src/main/java/de/genvlin/core/data/MainPool.java b/src/main/java/de/genvlin/core/data/MainPool.java index c0cf84a..4f807b3 100644 --- a/src/main/java/de/genvlin/core/data/MainPool.java +++ b/src/main/java/de/genvlin/core/data/MainPool.java @@ -10,6 +10,8 @@ /** This is the factory of pool's, vector's and xyvector's. Or you * specific IDData if you want implement. Get the singleton instance * via getDefault(). + * + * WARNING: not thread safe! * * @author Peter Karich */ diff --git a/src/main/java/de/genvlin/core/data/VectorInterface.java b/src/main/java/de/genvlin/core/data/VectorInterface.java index 7f35d92..50c0af8 100644 --- a/src/main/java/de/genvlin/core/data/VectorInterface.java +++ b/src/main/java/de/genvlin/core/data/VectorInterface.java @@ -40,8 +40,14 @@ public interface VectorInterface extends CollectionInterface { */ public Number set(int i, Number n); + /** + * @return the minimal entry in this object + */ public Number getMin(); + /** + * @return the maximal entry in this object + */ public Number getMax(); /** diff --git a/src/main/java/de/genvlin/core/data/XYVector.java b/src/main/java/de/genvlin/core/data/XYVector.java index d9f99ab..b513c84 100644 --- a/src/main/java/de/genvlin/core/data/XYVector.java +++ b/src/main/java/de/genvlin/core/data/XYVector.java @@ -159,6 +159,14 @@ public void removeVectorListener(CollectionListener vl) { x.removeVectorListener(vl); y.removeVectorListener(vl); } + + public VectorInterface getX() { + return x; + } + + public VectorInterface getY() { + return y; + } /** The Iterator on Point.Double. */ diff --git a/src/main/java/de/genvlin/core/data/XYVectorInterface.java b/src/main/java/de/genvlin/core/data/XYVectorInterface.java index 3c5a394..fe71db2 100644 --- a/src/main/java/de/genvlin/core/data/XYVectorInterface.java +++ b/src/main/java/de/genvlin/core/data/XYVectorInterface.java @@ -54,5 +54,9 @@ public interface XYVectorInterface extends BoundedXYCollectionInterface { public double getXDouble(int index); - public double getYDouble(int index); + public double getYDouble(int index); + + VectorInterface getX(); + + VectorInterface getY(); } diff --git a/src/main/java/de/genvlin/gui/plot/GPlotPanel.java b/src/main/java/de/genvlin/gui/plot/GPlotPanel.java index 6cee04d..f0ed261 100644 --- a/src/main/java/de/genvlin/gui/plot/GPlotPanel.java +++ b/src/main/java/de/genvlin/gui/plot/GPlotPanel.java @@ -8,7 +8,6 @@ import de.genvlin.core.data.CollectionEvent; import de.genvlin.core.data.CollectionListener; -import de.genvlin.core.data.ID; import de.genvlin.core.data.MainPool; import de.genvlin.core.data.Pool; import de.genvlin.core.data.VectorInterface; @@ -27,8 +26,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.swing.*; import javax.swing.plaf.ColorUIResource; @@ -250,7 +247,7 @@ protected void initXYData(XYDataInterface xyData) { xyData.setTitle("Data:" + getPool().size()); } int color = colorDataIndex; - automaticOneScale(colorDataIndex); + // automaticOneScale(colorDataIndex); color %= dataColor.size(); xyData.setColor(dataColor.get(color)); colorDataIndex++; @@ -273,10 +270,9 @@ public XYDataInterface getData(String str) { /** * This method removes the specified plot from this plotwindow. */ - public void hideData(String str) { - int i = indexOf(str); - if (i > -1) { - XYDataInterface xyData = (XYDataInterface) getPool().get(i); + public void hideData(int index) { + if (index > -1) { + XYDataInterface xyData = (XYDataInterface) getPool().get(index); xyData.setHidden(!xyData.isHidden()); } } @@ -288,16 +284,6 @@ public void removeData(int i) { getPool().remove(i); } - /** - * This method removes the specified plot from this plotwindow. - */ - public void removeData(String str) { - int i = indexOf(str); - if (i > -1) { - removeData(i); - } - } - /** * This method removes the points from a plot. */ @@ -344,7 +330,7 @@ public void setTranslateFactor(double xFactor, double yFactor) { yTranslate = yFactor; } - protected int indexOf(String str) { + public int indexOf(String str) { if (str != null) { for (int i = 0; i < getPool().size(); i++) { if (str.equals(getPool().get(i).getTitle())) { @@ -355,10 +341,6 @@ protected int indexOf(String str) { return -1; } - private boolean automaticScale(String subString) { - return _automaticScale(indexOf(subString)); - } - /** * This method scales the window so that we can see the specified data (in the most cases) very * good. @@ -544,9 +526,6 @@ public void run() { public Component getComponent() { return panel; } - private static final String automaticScalingString = "Automatic Scaling"; - private static final String removeString = "Remove"; - private static final String hideString = "Hide/Show"; private synchronized JPopupMenu getNewPopMenu() { /* @@ -560,45 +539,67 @@ private synchronized JPopupMenu getNewPopMenu() { popMenu.add(comp); } + popMenu.add(new AbstractAction("Autoscale all") { + + public void actionPerformed(ActionEvent e) { + automaticScaleAll(); + repaint(); + } + }); + for (int i = 0; i < getPool().size(); i++) { final String str = getPool().get(i).getTitle(); JMenu menu = new JMenu(str); menu.setForeground(getColor(i)); final int fin = i; - menu.addMouseListener(new MouseAdapter() { - - @Override public void mouseEntered(MouseEvent e) { - setPlotOne(fin); - repaint(); - } +// menu.addMouseListener(new MouseAdapter() { +// +// @Override public void mouseEntered(MouseEvent e) { +// setPlotOne(fin); +// repaint(); +// } +// +// @Override public void mouseExited(MouseEvent e) { +// setPlotOne(-1); +// repaint(); +// } +// }); + + menu.add(new AbstractAction("Show All/Only This") { - @Override public void mouseExited(MouseEvent e) { - setPlotOne(-1); + public void actionPerformed(ActionEvent e) { + if (plotOne >= 0 && plotOne == fin) { + setPlotOne(-1); + automaticOneScale(SCALE_ALL); + } else { + setPlotOne(fin); + automaticOneScale(fin); + } repaint(); } }); - menu.add(new AbstractAction(automaticScalingString) { + menu.add(new AbstractAction("Hide/Show") { public void actionPerformed(ActionEvent e) { - automaticScale(str); + hideData(fin); repaint(); } }); - menu.add(new AbstractAction(hideString) { + menu.add(new AbstractAction("Automatic Scaling") { public void actionPerformed(ActionEvent e) { - hideData(str); + automaticOneScale(fin); repaint(); } }); - menu.add(new AbstractAction(removeString) { + menu.add(new AbstractAction("Remove") { public void actionPerformed(ActionEvent e) { - removeData(str); + removeData(fin); repaint(); } }); @@ -606,25 +607,6 @@ public void actionPerformed(ActionEvent e) { popMenu.add(menu); } - //scale + remove for all datasets: - JMenu menu = new JMenu("All"); - menu.add(new AbstractAction(automaticScalingString) { - - public void actionPerformed(ActionEvent e) { - automaticScaleAll(); - repaint(); - } - }); - - menu.add(new AbstractAction(removeString) { - - public void actionPerformed(ActionEvent e) { - clear(); - repaint(); - } - }); - - popMenu.add(menu); return popMenu; }