Source code for tvb.rateML.generatedModels.epileptor

from tvb.simulator.models.base import Model, ModelNumbaDfun
import numpy
from numpy import *
from numba import guvectorize, float64
from tvb.basic.neotraits.api import NArray, Final, List, Range

[docs]class EpileptorT(ModelNumbaDfun): a = NArray( label=":math:`a`", default=numpy.array([1.0]), doc="""""" ) b = NArray( label=":math:`b`", default=numpy.array([3.0]), doc="""""" ) c = NArray( label=":math:`c`", default=numpy.array([1.0]), doc="""""" ) d = NArray( label=":math:`d`", default=numpy.array([5.0]), doc="""""" ) r = NArray( label=":math:`r`", default=numpy.array([0.00035]), domain=Range(lo=0.0, hi=0.001, step=0.00005), doc="""""" ) s = NArray( label=":math:`s`", default=numpy.array([4.0]), doc="""""" ) x0 = NArray( label=":math:`x0`", default=numpy.array([-1.6]), domain=Range(lo=-3.0, hi=-1.0, step=0.1), doc="""""" ) Iext = NArray( label=":math:`Iext`", default=numpy.array([3.1]), domain=Range(lo=1.5, hi=5.0, step=0.1), doc="""""" ) slope = NArray( label=":math:`slope`", default=numpy.array([0.]), domain=Range(lo=-16.0, hi=6.0, step=0.1), doc="""""" ) Iext2 = NArray( label=":math:`Iext2`", default=numpy.array([0.45]), domain=Range(lo=0.0, hi=1.0, step=0.05), doc="""""" ) tau = NArray( label=":math:`tau`", default=numpy.array([10.0]), doc="""""" ) aa = NArray( label=":math:`aa`", default=numpy.array([6.0]), doc="""""" ) bb = NArray( label=":math:`bb`", default=numpy.array([2.0]), doc="""""" ) Kvf = NArray( label=":math:`Kvf`", default=numpy.array([0.0]), domain=Range(lo=0.0, hi=4.0, step=0.5), doc="""""" ) Kf = NArray( label=":math:`Kf`", default=numpy.array([0.0]), domain=Range(lo=0.0, hi=4.0, step=0.5), doc="""""" ) Ks = NArray( label=":math:`Ks`", default=numpy.array([0.0]), domain=Range(lo=-4.0, hi=4.0, step=0.1), doc="""""" ) tt = NArray( label=":math:`tt`", default=numpy.array([1.0]), domain=Range(lo=0.001, hi=10.0, step=0.001), doc="""""" ) modification = NArray( label=":math:`modification`", default=numpy.array([0]), doc="""""" ) state_variable_range = Final( label="State Variable ranges [lo, hi]", default={"x1": numpy.array([-2., 1.]), "y1": numpy.array([-20., 2.]), "z": numpy.array([2.0, 5.0]), "x2": numpy.array([-2., 0.]), "y2": numpy.array([0., 2.]), "g": numpy.array([-1., 1.])}, doc="""state variables""" ) variables_of_interest = List( of=str, label="Variables or quantities available to Monitors", choices=('x1', 'x2', ), default=('x1', 'x2', ), doc="Variables to monitor" ) state_variables = ['x1', 'y1', 'z', 'x2', 'y2', 'g'] _nvar = 6 cvar = numpy.array([0,1,2,3,4,5,], dtype = numpy.int32)
[docs] def dfun(self, vw, c, local_coupling=0.0): vw_ = vw.reshape(vw.shape[:-1]).T c_ = c.reshape(c.shape[:-1]).T deriv = _numba_dfun_EpileptorT(vw_, c_, self.a, self.b, self.c, self.d, self.r, self.s, self.x0, self.Iext, self.slope, self.Iext2, self.tau, self.aa, self.bb, self.Kvf, self.Kf, self.Ks, self.tt, self.modification, local_coupling) return deriv.T[..., numpy.newaxis]
@guvectorize([(float64[:], float64[:], float64, float64, float64, float64, float64, float64, float64, float64, float64, float64, float64, float64, float64, float64, float64, float64, float64, float64, float64, float64[:])], '(n),(m)' + ',()'*19 + '->(n)', nopython=True) def _numba_dfun_EpileptorT(vw, coupling, a, b, c, d, r, s, x0, Iext, slope, Iext2, tau, aa, bb, Kvf, Kf, Ks, tt, modification, local_coupling, dx): "Gufunc for EpileptorT model equations." # long-range coupling c_pop0 = coupling[0] c_pop1 = coupling[1] c_pop2 = coupling[2] c_pop3 = coupling[3] c_pop4 = coupling[4] c_pop5 = coupling[5] x1 = vw[0] y1 = vw[1] z = vw[2] x2 = vw[3] y2 = vw[4] g = vw[5] # derived variables ztmp = z-4 # Conditional variables if x1 < 0.0: ydot0 = -a * x1**2 + b * x1 else: ydot0 = slope - x2 + 0.6 * ztmp**2 if z < 0.0: ydot2 = - 0.1 * z**7 else: ydot2 = 0 if modification: h = x0 + 3. / (1. + exp(-(x1 + 0.5) / 0.1)) else: h = 4 * (x1 - x0) + ydot2 if x2 < -0.25: ydot4 = 0.0 else: ydot4 = aa * (x2 + 0.25) dx[0] = tt * (y1 - z + Iext + Kvf * c_pop0 + ydot0 ) dx[1] = tt * (c - d * x1**2 - y1) dx[2] = tt * (r * (h - z + Ks * c_pop0)) dx[3] = tt * (-y2 + x2 - x2**3 + Iext2 + bb * g - 0.3 * (z - 3.5) + Kf * c_pop1) dx[4] = tt * (-y2 + ydot4) / tau dx[5] = tt * (-0.01 * (g - 0.1 * x1) )