Skip to content

Commit cd4f113

Browse files
committed
updated gpr and duplicate reaction handling
1 parent fa88ffd commit cd4f113

File tree

2 files changed

+55
-23
lines changed

2 files changed

+55
-23
lines changed

libpython/qtmetadraft.py

Lines changed: 54 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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')

modeldb/2019-1

0 commit comments

Comments
 (0)