Source code for neuronunit.optimization.model_parameters

import numpy as np
import os
from collections import OrderedDict
from numpy import sqrt, pi
import collections
import numpy as np
from neuronunit.optimization import get_neab
# http://www.physics.usyd.edu.au/teach_res/mp/mscripts/
# ns_izh002.m
import collections
from collections import OrderedDict
import numpy as np

THIS_DIR = os.path.dirname(os.path.realpath(__file__))

path_params = {}
path_params['model_path'] = os.path.realpath(os.path.join(THIS_DIR,'..','models','NeuroML2','LEMS_2007One.xml'))
# Which Parameters
# https://www.izhikevich.org/publications/spikes.htm


type2007 = collections.OrderedDict([
  #              C    k     vr  vt vpeak   a      b   c    d  celltype
  ('RS',        (100, 0.7,  -60, -40, 35, 0.03,   -2, -50,  100,  1)),
  ('IB',        (150, 1.2,  -75, -45, 50, 0.01,   5, -56,  130,   2)),
  ('CH',        (50,  1.5,  -60, -40, 25, 0.03,   1, -40,  150,   3)),
  ('LTS',       (100, 1.0,  -56, -42, 40, 0.03,   8, -53,   20,   4)),
  ('FS',        (20,  1.0,  -55, -40, 25, 0.2,   -2, -45,  -55,   5)),
  ('TC',        (200, 1.6,  -60, -50, 35, 0.01,  15, -60,   10,   6)),
  ('TC_burst',  (200, 1.6,  -60, -50, 35, 0.01,  15, -60,   10,   6)),
  ('RTN',       (40,  0.25, -65, -45,  0, 0.015, 10, -55,   50,   7)),
  ('RTN_burst', (40,  0.25, -65, -45,  0, 0.015, 10, -55,   50,   7))])




'''
temp = {k:[] for k in ['C','k','vr','vt','vpeak','a','b','c','d']  }
for i,k in enumerate(temp.keys()):
    for v in type2007.values():
        temp[k].append(v[i])

explore_param = {k:(np.min(v),np.max(v)) for k,v in temp.items()}
model_params = OrderedDict(explore_param)

'''


# Fast spiking cannot be reproduced as it requires modifications to the standard Izhi equation,
# which are expressed in this mod file.
# https://github.com/OpenSourceBrain/IzhikevichModel/blob/master/NEURON/izhi2007b.mod
reduced_dict = OrderedDict([(k,[]) for k in ['C','k','vr','vt','vPeak','a','b','c','d']])

#OrderedDict
for i,k in enumerate(reduced_dict.keys()):
    for v in type2007.values():
        reduced_dict[k].append(v[i])

reduced_cells = OrderedDict([(k,[]) for k in ['RS','IB','LTS','TC','TC_burst']])

for index,key in enumerate(reduced_cells.keys()):
    reduced_cells[key] = {}
    for k,v in reduced_dict.items():
        reduced_cells[key][k] = v[index]

explore_param = {k:(np.min(v),np.max(v)) for k,v in reduced_dict.items()}
model_params = OrderedDict(explore_param)

# page 1
# http://www.rctn.org/vs265/izhikevich-nn03.pdf




[docs]def transcribe_units(input_dic): ''' Move between OSB unit conventions and NEURON unit conventions. ''' # From OSB models mparams = {} mparams['a'] = 0.03 mparams['b'] = -2 mparams['C'] = 100 mparams['c'] = -50 mparams['vr'] = -60 mparams['vt'] = -40 mparams['vpeak'] = 35 mparams['k'] = 0.7 mparams['d'] = 100 # FROM the MOD file. vanilla_NRN = {} #vanilla_NRN['v0'] = -60# (mV) vanilla_NRN['k'] = 7.0E-4# (uS / mV) vanilla_NRN['vr'] = -60# (mV) vanilla_NRN['vt'] = -40# (mV) vanilla_NRN['vpeak'] = 35# (mV) vanilla_NRN['a'] = 0.03# (kHz) vanilla_NRN['b'] = -0.002# (uS) vanilla_NRN['c'] = -50# (mV) vanilla_NRN['d'] = 0.1# (nA) vanilla_NRN['C'] = 1.0E-4# (microfarads) m2m = {} for k,v in vanilla_NRN.items(): m2m[k] = vanilla_NRN[k]/mparams[k] input_dic['vpeak'] = input_dic['vPeak'] input_dic.pop('vPeak', None) input_dic.pop('dt', None) for k,v in input_dic.items(): input_dic[k] = v * m2m[k] return input_dic
#print(pred0,pred1) # General parameters SEED_LTS = 428577 SEED_CONN = 193566 SEED_GEN = 983651 DT = 0.1 # (ms) Time step TSTART = 0 TSTOP = 5000 V_INIT = -60.0 # Cell parameters LENGTH = sqrt(20000/pi) # in um DIAMETER = sqrt(20000/pi) # in um AREA = 1e-8 * pi * LENGTH * DIAMETER # membrane area in cm2 TAU = 20 # time constant in ms CAPACITANCE = 1 # capacitance in muF/cm2 G_L = 1e-3 * CAPACITANCE / TAU # leak conductance in S/cm2 V_REST = -60 # resting potential a_RS = 0.001 b_RS = 0.1 # full adaptation b_RS = 0.005 # weaker adaptation a_LTS = 0.02 b_LTS = 0.0 a_FS = 0.001 b_FS = 0.0 TAU_W = 600 DELTA = 2.5 # Spike parameters VTR = -50 # threshold in mV VTOP = 40 # top voltage during spike in mV VBOT = -60 # reset voltage in mV REFRACTORY = 5.0/2 # refractory period in ms (correction for a bug in IF_CG4) # Synapse parameters RS_parameters = { 'cm': 1000*AREA*CAPACITANCE, 'tau_m': TAU, 'v_rest': V_REST, 'v_thresh': VTR, 'tau_refrac': REFRACTORY+DT, 'v_reset': VBOT, 'v_spike': VTR+1e-6, 'a': 1000.0*a_RS, 'b': b_RS, 'tau_w': TAU_W, 'delta_T': DELTA } LTS_parameters = RS_parameters.copy() LTS_parameters.update({'a': 1000.0*a_LTS, 'b': b_LTS}) # 1000 is for uS --> nS FS_parameters = RS_parameters.copy() FS_parameters.update({'a': 1000.0*a_FS, 'b': b_FS}) #print(model_params) ''' https://www.izhikevich.org/publications/izhikevich.m Model parameters and dimensions: t time [ms] C membrane capacitance [pF = pA.ms.mV-1] v membrane potential [mV] rate of change of membrane potential [mV.ms-1 = V.s-1] capacitor current [pA] vr resting membrane potential [mV] vt instantaneous threshold potential [mV] k constant (“1/R”) [pA.mV-1 (10-9 Ω-1)] u recovery variable [pA] S stimulus (synaptic: excitatory or inhibitory, external, noise) [pA] rate of change of recovery variable [pA.ms-1] a recovery time constant [ms-1] b constant (“1/R”) [pA.mV-1 (10-9 Ω-1) ] c potential reset value [mV] d outward minus inward currents activated during the spike and affecting the after-spike behavior [pA] vpeak spike cutoff value [mV] +model_params['vr'] = np.linspace(-95.0,-30.0,9) ''';