# Minimal example on how to use the model libraries used in:
# Lindroos & Hellgren Kotaleski 2020
from neuron import h
import MSN_builder as build
import pickle
import matplotlib.pyplot as plt
# Load model mechanisms
import neuron as nrn
nrn.load_mechanisms('mechanisms/single')
h.load_file('stdlib.hoc')
h.load_file('import3d.hoc')
# specs
specs = {'dspn': {
'N': 71,
'lib': 'Libraries/D1_71bestFit_updRheob.pkl',
'par': 'params_dMSN.json',
'morph': 'Morphologies/WT-dMSN_P270-20_1.02_SGA1-m24.swc'},
'ispn': {
'N': 34,
'lib': 'Libraries/D2_34bestFit_updRheob.pkl',
'par': 'params_iMSN.json',
'morph': 'Morphologies/WT-iMSN_P270-09_1.01_SGA2-m1.swc'}
}
# chose cell type ('ispn' or 'dspn') and model id(s) to simulate
#---------------------------------------------------------------
cell_type = 'dspn' # 'dspn'/'ispn'
model_iterator = range(5) # range(specs[cell_type]['N']) gives all models
# open library (channel distributions etc)
with open(specs[cell_type]['lib'], 'rb') as f:
model_sets = pickle.load(f, encoding="latin1")
# simulate model(s)
OUT = {}
for cell_index in model_iterator:
# initiate cell
cell = build.MSN( params=specs[cell_type]['par'],
morphology=specs[cell_type]['morph'],
variables=model_sets[cell_index]['variables'] )
# set current injection
rheobase = model_sets[cell_index]['rheobase']
Istim = h.IClamp(0.5, sec=cell.soma)
Istim.delay = 100
Istim.dur = 1000
Istim.amp = (rheobase) *1e-3
# record vectors
tm = h.Vector()
tm.record(h._ref_t)
vm = h.Vector()
vm.record(cell.soma(0.5)._ref_v)
# run simulation
h.finitialize(-80)
# run simulation
while h.t < 1000:
h.fadvance()
OUT[cell_index] = {'tm':tm.to_python(), 'vm':vm.to_python, 'rheo':rheobase}
# plot
for cell_index in OUT:
plt.plot(OUT[cell_index]['tm'], OUT[cell_index]['vm'], \
label='mdl:{} rhb:{:.0f}'.format(cell_index,OUT[cell_index]['rheo']))
plt.legend()
plt.show()