# -*- coding: utf-8 -*-
"""
Created on Mon Jul 4 12:23:46 2016
Main module of FluxPyt.
Collects user inputs.
All the modules are run through this.
@author: Trunil
"""
[docs]def main():
import fluxpyt.build_model as bm
import time
import fluxpyt.create_atm_transition_equations as cae
import fluxpyt.priliminary_fba as pf
import fluxpyt.solve_mid_networks as smn
import fluxpyt.input_substrate_emu as ise
from copy import deepcopy
from fluxpyt.solve_mfa_lm import solve_mfa_problem
from fluxpyt.utility import space
from fluxpyt.make_emu_networks import make_networks as mn2
t1 = time.time()
#build model
# print("Enter folder name: ")
#
# folder = input()
print("Enter file name: ")
filename = input()
filepath = filename + '.csv'
print('\n\n\nIs data for natural isotope correction available (y/n)?')
userInput = input()
print('\n\n\nEnter Number of Iterations')
numIter = input()
[stoich_matrix,model_metabolite,model_isotope,mets,mids] = bm.build_model(filepath) #***************
measured_mids = smn.get_mids(mids) #sorts mids in desired form
measured_mids = deepcopy(measured_mids)
#derive elementary reactions
[mol_rxnIDs,elementary_rxn_list,moleculeList] = cae.create_atm_transition_equations(model_isotope[0],model_isotope[1],model_isotope[2],model_isotope[6])
space()
print('\n\nlen(elementary_rxn_list): ',len(elementary_rxn_list))
print('\n\n')
for i in range(len(mol_rxnIDs)):
print(mol_rxnIDs[i],': ',elementary_rxn_list[i])
print('\n\nlength el rxns:',len(elementary_rxn_list),'\n\n',measured_mids[2])
#get emu networks
measured_emus = measured_mids[2]
#read substrate input file
substrate_file = 'substrate_input.csv'
substrate_mids = ise.cal_substrate_mid(substrate_file,elementary_rxn_list) #*********************
space()
print('\n\nsubstrate mids...\n')
for i in range(len(substrate_mids[0])):
print('\n',substrate_mids[0][i],'\n',substrate_mids[1][i])
print(len(substrate_mids[0]))
#[rxnId_networks,rxn_networks] = men.make_networks(mol_rxnIDs,elementary_rxn_list)
[rxnId_networks,rxn_networks] = mn2(mol_rxnIDs,elementary_rxn_list,measured_emus,substrate_mids[0])
space()
print('*'*50)
#perform preliminary fba for getting flux variabilities
[bounds,initial_sol] = pf.priliminary_fba(model_metabolite,stoich_matrix)
space()
print('Reaction bounds:')
for i in range(len(model_metabolite[0])):
print(model_metabolite[0][i],': ',bounds[i])
#solve networks
rates = [model_isotope[0],model_isotope[3]]
#solve mfa problem using lmfit package
print('\n\n',substrate_mids)
t1 = time.time()
[rxn_ids,optimal_flux_dist,best_out] = solve_mfa_problem(stoich_matrix,model_metabolite,rxnId_networks,rxn_networks,measured_mids,substrate_mids,rates,bounds,initial_sol,userInput,numIter=numIter)
print('Time taken (min): ',(time.time()-t1)/60)
space()
print('Optimization completed. \n\nIs network diagram template available? (y/n)')
diagTag = input()
diagTag = diagTag.lower()
if diagTag == 'y':
from fluxpyt.draw_flux_map import draw_flux_map
draw_flux_map(filename)
print('\n\n\nTime taken(s): ',round((time.time()-t1)/60,1), 'minutes')
space()
print('Flux estimation completed. \n\nDo you want to perform Monte Carlo analysis to estimate flux standard errors? (y/n)')
confTag = input()
confTag = confTag.lower()
if confTag == 'y':
print('\n\n\nEnter number of data sets to be generated. (default=500)')
num_data = input()
if num_data == '':
print('\nNo input given. Using default value 500.')
num_data = 500
space()
print('Performing Monte Carlo...')
from fluxpyt.monte_carlo import monte_carlo
t2 = time.time()
monte_carlo_result = monte_carlo(int(num_data))
print('\n\n\nTime taken(s): ',round((time.time()-t2)/60,1), 'minutes')
else:
space()
print('Optimization results are stored as pickle file.\nYou can estimate confidence intervals later.')