You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.2 KiB
76 lines
2.2 KiB
2 years ago
|
import numpy as np
|
||
|
from neuron import h
|
||
|
|
||
|
from .psd import PSD
|
||
|
|
||
|
|
||
|
class Exp2PSD(PSD):
|
||
|
"""
|
||
|
Simple double-exponential PSD from Neuron (fast).
|
||
|
"""
|
||
|
|
||
|
def __init__(
|
||
|
self, section, terminal, weight=0.01, loc=0.5, tau1=0.1, tau2=0.3, erev=0
|
||
|
):
|
||
|
"""
|
||
|
Parameters
|
||
|
----------
|
||
|
section : Section
|
||
|
The postsynaptic section in which to insert the receptor mechanism.
|
||
|
terminal : Terminal
|
||
|
The presynaptic Terminal instance
|
||
|
weight :
|
||
|
loc : float, default=0.5
|
||
|
Position on the postsynaptic section to insert the mechanism, from [0..1].
|
||
|
|
||
|
"""
|
||
|
PSD.__init__(self, section, terminal)
|
||
|
self.syn = h.Exp2Syn(loc, sec=section)
|
||
|
self.syn.tau1 = tau1
|
||
|
self.syn.tau2 = tau2
|
||
|
self.syn.e = erev
|
||
|
|
||
|
terminal.connect(self.syn, weight=weight)
|
||
|
|
||
|
@property
|
||
|
def n_psd(self):
|
||
|
"""The number of postsynaptic densities represented by this object.
|
||
|
"""
|
||
|
return 1
|
||
|
|
||
|
def record(self, *args):
|
||
|
"""Create a new set of vectors to record parameters for each release
|
||
|
site.
|
||
|
|
||
|
|
||
|
Parameters
|
||
|
----------
|
||
|
\*args :
|
||
|
Allowed parameters are 'i' (current), 'g' (conductnace), and 'Open' (open probability).
|
||
|
|
||
|
"""
|
||
|
self.vectors = {"ampa": [], "nmda": []}
|
||
|
for receptor in self.vectors:
|
||
|
for mech in getattr(self, receptor + "_psd"):
|
||
|
vec = {}
|
||
|
for var in args:
|
||
|
vec[var] = h.Vector()
|
||
|
vec[var].record(getattr(mech, "_ref_" + var))
|
||
|
self.vectors[receptor].append(vec)
|
||
|
|
||
|
def get_vector(self, var):
|
||
|
"""Return an array from a previously recorded vector.
|
||
|
|
||
|
Parameters
|
||
|
----------
|
||
|
receptor : str
|
||
|
May be 'ampa' or 'nmda'
|
||
|
var : str
|
||
|
Allowed parameters are 'i' (current), 'g' (conductance), and 'Open' (open probability).
|
||
|
i : int, default=0
|
||
|
The integer index of the psd (if this is a multi-site synapse)
|
||
|
|
||
|
"""
|
||
|
v = self.vectors[receptor][i][var]
|
||
|
return np.array(v)
|