https://github.com/F1000Research/GASOLINE
Tip revision: b311a55a1126c2d961686f08fe5b341f930db7e5 authored by GMicale on 12 June 2014, 16:41:05 UTC
Update README.md
Update README.md
Tip revision: b311a55
CreateSubGraphTask.java
import java.util.HashMap;
import java.util.List;
import java.util.Vector;
import java.util.Collection;
import java.util.Iterator;
import java.awt.Color;
import java.awt.Paint;
import javax.swing.JOptionPane;
import org.cytoscape.work.AbstractTask;
import org.cytoscape.work.TaskMonitor;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.view.vizmap.VisualStyle;
import org.cytoscape.view.vizmap.VisualMappingManager;
import org.cytoscape.view.vizmap.VisualStyleFactory;
import org.cytoscape.app.swing.CySwingAppAdapter;
import org.cytoscape.service.util.CyServiceRegistrar;
import org.cytoscape.model.CyNetworkFactory;
import org.cytoscape.model.CyNetworkManager;
import org.cytoscape.model.CyNetworkTableManager;
import org.cytoscape.model.CyNode;
import org.cytoscape.model.CyEdge;
import org.cytoscape.model.CyTable;
import org.cytoscape.model.CyTableFactory;
import org.cytoscape.model.CyRow;
import org.cytoscape.model.CyTableManager;
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.model.CyNetworkViewFactory;
import org.cytoscape.view.model.CyNetworkViewManager;
import org.cytoscape.view.layout.CyLayoutAlgorithm;
import org.cytoscape.view.layout.CyLayoutAlgorithmManager;
import org.cytoscape.work.TaskIterator;
import org.cytoscape.view.vizmap.mappings.PassthroughMapping;
import org.cytoscape.view.vizmap.mappings.DiscreteMapping;
import org.cytoscape.view.vizmap.mappings.ContinuousMapping;
import org.cytoscape.view.vizmap.mappings.BoundaryRangeValues;
import org.cytoscape.view.vizmap.VisualMappingFunctionFactory;
import org.cytoscape.view.presentation.property.BasicVisualLexicon;
import org.cytoscape.view.presentation.property.LineTypeVisualProperty;
import org.cytoscape.work.swing.PanelTaskManager;
public class CreateSubGraphTask extends AbstractTask
{
private CySwingAppAdapter adapter;
private List<Grafo> gList;
private Allineamento alignament;
private int count;
private CyTable nodeTable;
private Vector<String> ontFiles;
public CreateSubGraphTask(List<Grafo> gList, Allineamento alignament, int count, CySwingAppAdapter adapter, Vector<String> ontFiles)
{
this.gList = gList;
this.alignament = alignament;
this.count = count;
this.adapter=adapter;
this.ontFiles=ontFiles;
}
public void run(TaskMonitor taskMonitor)
{
if(taskMonitor==null)
throw new IllegalStateException("Task Monitor is not set.");
else if(taskMonitor!=null)
{
taskMonitor.setProgress(-1);
taskMonitor.setStatusMessage("Import");
}
Vector<Integer>[] mapping=alignament.getMapping();
CyServiceRegistrar csr=adapter.getCyServiceRegistrar();
CyNetworkFactory netFact=csr.getService(CyNetworkFactory.class);
CyNetwork cyNetwork = netFact.createNetwork();
cyNetwork.getRow(cyNetwork).set(CyNetwork.NAME,"Alignment_"+count);
CyNetworkManager cnm=adapter.getCyNetworkManager();
cnm.addNetwork(cyNetwork);
//Table node attributes
nodeTable=cyNetwork.getDefaultNodeTable();
String attributeNode = "Protein_name";
nodeTable.createColumn(attributeNode, String.class, false);
attributeNode = "Network";
nodeTable.createColumn(attributeNode, String.class, false);
//Table edge attributes
CyTable tableEdge=cyNetwork.getDefaultEdgeTable();
String attributeEdge2 = "Weight";
tableEdge.createColumn(attributeEdge2, Double.class, false);
for(int k=0;k<mapping.length;k++)
{
Grafo g=gList.get(k);
Vector<Integer> nodi=mapping[k];
int i=0, j=0;
HashMap<Integer,Nodo> listaNodi=g.nodi();
for(i=0;i<nodi.size();i++)
{
CyNode node=cyNetwork.addNode();
CyRow row = nodeTable.getRow(node.getSUID());
row.set("Protein_name",listaNodi.get(nodi.get(i)).getLabel());
row.set("Network",g.getName());
}
HashMap<Integer,Double> adiac=null;
for(i=0;i<nodi.size();i++)
{
adiac=listaNodi.get(nodi.get(i)).getAdiacs();
Collection<CyRow> rowSource=nodeTable.getMatchingRows("Protein_name",listaNodi.get(nodi.get(i)).getLabel());
Iterator<CyRow> it=rowSource.iterator();
String primaryKeySource = nodeTable.getPrimaryKey().getName();
CyNode source=cyNetwork.getNode(it.next().get(primaryKeySource, Long.class));
for(j=0;j<nodi.size();j++)
{
if(adiac.containsKey(nodi.get(j)) && i<j)
{
Collection<CyRow> rowDest=nodeTable.getMatchingRows("Protein_name",listaNodi.get(nodi.get(j)).getLabel());
it=rowDest.iterator();
String primaryKeyDest = nodeTable.getPrimaryKey().getName();
CyNode dest=cyNetwork.getNode(it.next().get(primaryKeyDest, Long.class));
CyEdge edge=cyNetwork.addEdge(source, dest, false);
CyRow row = tableEdge.getRow(edge.getSUID());
Double weight=adiac.get(nodi.get(j));
row.set("interaction","intra");
row.set(attributeEdge2,weight);
}
}
}
}
for(int j=0; j<mapping.length-1; j++)
{
Vector<Integer> nodi=mapping[j];
Grafo g=gList.get(j);
HashMap<Integer,Nodo> listaNodi=g.nodi();
Vector<Integer> nodiNext=mapping[j+1];
Grafo gNext=gList.get(j+1);
HashMap<Integer,Nodo> listaNodiNext=gNext.nodi();
for(int i=0; i<mapping[j].size(); i++)
{
Collection<CyRow> rowSource=nodeTable.getMatchingRows("Protein_name",listaNodi.get(nodi.get(i)).getLabel());
Iterator<CyRow> it=rowSource.iterator();
String primaryKeySource = nodeTable.getPrimaryKey().getName();
CyNode source=cyNetwork.getNode(it.next().get(primaryKeySource, Long.class));
Collection<CyRow> rowDest=nodeTable.getMatchingRows("Protein_name",listaNodiNext.get(nodiNext.get(i)).getLabel());
it=rowDest.iterator();
String primaryKeyDest = nodeTable.getPrimaryKey().getName();
CyNode dest=cyNetwork.getNode(it.next().get(primaryKeyDest, Long.class));
CyEdge edge=cyNetwork.addEdge(source, dest, false);
CyRow row = tableEdge.getRow(edge.getSUID());
row.set("interaction","inter");
}
}
//imposto visualStyle
CyNetworkViewFactory cnvf=adapter.getCyNetworkViewFactory();
CyNetworkView cyView = cnvf.createNetworkView(cyNetwork);
CyNetworkViewManager cnvm=adapter.getCyNetworkViewManager();
cnvm.addNetworkView(cyView);
VisualMappingManager manager=adapter.getVisualMappingManager();
VisualStyle defaultStyle=manager.getDefaultVisualStyle();
VisualStyleFactory vsf=adapter.getVisualStyleFactory();
VisualStyle vs= vsf.createVisualStyle("GASOLINE style");
enrichVisualStyle(cyNetwork, vs);
vs.setDefaultValue(BasicVisualLexicon.NETWORK_BACKGROUND_PAINT, new Color(165,165,165));
vs.setDefaultValue(BasicVisualLexicon.EDGE_STROKE_SELECTED_PAINT, Color.WHITE);
vs.setDefaultValue(BasicVisualLexicon.NODE_SIZE, 35.0);
vs.setDefaultValue(BasicVisualLexicon.NODE_FILL_COLOR, new Color(255,102,102));
vs.setDefaultValue(BasicVisualLexicon.NODE_LABEL_FONT_SIZE, 10);
vs.setDefaultValue(BasicVisualLexicon.EDGE_WIDTH, 2.0);
manager.addVisualStyle(vs);
manager.setCurrentVisualStyle(vs);
vs.apply(cyView);
//imposto layout
CyLayoutAlgorithmManager clam=adapter.getCyLayoutAlgorithmManager();
CyLayoutAlgorithm alg = clam.getLayout("kamada-kawai");
TaskIterator ti=alg.createTaskIterator(cyView,alg.getDefaultLayoutContext(),CyLayoutAlgorithm.ALL_NODE_VIEWS,null);
//Insert optional GO_info
if(!ontFiles.isEmpty())
{
GOTask taskOnt = new GOTask(ontFiles, nodeTable, adapter);
ti.append(taskOnt);
}
super.insertTasksAfterCurrentTask(ti);
cyView.updateView();
}
public CyTable getNodeTable()
{
return nodeTable;
}
public void cancel()
{}
public String getTitle()
{
return "Create subgraph";
}
public void enrichVisualStyle(CyNetwork network, VisualStyle vs)
{
// Passthrough Mapping - Visualize node labels
VisualMappingFunctionFactory vmfFactoryP=adapter.getVisualMappingFunctionPassthroughFactory();
PassthroughMapping labelMapping = (PassthroughMapping) vmfFactoryP.createVisualMappingFunction("Protein_name", String.class, BasicVisualLexicon.NODE_LABEL);
// Discrete Mapping - Set edge target arrow shape
VisualMappingFunctionFactory vmfFactoryD=adapter.getVisualMappingFunctionDiscreteFactory();
DiscreteMapping lineStyleMapping = (DiscreteMapping) vmfFactoryD.createVisualMappingFunction("Interaction", String.class, BasicVisualLexicon.EDGE_LINE_TYPE);
lineStyleMapping.putMapValue("intra", LineTypeVisualProperty.SOLID);
lineStyleMapping.putMapValue("inter", LineTypeVisualProperty.EQUAL_DASH);
// Continuous Mapping - set edge color
VisualMappingFunctionFactory vmfFactoryC=adapter.getVisualMappingFunctionContinuousFactory();
ContinuousMapping continuousMapping = (ContinuousMapping) vmfFactoryC.createVisualMappingFunction("Weight", Double.class, BasicVisualLexicon.EDGE_STROKE_UNSELECTED_PAINT);
Color minColor = Color.GREEN;
Color midColor = Color.YELLOW;
Color maxColor = Color.RED;
BoundaryRangeValues<Paint> bv0 = new BoundaryRangeValues<Paint>(minColor, minColor, minColor);
BoundaryRangeValues<Paint> bv1 = new BoundaryRangeValues<Paint>(midColor, midColor, midColor);
BoundaryRangeValues<Paint> bv2 = new BoundaryRangeValues<Paint>(maxColor, maxColor, maxColor);
// Set the attribute point values associated with the boundary values
continuousMapping.addPoint(0.0, bv0);
continuousMapping.addPoint(0.5, bv1);
continuousMapping.addPoint(1, bv2);
// Add the new styles
vs.addVisualMappingFunction(labelMapping);
vs.addVisualMappingFunction(lineStyleMapping);
vs.addVisualMappingFunction(continuousMapping);
}
}