//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
str type_alias
ce /spktrns
//*****Here, elementpaths to specific neuron types can be set
if (type=="olm")
type_alias="olm"
cellp="/olm_arr/olm"
compp="soma"
total={n_of_olm}
elif (type=="bc")
type_alias="b"
cellp="/bc_arr/bc"
compp="soma"
total={n_of_bc}
elif (type=="msg")
type_alias="msg"
cellp="/msg_arr/msg"
compp="soma"
total={n_of_msg}
elif (type=="pyr")
type_alias="psoma"
cellp="/pyr_arr/pyr"
compp="soma"
total={n_of_pyr}
elif (type=="e90")
type_alias="efield_arr"
cellp="/e90"
compp="rec_site"
total={n_of_e90}
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=="bc")
res=80
else
res=40
end
for (i = 0; i< {total}; i = i + 1)
create table /spktrns/raster_{type_alias}{i+1}
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_alias}{i+1}}
if ({getarg {arglist {recs}} -count} > 990)
echo Overflow of "recs" variable imminent; end
end
end
//*****Tables for spike trains
if (sr != 1)
i=0
while(i<{no})
if (!{exists /spktrns/sptr_{type_alias}{i+1}})
// davedit ------------------------ For saving electrode data ------------------------
if (type=="e90")
create table /spktrns/sptr_{type_alias}{i+1}
setfield ^ step_mode 3
useclock ^ 2
call ^ TABCREATE {{time}/{dt3}} 0 {time}
addmsg {cellp}/{compp}[{i}] /spktrns/sptr_{type_alias}{i+1} INPUT field
recs = {strcat {recs} " "}
recs = {strcat {recs} sptr_{type_alias}{i+1}}
if ({getarg {arglist {recs}} -count} > 990)
echo Overflow of "recs" variable imminent; end
i=i+1
else
// end davedit ------------------------ For saving electrode data ------------------------
create table /spktrns/sptr_{type_alias}{i+1}
setfield ^ step_mode 3
useclock ^ 1
call ^ TABCREATE {{time}/{dt2}} 0 {time}
addmsg {cellp}[{i}]/{compp} /spktrns/sptr_{type_alias}{i+1} INPUT Vm
recs = {strcat {recs} " "}
recs = {strcat {recs} sptr_{type_alias}{i+1}}
if ({getarg {arglist {recs}} -count} > 990)
echo Overflow of "recs" variable imminent; end
i=i+1
end
end
end
end
ce /
end
//*****An argumentless function for writing data on disk***********************
function spike_rec_save
//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