Skip to content

Commit 5b98f80

Browse files
committed
up
1 parent 3e37fc4 commit 5b98f80

File tree

5 files changed

+45
-11
lines changed

5 files changed

+45
-11
lines changed

src/Catalyst.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ export make_empty_network, addspecies!, addparam!, addreaction!, reactionparamsm
9191
export dependants, dependents, substoichmat, prodstoichmat, netstoichmat
9292
export conservationlaws, conservedquantities, conservedequations, conservationlaw_constants
9393
export isequivalent
94+
export remake_noise_scaling
9495

9596
# depreciated functions to remove in future releases
9697
export params, numparams

src/expression_utils.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,9 @@ end
9696

9797
### Generic Expression Handling ###
9898

99-
# Convert an expression with equal signs (e.g. :(a=1.0, b=2.0)) to one with pairs (e.g. :(a=>1.0, b=>2.0))
99+
# Convert an expression that is a vector with symbols that have values assigned using `=` to vector
100+
# where the assignment instead uses pairs (e.g. :([a=1.0, b=2.0])). Used to e.g. convert default
101+
# reaction metadata to a form that can be evaluated as actual code.
100102
function expr_equal_vector_to_pairs(expr_vec)
101103
pair_vector = :([])
102104
foreach(arg -> push!(pair_vector.args, arg.args[1] => arg.args[2]), expr_vec.args)

src/reaction_network.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,6 @@ end
643643

644644
# Takes a reaction line and creates reaction(s) from it and pushes those to the reaction array.
645645
# Used to create multiple reactions from, for instance, `k, (X,Y) --> 0`.
646-
# Handles metadata, e.g. `1.0, Z --> 0, [noise_scaling=η]`.
647646
function push_reactions!(reactions::Vector{ReactionStruct}, sub_line::ExprValues, prod_line::ExprValues,
648647
rate::ExprValues, metadata::ExprValues, arrow::Symbol)
649648
# The rates, substrates, products, and metadata may be in a tupple form (e.g. `k, (X,Y) --> 0`).

src/reactionsystem.jl

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -761,32 +761,48 @@ end
761761
remake_ReactionSystem_internal(rs::ReactionSystem;
762762
default_reaction_metadata::Vector{Pair{Symbol, T}} = Vector{Pair{Symbol, Any}}()) where {T}
763763
764-
Takes a reaction systems and reameks it, returning a modified reaction system. Modifications depend
765-
on which arguments are provided.
764+
Takes a `ReactionSystem` and remakes it, returning a modified `ReactionSystem`. Modifications depend
765+
on which additional arguments are provided. The input `ReactionSystem` is not mutated.
766766
767767
Arguments:
768-
- `rs::ReactionSystem`: The `ReactionSystem` which you wish to make a remade version of.
768+
- `rs::ReactionSystem`: The `ReactionSystem` which you wish to remake.
769769
- `default_reaction_metadata::Vector{Pair{Symbol, T}}`: A vector with default `Reaction` metadata values.
770-
Each metadata in each `Reaction` of the updated `ReactionSystem` will have teh value desiganted in
770+
Each metadata in each `Reaction` of the updated `ReactionSystem` will have the value desiganted in
771771
`default_reaction_metadata` (however, `Reaction`s that already have that metadata designated will not
772772
have their value updated).
773773
"""
774-
#function remake_ReactionSystem_internal(rs::ReactionSystem; default_reaction_metadata::Vector{Pair{Symbol, T}} = Vector{Pair{Symbol, Any}}()) where {T}
775-
function remake_ReactionSystem_internal(rs; default_reaction_metadata = default_reaction_metadata)
776-
# Updates the metadata for all reactions (reactions are ignored).
774+
function remake_ReactionSystem_internal(rs::ReactionSystem; default_reaction_metadata = [])
775+
# Updates the metadata for all reactions (equation are ignored).
776+
updated_equations = [set_default_metadata(rx, default_reaction_metadata) for rx in reactions(rs)]
777777
updated_reactions = [set_default_metadata(rx, default_reaction_metadata) for rx in reactions(rs)]
778-
rs = @set rs.rxs = updated_reactions
778+
@set! rs.eqs = updated_equations
779+
@set! rs.rxs = updated_reactions
779780
return rs
780781
end
781782

782783
# For a `Reaction`, adds missing default metadata values. Equations are passed back unmodified.
783-
function set_default_metadata(rx, default_metadata)
784+
function set_default_metadata(rx::Reaction, default_metadata)
784785
missing_metadata = filter(md -> !in(md[1], entry[1] for entry in rx.metadata), default_metadata)
785786
updated_metadata = vcat(rx.metadata, missing_metadata)
786787
updated_metadata = convert(Vector{Pair{Symbol, Any}}, updated_metadata)
787788
return @set rx.metadata = updated_metadata
788789
end
790+
set_default_metadata(eq::Equation, default_metadata) = eq
789791

792+
"""
793+
remake_noise_scaling(rs::ReactionSystem, noise_scaling)
794+
795+
Creates an updated `ReactionSystem`. This is the old `ReactionSystem`, but each `Reaction` that does
796+
not have a `Noise_scaling` metadata have its noise_scaling metadata updated. The input `ReactionSystem`
797+
is not mutated.
798+
799+
Arguments:
800+
- `rs::ReactionSystem`: The `ReactionSystem` which you wish to remake.
801+
- `noise_scaling`: The updated noise scaling terms
802+
"""
803+
function remake_noise_scaling(rs::ReactionSystem, noise_scaling)
804+
return remake_ReactionSystem_internal(rs, default_reaction_metadata = [:noise_scaling => noise_scaling])
805+
end
790806

791807

792808
"""

test/model_simulation/simulate_SDEs.jl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,22 @@ let
234234
@test var(sol[:X1]) > var(sol[:X2]) > var(sol[:X3]) > var(sol[:X4]) > var(sol[:X5])
235235
end
236236

237+
# Tests the `remake_noise_scaling` function.
238+
let
239+
# Creates noise scaling networks.
240+
noise_scaling_network1 = @reaction_network begin
241+
p, 0 --> X, [noise_scaling=2.0]
242+
d, X --> 0
243+
end
244+
noise_scaling_network2 = remake_noise_scaling(noise_scaling_network1, 0.5)
245+
246+
# Checks that the two networks' reactions have the correct metadata.
247+
@test reactions(noise_scaling_network1)[1].metadata == [:noise_scaling => 2.0]
248+
@test reactions(noise_scaling_network1)[2].metadata == []
249+
@test reactions(noise_scaling_network2)[1].metadata == [:noise_scaling => 2.0]
250+
@test reactions(noise_scaling_network2)[2].metadata == [:noise_scaling => 0.5]
251+
end
252+
237253

238254
### Checks Simulations Don't Error ###
239255

0 commit comments

Comments
 (0)