Author: scooter
Date: 2010-11-11 14:50:25 -0800 (Thu, 11 Nov 2010)
New Revision: 22822
Modified:
csplugins/trunk/ucsf/scooter/clusterMaker/build.xml
csplugins/trunk/ucsf/scooter/clusterMaker/resources/plugin.props
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/ClusterMaker.java
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/algorithms/ClusterResults.java
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/algorithms/ConnectedComponents/ConnectedComponentsCluster.java
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/algorithms/DistanceMatrix.java
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/ui/NestedNetworkView.java
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/ui/NewNetworkView.java
Log:
Added Connected Components cluster and changed results to a more reasonable
Modularity metric
Modified: csplugins/trunk/ucsf/scooter/clusterMaker/build.xml
===================================================================
--- csplugins/trunk/ucsf/scooter/clusterMaker/build.xml 2010-11-11 21:59:51 UTC
(rev 22821)
+++ csplugins/trunk/ucsf/scooter/clusterMaker/build.xml 2010-11-11 22:50:25 UTC
(rev 22822)
@@ -1,5 +1,5 @@
-<project name="MyPlugin"
+<project name="clusterMaker"
default="all"
basedir="."
xmlns:artifact="antlib:org.apache.maven.artifact.ant">
@@ -23,7 +23,7 @@
<!-- The version of your plugin. To support plugin.props, make sure the
version is expressed in decimal notation, e.g. 3.0, 3.1, 3.14, etc.
-->
- <property name="version" value="1.7"/>
+ <property name="version" value="1.8"/>
<!-- The version of Cytoscape that you depend on. -->
<property name="cytoscape.version" value="2.8.0-beta2-SNAPSHOT"/>
@@ -67,21 +67,24 @@
<artifact:remoteRepository
id="cytoscape_snapshots"
url="http://cytoscape.wodaklab.org/nexus/content/repositories/snapshots/" />
- <artifact:dependencies pathId="dependency.classpath">
+ <!-- artifact:dependencies pathId="dependency.classpath">
<dependency groupId="cytoscape"
artifactId="application"
version="${cytoscape.version}"/>
<dependency groupId="junit"
artifactId="junit"
version="3.8.1"/>
- </artifact:dependencies>
+ </artifact:dependencies-->
+ <property name="dependency.classpath" value="../../../../cytoscape/"/>
<!-- Define the class path -->
<path id="project.class.path">
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
- <path refid="dependency.classpath"/>
+ <fileset dir="../../../../cytoscape/build/">
+ <include name="*.jar"/>
+ </fileset>
</path>
<!-- Define the junit class path - It needs to find what we just built -->
@@ -115,6 +118,9 @@
classpathref="project.class.path"
destdir="${build.dir}"
debug="${debug}"
+ source="1.5"
+ target="1.5"
+ nowarn="on"
deprecation="${deprecation}"
optimize="${optimize}"
fork="${fork}">
Modified: csplugins/trunk/ucsf/scooter/clusterMaker/resources/plugin.props
===================================================================
--- csplugins/trunk/ucsf/scooter/clusterMaker/resources/plugin.props
2010-11-11 21:59:51 UTC (rev 22821)
+++ csplugins/trunk/ucsf/scooter/clusterMaker/resources/plugin.props
2010-11-11 22:50:25 UTC (rev 22822)
@@ -13,10 +13,10 @@
pluginDescription=Cluster Nodes and/or Edges
# Plugin version number, this must be two numbers separated by a decimlal.
Ex. 0.2, 14.03
-pluginVersion=1.7
+pluginVersion=1.8
# Compatible Cytoscape version
-cytoscapeVersion=2.7
+cytoscapeVersion=2.8
# Category, use one of the categories listed on the website or create your own
pluginCategory=Analysis
Modified:
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/ClusterMaker.java
===================================================================
---
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/ClusterMaker.java
2010-11-11 21:59:51 UTC (rev 22821)
+++
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/ClusterMaker.java
2010-11-11 22:50:25 UTC (rev 22822)
@@ -92,11 +92,16 @@
public final static String CLUSTER_ATTRIBUTE = "__clusterAttribute";
public final static String CLUSTER_PARAMS_ATTRIBUTE = "__clusterParams";
+ public static ClusterMaker clusterMakerInstance = null;
+
/**
* Create our action and add it to the plugins menu
*/
public ClusterMaker() {
+ if (ClusterMaker.clusterMakerInstance == null)
+ clusterMakerInstance = this;
+
vizMenus = new HashMap<JMenuItem, ClusterViz>();
vizMap = new HashMap<String, ClusterViz>();
algMap = new HashMap<String, ClusterAlgorithm>();
@@ -171,6 +176,19 @@
}
}
+ public static ClusterMaker getInstance() {
+ if (clusterMakerInstance == null)
+ new ClusterMaker();
+
+ return clusterMakerInstance;
+ }
+
+ public ClusterAlgorithm getAlgorithm(String algName) {
+ if (algMap.containsKey(algName))
+ return algMap.get(algName);
+ return null;
+ }
+
/**
* addClusterAlgorithm does some basic inquiry of the algorithm to see
what it
* supports and constructs the appropriate menu, taking into account
whether
Modified:
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/algorithms/ClusterResults.java
===================================================================
---
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/algorithms/ClusterResults.java
2010-11-11 21:59:51 UTC (rev 22821)
+++
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/algorithms/ClusterResults.java
2010-11-11 22:50:25 UTC (rev 22822)
@@ -64,6 +64,7 @@
private int maxSize;
private int minSize;
private double clusterCoefficient;
+ private double modularity;
private String extraText = null;
public ClusterResults(CyNetwork network, List<List<CyNode>> cl, String
extraInformation) {
@@ -83,7 +84,7 @@
result += " Average size: "+nf.format(averageSize)+"\n";
result += " Maximum size: "+maxSize+"\n";
result += " Minimum size: "+minSize+"\n";
- result += " Average cluster coefficient:
"+nf.format(clusterCoefficient);
+ result += " Modularity: "+nf.format(modularity);
if (extraText != null)
result += " "+extraText;
return result;
@@ -99,7 +100,10 @@
maxSize = -1;
minSize = Integer.MAX_VALUE;
clusterCoefficient = 0.0;
+ modularity = 0.0;
+ double edgeCount = (double)network.getEdgeCount();
+ int clusterNumber = 0;
for (List<CyNode> cluster: clusters) {
averageSize += (double)cluster.size() /
(double)clusterCount;
maxSize = Math.max(maxSize, cluster.size());
@@ -107,6 +111,11 @@
double innerEdges = getInnerEdgeCount(cluster);
double outerEdges = getOuterEdgeCount(cluster);
clusterCoefficient += (innerEdges /
(innerEdges+outerEdges)) / (double)(clusterCount);
+
+ double percentEdgesInCluster = innerEdges/edgeCount;
+ double percentEdgesTouchingCluster =
(innerEdges+outerEdges)/edgeCount;
+ modularity += percentEdgesInCluster -
percentEdgesTouchingCluster*percentEdgesTouchingCluster;
+ clusterNumber++;
}
}
Modified:
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/algorithms/ConnectedComponents/ConnectedComponentsCluster.java
===================================================================
---
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/algorithms/ConnectedComponents/ConnectedComponentsCluster.java
2010-11-11 21:59:51 UTC (rev 22821)
+++
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/algorithms/ConnectedComponents/ConnectedComponentsCluster.java
2010-11-11 22:50:25 UTC (rev 22822)
@@ -99,7 +99,7 @@
super.initializeProperties();
// Use the standard edge attribute handling stuff....
- edgeAttributeHandler = new
EdgeAttributeHandler(clusterProperties, true);
+ edgeAttributeHandler = new
EdgeAttributeHandler(clusterProperties, false);
super.advancedProperties();
@@ -171,7 +171,7 @@
createGroups(netAttributes, networkID, nodeAttributes,
clusters);
ClusterResults results = new ClusterResults(network,
nodeClusters);
- monitor.setStatus("Done. MCL results:\n"+results);
+ monitor.setStatus("Done. Connected component
results:\n"+results);
// Tell any listeners that we're done
pcs.firePropertyChange(ClusterAlgorithm.CLUSTER_COMPUTED, null,
this);
Modified:
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/algorithms/DistanceMatrix.java
===================================================================
---
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/algorithms/DistanceMatrix.java
2010-11-11 21:59:51 UTC (rev 22821)
+++
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/algorithms/DistanceMatrix.java
2010-11-11 22:50:25 UTC (rev 22822)
@@ -160,7 +160,7 @@
if (matrix == null)
getDistanceMatrix();
- Map<Integer, List<CyNode>> cmap = new HashMap();
+ Map<Integer, List<CyNode>> cmap = new HashMap<Integer,
List<CyNode>>();
matrix.forEachNonZero(new FindComponents(cmap));
return cmap;
}
@@ -318,24 +318,25 @@
private class FindComponents implements IntIntDoubleFunction {
Map<CyNode,Integer> nodeToCluster;
Map<Integer, List<CyNode>> clusterMap;
+ int clusterNumber = 0;
public FindComponents(Map<Integer, List<CyNode>> cMap) {
clusterMap = cMap;
- nodeToCluster = new HashMap();
+ nodeToCluster = new HashMap<CyNode, Integer>();
}
public double apply(int row, int column, double value) {
CyNode node1 = nodes.get(row);
CyNode node2 = nodes.get(column);
if (nodeToCluster.containsKey(node1)) {
- if(!nodeToCluster.containsKey(node2))
+ if(!nodeToCluster.containsKey(node2)) {
addNodeToCluster(nodeToCluster.get(node1), node2);
- else
+ } else
combineClusters(nodeToCluster.get(node1), nodeToCluster.get(node2));
} else {
- if (nodeToCluster.containsKey(node2))
+ if (nodeToCluster.containsKey(node2)) {
addNodeToCluster(nodeToCluster.get(node2), node1);
- else
+ } else
createCluster(node1, node2);
}
return value;
@@ -348,14 +349,16 @@
}
private void createCluster(CyNode node1, CyNode node2) {
- List<CyNode> nodeList = new ArrayList();
- int clusterNumber = clusterMap.keySet().size();
+ List<CyNode> nodeList = new ArrayList<CyNode>();
clusterMap.put(clusterNumber, nodeList);
addNodeToCluster(clusterNumber, node1);
addNodeToCluster(clusterNumber, node2);
+ clusterNumber++;
}
private void combineClusters(Integer cluster1, Integer cluster2) {
+ if (cluster1.intValue() == cluster2.intValue())
+ return;
List<CyNode> list1 = clusterMap.get(cluster1);
List<CyNode> list2 = clusterMap.get(cluster2);
clusterMap.remove(cluster2);
Modified:
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/ui/NestedNetworkView.java
===================================================================
---
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/ui/NestedNetworkView.java
2010-11-11 21:59:51 UTC (rev 22821)
+++
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/ui/NestedNetworkView.java
2010-11-11 22:50:25 UTC (rev 22822)
@@ -80,6 +80,7 @@
// ClusterMaker imports
import clusterMaker.ClusterMaker;
+import clusterMaker.algorithms.AbstractNetworkClusterer;
import clusterMaker.algorithms.ClusterProperties;
import clusterMaker.algorithms.ClusterAlgorithm;
@@ -145,8 +146,8 @@
}
String cluster_type =
networkAttributes.getStringAttribute(netId,
ClusterMaker.CLUSTER_TYPE_ATTRIBUTE);
- if (cluster_type != "MCL" && cluster_type != "GLay" &&
cluster_type != "AP" && cluster_type != "FORCE" &&
- cluster_type != "MCODE" && cluster_type != "TransClust" &&
cluster_type != "ConnectedComponents")
+ ClusterMaker instance = ClusterMaker.getInstance();
+ if (!(instance.getAlgorithm(cluster_type) instanceof
AbstractNetworkClusterer))
return false;
if (networkAttributes.hasAttribute(netId,
ClusterMaker.CLUSTER_ATTRIBUTE)) {
Modified:
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/ui/NewNetworkView.java
===================================================================
---
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/ui/NewNetworkView.java
2010-11-11 21:59:51 UTC (rev 22821)
+++
csplugins/trunk/ucsf/scooter/clusterMaker/src/clusterMaker/ui/NewNetworkView.java
2010-11-11 22:50:25 UTC (rev 22822)
@@ -79,6 +79,7 @@
import clusterMaker.ClusterMaker;
import clusterMaker.algorithms.ClusterProperties;
import clusterMaker.algorithms.ClusterAlgorithm;
+import clusterMaker.algorithms.AbstractNetworkClusterer;
/**
* The ClusterViz class provides the primary interface to the
@@ -97,9 +98,7 @@
protected PropertyChangeSupport pcs;
public NewNetworkView() {
- super();
- initialize();
- checkForAvailability = false;
+ this(false);
}
public NewNetworkView(boolean available) {
@@ -142,9 +141,14 @@
}
String cluster_type =
networkAttributes.getStringAttribute(netId,
ClusterMaker.CLUSTER_TYPE_ATTRIBUTE);
+ ClusterMaker instance = ClusterMaker.getInstance();
+ if (!(instance.getAlgorithm(cluster_type) instanceof
AbstractNetworkClusterer))
+ return false;
+/*
if (cluster_type != "MCL" && cluster_type != "GLay" &&
cluster_type != "AP" && cluster_type != "FORCE" &&
cluster_type != "MCODE" && cluster_type != "TransClust" &&
cluster_type != "ConnectedComponents")
return false;
+*/
if (networkAttributes.hasAttribute(netId,
ClusterMaker.CLUSTER_ATTRIBUTE)) {
clusterAttribute =
networkAttributes.getStringAttribute(netId, ClusterMaker.CLUSTER_ATTRIBUTE);
--
You received this message because you are subscribed to the Google Groups
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/cytoscape-cvs?hl=en.