Author: clopes
Date: 2012-07-27 11:55:57 -0700 (Fri, 27 Jul 2012)
New Revision: 30020

Modified:
   csplugins/trunk/toronto/clopes/mcode/build.xml
   csplugins/trunk/toronto/clopes/mcode/default.properties
   
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/model/MCODEAlgorithm.java
   
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/util/MCODEUtil.java
   
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/view/MCODEResultsPanel.java
Log:
MCODE's cluster subnetworks are now created with "DO_NOT_SAVE" save policy.
The algorithm ignores multiple edges when calculating the network density.

Modified: csplugins/trunk/toronto/clopes/mcode/build.xml
===================================================================
--- csplugins/trunk/toronto/clopes/mcode/build.xml      2012-07-27 18:33:30 UTC 
(rev 30019)
+++ csplugins/trunk/toronto/clopes/mcode/build.xml      2012-07-27 18:55:57 UTC 
(rev 30020)
@@ -14,7 +14,7 @@
     <property environment="env"/>
     
     <property name="build.dir" value="target"/>
-    <property name="cytoscape.app.dir" value="${cytoscape.home}/deploy"/>
+    <property name="cytoscape.app.dir" 
value="${cytoscape.home}/apps/installed"/>
 
     <target name="install">
         <copy todir="${cytoscape.app.dir}" overwrite="true">

Modified: csplugins/trunk/toronto/clopes/mcode/default.properties
===================================================================
--- csplugins/trunk/toronto/clopes/mcode/default.properties     2012-07-27 
18:33:30 UTC (rev 30019)
+++ csplugins/trunk/toronto/clopes/mcode/default.properties     2012-07-27 
18:55:57 UTC (rev 30020)
@@ -1,2 +1,2 @@
 # Overwrite it in your local.properties file
-cytoscape.home=/Applications/Cytoscape_v3.0
\ No newline at end of file
+cytoscape.home=${user.home}/.cytoscape/3.0
\ No newline at end of file

Modified: 
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/model/MCODEAlgorithm.java
===================================================================
--- 
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/model/MCODEAlgorithm.java
   2012-07-27 18:33:30 UTC (rev 30019)
+++ 
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/model/MCODEAlgorithm.java
   2012-07-27 18:55:57 UTC (rev 30020)
@@ -16,6 +16,7 @@
 import org.cytoscape.model.CyEdge;
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNode;
+import org.cytoscape.model.SavePolicy;
 import org.cytoscape.model.subnetwork.CySubNetwork;
 import org.cytoscape.work.TaskMonitor;
 import org.slf4j.Logger;
@@ -499,7 +500,7 @@
                        nodes.add(n);
                }
 
-               CySubNetwork outputNetwork = 
mcodeUtil.createSubNetwork(inputNetwork, nodes);
+               CySubNetwork outputNetwork = 
mcodeUtil.createSubNetwork(inputNetwork, nodes, SavePolicy.DO_NOT_SAVE);
 
                return outputNetwork;
        }
@@ -596,7 +597,7 @@
                }
                
                // extract neighborhood subgraph
-               CySubNetwork neighborhoodNet = 
mcodeUtil.createSubNetwork(inputNetwork, neighbors);
+               CySubNetwork neighborhoodNet = 
mcodeUtil.createSubNetwork(inputNetwork, neighbors, SavePolicy.DO_NOT_SAVE);
                
                if (neighborhoodNet == null) {
                        // this shouldn't happen
@@ -821,9 +822,6 @@
         * @return The density of the network
         */
        public double calcDensity(CySubNetwork network, boolean includeLoops) {
-               int possibleEdgeNum = 0, actualEdgeNum = 0, loopCount = 0;
-               double density = 0;
-
                String callerID = "MCODEAlgorithm.calcDensity";
 
                if (network == null) {
@@ -832,31 +830,36 @@
                }
 
                int nodeCount = network.getNodeCount();
-               int edgeCount = network.getEdgeCount();
-
-               if (!includeLoops) {
-                       //count loops
-                       List<CyNode> nodes = network.getNodeList();
-
-                       for (CyNode n : nodes) {
-                               List<CyEdge> loopEdges = 
network.getConnectingEdgeList(n, n, CyEdge.Type.ANY);
-
-                               if (loopEdges != null && loopEdges.size() > 0)
-                                       loopCount++;
-                       }
-
+               int actualEdgeNum = getMergedEdgeCount(network, includeLoops);
+               int possibleEdgeNum = 0;
+               
+               if (includeLoops)
+                       possibleEdgeNum = (nodeCount * (nodeCount + 1)) / 2;
+               else
                        possibleEdgeNum = (nodeCount * (nodeCount - 1)) / 2;
-                       actualEdgeNum = edgeCount - loopCount;
-               } else {
-                       possibleEdgeNum = (nodeCount * (nodeCount + 1)) / 2;
-                       actualEdgeNum = edgeCount;
-               }
 
-               density = (double) actualEdgeNum / (double) possibleEdgeNum;
+               double density = (double) actualEdgeNum / (double) 
possibleEdgeNum;
 
                return density;
        }
 
+       private int getMergedEdgeCount(CySubNetwork network, boolean 
includeLoops) {
+               Set<String> suidPairs = new HashSet<String>();
+               
+               for (CyEdge e : network.getEdgeList()) {
+                       Long id1 = e.getSource().getSUID();
+                       Long id2 = e.getTarget().getSUID();
+                       
+                       if (!includeLoops && id1 == id2)
+                               continue;
+                       
+                       String pair = id1 < id2 ? id1+"_"+id2 : id2+"_"+id1;
+                       suidPairs.add(pair);
+               }
+               
+               return suidPairs.size();
+       }
+
        /**
         * Find a k-core of a network. A k-core is a subgraph of minimum degree 
k
         *
@@ -899,7 +902,8 @@
                                        outputNodes.add(n);
                                }
                                
-                               outputNetwork = 
mcodeUtil.createSubNetwork(inputNetwork.getRootNetwork(), outputNodes);
+                               outputNetwork = 
mcodeUtil.createSubNetwork(inputNetwork.getRootNetwork(), outputNodes,
+                                               SavePolicy.DO_NOT_SAVE);
                                
                                if (outputNetwork.getNodeCount() == 0) {
                                        return null;

Modified: 
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/util/MCODEUtil.java
===================================================================
--- 
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/util/MCODEUtil.java
 2012-07-27 18:33:30 UTC (rev 30019)
+++ 
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/util/MCODEUtil.java
 2012-07-27 18:55:57 UTC (rev 30020)
@@ -69,6 +69,7 @@
 import org.cytoscape.model.CyNode;
 import org.cytoscape.model.CyRow;
 import org.cytoscape.model.CyTable;
+import org.cytoscape.model.SavePolicy;
 import org.cytoscape.model.subnetwork.CyRootNetwork;
 import org.cytoscape.model.subnetwork.CyRootNetworkManager;
 import org.cytoscape.model.subnetwork.CySubNetwork;
@@ -476,7 +477,7 @@
                return image;
        }
 
-       public CySubNetwork createSubNetwork(final CyNetwork net, 
Collection<CyNode> nodes) {
+       public CySubNetwork createSubNetwork(final CyNetwork net, final 
Collection<CyNode> nodes, final SavePolicy policy) {
                final CyRootNetwork root = rootNetworkMgr.getRootNetwork(net);
                final Set<CyEdge> edges = new HashSet<CyEdge>();
 
@@ -491,7 +492,7 @@
                        }
                }
                
-               final CySubNetwork subNet = root.addSubNetwork(nodes, edges);
+               final CySubNetwork subNet = root.addSubNetwork(nodes, edges, 
policy);
                subNetworks.add(subNet);
                
                return subNet;

Modified: 
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/view/MCODEResultsPanel.java
===================================================================
--- 
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/view/MCODEResultsPanel.java
 2012-07-27 18:33:30 UTC (rev 30019)
+++ 
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/view/MCODEResultsPanel.java
 2012-07-27 18:55:57 UTC (rev 30020)
@@ -68,6 +68,7 @@
 import org.cytoscape.model.CyNode;
 import org.cytoscape.model.CyRow;
 import org.cytoscape.model.CyTable;
+import org.cytoscape.model.SavePolicy;
 import org.cytoscape.model.subnetwork.CySubNetwork;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.view.model.View;
@@ -488,7 +489,8 @@
 
                                @Override
                                protected CyNetworkView doInBackground() throws 
Exception {
-                                       CySubNetwork newNetwork = 
mcodeUtil.createSubNetwork(clusterNetwork, clusterNetwork.getNodeList());
+                                       CySubNetwork newNetwork = 
mcodeUtil.createSubNetwork(clusterNetwork, clusterNetwork.getNodeList(),
+                                                       
SavePolicy.SESSION_FILE);
                                        
newNetwork.getRow(newNetwork).set(CyNetwork.NAME, title);
 
                                        mcodeUtil.addVirtualColumns(newNetwork, 
network);

-- 
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