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.
211 lines
6.5 KiB
211 lines
6.5 KiB
2 years ago
|
"""
|
||
|
Test synaptic connections between two different cell types.
|
||
|
|
||
|
usage: test_synapses.py [-h] [-t {simple,multisite}] [-c]
|
||
|
{sgc,tstellate,dstellate,tuberculoventral}
|
||
|
{bushy,tstellate,dstellate,octopus,tuberculoventral,pyramidal}
|
||
|
|
||
|
Compute AN only PSTH in postsynaptic cell
|
||
|
|
||
|
positional arguments:
|
||
|
{sgc,tstellate,dstellate,tuberculoventral}
|
||
|
Select presynaptic cell type
|
||
|
{bushy,tstellate,dstellate,octopus,tuberculoventral,pyramidal}
|
||
|
Select postsynaptic cell type
|
||
|
|
||
|
optional arguments:
|
||
|
-h, --help show this help message and exit
|
||
|
-t {simple,multisite}, --type {simple,multisite}
|
||
|
Set synapse type (simple, multisite)
|
||
|
-c, --convergence Use convergence = 1 for comparision between simple and
|
||
|
multi, instead of default table
|
||
|
|
||
|
|
||
|
This script:
|
||
|
|
||
|
1. Creates single pre- and postsynaptic cells
|
||
|
2. Creates multiple synaptic terminals between the two cells.
|
||
|
(the convergence is hard-coded below).
|
||
|
3. Stimulates the presynaptic cell by current injection.
|
||
|
4. Records and analyzes the resulting post-synaptic events.
|
||
|
|
||
|
This is used mainly to check that the strength, kinetics, and dynamics of
|
||
|
each synapse type is working as expected. A higher-level approach is
|
||
|
demonstrated in test_populations.py, in which the presynaptic cells are
|
||
|
automatically generated using expected patterns of connectivity.
|
||
|
"""
|
||
|
|
||
|
import argparse
|
||
|
import pyqtgraph as pg
|
||
|
from cnmodel.protocols import SynapseTest
|
||
|
from cnmodel import cells
|
||
|
from cnmodel.synapses import Synapse
|
||
|
|
||
|
|
||
|
import sys
|
||
|
|
||
|
|
||
|
def runtest():
|
||
|
parser = argparse.ArgumentParser(
|
||
|
description="Compute AN only PSTH in postsynaptic cell"
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
type=str,
|
||
|
dest="precell",
|
||
|
default="sgc",
|
||
|
choices=["sgc", "tstellate", "dstellate", "tuberculoventral"],
|
||
|
help="Select presynaptic cell type",
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
type=str,
|
||
|
dest="postcell",
|
||
|
default="bushy",
|
||
|
choices=[
|
||
|
"bushy",
|
||
|
"tstellate",
|
||
|
"dstellate",
|
||
|
"octopus",
|
||
|
"tuberculoventral",
|
||
|
"pyramidal",
|
||
|
],
|
||
|
help="Select postsynaptic cell type",
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
"-t",
|
||
|
"--type",
|
||
|
type=str,
|
||
|
dest="syntype",
|
||
|
default="multisite",
|
||
|
choices=["simple", "multisite"],
|
||
|
help="Set synapse type (simple, multisite)",
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
"-c",
|
||
|
"--convergence",
|
||
|
action="store_true",
|
||
|
dest="convergence",
|
||
|
help="Use convergence = 1 for comparision between simple and multi, instead of default table",
|
||
|
)
|
||
|
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
precell = args.precell
|
||
|
postcell = args.postcell
|
||
|
synapseType = args.syntype
|
||
|
use_conv_table = args.convergence
|
||
|
|
||
|
# These must be se3t to 1 to match data in original tables. Otherwise, it would be better
|
||
|
# to use the original tables.
|
||
|
|
||
|
if not use_conv_table:
|
||
|
convergence = {
|
||
|
"sgc": {
|
||
|
"bushy": 1,
|
||
|
"tstellate": 1,
|
||
|
"dstellate": 1,
|
||
|
"dstellate_eager": 10,
|
||
|
"octopus": 10,
|
||
|
"tuberculoventral": 1,
|
||
|
"pyramidal": 1,
|
||
|
"cartwheel": 0,
|
||
|
},
|
||
|
"dstellate": {"bushy": 10, "tstellate": 15, "dstellate": 5},
|
||
|
}
|
||
|
else:
|
||
|
convergence = {
|
||
|
"sgc": {
|
||
|
"bushy": 1,
|
||
|
"tstellate": 1,
|
||
|
"dstellate": 1,
|
||
|
"dstellate_eager": 1,
|
||
|
"octopus": 1,
|
||
|
"tuberculoventral": 1,
|
||
|
"pyramidal": 1,
|
||
|
"cartwheel": 0,
|
||
|
},
|
||
|
"dstellate": {
|
||
|
"bushy": 1,
|
||
|
"tstellate": 1,
|
||
|
"dstellate": 0,
|
||
|
"tuberculoventral": 1,
|
||
|
"pyramidal": 1,
|
||
|
"cartwheel": 0,
|
||
|
},
|
||
|
"tuberculoventral": {
|
||
|
"bushy": 1,
|
||
|
"tstellate": 1,
|
||
|
"dstellate": 0,
|
||
|
"tuberculoventral": 1,
|
||
|
"pyramidal": 1,
|
||
|
"cartwheel": 0,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
c = []
|
||
|
for cellType in [precell, postcell]:
|
||
|
if cellType == "sgc":
|
||
|
cell = cells.SGC.create()
|
||
|
elif cellType == "tstellate":
|
||
|
cell = cells.TStellate.create(debug=True, ttx=False)
|
||
|
elif (
|
||
|
cellType == "dstellate"
|
||
|
): # Type I-II Rothman model, similiar excitability (Xie/Manis, unpublished)
|
||
|
cell = cells.DStellate.create(model="RM03", debug=True, ttx=False)
|
||
|
elif cellType == "dstellate_eager": # From Eager et al.
|
||
|
cell = cells.DStellate.create(model="Eager", debug=True, ttx=False)
|
||
|
elif cellType == "bushy":
|
||
|
cell = cells.Bushy.create(debug=True, ttx=True)
|
||
|
elif cellType == "tuberculoventral":
|
||
|
cell = cells.Tuberculoventral.create(debug=True, ttx=True)
|
||
|
elif cellType == "pyramidal":
|
||
|
cell = cells.Pyramidal.create(debug=True, ttx=True)
|
||
|
elif cellType == "octopus":
|
||
|
cell = cells.Octopus.create(debug=True, ttx=True)
|
||
|
else:
|
||
|
raise ValueError("Unknown cell type '%s'" % cellType)
|
||
|
c.append(cell)
|
||
|
|
||
|
preCell, postCell = c
|
||
|
|
||
|
if not use_conv_table:
|
||
|
nTerminals = convergence.get(precell, {}).get(postcell, None)
|
||
|
else:
|
||
|
nTerminals = 1
|
||
|
# print("Warning: Unknown convergence for %s => %s, assuming %d" % (precell, postcell, nTerminals))
|
||
|
|
||
|
if [precell, postcell] == ["sgc", "bushy"]:
|
||
|
niter = 5
|
||
|
else:
|
||
|
niter = 20
|
||
|
# syntype = 'multisite'
|
||
|
# if len(sys.argv) > 3:
|
||
|
# syntype = sys.argv[3]
|
||
|
# assert(syntype in ['simple', 'multisite'])
|
||
|
if synapseType == "simple":
|
||
|
niter = 1
|
||
|
|
||
|
st = SynapseTest()
|
||
|
st.run(
|
||
|
preCell.soma,
|
||
|
postCell.soma,
|
||
|
nTerminals,
|
||
|
vclamp=-65.0,
|
||
|
iterations=niter,
|
||
|
synapsetype=synapseType,
|
||
|
)
|
||
|
st.show_result()
|
||
|
st.plots["VPre"].setYRange(-70.0, 10.0)
|
||
|
st.plots["EPSC"].setYRange(-2.0, 0.5)
|
||
|
st.plots["latency2080"].setYRange(0.0, 1.0)
|
||
|
st.plots["halfwidth"].setYRange(0.0, 1.0)
|
||
|
st.plots["RT"].setYRange(0.0, 0.2)
|
||
|
st.plots["latency"].setYRange(0.0, 1.0)
|
||
|
st.plots["latency_distribution"].setYRange(0.0, 1.0)
|
||
|
return st # need to keep st alive in memory
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
st = runtest()
|
||
|
if sys.flags.interactive == 0:
|
||
|
pg.QtGui.QApplication.exec_()
|