@@ -2,7 +2,7 @@ __precompile__(false)
2
2
3
3
module SDEProblemLibrary
4
4
5
- using DiffEqBase, Catalyst, Markdown
5
+ using DiffEqBase, Markdown
6
6
7
7
import RuntimeGeneratedFunctions
8
8
RuntimeGeneratedFunctions. init (@__MODULE__ )
@@ -493,24 +493,83 @@ Stochastic Brusselator
493
493
prob_sde_bruss = SDEProblem (bruss_f, bruss_g, [3.0 , 2.0 ], (0.0 , 100.0 ), p,
494
494
noise_rate_prototype = zeros (2 , 4 ))
495
495
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))
508
559
end
509
560
510
561
"""
511
562
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]
512
570
"""
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 ])
515
574
516
575
end # module
0 commit comments