mxlmodels 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mxlmodels/__init__.py +34 -0
- mxlmodels/dyn_entro.py +184 -0
- mxlmodels/ebeling2026.py +2375 -0
- mxlmodels/lotka_volterra_v1.py +92 -0
- mxlmodels/lotka_volterra_v2.py +83 -0
- mxlmodels/matuszynska2016_npq.py +683 -0
- mxlmodels/matuszynska2016_phd.py +864 -0
- mxlmodels/matuszynska2019.py +1469 -0
- mxlmodels/poolman2000.py +685 -0
- mxlmodels/pop_dyn.py +69 -0
- mxlmodels/py.typed +0 -0
- mxlmodels/saadat2021.py +1871 -0
- mxlmodels/trip_dyn.py +115 -0
- mxlmodels/yokota1985.py +170 -0
- mxlmodels-1.0.0.dist-info/METADATA +68 -0
- mxlmodels-1.0.0.dist-info/RECORD +18 -0
- mxlmodels-1.0.0.dist-info/WHEEL +4 -0
- mxlmodels-1.0.0.dist-info/licenses/LICENSE +21 -0
mxlmodels/ebeling2026.py
ADDED
|
@@ -0,0 +1,2375 @@
|
|
|
1
|
+
"""Ebeling 2026 extended chloroplast model with ion transport, ROS, and Calvin cycle.
|
|
2
|
+
|
|
3
|
+
Reference: tbd
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import math
|
|
7
|
+
|
|
8
|
+
import numpy as np
|
|
9
|
+
from mxlpy import Derived, InitialAssignment, Model
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _initial_delta_psi(
|
|
13
|
+
p_h: float,
|
|
14
|
+
p_h_lumen: float,
|
|
15
|
+
r: float,
|
|
16
|
+
f: float,
|
|
17
|
+
t: float,
|
|
18
|
+
) -> float:
|
|
19
|
+
"""Estimate delta psi in the dark, assuming delta_pH and delta_psi contribute equally to pmf."""
|
|
20
|
+
return np.log(10) * ((r * t) / f) * (p_h - p_h_lumen)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _half(
|
|
24
|
+
x: float,
|
|
25
|
+
) -> float:
|
|
26
|
+
"""Return x/2; used for halving a stoichiometric coefficient."""
|
|
27
|
+
return x / 2
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _mass_action_1s(
|
|
31
|
+
s1: float,
|
|
32
|
+
k_fwd: float,
|
|
33
|
+
) -> float:
|
|
34
|
+
"""Mass-action rate for one substrate."""
|
|
35
|
+
return k_fwd * s1
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _dg_ph(
|
|
39
|
+
r: float,
|
|
40
|
+
t: float,
|
|
41
|
+
) -> float:
|
|
42
|
+
"""Thermodynamic coefficient dG/dpH = RT*ln(10) in kJ/mol."""
|
|
43
|
+
return np.log(10) * r * t
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _moiety_1(
|
|
47
|
+
concentration: float,
|
|
48
|
+
total: float,
|
|
49
|
+
) -> float:
|
|
50
|
+
"""Conservation moiety: total - concentration."""
|
|
51
|
+
return total - concentration
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _quencher(
|
|
55
|
+
psbs: float,
|
|
56
|
+
vx: float,
|
|
57
|
+
psbsp: float,
|
|
58
|
+
zx: float,
|
|
59
|
+
y0: float,
|
|
60
|
+
y1: float,
|
|
61
|
+
y2: float,
|
|
62
|
+
y3: float,
|
|
63
|
+
k_z_sat: float,
|
|
64
|
+
) -> float:
|
|
65
|
+
"""co-operative 4-state quenching mechanism.
|
|
66
|
+
|
|
67
|
+
gamma0: slow quenching of (Vx - protonation)
|
|
68
|
+
gamma1: fast quenching (Vx + protonation)
|
|
69
|
+
gamma2: fastest possible quenching (Zx + protonation)
|
|
70
|
+
gamma3: slow quenching of Zx present (Zx - protonation).
|
|
71
|
+
"""
|
|
72
|
+
ZAnt = zx / (zx + k_z_sat)
|
|
73
|
+
return y0 * vx * psbs + y1 * vx * psbsp + y2 * ZAnt * psbsp + y3 * ZAnt * psbs
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _keq_pq_red(
|
|
77
|
+
e0_qa: float,
|
|
78
|
+
f: float,
|
|
79
|
+
e0_pq: float,
|
|
80
|
+
p_hstroma: float,
|
|
81
|
+
d_g_p_h: float,
|
|
82
|
+
rt: float,
|
|
83
|
+
) -> float:
|
|
84
|
+
"""Equilibrium constant for PQ reduction by QA, pH-corrected via stroma proton contribution."""
|
|
85
|
+
dg1 = -e0_qa * f
|
|
86
|
+
dg2 = -2 * e0_pq * f
|
|
87
|
+
dg = -2 * dg1 + dg2 + 2 * p_hstroma * d_g_p_h
|
|
88
|
+
return np.exp(-dg / rt)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def _ps2_crosssection(
|
|
92
|
+
lhc: float,
|
|
93
|
+
static_ant_ii: float,
|
|
94
|
+
static_ant_i: float,
|
|
95
|
+
) -> float:
|
|
96
|
+
"""Equilibrium constant for PQ reduction by QA, pH-corrected via stroma proton contribution."""
|
|
97
|
+
return static_ant_ii + (1 - static_ant_ii - static_ant_i) * lhc
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def _pi_cbb(
|
|
101
|
+
phosphate_total: float,
|
|
102
|
+
pga: float,
|
|
103
|
+
bpga: float,
|
|
104
|
+
gap: float,
|
|
105
|
+
dhap: float,
|
|
106
|
+
fbp: float,
|
|
107
|
+
f6p: float,
|
|
108
|
+
g6p: float,
|
|
109
|
+
g1p: float,
|
|
110
|
+
sbp: float,
|
|
111
|
+
s7p: float,
|
|
112
|
+
e4p: float,
|
|
113
|
+
x5p: float,
|
|
114
|
+
r5p: float,
|
|
115
|
+
rubp: float,
|
|
116
|
+
ru5p: float,
|
|
117
|
+
atp: float,
|
|
118
|
+
) -> float:
|
|
119
|
+
"""Free orthophosphate from total minus all phosphorylated CBB intermediates (bisphosphates count twice)."""
|
|
120
|
+
return phosphate_total - (
|
|
121
|
+
pga
|
|
122
|
+
+ 2 * bpga
|
|
123
|
+
+ gap
|
|
124
|
+
+ dhap
|
|
125
|
+
+ 2 * fbp
|
|
126
|
+
+ f6p
|
|
127
|
+
+ g6p
|
|
128
|
+
+ g1p
|
|
129
|
+
+ 2 * sbp
|
|
130
|
+
+ s7p
|
|
131
|
+
+ e4p
|
|
132
|
+
+ x5p
|
|
133
|
+
+ r5p
|
|
134
|
+
+ 2 * rubp
|
|
135
|
+
+ ru5p
|
|
136
|
+
+ atp
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def _moiety_2(
|
|
141
|
+
x1: float,
|
|
142
|
+
x2: float,
|
|
143
|
+
total: float,
|
|
144
|
+
) -> float:
|
|
145
|
+
"""Conservation moiety: total - x1 - x2."""
|
|
146
|
+
return total - x1 - x2
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def _glutathion_moiety(
|
|
150
|
+
gssg: float,
|
|
151
|
+
gs_total: float,
|
|
152
|
+
) -> float:
|
|
153
|
+
"""Conservation moiety: GSH = total - 2*GSSG (one GSSG releases two GSH)."""
|
|
154
|
+
return gs_total - 2 * gssg
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def _keq_atp(
|
|
158
|
+
p_h: float,
|
|
159
|
+
delta_g0_atp: float,
|
|
160
|
+
d_g_p_h: float,
|
|
161
|
+
hpr: float,
|
|
162
|
+
p_hstroma: float,
|
|
163
|
+
pi_mol: float,
|
|
164
|
+
rt: float,
|
|
165
|
+
) -> float:
|
|
166
|
+
"""Equilibrium constant for ATP synthase, driven by the transmembrane proton gradient."""
|
|
167
|
+
delta_g = delta_g0_atp - d_g_p_h * hpr * (p_hstroma - p_h)
|
|
168
|
+
return pi_mol * math.exp(-delta_g / rt)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def _keq_fnr(
|
|
172
|
+
e0_fd: float,
|
|
173
|
+
f: float,
|
|
174
|
+
e0_nadp: float,
|
|
175
|
+
p_hstroma: float,
|
|
176
|
+
d_g_p_h: float,
|
|
177
|
+
rt: float,
|
|
178
|
+
) -> float:
|
|
179
|
+
"""Equilibrium constant for FNR: Fd-mediated NADP+ reduction, pH-corrected."""
|
|
180
|
+
dg1 = -e0_fd * f
|
|
181
|
+
dg2 = -2 * e0_nadp * f
|
|
182
|
+
dg = -2 * dg1 + dg2 + d_g_p_h * p_hstroma
|
|
183
|
+
return math.exp(-dg / rt)
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def _mul(
|
|
187
|
+
x: float,
|
|
188
|
+
y: float,
|
|
189
|
+
) -> float:
|
|
190
|
+
"""Calculate the product of two values.
|
|
191
|
+
|
|
192
|
+
Parameters
|
|
193
|
+
----------
|
|
194
|
+
x
|
|
195
|
+
First factor
|
|
196
|
+
y
|
|
197
|
+
Second factor
|
|
198
|
+
|
|
199
|
+
Returns
|
|
200
|
+
-------
|
|
201
|
+
Float
|
|
202
|
+
Product of x and y (x * y)
|
|
203
|
+
|
|
204
|
+
Examples
|
|
205
|
+
--------
|
|
206
|
+
>>> mul(2.0, 3.0)
|
|
207
|
+
6.0
|
|
208
|
+
>>> mul(0.5, 4.0)
|
|
209
|
+
2.0
|
|
210
|
+
|
|
211
|
+
"""
|
|
212
|
+
return x * y
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def _rate_translocator(
|
|
216
|
+
pi: float,
|
|
217
|
+
pga: float,
|
|
218
|
+
gap: float,
|
|
219
|
+
dhap: float,
|
|
220
|
+
k_pxt: float,
|
|
221
|
+
p_ext: float,
|
|
222
|
+
k_pi: float,
|
|
223
|
+
k_pga: float,
|
|
224
|
+
k_gap: float,
|
|
225
|
+
k_dhap: float,
|
|
226
|
+
) -> float:
|
|
227
|
+
"""Denominator term N for the phosphate translocator shared by all triose-P export reactions."""
|
|
228
|
+
return 1 + (1 + k_pxt / p_ext) * (
|
|
229
|
+
pi / k_pi + pga / k_pga + gap / k_gap + dhap / k_dhap
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def _keq_pcp700(
|
|
234
|
+
e0_pc: float,
|
|
235
|
+
f: float,
|
|
236
|
+
e0_p700: float,
|
|
237
|
+
rt: float,
|
|
238
|
+
) -> float:
|
|
239
|
+
"""Equilibrium constant for PC -> P700 electron transfer from standard redox potentials."""
|
|
240
|
+
DG = -(-e0_pc * f) + (-e0_p700 * f)
|
|
241
|
+
return np.exp(-DG / rt)
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
def _keq_faf_d(
|
|
245
|
+
e0_fa: float,
|
|
246
|
+
f: float,
|
|
247
|
+
e0_fd: float,
|
|
248
|
+
rt: float,
|
|
249
|
+
) -> float:
|
|
250
|
+
"""Equilibrium constant for FA -> Fd electron transfer from standard redox potentials."""
|
|
251
|
+
DG = -(-e0_fa * f) + (-e0_fd * f)
|
|
252
|
+
return np.exp(-DG / rt)
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
def _moiety_3(
|
|
256
|
+
c1: float,
|
|
257
|
+
c2: float,
|
|
258
|
+
c3: float,
|
|
259
|
+
total: float,
|
|
260
|
+
) -> float:
|
|
261
|
+
"""Conservation moiety: fourth species = total - c1 - c2 - c3."""
|
|
262
|
+
return total - c1 - c2 - c3
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def _normalize_concentration(
|
|
266
|
+
concentration: float,
|
|
267
|
+
total: float,
|
|
268
|
+
) -> float:
|
|
269
|
+
"""Return concentration/total as a dimensionless fraction."""
|
|
270
|
+
return concentration / total
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def _normalize_2_concentrations(
|
|
274
|
+
c1: float,
|
|
275
|
+
c2: float,
|
|
276
|
+
total: float,
|
|
277
|
+
) -> float:
|
|
278
|
+
"""Return (c1+c2)/total as a combined dimensionless fraction."""
|
|
279
|
+
return (c1 + c2) / total
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
def _fluo(
|
|
283
|
+
q: float,
|
|
284
|
+
b0: float,
|
|
285
|
+
b2: float,
|
|
286
|
+
ps2cs: float,
|
|
287
|
+
k2: float,
|
|
288
|
+
k_f: float,
|
|
289
|
+
k_h_qslope: float,
|
|
290
|
+
k_h0: float,
|
|
291
|
+
) -> float:
|
|
292
|
+
"""Chlorophyll fluorescence yield from open (B0) and closed (B2) PSII centres with quencher-dependent kH."""
|
|
293
|
+
kH = k_h0 + k_h_qslope * q
|
|
294
|
+
return (ps2cs * k_f * b0) / (k_f + k2 + kH) + (ps2cs * k_f * b2) / (k_f + kH)
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
def _k_b6f(
|
|
298
|
+
p_h: float,
|
|
299
|
+
p_kreg: float,
|
|
300
|
+
b6f_content: float,
|
|
301
|
+
max_b6f: float,
|
|
302
|
+
) -> float:
|
|
303
|
+
"""Effective b6f rate constant modulated by lumenal pH via a sigmoid around pKreg."""
|
|
304
|
+
pHmod = 1 - (1 / (10 ** (p_h - p_kreg) + 1))
|
|
305
|
+
return pHmod * b6f_content * max_b6f
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
def _protons_lumen(
|
|
309
|
+
p_h_lumen: float,
|
|
310
|
+
) -> float:
|
|
311
|
+
"""Convert lumenal pH to proton concentration in mmol/mmol_Chl (conversion factor 2.5e-4)."""
|
|
312
|
+
return (10 ** (-p_h_lumen)) / 2.5e-4
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
def _protons_stroma_ebeling(
|
|
316
|
+
p_h_stroma: float,
|
|
317
|
+
) -> float:
|
|
318
|
+
"""Convert stromal pH to proton concentration in mmol/mmol_Chl (Ebeling model, factor 3.2e-5)."""
|
|
319
|
+
return (10 ** (-p_h_stroma)) / 3.2e-5
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
def _pmf(
|
|
323
|
+
_deltap_h: float,
|
|
324
|
+
delta_psi: float,
|
|
325
|
+
f: float,
|
|
326
|
+
) -> float:
|
|
327
|
+
"""Total proton motive force: electrical (F*delta_psi) + chemical (delta_pH) contributions."""
|
|
328
|
+
return f * delta_psi + _deltap_h
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
def _deltap_h(
|
|
332
|
+
p_h: float,
|
|
333
|
+
p_h_lumen: float,
|
|
334
|
+
d_g: float,
|
|
335
|
+
) -> float:
|
|
336
|
+
"""Proton motive force component from transmembrane pH difference (in energy units)."""
|
|
337
|
+
return d_g * (p_h - p_h_lumen)
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
def _atp_pmf_activity2(
|
|
341
|
+
p_k0_e: float,
|
|
342
|
+
b: float,
|
|
343
|
+
p_h_lumen: float,
|
|
344
|
+
p_h: float,
|
|
345
|
+
f: float,
|
|
346
|
+
rt: float,
|
|
347
|
+
delta_psi: float,
|
|
348
|
+
) -> float:
|
|
349
|
+
"""Variant of _atp_pmf_activity used in a second ATP synthase module instance."""
|
|
350
|
+
_pmf = delta_psi - np.log(10) * ((rt) / f) * (p_h_lumen - p_h)
|
|
351
|
+
x = np.log(10 ** (-p_k0_e)) + b * (_pmf * f) / (rt)
|
|
352
|
+
return (np.e**x) / (1 + np.e**x)
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
def _pmf_in_v(
|
|
356
|
+
delta_psi: float,
|
|
357
|
+
p_h_lumen: float,
|
|
358
|
+
p_h: float,
|
|
359
|
+
rt: float,
|
|
360
|
+
f: float,
|
|
361
|
+
) -> float:
|
|
362
|
+
"""Total PMF expressed in volts: delta_psi - (RT/F)*ln(10)*delta_pH."""
|
|
363
|
+
return delta_psi - np.log(10) * ((rt) / f) * (p_h_lumen - p_h)
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
def _keq_cytb6f(
|
|
367
|
+
p_h: float,
|
|
368
|
+
_pmf: float,
|
|
369
|
+
f: float,
|
|
370
|
+
e0_pq: float,
|
|
371
|
+
e0_pc: float,
|
|
372
|
+
rt: float,
|
|
373
|
+
d_g_p_h: float,
|
|
374
|
+
) -> float:
|
|
375
|
+
"""Equilibrium constant of cytochrome b6f including PMF contribution to free energy."""
|
|
376
|
+
DG1 = -2 * f * e0_pq
|
|
377
|
+
DG2 = -f * e0_pc
|
|
378
|
+
DG = -(DG1 + 2 * d_g_p_h * p_h) + 2 * DG2 + 2 * _pmf
|
|
379
|
+
return np.exp(-DG / rt)
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
def _squared(
|
|
383
|
+
x: float,
|
|
384
|
+
) -> float:
|
|
385
|
+
"""Return x^2; used for second-order stoichiometry terms."""
|
|
386
|
+
return x**2
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
def _reg_kea(
|
|
390
|
+
p_h: float,
|
|
391
|
+
atp: float,
|
|
392
|
+
kea3_p_h_reg: float,
|
|
393
|
+
kea3_atp_treshold: float,
|
|
394
|
+
) -> float:
|
|
395
|
+
"""KEA3 K+/H+ antiporter regulation: product of pH and ATP inhibition sigmoids."""
|
|
396
|
+
pH_inhib = (1 - 0.1) / (1 + np.exp((p_h - kea3_p_h_reg) / 0.001))
|
|
397
|
+
ATP_inhib = (1 - 0.1) / (1 + np.exp((kea3_atp_treshold - atp) / 0.01))
|
|
398
|
+
return pH_inhib * ATP_inhib
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
def _dg_k(
|
|
402
|
+
klumen: float,
|
|
403
|
+
kstroma: float,
|
|
404
|
+
delta_psi: float,
|
|
405
|
+
rt: float,
|
|
406
|
+
f: float,
|
|
407
|
+
) -> float:
|
|
408
|
+
"""Electrochemical driving force for K+ transport across the thylakoid membrane."""
|
|
409
|
+
return (-(rt / f) * np.log10(kstroma / klumen) + delta_psi) * f
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
def _cl_driving_force(
|
|
413
|
+
delta_psi: float,
|
|
414
|
+
cl_lumen: float,
|
|
415
|
+
cl_stroma: float,
|
|
416
|
+
rt: float,
|
|
417
|
+
f: float,
|
|
418
|
+
) -> float:
|
|
419
|
+
"""Electrochemical driving force for Cl- transport across the thylakoid membrane."""
|
|
420
|
+
return ((rt / f) * np.log10(cl_stroma / cl_lumen) + delta_psi) * f
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
def _keq_ndh1(
|
|
424
|
+
_pmf: float,
|
|
425
|
+
e0_fd: float,
|
|
426
|
+
f: float,
|
|
427
|
+
e0_pq: float,
|
|
428
|
+
p_hstroma: float,
|
|
429
|
+
d_g_p_h: float,
|
|
430
|
+
rt: float,
|
|
431
|
+
) -> float:
|
|
432
|
+
"""Equilibrium constant for NDH-1 (Fd-dependent PQ reduction) including PMF and stromal pH."""
|
|
433
|
+
DG1 = -e0_fd * f
|
|
434
|
+
DG2 = -2 * e0_pq * f
|
|
435
|
+
DG = -2 * DG1 + DG2 + 2 * d_g_p_h * p_hstroma + 4 * _pmf
|
|
436
|
+
return np.exp(-DG / rt)
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
def _cl_ce_activation(
|
|
440
|
+
atp: float,
|
|
441
|
+
cl_ce_atp_threshold: float,
|
|
442
|
+
) -> float:
|
|
443
|
+
"""CLCe activation factor: sigmoid inhibited by high ATP (low-energy stress signal)."""
|
|
444
|
+
return (1 - 0.1) / (1 + np.exp((atp - cl_ce_atp_threshold) / 0.01))
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
def _mass_action_2s(
|
|
448
|
+
s1: float,
|
|
449
|
+
s2: float,
|
|
450
|
+
k_fwd: float,
|
|
451
|
+
) -> float:
|
|
452
|
+
"""Mass-action rate for two substrates."""
|
|
453
|
+
return k_fwd * s1 * s2
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
def _atp_pmf_activity(
|
|
457
|
+
p_k0_e: float,
|
|
458
|
+
b: float,
|
|
459
|
+
p_h_lumen: float,
|
|
460
|
+
p_h: float,
|
|
461
|
+
f: float,
|
|
462
|
+
rt: float,
|
|
463
|
+
delta_psi: float,
|
|
464
|
+
) -> float:
|
|
465
|
+
"""Sigmoidal ATP synthase activity as function of PMF (delta_psi and delta_pH combined)."""
|
|
466
|
+
_pmf = delta_psi - np.log(10) * ((rt) / f) * (p_h_lumen - p_h)
|
|
467
|
+
x = np.log(10 ** (-p_k0_e)) + b * (_pmf * f) / (rt)
|
|
468
|
+
return (np.e**x) / (1 + np.e**x)
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
def _v_at_psynthase_mod(
|
|
472
|
+
atp: float,
|
|
473
|
+
atp_activity: float,
|
|
474
|
+
_atp_pmf_activity: float,
|
|
475
|
+
k_at_psynthase: float,
|
|
476
|
+
adp: float,
|
|
477
|
+
_keq_atp: float,
|
|
478
|
+
convf: float,
|
|
479
|
+
) -> float:
|
|
480
|
+
"""ATP synthase flux modulated by light-activation state and PMF-dependent activity sigmoid."""
|
|
481
|
+
return (
|
|
482
|
+
atp_activity
|
|
483
|
+
* _atp_pmf_activity
|
|
484
|
+
* k_at_psynthase
|
|
485
|
+
* (adp / convf - atp / convf / _keq_atp)
|
|
486
|
+
)
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
def _value(
|
|
490
|
+
x: float,
|
|
491
|
+
) -> float:
|
|
492
|
+
"""Return x unchanged."""
|
|
493
|
+
return x
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
def _atp_div(
|
|
497
|
+
hpr: float,
|
|
498
|
+
x: float,
|
|
499
|
+
) -> float:
|
|
500
|
+
"""Return -hpr*x for the HPR-scaled proton stoichiometry of ATP synthase (negative = lumen consumption)."""
|
|
501
|
+
return -hpr * x
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
def _protons_stroma_2016(
|
|
505
|
+
ph: float,
|
|
506
|
+
) -> float:
|
|
507
|
+
"""Convert stromal pH to proton concentration (µmol/L).
|
|
508
|
+
|
|
509
|
+
Introduced by the Matuszynska 2016 PhD model.
|
|
510
|
+
"""
|
|
511
|
+
return 4000.0 * 10 ** (-ph)
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
def _protonation_hill(
|
|
515
|
+
vx: float,
|
|
516
|
+
h: float,
|
|
517
|
+
nh: float,
|
|
518
|
+
k_fwd: float,
|
|
519
|
+
k_ph_sat: float,
|
|
520
|
+
) -> float:
|
|
521
|
+
"""Hill-type protonation rate scaled by lumenal proton concentration."""
|
|
522
|
+
return k_fwd * (h**nh / (h**nh + _protons_stroma_2016(k_ph_sat) ** nh)) * vx # type: ignore
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
def _rate_cyclic_electron_flow(
|
|
526
|
+
pox: float,
|
|
527
|
+
fdred: float,
|
|
528
|
+
kcyc: float,
|
|
529
|
+
) -> float:
|
|
530
|
+
"""Cyclic electron flow rate: mass action on Fd_red^2 and PQ_ox."""
|
|
531
|
+
return kcyc * fdred**2 * pox
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
def _rate_protonation_hill(
|
|
535
|
+
vx: float,
|
|
536
|
+
h: float,
|
|
537
|
+
k_fwd: float,
|
|
538
|
+
n_h: float,
|
|
539
|
+
kph_sat: float,
|
|
540
|
+
) -> float:
|
|
541
|
+
"""Hill-type deepoxidase rate activated by lumenal proton concentration."""
|
|
542
|
+
return k_fwd * (h**n_h / (h**n_h + _protons_stroma_2016(kph_sat) ** n_h)) * vx # type: ignore
|
|
543
|
+
|
|
544
|
+
|
|
545
|
+
def _rate_fnr_2019(
|
|
546
|
+
fd_ox: float,
|
|
547
|
+
fd_red: float,
|
|
548
|
+
nadph: float,
|
|
549
|
+
nadp: float,
|
|
550
|
+
km_fnr_f: float,
|
|
551
|
+
km_fnr_n: float,
|
|
552
|
+
vmax: float,
|
|
553
|
+
keq_fnr: float,
|
|
554
|
+
convf: float,
|
|
555
|
+
) -> float:
|
|
556
|
+
"""FNR rate (2019 formulation): same as 2016 but NADP/H concentrations scaled by convf."""
|
|
557
|
+
fdred = fd_red / km_fnr_f
|
|
558
|
+
fdox = fd_ox / km_fnr_f
|
|
559
|
+
nadph = nadph / convf / km_fnr_n
|
|
560
|
+
nadp = nadp / convf / km_fnr_n
|
|
561
|
+
return (
|
|
562
|
+
vmax
|
|
563
|
+
* (fdred**2 * nadp - fdox**2 * nadph / keq_fnr)
|
|
564
|
+
/ ((1 + fdred + fdred**2) * (1 + nadp) + (1 + fdox + fdox**2) * (1 + nadph) - 1)
|
|
565
|
+
)
|
|
566
|
+
|
|
567
|
+
|
|
568
|
+
def _rate_leak(
|
|
569
|
+
protons_lumen: float,
|
|
570
|
+
ph_stroma: float,
|
|
571
|
+
k_leak: float,
|
|
572
|
+
) -> float:
|
|
573
|
+
"""Passive proton leak across the thylakoid membrane, proportional to the proton gradient."""
|
|
574
|
+
return k_leak * (protons_lumen - _protons_stroma_2016(ph_stroma))
|
|
575
|
+
|
|
576
|
+
|
|
577
|
+
def _neg_one_div(
|
|
578
|
+
x: float,
|
|
579
|
+
) -> float:
|
|
580
|
+
"""Negate x; used as a sign-flipping stoichiometry wrapper."""
|
|
581
|
+
return -1 * x
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
def _rate_state_transition_ps1_ps2(
|
|
585
|
+
ant: float,
|
|
586
|
+
pox: float,
|
|
587
|
+
p_tot: float,
|
|
588
|
+
k_stt7: float,
|
|
589
|
+
km_st: float,
|
|
590
|
+
n_st: float,
|
|
591
|
+
) -> float:
|
|
592
|
+
"""STT7-kinase phosphorylation of LHC; inhibited by oxidised PQ (state 1 → 2 transition)."""
|
|
593
|
+
return k_stt7 * (1 / (1 + (pox / p_tot / km_st) ** n_st)) * ant
|
|
594
|
+
|
|
595
|
+
|
|
596
|
+
def _rate_poolman_5i(
|
|
597
|
+
rubp: float,
|
|
598
|
+
pga: float,
|
|
599
|
+
co2: float,
|
|
600
|
+
vmax: float,
|
|
601
|
+
kms_rubp: float,
|
|
602
|
+
kms_co2: float,
|
|
603
|
+
# inhibitors
|
|
604
|
+
ki_pga: float,
|
|
605
|
+
fbp: float,
|
|
606
|
+
ki_fbp: float,
|
|
607
|
+
sbp: float,
|
|
608
|
+
ki_sbp: float,
|
|
609
|
+
pi: float,
|
|
610
|
+
ki_p: float,
|
|
611
|
+
nadph: float,
|
|
612
|
+
ki_nadph: float,
|
|
613
|
+
) -> float:
|
|
614
|
+
"""Rubisco carboxylation rate (Poolman 2000): bi-substrate with 5 competitive inhibitors."""
|
|
615
|
+
top = vmax * rubp * co2
|
|
616
|
+
btm = (
|
|
617
|
+
rubp
|
|
618
|
+
+ kms_rubp
|
|
619
|
+
* (
|
|
620
|
+
1
|
|
621
|
+
+ pga / ki_pga
|
|
622
|
+
+ fbp / ki_fbp
|
|
623
|
+
+ sbp / ki_sbp
|
|
624
|
+
+ pi / ki_p
|
|
625
|
+
+ nadph / ki_nadph
|
|
626
|
+
)
|
|
627
|
+
) * (co2 + kms_co2)
|
|
628
|
+
return top / btm
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
def _rapid_equilibrium_2s_2p(
|
|
632
|
+
s1: float,
|
|
633
|
+
s2: float,
|
|
634
|
+
p1: float,
|
|
635
|
+
p2: float,
|
|
636
|
+
k_re: float,
|
|
637
|
+
q: float,
|
|
638
|
+
) -> float:
|
|
639
|
+
"""Rapid-equilibrium rate for two substrates, two products."""
|
|
640
|
+
return k_re * (s1 * s2 - p1 * p2 / q)
|
|
641
|
+
|
|
642
|
+
|
|
643
|
+
def _rapid_equilibrium_3s_3p(
|
|
644
|
+
s1: float,
|
|
645
|
+
s2: float,
|
|
646
|
+
s3: float,
|
|
647
|
+
p1: float,
|
|
648
|
+
p2: float,
|
|
649
|
+
p3: float,
|
|
650
|
+
k_re: float,
|
|
651
|
+
q: float,
|
|
652
|
+
) -> float:
|
|
653
|
+
"""Rapid-equilibrium rate for three substrates, three products."""
|
|
654
|
+
return k_re * (s1 * s2 * s3 - p1 * p2 * p3 / q)
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
def _rapid_equilibrium_1s_1p(
|
|
658
|
+
s1: float,
|
|
659
|
+
p1: float,
|
|
660
|
+
k_re: float,
|
|
661
|
+
q: float,
|
|
662
|
+
) -> float:
|
|
663
|
+
"""Rapid-equilibrium rate for one substrate, one product."""
|
|
664
|
+
return k_re * (s1 - p1 / q)
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
def _rapid_equilibrium_2s_1p(
|
|
668
|
+
s1: float,
|
|
669
|
+
s2: float,
|
|
670
|
+
p1: float,
|
|
671
|
+
k_re: float,
|
|
672
|
+
q: float,
|
|
673
|
+
) -> float:
|
|
674
|
+
"""Rapid-equilibrium rate for two substrates, one product."""
|
|
675
|
+
return k_re * (s1 * s2 - p1 / q)
|
|
676
|
+
|
|
677
|
+
|
|
678
|
+
def _michaelis_menten_1s_2i(
|
|
679
|
+
s: float,
|
|
680
|
+
i1: float,
|
|
681
|
+
i2: float,
|
|
682
|
+
vmax: float,
|
|
683
|
+
km: float,
|
|
684
|
+
ki1: float,
|
|
685
|
+
ki2: float,
|
|
686
|
+
) -> float:
|
|
687
|
+
"""Irreversible Michaelis-Menten rate for one substrate with two inhibitors."""
|
|
688
|
+
return vmax * s / (s + km * (1 + i1 / ki1 + i2 / ki2))
|
|
689
|
+
|
|
690
|
+
|
|
691
|
+
def _michaelis_menten_1s_1i(
|
|
692
|
+
s: float,
|
|
693
|
+
i: float,
|
|
694
|
+
vmax: float,
|
|
695
|
+
km: float,
|
|
696
|
+
ki: float,
|
|
697
|
+
) -> float:
|
|
698
|
+
"""Irreversible Michaelis-Menten rate for one substrate with one inhibitor."""
|
|
699
|
+
return vmax * s / (s + km * (1 + i / ki))
|
|
700
|
+
|
|
701
|
+
|
|
702
|
+
def _rate_prk(
|
|
703
|
+
ru5p: float,
|
|
704
|
+
atp: float,
|
|
705
|
+
pi: float,
|
|
706
|
+
pga: float,
|
|
707
|
+
rubp: float,
|
|
708
|
+
adp: float,
|
|
709
|
+
v13: float,
|
|
710
|
+
km131: float,
|
|
711
|
+
km132: float,
|
|
712
|
+
ki131: float,
|
|
713
|
+
ki132: float,
|
|
714
|
+
ki133: float,
|
|
715
|
+
ki134: float,
|
|
716
|
+
ki135: float,
|
|
717
|
+
) -> float:
|
|
718
|
+
"""Phosphoribulokinase rate: ordered bi-substrate kinetics with PGA, RuBP, Pi and ADP inhibition."""
|
|
719
|
+
return (
|
|
720
|
+
v13
|
|
721
|
+
* ru5p
|
|
722
|
+
* atp
|
|
723
|
+
/ (
|
|
724
|
+
(ru5p + km131 * (1 + pga / ki131 + rubp / ki132 + pi / ki133))
|
|
725
|
+
* (atp * (1 + adp / ki134) + km132 * (1 + adp / ki135))
|
|
726
|
+
)
|
|
727
|
+
)
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
def _rate_out(
|
|
731
|
+
s1: float,
|
|
732
|
+
n_total: float,
|
|
733
|
+
vmax_efflux: float,
|
|
734
|
+
k_efflux: float,
|
|
735
|
+
) -> float:
|
|
736
|
+
"""Individual substrate export rate normalised by the translocator occupancy N."""
|
|
737
|
+
return vmax_efflux * s1 / (n_total * k_efflux)
|
|
738
|
+
|
|
739
|
+
|
|
740
|
+
def _rate_starch(
|
|
741
|
+
g1p: float,
|
|
742
|
+
atp: float,
|
|
743
|
+
adp: float,
|
|
744
|
+
pi: float,
|
|
745
|
+
pga: float,
|
|
746
|
+
f6p: float,
|
|
747
|
+
fbp: float,
|
|
748
|
+
v_st: float,
|
|
749
|
+
kmst1: float,
|
|
750
|
+
kmst2: float,
|
|
751
|
+
ki_st: float,
|
|
752
|
+
kast1: float,
|
|
753
|
+
kast2: float,
|
|
754
|
+
kast3: float,
|
|
755
|
+
) -> float:
|
|
756
|
+
"""Starch synthesis rate via G1P+ATP with ADP inhibition and allosteric activation by PGA/F6P/FBP."""
|
|
757
|
+
return (
|
|
758
|
+
v_st
|
|
759
|
+
* g1p
|
|
760
|
+
* atp
|
|
761
|
+
/ (
|
|
762
|
+
(g1p + kmst1)
|
|
763
|
+
* (
|
|
764
|
+
(1 + adp / ki_st) * (atp + kmst2)
|
|
765
|
+
+ kmst2 * pi / (kast1 * pga + kast2 * f6p + kast3 * fbp)
|
|
766
|
+
)
|
|
767
|
+
)
|
|
768
|
+
)
|
|
769
|
+
|
|
770
|
+
|
|
771
|
+
def _rate_mda_reductase1(
|
|
772
|
+
mda: float,
|
|
773
|
+
k3: float,
|
|
774
|
+
) -> float:
|
|
775
|
+
"""MDA reductase rate: second-order disproportionation of monodehydroascorbate."""
|
|
776
|
+
return k3 * mda**2
|
|
777
|
+
|
|
778
|
+
|
|
779
|
+
def _rate_mda_reductase2(
|
|
780
|
+
nadph: float,
|
|
781
|
+
mda: float,
|
|
782
|
+
vmax: float,
|
|
783
|
+
km_nadph: float,
|
|
784
|
+
km_mda: float,
|
|
785
|
+
) -> float:
|
|
786
|
+
"""Compare Valero et al. 2016."""
|
|
787
|
+
nom = vmax * nadph * mda
|
|
788
|
+
denom = km_nadph * mda + km_mda * nadph + nadph * mda + km_nadph * km_mda
|
|
789
|
+
return nom / denom
|
|
790
|
+
|
|
791
|
+
|
|
792
|
+
def _rate_ascorbate_peroxidase(
|
|
793
|
+
a: float,
|
|
794
|
+
h: float,
|
|
795
|
+
kf1: float,
|
|
796
|
+
kr1: float,
|
|
797
|
+
kf2: float,
|
|
798
|
+
kr2: float,
|
|
799
|
+
kf3: float,
|
|
800
|
+
kf4: float,
|
|
801
|
+
kr4: float,
|
|
802
|
+
kf5: float,
|
|
803
|
+
xt: float,
|
|
804
|
+
) -> float:
|
|
805
|
+
"""Lumped reaction of ascorbate peroxidase.
|
|
806
|
+
|
|
807
|
+
the cycle stretched to a linear chain with
|
|
808
|
+
two steps producing the MDA
|
|
809
|
+
two steps releasing ASC
|
|
810
|
+
and one step producing hydrogen peroxide.
|
|
811
|
+
"""
|
|
812
|
+
nom = a * h * xt
|
|
813
|
+
denom = (
|
|
814
|
+
a * h * (1 / kf3 + 1 / kf5)
|
|
815
|
+
+ a / kf1
|
|
816
|
+
+ h / kf4
|
|
817
|
+
+ h * kr4 / (kf4 * kf5)
|
|
818
|
+
+ h / kf2
|
|
819
|
+
+ h * kr2 / (kf2 * kf3)
|
|
820
|
+
+ kr1 / (kf1 * kf2)
|
|
821
|
+
+ kr1 * kr2 / (kf1 * kf2 * kf3)
|
|
822
|
+
)
|
|
823
|
+
return nom / denom
|
|
824
|
+
|
|
825
|
+
|
|
826
|
+
def _rate_glutathion_reductase(
|
|
827
|
+
nadph: float,
|
|
828
|
+
gssg: float,
|
|
829
|
+
vmax: float,
|
|
830
|
+
km_nadph: float,
|
|
831
|
+
km_gssg: float,
|
|
832
|
+
) -> float:
|
|
833
|
+
"""Glutathione reductase rate: bi-substrate Michaelis-Menten for NADPH + GSSG."""
|
|
834
|
+
nom = vmax * nadph * gssg
|
|
835
|
+
denom = km_nadph * gssg + km_gssg * nadph + nadph * gssg + km_nadph * km_gssg
|
|
836
|
+
return nom / denom
|
|
837
|
+
|
|
838
|
+
|
|
839
|
+
def _rate_dhar(
|
|
840
|
+
dha: float,
|
|
841
|
+
gsh: float,
|
|
842
|
+
vmax: float,
|
|
843
|
+
km_dha: float,
|
|
844
|
+
km_gsh: float,
|
|
845
|
+
k: float,
|
|
846
|
+
) -> float:
|
|
847
|
+
"""Dehydroascorbate reductase rate: bi-substrate random-order Michaelis-Menten."""
|
|
848
|
+
nom = vmax * dha * gsh
|
|
849
|
+
denom = k + km_dha * gsh + km_gsh * dha + dha * gsh
|
|
850
|
+
return nom / denom
|
|
851
|
+
|
|
852
|
+
|
|
853
|
+
def _mass_action_22_rev(
|
|
854
|
+
s1: float,
|
|
855
|
+
s2: float,
|
|
856
|
+
p1: float,
|
|
857
|
+
p2: float,
|
|
858
|
+
kf: float,
|
|
859
|
+
keq: float,
|
|
860
|
+
) -> float:
|
|
861
|
+
"""Reversible bimolecular mass-action rate: kf*(s1*s2) - (kf/keq)*(p1*p2)."""
|
|
862
|
+
return kf * s1 * s2 - (kf / keq) * p1 * p2
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
def _v_ps1(
|
|
866
|
+
p700_fa: float,
|
|
867
|
+
ps2cs: float,
|
|
868
|
+
pfd: float,
|
|
869
|
+
) -> float:
|
|
870
|
+
"""PSI electron transfer rate: open PSI fraction * light absorbed by PSI antenna."""
|
|
871
|
+
return (1 - ps2cs) * pfd * p700_fa
|
|
872
|
+
|
|
873
|
+
|
|
874
|
+
def _v_mehler(
|
|
875
|
+
psi_red_acceptor: float,
|
|
876
|
+
o2ext: float,
|
|
877
|
+
k_mehler: float,
|
|
878
|
+
) -> float:
|
|
879
|
+
"""Mehler reaction rate: O2 reduction by PSI-reduced acceptor (pseudo-Mehler/flavodiiron)."""
|
|
880
|
+
return k_mehler * o2ext * psi_red_acceptor
|
|
881
|
+
|
|
882
|
+
|
|
883
|
+
def _kquencher(
|
|
884
|
+
s: float,
|
|
885
|
+
q: float,
|
|
886
|
+
k_h_qslope: float,
|
|
887
|
+
k_h0: float,
|
|
888
|
+
) -> float:
|
|
889
|
+
"""Effective quenching rate on state s: linear quencher dependence with baseline k_h0."""
|
|
890
|
+
return (k_h0 + k_h_qslope * q) * s
|
|
891
|
+
|
|
892
|
+
|
|
893
|
+
def _one_div(
|
|
894
|
+
x: float,
|
|
895
|
+
) -> float:
|
|
896
|
+
"""Identity passthrough; used as a no-op stoichiometry wrapper."""
|
|
897
|
+
return x
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
def _vb6f_2024(
|
|
901
|
+
pc: float,
|
|
902
|
+
p_cred: float,
|
|
903
|
+
pq: float,
|
|
904
|
+
p_qred: float,
|
|
905
|
+
_k_b6f: float,
|
|
906
|
+
keq: float,
|
|
907
|
+
) -> float:
|
|
908
|
+
"""2024 b6f rate using PQH2/PQ fractions instead of absolute concentrations."""
|
|
909
|
+
f = p_qred / (p_qred + pq)
|
|
910
|
+
return f * pc * _k_b6f - (1 - f) * p_cred * (_k_b6f / keq)
|
|
911
|
+
|
|
912
|
+
|
|
913
|
+
def _four_div(
|
|
914
|
+
x: float,
|
|
915
|
+
) -> float:
|
|
916
|
+
"""Return 4*x; used for the 4-proton lumenal stoichiometry of the b6f complex."""
|
|
917
|
+
return 4 * x
|
|
918
|
+
|
|
919
|
+
|
|
920
|
+
def _v_at_pactivity(
|
|
921
|
+
at_pactivity: float,
|
|
922
|
+
light: float,
|
|
923
|
+
k_act_at_pase: float,
|
|
924
|
+
k_deact_at_pase: float,
|
|
925
|
+
) -> float:
|
|
926
|
+
"""Activation of ATPsynthase by light."""
|
|
927
|
+
if light > 0.0:
|
|
928
|
+
return k_act_at_pase * (1 - at_pactivity)
|
|
929
|
+
return -k_deact_at_pase * at_pactivity
|
|
930
|
+
|
|
931
|
+
|
|
932
|
+
def _reversible_mass_action_1s_1p(
|
|
933
|
+
s: float,
|
|
934
|
+
p: float,
|
|
935
|
+
kf: float,
|
|
936
|
+
kb: float,
|
|
937
|
+
) -> float:
|
|
938
|
+
"""Reversible unimolecular mass-action rate: kf*s - kb*p."""
|
|
939
|
+
return kf * s - kb * p
|
|
940
|
+
|
|
941
|
+
|
|
942
|
+
def _v_kea(
|
|
943
|
+
klumen: float,
|
|
944
|
+
h: float,
|
|
945
|
+
kstroma: float,
|
|
946
|
+
k_kea: float,
|
|
947
|
+
hstroma: float,
|
|
948
|
+
_reg_kea: float,
|
|
949
|
+
) -> float:
|
|
950
|
+
"""KEA3 antiporter rate: regulated K+/H+ exchange clamped to zero for back-flux."""
|
|
951
|
+
v_KEA = k_kea * (h * kstroma - hstroma * klumen) * _reg_kea
|
|
952
|
+
return max(
|
|
953
|
+
v_KEA,
|
|
954
|
+
0,
|
|
955
|
+
)
|
|
956
|
+
|
|
957
|
+
|
|
958
|
+
def _v_voltage_k_channel(
|
|
959
|
+
delta_psi_ions: float,
|
|
960
|
+
klumen: float,
|
|
961
|
+
kstroma: float,
|
|
962
|
+
_dg_k: float,
|
|
963
|
+
perm_k: float,
|
|
964
|
+
k_delta_psi_treshold: float,
|
|
965
|
+
) -> float:
|
|
966
|
+
"""Voltage-gated K+ channel flux: sigmoid voltage activation times electrochemical driving force."""
|
|
967
|
+
voltage_dependence = (1 - 0.1) / (
|
|
968
|
+
1 + np.exp(-(delta_psi_ions - k_delta_psi_treshold) / 0.001)
|
|
969
|
+
)
|
|
970
|
+
return (
|
|
971
|
+
perm_k * _dg_k * voltage_dependence * (klumen / kstroma)
|
|
972
|
+
) # why divided K_total/2
|
|
973
|
+
|
|
974
|
+
|
|
975
|
+
def _v_vccn1(
|
|
976
|
+
cl_stroma: float,
|
|
977
|
+
cl_lumen: float,
|
|
978
|
+
_cl_driving_force: float,
|
|
979
|
+
delta_psi_ions: float,
|
|
980
|
+
k_vccn1: float,
|
|
981
|
+
vccn_delta_psi_treshold: float,
|
|
982
|
+
) -> float:
|
|
983
|
+
"""VCCN1 anion channel flux: voltage-gated Cl- transport driven by electrochemical force."""
|
|
984
|
+
voltage_gate = (1 - 0.1) / (
|
|
985
|
+
1 + np.exp(-(delta_psi_ions - vccn_delta_psi_treshold) / 0.001)
|
|
986
|
+
)
|
|
987
|
+
return voltage_gate * k_vccn1 * _cl_driving_force * (cl_stroma / cl_lumen)
|
|
988
|
+
|
|
989
|
+
|
|
990
|
+
def _v_cl_leak(
|
|
991
|
+
k_cl_leak: float,
|
|
992
|
+
cl_lumen: float,
|
|
993
|
+
cl_stroma: float,
|
|
994
|
+
pq: float,
|
|
995
|
+
cl_leak_pq: float,
|
|
996
|
+
total_div: float,
|
|
997
|
+
) -> float:
|
|
998
|
+
"""Passive Cl- leak flux: PQ-activated quadratic concentration-difference driving force."""
|
|
999
|
+
activation = (1 - 0.1) / (1 + np.exp(-(pq - cl_leak_pq) / 0.1))
|
|
1000
|
+
return k_cl_leak * ((cl_lumen - cl_stroma) ** 2) / (total_div) * activation
|
|
1001
|
+
|
|
1002
|
+
|
|
1003
|
+
def _v_ndh1(
|
|
1004
|
+
a1: float,
|
|
1005
|
+
fdred: float,
|
|
1006
|
+
pq: float,
|
|
1007
|
+
p_hlumen: float,
|
|
1008
|
+
k_ndh1: float,
|
|
1009
|
+
) -> float:
|
|
1010
|
+
"""NDH-1 flux: Fd-dependent PQ reduction activated by open PSI fraction and lumenal pH."""
|
|
1011
|
+
return (
|
|
1012
|
+
k_ndh1
|
|
1013
|
+
* ((fdred**2) * pq)
|
|
1014
|
+
* ((1 - 0.1) / (1 + np.exp(-((a1 - 0.02) / 0.01))))
|
|
1015
|
+
* (10 ** (p_hlumen - 6.5) / (10 ** (p_hlumen - 6.5) + 0.5))
|
|
1016
|
+
)
|
|
1017
|
+
|
|
1018
|
+
|
|
1019
|
+
def _cl_ce_bi(
|
|
1020
|
+
cl_lumen: float,
|
|
1021
|
+
cl_stroma: float,
|
|
1022
|
+
k_cl_ce: float,
|
|
1023
|
+
activation: float,
|
|
1024
|
+
) -> float: # correct
|
|
1025
|
+
"""CLCe bidirectional flux: simple concentration-gradient driven Cl- transport."""
|
|
1026
|
+
return k_cl_ce * (cl_stroma - cl_lumen) * activation
|
|
1027
|
+
|
|
1028
|
+
|
|
1029
|
+
def _div(
|
|
1030
|
+
x: float,
|
|
1031
|
+
y: float,
|
|
1032
|
+
) -> float:
|
|
1033
|
+
"""Return x / y."""
|
|
1034
|
+
return x / y
|
|
1035
|
+
|
|
1036
|
+
|
|
1037
|
+
def create_model() -> Model:
|
|
1038
|
+
"""Ebeling 2026 extended chloroplast model with ion transport, ROS, and Calvin cycle.
|
|
1039
|
+
|
|
1040
|
+
Reference: tbd
|
|
1041
|
+
"""
|
|
1042
|
+
m: Model = Model()
|
|
1043
|
+
m = m.add_variable("3PGA", initial_value=0.9167729479368978)
|
|
1044
|
+
m = m.add_variable("BPGA", initial_value=0.0003814495319659031)
|
|
1045
|
+
m = m.add_variable("GAP", initial_value=0.00580821050261484)
|
|
1046
|
+
m = m.add_variable("DHAP", initial_value=0.1277806166216142)
|
|
1047
|
+
m = m.add_variable("FBP", initial_value=0.005269452472931973)
|
|
1048
|
+
m = m.add_variable("F6P", initial_value=0.2874944558066638)
|
|
1049
|
+
m = m.add_variable("G6P", initial_value=0.6612372482712676)
|
|
1050
|
+
m = m.add_variable("G1P", initial_value=0.03835176039761378)
|
|
1051
|
+
m = m.add_variable("SBP", initial_value=0.011101373736607443)
|
|
1052
|
+
m = m.add_variable("S7P", initial_value=0.1494578301900007)
|
|
1053
|
+
m = m.add_variable("E4P", initial_value=0.00668295494870102)
|
|
1054
|
+
m = m.add_variable("X5P", initial_value=0.020988553174809618)
|
|
1055
|
+
m = m.add_variable("R5P", initial_value=0.035155825913785584)
|
|
1056
|
+
m = m.add_variable("RUBP", initial_value=0.11293260727162346)
|
|
1057
|
+
m = m.add_variable("RU5P", initial_value=0.014062330254191594)
|
|
1058
|
+
m = m.add_variable("ATP", initial_value=1.4612747767895344)
|
|
1059
|
+
m = m.add_variable("Ferredoxine (oxidised)", initial_value=3.715702384326767)
|
|
1060
|
+
m = m.add_variable("Light-harvesting complex", initial_value=0.7805901436176024)
|
|
1061
|
+
m = m.add_variable("NADPH", initial_value=0.5578718406315588)
|
|
1062
|
+
m = m.add_variable("Plastocyanine (oxidised)", initial_value=1.8083642974980014)
|
|
1063
|
+
m = m.add_variable("Plastoquinone (oxidised)", initial_value=10.251099271612473)
|
|
1064
|
+
m = m.add_variable("PsbS (de-protonated)", initial_value=0.9667381262477079)
|
|
1065
|
+
m = m.add_variable("Violaxanthin", initial_value=0.9629870646993118)
|
|
1066
|
+
m = m.add_variable("MDA", initial_value=2.0353396709300447e-07)
|
|
1067
|
+
m = m.add_variable("H2O2", initial_value=1.2034405327140102e-07)
|
|
1068
|
+
m = m.add_variable("DHA", initial_value=1.0296456279861962e-11)
|
|
1069
|
+
m = m.add_variable("GSSG", initial_value=4.99986167652437e-12)
|
|
1070
|
+
m = m.add_variable("Thioredoxin (oxidised)", initial_value=0.9334426859846461)
|
|
1071
|
+
m = m.add_variable("E_inactive", initial_value=3.6023635680406634)
|
|
1072
|
+
m = m.add_variable("P700FA", initial_value=1.506615384275408)
|
|
1073
|
+
m = m.add_variable("P700+FA-", initial_value=0.019197449388051676)
|
|
1074
|
+
m = m.add_variable("P700FA-", initial_value=0.028144516332212766)
|
|
1075
|
+
m = m.add_variable("B0", initial_value=1.9379789566530539)
|
|
1076
|
+
m = m.add_variable("B1", initial_value=9.786232812526368e-08)
|
|
1077
|
+
m = m.add_variable("B2", initial_value=0.5620208537555176)
|
|
1078
|
+
m = m.add_variable("pH_lumen", initial_value=6.8)
|
|
1079
|
+
m = m.add_variable("pH", initial_value=7.5)
|
|
1080
|
+
m = m.add_variable("ATPactivity", initial_value=0)
|
|
1081
|
+
m = m.add_variable(
|
|
1082
|
+
"delta_psi",
|
|
1083
|
+
initial_value=InitialAssignment(
|
|
1084
|
+
fn=_initial_delta_psi, args=["pH", "pH_lumen", "R", "F", "T"]
|
|
1085
|
+
),
|
|
1086
|
+
)
|
|
1087
|
+
m = m.add_variable(
|
|
1088
|
+
"K_stroma",
|
|
1089
|
+
initial_value=InitialAssignment(fn=_half, args=["K_total"]),
|
|
1090
|
+
)
|
|
1091
|
+
m = m.add_variable(
|
|
1092
|
+
"Cl_stroma",
|
|
1093
|
+
initial_value=InitialAssignment(fn=_half, args=["Cl_total"]),
|
|
1094
|
+
)
|
|
1095
|
+
m = m.add_parameter("PPFD", value=100.0)
|
|
1096
|
+
m = m.add_parameter("CO2 (dissolved)", value=0.013226)
|
|
1097
|
+
m = m.add_parameter("O2 (dissolved)_lumen", value=8.0)
|
|
1098
|
+
m = m.add_parameter("bH", value=100.0)
|
|
1099
|
+
m = m.add_parameter("F", value=96.485)
|
|
1100
|
+
m = m.add_parameter("E^0_PC", value=0.38)
|
|
1101
|
+
m = m.add_parameter("E^0_P700", value=0.48)
|
|
1102
|
+
m = m.add_parameter("E^0_FA", value=-0.55)
|
|
1103
|
+
m = m.add_parameter("E^0_Fd", value=-0.43)
|
|
1104
|
+
m = m.add_parameter("E^0_NADP", value=-0.113)
|
|
1105
|
+
m = m.add_parameter("convf", value=0.032)
|
|
1106
|
+
m = m.add_parameter("R", value=0.0083)
|
|
1107
|
+
m = m.add_parameter("T", value=298.0)
|
|
1108
|
+
m = m.add_parameter("Carotenoids_tot", value=1.0)
|
|
1109
|
+
m = m.add_parameter("Fd*", value=5.0)
|
|
1110
|
+
m = m.add_parameter("PC_tot", value=4.0)
|
|
1111
|
+
m = m.add_parameter("PSBS_tot", value=1.0)
|
|
1112
|
+
m = m.add_parameter("LHC_tot", value=1.0)
|
|
1113
|
+
m = m.add_parameter("gamma0", value=0.06260060801266355)
|
|
1114
|
+
m = m.add_parameter("gamma1", value=0.4053583123566203)
|
|
1115
|
+
m = m.add_parameter("gamma2", value=0.7040758738825375)
|
|
1116
|
+
m = m.add_parameter("gamma3", value=0.07834807781016208)
|
|
1117
|
+
m = m.add_parameter("kZSat", value=0.12)
|
|
1118
|
+
m = m.add_parameter("E^0_QA", value=-0.14)
|
|
1119
|
+
m = m.add_parameter("E^0_PQ", value=0.354)
|
|
1120
|
+
m = m.add_parameter("PQ_tot", value=17.5)
|
|
1121
|
+
m = m.add_parameter("staticAntII", value=0.1)
|
|
1122
|
+
m = m.add_parameter("staticAntI", value=0.37)
|
|
1123
|
+
m = m.add_parameter("Thioredoxin_tot", value=1.0)
|
|
1124
|
+
m = m.add_parameter("E_total", value=6.0)
|
|
1125
|
+
m = m.add_parameter("NADP*", value=0.8)
|
|
1126
|
+
m = m.add_parameter("A*P", value=2.55)
|
|
1127
|
+
m = m.add_parameter("Pi_tot", value=17.05)
|
|
1128
|
+
m = m.add_parameter("kf_ferredoxin_thioredoxin_reductase", value=0.8)
|
|
1129
|
+
m = m.add_parameter("kf_tr_activation", value=1.0)
|
|
1130
|
+
m = m.add_parameter("kf_tr_inactivation", value=0.1)
|
|
1131
|
+
m = m.add_parameter("ASC_tot*", value=10)
|
|
1132
|
+
m = m.add_parameter("Glutathion_tot", value=10.0)
|
|
1133
|
+
m = m.add_parameter("kf_atp_synthase", value=20.0)
|
|
1134
|
+
m = m.add_parameter("HPR", value=4.666666666666667)
|
|
1135
|
+
m = m.add_parameter("Pi_mol", value=0.01)
|
|
1136
|
+
m = m.add_parameter("DeltaG0_ATP", value=30.6)
|
|
1137
|
+
m = m.add_parameter("kh_lhc_protonation", value=10)
|
|
1138
|
+
m = m.add_parameter("kf_lhc_protonation", value=0.15837051384170664)
|
|
1139
|
+
m = m.add_parameter("ksat_lhc_protonation", value=6.2539066418842255)
|
|
1140
|
+
m = m.add_parameter("kf_lhc_deprotonation", value=0.015892570403695704)
|
|
1141
|
+
m = m.add_parameter("kf_cyclic_electron_flow", value=1.0)
|
|
1142
|
+
m = m.add_parameter("kf_violaxanthin_deepoxidase", value=0.0006091912188339879)
|
|
1143
|
+
m = m.add_parameter("kh_violaxanthin_deepoxidase", value=4)
|
|
1144
|
+
m = m.add_parameter("ksat_violaxanthin_deepoxidase", value=6.193595407850397)
|
|
1145
|
+
m = m.add_parameter("kf_zeaxanthin_epoxidase", value=0.000106261953934132)
|
|
1146
|
+
m = m.add_parameter("km_fnr_Ferredoxine (reduced)", value=1.56)
|
|
1147
|
+
m = m.add_parameter("km_fnr_NADP", value=0.22)
|
|
1148
|
+
m = m.add_parameter("E0_fnr", value=3.0)
|
|
1149
|
+
m = m.add_parameter("kcat_fnr", value=500.0)
|
|
1150
|
+
m = m.add_parameter("kf_ndh", value=0.002)
|
|
1151
|
+
m = m.add_parameter("PSII_total", value=2.5)
|
|
1152
|
+
m = m.add_parameter("PSI_total", value=2.5)
|
|
1153
|
+
m = m.add_parameter("kH0", value=500000000.0)
|
|
1154
|
+
m = m.add_parameter("kPQred", value=250.0)
|
|
1155
|
+
m = m.add_parameter("kPCox", value=2500.0)
|
|
1156
|
+
m = m.add_parameter("kFdred", value=250000.0)
|
|
1157
|
+
m = m.add_parameter("k2", value=5000000000.0)
|
|
1158
|
+
m = m.add_parameter("kH", value=5000000000.0)
|
|
1159
|
+
m = m.add_parameter("kF", value=625000000.0)
|
|
1160
|
+
m = m.add_parameter("kMehler", value=1.0)
|
|
1161
|
+
m = m.add_parameter("kf_proton_leak", value=10.0)
|
|
1162
|
+
m = m.add_parameter("kPTOX", value=0.01)
|
|
1163
|
+
m = m.add_parameter("kStt7", value=0.0035)
|
|
1164
|
+
m = m.add_parameter("km_lhc_state_transition_12", value=0.2)
|
|
1165
|
+
m = m.add_parameter("n_ST", value=2.0)
|
|
1166
|
+
m = m.add_parameter("kPph1", value=0.0013)
|
|
1167
|
+
m = m.add_parameter("E0_rubisco", value=1.0)
|
|
1168
|
+
m = m.add_parameter("kcat_rubisco_carboxylase", value=2.72)
|
|
1169
|
+
m = m.add_parameter("km_rubisco_carboxylase_RUBP", value=0.02)
|
|
1170
|
+
m = m.add_parameter("km_rubisco_carboxylase_CO2 (dissolved)", value=0.0107)
|
|
1171
|
+
m = m.add_parameter("ki_rubisco_carboxylase_3PGA", value=0.04)
|
|
1172
|
+
m = m.add_parameter("ki_rubisco_carboxylase_FBP", value=0.04)
|
|
1173
|
+
m = m.add_parameter("ki_rubisco_carboxylase_SBP", value=0.075)
|
|
1174
|
+
m = m.add_parameter("ki_rubisco_carboxylase_Orthophosphate", value=0.9)
|
|
1175
|
+
m = m.add_parameter("ki_rubisco_carboxylase_NADPH", value=0.07)
|
|
1176
|
+
m = m.add_parameter("kre_phosphoglycerate_kinase", value=800000000.0)
|
|
1177
|
+
m = m.add_parameter("keq_phosphoglycerate_kinase", value=0.00031)
|
|
1178
|
+
m = m.add_parameter("kre_gadph", value=800000000.0)
|
|
1179
|
+
m = m.add_parameter("keq_gadph", value=16000000.0)
|
|
1180
|
+
m = m.add_parameter("kre_triose_phosphate_isomerase", value=800000000.0)
|
|
1181
|
+
m = m.add_parameter("keq_triose_phosphate_isomerase", value=22.0)
|
|
1182
|
+
m = m.add_parameter("kre_aldolase_dhap_gap", value=800000000.0)
|
|
1183
|
+
m = m.add_parameter("keq_aldolase_dhap_gap", value=7.1)
|
|
1184
|
+
m = m.add_parameter("kre_aldolase_dhap_e4p", value=800000000.0)
|
|
1185
|
+
m = m.add_parameter("keq_aldolase_dhap_e4p", value=13.0)
|
|
1186
|
+
m = m.add_parameter("E0_fbpase", value=1.0)
|
|
1187
|
+
m = m.add_parameter("kcat_fbpase", value=1.6)
|
|
1188
|
+
m = m.add_parameter("km_fbpase_s", value=0.03)
|
|
1189
|
+
m = m.add_parameter("ki_fbpase_F6P", value=0.7)
|
|
1190
|
+
m = m.add_parameter("ki_fbpase_Orthophosphate", value=12.0)
|
|
1191
|
+
m = m.add_parameter("kre_transketolase_gap_f6p", value=800000000.0)
|
|
1192
|
+
m = m.add_parameter("keq_transketolase_gap_f6p", value=0.084)
|
|
1193
|
+
m = m.add_parameter("kre_transketolase_gap_s7p", value=800000000.0)
|
|
1194
|
+
m = m.add_parameter("keq_transketolase_gap_s7p", value=0.85)
|
|
1195
|
+
m = m.add_parameter("E0_SBPase", value=1.0)
|
|
1196
|
+
m = m.add_parameter("kcat_SBPase", value=0.32)
|
|
1197
|
+
m = m.add_parameter("km_SBPase_s", value=0.013)
|
|
1198
|
+
m = m.add_parameter("ki_SBPase_Orthophosphate", value=12.0)
|
|
1199
|
+
m = m.add_parameter("kre_ribose_phosphate_isomerase", value=800000000.0)
|
|
1200
|
+
m = m.add_parameter("keq_ribose_phosphate_isomerase", value=0.4)
|
|
1201
|
+
m = m.add_parameter("kre_ribulose_phosphate_epimerase", value=800000000.0)
|
|
1202
|
+
m = m.add_parameter("keq_ribulose_phosphate_epimerase", value=0.67)
|
|
1203
|
+
m = m.add_parameter("E0_phosphoribulokinase", value=1.0)
|
|
1204
|
+
m = m.add_parameter("kcat_phosphoribulokinase", value=7.9992)
|
|
1205
|
+
m = m.add_parameter("km_phosphoribulokinase_RU5P", value=0.05)
|
|
1206
|
+
m = m.add_parameter("km_phosphoribulokinase_ATP", value=0.05)
|
|
1207
|
+
m = m.add_parameter("ki_phosphoribulokinase_3PGA", value=2.0)
|
|
1208
|
+
m = m.add_parameter("ki_phosphoribulokinase_RUBP", value=0.7)
|
|
1209
|
+
m = m.add_parameter("ki_phosphoribulokinase_Orthophosphate", value=4.0)
|
|
1210
|
+
m = m.add_parameter("ki_phosphoribulokinase_4", value=2.5)
|
|
1211
|
+
m = m.add_parameter("ki_phosphoribulokinase_5", value=0.4)
|
|
1212
|
+
m = m.add_parameter("kre_g6pi", value=800000000.0)
|
|
1213
|
+
m = m.add_parameter("keq_g6pi", value=2.3)
|
|
1214
|
+
m = m.add_parameter("kre_phosphoglucomutase", value=800000000.0)
|
|
1215
|
+
m = m.add_parameter("keq_phosphoglucomutase", value=0.058)
|
|
1216
|
+
m = m.add_parameter("Orthophosphate (external)", value=0.5)
|
|
1217
|
+
m = m.add_parameter("km_ex_pga", value=0.25)
|
|
1218
|
+
m = m.add_parameter("km_ex_gap", value=0.075)
|
|
1219
|
+
m = m.add_parameter("km_ex_dhap", value=0.077)
|
|
1220
|
+
m = m.add_parameter("km_N_translocator_Orthophosphate (external)", value=0.74)
|
|
1221
|
+
m = m.add_parameter("km_N_translocator_Orthophosphate", value=0.63)
|
|
1222
|
+
m = m.add_parameter("kcat_N_translocator", value=2.0)
|
|
1223
|
+
m = m.add_parameter("E0_N_translocator", value=1.0)
|
|
1224
|
+
m = m.add_parameter("E0_ex_g1p", value=1.0)
|
|
1225
|
+
m = m.add_parameter("km_ex_g1p_G1P", value=0.08)
|
|
1226
|
+
m = m.add_parameter("km_ex_g1p_ATP", value=0.08)
|
|
1227
|
+
m = m.add_parameter("ki_ex_g1p", value=10.0)
|
|
1228
|
+
m = m.add_parameter("ki_ex_g1p_3PGA", value=0.1)
|
|
1229
|
+
m = m.add_parameter("ki_ex_g1p_F6P", value=0.02)
|
|
1230
|
+
m = m.add_parameter("ki_ex_g1p_FBP", value=0.02)
|
|
1231
|
+
m = m.add_parameter("kcat_ex_g1p", value=0.32)
|
|
1232
|
+
m = m.add_parameter("kf_mda_reductase_1", value=500.0)
|
|
1233
|
+
m = m.add_parameter("E0_mda_reductase_2", value=0.002)
|
|
1234
|
+
m = m.add_parameter("kcat_mda_reductase_2", value=300.0)
|
|
1235
|
+
m = m.add_parameter("km_mda_reductase_2_NADPH", value=0.023)
|
|
1236
|
+
m = m.add_parameter("km_mda_reductase_2_MDA", value=0.0014)
|
|
1237
|
+
m = m.add_parameter("kf1", value=10000.0)
|
|
1238
|
+
m = m.add_parameter("kr1", value=220.0)
|
|
1239
|
+
m = m.add_parameter("kf2", value=10000.0)
|
|
1240
|
+
m = m.add_parameter("kr2", value=4000.0)
|
|
1241
|
+
m = m.add_parameter("kf3", value=2510.0)
|
|
1242
|
+
m = m.add_parameter("kf4", value=10000.0)
|
|
1243
|
+
m = m.add_parameter("kr4", value=4000.0)
|
|
1244
|
+
m = m.add_parameter("kf5", value=2510.0)
|
|
1245
|
+
m = m.add_parameter("XT", value=0.07)
|
|
1246
|
+
m = m.add_parameter("E0_glutathion_reductase", value=0.0014)
|
|
1247
|
+
m = m.add_parameter("kcat_glutathion_reductase", value=595)
|
|
1248
|
+
m = m.add_parameter("km_glutathion_reductase_NADPH", value=0.003)
|
|
1249
|
+
m = m.add_parameter("km_glutathion_reductase_GSSG", value=0.2)
|
|
1250
|
+
m = m.add_parameter("km_dehydroascorbate_reductase_DHA", value=0.07)
|
|
1251
|
+
m = m.add_parameter("km_dehydroascorbate_reductase_GSH", value=2.5)
|
|
1252
|
+
m = m.add_parameter("K", value=0.5)
|
|
1253
|
+
m = m.add_parameter("E0_dehydroascorbate_reductase", value=0.0017)
|
|
1254
|
+
m = m.add_parameter("kcat_dehydroascorbate_reductase", value=142)
|
|
1255
|
+
m = m.add_parameter("kf_ex_atp", value=0.5)
|
|
1256
|
+
m = m.add_parameter("kf_ex_nadph", value=0.5)
|
|
1257
|
+
m = m.add_parameter("kH_Qslope", value=30000000000.0)
|
|
1258
|
+
m = m.add_parameter("b6f_content", value=1)
|
|
1259
|
+
m = m.add_parameter("max_b6f", value=500)
|
|
1260
|
+
m = m.add_parameter("pKreg", value=7)
|
|
1261
|
+
m = m.add_parameter("stroma_buffering", value=400)
|
|
1262
|
+
m = m.add_parameter("kActATPase", value=0.001)
|
|
1263
|
+
m = m.add_parameter("kDeactATPase", value=0.002)
|
|
1264
|
+
m = m.add_parameter("k_ATPsynthase", value=20)
|
|
1265
|
+
m = m.add_parameter("b", value=1.8688304401249531)
|
|
1266
|
+
m = m.add_parameter("pK0E", value=5.960025833706074)
|
|
1267
|
+
m = m.add_parameter("k_import_ATP", value=0.5)
|
|
1268
|
+
m = m.add_parameter("k_import_NADPH", value=0.5)
|
|
1269
|
+
m = m.add_parameter("volts_per_charge", value=0.000769481926574965)
|
|
1270
|
+
m = m.add_parameter("ClCe_PQ", value=15.87880046767565)
|
|
1271
|
+
m = m.add_parameter("Cl_leak_PQ", value=14.92901445507139)
|
|
1272
|
+
m = m.add_parameter("KEA3_ATP_treshold", value=0.26274793681796166)
|
|
1273
|
+
m = m.add_parameter("KEA3_pH_reg", value=7.69)
|
|
1274
|
+
m = m.add_parameter("K_delta_psi_treshold", value=0.08146807307624158)
|
|
1275
|
+
m = m.add_parameter("VCCN_delta_psi_treshold", value=0.08000900979332677)
|
|
1276
|
+
m = m.add_parameter("k_Cl_leak", value=25)
|
|
1277
|
+
m = m.add_parameter("k_NDH1", value=7.447430768265866)
|
|
1278
|
+
m = m.add_parameter("k_KEA", value=90)
|
|
1279
|
+
m = m.add_parameter("perm_K", value=1.6113135416150155)
|
|
1280
|
+
m = m.add_parameter("k_VCCN1", value=0.5)
|
|
1281
|
+
m = m.add_parameter("k_ClCe", value=0.5)
|
|
1282
|
+
m = m.add_parameter("K_total", value=60)
|
|
1283
|
+
m = m.add_parameter("Cl_total", value=50)
|
|
1284
|
+
m = m.add_parameter("ClCe_ATP_threshold", value=0.2)
|
|
1285
|
+
m = m.add_derived(
|
|
1286
|
+
"RT",
|
|
1287
|
+
fn=_mass_action_1s,
|
|
1288
|
+
args=["R", "T"],
|
|
1289
|
+
)
|
|
1290
|
+
m = m.add_derived(
|
|
1291
|
+
"dG_pH",
|
|
1292
|
+
fn=_dg_ph,
|
|
1293
|
+
args=["R", "T"],
|
|
1294
|
+
)
|
|
1295
|
+
m = m.add_derived(
|
|
1296
|
+
"Zeaxanthin",
|
|
1297
|
+
fn=_moiety_1,
|
|
1298
|
+
args=["Violaxanthin", "Carotenoids_tot"],
|
|
1299
|
+
)
|
|
1300
|
+
m = m.add_derived(
|
|
1301
|
+
"Ferredoxine (reduced)",
|
|
1302
|
+
fn=_moiety_1,
|
|
1303
|
+
args=["Ferredoxine (oxidised)", "Fd*"],
|
|
1304
|
+
)
|
|
1305
|
+
m = m.add_derived(
|
|
1306
|
+
"Plastocyanine (reduced)",
|
|
1307
|
+
fn=_moiety_1,
|
|
1308
|
+
args=["Plastocyanine (oxidised)", "PC_tot"],
|
|
1309
|
+
)
|
|
1310
|
+
m = m.add_derived(
|
|
1311
|
+
"PsbS (protonated)",
|
|
1312
|
+
fn=_moiety_1,
|
|
1313
|
+
args=["PsbS (de-protonated)", "PSBS_tot"],
|
|
1314
|
+
)
|
|
1315
|
+
m = m.add_derived(
|
|
1316
|
+
"Light-harvesting complex (protonated)",
|
|
1317
|
+
fn=_moiety_1,
|
|
1318
|
+
args=["Light-harvesting complex", "LHC_tot"],
|
|
1319
|
+
)
|
|
1320
|
+
m = m.add_derived(
|
|
1321
|
+
"Q",
|
|
1322
|
+
fn=_quencher,
|
|
1323
|
+
args=[
|
|
1324
|
+
"PsbS (de-protonated)",
|
|
1325
|
+
"Violaxanthin",
|
|
1326
|
+
"PsbS (protonated)",
|
|
1327
|
+
"Zeaxanthin",
|
|
1328
|
+
"gamma0",
|
|
1329
|
+
"gamma1",
|
|
1330
|
+
"gamma2",
|
|
1331
|
+
"gamma3",
|
|
1332
|
+
"kZSat",
|
|
1333
|
+
],
|
|
1334
|
+
)
|
|
1335
|
+
m = m.add_derived(
|
|
1336
|
+
"keq_Plastoquinone (reduced)",
|
|
1337
|
+
fn=_keq_pq_red,
|
|
1338
|
+
args=["E^0_QA", "F", "E^0_PQ", "pH", "dG_pH", "RT"],
|
|
1339
|
+
)
|
|
1340
|
+
m = m.add_derived(
|
|
1341
|
+
"Plastoquinone (reduced)",
|
|
1342
|
+
fn=_moiety_1,
|
|
1343
|
+
args=["Plastoquinone (oxidised)", "PQ_tot"],
|
|
1344
|
+
)
|
|
1345
|
+
m = m.add_derived(
|
|
1346
|
+
"PSII_cross_section",
|
|
1347
|
+
fn=_ps2_crosssection,
|
|
1348
|
+
args=["Light-harvesting complex", "staticAntII", "staticAntI"],
|
|
1349
|
+
)
|
|
1350
|
+
m = m.add_derived(
|
|
1351
|
+
"Thioredoxin (reduced)",
|
|
1352
|
+
fn=_moiety_1,
|
|
1353
|
+
args=["Thioredoxin (oxidised)", "Thioredoxin_tot"],
|
|
1354
|
+
)
|
|
1355
|
+
m = m.add_derived(
|
|
1356
|
+
"E_active",
|
|
1357
|
+
fn=_moiety_1,
|
|
1358
|
+
args=["E_inactive", "E_total"],
|
|
1359
|
+
)
|
|
1360
|
+
m = m.add_derived(
|
|
1361
|
+
"NADP",
|
|
1362
|
+
fn=_moiety_1,
|
|
1363
|
+
args=["NADPH", "NADP*"],
|
|
1364
|
+
)
|
|
1365
|
+
m = m.add_derived(
|
|
1366
|
+
"ADP",
|
|
1367
|
+
fn=_moiety_1,
|
|
1368
|
+
args=["ATP", "A*P"],
|
|
1369
|
+
)
|
|
1370
|
+
m = m.add_derived(
|
|
1371
|
+
"Orthophosphate",
|
|
1372
|
+
fn=_pi_cbb,
|
|
1373
|
+
args=[
|
|
1374
|
+
"Pi_tot",
|
|
1375
|
+
"3PGA",
|
|
1376
|
+
"BPGA",
|
|
1377
|
+
"GAP",
|
|
1378
|
+
"DHAP",
|
|
1379
|
+
"FBP",
|
|
1380
|
+
"F6P",
|
|
1381
|
+
"G6P",
|
|
1382
|
+
"G1P",
|
|
1383
|
+
"SBP",
|
|
1384
|
+
"S7P",
|
|
1385
|
+
"E4P",
|
|
1386
|
+
"X5P",
|
|
1387
|
+
"R5P",
|
|
1388
|
+
"RUBP",
|
|
1389
|
+
"RU5P",
|
|
1390
|
+
"ATP",
|
|
1391
|
+
],
|
|
1392
|
+
)
|
|
1393
|
+
m = m.add_derived(
|
|
1394
|
+
"ascorbate",
|
|
1395
|
+
fn=_moiety_2,
|
|
1396
|
+
args=["MDA", "DHA", "ASC_tot*"],
|
|
1397
|
+
)
|
|
1398
|
+
m = m.add_derived(
|
|
1399
|
+
"GSH",
|
|
1400
|
+
fn=_glutathion_moiety,
|
|
1401
|
+
args=["GSSG", "Glutathion_tot"],
|
|
1402
|
+
)
|
|
1403
|
+
m = m.add_derived(
|
|
1404
|
+
"keq_atp_synthase",
|
|
1405
|
+
fn=_keq_atp,
|
|
1406
|
+
args=["pH_lumen", "DeltaG0_ATP", "dG_pH", "HPR", "pH", "Pi_mol", "RT"],
|
|
1407
|
+
)
|
|
1408
|
+
m = m.add_derived(
|
|
1409
|
+
"keq_fnr",
|
|
1410
|
+
fn=_keq_fnr,
|
|
1411
|
+
args=["E^0_Fd", "F", "E^0_NADP", "pH", "dG_pH", "RT"],
|
|
1412
|
+
)
|
|
1413
|
+
m = m.add_derived(
|
|
1414
|
+
"vmax_fnr",
|
|
1415
|
+
fn=_mass_action_1s,
|
|
1416
|
+
args=["kcat_fnr", "E0_fnr"],
|
|
1417
|
+
)
|
|
1418
|
+
m = m.add_derived(
|
|
1419
|
+
"E0_rubisco_active",
|
|
1420
|
+
fn=_mul,
|
|
1421
|
+
args=["E0_rubisco", "E_active"],
|
|
1422
|
+
)
|
|
1423
|
+
m = m.add_derived(
|
|
1424
|
+
"vmax_rubisco_carboxylase",
|
|
1425
|
+
fn=_mass_action_1s,
|
|
1426
|
+
args=["kcat_rubisco_carboxylase", "E0_rubisco_active"],
|
|
1427
|
+
)
|
|
1428
|
+
m = m.add_derived(
|
|
1429
|
+
"E0_fbpase_active",
|
|
1430
|
+
fn=_mul,
|
|
1431
|
+
args=["E0_fbpase", "E_active"],
|
|
1432
|
+
)
|
|
1433
|
+
m = m.add_derived(
|
|
1434
|
+
"vmax_fbpase",
|
|
1435
|
+
fn=_mass_action_1s,
|
|
1436
|
+
args=["kcat_fbpase", "E0_fbpase_active"],
|
|
1437
|
+
)
|
|
1438
|
+
m = m.add_derived(
|
|
1439
|
+
"E0_SBPase_active",
|
|
1440
|
+
fn=_mul,
|
|
1441
|
+
args=["E0_SBPase", "E_active"],
|
|
1442
|
+
)
|
|
1443
|
+
m = m.add_derived(
|
|
1444
|
+
"vmax_SBPase",
|
|
1445
|
+
fn=_mass_action_1s,
|
|
1446
|
+
args=["kcat_SBPase", "E0_SBPase_active"],
|
|
1447
|
+
)
|
|
1448
|
+
m = m.add_derived(
|
|
1449
|
+
"E0_phosphoribulokinase_active",
|
|
1450
|
+
fn=_mul,
|
|
1451
|
+
args=["E0_phosphoribulokinase", "E_active"],
|
|
1452
|
+
)
|
|
1453
|
+
m = m.add_derived(
|
|
1454
|
+
"vmax_phosphoribulokinase",
|
|
1455
|
+
fn=_mass_action_1s,
|
|
1456
|
+
args=["kcat_phosphoribulokinase", "E0_phosphoribulokinase_active"],
|
|
1457
|
+
)
|
|
1458
|
+
m = m.add_derived(
|
|
1459
|
+
"vmax_ex_pga",
|
|
1460
|
+
fn=_mass_action_1s,
|
|
1461
|
+
args=["kcat_N_translocator", "E0_N_translocator"],
|
|
1462
|
+
)
|
|
1463
|
+
m = m.add_derived(
|
|
1464
|
+
"N_translocator",
|
|
1465
|
+
fn=_rate_translocator,
|
|
1466
|
+
args=[
|
|
1467
|
+
"Orthophosphate",
|
|
1468
|
+
"3PGA",
|
|
1469
|
+
"GAP",
|
|
1470
|
+
"DHAP",
|
|
1471
|
+
"km_N_translocator_Orthophosphate (external)",
|
|
1472
|
+
"Orthophosphate (external)",
|
|
1473
|
+
"km_N_translocator_Orthophosphate",
|
|
1474
|
+
"km_ex_pga",
|
|
1475
|
+
"km_ex_gap",
|
|
1476
|
+
"km_ex_dhap",
|
|
1477
|
+
],
|
|
1478
|
+
)
|
|
1479
|
+
m = m.add_derived(
|
|
1480
|
+
"E0_ex_g1p_active",
|
|
1481
|
+
fn=_mul,
|
|
1482
|
+
args=["E0_ex_g1p", "E_active"],
|
|
1483
|
+
)
|
|
1484
|
+
m = m.add_derived(
|
|
1485
|
+
"vmax_ex_g1p",
|
|
1486
|
+
fn=_mass_action_1s,
|
|
1487
|
+
args=["kcat_ex_g1p", "E0_ex_g1p_active"],
|
|
1488
|
+
)
|
|
1489
|
+
m = m.add_derived(
|
|
1490
|
+
"vmax_mda_reductase_2",
|
|
1491
|
+
fn=_mass_action_1s,
|
|
1492
|
+
args=["kcat_mda_reductase_2", "E0_mda_reductase_2"],
|
|
1493
|
+
)
|
|
1494
|
+
m = m.add_derived(
|
|
1495
|
+
"vmax_glutathion_reductase",
|
|
1496
|
+
fn=_mass_action_1s,
|
|
1497
|
+
args=["kcat_glutathion_reductase", "E0_glutathion_reductase"],
|
|
1498
|
+
)
|
|
1499
|
+
m = m.add_derived(
|
|
1500
|
+
"vmax_dehydroascorbate_reductase",
|
|
1501
|
+
fn=_mass_action_1s,
|
|
1502
|
+
args=["kcat_dehydroascorbate_reductase", "E0_dehydroascorbate_reductase"],
|
|
1503
|
+
)
|
|
1504
|
+
m = m.add_derived(
|
|
1505
|
+
"keq_PCP700",
|
|
1506
|
+
fn=_keq_pcp700,
|
|
1507
|
+
args=["E^0_PC", "F", "E^0_P700", "RT"],
|
|
1508
|
+
)
|
|
1509
|
+
m = m.add_derived(
|
|
1510
|
+
"keq_FAFd",
|
|
1511
|
+
fn=_keq_faf_d,
|
|
1512
|
+
args=["E^0_FA", "F", "E^0_Fd", "RT"],
|
|
1513
|
+
)
|
|
1514
|
+
m = m.add_derived(
|
|
1515
|
+
"B3",
|
|
1516
|
+
fn=_moiety_3,
|
|
1517
|
+
args=["B0", "B1", "B2", "PSII_total"],
|
|
1518
|
+
)
|
|
1519
|
+
m = m.add_derived(
|
|
1520
|
+
"P700+FA",
|
|
1521
|
+
fn=_moiety_3,
|
|
1522
|
+
args=["P700FA-", "P700FA", "P700+FA-", "PSI_total"],
|
|
1523
|
+
)
|
|
1524
|
+
m = m.add_derived(
|
|
1525
|
+
"rel_P700+FA",
|
|
1526
|
+
fn=_normalize_concentration,
|
|
1527
|
+
args=["P700+FA", "PSI_total"],
|
|
1528
|
+
)
|
|
1529
|
+
m = m.add_derived(
|
|
1530
|
+
"rel_P700FA",
|
|
1531
|
+
fn=_normalize_concentration,
|
|
1532
|
+
args=["P700FA", "PSI_total"],
|
|
1533
|
+
)
|
|
1534
|
+
m = m.add_derived(
|
|
1535
|
+
"rel_P700FA-",
|
|
1536
|
+
fn=_normalize_concentration,
|
|
1537
|
+
args=["P700FA-", "PSI_total"],
|
|
1538
|
+
)
|
|
1539
|
+
m = m.add_derived(
|
|
1540
|
+
"rel_P700+FA-",
|
|
1541
|
+
fn=_normalize_concentration,
|
|
1542
|
+
args=["P700+FA-", "PSI_total"],
|
|
1543
|
+
)
|
|
1544
|
+
m = m.add_derived(
|
|
1545
|
+
"rel_P700",
|
|
1546
|
+
fn=_normalize_2_concentrations,
|
|
1547
|
+
args=["P700+FA-", "P700+FA", "PSI_total"],
|
|
1548
|
+
)
|
|
1549
|
+
m = m.add_derived(
|
|
1550
|
+
"rel_P700+",
|
|
1551
|
+
fn=_normalize_2_concentrations,
|
|
1552
|
+
args=["P700+FA-", "P700+FA", "PSI_total"],
|
|
1553
|
+
)
|
|
1554
|
+
m = m.add_derived(
|
|
1555
|
+
"rel_B0",
|
|
1556
|
+
fn=_normalize_concentration,
|
|
1557
|
+
args=["B0", "PSII_total"],
|
|
1558
|
+
)
|
|
1559
|
+
m = m.add_derived(
|
|
1560
|
+
"rel_B1",
|
|
1561
|
+
fn=_normalize_concentration,
|
|
1562
|
+
args=["B1", "PSII_total"],
|
|
1563
|
+
)
|
|
1564
|
+
m = m.add_derived(
|
|
1565
|
+
"rel_B2",
|
|
1566
|
+
fn=_normalize_concentration,
|
|
1567
|
+
args=["B2", "PSII_total"],
|
|
1568
|
+
)
|
|
1569
|
+
m = m.add_derived(
|
|
1570
|
+
"rel_B3",
|
|
1571
|
+
fn=_normalize_concentration,
|
|
1572
|
+
args=["B3", "PSII_total"],
|
|
1573
|
+
)
|
|
1574
|
+
m = m.add_derived(
|
|
1575
|
+
"Fluo",
|
|
1576
|
+
fn=_fluo,
|
|
1577
|
+
args=["Q", "B0", "B2", "PSII_cross_section", "k2", "kF", "kH_Qslope", "kH0"],
|
|
1578
|
+
)
|
|
1579
|
+
m = m.add_derived(
|
|
1580
|
+
"keq_b6f_dyn",
|
|
1581
|
+
fn=_k_b6f,
|
|
1582
|
+
args=["pH_lumen", "pKreg", "b6f_content", "max_b6f"],
|
|
1583
|
+
)
|
|
1584
|
+
m = m.add_derived(
|
|
1585
|
+
"protons_lumen",
|
|
1586
|
+
fn=_protons_lumen,
|
|
1587
|
+
args=["pH_lumen"],
|
|
1588
|
+
)
|
|
1589
|
+
m = m.add_derived(
|
|
1590
|
+
"protons",
|
|
1591
|
+
fn=_protons_stroma_ebeling,
|
|
1592
|
+
args=["pH"],
|
|
1593
|
+
)
|
|
1594
|
+
m = m.add_derived(
|
|
1595
|
+
"ATP_pmf_activity",
|
|
1596
|
+
fn=_atp_pmf_activity2,
|
|
1597
|
+
args=["pK0E", "b", "pH_lumen", "pH", "F", "RT", "delta_psi"],
|
|
1598
|
+
)
|
|
1599
|
+
m = m.add_derived(
|
|
1600
|
+
"deltapH",
|
|
1601
|
+
fn=_deltap_h,
|
|
1602
|
+
args=["pH", "pH_lumen", "dG_pH"],
|
|
1603
|
+
)
|
|
1604
|
+
m = m.add_derived(
|
|
1605
|
+
"deltapH_in_volts",
|
|
1606
|
+
fn=_initial_delta_psi,
|
|
1607
|
+
args=["pH", "pH_lumen", "R", "F", "T"],
|
|
1608
|
+
)
|
|
1609
|
+
m = m.add_derived(
|
|
1610
|
+
"pmf",
|
|
1611
|
+
fn=_pmf,
|
|
1612
|
+
args=["deltapH", "delta_psi", "F"],
|
|
1613
|
+
)
|
|
1614
|
+
m = m.add_derived(
|
|
1615
|
+
"pmf_in_V",
|
|
1616
|
+
fn=_pmf_in_v,
|
|
1617
|
+
args=["delta_psi", "pH_lumen", "pH", "RT", "F"],
|
|
1618
|
+
)
|
|
1619
|
+
m = m.add_derived(
|
|
1620
|
+
"keq_b6f",
|
|
1621
|
+
fn=_keq_cytb6f,
|
|
1622
|
+
args=["pH_lumen", "pmf_in_V", "F", "E^0_PQ", "E^0_PC", "RT", "dG_pH"],
|
|
1623
|
+
)
|
|
1624
|
+
m = m.add_derived(
|
|
1625
|
+
"K_lumen",
|
|
1626
|
+
fn=_moiety_1,
|
|
1627
|
+
args=["K_stroma", "K_total"],
|
|
1628
|
+
)
|
|
1629
|
+
m = m.add_derived(
|
|
1630
|
+
"Cl_lumen",
|
|
1631
|
+
fn=_moiety_1,
|
|
1632
|
+
args=["Cl_stroma", "Cl_total"],
|
|
1633
|
+
)
|
|
1634
|
+
m = m.add_derived(
|
|
1635
|
+
"total_Cl_2",
|
|
1636
|
+
fn=_squared,
|
|
1637
|
+
args=["Cl_total"],
|
|
1638
|
+
)
|
|
1639
|
+
m = m.add_derived(
|
|
1640
|
+
"total_K_2",
|
|
1641
|
+
fn=_squared,
|
|
1642
|
+
args=["K_total"],
|
|
1643
|
+
)
|
|
1644
|
+
m = m.add_derived(
|
|
1645
|
+
"KEA3_reg",
|
|
1646
|
+
fn=_reg_kea,
|
|
1647
|
+
args=["pH", "ATP", "KEA3_pH_reg", "KEA3_ATP_treshold"],
|
|
1648
|
+
)
|
|
1649
|
+
m = m.add_derived(
|
|
1650
|
+
"dG_K_ions",
|
|
1651
|
+
fn=_dg_k,
|
|
1652
|
+
args=["K_lumen", "K_stroma", "delta_psi", "RT", "F"],
|
|
1653
|
+
)
|
|
1654
|
+
m = m.add_derived(
|
|
1655
|
+
"Cl_driving_force",
|
|
1656
|
+
fn=_cl_driving_force,
|
|
1657
|
+
args=["delta_psi", "Cl_lumen", "Cl_stroma", "RT", "F"],
|
|
1658
|
+
)
|
|
1659
|
+
m = m.add_derived(
|
|
1660
|
+
"Keq_NDH1",
|
|
1661
|
+
fn=_keq_ndh1,
|
|
1662
|
+
args=["pmf", "E^0_Fd", "F", "E^0_PQ", "pH", "dG_pH", "RT"],
|
|
1663
|
+
)
|
|
1664
|
+
m = m.add_derived(
|
|
1665
|
+
"ClCe_activation",
|
|
1666
|
+
fn=_cl_ce_activation,
|
|
1667
|
+
args=["ATP", "ClCe_ATP_threshold"],
|
|
1668
|
+
)
|
|
1669
|
+
m = m.add_reaction(
|
|
1670
|
+
"ferredoxin_thioredoxin_reductase",
|
|
1671
|
+
fn=_mass_action_2s,
|
|
1672
|
+
args=[
|
|
1673
|
+
"Thioredoxin (oxidised)",
|
|
1674
|
+
"Ferredoxine (reduced)",
|
|
1675
|
+
"kf_ferredoxin_thioredoxin_reductase",
|
|
1676
|
+
],
|
|
1677
|
+
stoichiometry={"Thioredoxin (oxidised)": -1, "Ferredoxine (oxidised)": 1},
|
|
1678
|
+
)
|
|
1679
|
+
m = m.add_reaction(
|
|
1680
|
+
"tr_activation",
|
|
1681
|
+
fn=_mass_action_2s,
|
|
1682
|
+
args=["E_inactive", "Thioredoxin (reduced)", "kf_tr_activation"],
|
|
1683
|
+
stoichiometry={"E_inactive": -5, "Thioredoxin (oxidised)": 5},
|
|
1684
|
+
)
|
|
1685
|
+
m = m.add_reaction(
|
|
1686
|
+
"tr_inactivation",
|
|
1687
|
+
fn=_mass_action_1s,
|
|
1688
|
+
args=["E_active", "kf_tr_inactivation"],
|
|
1689
|
+
stoichiometry={"E_inactive": 5},
|
|
1690
|
+
)
|
|
1691
|
+
m = m.add_reaction(
|
|
1692
|
+
"atp_synthase",
|
|
1693
|
+
fn=_v_at_psynthase_mod,
|
|
1694
|
+
args=[
|
|
1695
|
+
"ATP",
|
|
1696
|
+
"ATPactivity",
|
|
1697
|
+
"ATP_pmf_activity",
|
|
1698
|
+
"k_ATPsynthase",
|
|
1699
|
+
"ADP",
|
|
1700
|
+
"kf_atp_synthase",
|
|
1701
|
+
"convf",
|
|
1702
|
+
],
|
|
1703
|
+
stoichiometry={
|
|
1704
|
+
"ATP": Derived(fn=_value, args=["convf"]),
|
|
1705
|
+
"pH_lumen": 0.04666666666666667,
|
|
1706
|
+
"pH": -0.011666666666666667,
|
|
1707
|
+
"delta_psi": Derived(fn=_atp_div, args=["HPR", "volts_per_charge"]),
|
|
1708
|
+
},
|
|
1709
|
+
)
|
|
1710
|
+
m = m.add_reaction(
|
|
1711
|
+
"lhc_protonation",
|
|
1712
|
+
fn=_protonation_hill,
|
|
1713
|
+
args=[
|
|
1714
|
+
"PsbS (de-protonated)",
|
|
1715
|
+
"protons_lumen",
|
|
1716
|
+
"kh_lhc_protonation",
|
|
1717
|
+
"kf_lhc_protonation",
|
|
1718
|
+
"ksat_lhc_protonation",
|
|
1719
|
+
],
|
|
1720
|
+
stoichiometry={"PsbS (de-protonated)": -1},
|
|
1721
|
+
)
|
|
1722
|
+
m = m.add_reaction(
|
|
1723
|
+
"lhc_deprotonation",
|
|
1724
|
+
fn=_mass_action_1s,
|
|
1725
|
+
args=["PsbS (protonated)", "kf_lhc_deprotonation"],
|
|
1726
|
+
stoichiometry={"PsbS (de-protonated)": 1},
|
|
1727
|
+
)
|
|
1728
|
+
m = m.add_reaction(
|
|
1729
|
+
"cyclic_electron_flow",
|
|
1730
|
+
fn=_rate_cyclic_electron_flow,
|
|
1731
|
+
args=[
|
|
1732
|
+
"Plastoquinone (oxidised)",
|
|
1733
|
+
"Ferredoxine (reduced)",
|
|
1734
|
+
"kf_cyclic_electron_flow",
|
|
1735
|
+
],
|
|
1736
|
+
stoichiometry={"Plastoquinone (oxidised)": -1, "Ferredoxine (oxidised)": 2},
|
|
1737
|
+
)
|
|
1738
|
+
m = m.add_reaction(
|
|
1739
|
+
"violaxanthin_deepoxidase",
|
|
1740
|
+
fn=_rate_protonation_hill,
|
|
1741
|
+
args=[
|
|
1742
|
+
"Violaxanthin",
|
|
1743
|
+
"protons_lumen",
|
|
1744
|
+
"kf_violaxanthin_deepoxidase",
|
|
1745
|
+
"kh_violaxanthin_deepoxidase",
|
|
1746
|
+
"ksat_violaxanthin_deepoxidase",
|
|
1747
|
+
],
|
|
1748
|
+
stoichiometry={"Violaxanthin": -1},
|
|
1749
|
+
)
|
|
1750
|
+
m = m.add_reaction(
|
|
1751
|
+
"zeaxanthin_epoxidase",
|
|
1752
|
+
fn=_mass_action_1s,
|
|
1753
|
+
args=["Zeaxanthin", "kf_zeaxanthin_epoxidase"],
|
|
1754
|
+
stoichiometry={"Violaxanthin": 1},
|
|
1755
|
+
)
|
|
1756
|
+
m = m.add_reaction(
|
|
1757
|
+
"fnr",
|
|
1758
|
+
fn=_rate_fnr_2019,
|
|
1759
|
+
args=[
|
|
1760
|
+
"Ferredoxine (oxidised)",
|
|
1761
|
+
"Ferredoxine (reduced)",
|
|
1762
|
+
"NADPH",
|
|
1763
|
+
"NADP",
|
|
1764
|
+
"km_fnr_Ferredoxine (reduced)",
|
|
1765
|
+
"km_fnr_NADP",
|
|
1766
|
+
"vmax_fnr",
|
|
1767
|
+
"keq_fnr",
|
|
1768
|
+
"convf",
|
|
1769
|
+
],
|
|
1770
|
+
stoichiometry={
|
|
1771
|
+
"Ferredoxine (oxidised)": 2,
|
|
1772
|
+
"NADPH": Derived(fn=_value, args=["convf"]),
|
|
1773
|
+
},
|
|
1774
|
+
)
|
|
1775
|
+
m = m.add_reaction(
|
|
1776
|
+
"ndh",
|
|
1777
|
+
fn=_mass_action_1s,
|
|
1778
|
+
args=["Plastoquinone (oxidised)", "kf_ndh"],
|
|
1779
|
+
stoichiometry={"Plastoquinone (oxidised)": -1},
|
|
1780
|
+
)
|
|
1781
|
+
m = m.add_reaction(
|
|
1782
|
+
"proton_leak",
|
|
1783
|
+
fn=_rate_leak,
|
|
1784
|
+
args=["protons_lumen", "pH", "kf_proton_leak"],
|
|
1785
|
+
stoichiometry={
|
|
1786
|
+
"pH_lumen": 0.01,
|
|
1787
|
+
"pH": -0.0025,
|
|
1788
|
+
"delta_psi": Derived(fn=_neg_one_div, args=["volts_per_charge"]),
|
|
1789
|
+
},
|
|
1790
|
+
)
|
|
1791
|
+
m = m.add_reaction(
|
|
1792
|
+
"PTOX",
|
|
1793
|
+
fn=_mass_action_2s,
|
|
1794
|
+
args=["Plastoquinone (reduced)", "O2 (dissolved)_lumen", "kPTOX"],
|
|
1795
|
+
stoichiometry={"Plastoquinone (oxidised)": 1},
|
|
1796
|
+
)
|
|
1797
|
+
m = m.add_reaction(
|
|
1798
|
+
"lhc_state_transition_12",
|
|
1799
|
+
fn=_rate_state_transition_ps1_ps2,
|
|
1800
|
+
args=[
|
|
1801
|
+
"Light-harvesting complex",
|
|
1802
|
+
"Plastoquinone (oxidised)",
|
|
1803
|
+
"PQ_tot",
|
|
1804
|
+
"kStt7",
|
|
1805
|
+
"km_lhc_state_transition_12",
|
|
1806
|
+
"n_ST",
|
|
1807
|
+
],
|
|
1808
|
+
stoichiometry={"Light-harvesting complex": -1},
|
|
1809
|
+
)
|
|
1810
|
+
m = m.add_reaction(
|
|
1811
|
+
"lhc_state_transition_21",
|
|
1812
|
+
fn=_mass_action_1s,
|
|
1813
|
+
args=["Light-harvesting complex (protonated)", "kPph1"],
|
|
1814
|
+
stoichiometry={"Light-harvesting complex": 1},
|
|
1815
|
+
)
|
|
1816
|
+
m = m.add_reaction(
|
|
1817
|
+
"rubisco_carboxylase",
|
|
1818
|
+
fn=_rate_poolman_5i,
|
|
1819
|
+
args=[
|
|
1820
|
+
"RUBP",
|
|
1821
|
+
"3PGA",
|
|
1822
|
+
"CO2 (dissolved)",
|
|
1823
|
+
"vmax_rubisco_carboxylase",
|
|
1824
|
+
"km_rubisco_carboxylase_RUBP",
|
|
1825
|
+
"km_rubisco_carboxylase_CO2 (dissolved)",
|
|
1826
|
+
"ki_rubisco_carboxylase_3PGA",
|
|
1827
|
+
"FBP",
|
|
1828
|
+
"ki_rubisco_carboxylase_FBP",
|
|
1829
|
+
"SBP",
|
|
1830
|
+
"ki_rubisco_carboxylase_SBP",
|
|
1831
|
+
"Orthophosphate",
|
|
1832
|
+
"ki_rubisco_carboxylase_Orthophosphate",
|
|
1833
|
+
"NADPH",
|
|
1834
|
+
"ki_rubisco_carboxylase_NADPH",
|
|
1835
|
+
],
|
|
1836
|
+
stoichiometry={"RUBP": -1.0, "3PGA": 2.0},
|
|
1837
|
+
)
|
|
1838
|
+
m = m.add_reaction(
|
|
1839
|
+
"phosphoglycerate_kinase",
|
|
1840
|
+
fn=_rapid_equilibrium_2s_2p,
|
|
1841
|
+
args=[
|
|
1842
|
+
"3PGA",
|
|
1843
|
+
"ATP",
|
|
1844
|
+
"BPGA",
|
|
1845
|
+
"ADP",
|
|
1846
|
+
"kre_phosphoglycerate_kinase",
|
|
1847
|
+
"keq_phosphoglycerate_kinase",
|
|
1848
|
+
],
|
|
1849
|
+
stoichiometry={"3PGA": -1.0, "ATP": -1.0, "BPGA": 1.0},
|
|
1850
|
+
)
|
|
1851
|
+
m = m.add_reaction(
|
|
1852
|
+
"gadph",
|
|
1853
|
+
fn=_rapid_equilibrium_3s_3p,
|
|
1854
|
+
args=[
|
|
1855
|
+
"BPGA",
|
|
1856
|
+
"NADPH",
|
|
1857
|
+
"protons",
|
|
1858
|
+
"GAP",
|
|
1859
|
+
"NADP",
|
|
1860
|
+
"Orthophosphate",
|
|
1861
|
+
"kre_gadph",
|
|
1862
|
+
"keq_gadph",
|
|
1863
|
+
],
|
|
1864
|
+
stoichiometry={"NADPH": -1.0, "BPGA": -1.0, "GAP": 1.0},
|
|
1865
|
+
)
|
|
1866
|
+
m = m.add_reaction(
|
|
1867
|
+
"triose_phosphate_isomerase",
|
|
1868
|
+
fn=_rapid_equilibrium_1s_1p,
|
|
1869
|
+
args=[
|
|
1870
|
+
"GAP",
|
|
1871
|
+
"DHAP",
|
|
1872
|
+
"kre_triose_phosphate_isomerase",
|
|
1873
|
+
"keq_triose_phosphate_isomerase",
|
|
1874
|
+
],
|
|
1875
|
+
stoichiometry={"GAP": -1, "DHAP": 1},
|
|
1876
|
+
)
|
|
1877
|
+
m = m.add_reaction(
|
|
1878
|
+
"aldolase_dhap_gap",
|
|
1879
|
+
fn=_rapid_equilibrium_2s_1p,
|
|
1880
|
+
args=["GAP", "DHAP", "FBP", "kre_aldolase_dhap_gap", "keq_aldolase_dhap_gap"],
|
|
1881
|
+
stoichiometry={"GAP": -1, "DHAP": -1, "FBP": 1},
|
|
1882
|
+
)
|
|
1883
|
+
m = m.add_reaction(
|
|
1884
|
+
"aldolase_dhap_e4p",
|
|
1885
|
+
fn=_rapid_equilibrium_2s_1p,
|
|
1886
|
+
args=["DHAP", "E4P", "SBP", "kre_aldolase_dhap_e4p", "keq_aldolase_dhap_e4p"],
|
|
1887
|
+
stoichiometry={"DHAP": -1, "E4P": -1, "SBP": 1},
|
|
1888
|
+
)
|
|
1889
|
+
m = m.add_reaction(
|
|
1890
|
+
"fbpase",
|
|
1891
|
+
fn=_michaelis_menten_1s_2i,
|
|
1892
|
+
args=[
|
|
1893
|
+
"FBP",
|
|
1894
|
+
"F6P",
|
|
1895
|
+
"Orthophosphate",
|
|
1896
|
+
"vmax_fbpase",
|
|
1897
|
+
"km_fbpase_s",
|
|
1898
|
+
"ki_fbpase_F6P",
|
|
1899
|
+
"ki_fbpase_Orthophosphate",
|
|
1900
|
+
],
|
|
1901
|
+
stoichiometry={"FBP": -1, "F6P": 1},
|
|
1902
|
+
)
|
|
1903
|
+
m = m.add_reaction(
|
|
1904
|
+
"transketolase_gap_f6p",
|
|
1905
|
+
fn=_rapid_equilibrium_2s_2p,
|
|
1906
|
+
args=[
|
|
1907
|
+
"GAP",
|
|
1908
|
+
"F6P",
|
|
1909
|
+
"E4P",
|
|
1910
|
+
"X5P",
|
|
1911
|
+
"kre_transketolase_gap_f6p",
|
|
1912
|
+
"keq_transketolase_gap_f6p",
|
|
1913
|
+
],
|
|
1914
|
+
stoichiometry={"GAP": -1, "F6P": -1, "E4P": 1, "X5P": 1},
|
|
1915
|
+
)
|
|
1916
|
+
m = m.add_reaction(
|
|
1917
|
+
"transketolase_gap_s7p",
|
|
1918
|
+
fn=_rapid_equilibrium_2s_2p,
|
|
1919
|
+
args=[
|
|
1920
|
+
"GAP",
|
|
1921
|
+
"S7P",
|
|
1922
|
+
"R5P",
|
|
1923
|
+
"X5P",
|
|
1924
|
+
"kre_transketolase_gap_s7p",
|
|
1925
|
+
"keq_transketolase_gap_s7p",
|
|
1926
|
+
],
|
|
1927
|
+
stoichiometry={"GAP": -1, "S7P": -1, "R5P": 1, "X5P": 1},
|
|
1928
|
+
)
|
|
1929
|
+
m = m.add_reaction(
|
|
1930
|
+
"SBPase",
|
|
1931
|
+
fn=_michaelis_menten_1s_1i,
|
|
1932
|
+
args=[
|
|
1933
|
+
"SBP",
|
|
1934
|
+
"Orthophosphate",
|
|
1935
|
+
"vmax_SBPase",
|
|
1936
|
+
"km_SBPase_s",
|
|
1937
|
+
"ki_SBPase_Orthophosphate",
|
|
1938
|
+
],
|
|
1939
|
+
stoichiometry={"SBP": -1, "S7P": 1},
|
|
1940
|
+
)
|
|
1941
|
+
m = m.add_reaction(
|
|
1942
|
+
"ribose_phosphate_isomerase",
|
|
1943
|
+
fn=_rapid_equilibrium_1s_1p,
|
|
1944
|
+
args=[
|
|
1945
|
+
"R5P",
|
|
1946
|
+
"RU5P",
|
|
1947
|
+
"kre_ribose_phosphate_isomerase",
|
|
1948
|
+
"keq_ribose_phosphate_isomerase",
|
|
1949
|
+
],
|
|
1950
|
+
stoichiometry={"R5P": -1, "RU5P": 1},
|
|
1951
|
+
)
|
|
1952
|
+
m = m.add_reaction(
|
|
1953
|
+
"ribulose_phosphate_epimerase",
|
|
1954
|
+
fn=_rapid_equilibrium_1s_1p,
|
|
1955
|
+
args=[
|
|
1956
|
+
"X5P",
|
|
1957
|
+
"RU5P",
|
|
1958
|
+
"kre_ribulose_phosphate_epimerase",
|
|
1959
|
+
"keq_ribulose_phosphate_epimerase",
|
|
1960
|
+
],
|
|
1961
|
+
stoichiometry={"X5P": -1, "RU5P": 1},
|
|
1962
|
+
)
|
|
1963
|
+
m = m.add_reaction(
|
|
1964
|
+
"phosphoribulokinase",
|
|
1965
|
+
fn=_rate_prk,
|
|
1966
|
+
args=[
|
|
1967
|
+
"RU5P",
|
|
1968
|
+
"ATP",
|
|
1969
|
+
"Orthophosphate",
|
|
1970
|
+
"3PGA",
|
|
1971
|
+
"RUBP",
|
|
1972
|
+
"ADP",
|
|
1973
|
+
"vmax_phosphoribulokinase",
|
|
1974
|
+
"km_phosphoribulokinase_RU5P",
|
|
1975
|
+
"km_phosphoribulokinase_ATP",
|
|
1976
|
+
"ki_phosphoribulokinase_3PGA",
|
|
1977
|
+
"ki_phosphoribulokinase_RUBP",
|
|
1978
|
+
"ki_phosphoribulokinase_Orthophosphate",
|
|
1979
|
+
"ki_phosphoribulokinase_4",
|
|
1980
|
+
"ki_phosphoribulokinase_5",
|
|
1981
|
+
],
|
|
1982
|
+
stoichiometry={"RU5P": -1.0, "ATP": -1.0, "RUBP": 1.0},
|
|
1983
|
+
)
|
|
1984
|
+
m = m.add_reaction(
|
|
1985
|
+
"g6pi",
|
|
1986
|
+
fn=_rapid_equilibrium_1s_1p,
|
|
1987
|
+
args=["F6P", "G6P", "kre_g6pi", "keq_g6pi"],
|
|
1988
|
+
stoichiometry={"F6P": -1, "G6P": 1},
|
|
1989
|
+
)
|
|
1990
|
+
m = m.add_reaction(
|
|
1991
|
+
"phosphoglucomutase",
|
|
1992
|
+
fn=_rapid_equilibrium_1s_1p,
|
|
1993
|
+
args=["G6P", "G1P", "kre_phosphoglucomutase", "keq_phosphoglucomutase"],
|
|
1994
|
+
stoichiometry={"G6P": -1, "G1P": 1},
|
|
1995
|
+
)
|
|
1996
|
+
m = m.add_reaction(
|
|
1997
|
+
"ex_pga",
|
|
1998
|
+
fn=_rate_out,
|
|
1999
|
+
args=["3PGA", "N_translocator", "vmax_ex_pga", "km_ex_pga"],
|
|
2000
|
+
stoichiometry={"3PGA": -1},
|
|
2001
|
+
)
|
|
2002
|
+
m = m.add_reaction(
|
|
2003
|
+
"ex_gap",
|
|
2004
|
+
fn=_rate_out,
|
|
2005
|
+
args=["GAP", "N_translocator", "vmax_ex_pga", "km_ex_gap"],
|
|
2006
|
+
stoichiometry={"GAP": -1},
|
|
2007
|
+
)
|
|
2008
|
+
m = m.add_reaction(
|
|
2009
|
+
"ex_dhap",
|
|
2010
|
+
fn=_rate_out,
|
|
2011
|
+
args=["DHAP", "N_translocator", "vmax_ex_pga", "km_ex_dhap"],
|
|
2012
|
+
stoichiometry={"DHAP": -1},
|
|
2013
|
+
)
|
|
2014
|
+
m = m.add_reaction(
|
|
2015
|
+
"ex_g1p",
|
|
2016
|
+
fn=_rate_starch,
|
|
2017
|
+
args=[
|
|
2018
|
+
"G1P",
|
|
2019
|
+
"ATP",
|
|
2020
|
+
"ADP",
|
|
2021
|
+
"Orthophosphate",
|
|
2022
|
+
"3PGA",
|
|
2023
|
+
"F6P",
|
|
2024
|
+
"FBP",
|
|
2025
|
+
"vmax_ex_g1p",
|
|
2026
|
+
"km_ex_g1p_G1P",
|
|
2027
|
+
"km_ex_g1p_ATP",
|
|
2028
|
+
"ki_ex_g1p",
|
|
2029
|
+
"ki_ex_g1p_3PGA",
|
|
2030
|
+
"ki_ex_g1p_F6P",
|
|
2031
|
+
"ki_ex_g1p_FBP",
|
|
2032
|
+
],
|
|
2033
|
+
stoichiometry={"G1P": -1.0, "ATP": -1.0},
|
|
2034
|
+
)
|
|
2035
|
+
m = m.add_reaction(
|
|
2036
|
+
"mda_reductase_1",
|
|
2037
|
+
fn=_rate_mda_reductase1,
|
|
2038
|
+
args=["MDA", "kf_mda_reductase_1"],
|
|
2039
|
+
stoichiometry={"MDA": -2, "DHA": 1},
|
|
2040
|
+
)
|
|
2041
|
+
m = m.add_reaction(
|
|
2042
|
+
"mda_reductase_2",
|
|
2043
|
+
fn=_rate_mda_reductase2,
|
|
2044
|
+
args=[
|
|
2045
|
+
"NADPH",
|
|
2046
|
+
"MDA",
|
|
2047
|
+
"vmax_mda_reductase_2",
|
|
2048
|
+
"km_mda_reductase_2_NADPH",
|
|
2049
|
+
"km_mda_reductase_2_MDA",
|
|
2050
|
+
],
|
|
2051
|
+
stoichiometry={"NADPH": -1, "MDA": -2},
|
|
2052
|
+
)
|
|
2053
|
+
m = m.add_reaction(
|
|
2054
|
+
"ascorbate_peroxidase",
|
|
2055
|
+
fn=_rate_ascorbate_peroxidase,
|
|
2056
|
+
args=[
|
|
2057
|
+
"ascorbate",
|
|
2058
|
+
"H2O2",
|
|
2059
|
+
"kf1",
|
|
2060
|
+
"kr1",
|
|
2061
|
+
"kf2",
|
|
2062
|
+
"kr2",
|
|
2063
|
+
"kf3",
|
|
2064
|
+
"kf4",
|
|
2065
|
+
"kr4",
|
|
2066
|
+
"kf5",
|
|
2067
|
+
"XT",
|
|
2068
|
+
],
|
|
2069
|
+
stoichiometry={"H2O2": -1, "MDA": 2},
|
|
2070
|
+
)
|
|
2071
|
+
m = m.add_reaction(
|
|
2072
|
+
"glutathion_reductase",
|
|
2073
|
+
fn=_rate_glutathion_reductase,
|
|
2074
|
+
args=[
|
|
2075
|
+
"NADPH",
|
|
2076
|
+
"GSSG",
|
|
2077
|
+
"vmax_glutathion_reductase",
|
|
2078
|
+
"km_glutathion_reductase_NADPH",
|
|
2079
|
+
"km_glutathion_reductase_GSSG",
|
|
2080
|
+
],
|
|
2081
|
+
stoichiometry={"NADPH": -1, "GSSG": -1},
|
|
2082
|
+
)
|
|
2083
|
+
m = m.add_reaction(
|
|
2084
|
+
"dehydroascorbate_reductase",
|
|
2085
|
+
fn=_rate_dhar,
|
|
2086
|
+
args=[
|
|
2087
|
+
"DHA",
|
|
2088
|
+
"GSH",
|
|
2089
|
+
"vmax_dehydroascorbate_reductase",
|
|
2090
|
+
"km_dehydroascorbate_reductase_DHA",
|
|
2091
|
+
"km_dehydroascorbate_reductase_GSH",
|
|
2092
|
+
"K",
|
|
2093
|
+
],
|
|
2094
|
+
stoichiometry={"DHA": -1, "GSSG": 1},
|
|
2095
|
+
)
|
|
2096
|
+
m = m.add_reaction(
|
|
2097
|
+
"toP700FA-",
|
|
2098
|
+
fn=_mass_action_22_rev,
|
|
2099
|
+
args=[
|
|
2100
|
+
"P700+FA-",
|
|
2101
|
+
"Plastocyanine (reduced)",
|
|
2102
|
+
"Plastocyanine (oxidised)",
|
|
2103
|
+
"P700FA-",
|
|
2104
|
+
"kPCox",
|
|
2105
|
+
"keq_PCP700",
|
|
2106
|
+
],
|
|
2107
|
+
stoichiometry={"P700+FA-": -1, "P700FA-": 1, "Plastocyanine (oxidised)": 1},
|
|
2108
|
+
)
|
|
2109
|
+
m = m.add_reaction(
|
|
2110
|
+
"toP700FA_v3",
|
|
2111
|
+
fn=_mass_action_22_rev,
|
|
2112
|
+
args=[
|
|
2113
|
+
"P700FA-",
|
|
2114
|
+
"Ferredoxine (oxidised)",
|
|
2115
|
+
"P700FA",
|
|
2116
|
+
"Ferredoxine (reduced)",
|
|
2117
|
+
"kFdred",
|
|
2118
|
+
"keq_FAFd",
|
|
2119
|
+
],
|
|
2120
|
+
stoichiometry={"P700FA-": -1, "Ferredoxine (oxidised)": -1, "P700FA": 1},
|
|
2121
|
+
)
|
|
2122
|
+
m = m.add_reaction(
|
|
2123
|
+
"toP700+FA",
|
|
2124
|
+
fn=_mass_action_22_rev,
|
|
2125
|
+
args=[
|
|
2126
|
+
"P700+FA-",
|
|
2127
|
+
"Ferredoxine (oxidised)",
|
|
2128
|
+
"P700+FA",
|
|
2129
|
+
"Ferredoxine (reduced)",
|
|
2130
|
+
"kFdred",
|
|
2131
|
+
"keq_FAFd",
|
|
2132
|
+
],
|
|
2133
|
+
stoichiometry={"P700+FA-": -1, "Ferredoxine (oxidised)": -1},
|
|
2134
|
+
)
|
|
2135
|
+
m = m.add_reaction(
|
|
2136
|
+
"toP700FA_v5",
|
|
2137
|
+
fn=_mass_action_22_rev,
|
|
2138
|
+
args=[
|
|
2139
|
+
"P700+FA",
|
|
2140
|
+
"Plastocyanine (reduced)",
|
|
2141
|
+
"P700FA",
|
|
2142
|
+
"Plastocyanine (oxidised)",
|
|
2143
|
+
"kPCox",
|
|
2144
|
+
"keq_PCP700",
|
|
2145
|
+
],
|
|
2146
|
+
stoichiometry={"P700FA": 1, "Plastocyanine (oxidised)": 1},
|
|
2147
|
+
)
|
|
2148
|
+
m = m.add_reaction(
|
|
2149
|
+
"PSI",
|
|
2150
|
+
fn=_v_ps1,
|
|
2151
|
+
args=["P700FA", "PSII_cross_section", "PPFD"],
|
|
2152
|
+
stoichiometry={"P700FA": -1, "P700+FA-": 1},
|
|
2153
|
+
)
|
|
2154
|
+
m = m.add_reaction(
|
|
2155
|
+
"mehler1",
|
|
2156
|
+
fn=_v_mehler,
|
|
2157
|
+
args=["P700FA-", "O2 (dissolved)_lumen", "kMehler"],
|
|
2158
|
+
stoichiometry={
|
|
2159
|
+
"H2O2": Derived(fn=_value, args=["convf"]),
|
|
2160
|
+
"P700FA": 2,
|
|
2161
|
+
"P700FA-": -2,
|
|
2162
|
+
},
|
|
2163
|
+
)
|
|
2164
|
+
m = m.add_reaction(
|
|
2165
|
+
"mehler2",
|
|
2166
|
+
fn=_v_mehler,
|
|
2167
|
+
args=["P700+FA-", "O2 (dissolved)_lumen", "kMehler"],
|
|
2168
|
+
stoichiometry={"H2O2": Derived(fn=_value, args=["convf"]), "P700+FA-": -2},
|
|
2169
|
+
)
|
|
2170
|
+
m = m.add_reaction(
|
|
2171
|
+
"B01",
|
|
2172
|
+
fn=_mass_action_2s,
|
|
2173
|
+
args=["B0", "PSII_cross_section", "PPFD"],
|
|
2174
|
+
stoichiometry={"B0": -1, "B1": 1},
|
|
2175
|
+
)
|
|
2176
|
+
m = m.add_reaction(
|
|
2177
|
+
"B10Q",
|
|
2178
|
+
fn=_kquencher,
|
|
2179
|
+
args=["B1", "Q", "kH_Qslope", "kH0"],
|
|
2180
|
+
stoichiometry={"B1": -1, "B0": 1},
|
|
2181
|
+
)
|
|
2182
|
+
m = m.add_reaction(
|
|
2183
|
+
"B10F",
|
|
2184
|
+
fn=_mass_action_1s,
|
|
2185
|
+
args=["B1", "kF"],
|
|
2186
|
+
stoichiometry={"B1": -1, "B0": 1},
|
|
2187
|
+
)
|
|
2188
|
+
m = m.add_reaction(
|
|
2189
|
+
"B12",
|
|
2190
|
+
fn=_mass_action_1s,
|
|
2191
|
+
args=["B1", "k2"],
|
|
2192
|
+
stoichiometry={
|
|
2193
|
+
"B1": -1,
|
|
2194
|
+
"B2": 1,
|
|
2195
|
+
"pH_lumen": -0.01,
|
|
2196
|
+
"delta_psi": Derived(fn=_one_div, args=["volts_per_charge"]),
|
|
2197
|
+
},
|
|
2198
|
+
)
|
|
2199
|
+
m = m.add_reaction(
|
|
2200
|
+
"B20",
|
|
2201
|
+
fn=_mass_action_22_rev,
|
|
2202
|
+
args=[
|
|
2203
|
+
"B2",
|
|
2204
|
+
"Plastoquinone (oxidised)",
|
|
2205
|
+
"Plastoquinone (reduced)",
|
|
2206
|
+
"B0",
|
|
2207
|
+
"kPQred",
|
|
2208
|
+
"keq_Plastoquinone (reduced)",
|
|
2209
|
+
],
|
|
2210
|
+
stoichiometry={
|
|
2211
|
+
"B2": -1,
|
|
2212
|
+
"Plastoquinone (oxidised)": -0.5,
|
|
2213
|
+
"B0": 1,
|
|
2214
|
+
"pH": 0.0025,
|
|
2215
|
+
},
|
|
2216
|
+
)
|
|
2217
|
+
m = m.add_reaction(
|
|
2218
|
+
"B23",
|
|
2219
|
+
fn=_mass_action_2s,
|
|
2220
|
+
args=["B2", "PSII_cross_section", "PPFD"],
|
|
2221
|
+
stoichiometry={"B2": -1},
|
|
2222
|
+
)
|
|
2223
|
+
m = m.add_reaction(
|
|
2224
|
+
"B32F",
|
|
2225
|
+
fn=_mass_action_1s,
|
|
2226
|
+
args=["B3", "kF"],
|
|
2227
|
+
stoichiometry={"B2": 1},
|
|
2228
|
+
)
|
|
2229
|
+
m = m.add_reaction(
|
|
2230
|
+
"B32Q",
|
|
2231
|
+
fn=_kquencher,
|
|
2232
|
+
args=["B3", "Q", "kH_Qslope", "kH0"],
|
|
2233
|
+
stoichiometry={"B2": 1},
|
|
2234
|
+
)
|
|
2235
|
+
m = m.add_reaction(
|
|
2236
|
+
"b6f",
|
|
2237
|
+
fn=_vb6f_2024,
|
|
2238
|
+
args=[
|
|
2239
|
+
"Plastocyanine (oxidised)",
|
|
2240
|
+
"Plastocyanine (reduced)",
|
|
2241
|
+
"Plastoquinone (oxidised)",
|
|
2242
|
+
"Plastoquinone (reduced)",
|
|
2243
|
+
"keq_b6f_dyn",
|
|
2244
|
+
"keq_b6f",
|
|
2245
|
+
],
|
|
2246
|
+
stoichiometry={
|
|
2247
|
+
"Plastocyanine (oxidised)": -2,
|
|
2248
|
+
"Plastoquinone (oxidised)": 1,
|
|
2249
|
+
"pH_lumen": -0.04,
|
|
2250
|
+
"pH": 0.01,
|
|
2251
|
+
"delta_psi": Derived(fn=_four_div, args=["volts_per_charge"]),
|
|
2252
|
+
},
|
|
2253
|
+
)
|
|
2254
|
+
m = m.add_reaction(
|
|
2255
|
+
"vATPactivity",
|
|
2256
|
+
fn=_v_at_pactivity,
|
|
2257
|
+
args=["ATPactivity", "PPFD", "kActATPase", "kDeactATPase"],
|
|
2258
|
+
stoichiometry={"ATPactivity": 1},
|
|
2259
|
+
)
|
|
2260
|
+
m = m.add_reaction(
|
|
2261
|
+
"vATP_shuttle",
|
|
2262
|
+
fn=_reversible_mass_action_1s_1p,
|
|
2263
|
+
args=["ADP", "ATP", "k_import_ATP", "kf_ex_atp"],
|
|
2264
|
+
stoichiometry={"ATP": 1},
|
|
2265
|
+
)
|
|
2266
|
+
m = m.add_reaction(
|
|
2267
|
+
"vNADPH_shuttle",
|
|
2268
|
+
fn=_reversible_mass_action_1s_1p,
|
|
2269
|
+
args=["NADP", "NADPH", "k_import_NADPH", "kf_ex_nadph"],
|
|
2270
|
+
stoichiometry={"NADPH": 1},
|
|
2271
|
+
)
|
|
2272
|
+
m = m.add_reaction(
|
|
2273
|
+
"KEA3",
|
|
2274
|
+
fn=_v_kea,
|
|
2275
|
+
args=["K_lumen", "protons_lumen", "K_stroma", "k_KEA", "protons", "KEA3_reg"],
|
|
2276
|
+
stoichiometry={"K_stroma": -1, "pH_lumen": 0.01, "pH": -0.0025},
|
|
2277
|
+
)
|
|
2278
|
+
m = m.add_reaction(
|
|
2279
|
+
"voltage_K_channel",
|
|
2280
|
+
fn=_v_voltage_k_channel,
|
|
2281
|
+
args=[
|
|
2282
|
+
"delta_psi",
|
|
2283
|
+
"K_lumen",
|
|
2284
|
+
"K_stroma",
|
|
2285
|
+
"dG_K_ions",
|
|
2286
|
+
"perm_K",
|
|
2287
|
+
"K_delta_psi_treshold",
|
|
2288
|
+
],
|
|
2289
|
+
stoichiometry={
|
|
2290
|
+
"K_stroma": 1,
|
|
2291
|
+
"delta_psi": Derived(fn=_neg_one_div, args=["volts_per_charge"]),
|
|
2292
|
+
},
|
|
2293
|
+
)
|
|
2294
|
+
m = m.add_reaction(
|
|
2295
|
+
"VCCN1",
|
|
2296
|
+
fn=_v_vccn1,
|
|
2297
|
+
args=[
|
|
2298
|
+
"Cl_stroma",
|
|
2299
|
+
"Cl_lumen",
|
|
2300
|
+
"Cl_driving_force",
|
|
2301
|
+
"delta_psi",
|
|
2302
|
+
"k_VCCN1",
|
|
2303
|
+
"VCCN_delta_psi_treshold",
|
|
2304
|
+
],
|
|
2305
|
+
stoichiometry={
|
|
2306
|
+
"Cl_stroma": -1,
|
|
2307
|
+
"delta_psi": Derived(fn=_neg_one_div, args=["volts_per_charge"]),
|
|
2308
|
+
},
|
|
2309
|
+
)
|
|
2310
|
+
m = m.add_reaction(
|
|
2311
|
+
"Cl_leak",
|
|
2312
|
+
fn=_v_cl_leak,
|
|
2313
|
+
args=[
|
|
2314
|
+
"k_Cl_leak",
|
|
2315
|
+
"Cl_lumen",
|
|
2316
|
+
"Cl_stroma",
|
|
2317
|
+
"Plastoquinone (oxidised)",
|
|
2318
|
+
"Cl_leak_PQ",
|
|
2319
|
+
"total_Cl_2",
|
|
2320
|
+
],
|
|
2321
|
+
stoichiometry={
|
|
2322
|
+
"Cl_stroma": 1,
|
|
2323
|
+
"delta_psi": Derived(fn=_one_div, args=["volts_per_charge"]),
|
|
2324
|
+
},
|
|
2325
|
+
)
|
|
2326
|
+
m = m.add_reaction(
|
|
2327
|
+
"NDH1",
|
|
2328
|
+
fn=_v_ndh1,
|
|
2329
|
+
args=[
|
|
2330
|
+
"P700+FA-",
|
|
2331
|
+
"Ferredoxine (reduced)",
|
|
2332
|
+
"Plastoquinone (oxidised)",
|
|
2333
|
+
"pH_lumen",
|
|
2334
|
+
"k_NDH1",
|
|
2335
|
+
],
|
|
2336
|
+
stoichiometry={
|
|
2337
|
+
"Ferredoxine (oxidised)": 2,
|
|
2338
|
+
"Plastoquinone (oxidised)": -1,
|
|
2339
|
+
"pH_lumen": -0.04,
|
|
2340
|
+
"pH": 0.01,
|
|
2341
|
+
"delta_psi": Derived(fn=_four_div, args=["volts_per_charge"]),
|
|
2342
|
+
},
|
|
2343
|
+
)
|
|
2344
|
+
m = m.add_reaction(
|
|
2345
|
+
"ClCe_bi",
|
|
2346
|
+
fn=_cl_ce_bi,
|
|
2347
|
+
args=["Cl_lumen", "Cl_stroma", "k_ClCe", "ClCe_activation"],
|
|
2348
|
+
stoichiometry={"Cl_stroma": -1},
|
|
2349
|
+
)
|
|
2350
|
+
m = m.add_readout(
|
|
2351
|
+
"PQ_ox/tot",
|
|
2352
|
+
fn=_div,
|
|
2353
|
+
args=["Plastoquinone (reduced)", "PQ_tot"],
|
|
2354
|
+
)
|
|
2355
|
+
m = m.add_readout(
|
|
2356
|
+
"Fd_ox/tot",
|
|
2357
|
+
fn=_div,
|
|
2358
|
+
args=["Ferredoxine (reduced)", "Fd*"],
|
|
2359
|
+
)
|
|
2360
|
+
m = m.add_readout(
|
|
2361
|
+
"PC_ox/tot",
|
|
2362
|
+
fn=_div,
|
|
2363
|
+
args=["Plastocyanine (reduced)", "PC_tot"],
|
|
2364
|
+
)
|
|
2365
|
+
m = m.add_readout(
|
|
2366
|
+
"NADPH/tot",
|
|
2367
|
+
fn=_div,
|
|
2368
|
+
args=["NADPH", "NADP*"],
|
|
2369
|
+
)
|
|
2370
|
+
m = m.add_readout(
|
|
2371
|
+
"ATP/tot",
|
|
2372
|
+
fn=_div,
|
|
2373
|
+
args=["ATP", "A*P"],
|
|
2374
|
+
)
|
|
2375
|
+
return m # noqa: RET504
|