Skip to content

Commit c175c98

Browse files
Merge pull request #156 from ChrisRackauckas-Claude/remove-catalyst-from-sde-library
Remove Catalyst dependency from SDEProblemLibrary
2 parents 38a2df1 + 126b183 commit c175c98

File tree

2 files changed

+74
-17
lines changed

2 files changed

+74
-17
lines changed

lib/SDEProblemLibrary/Project.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,13 @@ uuid = "c72e72a9-a271-4b2b-8966-303ed956772e"
33
version = "0.1.7"
44

55
[deps]
6-
Catalyst = "479239e8-5488-4da2-87a7-35f2df7eef83"
76
DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e"
87
Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a"
98
RuntimeGeneratedFunctions = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47"
109
SciMLBase = "0bca4576-84f4-4d90-8ffe-ffa030f20462"
1110

1211
[compat]
1312
Aqua = "0.5"
14-
Catalyst = "14"
1513
DiffEqBase = "6"
1614
RuntimeGeneratedFunctions = "0.5"
1715
SciMLBase = "2.0.1"

lib/SDEProblemLibrary/src/SDEProblemLibrary.jl

Lines changed: 74 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ __precompile__(false)
22

33
module SDEProblemLibrary
44

5-
using DiffEqBase, Catalyst, Markdown
5+
using DiffEqBase, Markdown
66

77
import RuntimeGeneratedFunctions
88
RuntimeGeneratedFunctions.init(@__MODULE__)
@@ -493,24 +493,83 @@ Stochastic Brusselator
493493
prob_sde_bruss = SDEProblem(bruss_f, bruss_g, [3.0, 2.0], (0.0, 100.0), p,
494494
noise_rate_prototype = zeros(2, 4))
495495

496-
network = @reaction_network begin
497-
@parameters p1=0.01 p2=3.0 p3=3.0 p4=4.5 p5=2.0 p6=15.0 p7=20.0 p8=0.005 p9=0.01 p10=0.05
498-
p1, (X, Y, Z) --> 0
499-
hill(X, p2, 100.0, -4), 0 --> Y
500-
hill(Y, p3, 100.0, -4), 0 --> Z
501-
hill(Z, p4, 100.0, -4), 0 --> X
502-
hill(X, p5, 100.0, 6), 0 --> R
503-
hill(Y, p6, 100.0, 4) * 0.002, R --> 0
504-
p7, 0 --> S
505-
R * p8, S --> SP
506-
p9, SP + SP --> SP2
507-
p10, SP2 --> 0
496+
# Hill function helper
497+
hill(x, k, n, h) = h > 0 ? (x/k)^n / (1 + (x/k)^n) : 1 / (1 + (x/k)^abs(n))
498+
499+
function oscilreact_drift(du, u, p, t)
500+
X, Y, Z, R, S, SP, SP2 = u
501+
p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 = p
502+
503+
# Reaction rates based on the original network
504+
# p1, (X, Y, Z) --> 0
505+
r1 = p1
506+
# hill(X, p2, 100.0, -4), 0 --> Y
507+
r2 = hill(X, p2, 100.0, -4)
508+
# hill(Y, p3, 100.0, -4), 0 --> Z
509+
r3 = hill(Y, p3, 100.0, -4)
510+
# hill(Z, p4, 100.0, -4), 0 --> X
511+
r4 = hill(Z, p4, 100.0, -4)
512+
# hill(X, p5, 100.0, 6), 0 --> R
513+
r5 = hill(X, p5, 100.0, 6)
514+
# hill(Y, p6, 100.0, 4) * 0.002, R --> 0
515+
r6 = hill(Y, p6, 100.0, 4) * 0.002
516+
# p7, 0 --> S
517+
r7 = p7
518+
# R * p8, S --> SP
519+
r8 = R * p8
520+
# p9, SP + SP --> SP2
521+
r9 = p9
522+
# p10, SP2 --> 0
523+
r10 = p10
524+
525+
# Deterministic rates (drift terms)
526+
du[1] = -r1 * X + r4 # X: degradation + production from Z
527+
du[2] = -r1 * Y + r2 # Y: degradation + production from X
528+
du[3] = -r1 * Z + r3 # Z: degradation + production from Y
529+
du[4] = r5 - r6 * R # R: production from X - consumption
530+
du[5] = r7 - r8 * S # S: production - consumption to SP
531+
du[6] = r8 * S - 2 * r9 * SP^2 # SP: production from S - dimerization
532+
du[7] = r9 * SP^2 - r10 * SP2 # SP2: production from SP - degradation
533+
end
534+
535+
function oscilreact_diffusion(du, u, p, t)
536+
X, Y, Z, R, S, SP, SP2 = u
537+
p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 = p
538+
539+
# Same reaction rates as drift
540+
r1 = p1
541+
r2 = hill(X, p2, 100.0, -4)
542+
r3 = hill(Y, p3, 100.0, -4)
543+
r4 = hill(Z, p4, 100.0, -4)
544+
r5 = hill(X, p5, 100.0, 6)
545+
r6 = hill(Y, p6, 100.0, 4) * 0.002
546+
r7 = p7
547+
r8 = R * p8
548+
r9 = p9
549+
r10 = p10
550+
551+
# Stochastic terms (square root of rates for chemical Langevin)
552+
du[1] = sqrt(abs(r1 * X + r4))
553+
du[2] = sqrt(abs(r1 * Y + r2))
554+
du[3] = sqrt(abs(r1 * Z + r3))
555+
du[4] = sqrt(abs(r5 + r6 * R))
556+
du[5] = sqrt(abs(r7 + r8 * S))
557+
du[6] = sqrt(abs(r8 * S + 2 * r9 * SP^2))
558+
du[7] = sqrt(abs(r9 * SP^2 + r10 * SP2))
508559
end
509560

510561
"""
511562
An oscillatory chemical reaction system
563+
564+
Chemical oscillator with hill function regulation. The system has 7 species:
565+
X, Y, Z (main oscillatory species), R (regulator), S (substrate), SP (single phosphorylated),
566+
SP2 (double phosphorylated).
567+
568+
Parameters: p1=0.01, p2=3.0, p3=3.0, p4=4.5, p5=2.0, p6=15.0, p7=20.0, p8=0.005, p9=0.01, p10=0.05
569+
Initial conditions: [X=200.0, Y=60.0, Z=120.0, R=100.0, S=50.0, SP=50.0, SP2=50.0]
512570
"""
513-
prob_sde_oscilreact = SDEProblem(network, [200.0, 60.0, 120.0, 100.0, 50.0, 50.0, 50.0],
514-
(0.0, 4000.0), eval_module = @__MODULE__)
571+
prob_sde_oscilreact = SDEProblem(oscilreact_drift, oscilreact_diffusion,
572+
[200.0, 60.0, 120.0, 100.0, 50.0, 50.0, 50.0], (0.0, 4000.0),
573+
[0.01, 3.0, 3.0, 4.5, 2.0, 15.0, 20.0, 0.005, 0.01, 0.05])
515574

516575
end # module

0 commit comments

Comments
 (0)