// genesis // create synapses (based on Gauck and Jaeger 2003) function make_cn_syns if (!({exists AMPA})) create synchan AMPA end setfield AMPA Ek {E_AMPA} tau1 {tauRise_AMPA} tau2 {tauFall_AMPA} \ gmax 0 frequency 0 if (!({exists fNMDA})) create synchan fNMDA end setfield fNMDA Ek {E_NMDA} tau1 {tauRise_fNMDA} tau2 {tauFall_fNMDA} \ gmax 0 frequency 0 if (!({exists Mg_fblock})) create Mg_block Mg_fblock end setfield Mg_fblock \ CMg 0.002 \ KMg_A 1 \ KMg_B {1.0/{0.109*1000}} if (!({exists sNMDA})) create synchan sNMDA end setfield sNMDA Ek {E_NMDA} tau1 {tauRise_sNMDA} tau2 {tauFall_sNMDA} \ gmax 0 frequency 0 if (!({exists Mg_sblock})) create Mg_block Mg_sblock end setfield Mg_sblock \ CMg 0.25 \ KMg_A 1 \ KMg_B {1/{0.057*1000}} if (!({exists GABA})) create synchan GABA end setfield GABA Ek {E_GABA} tau1 {tauRise_GABA} tau2 {tauFall_GABA} \ gmax 0 frequency 0 end // add synapses to soma function add_soma_syns copy /library/GABA soma/GABAs setfield soma/GABAs gmax {G_GABAs} addmsg soma/GABAs soma CHANNEL Gk Ek addmsg soma soma/GABAs VOLTAGE Vm copy /library/AMPA soma/AMPAs setfield soma/AMPAs gmax {G_AMPAs} addmsg soma/AMPAs soma CHANNEL Gk Ek addmsg soma soma/AMPAs VOLTAGE Vm copy /library/fNMDA soma/fNMDAs setfield soma/fNMDAs gmax {G_fNMDAs} copy /library/Mg_fblock soma/Mg_fblocks addmsg soma/fNMDAs soma/Mg_fblocks CHANNEL Gk Ek addmsg soma/Mg_fblocks soma CHANNEL Gk Ek addmsg soma soma/Mg_fblocks VOLTAGE Vm addmsg soma soma/fNMDAs VOLTAGE Vm copy /library/sNMDA soma/sNMDAs setfield soma/sNMDAs gmax {G_sNMDAs} copy /library/Mg_sblock soma/Mg_sblocks addmsg soma/sNMDAs soma/Mg_sblocks CHANNEL Gk Ek addmsg soma/Mg_sblocks soma CHANNEL Gk Ek addmsg soma soma/Mg_sblocks VOLTAGE Vm addmsg soma soma/sNMDAs VOLTAGE Vm //set up timetables and input to soma if (!{exists /inputs}) create neutral /inputs end create neutral /inputs/soma if ({ex_rate_s} > 0) create timetable /inputs/soma/ex_tt setfield /inputs/soma/ex_tt \ maxtime {synmaxtime} act_val 1.0 method 2 \ meth_desc1 {1/{ex_rate_s}} \ meth_desc2 0 meth_desc3 3 call /inputs/soma/ex_tt TABFILL create spikegen /inputs/soma/ex_spikegen setfield /inputs/soma/ex_spikegen output_amp 1 thresh 0.5 addmsg /inputs/soma/ex_tt /inputs/soma/ex_spikegen INPUT activation addmsg /inputs/soma/ex_spikegen soma/AMPAs SPIKE addmsg /inputs/soma/ex_spikegen soma/fNMDAs SPIKE addmsg /inputs/soma/ex_spikegen soma/sNMDAs SPIKE end if ({inhib_rate_s} > 0) create timetable /inputs/soma/inhib_tt setfield /inputs/soma/inhib_tt \ maxtime {synmaxtime} act_val 1.0 method 2 \ meth_desc1 {1/{inhib_rate_s}} \ meth_desc2 0 meth_desc3 3 call /inputs/soma/inhib_tt TABFILL create spikegen /inputs/soma/inhib_spikegen setfield /inputs/soma/inhib_spikegen output_amp 1 thresh 0.5 addmsg /inputs/soma/inhib_tt /inputs/soma/inhib_spikegen INPUT activation addmsg /inputs/soma/inhib_spikegen soma/GABAs SPIKE end end // add synapses to dendritic compartments function add_dend_syns int i str mfincomp, pcincomp if (!{exists /inputs}) create neutral /inputs end // add excitory synapses to set of compartments (read in from file) openfile {MF_infile} r randseed {MF_seed} for (i = 1; i <= {no_MF}; i = i + 1) mfincomp = {readfile {MF_infile}} copy /library/AMPA {mfincomp}/AMPAd setfield {mfincomp}/AMPAd gmax {G_AMPAd} addmsg {mfincomp}/AMPAd {mfincomp} CHANNEL Gk Ek addmsg {mfincomp} {mfincomp}/AMPAd VOLTAGE Vm copy /library/fNMDA {mfincomp}/fNMDAd setfield {mfincomp}/fNMDAd gmax {G_fNMDAd} copy /library/Mg_fblock {mfincomp}/Mg_fblockd addmsg {mfincomp}/fNMDAd {mfincomp}/Mg_fblockd CHANNEL Gk Ek addmsg {mfincomp}/Mg_fblockd {mfincomp} CHANNEL Gk Ek addmsg {mfincomp} {mfincomp}/Mg_fblockd VOLTAGE Vm addmsg {mfincomp} {mfincomp}/fNMDAd VOLTAGE Vm copy /library/sNMDA {mfincomp}/sNMDAd setfield {mfincomp}/sNMDAd gmax {G_sNMDAd} copy /library/Mg_sblock {mfincomp}/Mg_sblockd addmsg {mfincomp}/sNMDAd {mfincomp}/Mg_sblockd CHANNEL Gk Ek addmsg {mfincomp}/Mg_sblockd {mfincomp} CHANNEL Gk Ek addmsg {mfincomp} {mfincomp}/Mg_sblockd VOLTAGE Vm addmsg {mfincomp} {mfincomp}/sNMDAd VOLTAGE Vm create neutral /inputs/{mfincomp} if ({ex_rate_d} > 0) create timetable /inputs/{mfincomp}/ex_tt setfield /inputs/{mfincomp}/ex_tt \ maxtime {synmaxtime} act_val 1.0 method 2 \ meth_desc1 {1/{ex_rate_d}} meth_desc2 0 meth_desc3 3 call /inputs/{mfincomp}/ex_tt TABFILL create spikegen /inputs/{mfincomp}/ex_spikegen setfield /inputs/{mfincomp}/ex_spikegen output_amp 1 thresh 0.5 addmsg /inputs/{mfincomp}/ex_tt /inputs/{mfincomp}/ex_spikegen INPUT activation addmsg /inputs/{mfincomp}/ex_spikegen {mfincomp}/AMPAd SPIKE addmsg /inputs/{mfincomp}/ex_spikegen {mfincomp}/fNMDAd SPIKE addmsg /inputs/{mfincomp}/ex_spikegen {mfincomp}/sNMDAd SPIKE end end closefile {MF_infile} // add inhibitory synapses to another set of compartments (read in from file) openfile {PC_infile} r randseed {PC_seed} for (i = 1; i <= {no_PC}; i = i + 1) pcincomp = {readfile {PC_infile}} copy /library/GABA {pcincomp}/GABAd setfield {pcincomp}/GABAd gmax {G_GABAd} addmsg {pcincomp}/GABAd {pcincomp} CHANNEL Gk Ek addmsg {pcincomp} {pcincomp}/GABAd VOLTAGE Vm if(!{exists /inputs/{pcincomp}}) create neutral /inputs/{pcincomp} end if ({inhib_rate_d} > 0) create timetable /inputs/{pcincomp}/inhib_tt setfield /inputs/{pcincomp}/inhib_tt \ maxtime {synmaxtime} act_val 1.0 method 2 \ meth_desc1 {1/{inhib_rate_d}} meth_desc2 0 meth_desc3 3 call /inputs/{pcincomp}/inhib_tt TABFILL create spikegen /inputs/{pcincomp}/inhib_spikegen setfield /inputs/{pcincomp}/inhib_spikegen output_amp 1 thresh 0.5 addmsg /inputs/{pcincomp}/inhib_tt /inputs/{pcincomp}/inhib_spikegen INPUT activation addmsg /inputs/{pcincomp}/inhib_spikegen {pcincomp}/GABAd SPIKE end end closefile {PC_infile} end // update timetables for synaptic input bursts function add_synburst int i str pcincomp str mfincomp int nextseed silent 1 if (exbdur > 0 && exbrate > 0) randseed {MF_seed} nextseed = {rand 100000 999999} if (ex_rate_s > 0) call /inputs/soma/ex_tt TUPDATE 2 {exbonset} {{exbonset} + {exbdur}} {1.0 / {{exbrate}*50}} randseed {nextseed} nextseed = {rand 100000 999999} else create timetable /inputs/soma/ex_tt setfield /inputs/soma/ex_tt \ maxtime {{exbonset} + {exbdur}} act_val 1.0 method 2 \ meth_desc1 {1/{{exbrate}*50}} \ meth_desc2 0 meth_desc3 3 call /inputs/soma/ex_tt TABFILL // Next line takes baseline_rate back to near-zero. call /inputs/soma/ex_tt TUPDATE 2 0 {exbonset} {10000} create spikegen /inputs/soma/ex_spikegen setfield /inputs/soma/ex_spikegen output_amp 1 thresh 0.5 addmsg /inputs/soma/ex_tt /inputs/soma/ex_spikegen INPUT activation addmsg /inputs/soma/ex_spikegen soma/AMPAs SPIKE end end if(inb1dur > 0) randseed {PC_seed} nextseed = {rand 100000 999999} if (inhib_rate_s > 0) // Two inhibitory bursts follow each other, inb1 is first and determines onset if(inb1rate > 0) call /inputs/soma/inhib_tt TUPDATE 2 {inb1onset} {{inb1onset} + {inb1dur}} {1.0 / {{inb1rate}*50}} end randseed {nextseed} nextseed = {rand 100000 999999} if(inb2dur > 0) call /inputs/soma/inhib_tt TUPDATE 2 {{inb1onset} + {inb1dur}} {{inb1onset} + {inb1dur} + {inb2dur}} {1.0 / {{inb2fac}*{inhib_rate_s}}} end randseed {nextseed} nextseed = {rand 100000 999999} else if(inb1rate > 0) create timetable /inputs/soma/inhib_tt setfield /inputs/soma/inhib_tt \ maxtime {{inb1onset} + {inb1dur} + {inb2dur}} act_val 1.0 method 2 \ meth_desc1 {1/{{inb1rate}*50}} \ meth_desc2 0 meth_desc3 3 call /inputs/soma/inhib_tt TABFILL if(inb2dur > 0) call /inputs/soma/inhib_tt TUPDATE 2 {{inb1onset} + {inb1dur}} {{inb1onset} + {inb1dur} + {inb2dur}} {1.0 / {{inb2fac}*{inhib_rate_s}}} end // Next line takes baseline_rate back to near-zero. call /inputs/soma/inhib_tt TUPDATE 2 0 {inb1onset} {10000} create spikegen /inputs/soma/inhib_spikegen setfield /inputs/soma/inhib_spikegen output_amp 1 thresh 0.5 addmsg /inputs/soma/inhib_tt /inputs/soma/inhib_spikegen INPUT activation addmsg /inputs/soma/inhib_spikegen soma/GABAs SPIKE end end end randseed {nextseed} nextseed = {rand 100000 999999} if (exbdur > 0 && exbrate > 0) openfile {MF_infile} r for (i = 1; i <= {no_MF}; i = i + 1) mfincomp = {readfile {MF_infile}} if (ex_rate_d > 0) call /inputs/{mfincomp}/ex_tt TUPDATE 2 {exbonset} {{exbonset} + {exbdur}} {1.0 / {exbrate}} else if(!{exists /inputs/{mfincomp}}) create neutral /inputs/{mfincomp} end create timetable /inputs/{mfincomp}/ex_tt setfield /inputs/{mfincomp}/ex_tt \ maxtime {{exbonset} + {exbdur}} act_val 1.0 method 2 \ meth_desc1 {1/{exbrate}} meth_desc2 0 meth_desc3 3 call /inputs/{mfincomp}/ex_tt TABFILL // Next line takes baseline_rate back to near-zero. call /inputs/{mfincomp}/ex_tt TUPDATE 2 0 {exbonset} {10000} create spikegen /inputs/{mfincomp}/ex_spikegen setfield /inputs/{mfincomp}/ex_spikegen output_amp 1 thresh 0.5 addmsg /inputs/{mfincomp}/ex_tt /inputs/{mfincomp}/ex_spikegen INPUT activation addmsg /inputs/{mfincomp}/ex_spikegen {mfincomp}/AMPAd SPIKE end end closefile {MF_infile} end randseed {nextseed} nextseed = {rand 100000 999999} if (inb1dur > 0) openfile {PC_infile} r for (i = 1; i <= {no_PC}; i = i + 1) pcincomp = {readfile {PC_infile}} if (inhib_rate_d > 0) if(inb1rate > 0) call /inputs/{pcincomp}/inhib_tt TUPDATE 2 {inb1onset} {{inb1onset} + {inb1dur}} {1.0 / {inb1rate}} end randseed {nextseed} nextseed = {rand 100000 999999} if(inb2dur > 0) call /inputs/{pcincomp}/inhib_tt TUPDATE 2 {{inb1onset}+{inb1dur}} {{inb1onset}+{inb1dur}+{inb2dur}} {1.0 / {{inb2fac} * {inhib_rate_d}}} end randseed {nextseed} nextseed = {rand 100000 999999} else if(inb1rate > 0) if(!{exists /inputs/{pcincomp}}) create neutral /inputs/{pcincomp} end create timetable /inputs/{pcincomp}/inhib_tt setfield /inputs/{pcincomp}/inhib_tt \ maxtime {{inb1onset} + {inb1dur}} act_val 1.0 method 2 \ meth_desc1 {1/{inb1rate}} meth_desc2 0 meth_desc3 3 call /inputs/{pcincomp}/inhib_tt TABFILL if(inb2dur > 0) call /inputs/{pcincomp}/inhib_tt TUPDATE 2 {{inb1onset} + {inb1dur}} {{inb1onset} + {inb1dur} + {inb2dur}} {1.0 / {{inb2fac} * {inhib_rate_d}}} end randseed {nextseed} nextseed = {rand 100000 999999} // Next line takes baseline_rate back to near-zero. call /inputs/{pcincomp}/inhib_tt TUPDATE 2 0 {inb1onset} {10000} create spikegen /inputs/{pcincomp}/inhib_spikegen setfield /inputs/{pcincomp}/inhib_spikegen output_amp 1 thresh 0.5 addmsg /inputs/{pcincomp}/inhib_tt /inputs/{pcincomp}/inhib_spikegen INPUT activation addmsg /inputs/{pcincomp}/inhib_spikegen {pcincomp}/GABAd SPIKE end end end closefile {PC_infile} end silent -1 end