function add_synapse (source, dest)
copy {source} {dest}
ce {dest}
str added_synapse = {getfield . name}
ce ..
addmsg . ./{added_synapse} VOLTAGE Vm
addmsg ./{added_synapse} . CHANNEL Gk Ek
end
function add_synapse_NMDA (source, dest)
copy {source} {dest}
ce {dest}
str added_synapse = {getfield . name}
ce ..
addmsg . ./{added_synapse}/Mg_BLOCK VOLTAGE Vm
addmsg ./{added_synapse} ./{added_synapse}/Mg_BLOCK CHANNEL Gk Ek
addmsg ./{added_synapse}/Mg_BLOCK . CHANNEL Gk Ek
// Even though the channel current isn't used, CHECK expects this message
addmsg . ./{added_synapse} VOLTAGE Vm
end
function add_spk_gen (source, dest)
copy {source} {dest}
ce {dest}
str added_synapse = {getfield . name}
ce ..
addmsg . ./{added_synapse} INPUT Vm
end
create neutral /prot
move /prot_msgaba /prot/msg
move /prot_b /prot/bc
move /prot_olm /prot/olm
move /prot_pyr /prot/pyr
create neutral /library_HN
pushe /library_HN
make_AMPA
make_NMDA
make_GABA_A
make_GABA_A_OLM
make_GABA_A_MS
make_pyr_spikegen
make_spikegen
pope
// Set injection currents
setfield /prot/pyr/soma inject {pyr_inject}
setfield /prot/bc/soma inject {bc_inject}
setfield /prot/olm/soma inject {olm_inject}
setfield /prot/msg/soma inject {msg_inject}
// Add spike generators
add_spk_gen /library_HN/pyr_spikegen /prot/pyr/soma/pyr_spikegen
add_spk_gen /library_HN/spikegen /prot/bc/soma/spikegen
add_spk_gen /library_HN/spikegen /prot/olm/soma/spikegen
add_spk_gen /library_HN/spikegen /prot/msg/soma/spikegen
// Add background synapses
add_synapse /library_HN/AMPA /prot/pyr/soma/AMPA_bk
setfield /prot/pyr/soma/AMPA_bk frequency {freq_bkgnd_pyr} gmax {Gmax_pyr_soma_AMPA}
add_synapse /library_HN/AMPA /prot/pyr/apical_19/AMPA_bk
setfield /prot/pyr/apical_19/AMPA_bk frequency {freq_bkgnd_pyr} gmax {Gmax_pyr_dend_AMPA}
add_synapse /library_HN/AMPA /prot/bc/soma/AMPA_bk
setfield /prot/bc/soma/AMPA_bk frequency {freq_bkgnd} gmax {Gmax_bc_soma_AMPA}
add_synapse /library_HN/AMPA /prot/olm/soma/AMPA_bk
setfield /prot/olm/soma/AMPA_bk frequency {freq_bkgnd_olm} gmax {Gmax_olm_soma_AMPA}
add_synapse /library_HN/GABA_A /prot/pyr/soma/GABA_A_bk
setfield /prot/pyr/soma/GABA_A_bk frequency {freq_bkgnd_pyr} gmax {Gmax_pyr_soma_GABA_A}
add_synapse /library_HN/GABA_A /prot/pyr/apical_19/GABA_A_bk
setfield /prot/pyr/apical_19/GABA_A_bk frequency {freq_bkgnd_pyr} gmax {Gmax_pyr_dend_GABA_A}
add_synapse /library_HN/GABA_A /prot/bc/soma/GABA_A_bk
setfield /prot/bc/soma/GABA_A_bk frequency {freq_bkgnd} gmax {Gmax_bc_soma_GABA_A}
add_synapse /library_HN/GABA_A /prot/olm/soma/GABA_A_bk
setfield /prot/olm/soma/GABA_A_bk frequency {freq_bkgnd_olm} gmax {Gmax_olm_soma_GABA_A}
if (include_NMDA)
add_synapse_NMDA /library_HN/NMDA /prot/pyr/apical_19/NMDA_bk
setfield /prot/pyr/apical_19/NMDA_bk frequency {freq_bkgnd_nmda_pyr} gmax {Gmax_pyr_dend_NMDA}
end
// Add main synapses
add_synapse /library_HN/AMPA /prot/pyr/{pyr2pyr_compt}/AMPA
setfield /prot/pyr/{pyr2pyr_compt}/AMPA gmax {pyr2pyr_AMPA}
add_synapse /library_HN/AMPA /prot/bc/soma/AMPA
setfield /prot/bc/soma/AMPA gmax {pyr2bc_AMPA}
add_synapse /library_HN/AMPA /prot/olm/soma/AMPA
setfield /prot/olm/soma/AMPA gmax {pyr2olm_AMPA}
add_synapse /library_HN/GABA_A /prot/pyr/soma/GABA_A
setfield /prot/pyr/soma/GABA_A gmax {bc2pyr_GABA_A}
add_synapse /library_HN/GABA_A /prot/bc/soma/GABA_A
setfield /prot/bc/soma/GABA_A gmax {bc2bc_GABA_A}
add_synapse /library_HN/GABA_A_OLM /prot/pyr/{olm2pyr_compt}/GABA_A_OLM
setfield /prot/pyr/{olm2pyr_compt}/GABA_A_OLM gmax {olm2pyr_GABA_A}
add_synapse /library_HN/GABA_A_OLM /prot/bc/soma/GABA_A_OLM
setfield /prot/bc/soma/GABA_A_OLM gmax {olm2bc_GABA_A}
add_synapse /library_HN/GABA_A_OLM /prot/msg/soma/GABA_A_OLM
setfield /prot/msg/soma/GABA_A_OLM gmax {olm2msg_GABA_A}
add_synapse /library_HN/GABA_A_MS /prot/bc/soma/GABA_A_MS
setfield /prot/bc/soma/GABA_A_MS gmax {msg2bc_GABA_A}
add_synapse /library_HN/GABA_A_MS /prot/olm/soma/GABA_A_MS
setfield /prot/olm/soma/GABA_A_MS gmax {msg2olm_GABA_A}
if (include_NMDA)
add_synapse_NMDA /library_HN/NMDA /prot/pyr/{pyr2pyr_compt}/NMDA
setfield /prot/pyr/{pyr2pyr_compt}/NMDA gmax {pyr2pyr_NMDA}
add_synapse_NMDA /library_HN/NMDA /prot/bc/soma/NMDA
setfield /prot/bc/soma/NMDA gmax {pyr2bc_NMDA}
add_synapse_NMDA /library_HN/NMDA /prot/olm/soma/NMDA
setfield /prot/olm/soma/NMDA gmax {pyr2olm_NMDA}
end
add_synapse /library_HN/GABA_A /prot/msg/soma/GABA_A
setfield /prot/msg/soma/GABA_A gmax {msg2msg_GABA_A}
// Cell arrays
create_array /pyr_arr /prot/pyr {pyr_nx} {pyr_ny} {pyr_dx} \
{pyr_dy} {pyr_origin_x} {pyr_origin_y}
create_array /olm_arr /prot/olm {olm_nx} {olm_ny} {olm_dx} {olm_dy} \
{olm_origin_x} {olm_origin_y}
create_array /bc_arr /prot/bc {bc_nx} {bc_ny} {bc_dx} {bc_dy} \
{bc_origin_x} {bc_origin_y}
create_array /msg_arr /prot/msg {msg_nx} {msg_ny} {msg_dx} {msg_dy} \
{msg_origin_x} {msg_origin_y}
// Disable prototypes
disable /prot
// Disable HN library now that synapses have been copied
disable /library_HN