|
64 | 64 |
|
65 | 65 |
|
66 | 66 | # now biomass, from the internal carbon source species |
67 | | -mech_biomass = Jax_MM_Irrev_Uni_e(substrate="c_A", |
| 67 | +mech_biomass = Jax_MM_Irrev_Bi_e(substrate1="c_A", |
| 68 | + substrate2="c_atp", |
68 | 69 | kcat="kcat_1", |
69 | 70 | enzyme="enzyme_1", |
70 | | - km_substrate="km_v1_gluc") |
| 71 | + km_substrate1="km_v1_gluc", |
| 72 | + km_substrate2="km_v1_atp") |
71 | 73 | mech_biomass.add_modifier(modifier.BasicDivision(symbol="a", scaling="scale")) |
72 | 74 | mech_biomass.add_modifier(modifier.BasicMultiplication(symbol="c_biomass", scaling="scale")) |
73 | | -mech_biomass.add_modifier(modifier.SimpleInhibitor(inhibitor="toxic_byproduct",k_I="ki_toxicbyproduct")) |
74 | 75 | v_biomass = build.Reaction( |
75 | 76 | name="v_biomass", |
76 | | - species=["c_A","c_biomass","co2"], |
77 | | - stoichiometry = [-0.175, 1, 0.05], |
| 77 | + species=["c_A","c_atp","c_biomass","co2"], |
| 78 | + stoichiometry = [-0.175, -1, 1, 0.05], |
78 | 79 | compartments = ['c','c','c', 'c','c'], |
79 | 80 | mechanism=mech_biomass, ) |
80 | 81 |
|
| 82 | + |
| 83 | + |
81 | 84 | mech_maintenance = mechanisms.Jax_MM_Irrev_Bi(substrate1='c_A', |
82 | 85 | substrate2= 'c_atp', |
83 | 86 | vmax="vmax_maintenance", |
|
90 | 93 | v_maintenance = build.Reaction( |
91 | 94 | name="v_maintenance", |
92 | 95 | species=["c_A", "c_atp", "co2",'c_adp', 'c_biomass'], |
93 | | - stoichiometry=[-1/6, -28, 1, |
94 | | - 28, 0], |
95 | | - compartments=['c', 'c', 'c', 'c', 'c'], |
| 96 | + stoichiometry=[0, -1, 1, 0], |
| 97 | + compartments=['c', 'c', 'c', 'c'], |
96 | 98 | mechanism=mech_maintenance, ) |
97 | 99 |
|
98 | | -mech_respiration = mechanisms.Jax_MM_Irrev_Bi(substrate1='c_A', |
99 | | - substrate2= "c_adp", |
| 100 | +mech_respiration = mechanisms.Jax_MM_Irrev_Uni(substrate='c_A', |
100 | 101 | vmax="vmax_respiration", |
101 | | - km_substrate1="km_respiration_A", |
102 | | - km_substrate2="km_respiration_adp",) |
| 102 | + km_substrate="km_respiration_A") |
103 | 103 | mech_respiration.add_modifier(modifier.BasicDivision(symbol="a", scaling="scale")) |
104 | 104 | mech_respiration.add_modifier(modifier.BasicMultiplication(symbol="c_biomass", scaling="scale")) |
105 | 105 |
|
106 | 106 | v_respiration = build.Reaction( |
107 | 107 | name="v_respiration", |
108 | | - species=["c_A", "c_adp", |
109 | | - "co2", "c_atp", |
| 108 | + species=["c_A","co2", "c_atp", |
110 | 109 | 'c_biomass'], |
111 | | - stoichiometry=[-1, -28, |
112 | | - 6, 28, |
113 | | - 0], |
114 | | - compartments=['c', 'c', 'c', 'c', 'c'], |
| 110 | + stoichiometry=[-1, 6,1,0], |
| 111 | + compartments=['c', 'c', 'c', 'c'], |
115 | 112 | mechanism=mech_respiration, |
116 | 113 | ) |
117 | 114 |
|
|
555 | 552 |
|
556 | 553 | v_nadh_regeneration = build.Reaction( |
557 | 554 | name="v_atpsynthase", |
558 | | - species= ['c_nadh','c_adp','c_nad', 'c_atp', 'c_biomass'], |
559 | | - compartments = ['c', 'c', 'c', 'c'], |
560 | | - stoichiometry=[-1, -1, 1, 1, 0], |
| 555 | + species= ['c_nadh','c_nad', 'c_biomass'], |
| 556 | + compartments = ['c', 'c', 'c'], |
| 557 | + stoichiometry=[-1, 1, 0], |
561 | 558 | mechanism=mech_nadh_regeneration, |
562 | 559 | ) |
563 | 560 |
|
|
569 | 566 | "kcat_1": 0.3, |
570 | 567 | "enzyme_1": 1, |
571 | 568 | "km_v1_gluc": 0.01, |
572 | | - |
| 569 | + "km_v1_atp": 0.005, |
573 | 570 | "a": 1.6, |
574 | 571 | "scale": 1, # is the broth volume |
575 | 572 | # "respiration_flux": 0.02, |
576 | 573 | "vmax_respiration": 0.35, |
577 | 574 | "km_respiration_A": 0.6, |
578 | | - "km_respiration_adp":0.1, |
579 | 575 | "vmax_maintenance": 0, #has assignment rule |
580 | 576 | "km_vmaintenance_atp":0.1, |
581 | 577 | "km_vmaintenance_gluc": 0.1, |
582 | 578 | "km_v2_A": 0.01, |
| 579 | + |
583 | 580 | "km_v2_adp":0.01, |
584 | 581 | "kcat_2": 0.1, |
585 | 582 | "enzyme_2": 1.0, |
|
706 | 703 | #for the baseline returns one, and then we multiply by 0.2 to get the vmax maintenance. |
707 | 704 |
|
708 | 705 |
|
709 | | -# protein_load = build.AssignmentRule( |
710 | | -# rule=("0.3*" |
711 | | -# "(((kcat_1 *enzyme_1) + (kcat_2 * enzyme_2) + (kcat_3 * enzyme_3) + (kcat_4*enzyme_4)" |
712 | | -# "+(kcat_5* enzyme_5) +" |
713 | | -# "(kcat_6 * enzyme_6) + (kcat_7 * enzyme_7) + (kcat_8 * enzyme_8) +" |
714 | | -# "(kcat_9 * enzyme_9) + (kcat_10 * enzyme_10) + (kcat_11 * enzyme_11) +" |
715 | | -# "(kcat_12 * enzyme_12) + (kcat_13 * enzyme_13)+ (kcat_14 * enzyme_14)+" |
716 | | -# "(kcat_15 * enzyme_15) + (kcat_16 * enzyme_16) + (kcat_17 * enzyme_17) + (kcat_18 * enzyme_18) +" |
717 | | -# "(kcat_19 * enzyme_19) + (kcat_20 * enzyme_20) + (kcat_21 * enzyme_21) +" |
718 | | -# "(kcat_22 * enzyme_22)+ (kcat_23 enzyme_23)+ (kcat_24 * enzyme_24)+ (kcat_25 * enzyme_25)" |
719 | | -# "+75)/100)")) |
720 | 706 |
|
721 | 707 | protein_load = build.AssignmentRule( |
722 | | - rule=("0.2*" |
723 | | - "(((kcat_1 *enzyme_1) + (kcat_2 * enzyme_2) + (kcat_3 * enzyme_3) + (kcat_4*enzyme_4) " |
724 | | - "+ (kcat_5* enzyme_5) +" |
725 | | - "(kcat_6 * enzyme_6) + (kcat_7 * enzyme_7) + (kcat_8 * enzyme_8) + " |
726 | | - "(kcat_9 * enzyme_9) + (kcat_10 * enzyme_10) + (kcat_11 * enzyme_11) +" |
727 | | - "(kcat_12 * enzyme_12) + (kcat_13 * enzyme_13)+ (kcat_14 * enzyme_14)+" |
728 | | - "(kcat_15 * enzyme_15) + (kcat_16 * enzyme_16) + (kcat_17 * enzyme_17)+(kcat_18 *enzyme_18)+" |
729 | | - "(kcat_22 * enzyme_22)+ (kcat_23* enzyme_23)+ (kcat_24 * enzyme_24)+ (kcat_25 * enzyme_25)+" |
730 | | - "+49.4991)/55)")) |
| 708 | + rule=("0.3*" |
| 709 | + "((enzyme_1 + enzyme_2 + enzyme_3 + enzyme_4 " |
| 710 | + "+ enzyme_5 + enzyme_6 + enzyme_7 + enzyme_8 + " |
| 711 | + "enzyme_9 + enzyme_10 + enzyme_11 + enzyme_12 + " |
| 712 | + "enzyme_13 + enzyme_14 + enzyme_15 + enzyme_16 + " |
| 713 | + "enzyme_17 + enzyme_18 + enzyme_22 + enzyme_23 + " |
| 714 | + "enzyme_24 + enzyme_25 + 12)/25)") |
| 715 | +) |
731 | 716 |
|
732 | 717 | kmodel.add_parameter_assignment_rule(variable="vmax_maintenance", |
733 | 718 | rule=protein_load) |
734 | 719 |
|
735 | 720 | kmodel_sim = build.NeuralODEBuild(kmodel) |
736 | 721 |
|
737 | | -ts = jnp.linspace(0, 50, 1000) |
| 722 | +ts = jnp.linspace(0, 90, 1000) |
738 | 723 |
|
739 | 724 | print(kmodel_sim.species_names) #check unit consistency (cmol/L) later |
740 | 725 | print('number of parameters', len(parameters)) |
|
910 | 895 | norm = colors.Normalize(vmin=increasing_protein_load.min(), vmax=increasing_protein_load.max()) |
911 | 896 | cmap = plt.cm.Reds # or any other colormap you like |
912 | 897 | # |
913 | | -# for p in increasing_protein_load: |
914 | | -# print(p) |
915 | | -# newparameters = model.parameters.copy() |
916 | | -# newparameters['enzyme_5'] = p |
917 | | -# |
918 | | -# ys = JaxKmodel(ts=ts, y0=model.y0, params=newparameters) |
919 | | -# ys = pd.DataFrame(ys, columns=S.index) |
| 898 | +for p in increasing_protein_load: |
| 899 | + print(p) |
| 900 | + newparameters = model.parameters.copy() |
| 901 | + newparameters['enzyme_5'] = p |
| 902 | + |
| 903 | + ys = JaxKmodel(ts=ts, y0=model.y0, params=newparameters) |
| 904 | + ys = pd.DataFrame(ys, columns=S.index) |
| 905 | + |
| 906 | + color = cmap(norm(p)) # map protein load to a color |
| 907 | + ax.plot(ts, ys['product_E'], color=color, label=f'p={p:.2f}') |
920 | 908 | # |
921 | | -# color = cmap(norm(p)) # map protein load to a color |
922 | | -# ax.plot(ts, ys['product_E'], color=color, label=f'p={p:.2f}') |
923 | | -# # |
924 | | -# # # Optional: add colorbar |
925 | | -# sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm) |
926 | | -# sm.set_array([]) # Needed for ScalarMappable in some versions |
927 | | -# cbar = plt.colorbar(sm, ax=ax) |
928 | | -# cbar.set_label('Protein Load (vmax_maintenance)') |
| 909 | +# # Optional: add colorbar |
| 910 | +sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm) |
| 911 | +sm.set_array([]) # Needed for ScalarMappable in some versions |
| 912 | +cbar = plt.colorbar(sm, ax=ax) |
| 913 | +cbar.set_label('Protein Load (vmax_maintenance)') |
| 914 | + |
| 915 | +ax.set_title("Protein load (0-100 vmax3)") |
| 916 | +ax.set_xlabel('Time') |
| 917 | +ax.set_ylabel('Product') |
| 918 | +plt.tight_layout() |
929 | 919 | # |
930 | | -# ax.set_title("Protein load (0-100 vmax3)") |
931 | | -# ax.set_xlabel('Time') |
932 | | -# ax.set_ylabel('Product') |
933 | | -# plt.tight_layout() |
934 | | -# # |
935 | | -# fig.savefig(f"{output_dir}/protein_load_effect.png", bbox_inches='tight') |
| 920 | +fig.savefig(f"{output_dir}/protein_load_effect.png", bbox_inches='tight') |
0 commit comments