/usr/share/pyshared/brian/library/synapses.py is in python-brian 1.4.1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | '''
Synapse models for Brian (no plasticity here).
'''
from brian.equations import *
from brian.units import check_units, second, amp, siemens
from brian.membrane_equations import Current
__all__ = ['exp_current', 'alpha_current', 'biexp_current', \
'exp_conductance', 'alpha_conductance', 'biexp_conductance', \
'exp_synapse', 'alpha_synapse', 'biexp_synapse']
__credits__ = dict(author='Romain Brette (brette@di.ens.fr)',
date='April 2008')
# -----------------
# Synaptic currents
# -----------------
@check_units(tau=second)
def exp_current(input, tau, current_name=None, unit=amp):
'''
Exponential synaptic current.
input = name of input variable (where presynaptic spikes act).
current_name = name of current variable
'''
current_name = current_name or unique_id()
current = Current() + exp_synapse(input, tau, unit, current_name)
current.set_current_name(current_name)
return current
@check_units(tau=second)
def alpha_current(input, tau, current_name=None, unit=amp):
'''
Alpha synaptic current.
current_name = name of current variable
'''
current_name = current_name or unique_id()
current = Current() + alpha_synapse(input, tau, unit, current_name)
current.set_current_name(current_name)
return current
@check_units(tau1=second, tau2=second)
def biexp_current(input, tau1, tau2, current_name=None, unit=amp):
'''
Biexponential synaptic current.
current_name = name of current variable
'''
current_name = current_name or unique_id()
current = Current() + biexp_synapse(input, tau1, tau2, unit, current_name)
current.set_current_name(current_name)
return current
# ---------------------
# Synaptic conductances
# ---------------------
@check_units(tau=second)
def exp_conductance(input, E, tau, conductance_name=None, unit=siemens):
'''
Exponential synaptic conductance.
conductance_name = name of conductance variable
E = synaptic reversal potential
'''
conductance_name = conductance_name or unique_id()
return Current('I=g*(E-vm): amp', I=input + '_current', g=conductance_name, E=E) + \
exp_synapse(input, tau, unit, conductance_name)
@check_units(tau=second)
def alpha_conductance(input, E, tau, conductance_name=None, unit=siemens):
'''
Alpha synaptic conductance.
conductance_name = name of conductance variable
E = synaptic reversal potential
'''
conductance_name = conductance_name or unique_id()
return Current('I=g*(E-vm): amp', I=input + '_current', g=conductance_name, E=E) + \
alpha_synapse(input, tau, unit, conductance_name)
@check_units(tau1=second, tau2=second)
def biexp_conductance(input, E, tau1, tau2, conductance_name=None, unit=siemens):
'''
Exponential synaptic conductance.
conductance_name = name of conductance variable
E = synaptic reversal potential
'''
conductance_name = conductance_name or unique_id()
return Current('I=g*(E-vm): amp', I=input + '_current', g=conductance_name, E=E) + \
biexp_synapse(input, tau1, tau2, unit, conductance_name)
# ---------------
# Synaptic inputs
# ---------------
@check_units(tau=second)
def exp_synapse(input, tau, unit, output=None):
'''
Exponentially decaying synaptic current/conductance:
g(t)=exp(-t/tau)
output = output variable name (plugged into the membrane equation).
input = input variable name (where spikes are received).
'''
if output is None:
output = input + '_out'
return Equations('''
dx/dt = -x*invtau : unit
y=x''', x=output, y=input, unit=unit, invtau=1. / tau)
@check_units(tau=second)
def alpha_synapse(input, tau, unit, output=None):
'''
Alpha synaptic current/conductance:
g(t)=(t/tau)*exp(1-t/tau)
output = output variable name (plugged into the membrane equation).
input = input variable name (where spikes are received).
The peak is 1 at time t=tau.
'''
if output is None:
output = input + '_out'
return Equations('''
dx/dt = (y-x)*invtau : unit
dy/dt = -y*invtau : unit
''', x=output, y=input, unit=unit, invtau=1. / tau)
@check_units(tau1=second, tau2=second)
def biexp_synapse(input, tau1, tau2, unit, output=None):
'''
Biexponential synaptic current/conductance:
g(t)=(tau2/(tau2-tau1))*(exp(-t/tau1)-exp(-t/tau2))
output = output variable name (plugged into the membrane equation).
input = input variable name (where spikes are received).
The peak is 1 at time t=tau1*tau2/(tau2-tau1)*log(tau2/tau1)
'''
if output is None:
output = input + '_out'
invpeak = (tau2 / tau1) ** (tau1 / (tau2 - tau1))
return Equations('''
dx/dt = (invpeak*y-x)*invtau1 : unit
dy/dt = -y*invtau2 : unit
''', x=output, y=input, unit=unit, invtau1=1. / tau1, invtau2=1. / tau2, invpeak=invpeak)
|