strdef fileSt1, fileSt2, fileName
v_init = -65 // used for initial conditions
tstop = 650 // in msec, stop time
Vleak=-65
seed = 300
{
load_file("nrngui.hoc")
}
// LOAD MORPHOLOGY.
{
load_file("loadMorph.hoc") // loads cell morphology from swc file
}
segL = 2 // the length (in microns) of each dendritic segment
forall { ns=int(L/segL+0.5)
if (ns==0) {
ns=1
}
if ((ns-int(ns/2)*2)==0) {
ns=ns+1
}
nseg = ns
}
same_inp = 0 // logical flag. Relevant for the moving bar
fileSt1 = "vm_trace_flash"
zero_inhib = 0// logical flag. Determines whether inhibitory synapses would be active
// if 1 inhibition is zeroed. Used in setting_synapse_parameters_mov
if (zero_inhib == 1) {
fileSt2 = "noI_T.dat"
} else {
fileSt2 = "noI_F.dat"
}
sprint(fileName, "%s-%s", fileSt1, fileSt2)
// creating time vector
objref tvec
vecsize = tstop
tvec = new Vector( vecsize , 0 )
for i=0, vecsize-2 {
tvec.x[i+1] = tvec.x[i] + 1
}
objref params, f2
params = new Vector()
f2 = new File()
f2.ropen("parameters.dat")
params.scanf(f2)
f2.close()
// parameters.dat contains the 12 model parameters that are described in Supp. Table 1
taur_e = params.x[0] // first time constant for excitatory conductance
taud_e = params.x[1] // second time constant for excitatory conductance
taur_i = params.x[2] // first time constant for inhibitory conductance
taud_i = params.x[3] // second time constant for inhibitory conductance
a_e = params.x[4] // gaussian amplitude for excitatory synapse weights
mu_e = params.x[5] // gaussian center for excitatory synapse weights
sigma_e = params.x[6] // gaussian spread for excitatory synapse weights
a_i = params.x[7] // gaussian amplitude for inhibitory synapse weights
mu_i = params.x[8] // gaussian center for inhibitory synapse weights
sigma_i = params.x[9] // gaussian spread for inhibitory synapse weights
Rm = params.x[10] // membrane resistivity
global_ra = params.x[11] // axial resistivity
t0 = 0
forall {
insert pas g_pas=1/(Rm) Ra=global_ra e_pas=Vleak
}
{
// function that is used to create the conductance vectors at each synapse
load_file("create_cond_vec.hoc")
// defines the relevant dendritic axis and generates a value for each
// section based on its projected location along that axis
load_file("define_dend_axis.hoc")
// divides the dendrite into equal intervals. All the synapses within an
// interval are activated when a simulated bar is flashed in that position
load_file("setting_x_intervals.hoc")
}
objref vm_trace, time_trace
vm_trace = new Vector()
time_trace = new Vector()
// single flash durations (used to generate conductance vectors)
objref t_stim
t_stim = new Vector(4)
t_stim.x[0] = 20
t_stim.x[1] = 40
t_stim.x[2] = 80
t_stim.x[3] = 160
objref f1, ftime1
f1 = new File()
f1.wopen(fileName)
ftime1 = new File()
ftime1.wopen("time_trace_flash.dat")
for ind_t_stim = 0,3 { // over all durations
t1 = t0 + t_stim.x[ind_t_stim]
for ind_x_stim = 0,10 { // over all positions
load_file(1,"setting_synapse_parameters_flash.hoc") //"1" forces file reloading
vm_trace.record( &Cell[0].soma[0].v(0.5) )
time_trace.record( &t )
{
dt = 0.1
steps_per_ms = 10
init()
run()
}
// concatenates the results from each iteration
vm_trace.printf(f1)
time_trace.printf(ftime1)
}
}
ftime1.close()
f1.close()
quit()