From 51a8484e9c76ff7e73a5fd61fa85d095a5462214 Mon Sep 17 00:00:00 2001 From: Thomas Kelder Date: Thu, 19 Jun 2014 16:53:20 +0200 Subject: [PATCH 1/3] always add "entrezGeneID" attribute for consistency across different networks --- RINCreator/src/cytargetlinker/conversion/data/GeneNode.java | 1 + 1 file changed, 1 insertion(+) diff --git a/RINCreator/src/cytargetlinker/conversion/data/GeneNode.java b/RINCreator/src/cytargetlinker/conversion/data/GeneNode.java index cb4accf..60d54cf 100644 --- a/RINCreator/src/cytargetlinker/conversion/data/GeneNode.java +++ b/RINCreator/src/cytargetlinker/conversion/data/GeneNode.java @@ -62,6 +62,7 @@ public Node getNode(Graph graph) { node.appendAttribute("label", getLabel()); node.appendAttribute("name", getLabel()); node.appendAttribute("biologicalType", getBiologicalType()); + if(entrez.size() > 0) node.appendAttribute("entrezGeneID", entrez.get(0)); return node; } From a7ac22951579f7efe21e0628803073882e4eebd8 Mon Sep 17 00:00:00 2001 From: Thomas Kelder Date: Mon, 23 Jun 2014 14:59:10 +0200 Subject: [PATCH 2/3] made miRNA mapping and conversion more consistent: always use MiRNANode class to create nodes for miRNAs. Will result in all miRNA nodes having a Mirbase ID as identifier. --- .../cytargetlinker/conversion/Microcosm.java | 104 +++++++----------- .../cytargetlinker/conversion/MirTarBase.java | 59 +++------- 2 files changed, 53 insertions(+), 110 deletions(-) diff --git a/RINCreator/src/cytargetlinker/conversion/Microcosm.java b/RINCreator/src/cytargetlinker/conversion/Microcosm.java index c15301a..258fb04 100644 --- a/RINCreator/src/cytargetlinker/conversion/Microcosm.java +++ b/RINCreator/src/cytargetlinker/conversion/Microcosm.java @@ -79,7 +79,7 @@ public static void main(String argv[]) throws Exception { private int countGenes = 0; private int countMiRNAs = 0; - private Map miRNAs; + private Map miRNAs; private Map genes; private Map interactions; @@ -93,7 +93,7 @@ public Microcosm() throws Exception { foundConnections = new ArrayList(); genesNotFound = new ArrayList(); - miRNAs = new HashMap(); + miRNAs = new HashMap(); genes = new HashMap(); interactions = new HashMap(); nodesNotFound = new ArrayList(); @@ -199,9 +199,28 @@ private void parseMicrocosm(File in) { } private void addEdge(String gene, String mirna, String score, String pValue) { - if(edges.containsKey(gene)) { - if(!edges.get(gene).contains(mirna)) { - Edge e = graph.addEdge("" + countEdge, graph.getNode(mirna),graph.getNode(gene)); + if(miRNAs.containsKey(mirna)) { + if(edges.containsKey(gene)) { + if(!edges.get(gene).contains(mirna)) { + Edge e = graph.addEdge("" + countEdge, miRNAs.get(mirna),graph.getNode(gene)); + e.setAttribute("datasource", "Microcosm Targets version 5"); + e.setAttribute("interactionType", "predicted MTI"); + try { + Double d = Double.parseDouble(score); + e.setAttribute("score", d.toString()); + Double pvalue = Double.parseDouble(pValue); + e.setAttribute("pvalue", pvalue.toString()); + } catch(NumberFormatException ex) { + e.setAttribute("score", ""); + e.setAttribute("pvalue", ""); + } + + edges.get(gene).add(mirna); + foundConnections.add(gene + "\t" + mirna); + countEdge++; + } + } else { + Edge e = graph.addEdge("" + countEdge, miRNAs.get(mirna),graph.getNode(gene)); e.setAttribute("datasource", "Microcosm Targets version 5"); e.setAttribute("interactionType", "predicted MTI"); try { @@ -211,31 +230,16 @@ private void addEdge(String gene, String mirna, String score, String pValue) { e.setAttribute("pvalue", pvalue.toString()); } catch(NumberFormatException ex) { e.setAttribute("score", ""); - e.setAttribute("pvalue", ""); + e.setAttribute("pvalue", ""); } - - edges.get(gene).add(mirna); + List list = new ArrayList(); + list.add(mirna); foundConnections.add(gene + "\t" + mirna); + edges.put(gene, list); countEdge++; } } else { - Edge e = graph.addEdge("" + countEdge, graph.getNode(mirna),graph.getNode(gene)); - e.setAttribute("datasource", "Microcosm Targets version 5"); - e.setAttribute("interactionType", "predicted MTI"); - try { - Double d = Double.parseDouble(score); - e.setAttribute("score", d.toString()); - Double pvalue = Double.parseDouble(pValue); - e.setAttribute("pvalue", pvalue.toString()); - } catch(NumberFormatException ex) { - e.setAttribute("score", ""); - e.setAttribute("pvalue", ""); - } - List list = new ArrayList(); - list.add(mirna); - foundConnections.add(gene + "\t" + mirna); - edges.put(gene, list); - countEdge++; + log.warning("Edge " + gene + " -- " + mirna + " excluded, because miRNA couldn't be mapped."); } } @@ -326,49 +330,19 @@ private void createGeneNode(String geneId, String geneName) { } private void createMiRNANode(String miRNA) { - String type = "microRNA"; String organism = pargs.getOrganism(); - if(graph.getNode(miRNA) == null) { - String mimat = ""; - String identifiers = "[" + miRNA; - Xref xrefIn = new Xref(miRNA, DataSource.getBySystemCode("Mb")); - - if(mapping) { - try { - Set result = gdb.mapID(xrefIn, DataSource.getBySystemCode("Mb")); - Set result2 = gdb.mapID(xrefIn, DataSource.getBySystemCode("Mbm")); - - List list = new ArrayList(); - list.add(miRNA); - for(Xref x : result) { - if(!list.contains(x.getId())) { - list.add(x.getId()); - identifiers = identifiers + "," + x.getId(); - } - } - for(Xref x : result2) { - if(!list.contains(x.getId())) { - list.add(x.getId()); - if(x.getId().startsWith("MIMAT")) { - mimat = x.getId(); - } - identifiers = identifiers + "," + x.getId(); - } - } - } catch (IDMapperException e) { - // could not be mapped - } + if(!miRNAs.containsKey(miRNA)) { + MiRNANode mirnaNode = MiRNANode.createMiRNANode(miRNA, gdb, DataSource.getBySystemCode("Mb")); + if(mirnaNode != null) { + Node node = mirnaNode.getNode(graph); + node.appendAttribute("miRBaseAccession", mirnaNode.getId()); + node.appendAttribute("organism", organism); + countMiRNAs++; + miRNAs.put(miRNA, node); + } else { + log.warning("miRNA node for " + miRNA + " not found! Skipping this miRNA."); } - identifiers = identifiers + "]"; - - Node node = graph.addNode(miRNA); - node.appendAttribute("identifiers", identifiers); - node.appendAttribute("label", miRNA); - node.appendAttribute("miRBaseAccession", mimat); - node.appendAttribute("biologicalType", type); - node.appendAttribute("organism", organism); - countMiRNAs++; } } diff --git a/RINCreator/src/cytargetlinker/conversion/MirTarBase.java b/RINCreator/src/cytargetlinker/conversion/MirTarBase.java index babc3b1..2888e4b 100644 --- a/RINCreator/src/cytargetlinker/conversion/MirTarBase.java +++ b/RINCreator/src/cytargetlinker/conversion/MirTarBase.java @@ -16,17 +16,18 @@ import org.bridgedb.IDMapperStack; import org.bridgedb.Xref; +import cytargetlinker.conversion.data.MiRNANode; import cytargetlinker.conversion.graph.Graph; import cytargetlinker.conversion.graph.Graph.Edge; import cytargetlinker.conversion.graph.Graph.Node; import cytargetlinker.conversion.utils.ArgsParser; -import cytargetlinker.conversion.utils.CommonAttributes; -import cytargetlinker.conversion.utils.Utils; import cytargetlinker.conversion.utils.ArgsParser.AFilesAttributes; import cytargetlinker.conversion.utils.ArgsParser.AFilesIn; import cytargetlinker.conversion.utils.ArgsParser.AFilesOut; import cytargetlinker.conversion.utils.ArgsParser.AHelp; import cytargetlinker.conversion.utils.ArgsParser.GraphBuilder; +import cytargetlinker.conversion.utils.CommonAttributes; +import cytargetlinker.conversion.utils.Utils; /** * Converts miRNA target text files from MiRTarBase to a XGMML or GML network. @@ -134,7 +135,7 @@ public Graph createNetwork(File input) throws IOException { for (String[] r : rows) { String geneNode = createGeneNode(r); String miRNANode = createMiRNANode(r); - addEdge(geneNode, miRNANode, r); + if(geneNode != null && miRNANode != null) addEdge(geneNode, miRNANode, r); } log.info(foundConnections.size() + " interactions have been found.\n" + countGenes + " gene nodes.\n" + countMiRNAs + " miRNA nodes.\n"); @@ -184,52 +185,20 @@ private String createGeneNode(String[] r) { private String createMiRNANode(String[] r) { String miRNA = r[index.get("miRNA")]; - String type = "microRNA"; String organism = r[index.get("Species (miRNA)")]; - - if(graph.getNode(miRNA) == null) { - String mimat = ""; - String identifiers = "[" + miRNA; - Xref xrefIn = new Xref(miRNA, DataSource.getBySystemCode("Mb")); - - if(mapping) { - try { - Set result = gdb.mapID(xrefIn, DataSource.getBySystemCode("Mb")); - Set result2 = gdb.mapID(xrefIn, DataSource.getBySystemCode("Mbm")); - - List list = new ArrayList(); - list.add(miRNA); - for(Xref x : result) { - if(!list.contains(x.getId())) { - list.add(x.getId()); - identifiers = identifiers + "," + x.getId(); - } - } - for(Xref x : result2) { - if(!list.contains(x.getId())) { - list.add(x.getId()); - if(x.getId().startsWith("MIMAT")) { - mimat = x.getId(); - } - identifiers = identifiers + "," + x.getId(); - } - } - } catch (IDMapperException e) { - // could not be mapped - } - } - identifiers = identifiers + "]"; - - Node node = graph.addNode(miRNA); - node.appendAttribute("identifiers", identifiers); - node.appendAttribute("label", miRNA); - node.appendAttribute("miRBaseAccession", mimat); - node.appendAttribute("biologicalType", type); + + MiRNANode mirnaNode = MiRNANode.createMiRNANode(miRNA, gdb, DataSource.getBySystemCode("Mb")); + if(mirnaNode != null) { + Node node = mirnaNode.getNode(graph); + node.appendAttribute("miRBaseAccession", mirnaNode.getId()); node.appendAttribute("organism", organism); - countMiRNAs++; + countMiRNAs++; + return mirnaNode.getId(); + } else { + log.warning("miRNA node for " + miRNA + " not found! Skipping this miRNA."); + return null; } - return miRNA; } private void addEdge(String gene, String mirna, String[] r) { From f91f35838a5a728d3f2870ce00da131e81186eab Mon Sep 17 00:00:00 2001 From: Thomas Kelder Date: Thu, 26 Jun 2014 08:55:53 +0200 Subject: [PATCH 3/3] make output GML networks directed (add directed=1) for all miRNA graphs. --- .../src/cytargetlinker/conversion/graph/GmlWriter.java | 1 + .../src/cytargetlinker/conversion/graph/Graph.java | 9 +++++++++ .../src/cytargetlinker/conversion/utils/ArgsParser.java | 1 + 3 files changed, 11 insertions(+) diff --git a/RINCreator/src/cytargetlinker/conversion/graph/GmlWriter.java b/RINCreator/src/cytargetlinker/conversion/graph/GmlWriter.java index 22076a6..c79069d 100644 --- a/RINCreator/src/cytargetlinker/conversion/graph/GmlWriter.java +++ b/RINCreator/src/cytargetlinker/conversion/graph/GmlWriter.java @@ -19,6 +19,7 @@ public static void write(Graph graph, PrintWriter out) { int indent = 0; iout.println("graph ["); + iout.println("directed\t" + (graph.isDirected() ? 1 : 0)); iout.setIndent(++indent); //Print nodes and attributes diff --git a/RINCreator/src/cytargetlinker/conversion/graph/Graph.java b/RINCreator/src/cytargetlinker/conversion/graph/Graph.java index 28f2106..df2e8e7 100644 --- a/RINCreator/src/cytargetlinker/conversion/graph/Graph.java +++ b/RINCreator/src/cytargetlinker/conversion/graph/Graph.java @@ -11,6 +11,7 @@ */ public class Graph extends AttributeHolder { String title = ""; + boolean directed = false; Map nodes = new HashMap(); Map edges = new HashMap(); @@ -23,6 +24,14 @@ public String getTitle() { return title; } + public boolean isDirected() { + return directed; + } + + public void setDirected(boolean directed) { + this.directed = directed; + } + public Node addNode(String id) { Node n = nodes.get(id); if(n == null) { diff --git a/RINCreator/src/cytargetlinker/conversion/utils/ArgsParser.java b/RINCreator/src/cytargetlinker/conversion/utils/ArgsParser.java index 741c545..c19eac5 100644 --- a/RINCreator/src/cytargetlinker/conversion/utils/ArgsParser.java +++ b/RINCreator/src/cytargetlinker/conversion/utils/ArgsParser.java @@ -117,6 +117,7 @@ public static void convertAndWrite(AFilesIn fi, AFilesOut fo, GraphBuilder gb) t log.info("Converting " + input + " to " + output + "\n"); Graph g = gb.buildGraph(input); + g.setDirected(true); GraphWriter writer = new XGMML(); if(output.getName().endsWith(".gml")) {