//genesis
/*****This script controls the output of the simulations
******
******Functions implemented followed by parameters:
******1, spike_rec_setup $SIM_TIME $OUTPUT_TYPE $NEURON_TYPE $SPIKE_TRAIN_NO
******2, spike_rec_save
******/
str recs="" //string of names of tables containing
//recordings
//*****Table for the spiketrains
create neutral /spktrns
//*****Raster diagram and/or spike train recording tool************************
function spike_rec_setup(time,sr,type,no)
float time //simulation time
int no //number of spike trains recorded
str type //type of neuron: olm
int sr //swich of output types: 1, raster;
//2, spike tr; 3 raster + spike tr
str cellp //path to the neurons
str compp //path to the compartments
int i,total
int table_no = 0 //total number of allocated data tables
int res
ce /spktrns
//*****Here, elementpaths to specific neuron types can be set
if (type=="olm")
cellp="/int_olm"
compp="soma"
total={N_olm}
elif (type=="b")
cellp="/int_b"
compp="soma"
total={N_b}
elif (type=="msg")
cellp="/int_msg"
compp="soma"
total={N_msg}
elif (type=="psoma")
cellp="/pyr"
compp="soma"
total={N_pyr}
elif (type=="pak1")
cellp="/pyr"
compp="ak1"
total={N_pyr}
elif (type=="pak3")
cellp="/pyr"
compp="ak3"
total={N_pyr}
elif (type=="pak7")
cellp="/pyr"
compp="ak7"
total={N_pyr}
elif (type=="pak10")
cellp="/pyr"
compp="ak10"
total={N_pyr}
elif (type=="paik3")
cellp="/pyr"
compp="aik3"
total={N_pyr}
elif (type=="padk3")
cellp="/pyr"
compp="adk3"
total={N_pyr}
elif (type=="paik7")
cellp="/pyr"
compp="aik7"
total={N_pyr}
elif (type=="padk7")
cellp="/pyr"
compp="adk7"
total={N_pyr}
elif (type=="pas22c")
cellp="/pyr"
compp="as22c"
total={N_pyr}
elif (type=="pas2")
cellp="/pyr"
compp="as2"
total={N_pyr}
elif (type=="pas4c")
cellp="/pyr"
compp="as4c"
total={N_pyr}
elif (type=="pak5")
cellp="/pyr"
compp="ak5"
total={N_pyr}
elif (type=="paik6b")
cellp="/pyr"
compp="aik6b"
total={N_pyr}
elif (type=="pat13b")
cellp="/pyr"
compp="at13b"
total={N_pyr}
elif (type=="pas9b")
cellp="/pyr"
compp="as9b"
total={N_pyr}
elif (type=="pas11a")
cellp="/pyr"
compp="as11a"
total={N_pyr}
elif (type=="pas12a")
cellp="/pyr"
compp="as12a"
total={N_pyr}
elif (type=="pas13a")
cellp="/pyr"
compp="as13a"
total={N_pyr}
elif (type=="pas14a")
cellp="/pyr"
compp="as14a"
total={N_pyr}
elif (type=="pac3b")
cellp="/pyr"
compp="ac3b"
total={N_pyr}
elif (type=="paik3")
cellp="/pyr"
compp="aik3"
total={N_pyr}
else
echo "Misspecified NEURON_TYPE. Select from options int_olm, int_b or int_msg"
return
end
//*****Tables for rasters
if (sr != 2)
if (type=="b")
res=80
else
res=20
end
for (i = 1; i<= {total}; i = i + 1)
create table /spktrns/raster_{type}{i}
setfield ^ step_mode 4 stepsize -0.01
call ^ TABCREATE {time * res} 0 {time * res}
addmsg {cellp}[{i}]/{compp} ^ INPUT Vm
recs = {strcat {recs} " "}
recs = {strcat {recs} raster_{type}{i}}
end
end
//*****Tables for spike trains
if (sr != 1)
i=1
while(i<={no})
if (!{exists /spktrns/sptr_{type}{i}})
create table /spktrns/sptr_{type}{i}
setfield ^ step_mode 3
useclock ^ 1
call ^ TABCREATE {{time}/{dt2}} 0 {time}
addmsg {cellp}[{i}]/{compp} /spktrns/sptr_{type}{i} INPUT Vm
recs = {strcat {recs} " "}
recs = {strcat {recs} sptr_{type}{i}}
i=i+1
end
end
end
ce /
end
//*****An argumentless function for writing data on disk***********************
function spike_rec_save (sp)
str sp
int i
str tabname
mkdir {gp}{pp}{sp}
for (i = 1; i <= {getarg {arglist {recs}} -count}; i = i + 1)
tabname = {getarg {arglist {recs}} -arg {i}}
tab2file {gp}{pp}{sp}/{tabname}.dat \
/spktrns/{tabname} \
table
delete /spktrns/{tabname}
end
recs = "" //clearing record of records
if ({exists /output/extable[1]})
tab2file {gp}{pp}{sp}/electrode.dat /output/extable[1] table
end
end