diff --git a/src/SimulationService.jl b/src/SimulationService.jl index 6723557..e5d4b07 100644 --- a/src/SimulationService.jl +++ b/src/SimulationService.jl @@ -121,11 +121,6 @@ end # Things that extract info from AMR JSON # joshday: should all of these be moved into OperationRequest? -# priors -function amr_get(obj::Config, ::Val{:priors}) - error("TODO: amr_get for :priors") -end - # Get `ModelingToolkit.ODESystem` from AMR function amr_get(obj::Config, ::Type{ODESystem}) model = obj.model @@ -177,6 +172,23 @@ function amr_get(obj::Config, ::Type{ODESystem}) structural_simplify(ODESystem(eqs, t, allfuncs, paramvars; defaults = [statefuncs .=> initial_vals; sym_defs], name=Symbol(obj.name))) end +# priors +function amr_get(obj::Config, sys::ODESystem, ::Val{:priors}) + paramlist = parameters(sys) + namelist = nameof.(paramlist) + + map(amr.semantics.ode.parameters) do p + @assert p.distribution.type === "StandardUniform1" + dist = Uniform(p.distribution.parameters.minimum, p.distribution.parameters.maximum) + paramlist[findfirst(x->x==Symbol(p.id),namelist)] => dist + end +end + +# data +function amr_get(obj::Config, ::Val{:data}) + error("TODO: amr_get for :data") +end + #-----------------------------------------------------------------------------# job endpoints get_job(id::String) = JobSchedulers.job_query(jobhash(id)) diff --git a/src/operations.jl b/src/operations.jl index b65eb3f..4ec4a02 100644 --- a/src/operations.jl +++ b/src/operations.jl @@ -63,7 +63,7 @@ end function Calibrate(o::OperationRequest) sys = amr_get(o.model, ODESystem) - priors = amr_get(o.model, Val(:priors)) + priors = amr_get(o.model, sys, Val(:priors)) data = o.df Calibrate(sys, o.timespan, priors, data) end