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.

Reply via email to