Source code for fluxpyt.input_substrate_emu
# -*- coding: utf-8 -*-
"""
Created on Tue Aug 2 15:44:59 2016
@author: Trunil
"""
import sys
from copy import deepcopy
[docs]def detect_substrate_emus(substrates,labeling):
# print('\n\n\nrunning detect_substrate_emus')
substrate_emus = []
emu_len = []
for i in range(len(substrates)):
substrate = substrates[i]
name = substrate + ':'
pattern = labeling[i]
# pattern_split = pattern.split()
emu_len.append(len(pattern))
for j in range(len(pattern)):
pat = pattern[j]
if pat == '0.99':
name += str(j+1)
substrate_emus.append(name)
print('substrate emus are:')
print(substrate_emus)
return substrate_emus,emu_len
[docs]def list_network_subs_emus(elementary_rxn_list,substrates):
print('\n\n\nnrunning list_network_subs_emus...')
print(substrates)
network_substrate_emus = []
for rxn in elementary_rxn_list:
rxn_split = rxn.split()
rxn_split.remove('->')
print(rxn_split)
if len(rxn_split) > 4:
rxn_split.remove('+')
reactants = rxn_split[0:-1]
for emu in reactants:
r = emu.split(':')[0]
if r in substrates:
network_substrate_emus.append(emu)
# print(network_substrate_emus)
# print('\n\n\nnetwork_substrate_emus:\n',network_substrate_emus)
# sys.exit()
#correct upto here: 19Apr2017
return network_substrate_emus
[docs]def genInSubEMU(substrate_info,network_substrate_emus):
from scipy.signal import convolve
print('\n\n\nrunning genInSubEMU')
print(substrate_info)
subs_mids = [[],[]]
for i in range(len(network_substrate_emus)):
em = network_substrate_emus[i]
EMUtoDo = em.split(':')[0] #name of molecule
EMUfrag = em.split(':')[1] #e.g. 011, 111, 100 etc.
#temporary for debuging
#EMUtoDo = 'GLU_EX'
# EMUfrag = '00001'
print('EMUtoDo:',EMUtoDo)
print(EMUfrag)
#sys.exit()
#find selected substrate (EMUtoDo)
for j in range(len(substrate_info[0])): #iterate over substrates put in model
if substrate_info[0][j] == EMUtoDo:
break
rowHit = j
# print(EMUfrag)
parts = list(EMUfrag) # it [1,1,0] if emu = molecule:110
parts = [int(x) for x in parts]
# print(substrate_info[2][rowHit])
fraction = substrate_info[2][rowHit]
EMUout = [0] * (sum(parts)+1)
#convert parts in form 001 to 3 (e.g 011 -> 23)
partsSub = []
for p in range(len(parts)):
if parts[p] == 1:
partsSub.append(p+1)
parts = deepcopy(partsSub)
listAAV = substrate_info[1][rowHit]
# print('\nhere\n',len(listAAV))
for j in range(len(listAAV)):
AAV = listAAV[j]
a = [1]
for k in range(len(parts)):
b = [1-AAV[parts[k]-1],AAV[parts[k]-1]]
a = convolve(a,b)
c = [x*fraction[j] for x in a]
# d = [round(x,4) for x in c]
# c = deepcopy(d)
EMUout = [x+y for x,y in zip(EMUout,c)]
subs_mids[0].append(em)
#print('\nEMUout',)
subs_mids[1].append(EMUout)
print('\n\n\n')
for k in range(len(subs_mids[0])):
print('\n\n\n',subs_mids[0][k],'\n',subs_mids[1][k])
#sys.exit()
return subs_mids
[docs]def cal_substrate_mid(fileName,elementary_rxn_list):
'''Calculates substrate mids.
Note: Only 13C carbon mids can be calculated for now.
Input:
1. fileName: substrate input file name. (csv format file)
2. elementary_rxn_list: list of elementary reactions.
assumption:
1. nat = [0.9893, 0.0107] ... naturnal carbon isotope abundance
2. lab = [0.01,0.99]... labeled carbon abundance
'''
# print('\n\n\nrunning cal_substrate_mid...')
substrate_info = read_substrate_input(fileName)
# print('\n',substrate_info)
# [substrate_emus,emu_len] = detect_substrate_emus(substrates,labeling)
network_substrate_emus = list_network_subs_emus(elementary_rxn_list,substrate_info[0]) #lists substrate emu in the network
# print('\nnetwork_substrate_emus\n',network_substrate_emus)
subs_mids = genInSubEMU(substrate_info,network_substrate_emus)
# print('\nFinished calculating substrate mids. \n\n')
return subs_mids