Author: clopes
Date: 2012-07-24 09:32:05 -0700 (Tue, 24 Jul 2012)
New Revision: 29973
Modified:
csplugins/trunk/toronto/clopes/mcode/pom.xml
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/CyActivator.java
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/MCODEAnalyzeAction.java
Log:
These changes allow MCODE to analyze the same network again with the same
parameters if that network is changed (nodes/edges added or removed).
Modified: csplugins/trunk/toronto/clopes/mcode/pom.xml
===================================================================
--- csplugins/trunk/toronto/clopes/mcode/pom.xml 2012-07-24 06:06:45 UTC
(rev 29972)
+++ csplugins/trunk/toronto/clopes/mcode/pom.xml 2012-07-24 16:32:05 UTC
(rev 29973)
@@ -169,6 +169,16 @@
</dependency>
<dependency>
<groupId>org.cytoscape</groupId>
+ <artifactId>model-api</artifactId>
+ <version>${cytoscape.api.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.cytoscape</groupId>
+ <artifactId>viewmodel-api</artifactId>
+ <version>${cytoscape.api.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.cytoscape</groupId>
<artifactId>swing-application-api</artifactId>
<version>${cytoscape.api.version}</version>
</dependency>
Modified:
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/CyActivator.java
===================================================================
---
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/CyActivator.java
2012-07-24 06:06:45 UTC (rev 29972)
+++
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/CyActivator.java
2012-07-24 16:32:05 UTC (rev 29973)
@@ -3,7 +3,6 @@
import java.util.Properties;
import org.cytoscape.application.CyApplicationManager;
-import org.cytoscape.application.events.SetCurrentNetworkListener;
import org.cytoscape.application.swing.CyAction;
import org.cytoscape.application.swing.CySwingApplication;
import
org.cytoscape.application.swing.events.CytoPanelComponentSelectedListener;
@@ -74,7 +73,7 @@
registerService(bc, closeAction,
NetworkAboutToBeDestroyedListener.class, new Properties());
registerService(bc, helpAction, CyAction.class, new
Properties());
registerService(bc, aboutAction, CyAction.class, new
Properties());
- registerService(bc, analyzeAction,
SetCurrentNetworkListener.class, new Properties());
+ registerAllServices(bc, analyzeAction, new Properties());
registerService(bc, visualStyleAction, CyAction.class, new
Properties());
registerService(bc, visualStyleAction,
CytoPanelComponentSelectedListener.class, new Properties());
}
Modified:
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/MCODEAnalyzeAction.java
===================================================================
---
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/MCODEAnalyzeAction.java
2012-07-24 06:06:45 UTC (rev 29972)
+++
csplugins/trunk/toronto/clopes/mcode/src/main/java/org/cytoscape/mcode/internal/MCODEAnalyzeAction.java
2012-07-24 16:32:05 UTC (rev 29973)
@@ -2,7 +2,9 @@
import java.awt.event.ActionEvent;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
import javax.swing.JOptionPane;
@@ -24,6 +26,14 @@
import org.cytoscape.mcode.internal.view.MCODEResultsPanel;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode;
+import org.cytoscape.model.events.AddedEdgesEvent;
+import org.cytoscape.model.events.AddedEdgesListener;
+import org.cytoscape.model.events.AddedNodesEvent;
+import org.cytoscape.model.events.AddedNodesListener;
+import org.cytoscape.model.events.RemovedEdgesEvent;
+import org.cytoscape.model.events.RemovedEdgesListener;
+import org.cytoscape.model.events.RemovedNodesEvent;
+import org.cytoscape.model.events.RemovedNodesListener;
import org.cytoscape.service.util.CyServiceRegistrar;
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.model.CyNetworkViewManager;
@@ -70,7 +80,8 @@
/**
* Simple score and find action for MCODE. This should be the default for
general users.
*/
-public class MCODEAnalyzeAction extends AbstractMCODEAction implements
SetCurrentNetworkListener {
+public class MCODEAnalyzeAction extends AbstractMCODEAction implements
SetCurrentNetworkListener, AddedNodesListener,
+ AddedEdgesListener, RemovedNodesListener, RemovedEdgesListener {
private static final long serialVersionUID = 87924889404093104L;
@@ -85,6 +96,8 @@
int analyze = FIRST_TIME;
+ private Map<Long/*network_suid*/, Boolean> dirtyNetworks;
+
private static final Logger logger =
LoggerFactory.getLogger(MCODEAnalyzeAction.class);
public MCODEAnalyzeAction(final String title,
@@ -98,6 +111,7 @@
this.registrar = registrar;
this.taskManager = taskManager;
this.mcodeUtil = mcodeUtil;
+ dirtyNetworks = new HashMap<Long, Boolean>();
}
/**
@@ -106,7 +120,7 @@
* @param event Click of the analyzeButton on the MCODEMainPanel.
*/
@Override
- public void actionPerformed(ActionEvent event) {
+ public void actionPerformed(final ActionEvent event) {
String interruptedMessage = "";
// Get the selected network
final CyNetwork network =
applicationManager.getCurrentNetwork();
@@ -162,30 +176,19 @@
}
final int resultId = mcodeUtil.getCurrentResultId();
-
+
// These statements determine which portion of the algorithm
needs to be conducted by
// testing which parameters have been modified compared to the
last saved parameters.
// Here we ensure that only relevant parameters are looked at.
For example, fluff density
// parameter is irrelevant if fluff is not used in the current
parameters. Also, none of
// the clustering parameters are relevant if the optimization
is used
- if (currentParamsCopy.isIncludeLoops() !=
savedParamsCopy.isIncludeLoops() ||
- currentParamsCopy.getDegreeCutoff() !=
savedParamsCopy.getDegreeCutoff() || analyze == FIRST_TIME) {
+ if (analyze == FIRST_TIME || isDirty(network)
+ || currentParamsCopy.isIncludeLoops() !=
savedParamsCopy.isIncludeLoops()
+ || currentParamsCopy.getDegreeCutoff() !=
savedParamsCopy.getDegreeCutoff()) {
analyze = RESCORE;
logger.debug("Analysis: score network, find clusters");
mcodeUtil.getCurrentParameters().setParams(currentParamsCopy, resultId,
network.getSUID());
- } else if
(!currentParamsCopy.getScope().equals(savedParamsCopy.getScope()) ||
-
(!currentParamsCopy.getScope().equals(MCODEParameterSet.NETWORK) &&
currentParamsCopy
- .getSelectedNodes() !=
savedParamsCopy.getSelectedNodes()) ||
- currentParamsCopy.isOptimize() !=
savedParamsCopy.isOptimize() ||
- (!currentParamsCopy.isOptimize() &&
(currentParamsCopy.getKCore() != savedParamsCopy.getKCore() ||
-
currentParamsCopy.getMaxDepthFromStart() !=
savedParamsCopy
-
.getMaxDepthFromStart() ||
-
currentParamsCopy.isHaircut() !=
savedParamsCopy.isHaircut() ||
-
currentParamsCopy.getNodeScoreCutoff() !=
savedParamsCopy
-
.getNodeScoreCutoff() ||
-
currentParamsCopy.isFluff() !=
savedParamsCopy.isFluff() || (currentParamsCopy
- .isFluff() &&
currentParamsCopy.getFluffNodeDensityCutoff() != savedParamsCopy
-
.getFluffNodeDensityCutoff())))) {
+ } else if (parametersChanged(savedParamsCopy,
currentParamsCopy)) {
analyze = REFIND;
logger.debug("Analysis: find clusters");
mcodeUtil.getCurrentParameters().setParams(currentParamsCopy, resultId,
network.getSUID());
@@ -218,6 +221,7 @@
public void handleEvent(final
AnalysisCompletedEvent e) {
MCODEResultsPanel resultsPanel = null;
boolean resultFound = false;
+ setDirty(network, false);
// Display clusters in a new modal
dialog box
if (e.isSuccessful()) {
@@ -273,4 +277,59 @@
public void handleEvent(SetCurrentNetworkEvent e) {
updateEnableState();
}
+
+ @Override
+ public void handleEvent(RemovedEdgesEvent e) {
+ setDirty(e.getSource(), true);
+ }
+
+ @Override
+ public void handleEvent(RemovedNodesEvent e) {
+ setDirty(e.getSource(), true);
+ }
+
+ @Override
+ public void handleEvent(AddedEdgesEvent e) {
+ setDirty(e.getSource(), true);
+ }
+
+ @Override
+ public void handleEvent(AddedNodesEvent e) {
+ setDirty(e.getSource(), true);
+ }
+
+ /**
+ * @param p1 previous parameters set
+ * @param p2 current parameters set
+ * @return
+ */
+ private boolean parametersChanged(final MCODEParameterSet p1, final
MCODEParameterSet p2) {
+ boolean b = !p2.getScope().equals(p1.getScope());
+ b = b || (!p2.getScope().equals(MCODEParameterSet.NETWORK) &&
p2.getSelectedNodes() != p1.getSelectedNodes());
+ b = b || (p2.isOptimize() != p1.isOptimize());
+ b = b || (!p2.isOptimize() && (p2.getKCore() != p1.getKCore() ||
+
p2.getMaxDepthFromStart() != p1.getMaxDepthFromStart() ||
+
p2.isHaircut() != p1.isHaircut() ||
+
p2.getNodeScoreCutoff() != p1.getNodeScoreCutoff() ||
+
p2.isFluff() != p1.isFluff() ||
+
(p2.isFluff() && p2.getFluffNodeDensityCutoff() !=
p1.getFluffNodeDensityCutoff())));
+ return b;
+ }
+
+ private void setDirty(final CyNetwork net, final boolean dirty) {
+ if (mcodeUtil.containsNetworkAlgorithm(net.getSUID())) {
+ if (dirty)
+ dirtyNetworks.put(net.getSUID(), dirty);
+ else
+ dirtyNetworks.remove(net.getSUID());
+ }
+ }
+
+ /**
+ * @param net
+ * @return true if the network has been modified after the last
analysis.
+ */
+ private boolean isDirty(final CyNetwork net) {
+ return Boolean.TRUE.equals(dirtyNetworks.get(net.getSUID()));
+ }
}
--
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.