@@ -52,7 +52,7 @@ function get_net_stoich(rs, specmap)
52
52
end
53
53
54
54
# given a ReactionStruct and a species map construct a MassActionJump
55
- function make_majump (rs, specmap, ratemap, params)
55
+ function make_majump (rs, specmap, ratemap, params, param_context )
56
56
reactant_stoich = get_substrate_stoich (rs, specmap)
57
57
net_stoich = get_net_stoich (rs, specmap)
58
58
if isempty (net_stoich)
@@ -62,7 +62,8 @@ function make_majump(rs, specmap, ratemap, params)
62
62
if typeof (rs. rate_org) == Symbol
63
63
rateconst = params[ratemap[rs. rate_org]]
64
64
elseif typeof (rs. rate_org) == Expr
65
- rateconst = eval (rs. rate_org)
65
+ # eval in param_context, in case Expr depends on params
66
+ rateconst = Base. eval (param_context, rs. rate_org)
66
67
elseif typeof (rs. rate_org) <: Number
67
68
rateconst = rs. rate_org
68
69
else
@@ -79,9 +80,16 @@ function network_to_jumpset(rn, specmap, ratemap, params)
79
80
majumpvec = Vector {typeof(empty_majump)} ()
80
81
cjumpvec = Vector {ConstantRateJump} ()
81
82
83
+ # populate dummy module with params as local variables
84
+ # (for eval-ing parameter expressions)
85
+ param_context = Module ()
86
+ for (param, index) in ratemap
87
+ Base. eval (param_context, :($ param = $ (params[index])))
88
+ end
89
+
82
90
for (i,rs) in enumerate (rn. reactions)
83
91
if rs. is_pure_mass_action
84
- push! (majumpvec, make_majump (rs, specmap, ratemap, params))
92
+ push! (majumpvec, make_majump (rs, specmap, ratemap, params, param_context ))
85
93
else
86
94
push! (cjumpvec, rn. jumps[i])
87
95
end
0 commit comments