示例#1
0
文件: cells.py 项目: p-muller/PyNN
 def __init__(self, n, equations, **parameters):
     threshold = brian.EmpiricalThreshold(threshold=-40*mV, refractory=2*ms)
     reset = 0*mV
     refractory = 0*ms
     BaseNeuronGroup.__init__(self, n, equations,
                              threshold, reset, refractory,
                              implicit=True,
                              **parameters)
示例#2
0
 def threshold(self):
     return brian.EmpiricalThreshold(threshold=-40 * mV, refractory=2 * ms)
示例#3
0
def make_gbc_group(num, celsius=37):
    ''' Creates a sbc neuron group

    Parameters:
    -----------
    num : int
        Number of neurons in the neuron group.
    celsius : float
        Temperatur in degree celsius, Default = 37

    Output
    ------
    A brian NeuronGroup

    '''

    C = 12 * pF
    Eh = -43 * mV
    EK = -77 * mV  # -70mV in orig py file, but -77*mV in mod file
    El = -65 * mV
    ENa = 50 * mV

    nf = 0.85  # proportion of n vs p kinetics
    zss = 0.5  # steady state inactivation of glt

    q10 = 3.**((celsius - 22) / 10.)
    T10 = 10.**((celsius - 22) / 10.)

    q10_gbar = 1.5

    gnabar = calc_tf(q10_gbar, celsius) * 2500 * nS
    gkhtbar = calc_tf(q10_gbar, celsius) * 150 * nS
    gkltbar = calc_tf(q10_gbar, celsius) * 200 * nS
    ghbar = calc_tf(q10_gbar, celsius) * 20 * nS
    gl = calc_tf(q10_gbar, celsius) * 2 * nS

    eqs = """
    i_stim : amp
    dvm/dt = (ileak + ina + ikht + iklt + ih + i_syn +i_stim) / C : volt
    vu = vm/mV : 1 # unitless v
    """

    # Rothman 1993 Na channel
    eqs_na = """
    ina = gnabar*m**3*h*(ENa-vm) : amp

    dm/dt = malpha * (1. - m) - mbeta * m : 1
    dh/dt = halpha * (1. - h) - hbeta * h : 1

    malpha = (0.36 * q10 * (vu+49.)) / (1. - exp(-(vu+49.)/3.)) /ms : 1/ms
    mbeta = (-0.4 * q10 * (vu+58.)) / (1. - exp((vu+58)/20.)) /ms : 1/ms

    halpha = 2.4*q10 / (1. + exp((vu+68.)/3.)) /ms  +  0.8*T10 / (1. + exp(vu + 61.3)) /ms : 1/ms
    hbeta = 3.6*q10 / (1. + exp(-(vu+21.)/10.)) /ms : 1/ms
    """
    eqs += eqs_na

    # KHT channel (delayed-rectifier K+)
    eqs_kht = """
    ikht = gkhtbar*(nf*n**2 + (1-nf)*p)*(EK-vm) : amp
    dn/dt=q10*(ninf-n)/ntau : 1
    dp/dt=q10*(pinf-p)/ptau : 1
    ninf =   (1 + exp(-(vu + 15) / 5.))**-0.5 : 1
    pinf =  1. / (1 + exp(-(vu + 23) / 6.)) : 1
    ntau =  ((100. / (11*exp((vu+60) / 24.) + 21*exp(-(vu+60) / 23.))) + 0.7)*ms : ms
    ptau = ((100. / (4*exp((vu+60) / 32.) + 5*exp(-(vu+60) / 22.))) + 5)*ms : ms
    """
    eqs += eqs_kht

    # Ih channel (subthreshold adaptive, non-inactivating)
    eqs_ih = """
    ih = ghbar*r*(Eh-vm) : amp
    dr/dt=q10*(rinf-r)/rtau : 1
    rinf = 1. / (1+exp((vu + 76.) / 7.)) : 1
    rtau = ((100000. / (237.*exp((vu+60.) / 12.) + 17.*exp(-(vu+60.) / 14.))) + 25.)*ms : ms
    """
    eqs += eqs_ih

    # KLT channel (low threshold K+)
    eqs_klt = """
    iklt = gkltbar*w**4*z*(EK-vm) : amp
    dw/dt=q10*(winf-w)/wtau : 1
    dz/dt=q10*(zinf-z)/wtau : 1
    winf = (1. / (1 + exp(-(vu + 48.) / 6.)))**0.25 : 1
    zinf = zss + ((1.-zss) / (1 + exp((vu + 71.) / 10.))) : 1
    wtau = ((100. / (6.*exp((vu+60.) / 6.) + 16.*exp(-(vu+60.) / 45.))) + 1.5)*ms : ms
    ztau = ((1000. / (exp((vu+60.) / 20.) + exp(-(vu+60.) / 8.))) + 50)*ms : ms
    """
    eqs += eqs_klt

    # Leak
    eqs_leak = "ileak = gl*(El-vm) : amp"
    eqs += eqs_leak

    ### Excitatory synapse
    # Q10 for synaptic decay calculated from \cite{Postlethwaite2007}
    Tf = calc_tf(q10=0.75, celsius=celsius, ref_temp=37)
    taue_syn = 0.2 * Tf * ms
    taui_syn = 9.03 * calc_tf(q10=0.75, celsius=celsius,
                              ref_temp=34) * ms  # \cite{Xie2013}
    eqs_syn = """
    i_syn = ge_syn*(0*mV - vm) + gi_syn*(-77*mV - vm): amp
    dge_syn/dt = -ge_syn/taue_syn : siemens
    dgi_syn/dt = -gi_syn/taui_syn : siemens
    """
    eqs += eqs_syn

    if celsius < 37:
        refractory = 0.7 * ms
    else:
        refractory = 0.5 * ms

    group = brian.NeuronGroup(
        N=num,
        model=eqs,
        threshold=brian.EmpiricalThreshold(threshold=-20 * mV,
                                           refractory=refractory),
        implicit=True,
    )

    ### Set initial conditions
    group.vm = El
    group.r = 1. / (1 + np.exp((El / mV + 76.) / 7.))
    group.m = group.malpha / (group.malpha + group.mbeta)
    group.h = group.halpha / (group.halpha + group.halpha)
    group.w = (1. / (1 + np.exp(-(El / mV + 48.) / 6.)))**0.25
    group.z = zss + ((1. - zss) / (1 + np.exp((El / mV + 71.) / 10.)))
    group.n = (1 + np.exp(-(El / mV + 15) / 5.))**-0.5
    group.p = 1. / (1 + np.exp(-(El / mV + 23) / 6.))

    return group
示例#4
0
def make_mso_group(num,
                   gbar_na=3900,
                   gbar_klt=650,
                   gbar_h=520,
                   gbar_leak=13,
                   e_rest=-55.8,
                   voltage_clamp=False):
    ''' Creates a sbc neuron group

    Parameters:
    -----------
    num : int
        Number of neurons in the neuron group.
    celsius : float
        Temperatur in degree celsius, Default = 37
    Output
    ------
    A brian NeuronGroup

    '''
    C = 70 * pF  # [Couchman2010]

    e_h = -35 * mV  # [Baumann2013]
    e_k = -90 * mV

    e_e = -0 * mV  #[Colbourne2005]
    e_i = -70 * mV  #[Coulboure2005]

    e_na = 56.2 * mV
    e_rest = e_rest * mV  # Between -60 and -55

    nf = 1  # proportion of n vs p kinetics
    zss = 0.4  # steady state inactivation of glt

    gbar_na = gbar_na * nS
    gbar_klt = gbar_klt * nS
    gbar_h = gbar_h * nS
    gbar_leak = gbar_leak * nS

    if not voltage_clamp:
        eqs = """
        i_stim : amp
        dvm/dt = - (-i_stim + i_leak + i_na  + i_klt + i_h + i_syn) / C : volt
        vu = vm/mV : 1 # unitless v
        """

    else:
        eqs = """
        i_stim : amp
        vm : volt
        vu = vm/mV : 1 # unitless v
        """

    eqs_na = """
        g_na = gbar_na * m**3 * h : nsiemens
        i_na = g_na * (vm - e_na) : amp

        m_inf = 1 / (1 + exp((vu + 38) / -7)) :1
        h_inf = 1 / (1 + exp((vu + 65) / 6)) :1

        tau_m = (0.48 / (5 * exp((vu + 60) / 18) + 36 * exp((vu + 60) / -25)) ) * ms : ms
        tau_h = (19.23 / (7 * exp((vu + 60) / 11) + 10 * exp((vu + 60) / -25)) + 0.12) * ms : ms

        dm/dt = (m_inf - m) / tau_m :1
        dh/dt = (h_inf - h) / tau_h :1
        """
    eqs += eqs_na

    # [Baumann2013] (Dorsal Cells)
    eqs_h = """
        g_h = gbar_h * a  :nsiemens
        i_h =  g_h * (vm - e_h) : amp

        a_inf = 1 / (1 + exp(0.1 * (vu + 80.4))) :1
        tau_a = (79 + 417 * exp(-(vu + 61.5)**2 / 800)) *ms :ms

        da/dt = (a_inf - a) / tau_a :1
        """
    eqs += eqs_h

    # Potassium low threshold [Khurana2011]
    eqs_klt = """
        g_klt = gbar_klt * w**4 * z : nsiemens
        i_klt =  g_klt * (vm - e_k) : amp

        z_inf = zss + ((1-zss) / (1 + exp((vu + 57) / 5.44))) : 1
        w_inf = 1 / (1 + exp(-(vu + 57.3) / 11.7)) :1


        tau_w = 0.46 * (100. / (6. * exp((vu + 75.) / 12.15) + 24. * exp(-(vu + 75.) / 25) + 0.55)) * ms : ms
        tau_z = 0.24 * ((1000 / (exp((vu + 60) / 20) + exp(-(vu + 60) / 8))) + 50) * ms : ms

        dw/dt =( w_inf - w) / tau_w :1
        dz/dt = (z_inf - z) / tau_z :1
        """
    eqs += eqs_klt

    # leak
    eqs_leak = """
    g_leak = gbar_leak * 1 : nsiemens
    i_leak = g_leak * (vm - e_rest) : amp
    """
    eqs += eqs_leak

    #Synaptic Current
    eqs_syn = """
        ex_syn_i :1
        ex_syn_c :1
        in_syn_i :1
        in_syn_c :1

        i_syn = i_syn_ii + i_syn_ic + i_syn_ei + i_syn_ec : amp

        #inhibitory currents
        i_syn_ii = in_syn_i * siemens * (vm - e_i) : amp
        i_syn_ic = in_syn_c * siemens * (vm - e_i) : amp

        #exitatory currents
        i_syn_ei = ex_syn_i * siemens * (vm - e_e) : amp
        i_syn_ec = ex_syn_c * siemens * (vm - e_e) : amp
        """
    eqs += eqs_syn

    group = brian.NeuronGroup(
        N=num,
        model=eqs,
        threshold=brian.EmpiricalThreshold(threshold=-30 * mV,
                                           refractory=0.5 * ms),
        implicit=True,
    )

    ### Set initial conditions
    group.vm = e_rest
    group.m = group.m_inf
    group.h = group.h_inf
    group.w = group.w_inf
    group.z = group.z_inf
    group.a = group.a_inf

    return group