from tvbo import SimulationStudy
import bsplot
bsplot.style.use("tvbo")
import importlib
import Jansen1995_plot as jr_plot
odir = "./figures"Jansen & Rit (1995)
Replication of electroencephalogram and evoked potential simulations from the Jansen-Rit neural mass model.
Replication of the simulation experiments from [1].
s = SimulationStudy.from_file("Jansen1995_extracted.yaml")exp1 = s.get_experiment(1)# ── Experiment 1: C sweep (Fig. 3) ──
res1 = exp1.run("tvboptim")
fig3 = jr_plot.plot_fig3(res1)
fig3.savefig(odir + "Jansen1995_Fig3.png", dpi=300)
fig3
============================================================
STEP 1: Running simulation...
============================================================
Simulation period: 2.0 ms, dt: 0.002 ms
Transient period: 0.5 ms
Simulation complete.
============================================================
STEP 2: Running explorations...
============================================================
> C_sweep_fig3
Explorations complete.
============================================================
Experiment complete.
============================================================

# ── Experiment 2: Parameter space exploration (Fig. 4) ──
res2 = s.get_experiment(2).run("tvboptim")
============================================================
STEP 1: Running simulation...
============================================================
Simulation period: 2.0 ms, dt: 0.002 ms
Transient period: 0.5 ms
Simulation complete.
============================================================
STEP 2: Running explorations...
============================================================
> param_space_4D_fig4
Explorations complete.
============================================================
Experiment complete.
============================================================
importlib.reload(jr_plot)
fig4 = jr_plot.plot_fig4(res2)
fig4.savefig(odir + "/Jansen1995_Fig4.png", dpi=300)
fig4
# ── Experiment 3: Symmetric K sweep (Fig. 5) ──
exp3 = s.get_experiment(3)
res3 = exp3.run("tvboptim")
fig5 = jr_plot.plot_fig5(res3, exp3)
fig5.savefig(odir + "/Jansen1995_Fig5.png", dpi=300)
fig5
============================================================
STEP 1: Running simulation...
============================================================
Simulation period: 2.0 ms, dt: 0.002 ms
Transient period: 0.5 ms
Simulation complete.
============================================================
STEP 2: Running explorations...
============================================================
> K_sweep_symmetric_fig5
Explorations complete.
============================================================
Experiment complete.
============================================================

# ── Experiment 4: Asymmetric K sweep (Fig. 6) ──
exp4 = s.get_experiment(4)
res4 = exp4.run("tvboptim")
============================================================
STEP 1: Running simulation...
============================================================
Simulation period: 2.0 ms, dt: 0.002 ms
Transient period: 0.5 ms
Simulation complete.
============================================================
STEP 2: Running explorations...
============================================================
> K_sweep_asymmetric_fig6
Explorations complete.
============================================================
Experiment complete.
============================================================
importlib.reload(jr_plot)
fig6 = jr_plot.plot_fig6(res4, exp4)
fig6.savefig(odir + "/Jansen1995_Fig6.png", dpi=300)
fig6
# ── Experiment 5: VEP — identical columns, no delay (Figs. 8, 9, 10) ──
exp5 = s.get_experiment(5)
res5 = exp5.run("tvboptim")
============================================================
STEP 1: Running simulation...
============================================================
Simulation period: 1.5 ms, dt: 0.002 ms
Transient period: 6.0 ms
Simulation complete.
============================================================
STEP 2: Running explorations...
============================================================
> VEP_symmetric_K_fig8
> VEP_asymmetric_K_fig9
> VEP_single_trials_fig10
Explorations complete.
============================================================
Experiment complete.
============================================================
importlib.reload(jr_plot)
fig8 = jr_plot.plot_fig8(res5, exp5)
fig8.savefig(odir + "/Jansen1995_Fig8.png", dpi=300)
fig8
importlib.reload(jr_plot)
fig9 = jr_plot.plot_fig9(res5, exp5)
fig9.savefig(odir + "/Jansen1995_Fig9.png", dpi=300)
fig9
importlib.reload(jr_plot)
fig10 = jr_plot.plot_fig10(res5, exp5)
fig10.savefig(odir + "/Jansen1995_Fig10.png", dpi=300)
fig10
# ── Experiment 6: VEP — different columns, with delay (Fig. 11) ──
exp6 = s.get_experiment(6)
res6 = exp6.run("tvboptim")
============================================================
STEP 1: Running simulation...
============================================================
Simulation period: 1.5 ms, dt: 0.002 ms
Transient period: 6.0 ms
Simulation complete.
============================================================
STEP 2: Running explorations...
============================================================
> VEP_delayed_fig11
Explorations complete.
============================================================
Experiment complete.
============================================================
importlib.reload(jr_plot)
fig11=jr_plot.plot_fig11(res6, exp6)
fig11.savefig(odir + "/Jansen1995_Fig11.png", dpi=300)
fig11
References
[1]
B. H. Jansen and V. G. Rit, “Electroencephalogram and visual evoked potential generation in a mathematical model of coupled cortical columns,” Biological Cybernetics, vol. 73, no. 4, pp. 357–366, Sep. 1995, doi: 10.1007/bf00199471.