Skip to content
Snippets Groups Projects
Commit 86c5da84 authored by Philipp Spohr's avatar Philipp Spohr
Browse files

To latest

parent 65c2f4f5
No related branches found
No related tags found
No related merge requests found
......@@ -157,6 +157,11 @@
<artifactId>swing-util-api</artifactId>
<version>${cytoscape.api.version}</version>
</dependency>
<dependency>
<groupId>org.cytoscape</groupId>
<artifactId>group-api</artifactId>
<version>${cytoscape.api.version}</version>
</dependency>
</dependencies>
<description>A Cytoscape plugin for graph-based clustering that wraps the yoshiko algorithm.</description>
......
......@@ -38,6 +38,7 @@ import org.cytoscape.model.subnetwork.CyRootNetworkManager;
import org.cytoscape.service.util.AbstractCyActivator;
import org.cytoscape.service.util.CyServiceRegistrar;
import org.cytoscape.session.events.SessionLoadedListener;
import org.cytoscape.task.create.CloneNetworkTaskFactory;
import org.cytoscape.task.visualize.ApplyVisualStyleTaskFactory;
import org.cytoscape.view.model.CyNetworkViewFactory;
import org.cytoscape.view.layout.CyLayoutAlgorithmManager;
......@@ -87,6 +88,7 @@ public class CyActivator extends AbstractCyActivator {
CyCore.rootNetworkManager = getService(context,CyRootNetworkManager.class);
CyCore.applyVisualStyleTaskFactory = getService(context,ApplyVisualStyleTaskFactory.class);
CyCore.renderingEngineFactory = getService(context,RenderingEngineFactory.class);
CyCore.cloneNetworkTaskFactory = getService(context,CloneNetworkTaskFactory.class);
//Set language according to settings
LocalizationManager.switchLanguage(cm.getProperties().getProperty("locale", "enUS"));
......
......@@ -30,7 +30,6 @@ import org.cytoscape.application.swing.CytoPanel;
import org.cytoscape.application.swing.CytoPanelComponent;
import org.cytoscape.application.swing.CytoPanelName;
import org.cytoscape.application.swing.CytoPanelState;
import org.cytoscape.model.CyColumn;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode;
import org.cytoscape.work.AbstractTask;
......@@ -58,19 +57,8 @@ public class AlgorithmTask extends AbstractTask {
private Window statusWindow;
//Parameters
private final double insertionCostDefault;
private final double deletionCostDefault;
private final CyColumn permanentColumn;
private final CyColumn forbiddenColumn;
private CyColumn weightColumn;
private int timeLimit;
private CyNetwork net;
private String bitMaskRules;
private double multiplicativeFactor;
private boolean separatePartitionCuts;
private boolean separateTriangles;
private boolean useHeuristic;
private int numberOfSolutions;
private final ParameterSet parameterSet;
private final CyNetwork net;
//Temps, need to be freed in C++
private LibraryInput input;
......@@ -82,34 +70,12 @@ public class AlgorithmTask extends AbstractTask {
public AlgorithmTask(// <<< Too many variables here, some should be grouped later TODO:
Window statusWindow,
CyNetwork net,
int timeLimit,
CyColumn weightColumn,
CyColumn permanentColumn,
CyColumn forbiddenColumn,
double insertionCostDefault,
double deletionCostDefault,
String bitMaskRules,
double multiplicativeFactor,
boolean separatePartitionCuts,
boolean separateTriangles,
boolean useHeuristic,
int numberOfSolutions
ParameterSet parameterSet
)
{
this.statusWindow = statusWindow;
this.net = net;
this.timeLimit = timeLimit;
this.weightColumn = weightColumn;
this.permanentColumn = permanentColumn;
this.forbiddenColumn = forbiddenColumn;
this.insertionCostDefault = insertionCostDefault;
this.deletionCostDefault = deletionCostDefault;
this.bitMaskRules = bitMaskRules;
this.multiplicativeFactor = multiplicativeFactor;
this.separatePartitionCuts = separatePartitionCuts;
this.separateTriangles = separateTriangles;
this.useHeuristic = useHeuristic;
this.numberOfSolutions = numberOfSolutions;
this.parameterSet = parameterSet;
}
@Override
......@@ -125,7 +91,7 @@ public class AlgorithmTask extends AbstractTask {
}
//Set time limit
LibraryInterface.setTimeLimit(timeLimit);
LibraryInterface.setTimeLimit(parameterSet.timeLimit);
//Create a node map to identify nodes and eges in the solution
NodeMap nodeMap = new NodeMap(net);
......@@ -135,24 +101,24 @@ public class AlgorithmTask extends AbstractTask {
input = NetworkParser.parseNetwork(
net,
nodeMap,
weightColumn,
permanentColumn,
forbiddenColumn,
deletionCostDefault
parameterSet.weightColumn,
parameterSet.permanentColumn,
parameterSet.forbiddenColumn,
parameterSet.defaultDeletionCost
);
taskMonitor.setProgress(0.2);
//Set the default value for insertion cost
input.setDefaultInsertionCost(insertionCostDefault);
input.setDefaultInsertionCost(parameterSet.defaultInsertionCost);
//Call Yoshiko <<< Algorithm is performed here
ca = LibraryInterface.getRun(input,
numberOfSolutions,
bitMaskRules,
multiplicativeFactor,
separatePartitionCuts,
separateTriangles,
useHeuristic
parameterSet.solCount,
parameterSet.reductionRulesBitMask,
parameterSet.snrMultFactor,
parameterSet.usePartitionCuts,
parameterSet.useTriangleCuts,
parameterSet.useHeuristic
);
class CallbackHandler extends CplexInformer{
......
......@@ -28,6 +28,7 @@ import org.cytoscape.model.CyNetworkFactory;
import org.cytoscape.model.CyNetworkManager;
import org.cytoscape.model.subnetwork.CyRootNetworkManager;
import org.cytoscape.service.util.CyServiceRegistrar;
import org.cytoscape.task.create.CloneNetworkTaskFactory;
import org.cytoscape.task.visualize.ApplyVisualStyleTaskFactory;
import org.cytoscape.view.layout.CyLayoutAlgorithmManager;
import org.cytoscape.view.model.CyNetworkViewFactory;
......@@ -62,5 +63,7 @@ public class CyCore {
public static CyRootNetworkManager rootNetworkManager;
public static ApplyVisualStyleTaskFactory applyVisualStyleTaskFactory;
public static RenderingEngineFactory<CyNetwork> renderingEngineFactory;
public static CloneNetworkTaskFactory cloneNetworkTaskFactory;
//
}
package de.hhu.ba.yoshikoWrapper.core;
import org.cytoscape.model.CyColumn;
public class ParameterSet {
public int timeLimit;
public CyColumn weightColumn;
public CyColumn permanentColumn;
public CyColumn forbiddenColumn;
public double defaultInsertionCost;
public double defaultDeletionCost;
public String reductionRulesBitMask;
public double snrMultFactor;
public boolean useTriangleCuts;
public boolean usePartitionCuts;
public boolean useHeuristic;
public int solCount;
}
/**
*
*/
/**
* @author Philipp Spohr, Sep 5, 2017
*
*/
package de.hhu.ba.yoshikoWrapper.cytoUtil;
\ No newline at end of file
......@@ -94,8 +94,11 @@ public class YoshikoCluster {
}
}
/**
* Attempt to select the nodes belonging to this cluster in the original Graph given that they still exist
*/
public void select() {
if (originalGraph.getDefaultNodeTable() != null) {
try {
List<CyRow> allRows = originalGraph.getDefaultNodeTable().getAllRows();
for (CyRow r: allRows) {
r.set("selected", false);
......@@ -105,21 +108,23 @@ public class YoshikoCluster {
originalGraph.getRow(n).set("selected", true);
}
}
else {
catch (Exception e) {
logger.warn("The graph doesn't exist anymore, can't highlight nodes!");
}
}
public void generateImage(JLabel label, int width, int height) {
if (net == null) {
createSubNetwork();
}
CyNetworkView view = CyCore.networkViewFactory.createNetworkView(net);
final CyNetworkView view = CyCore.networkViewFactory.createNetworkView(net);
//layout cluster
CyLayoutAlgorithm layout = CyCore.layoutAlgorithmManager.getDefaultLayout();
TaskIterator createLayout = layout.createTaskIterator(
final CyLayoutAlgorithm layout = CyCore.layoutAlgorithmManager.getDefaultLayout();
final TaskIterator createLayout = layout.createTaskIterator(
view,
layout.getDefaultLayoutContext(),
CyLayoutAlgorithm.ALL_NODE_VIEWS,
......@@ -161,7 +166,7 @@ public class YoshikoCluster {
@Override
public void cancel() {
// TODO Auto-generated method stub
//Nothing to do as GC is handled by JAVA
}
}
......@@ -197,6 +202,4 @@ public class YoshikoCluster {
return originalGraph.getRow(n).get("name", String.class);
}
}
......@@ -28,17 +28,23 @@ import org.cytoscape.model.CyEdge;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode;
import org.cytoscape.model.CyEdge.Type;
import org.cytoscape.model.subnetwork.CySubNetwork;
import org.cytoscape.view.layout.CyLayoutAlgorithm;
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.presentation.property.BasicVisualLexicon;
import org.cytoscape.view.vizmap.VisualStyle;
import org.cytoscape.view.vizmap.mappings.ContinuousMapping;
import de.hhu.ba.yoshikoWrapper.core.CyCore;
import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
public class YoshikoSolution {
/**
* The original Graph from which the solution was generated.
* NOTE: This can be destroyed or modified during runtime while the solution still exists and may become invalid
*/
private CyNetwork originalGraph;
public ArrayList<YoshikoCluster> cluster;
......
......@@ -53,6 +53,7 @@ import de.hhu.ba.yoshikoWrapper.core.AlgorithmTask;
import de.hhu.ba.yoshikoWrapper.core.CyCore;
import de.hhu.ba.yoshikoWrapper.core.GraphicsLoader;
import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
import de.hhu.ba.yoshikoWrapper.core.ParameterSet;
import de.hhu.ba.yoshikoWrapper.core.YoshikoLoader;
/**This class describes the Swing Panel that the user interacts with in cytoscape
......@@ -212,18 +213,7 @@ public class MainPanel extends JPanel implements CytoPanelComponent {
AbstractTask yoshiko = new AlgorithmTask(
popupLevel,
CyCore.cy.getCurrentNetwork(),
opModePanel.getTimeLimit(),
ecPanel.getWeightColumn(),
ecPanel.getPermanentColumn(),
ecPanel.getForbiddenColumn(),
ecPanel.getDefaultInsertionCost(),
ecPanel.getDefaultDeletionCost(),
reductionRulesChooser.getBitMask(),
reductionRulesChooser.getMultFactor(),
opModePanel.useTriangleCuts(),
opModePanel.usePartitionCuts(),
opModePanel.useHeuristic(),
opModePanel.getSolCount()
fetchParameter()
);
/**
* Don't queue multiple runs at once because that will get messy
......@@ -247,6 +237,26 @@ public class MainPanel extends JPanel implements CytoPanelComponent {
}
};
/**
* Fetches all the parameters from the various swing components and packs them into a neat abstract wrapper class
* @return The currently selected parameter wrapped in a ParameterSet
*/
private ParameterSet fetchParameter() {
ParameterSet ret = new ParameterSet();
ret.timeLimit = opModePanel.getTimeLimit();
ret.weightColumn = ecPanel.getWeightColumn();
ret.permanentColumn = ecPanel.getPermanentColumn();
ret.forbiddenColumn = ecPanel.getForbiddenColumn();
ret.defaultInsertionCost = ecPanel.getDefaultInsertionCost();
ret.defaultDeletionCost = ecPanel.getDefaultDeletionCost();
ret.reductionRulesBitMask = reductionRulesChooser.getBitMask();
ret.snrMultFactor = reductionRulesChooser.getMultFactor();
ret.useTriangleCuts = opModePanel.useTriangleCuts();
ret.usePartitionCuts = opModePanel.usePartitionCuts();
ret.useHeuristic = opModePanel.useHeuristic();
ret.solCount = opModePanel.getSolCount();
return ret;
}
//GETTER / SETTER
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment