@@ -1770,29 +1770,39 @@ def buildSBMLModel(self):
17701770 del reac
17711771
17721772 rid = R .getId ()
1773+
1774+ if rid not in self .model .__global_id__ :
1775+ ridnew = rid
1776+ else :
1777+ print ('Duplicate reaction ID detected {} not included!' .format (rid ))
1778+ continue
1779+ ## TODO look at the reaction ID filtering again as duplicate reactions are appearing in the reaction list
1780+ ## set3.xml
1781+ # disabling safe reaction duplication
1782+ #if rid in dup_re_db:
1783+ #dup_re_db[rid] = dup_re_db[rid] + 1
1784+ #else:
1785+ #dup_re_db[rid] = 1
1786+ #ridnew = '{}_copy_{}'.format(rid, dup_re_db[rid])
1787+ #dup_re_db[ridnew] = dup_re_db[rid]
1788+ #R.setId(ridnew)
1789+
1790+
17731791 # store group information
17741792 if R ._organism_ not in new_groups :
17751793 new_groups [R ._organism_ ] = {'grp_map' : self .func_getGroupMembership (self ._DAT_MODELS [R ._organism_ ]),
17761794 'grpd' : [rid ]}
17771795 else :
17781796 new_groups [R ._organism_ ]['grpd' ].append (rid )
17791797
1780- R .setCompartmentId (self .default_compartment )
1798+ # this is probably a bit much
1799+ # R.setCompartmentId(self.default_compartment)
17811800 DUP_R = False
17821801 notes = self .readNotesFromNotesDB (R ._organism_ , R .getId (), user , self ._DAT_NOTESDB_KEY_ )
17831802 if notes != '' :
17841803 R .setNotes ('<p>{}</p>' .format (notes ))
1785- if R .getId () not in self .model .__global_id__ :
1786- ridnew = rid
1787- else :
1788- if rid in dup_re_db :
1789- dup_re_db [rid ] = dup_re_db [rid ] + 1
1790- else :
1791- dup_re_db [rid ] = 1
1792- ridnew = '{}_copy_{}' .format (rid , dup_re_db [rid ])
1793- dup_re_db [ridnew ] = dup_re_db [rid ]
1794- R .setId (ridnew )
1795- print ('Suspected duplicate reaction ID detected {} included as {}!' .format (rid , ridnew ))
1804+
1805+
17961806
17971807 # remove sequences from reactions (store in seqstore for future use)
17981808 for a in list (R .annotation .keys ()):
@@ -1866,24 +1876,44 @@ def renameGeneIdRefsInGPRTree(gprd, old, new):
18661876 gprd .pop (k )
18671877 gprd [new ] = new
18681878
1879+ def pruneTree (D ):
1880+ """
1881+ Recursively checks the tree for the correct number of children
1882+
1883+ """
1884+ for k in list (D ):
1885+ if k .startswith ('_AND_' ) and len (D [k ]) == 1 :
1886+ D .update (D .pop (k ))
1887+ print ('Pruning branch: {}' .format (D ))
1888+ elif k .startswith ('_OR_' ) and len (D [k ]) == 1 :
1889+ D .update (D .pop (k ))
1890+ print ('Pruning branch: {}' .format (D ))
1891+ elif k .startswith ('_AND_' ):
1892+ pruneTree (D [k ])
1893+ elif k .startswith ('_OR_' ):
1894+ pruneTree (D [k ])
1895+ return D
1896+
1897+
18691898 def deleteGeneFromTree (D , delid ):
18701899 """
18711900 Recursively delete a gene Id from a gprTree.
18721901
18731902 """
18741903 for k in list (D ):
1875- if k == delid :
1876- D .pop (k )
1877- elif len (k ) == 0 :
1878- D .pop (k )
1879- elif len (D [k ]) == 1 :
1880- D .update (D .pop (k ))
1881- elif k .startswith ('_AND_' ) or k .startswith ('_OR_' ):
1904+ if k .startswith ('_AND_' ) or k .startswith ('_OR_' ):
18821905 D [k ] = deleteGeneFromTree (D [k ], delid )
18831906 if len (D [k ]) == 0 :
18841907 D .pop (k )
18851908 elif len (D [k ]) == 1 :
18861909 D .update (D .pop (k ))
1910+ elif k == delid :
1911+ D .pop (k )
1912+ elif len (k ) == 0 :
1913+ D .pop (k )
1914+ elif len (D [k ]) == 1 :
1915+ D .update (D .pop (k ))
1916+
18871917 return D
18881918
18891919
@@ -1894,7 +1924,7 @@ def deleteGeneFromTree(D, delid):
18941924 # deal with orthogenes/GPR's here
18951925
18961926 #print('target2source')
1897- # cbmpy.CBTools.pprint.pprint(target2source)
1927+ cbmpy .CBTools .pprint .pprint (target2source )
18981928 #cbmpy.CBTools.pprint.pprint(source2target)
18991929
19001930 #dakeys = OLD_GPR_MAP.keys()[-2:]
@@ -1916,8 +1946,10 @@ def deleteGeneFromTree(D, delid):
19161946 if gprinf ['id2lbl' ][g ] in target2source :
19171947 renameGeneIdRefsInGPRTree (gprinf ['tree' ], g , target2source [gprinf ['id2lbl' ][g ]])
19181948 else :
1919- renameGeneIdRefsInGPRTree (gprinf ['tree' ], g , 'UNKNOWN' )
1920- #gprinf['tree'] = deleteGeneFromTreegprinf['tree'], g)
1949+ #renameGeneIdRefsInGPRTree(gprinf['tree'], g, 'UNKNOWN')
1950+ gprinf ['tree' ] = deleteGeneFromTree (gprinf ['tree' ], g )
1951+
1952+ gprinf ['tree' ] = pruneTree (gprinf ['tree' ])
19211953
19221954
19231955 #print('\nGPRmap')
0 commit comments