component S = Signal component LeakyIAF = struct binding construct V t gL vL Isyn C theta tspike spike Vreset trefractory refractory_end h = binding subthreshold_eq = [ D (V t h) = (((- gL) * (V - vL)) + Isyn) / C ] binding threshold_detect = [ spike = (V >= theta) ] binding tspike_assignment = [ tspike = if spike then t else tspike ] binding subthreshold_regime = Diagram.SEQUENCE subthreshold_eq (Diagram.SEQUENCE threshold_detect tspike_assignment) binding refractory_regime = [ [ V = Vreset ] [ refractory_end = (t >= (tspike + trefractory)) ] [ t = t + h ] ] return Diagram.RTRANSITION subthreshold_regime refractory_regime spike refractory_end end component TestLeakyIAF = struct binding diagram = LeakyIAF.construct ( S.realsig `V (S.realconst -65.0 )) ( S.realsig `t (S.realconst 0.0 )) ( S.realsig `gL (S.realconst 0.2 )) ( S.realsig `vL (S.realconst -70.0 )) ( S.realsig `Isyn (S.realconst 20.0 )) ( S.realsig `C (S.realconst 1.0 )) ( S.realsig `theta (S.realconst -25.0 )) ( S.realsig `tspike (S.realconst 0.0 )) ( S.boolsig `spike (S.boolconst false )) ( S.realsig `Vreset (S.realconst -65.0 )) ( S.realsig `trefractory (S.realconst 5.0 )) ( S.boolsig `refractory_end (S.boolconst false )) ( S.realsig `h (S.realconst 0.001 )) binding ivp = IVP.construct diagram `t `h 0.0 5.0 end