// genesis - sample currents from dendrite
// Output format
addglobal str out_form "%0.15g"
setclock 2 100 // prevents carriage returns from sim_chan
// set voltages: creates tables V_1...V_n (n=nV) of voltages
function set_voltage(files)
if ({strcmp {files} "none"})
int j, nV={getarg {arglist {files}} -count}
for (j=1; j<={nV}; j=j+1)
create table "time"
call "time" TABCREATE 1 0 1 // default to be overwritten
str file = {getarg {arglist {files}} -arg {j}}
file2tab {file} "time" table -table2 "dummy"
float tdivs = {getfield time table->xdivs}
create table "V_"{j}
call "V_"{j} TABCREATE 1 0 1 // default to be overwritten
setfield "V_"{j} step_mode 2 stepsize 0
file2tab {file} "V_"{j} table -xy {tdivs}
echo "set V_"{j}" for" {file}
end
else
echo "voltage not specified in file"
end
end
// output results: output_sim <dir> <file> <object> <var1> <var2> ...
function output_sim(dir,file,object,var)
str dir, file, object, var
if (!{exists {file}}) // create & open asc_file if doesn't exist
create asc_file {file}
setfield {file} filename {dir}/{file} leave_open 1 append 1 float_format {out_form}
call {file} OUT_OPEN // (careful - think acts as toggle)
end
useclock {file} 1
int i, nv=({argc}-3)
for (i=1; i<={nv}; i=i+1) // write header describing vars
str var = {argv {3+i}}
call {file} OUT_WRITE "%" {object} {var}
end
for (i=1; i<={nv}; i=i+1) // iterate through variables
str var = {argv {3+i}} // ... and add message to asc_file
addmsg {object} {file} SAVE {var}
end
end
//===============================
// Main Script
//===============================
// set voltage
set_voltage {files_voltage}
// some vars
float pi = 3.14, SA = pi*len*dia, SA1 = pi*len1*dia1, XA = pi*dia*dia/4, XA1 = pi*dia1*dia1/4
// Make the cell
create neutral /cell
create compartment /cell/soma
create compartment /cell/dend
setfield /cell/soma dia {dia} len {len} Em {Em0} Cm {CM0*SA} Rm {RM0/SA} Ra {RA0*len/XA}
setfield /cell/dend dia {dia1} len {len1} Em {Em0} Cm {CM0*SA1} Rm {RM0/SA1} Ra {RA0*len1/XA1}
// Simulation variables
float V0 = {getfield V_1 table->table[0]}
float tmax = {getfield V_1 table->xmax}
float dt = {getfield V_1 table->dx}
setclock 1 {dt}
// Initial voltage input
create table V_0
call V_0 TABCREATE 1 1 1
setfield V_0 step_mode 1 table->table[0] {V0} table->table[1] {V0}
// Initialise sim
reset
setclock 0 {100*dt}
addmsg V_0 /cell/dend AXIAL output
step 100 -t
deletemsg /cell/dend 0 -incoming -find V_0 AXIAL
// Save initial state
save /cell/## {dir_out}/dend.save
// Output voltages from each compartment
output_sim {dir_out} data_Vd.dat /cell/dend Vm
// Run sim
int i
for (i=1; i<={countelementlist /V_#}-1; i=i+1)
reset
restore {dir_out}/dend.save
addmsg "V_"{i} /cell/dend AXIAL output
setclock 0 {dt}
step {tmax} -t
deletemsg /cell/dend 0 -incoming -find "V_"{i} AXIAL
end
quit