diff rpviz/sbml2lists.py @ 16:fe78fd6b315a draft

planemo upload commit 87db86a34f2d92eb2c9756bf9ee53ae2970554d5
author pablocarb
date Tue, 11 Jun 2019 11:42:40 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rpviz/sbml2lists.py	Tue Jun 11 11:42:40 2019 -0400
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+# coding: utf-8
+'''To visualize a SBML file'''
+# In[3]:
+
+
+import libsbml
+import os
+from .smile2picture import picture
+#import networkx as nx
+#import matplotlib.pyplot as plt
+
+
+
+# In[4]:
+def sbml2list(file):
+    
+    #open the SBML using libsbml
+    
+    doc = libsbml.readSBML(file)
+    name=os.path.basename(file)
+    
+    
+    # In[8]:
+    
+    
+    #return the model from the SBML document using libsbml
+    model = doc.model
+    
+    
+    # In[9]:
+    
+    
+    #we will use the groups package to return the retropath pathway
+    #that is all the reactions that are associated with the heterologous 
+    #pathway
+    groups = model.getPlugin('groups')
+    
+    
+    # In[10]:
+    
+    
+    #in the rpFBA script, rp_pathway is the default name
+    rp_pathway = groups.getGroup('rp_pathway') 
+    
+    
+    # In[63]:
+    
+    rlist=[]
+    LR=[]
+    
+    heterologous_pathway_dG_prime_o = {}
+    
+    
+    #loop through all the members of the rp_pathway
+    for member in rp_pathway.getListOfMembers():
+        #fetch the reaction according to the member id
+        reaction = model.getReaction(member.getIdRef())
+        rlist.append(reaction)
+        LR.append(str(reaction))
+        #get the annotation of the reaction
+        #includes the MIRIAM annotation and the IBISBA ones
+        annotation = reaction.getAnnotation()
+        ibisba_annotation = annotation.getChild('RDF').getChild('Ibisba').getChild('ibisba')
+        #extract one of the ibisba annotation values
+        heterologous_pathway_dG_prime_o[member.getIdRef()] = ibisba_annotation.getChild('dG_prime_o').getAttrValue('value')
+    
+    
+    
+    # In[64]:
+    
+    heterologous_pathway_dG_prime_o
+    
+    Lreact=[]
+    Lprod=[]
+    
+    for reaction in range(len(rlist)):
+        Lreact.append([p.species for p in rlist[reaction].reactants]) #get list of reactants id
+        Lprod.append([p.species for p in rlist[reaction].products]) #get list of products id
+    
+    mem = []
+    for member in rp_pathway.getListOfMembers():
+        reac = model.getReaction(member.getIdRef())
+        for pro in reac.getListOfProducts():
+            mem.append(pro.getSpecies())
+            Lprod.append(pro.getSpecies())
+        for rea in reac.getListOfReactants():
+            mem.append(rea.getSpecies())
+            Lreact.append(rea.getSpecies())
+    
+    #mem = list(set([i for i in mem if i[0:3]!='MNX']))
+    species_smiles = {}
+    species_links={}
+    species_names={}
+    #loop through all the members of the rp_pathway
+    for member in list(set([i for i in mem])):
+        #fetch the species according to the member id
+        reaction = model.getSpecies(member)
+        spname=reaction.getName()
+        if spname:
+            species_names[member]=spname
+        #get the annotation of the species
+        #includes the MIRIAM annotation and the IBISBA ones
+        annotation = reaction.getAnnotation()
+        ibisba_annotation = annotation.getChild('RDF').getChild('Ibisba').getChild('ibisba')
+        #extract one of the ibisba annotation values
+        smiles = ibisba_annotation.getChild('smiles').getChild(0).toXMLString()
+        if smiles:
+            species_smiles[member] = smiles
+        link_annotation=annotation.getChild('RDF').getChild('Description').getChild('is').getChild('Bag')
+        for i in range(link_annotation.getNumChildren()):
+            str_annot = link_annotation.getChild(i).getAttrValue(0) #Here we get the attribute at location "0". It works since there is only one
+            if str_annot.split('/')[-2]=='metanetx.chemical':
+                species_links[member]=str_annot #here is the MNX code returned
+    
+    
+    # In[64]:
+    
+    image=picture(species_smiles)
+    
+    return(LR, Lreact, Lprod, name, species_smiles,image, species_names, species_links)
+    
+    
+        
+    
+    #Cytoscape Network
+    #from nxvisualizer import network
+    #network(LR,Lreact,Lprod,name,species_smiles,image)
+    
+    #Convert network to json file
+    #from network2json import  network2 #to convert the lists in a json network
+    #network2(LR,Lreact,Lprod,name,species_smiles,image,species_names,species_links)
\ No newline at end of file