summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection')
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/DistanceFunctionVisualization.java92
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/MoveObjectsToolVisualization.java2
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/SelectionToolCubeVisualization.java5
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/SelectionToolDotVisualization.java3
-rw-r--r--src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/package-info.java2
5 files changed, 50 insertions, 54 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/DistanceFunctionVisualization.java b/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/DistanceFunctionVisualization.java
index 38dc973f..40fd96f9 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/DistanceFunctionVisualization.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/DistanceFunctionVisualization.java
@@ -1,26 +1,27 @@
package de.lmu.ifi.dbs.elki.visualization.visualizers.scatterplot.selection;
-/*
- This file is part of ELKI:
+
+/*
+ This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
-
- Copyright (C) 2013
- Ludwig-Maximilians-Universität München
- Lehr- und Forschungseinheit für Datenbanksysteme
+
+ Copyright (C) 2013
+ Ludwig-Maximilians-Universität München
+ Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
- This program 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
+
+ This program 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 Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
import java.util.Collection;
@@ -32,15 +33,13 @@ import de.lmu.ifi.dbs.elki.data.VectorUtil;
import de.lmu.ifi.dbs.elki.database.datastore.DataStoreListener;
import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
-import de.lmu.ifi.dbs.elki.database.ids.distance.DistanceDBIDPair;
-import de.lmu.ifi.dbs.elki.database.ids.distance.DistanceDBIDListIter;
-import de.lmu.ifi.dbs.elki.database.ids.distance.KNNList;
+import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDListIter;
+import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDPair;
+import de.lmu.ifi.dbs.elki.database.ids.KNNList;
import de.lmu.ifi.dbs.elki.distance.distancefunction.ArcCosineDistanceFunction;
import de.lmu.ifi.dbs.elki.distance.distancefunction.CosineDistanceFunction;
import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction;
import de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.LPNormDistanceFunction;
-import de.lmu.ifi.dbs.elki.distance.distancevalue.DoubleDistance;
-import de.lmu.ifi.dbs.elki.distance.distancevalue.NumberDistance;
import de.lmu.ifi.dbs.elki.index.preprocessed.knn.AbstractMaterializeKNNPreprocessor;
import de.lmu.ifi.dbs.elki.logging.LoggingUtil;
import de.lmu.ifi.dbs.elki.math.MathUtil;
@@ -95,13 +94,13 @@ public class DistanceFunctionVisualization extends AbstractVisFactory {
@Override
public Visualization makeVisualization(VisualizationTask task) {
- return new Instance<DoubleDistance>(task);
+ return new Instance(task);
}
@Override
public void processNewResult(HierarchicalResult baseResult, Result result) {
- Collection<AbstractMaterializeKNNPreprocessor<?, ?, ?>> kNNIndex = ResultUtil.filterResults(result, AbstractMaterializeKNNPreprocessor.class);
- for(AbstractMaterializeKNNPreprocessor<?, ?, ?> kNN : kNNIndex) {
+ Collection<AbstractMaterializeKNNPreprocessor<?>> kNNIndex = ResultUtil.filterResults(result, AbstractMaterializeKNNPreprocessor.class);
+ for(AbstractMaterializeKNNPreprocessor<?> kNN : kNNIndex) {
Collection<ScatterPlotProjector<?>> ps = ResultUtil.filterResults(baseResult, ScatterPlotProjector.class);
for(ScatterPlotProjector<?> p : ps) {
final VisualizationTask task = new VisualizationTask(NAME, kNN, p.getRelation(), this);
@@ -118,8 +117,8 @@ public class DistanceFunctionVisualization extends AbstractVisFactory {
* @param kNN kNN preprocessor
* @return p of LP norm, or NaN
*/
- public static double getLPNormP(AbstractMaterializeKNNPreprocessor<?, ?, ?> kNN) {
- DistanceFunction<?, ?> distanceFunction = kNN.getDistanceQuery().getDistanceFunction();
+ public static double getLPNormP(AbstractMaterializeKNNPreprocessor<?> kNN) {
+ DistanceFunction<?> distanceFunction = kNN.getDistanceQuery().getDistanceFunction();
if(LPNormDistanceFunction.class.isInstance(distanceFunction)) {
return ((LPNormDistanceFunction) distanceFunction).getP();
}
@@ -132,8 +131,8 @@ public class DistanceFunctionVisualization extends AbstractVisFactory {
* @param kNN kNN preprocessor
* @return true when angular
*/
- public static boolean isAngularDistance(AbstractMaterializeKNNPreprocessor<?, ?, ?> kNN) {
- DistanceFunction<?, ?> distanceFunction = kNN.getDistanceQuery().getDistanceFunction();
+ public static boolean isAngularDistance(AbstractMaterializeKNNPreprocessor<?> kNN) {
+ DistanceFunction<?> distanceFunction = kNN.getDistanceQuery().getDistanceFunction();
if(CosineDistanceFunction.class.isInstance(distanceFunction)) {
return true;
}
@@ -152,13 +151,13 @@ public class DistanceFunctionVisualization extends AbstractVisFactory {
* @param angle Opening angle in radians
* @return path element
*/
- public static Element drawCosine(SVGPlot svgp, Projection2D proj, NumberVector<?> mid, double angle) {
+ public static Element drawCosine(SVGPlot svgp, Projection2D proj, NumberVector mid, double angle) {
// Project origin
double[] pointOfOrigin = proj.fastProjectDataToRenderSpace(new double[proj.getInputDimensionality()]);
-
+
// direction of the selected Point
double[] selPoint = proj.fastProjectDataToRenderSpace(mid);
-
+
double[] range1, range2;
{
// Rotation plane:
@@ -195,7 +194,7 @@ public class DistanceFunctionVisualization extends AbstractVisFactory {
range1 = proj.fastProjectDataToRenderSpace(r1);
range2 = proj.fastProjectDataToRenderSpace(r2);
}
-
+
// Continue lines to viewport.
{
CanvasSize viewport = proj.estimateViewport();
@@ -213,7 +212,7 @@ public class DistanceFunctionVisualization extends AbstractVisFactory {
VMath.timesEquals(start2, viewport.continueToMargin(range2, start2));
VMath.plusEquals(start1, range1);
VMath.plusEquals(start2, range2);
-
+
// TODO: add filled variant?
SVGPath path = new SVGPath();
path.moveTo(start1);
@@ -233,9 +232,8 @@ public class DistanceFunctionVisualization extends AbstractVisFactory {
* @apiviz.has SelectionResult oneway - - visualizes
* @apiviz.has DBIDSelection oneway - - visualizes
*
- * @param <D> Distance type
*/
- public class Instance<D extends NumberDistance<D, ?>> extends AbstractScatterplotVisualization implements DataStoreListener {
+ public class Instance extends AbstractScatterplotVisualization implements DataStoreListener {
/**
* Generic tags to indicate the type of element. Used in IDs, CSS-Classes
* etc.
@@ -249,7 +247,7 @@ public class DistanceFunctionVisualization extends AbstractVisFactory {
/**
* The selection result we work on
*/
- private AbstractMaterializeKNNPreprocessor<? extends NumberVector<?>, D, ?> result;
+ private AbstractMaterializeKNNPreprocessor<? extends NumberVector> result;
/**
* Constructor
@@ -277,18 +275,18 @@ public class DistanceFunctionVisualization extends AbstractVisFactory {
DBIDs selection = selContext.getSelectedIds();
for(DBIDIter i = selection.iter(); i.valid(); i.advance()) {
- final KNNList<D> knn = result.get(i);
- for(DistanceDBIDListIter<D> iter = knn.iter(); iter.valid(); iter.advance()) {
+ final KNNList knn = result.get(i);
+ for(DoubleDBIDListIter iter = knn.iter(); iter.valid(); iter.advance()) {
try {
double[] v = proj.fastProjectDataToRenderSpace(rel.get(iter));
- if (v[0] != v[0] || v[1] != v[1]) {
+ if(v[0] != v[0] || v[1] != v[1]) {
continue; // NaN!
}
Element dot = svgp.svgCircle(v[0], v[1], size);
SVGUtil.addCSSClass(dot, KNNMARKER);
layer.appendChild(dot);
- Element lbl = svgp.svgText(v[0] + size, v[1] + size, iter.getDistance().toString());
+ Element lbl = svgp.svgText(v[0] + size, v[1] + size, Double.toString(iter.doubleValue()));
SVGUtil.addCSSClass(lbl, KNNDIST);
layer.appendChild(lbl);
}
@@ -297,21 +295,21 @@ public class DistanceFunctionVisualization extends AbstractVisFactory {
}
}
// Last element
- DistanceDBIDPair<D> last = knn.get(knn.size() - 1);
+ DoubleDBIDPair last = knn.get(knn.size() - 1);
// Draw hypersphere if possible
{
final Element dist;
if(p == 1.0) {
- dist = SVGHyperSphere.drawManhattan(svgp, proj, rel.get(i), last.getDistance().doubleValue());
+ dist = SVGHyperSphere.drawManhattan(svgp, proj, rel.get(i), last.doubleValue());
}
else if(p == 2.0) {
- dist = SVGHyperSphere.drawEuclidean(svgp, proj, rel.get(i), last.getDistance().doubleValue());
+ dist = SVGHyperSphere.drawEuclidean(svgp, proj, rel.get(i), last.doubleValue());
}
else if(!Double.isNaN(p)) {
- dist = SVGHyperSphere.drawLp(svgp, proj, rel.get(i), last.getDistance().doubleValue(), p);
+ dist = SVGHyperSphere.drawLp(svgp, proj, rel.get(i), last.doubleValue(), p);
}
else if(angular) {
- final NumberVector<?> refvec = rel.get(i);
+ final NumberVector refvec = rel.get(i);
// Recompute the angle - it could be cosine or arccosine distance
double maxangle = Math.acos(VectorUtil.cosAngle(refvec, rel.get(last)));
dist = drawCosine(svgp, proj, refvec, maxangle);
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/MoveObjectsToolVisualization.java b/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/MoveObjectsToolVisualization.java
index 0f9f99a4..7c49395c 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/MoveObjectsToolVisualization.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/MoveObjectsToolVisualization.java
@@ -160,7 +160,7 @@ public class MoveObjectsToolVisualization extends AbstractVisFactory {
private void updateDB(DBIDs dbids, Vector movingVector) {
throw new AbortException("FIXME: INCOMPLETE TRANSITION");
/*
- * NumberVector<?> nv = null; database.accumulateDataStoreEvents();
+ * NumberVector nv = null; database.accumulateDataStoreEvents();
* Representation<DatabaseObjectMetadata> mrep =
* database.getMetadataQuery(); for(DBID dbid : dbids) { NV obj =
* database.get(dbid); // Copy metadata to keep DatabaseObjectMetadata
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/SelectionToolCubeVisualization.java b/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/SelectionToolCubeVisualization.java
index f088d219..9289c350 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/SelectionToolCubeVisualization.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/SelectionToolCubeVisualization.java
@@ -76,8 +76,7 @@ public class SelectionToolCubeVisualization extends AbstractVisFactory {
private static final String NAME = "Range Selection";
/**
- * Constructor, adhering to
- * {@link de.lmu.ifi.dbs.elki.utilities.optionhandling.Parameterizable}.
+ * Constructor.
*/
public SelectionToolCubeVisualization() {
super();
@@ -261,7 +260,7 @@ public class SelectionToolCubeVisualization extends AbstractVisFactory {
selection.clear();
candidates: for (DBIDIter iditer = rel.iterDBIDs(); iditer.valid(); iditer.advance()) {
- NumberVector<?> dbTupel = rel.get(iditer);
+ NumberVector dbTupel = rel.get(iditer);
for (int i = 0; i < dim; i++) {
if (ranges != null && ranges[i] != null) {
if (dbTupel.doubleValue(i) < ranges[i].first || dbTupel.doubleValue(i) > ranges[i].second) {
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/SelectionToolDotVisualization.java b/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/SelectionToolDotVisualization.java
index 6fa8200c..06b0e2ec 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/SelectionToolDotVisualization.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/SelectionToolDotVisualization.java
@@ -75,8 +75,7 @@ public class SelectionToolDotVisualization extends AbstractVisFactory {
}
/**
- * Constructor, adhering to
- * {@link de.lmu.ifi.dbs.elki.utilities.optionhandling.Parameterizable}
+ * Constructor.
*/
public SelectionToolDotVisualization() {
super();
diff --git a/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/package-info.java b/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/package-info.java
index 86214f53..00422c31 100644
--- a/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/package-info.java
+++ b/src/de/lmu/ifi/dbs/elki/visualization/visualizers/scatterplot/selection/package-info.java
@@ -5,7 +5,7 @@
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
- Copyright (C) 2013
+ Copyright (C) 2014
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team