@@ -1894,21 +1894,22 @@ First, we define the problem for the `PDMP` package.
18941894
18951895```julia
18961896function SynapseProblem(
1897- xc,
1898- xd,
1899- t1,
1900- t2,
1901- events_bap,
1902- bap_by_epsp,
1903- glu,
1904- p_synapse,
1905- nu,
1906- algo::T,
1907- agg = nothing;
1908- saveat = [],
1909- save_everystep = isempty(saveat),
1910- kwargs...
1911- ) where {T <: CHV}
1897+ xc,
1898+ xd,
1899+ t1,
1900+ t2,
1901+ events_bap,
1902+ bap_by_epsp,
1903+ glu,
1904+ p_synapse,
1905+ nu,
1906+ algo::T,
1907+ agg = nothing
1908+ vr_agg = VR_FRM();
1909+ saveat = [],
1910+ save_everystep = isempty(saveat),
1911+ kwargs...,
1912+ ) where {T<:CHV}
19121913 problem = PDMP.PDMPProblem(
19131914 (dxc, xc, xd, p, t) -> F_synapse(dxc, xc, xd, p, t, events_bap, bap_by_epsp),
19141915 (rate, xc, xd, p, t, sum_rate) -> R_synapse(rate, xc, xd, p, t, sum_rate, glu),
@@ -2066,22 +2067,23 @@ function buildRxDependencyGraph(nu)
20662067end
20672068
20682069function SynapseProblem(
2069- xc,
2070- xd,
2071- t1,
2072- t2,
2073- events_bap,
2074- bap_by_epsp,
2075- glu,
2076- p_synapse,
2077- nu,
2078- algo,
2079- agg;
2080- jumps = nothing,
2081- save_positions = (false, true),
2082- saveat = [],
2083- save_everystep = isempty(saveat),
2084- kwargs...
2070+ xc,
2071+ xd,
2072+ t1,
2073+ t2,
2074+ events_bap,
2075+ bap_by_epsp,
2076+ glu,
2077+ p_synapse,
2078+ nu,
2079+ algo,
2080+ agg
2081+ vr_agg;
2082+ jumps = nothing,
2083+ save_positions = (false, true),
2084+ saveat = [],
2085+ save_everystep = isempty(saveat),
2086+ kwargs...,
20852087)
20862088 p = (
20872089 xd0 = copy(xd),
@@ -2107,6 +2109,7 @@ function SynapseProblem(
21072109 oprob,
21082110 agg,
21092111 jumps;
2112+ vr_aggregator = vr_agg,
21102113 dep_graph,
21112114 save_positions,
21122115 saveat,
@@ -2125,22 +2128,23 @@ We define functions to run the evolution of the whole synapse. The evolution inc
21252128```julia
21262129# adapted from SynapseElife/src/SynapseModel.jl
21272130function evolveSynapse(
2128- xc0::Vector{T},
2129- xd0,
2130- p_synapse::SynapseParams,
2131- events_sorted_times,
2132- is_pre_or_post_event,
2133- bap_by_epsp,
2134- is_glu_released,
2135- nu,
2136- algos,
2137- agg = nothing;
2138- progress = false,
2139- abstol = 1e-8,
2140- reltol = 1e-7,
2141- save_positions = (false, true),
2142- saveat = [],
2143- kwargs...
2131+ xc0::Vector{T},
2132+ xd0,
2133+ p_synapse::SynapseParams,
2134+ events_sorted_times,
2135+ is_pre_or_post_event,
2136+ bap_by_epsp,
2137+ is_glu_released,
2138+ nu,
2139+ algos,
2140+ agg = nothing
2141+ vr_agg = VR_FRM();
2142+ progress = false,
2143+ abstol = 1e-8,
2144+ reltol = 1e-7,
2145+ save_positions = (false, true),
2146+ saveat = [],
2147+ kwargs...,
21442148) where {T}
21452149 tt, XC,
21462150 XD = evolveSynapse_noformat(
@@ -2153,7 +2157,8 @@ function evolveSynapse(
21532157 is_glu_released,
21542158 nu,
21552159 algos,
2156- agg;
2160+ agg
2161+ vr_agg;
21572162 progress,
21582163 abstol,
21592164 reltol,
@@ -2167,22 +2172,23 @@ end
21672172
21682173# adapted from SynapseElife/src/SynapseModel.jl
21692174function evolveSynapse_noformat(
2170- xc0::Vector{T},
2171- xd0,
2172- p_synapse::SynapseParams,
2173- events_sorted_times,
2174- is_pre_or_post_event,
2175- bap_by_epsp,
2176- is_glu_released,
2177- nu,
2178- algos,
2179- agg = nothing;
2180- progress = false,
2181- abstol = 1e-8,
2182- reltol = 1e-7,
2183- save_positions = (false, true),
2184- saveat = [],
2185- kwargs...
2175+ xc0::Vector{T},
2176+ xd0,
2177+ p_synapse::SynapseParams,
2178+ events_sorted_times,
2179+ is_pre_or_post_event,
2180+ bap_by_epsp,
2181+ is_glu_released,
2182+ nu,
2183+ algos,
2184+ agg = nothing
2185+ vr_agg = VR_FRM();
2186+ progress = false,
2187+ abstol = 1e-8,
2188+ reltol = 1e-7,
2189+ save_positions = (false, true),
2190+ saveat = [],
2191+ kwargs...,
21862192) where {T}
21872193 if save_positions isa Tuple{Bool, Bool}
21882194 save_positionsON = save_positions
@@ -2209,53 +2215,50 @@ function evolveSynapse_noformat(
22092215 events_bap = events_sorted_times[is_pre_or_post_event .== false]
22102216
22112217 # function to simulate the synapse when Glutamate is ON
2212- SimGluON = (xc,
2213- xd,
2214- t1,
2215- t2,
2216- glu) -> SynapseProblem(
2217- xc,
2218- xd,
2219- t1,
2220- t2,
2221- events_bap,
2222- bap_by_epsp,
2223- glu,
2224- p_synapse,
2225- nu,
2226- algos[1],
2227- agg;
2228- jumps,
2229- reltol,
2230- abstol,
2231- saveat,
2232- save_positions = save_positionsON,
2233- kwargs...
2234- )
2218+ SimGluON =
2219+ (xc, xd, t1, t2, glu) -> SynapseProblem(
2220+ xc,
2221+ xd,
2222+ t1,
2223+ t2,
2224+ events_bap,
2225+ bap_by_epsp,
2226+ glu,
2227+ p_synapse,
2228+ nu,
2229+ algos[1],
2230+ agg
2231+ vr_agg;
2232+ jumps,
2233+ reltol,
2234+ abstol,
2235+ saveat,
2236+ save_positions = save_positionsON,
2237+ kwargs...,
2238+ )
22352239
22362240 # function to simulate the synapse when Glutamate is OFF
2237- SimGluOFF = (xc,
2238- xd,
2239- t1,
2240- t2) -> SynapseProblem(
2241- xc,
2242- xd,
2243- t1,
2244- t2,
2245- events_bap,
2246- bap_by_epsp,
2247- zero(T),
2248- p_synapse,
2249- nu,
2250- algos[2],
2251- agg;
2252- jumps,
2253- reltol,
2254- abstol,
2255- saveat,
2256- save_positions = save_positionsOFF,
2257- kwargs...
2258- )
2241+ SimGluOFF =
2242+ (xc, xd, t1, t2) -> SynapseProblem(
2243+ xc,
2244+ xd,
2245+ t1,
2246+ t2,
2247+ events_bap,
2248+ bap_by_epsp,
2249+ zero(T),
2250+ p_synapse,
2251+ nu,
2252+ algos[2],
2253+ agg
2254+ vr_agg;
2255+ jumps,
2256+ reltol,
2257+ abstol,
2258+ saveat,
2259+ save_positions = save_positionsOFF,
2260+ kwargs...,
2261+ )
22592262
22602263 # random variable for Glutamate concentration
22612264 gluDist = Gamma(1 / p_synapse.glu_cv^2, p_synapse.glu_cv^2)
@@ -2368,15 +2371,38 @@ const algorithms = (
23682371 (
23692372 label = "PDMP",
23702373 agg = nothing,
2374+ vr_agg = VR_FRM(),
23712375 solver = (CHV(solver), CHV(solver)),
2372- saveat = []
2376+ saveat = [],
23732377 ),
23742378 (
23752379 label = "Coevolve",
23762380 agg = Coevolve(),
2381+ vr_agg = VR_FRM(),
23772382 solver = (solver, solver),
2378- saveat = 1 / p_synapse.sampling_rate
2379- )
2383+ saveat = 1 / p_synapse.sampling_rate,
2384+ ),
2385+ (
2386+ label = "VR_Direct",
2387+ agg = Coevolve(),
2388+ vr_agg = VR_Direct(),
2389+ solver = (solver, solver),
2390+ saveat = 1 / p_synapse.sampling_rate,
2391+ ),
2392+ (
2393+ label = "VR_DirectFW",
2394+ agg = Coevolve(),
2395+ vr_agg = VR_DirectFW(),
2396+ solver = (solver, solver),
2397+ saveat = 1 / p_synapse.sampling_rate,
2398+ ),
2399+ (
2400+ label = "VR_FRM",
2401+ agg = Coevolve(),
2402+ vr_agg = VR_FRM(),
2403+ solver = (solver, solver),
2404+ saveat = 1 / p_synapse.sampling_rate,
2405+ ),
23802406);
23812407```
23822408
@@ -2398,7 +2424,8 @@ for algo in algorithms
23982424 [true],
23992425 nu,
24002426 algo.solver,
2401- algo.agg;
2427+ algo.agg
2428+ alg.vr_agg;
24022429 save_positions = (false, true),
24032430 saveat = algo.saveat,
24042431 save_everystep = false
@@ -2443,7 +2470,8 @@ for algo in algorithms
24432470 [true],
24442471 nu,
24452472 $(algo).solver,
2446- $(algo).agg;
2473+ $(algo).agg
2474+ $(algo).vr_agg;
24472475 save_positions = (false, true),
24482476 saveat = $(algo).saveat,
24492477 save_everystep = false
0 commit comments