Example #1
0
    def _derivatives(self, coupling_variables):
        [x, y] = self._unwrap_state_vector()

        d_x = (-self.params["alpha"] * x**3 + self.params["beta"] * x**2 +
               self.params["gamma"] * x - y + coupling_variables["network_x"] +
               system_input(self.noise_input_idx[0]) + self.params["x_ext"])

        d_y = ((x - self.params["delta"] - self.params["epsilon"] * y) /
               self.params["tau"] + coupling_variables["network_y"] +
               system_input(self.noise_input_idx[1]) + self.params["y_ext"])

        return [d_x, d_y]
Example #2
0
    def _derivatives(self, coupling_variables):
        [x, y] = self._unwrap_state_vector()

        d_x = ((self.params["a"] - x**2 - y**2) * x - self.params["w"] * y +
               coupling_variables["network_x"] +
               system_input(self.noise_input_idx[0]) + self.params["x_ext"])

        d_y = ((self.params["a"] - x**2 - y**2) * y + self.params["w"] * x +
               coupling_variables["network_y"] +
               system_input(self.noise_input_idx[1]) + self.params["y_ext"])

        return [d_x, d_y]
Example #3
0
    def _derivatives(self, coupling_variables):
        (
            I_mu,
            I_syn_mu_exc,
            I_syn_mu_inh,
            I_syn_sigma_exc,
            I_syn_sigma_inh,
            firing_rate,
        ) = self._unwrap_state_vector()

        exc_inp, inh_inp, exc_inp_sq, inh_inp_sq = self._compute_couplings(
            coupling_variables)

        I_sigma = se.sqrt(
            2 * self.params["Jie_max"]**2 * I_syn_sigma_exc *
            self.params["tau_se"] * self.params["taum"] /
            ((1.0 + exc_inp) * self.params["taum"] + self.params["tau_se"]) +
            2 * self.params["Jii_max"]**2 * I_syn_sigma_inh *
            self.params["tau_si"] * self.params["taum"] /
            ((1.0 + inh_inp) * self.params["taum"] + self.params["tau_si"]) +
            self.params["sigmai_ext"]**2)

        # get values from linear-nonlinear lookup table
        firing_rate_now = self.callback_functions["firing_rate_lookup"](
            I_mu, I_sigma)
        tau = self.callback_functions["tau_lookup"](I_mu, I_sigma)

        d_I_mu = (self.params["Jie_max"] * I_syn_mu_exc +
                  self.params["Jii_max"] * I_syn_mu_inh +
                  system_input(self.noise_input_idx[0]) +
                  self.params["ext_inh_current"] - I_mu) / tau

        d_I_syn_mu_exc = ((1.0 - I_syn_mu_exc) * exc_inp -
                          I_syn_mu_exc) / self.params["tau_se"]

        d_I_syn_mu_inh = ((1.0 - I_syn_mu_inh) * inh_inp -
                          I_syn_mu_inh) / self.params["tau_si"]

        d_I_syn_sigma_exc = (
            (1.0 - I_syn_mu_exc)**2 * exc_inp_sq +
            (exc_inp_sq - 2.0 * self.params["tau_se"] *
             (exc_inp + 1.0)) * I_syn_sigma_exc) / (self.params["tau_se"]**2)

        d_I_syn_sigma_inh = (
            (1.0 - I_syn_mu_inh)**2 * inh_inp_sq +
            (inh_inp_sq - 2.0 * self.params["tau_si"] *
             (inh_inp + 1.0)) * I_syn_sigma_inh) / (self.params["tau_si"]**2)
        # firing rate as dummy dynamical variable with infinitely fast
        # fixed-point dynamics
        d_firing_rate = -self.params["lambda"] * (firing_rate -
                                                  firing_rate_now)

        return [
            d_I_mu,
            d_I_syn_mu_exc,
            d_I_syn_mu_inh,
            d_I_syn_sigma_exc,
            d_I_syn_sigma_inh,
            d_firing_rate,
        ]
Example #4
0
    def _derivatives(self, coupling_variables):
        [x] = self._unwrap_state_vector()
        d_x = (-x + (1.0 - x) * self._sigmoid(
            coupling_variables["node_inh_exc"] -
            coupling_variables["node_inh_inh"] +
            coupling_variables["network_inh_exc"] + self.params["ext_input"]) +
               system_input(self.noise_input_idx[0])) / self.params["tau"]

        return [d_x]
Example #5
0
    def _derivatives(self, coupling_variables):
        (
            I_mu,
            I_syn_mu_exc,
            I_syn_mu_inh,
            I_syn_sigma_exc,
            I_syn_sigma_inh,
            firing_rate,
        ) = self._unwrap_state_vector()

        exc_inp, inh_inp, exc_inp_sq, inh_inp_sq = self._compute_couplings(
            coupling_variables)

        I_sigma = self._get_current_sigma(
            I_syn_sigma_exc,
            I_syn_sigma_inh,
            exc_inp,
            inh_inp,
            self.params["Jie_max"],
            self.params["Jii_max"],
            self.params["sigmai_ext"],
        )

        # get values from linear-nonlinear lookup table
        firing_rate_now = self.callback_functions["firing_rate_lookup"](
            I_mu, I_sigma)
        tau = self.callback_functions["tau_lookup"](I_mu, I_sigma)

        d_I_mu = (self.params["Jie_max"] * I_syn_mu_exc +
                  self.params["Jii_max"] * I_syn_mu_inh +
                  system_input(self.noise_input_idx[0]) +
                  self.params["ext_inh_current"] - I_mu) / tau

        d_I_syn_mu_exc = self._get_synaptic_current_mu(I_syn_mu_exc, exc_inp,
                                                       self.params["tau_se"])
        d_I_syn_mu_inh = self._get_synaptic_current_mu(I_syn_mu_inh, inh_inp,
                                                       self.params["tau_si"])

        d_I_syn_sigma_exc = self._get_synaptic_current_sigma(
            I_syn_mu_exc, I_syn_sigma_exc, exc_inp, exc_inp_sq,
            self.params["tau_se"])
        d_I_syn_sigma_inh = self._get_synaptic_current_sigma(
            I_syn_mu_inh, I_syn_sigma_inh, inh_inp, inh_inp_sq,
            self.params["tau_si"])
        # firing rate as dummy dynamical variable with infinitely fast fixed-point dynamics
        d_firing_rate = -self.params["lambda"] * (firing_rate -
                                                  firing_rate_now)

        return [
            d_I_mu,
            d_I_syn_mu_exc,
            d_I_syn_mu_inh,
            d_I_syn_sigma_exc,
            d_I_syn_sigma_inh,
            d_firing_rate,
        ]
Example #6
0
    def _derivatives(self, coupling_variables):
        (
            voltage,
            h_T,
            syn_ext,
            syn_inh,
            dsyn_ext,
            dsyn_inh,
            firing_rate,
        ) = self._unwrap_state_vector()
        # voltage dynamics
        d_voltage = -(
            self._get_leak_current(voltage)
            + self._get_excitatory_current(voltage, syn_ext)
            + self._get_inhibitory_current(voltage, syn_inh)
            + self.params["ext_current"]
        ) / self.params["tau"] - (1.0 / self.params["C_m"]) * (
            self._get_potassium_leak_current(voltage) + self._get_T_type_current(voltage, h_T)
        )
        # channel dynamics: T-type
        d_h_T = (self._h_inf_T(voltage) - h_T) / self._tau_h_T(voltage)
        # synaptic dynamics
        d_syn_ext = dsyn_ext
        d_syn_inh = dsyn_inh
        d_dsyn_ext = (
            self.params["gamma_e"] ** 2
            * (
                coupling_variables["node_inh_exc"]
                + coupling_variables["network_inh_exc"]
                + system_input(self.noise_input_idx[0])
                - syn_ext
            )
            - 2 * self.params["gamma_e"] * dsyn_ext
        )
        d_dsyn_inh = (
            self.params["gamma_r"] ** 2 * (coupling_variables["node_inh_inh"] - syn_inh)
            - 2 * self.params["gamma_r"] * dsyn_inh
        )
        # firing rate as dummy dynamical variable with infinitely fast
        # fixed-point dynamics
        firing_rate_now = self._get_firing_rate(voltage)
        d_firing_rate = -self.params["lambda"] * (firing_rate - firing_rate_now)

        return [
            d_voltage,
            d_h_T,
            d_syn_ext,
            d_syn_inh,
            d_dsyn_ext,
            d_dsyn_inh,
            d_firing_rate,
        ]
Example #7
0
    def _derivatives(self, coupling_variables):
        [s, firing_rate] = self._unwrap_state_vector()

        current = (self.params["w"] * self.params["J"] * s +
                   self.params["J"] * coupling_variables["network_S"] +
                   self.params["exc_current"])
        firing_rate_now = self._get_firing_rate(current)
        d_s = ((-s / self.params["tau"]) +
               (1.0 - s) * self.params["gamma"] * firing_rate_now +
               system_input(self.noise_input_idx[0]))
        # firing rate as dummy dynamical variable with infinitely fast
        # fixed-point dynamics
        d_firing_rate = -self.params["lambda"] * (firing_rate -
                                                  firing_rate_now)

        return [d_s, d_firing_rate]
Example #8
0
    def _derivatives(self, coupling_variables):
        (
            voltage,
            ca_conc,
            h_T,
            m_h1,
            m_h2,
            syn_ext,
            syn_inh,
            dsyn_ext,
            dsyn_inh,
            firing_rate,
        ) = self._unwrap_state_vector()
        # voltage dynamics
        d_voltage = -(self._get_leak_current(voltage) +
                      self._get_excitatory_current(voltage, syn_ext) +
                      self._get_inhibitory_current(voltage, syn_inh) +
                      self.params["ext_current"]) / self.params["tau"] - (
                          1.0 / self.params["C_m"]) * (
                              self._get_potassium_leak_current(voltage) +
                              self._get_T_type_current(voltage, h_T) +
                              self._get_anomalous_rectifier_current(
                                  voltage, m_h1, m_h2))
        # calcium concetration dynamics
        d_ca_conc = (
            self.params["alpha_Ca"] * self._get_T_type_current(voltage, h_T) -
            (ca_conc - self.params["Ca_0"]) / self.params["tau_Ca"])

        # channel dynamics: T-type and rectifier current
        d_h_T = (self._h_inf_T(voltage) - h_T) / self._tau_h_T(voltage)
        d_m_h1 = ((self._m_inf_h(voltage) *
                   (1.0 - m_h2) - m_h1) / self._tau_m_h(voltage) -
                  self.params["k3"] * self._P_h(ca_conc) * m_h1 +
                  self.params["k4"] * m_h2)
        d_m_h2 = self.params["k3"] * self._P_h(
            ca_conc) * m_h1 - self.params["k4"] * m_h2

        # synaptic dynamics
        d_syn_ext = dsyn_ext
        d_syn_inh = dsyn_inh
        d_dsyn_ext = (self.params["gamma_e"]**2 *
                      (coupling_variables["node_exc_exc"] +
                       coupling_variables["network_exc_exc"] +
                       system_input(self.noise_input_idx[0]) - syn_ext) -
                      2 * self.params["gamma_e"] * dsyn_ext)
        d_dsyn_inh = (self.params["gamma_r"]**2 *
                      (coupling_variables["node_exc_inh"] - syn_inh) -
                      2 * self.params["gamma_r"] * dsyn_inh)
        # firing rate as dummy dynamical variable with infinitely fast
        # fixed-point dynamics
        firing_rate_now = self._get_firing_rate(voltage)
        d_firing_rate = -self.params["lambda"] * (firing_rate -
                                                  firing_rate_now)

        return [
            d_voltage,
            d_ca_conc,
            d_h_T,
            d_m_h1,
            d_m_h2,
            d_syn_ext,
            d_syn_inh,
            d_dsyn_ext,
            d_dsyn_inh,
            d_firing_rate,
        ]