From 87a6f444f7e215abd2a0d5081eb646d7da88e4ec Mon Sep 17 00:00:00 2001 From: Marcel Kronfeld Date: Fri, 29 Apr 2011 16:23:23 +0000 Subject: [PATCH] New interfaces for density based clustering --- .../cluster/ClusteringDensityBased.java | 32 ++++++++++--------- .../InterfaceClusteringDistanceParam.java | 12 +++++++ .../InterfaceClusteringMetricBased.java | 14 ++++++++ 3 files changed, 43 insertions(+), 15 deletions(-) create mode 100644 src/eva2/server/go/operators/cluster/InterfaceClusteringDistanceParam.java create mode 100644 src/eva2/server/go/operators/cluster/InterfaceClusteringMetricBased.java diff --git a/src/eva2/server/go/operators/cluster/ClusteringDensityBased.java b/src/eva2/server/go/operators/cluster/ClusteringDensityBased.java index f95a2bb9..1ccfb061 100644 --- a/src/eva2/server/go/operators/cluster/ClusteringDensityBased.java +++ b/src/eva2/server/go/operators/cluster/ClusteringDensityBased.java @@ -17,7 +17,7 @@ import eva2.tools.Pair; * Time: 15:17:53 * To change this template use Options | File Templates. */ -public class ClusteringDensityBased implements InterfaceClustering, java.io.Serializable { +public class ClusteringDensityBased implements InterfaceClusteringDistanceParam, InterfaceClusteringMetricBased, java.io.Serializable { private InterfaceDistanceMetric m_Metric = new PhenotypeMetric(); private double m_ClusterDistance = 0.1; @@ -105,7 +105,10 @@ public class ClusteringDensityBased implements InterfaceClustering, java.io.Seri ConnectionMatrix[i][i] = true; for (int j = i+1; j < pop.size(); j++) { tmpIndy2 = (AbstractEAIndividual)pop.get(j); - if (this.m_Metric.distance(tmpIndy1, tmpIndy2) < this.m_ClusterDistance) { + if (tmpIndy1==null || (tmpIndy2==null)) { + System.err.println("Warning: Individual should not be null (ClusteringDensityBased)!"); + } + if ((tmpIndy1!=null) && (tmpIndy2!=null) && (this.m_Metric.distance(tmpIndy1, tmpIndy2) < this.m_ClusterDistance)) { ConnectionMatrix[i][j] = true; ConnectionMatrix[j][i] = true; } else { @@ -241,19 +244,7 @@ public class ClusteringDensityBased implements InterfaceClustering, java.io.Seri public String metricTipText() { return "Choose the distance metric to use."; } - /** This method allows you to set/get the distance threshhold of the DBSCAN method. - * @return The currently used distance threshhold. - */ - public double getClusterDistance() { - return this.m_ClusterDistance; - } - public void setClusterDistance(double m){ - if (m < 0) m = 0; - this.m_ClusterDistance = m; - } - public String clusterDistanceTipText() { - return "Set the distance threshhold for the DBSCAN method."; - } + /** This method allows you to set/get the minimal group size of the DBSCAN method. * @return The currently used minimal group size. */ @@ -272,6 +263,17 @@ public class ClusteringDensityBased implements InterfaceClustering, java.io.Seri return null; } + public double getClustDistParam() { + return this.m_ClusterDistance; + } + public void setClustDistParam(double m) { + if (m < 0) m = 0; + this.m_ClusterDistance = m; + } + public String clustDistTipText() { + return "Set the distance threshhold for the DBSCAN method."; + } + // /** For debuggy only // * @param plot TopoPlot diff --git a/src/eva2/server/go/operators/cluster/InterfaceClusteringDistanceParam.java b/src/eva2/server/go/operators/cluster/InterfaceClusteringDistanceParam.java new file mode 100644 index 00000000..596a1d45 --- /dev/null +++ b/src/eva2/server/go/operators/cluster/InterfaceClusteringDistanceParam.java @@ -0,0 +1,12 @@ +package eva2.server.go.operators.cluster; + +/** + * A clustering method which has a cluster parameter - the niche radius for example. + * + * @author mkron + * + */ +public interface InterfaceClusteringDistanceParam extends InterfaceClustering { + public double getClustDistParam(); + public void setClustDistParam(double param); +} diff --git a/src/eva2/server/go/operators/cluster/InterfaceClusteringMetricBased.java b/src/eva2/server/go/operators/cluster/InterfaceClusteringMetricBased.java new file mode 100644 index 00000000..921c7010 --- /dev/null +++ b/src/eva2/server/go/operators/cluster/InterfaceClusteringMetricBased.java @@ -0,0 +1,14 @@ +package eva2.server.go.operators.cluster; + +import eva2.server.go.operators.distancemetric.InterfaceDistanceMetric; + +/** + * A clustering method which is associated with a metric. + * + * @author mkron + * + */ +public interface InterfaceClusteringMetricBased { + public InterfaceDistanceMetric getMetric(); + public void setMetric(InterfaceDistanceMetric m); +}