In silico hippocampal modeling for multi-target pharmacotherapy in schizophrenia (Sherif et al 2020)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:258738
"Using a hippocampal CA3 computer model with 1200 neurons, we examined the effects of alterations in NMDAR, HCN (Ih current), and GABAAR on information flow (measured with normalized transfer entropy), and in gamma activity in local field potential (LFP). We found that altering NMDARs, GABAAR, Ih, individually or in combination, modified information flow in an inverted-U shape manner, with information flow reduced at low and high levels of these parameters. Theta-gamma phase-amplitude coupling also had an inverted-U shape relationship with NMDAR augmentation. The strong information flow was associated with an intermediate level of synchrony, seen as an intermediate level of gamma activity in the LFP, and an intermediate level of pyramidal cell excitability"
Reference:
1 . Sherif MA, Neymotin SA, Lytton WW (2020) In silico hippocampal modeling for multi-target pharmacotherapy in schizophrenia. NPJ Schizophr 6:25 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Hippocampus;
Cell Type(s): Hippocampus CA3 pyramidal GLU cell; Hippocampus CA3 interneuron basket GABA cell; Hippocampus CA3 stratum oriens lacunosum-moleculare interneuron;
Channel(s): I h;
Gap Junctions:
Receptor(s): AMPA; NMDA;
Gene(s): NR2A GRIN2A;
Transmitter(s): Glutamate; Gaba;
Simulation Environment: NEURON;
Model Concept(s): Schizophrenia;
Implementer(s): Sherif, Mohamed [mohamed.sherif.md at gmail.com];
Search NeuronDB for information about:  Hippocampus CA3 pyramidal GLU cell; Hippocampus CA3 interneuron basket GABA cell; AMPA; NMDA; I h; Gaba; Glutamate;
/
CA3modelCode_npjSchizophrenia_September2020--main
data
README.md
CA1ih.mod
CA1ika.mod *
CA1ikdr.mod *
CA1ina.mod *
cagk.mod *
caolmw.mod *
capr.mod *
expsynstdp.mod
Gfluctp.mod *
HCN1.mod *
HCN2.mod
IA.mod
icaolmw.mod *
icapr.mod *
iholmkop.mod *
iholmw.mod *
ihpyrkop.mod *
ihstatic.mod *
infot.mod *
kahppr.mod *
kaolmkop.mod *
kapyrkop.mod *
kcaolmw.mod *
kcpr.mod *
kdrbwb.mod *
kdrolmkop.mod *
kdrpr.mod *
kdrpyrkop.mod *
km.mod
misc.mod *
MyExp2Syn.mod *
MyExp2SynAlpha.mod *
MyExp2SynBB.mod *
MyExp2SynNMDA.mod *
MyExp2SynNMDABB.mod *
nafbwb.mod *
nafolmkop.mod *
nafpr.mod *
nafpyrkop.mod *
samnutils.mod
sampen.mod
stats.mod
updown.mod *
vecst.mod *
wrap.mod *
analysisPlottingCode.py
aux_fun.inc *
batch.py
conf.py
declist.hoc *
decmat.hoc *
decnqs.hoc *
decvec.hoc *
default.hoc *
drline.hoc *
fig1sample.png
fig1simulationConfig.cfg
geom.py
grvec.hoc *
init.hoc
labels.hoc *
local.hoc *
misc.h
network.py
nqs.hoc *
nqs_utils.hoc *
nrnoc.hoc *
params.py
psd.py
pyinit.py
pywrap.hoc *
run.py
runone.py
simctrl.hoc *
stats.hoc *
syncode.hoc *
updown.hoc
xgetargs.hoc *
                            
'''this file contains conig parameters for the model'''
import configparser
import io
import numpy as np

# default config as string
def_config = """
[seed]
#iseed = [1234, 6912, 9876, 6789,3219]
#wseed = [4321, 5012, 9281, 8130,6143]
iseed = 1234
wseed = 4321
pseed = 4321
signal_rseed = 7483
[chan]
# ampatau1 =
# amptau2 =
# nmdatau1 =
# nmdatau2 =
[run]
# tstop = 20000
tstop = 3000
dt = 0.1
saveout = 0
simstr = 134mar10_mpi_rxd_test_
statestr = 14mar8_600s_700s_700s_continue_700s_A
dorun = 0
verbose = 0
saveSomaVolt = 0
getOnlyInterneuronsSomaVolt = 0
strCellsRecordVoltage = 0 800 1000
cvodeactive=0
recdt = 10 
recvdt = 1
binsz = 5
savestate = 0
restorestate = 0
loadtstop = 0
saveconn = 0
recordNetStimInputs = 0
saveNetStimInputs = 0
recPyrInputSpikes = 0
savePyrInputSpikes = 0
recSignalSpikes = 0
saveSignalSpikes = 0
[rxd]
useRXD = 0
caDiffCoeff = 0
PV_frate = 5.0
PV_init = 0.2
useIP3 = 1
gip3 = 120400.0
gserca = 4.0
gleak = 3.0
cacytinit = 100e-6
caerinit = 100e-6
[net]
connections = 1
scale=0
includeCCKcs = 0
hCurrent_g_pv_scaling = 1.0
hCurrent_g_olm_scaling = 1.0
hCurrent_g_pyr_scaling = 1.0
hCurrent_g_cck_scaling = 1.0
CB1R_cck_somaPyr_weight = 1.0
CB1R_cck_Adend2Pyr_weight = 1.0
CB1R_pyr_recurrent_weight = 1.0
CB1R_pyr_pv_weight = 1.0
CB1R_MS_weight = 1.0
CB1R_cck_Adend3_weight = 1.0
CB1R_pyr_olm_weight = 1.0
olm_NMDARw_scaling = 1.0
pv_NMDARw_scaling = 1.0
pyr_NMDARw_scaling = 1.0
cck_Soma_NMDARw_scaling = 1.0
cck_Adend2_NMDARw_scaling = 1.0
cck_Adend3_NMDARw_scaling = 1.0
olm_AMPARw_scaling = 1.0
# wirety = swire
# wirety = convwire
pyrPop_cNum = 800
basPop_cNum = 200
olmPop_cNum = 200
cck_somaPyrPop_cNum = 100
cck_Adend2PyrPop_cNum = 100
cck_Adend3Pop_cNum = 0
pyr_pyr_location = mid-apical
olm_pyr_location = distal-apical
pyr_bas_conv = 100
pyr_olm_conv = 10
pyr_cck_somaPyr_conv = 100
pyr_cck_Adend2Pyr_conv = 20
pyr_pyr_conv = 25
bas_bas_conv = 60
bas_pyr_conv = 50
cck_somaPyr_pyr_conv = 50
cck_Adend2Pyr_pyr_conv = 50
cck_somaPyr_bas_conv = 40
bas_cck_somaPyr_conv = 20 
cck_somaPyr_cck_somaPyr_conv = 30
bas_olm_conv = 1
olm_pyr_conv = 20
pyr_cck_Adend3_conv = 10
cck_Adend3_pyr_conv = 20
nmfracca = 0
extrinsic_pyr_AMPAfR_weight_scale = 1
intrinsic_pyr_AMPAfR_weight_scale = 1
extrinsic_pyr_GABAfR_weight_scale = 1
intrinsic_pyr_GABAfR_weight_scale = 1
extrinsic_pv_AMPAfR_weight_scale = 1
intrinsic_pv_AMPAfR_weight_scale = 1
extrinsic_pv_GABAfR_weight_scale = 1
intrinsic_pv_GABAfR_weight_scale = 1
extrinsic_olm_AMPAfR_weight_scale = 1
intrinsic_olm_AMPAfR_weight_scale = 1
extrinsic_olm_GABAfR_weight_scale = 1
intrinsic_olm_GABAfR_weight_scale = 1
extrinsic_cck_AMPAfR_weight_scale = 1
intrinsic_cck_AMPAfR_weight_scale = 1
extrinsic_cck_GABAfR_weight_scale = 1
intrinsic_cck_GABAfR_weight_scale = 1
tau2_bas_pyr_GA_scale = 1
[stim]
noise = 1
DoMakeNoise = 1
UseNetStim = 1
useGfluct = 0
DoMakeSignal = 0
PyrGABAw = 0
PyrGABAISI = 1
PyrAMPAw = 0.05e-3
PyrAMPAISI = 4
PyrNMDAw = 6.5e-3
PyrNMDAISI = 100
BasAMPAw = 0
BasAMPAISI = 1
BasGABAw = 0
BasGABAISI = 1
#sgrhzEE = 1000
sgrhzEE = 1000
#sgrhzEI = 500
sgrhzEI = 0
#sgrhzIE = 1000
#sgrhzIE = 500
sgrhzIE = 250
#sgrhzII = 500
sgrhzII = 0
#sgrhzENM = 10
sgrhzENM = 0
#sgrhzINM = 10
sgrhzINM = 0
#sgrhzINM = 30
#E4RexGain = 2.0
#E4RexGain = 1.0
E4RexGain = 0.5
#sgrhzLTSSlowSlowGaba = 20
sgrhzLTSSlowSlowGaba = 0
EXGain = 10.0
#EXGain = 5.0
MedialSeptum_gain_olm = 1.0
MedialSeptum_gain_pv = 1.0
MedialSeptum_gain_cck = 1.0
signal_isi = 200
[iclamp]
pyr = 0.0
bas = 0.0
olm = 0.0
cck = 0.0
[netsyn]
STDP = 0
GABAontoCCK_scale = 3
"""

def writeconf (fn,sec,opt,val):
  '''write config file starting with defaults andnew entries
  specified in section (sec) , option (opt), and value (val) 
  saves to output filepath fn'''

  conf = configparser.ConfigParser()
  # conf.readfp(io.BytesIO(def_config)) # start with defaults - ERROR FROM THIS LINE in python3 - FIXED
  conf.read_string(def_config)
  # then change entries by user-specs
  for i in range(len(sec)):
      # conf.set(sec[i],opt[i],val[i]) # error here related to val having to be a string
      conf[sec[i]][opt[i]] = str(val[i])
  # write config file
  with open(fn, 'w') as cfile: conf.write(cfile) # not writing as binary

# read config file
def readconf (fn="netcfg.cfg"):

  config = configparser.ConfigParser()
  config.read(fn)

  def conffloat (base,var,defa): # defa is default value
    val = defa
    try: val=config.getfloat(base,var)
    except: pass
    return val

  def confint (base,var,defa):
    val = defa
    try: val=config.getint(base,var)
    except: pass
    return val

  def confstr (base,var,defa):
    val = defa
    try: val = config.get(base,var)
    except: pass
    return val

  def confarr(base,var,defa):
    val = defa
    try: val = config.get(base,var)
    except: pass
    val = val.strip('[]')
    val = np.fromstring(val, dtype = int, sep = ' ')
    return val

  d = {}
  d['iseed'] = confint('seed','iseed',1234)
  d['wseed'] = confint('seed','wseed',4321)
  d['pseed'] = confint('seed','pseed',4321)
  d['signal_rseed'] = confint('seed','signal_rseed',7483)
  d['tstop'] = conffloat("run","tstop", 3000)
  d['dt'] = conffloat("run","dt",0.1)
  d['saveout'] = conffloat("run","saveout",1)
  d['simstr'] = confstr("run","simstr","2021feb17_test_")
  d['statestr'] = confstr("run","statestr","14mar6_reload_700s_continue_600s_A")
  d['dorun'] = confint("run","dorun",1)
  d['verbose'] = confint("run","verbose",0)
  d['saveSomaVolt'] = confint("run","saveSomaVolt",0)
  d['getOnlyInterneuronsSomaVolt'] = confint("run","getOnlyInterneuronsSomaVolt",0)
  d['strCellsRecordVoltage'] = confarr("run","strCellsRecordVoltage", '0 800 1000')
  d['cvodeactive'] = confint("run","cvodeactive",0)
  d['recdt'] = conffloat("run","recdt",10.0)
  d['recvdt'] = conffloat("run","recvdt",1.0)
  d['binsz'] = conffloat("run","binsz",5)
  d['savestate'] = confint("run","savestate",0)
  d['restorestate'] = confint("run","restorestate",0)
  d['loadtstop'] = conffloat("run","loadtstop",0)
  d['saveconn'] = confint('run','saveconn',0)
  d['recordNetStimInputs'] = confint('run','recordNetStimInputs',0)
  d['saveNetStimInputs'] = confint('run','saveNetStimInputs',0)
  d['recPyrInputSpikes'] = confint('run','recPyrInputSpikes',0)
  d['savePyrInputSpikes'] = confint('run','savePyrInputSpikes',0)
  d['recSignalSpikes'] = confint('run','recSignalSpikes',0)
  d['saveSignalSpikes'] = confint('run','saveSignalSpikes',0)
  d['useRXD'] = confint("rxd","useRXD",1)
  d['caDiffCoeff'] = conffloat('rxd','caDiffCoeff',0)
  d['PV_frate'] = conffloat("rxd","PV_frate", 5.0)
  d['PV_init'] = conffloat("rxd","PV_init", 0.2)
  d['useIP3'] = confint("rxd","useIP3",1)
  d['gip3'] = conffloat("rxd","gip3",120400.0)
  d['gserca'] = conffloat("rxd","gserca",4.0)
  d['gleak'] = conffloat("rxd","gleak",3.0)
  d['cacytinit'] = conffloat("rxd","cacytinit",100e-6)
  d['caerinit'] = conffloat("rxd","caerinit",100e-6)
  d['connections'] = confint('net','connections',1)
  d['scale'] = conffloat("net","scale",1.0)
  d['includeCCKcs'] = confint('net','includeCCKcs',0)
  d['hCurrent_g_pv_scaling'] = conffloat('net','hCurrent_g_pv_scaling',1.0)
  d['hCurrent_g_olm_scaling'] = conffloat('net','hCurrent_g_olm_scaling',1.0)
  d['hCurrent_g_pyr_scaling'] = conffloat('net','hCurrent_g_pyr_scaling',1.0)
  d['hCurrent_g_cck_scaling'] = conffloat('net','hCurrent_g_cck_scaling',1.0)
  d['CB1R_cck_weight'] = conffloat('net','CB1R_cck_weight',0.5)
  d['CB1R_cck_somaPyr_weight'] = conffloat('net','CB1R_cck_somaPyr_weight', 1.0)
  d['CB1R_cck_Adend2Pyr_weight'] = conffloat('net','CB1R_cck_Adend2Pyr_weight',1.0)
  d['CB1R_pyr_recurrent_weight'] = conffloat('net','CB1R_pyr_recurrent_weight',0.5)
  d['CB1R_pyr_pv_weight'] = conffloat('net','CB1R_pyr_pv_weight',1.0)
  d['CB1R_cck_Adend3_weight'] = conffloat('net','CB1R_cck_Adend3_weight',1.0)
  d['CB1R_pyr_olm_weight'] = conffloat('net','CB1R_pyr_olm_weight',1.0)
  d['CB1R_MS_weight'] = conffloat('net','CB1R_MS_weight',1.0)
  d['olm_NMDARw_scaling'] = conffloat('net','olm_NMDARw_scaling',1.0)
  d['pv_NMDARw_scaling'] = conffloat('net','pv_NMDARw_scaling',1.0)
  d['pyr_NMDARw_scaling'] = conffloat('net','pyr_NMDARw_scaling',1.0)
  d['cck_Soma_NMDARw_scaling'] = conffloat('net','cck_Soma_NMDARw_scaling',1.0)
  d['cck_Adend2_NMDARw_scaling'] = conffloat('net','cck_Adend2_NMDARw_scaling',1.0)
  d['cck_Adend3_NMDARw_scaling'] = conffloat('net','cck_Adend3_NMDARw_scaling',1.0)
  d['olm_AMPARw_scaling'] = conffloat('net','olm_AMPARw_scaling', 1.0)
  d['pyrPop_cNum'] = confint('net','pyrPop_cNum',800)
  d['basPop_cNum'] = confint('net','basPop_cNum',100)
  d['olmPop_cNum'] = confint('net','olmPop_cNum',200)
  d['cck_somaPyrPop_cNum'] = confint('net','cck_somaPyrPop_cNum',100)
  d['cck_Adend2PyrPop_cNum'] = confint('net','cck_Adend2PyrPop_cNum',100)
  d['cck_Adend3Pop_cNum'] = confint('net','cck_Adend3Pop_cNum',100)
  d['pyr_pyr_location'] = confstr('net','pyr_pyr_location','mid-apical')
  d['olm_pyr_location'] = confstr('net','olm_pyr_location','distal-apical')
  d['pyr_bas_conv'] = confint('net','pyr_bas_conv',50)
  d['pyr_cck_somaPyr_conv'] = confint('net','pyr_cck_somaPyr_conv',50)
  d['pyr_cck_Adend2Pyr_conv'] = confint('net','pyr_cck_Adend2Pyr_conv',10)
  d['pyr_cck_conv'] = confint('net','pyr_cck_conv',50)
  d['pyr_olm_conv'] = confint('net','pyr_olm_conv',10)
  d['pyr_pyr_conv'] = confint('net','pyr_pyr_conv',25)
  d['bas_bas_conv'] = confint('net','bas_bas_conv',15)
  d['bas_pyr_conv'] = confint('net','bas_pyr_conv',25)
  d['cck_somaPyr_pyr_conv'] = confint('net','cck_somaPyr_pyr_conv',25)
  d['cck_Adend2Pyr_pyr_conv'] = confint('net','cck_Adend2Pyr_pyr_conv',10)
  d['cck_somaPyr_bas_conv'] = confint('net','cck_somaPyr_bas_conv',20)
  d['bas_cck_somaPyr_conv'] = confint('net','bas_cck_somaPyr_conv',10)
  d['cck_somaPyr_cck_somaPyr_conv'] = confint('net','cck_somaPyr_cck_somaPyr_conv',2)
  d['bas_olm_conv'] = confint('net','bas_olm_conv',1)
  d['olm_pyr_conv'] = confint('net','olm_pyr_conv',20)
  d['pyr_cck_Adend3_conv'] = confint('net','pyr_cck_Adend3_conv',10)
  d['cck_Adend3_pyr_conv'] = confint('net','cck_Adend3_pyr_conv',10)
  d['nmfracca'] = conffloat('net','nmfracca',0)
  d['extrinsic_pyr_AMPAfR_weight_scale'] = conffloat('net','extrinsic_pyr_AMPAfR_weight_scale',1)
  d['intrinsic_pyr_AMPAfR_weight_scale'] = conffloat('net','intrinsic_pyr_AMPAfR_weight_scale',1)
  d['extrinsic_pyr_GABAfR_weight_scale'] = conffloat('net','extrinsic_pyr_GABAfR_weight_scale',1)
  d['intrinsic_pyr_GABAfR_weight_scale']= conffloat('net','intrinsic_pyr_GABAfR_weight_scale',1)
  d['extrinsic_pv_AMPAfR_weight_scale']= conffloat('net','extrinsic_pv_AMPAfR_weight_scale',1)
  d['intrinsic_pv_AMPAfR_weight_scale']= conffloat('net','intrinsic_pv_AMPAfR_weight_scale',1)
  d['extrinsic_pv_GABAfR_weight_scale'] = conffloat('net','extrinsic_pv_GABAfR_weight_scale',1)
  d['intrinsic_pv_GABAfR_weight_scale']= conffloat('net','intrinsic_pv_GABAfR_weight_scale',1)
  d['extrinsic_olm_AMPAfR_weight_scale']= conffloat('net','extrinsic_olm_AMPAfR_weight_scale',1)
  d['intrinsic_olm_AMPAfR_weight_scale']= conffloat('net','intrinsic_olm_AMPAfR_weight_scale',1)
  d['extrinsic_olm_GABAfR_weight_scale'] = conffloat('net','extrinsic_olm_GABAfR_weight_scale',1)
  d['intrinsic_olm_GABAfR_weight_scale']= conffloat('net','intrinsic_olm_GABAfR_weight_scale',1)
  d['extrinsic_cck_AMPAfR_weight_scale'] = conffloat('net','extrinsic_cck_AMPAfR_weight_scale',1)
  d['intrinsic_cck_AMPAfR_weight_scale'] = conffloat('net','intrinsic_cck_AMPAfR_weight_scale',1)
  d['extrinsic_cck_GABAfR_weight_scale'] = conffloat('net','extrinsic_cck_GABAfR_weight_scale',1)
  d['intrinsic_cck_GABAfR_weight_scale'] = conffloat('net','intrinsic_cck_GABAfR_weight_scale',1)
  d['tau2_bas_pyr_GA_scale'] = conffloat('net','tau2_bas_pyr_GA_scale',1)
  d['noise'] = conffloat("stim","noise",1.0)
  d['DoMakeNoise'] = confint('stim','DoMakeNoise',1)
  d['UseNetStim'] = confint('stim','UseNetStim',1)
  d['useGfluct'] = confint('stim','useGfluct',0)
  d['DoMakeSignal'] = confint('stim','DoMakeSignal',0)
  d['PyrGABAw'] = confint('stim','PyrGABAw',0)
  d['PyrGABAISI'] = confint('stim','PyrGABAISI',1)
  d['PyrAMPAw'] = confint('stim','PyrAMPAw',0.05e-3)
  d['PyrAMPAISI'] = confint('stim','PyrAMPAISI',4)
  d['PyrNMDAw'] = confint('stim','PyrNMDAw',6.5e-3)
  d['PyrNMDAISI'] = confint('stim','PyrNMDAISI',100)
  d['BasAMPAw'] = confint('stim','BasAMPAw',0)
  d['BasAMPAISI'] = confint('stim','BasAMPAISI',1)
  d['BasGABAw'] = confint('stim','BasGABAw',0)
  d['BasGABAISI'] = confint('stim','BasGABAISI',1)
  d['MedialSeptum_gain_olm'] = conffloat('stim','MedialSeptum_gain_olm',1)
  d['MedialSeptum_gain_pv'] = conffloat('stim','MedialSeptum_gain_pv',1)
  d['MedialSeptum_gain_cck'] = conffloat('stim','MedialSeptum_gain_cck',1)
  d['signal_isi'] = conffloat('stim','signal_isi',200)
  d['pyr'] = conffloat('iclamp','pyr',0.0)
  d['bas'] = conffloat('iclamp','bas',0.0)
  d['olm'] = conffloat('iclamp','olm',0.0)
  d['cck'] = conffloat('iclamp','cck',0.0)
  d['STDP'] = confint('netsyn','STDP',0)
  d['GABAontoCCK_scale'] = conffloat('netsyn','GABAontoCCK_scale',3)
  if config.has_option("net","wnq"): d['wnq'] = config.get("net","wnq")

  return d

def compareConfigParsers(parser1, parser2):
    '''will compare the parser1 and parser2 and return a dictionary of the differences if there are any. If the parsers do not contain the same sections or the same options, no dictionary is returned'''
    resultsDic = {'same':[], 'different':{}}
    if parser1.sections() == parser2.sections():
        print ('\nParsers have same sections, proceeding to examine options')
        for mysection in parser1.sections():
            if parser1.options(mysection) == parser2.options(mysection):
                for myoption in parser1.options(mysection):
                    myval1 = parser1.get(mysection, myoption)
                    myval2 = parser2.get(mysection, myoption)
                    if myval1 == myval2:
                        resultsDic['same'].append(myoption)
                    else:
                        resultsDic['different'][myoption] = {'first':myval1, 'second':myval2}
            else:
                print ('Sections of parsers do not have the same options. Will not run further analysis')
                return
    else:
        print ('Parsers do not have the same sections. Will not run further analysis')
        return
    if len(resultsDic['different']) == 0:
        print ("Parsers are the same")
    else:
        print ('There are differences between the parsers. Please check the returned dictionary')
    return resultsDic