Skip to content

Commit 7c0ba30

Browse files
author
Hiroaki Imoto
authored
Release v 0.7.0 (#47)
* Rename .jl modules * Bump version to 0.7.0 * Update method to get ppMEK slope * Fix a typo * Include isequal
1 parent f0aa6ea commit 7c0ba30

File tree

11 files changed

+60
-73
lines changed

11 files changed

+60
-73
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "BioMASS"
22
uuid = "324734c7-f323-4536-9335-775d9be9d101"
33
authors = ["Hiroaki Imoto <himoto@protein.osaka-u.ac.jp>"]
4-
version = "0.6.0"
4+
version = "0.7.0"
55

66
[deps]
77
CMAEvolutionStrategy = "8d3b24bd-414e-49e0-94fb-163cc3a3e411"

docs/src/usage/parameter_estimation.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ Load a BioMASS model. The model must include the following files:
1313
| Name | Content |
1414
| :--------------------- | :------------------------------------------------------------------------------------------------------- |
1515
| `name2idx/` | Names of model parameters and species |
16-
| `set_model.jl` | Differential equation, parameters and initial condition |
16+
| `ode.jl` | Differential equation, parameters and initial condition |
1717
| `observalbe.jl` | Model observables for correlating simulation results with experimental observations |
1818
| `simulation.jl` | Simulation condition |
19-
| `experimental_data.jl` | Experimental measurements for determining parameters |
20-
| `set_search_param.jl` | Model parameters to optimize and search region |
21-
| `fitness.jl` | An objective function to be minimized, i.e., the distance between model simulation and experimental data |
19+
| `experimental_data.jl` | Experimental measurements |
20+
| `search_param.jl` | Lower and upper bounds of model parameters to be estimated |
21+
| `problem.jl` | An objective function to be minimized, i.e., the distance between model simulation and experimental data |
2222

2323
- **Parameters**
2424

examples/fos_model/set_model.jl renamed to examples/fos_model/ode.jl

Lines changed: 50 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,69 @@
1+
function get_ppMEK_slope(t, ligand)::Float64
2+
timepoints = [0, 300, 600, 900, 1800, 2700, 3600, 5400]
3+
ppMEK_data = Dict(
4+
"EGF" => [0.000, 0.773, 0.439, 0.252, 0.130, 0.087, 0.080, 0.066],
5+
"HRG" => [0.000, 0.865, 1.000, 0.837, 0.884, 0.920, 0.875, 0.789],
6+
)
7+
slope = [
8+
(ppMEK_data[ligand][i+1] - activity) / (timepoints[i+1] - timepoint)
9+
for (i, (timepoint, activity)) in enumerate(zip(timepoints, ppMEK_data[ligand]))
10+
if i + 1 <= length(timepoints)
11+
]
12+
for (i, timepoint) in enumerate(timepoints)
13+
if timepoint <= t <= timepoints[i+1]
14+
return slope[i]
15+
end
16+
end
17+
end
18+
19+
120
function diffeq!(du, u, p, t)
221
v = Dict{Int64,Float64}()
322

4-
v[1] = p[C.V1] * p[C.a] * u[V.ppMEKc] * u[V.ERKc] / ( p[C.Km1] * (1 + u[V.pERKc] / p[C.Km2]) + u[V.ERKc] )
5-
v[2] = p[C.V2] * p[C.a] * u[V.ppMEKc] * u[V.pERKc] / ( p[C.Km2] * (1 + u[V.ERKc] / p[C.Km1]) + u[V.pERKc] )
6-
v[3] = p[C.V3] * u[V.pERKc] / ( p[C.Km3] * (1 + u[V.ppERKc] / p[C.Km4]) + u[V.pERKc] )
7-
v[4] = p[C.V4] * u[V.ppERKc] / ( p[C.Km4] * (1 + u[V.pERKc] / p[C.Km3]) + u[V.ppERKc] )
8-
v[5] = p[C.V5] * u[V.pERKn] / ( p[C.Km5] * (1 + u[V.ppERKn] / p[C.Km6]) + u[V.pERKn] )
9-
v[6] = p[C.V6] * u[V.ppERKn] / ( p[C.Km6] * (1 + u[V.pERKn] / p[C.Km5]) + u[V.ppERKn] )
23+
v[1] = p[C.V1] * p[C.a] * u[V.ppMEKc] * u[V.ERKc] / (p[C.Km1] * (1 + u[V.pERKc] / p[C.Km2]) + u[V.ERKc])
24+
v[2] = p[C.V2] * p[C.a] * u[V.ppMEKc] * u[V.pERKc] / (p[C.Km2] * (1 + u[V.ERKc] / p[C.Km1]) + u[V.pERKc])
25+
v[3] = p[C.V3] * u[V.pERKc] / (p[C.Km3] * (1 + u[V.ppERKc] / p[C.Km4]) + u[V.pERKc])
26+
v[4] = p[C.V4] * u[V.ppERKc] / (p[C.Km4] * (1 + u[V.pERKc] / p[C.Km3]) + u[V.ppERKc])
27+
v[5] = p[C.V5] * u[V.pERKn] / (p[C.Km5] * (1 + u[V.ppERKn] / p[C.Km6]) + u[V.pERKn])
28+
v[6] = p[C.V6] * u[V.ppERKn] / (p[C.Km6] * (1 + u[V.pERKn] / p[C.Km5]) + u[V.ppERKn])
1029
v[7] = p[C.KimERK] * u[V.ERKc] - p[C.KexERK] * (p[C.Vn] / p[C.Vc]) * u[V.ERKn]
1130
v[8] = p[C.KimpERK] * u[V.pERKc] - p[C.KexpERK] * (p[C.Vn] / p[C.Vc]) * u[V.pERKn]
1231
v[9] = p[C.KimppERK] * u[V.ppERKc] - p[C.KexppERK] * (p[C.Vn] / p[C.Vc]) * u[V.ppERKn]
13-
v[10] = p[C.V10] * u[V.ppERKn]^p[C.n10] / ( p[C.Km10]^p[C.n10] + u[V.ppERKn]^p[C.n10] )
32+
v[10] = p[C.V10] * u[V.ppERKn]^p[C.n10] / (p[C.Km10]^p[C.n10] + u[V.ppERKn]^p[C.n10])
1433
v[11] = p[C.p11] * u[V.PreduspmRNAn]
1534
v[12] = p[C.p12] * u[V.duspmRNAc]
1635
v[13] = p[C.p13] * u[V.duspmRNAc]
17-
v[14] = p[C.V14] * u[V.ppERKc] * u[V.DUSPc] / ( p[C.Km14] + u[V.DUSPc] )
18-
v[15] = p[C.V15] * u[V.pDUSPc] / ( p[C.Km15] + u[V.pDUSPc] )
36+
v[14] = p[C.V14] * u[V.ppERKc] * u[V.DUSPc] / (p[C.Km14] + u[V.DUSPc])
37+
v[15] = p[C.V15] * u[V.pDUSPc] / (p[C.Km15] + u[V.pDUSPc])
1938
v[16] = p[C.p16] * u[V.DUSPc]
2039
v[17] = p[C.p17] * u[V.pDUSPc]
2140
v[18] = p[C.KimDUSP] * u[V.DUSPc] - p[C.KexDUSP] * (p[C.Vn] / p[C.Vc]) * u[V.DUSPn]
2241
v[19] = p[C.KimpDUSP] * u[V.pDUSPc] - p[C.KexpDUSP] * (p[C.Vn] / p[C.Vc]) * u[V.pDUSPn]
23-
v[20] = p[C.V20] * u[V.ppERKn] * u[V.DUSPn] / ( p[C.Km20] + u[V.DUSPn] )
24-
v[21] = p[C.V21] * u[V.pDUSPn] / ( p[C.Km21] + u[V.pDUSPn] )
42+
v[20] = p[C.V20] * u[V.ppERKn] * u[V.DUSPn] / (p[C.Km20] + u[V.DUSPn])
43+
v[21] = p[C.V21] * u[V.pDUSPn] / (p[C.Km21] + u[V.pDUSPn])
2544
v[22] = p[C.p22] * u[V.DUSPn]
2645
v[23] = p[C.p23] * u[V.pDUSPn]
27-
v[24] = p[C.V24] * u[V.ppERKc] * u[V.RSKc] / ( p[C.Km24] + u[V.RSKc] )
28-
v[25] = p[C.V25] * u[V.pRSKc] / ( p[C.Km25] + u[V.pRSKc] )
46+
v[24] = p[C.V24] * u[V.ppERKc] * u[V.RSKc] / (p[C.Km24] + u[V.RSKc])
47+
v[25] = p[C.V25] * u[V.pRSKc] / (p[C.Km25] + u[V.pRSKc])
2948
v[26] = p[C.KimRSK] * u[V.pRSKc] - p[C.KexRSK] * (p[C.Vn] / p[C.Vc]) * u[V.pRSKn]
30-
v[27] = p[C.V27] * u[V.pRSKn] * u[V.CREBn] / ( p[C.Km27] + u[V.CREBn] )
31-
v[28] = p[C.V28] * u[V.pCREBn] / ( p[C.Km28] + u[V.pCREBn] )
32-
v[29] = p[C.V29] * u[V.ppERKn] * u[V.Elk1n] / ( p[C.Km29] + u[V.Elk1n] )
33-
v[30] = p[C.V30] * u[V.pElk1n] / ( p[C.Km30] + u[V.pElk1n] )
34-
v[31] = p[C.V31] * (u[V.pCREBn] * u[V.pElk1n])^p[C.n31] / ( p[C.Km31]^p[C.n31] + (u[V.pCREBn] * u[V.pElk1n])^p[C.n31] + (u[V.Fn] / p[C.KF31])^p[C.nF31] )
49+
v[27] = p[C.V27] * u[V.pRSKn] * u[V.CREBn] / (p[C.Km27] + u[V.CREBn])
50+
v[28] = p[C.V28] * u[V.pCREBn] / (p[C.Km28] + u[V.pCREBn])
51+
v[29] = p[C.V29] * u[V.ppERKn] * u[V.Elk1n] / (p[C.Km29] + u[V.Elk1n])
52+
v[30] = p[C.V30] * u[V.pElk1n] / (p[C.Km30] + u[V.pElk1n])
53+
v[31] = p[C.V31] * (u[V.pCREBn] * u[V.pElk1n])^p[C.n31] / (p[C.Km31]^p[C.n31] + (u[V.pCREBn] * u[V.pElk1n])^p[C.n31] + (u[V.Fn] / p[C.KF31])^p[C.nF31])
3554
v[32] = p[C.p32] * u[V.PrecfosmRNAn]
3655
v[33] = p[C.p33] * u[V.cfosmRNAc]
3756
v[34] = p[C.p34] * u[V.cfosmRNAc]
38-
v[35] = p[C.V35] * u[V.ppERKc] * u[V.cFOSc] / ( p[C.Km35] + u[V.cFOSc] )
39-
v[36] = p[C.V36] * u[V.pRSKc] * u[V.cFOSc] / ( p[C.Km36] + u[V.cFOSc] )
40-
v[37] = p[C.V37] * u[V.pcFOSc] / ( p[C.Km37] + u[V.pcFOSc] )
57+
v[35] = p[C.V35] * u[V.ppERKc] * u[V.cFOSc] / (p[C.Km35] + u[V.cFOSc])
58+
v[36] = p[C.V36] * u[V.pRSKc] * u[V.cFOSc] / (p[C.Km36] + u[V.cFOSc])
59+
v[37] = p[C.V37] * u[V.pcFOSc] / (p[C.Km37] + u[V.pcFOSc])
4160
v[38] = p[C.p38] * u[V.cFOSc]
4261
v[39] = p[C.p39] * u[V.pcFOSc]
4362
v[40] = p[C.KimFOS] * u[V.cFOSc] - p[C.KexFOS] * (p[C.Vn] / p[C.Vc]) * u[V.cFOSn]
4463
v[41] = p[C.KimpcFOS] * u[V.pcFOSc] - p[C.KexpcFOS] * (p[C.Vn] / p[C.Vc]) * u[V.pcFOSn]
45-
v[42] = p[C.V42] * u[V.ppERKn] * u[V.cFOSn] / ( p[C.Km42] + u[V.cFOSn] )
46-
v[43] = p[C.V43] * u[V.pRSKn] * u[V.cFOSn] / ( p[C.Km43] + u[V.cFOSn] )
47-
v[44] = p[C.V44] * u[V.pcFOSn] / ( p[C.Km44] + u[V.pcFOSn] )
64+
v[42] = p[C.V42] * u[V.ppERKn] * u[V.cFOSn] / (p[C.Km42] + u[V.cFOSn])
65+
v[43] = p[C.V43] * u[V.pRSKn] * u[V.cFOSn] / (p[C.Km43] + u[V.cFOSn])
66+
v[44] = p[C.V44] * u[V.pcFOSn] / (p[C.Km44] + u[V.pcFOSn])
4867
v[45] = p[C.p45] * u[V.cFOSn]
4968
v[46] = p[C.p46] * u[V.pcFOSn]
5069
v[47] = p[C.p47] * u[V.DUSPn] * u[V.ppERKn] - p[C.m47] * u[V.DUSPn_ppERKn]
@@ -57,7 +76,7 @@ function diffeq!(du, u, p, t)
5776
v[54] = p[C.p54] * u[V.pDUSPn] * u[V.pERKn] - p[C.m54] * u[V.pDUSPn_pERKn]
5877
v[55] = p[C.p55] * u[V.pDUSPn_pERKn]
5978
v[56] = p[C.p56] * u[V.pDUSPn] * u[V.ERKn] - p[C.m56] * u[V.pDUSPn_ERKn]
60-
v[57] = p[C.V57] * u[V.pcFOSn]^p[C.n57] / ( p[C.Km57]^p[C.n57] + u[V.pcFOSn]^p[C.n57] )
79+
v[57] = p[C.V57] * u[V.pcFOSn]^p[C.n57] / (p[C.Km57]^p[C.n57] + u[V.pcFOSn]^p[C.n57])
6180
v[58] = p[C.p58] * u[V.PreFmRNAn]
6281
v[59] = p[C.p59] * u[V.FmRNAc]
6382
v[60] = p[C.p60] * u[V.FmRNAc]
@@ -66,41 +85,9 @@ function diffeq!(du, u, p, t)
6685
v[63] = p[C.p63] * u[V.Fn]
6786

6887
if p[C.Ligand] == p[C.EGF] # EGF=10nM
69-
if t < 300.
70-
du[V.ppMEKc] = 0.00258
71-
elseif t < 600.
72-
du[V.ppMEKc] = -0.00111
73-
elseif t < 900.
74-
du[V.ppMEKc] = -0.000625
75-
elseif t < 1200.
76-
du[V.ppMEKc] = -0.000135
77-
elseif t < 1800.
78-
du[V.ppMEKc] = -0.000135
79-
elseif t < 2700.
80-
du[V.ppMEKc] = -0.0000480
81-
elseif t < 3600.
82-
du[V.ppMEKc] = -0.00000852
83-
elseif t <= 5400.
84-
du[V.ppMEKc] = -0.00000728
85-
end
88+
du[V.ppMEKc] = get_ppMEK_slope(t, "EGF")
8689
elseif p[C.Ligand] == p[C.HRG] # HRG=10nM
87-
if t < 300.
88-
du[V.ppMEKc] = 0.00288
89-
elseif t < 600.
90-
du[V.ppMEKc] = 0.000451
91-
elseif t < 900.
92-
du[V.ppMEKc] = -0.000545
93-
elseif t < 1200.
94-
du[V.ppMEKc] = 0.0000522
95-
elseif t < 1800.
96-
du[V.ppMEKc] = 0.0000522
97-
elseif t < 2700.
98-
du[V.ppMEKc] = 0.0000399
99-
elseif t < 3600.
100-
du[V.ppMEKc] = -0.0000500
101-
elseif t <= 5400.
102-
du[V.ppMEKc] = -0.0000478
103-
end
90+
du[V.ppMEKc] = get_ppMEK_slope(t, "HRG")
10491
else
10592
du[V.ppMEKc] = 0.0
10693
end
@@ -111,7 +98,7 @@ function diffeq!(du, u, p, t)
11198
du[V.ERKn] = v[5] + v[7] * (p[C.Vc] / p[C.Vn]) + v[50] - v[51] + v[55] - v[56]
11299
du[V.pERKc] = v[1] - v[2] - v[3] + v[4] - v[8]
113100
du[V.pERKn] = -v[5] + v[6] + v[8] * (p[C.Vc] / p[C.Vn]) + v[48] - v[49] + v[53] - v[54]
114-
du[V.ppERKc] = v[2] - v[4] - v[9]
101+
du[V.ppERKc] = v[2] - v[4] - v[9]
115102
du[V.ppERKn] = -v[6] + v[9] * (p[C.Vc] / p[C.Vn]) - v[47] - v[52]
116103
du[V.Elk1n] = -v[29] + v[30]
117104
du[V.pElk1n] = v[29] - v[30]
@@ -260,9 +247,9 @@ function param_values()::Vector{Float64}
260247
p[C.Vn] = 0.22
261248
p[C.Vc] = 0.94
262249

263-
p[C.EGF] = 0.
264-
p[C.HRG] = 1.
265-
p[C.no_ligand] = 2.
250+
p[C.EGF] = 0.0
251+
p[C.HRG] = 1.0
252+
p[C.no_ligand] = 2.0
266253

267254
return p
268255
end
File renamed without changes.

examples/fos_model/simulation.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module Sim
22
include("./name2idx/parameters.jl")
33
include("./name2idx/species.jl")
4-
include("./set_model.jl")
4+
include("./ode.jl")
55
include("./observable.jl")
66

77
using .C
File renamed without changes.
File renamed without changes.

examples/nfkb_model/simulation.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module Sim
22
include("./name2idx/parameters.jl")
33
include("./name2idx/species.jl")
4-
include("./set_model.jl")
4+
include("./ode.jl")
55
include("./observable.jl")
66

77
using .C

src/BioMASS.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ export Model,
2222
const requirements = [
2323
joinpath("name2idx", "parameters.jl"),
2424
joinpath("name2idx", "species.jl"),
25-
"set_model.jl",
25+
"ode.jl",
2626
"observable.jl",
2727
"simulation.jl",
2828
"experimental_data.jl",
29-
"set_search_param.jl",
30-
"fitness.jl",
29+
"search_param.jl",
30+
"problem.jl",
3131
]
3232

3333
struct Model

0 commit comments

Comments
 (0)