/**
* This methods runs the simulation for the time specified by 'duration' (in seconds).
*
*/
function runCurrentInj(duration)
float duration
check
reset
reset
step {{duration} / {getclock 0}}
end
function createOutput(protocolname, channel0, channel1)
/* Create a temporary directory if not existent. */
if ({exists /tmp} != 1)
create neutral /tmp
end
/* Channel 0: current steps. */
create asc_file /tmp/plotIVchan0
setfield /tmp/plotIVchan0 filename "./output/"{protocolname}"_ch"{channel0}".dat"
useclock /tmp/plotIVchan0 1
/* Channel 1: voltage responses. */
create asc_file /tmp/plotIVchan1
setfield /tmp/plotIVchan1 filename "./output/"{protocolname}"_ch"{channel1}".dat"
useclock /tmp/plotIVchan1 1
end
/**
* Delete the temporary output elements.
*/
function deleteOutput
delete /tmp/plotIVchan0
delete /tmp/plotIVchan1
end
/**
* ...
*/
function currentInj(comppath, path, level, scale, delay, duration)
str comppath
str path
float level
float scale
float delay
float duration
if ({exists {path}} == 1)
return
end
create pulsegen {path}
setfield {path} level1 {{scale} * {level}} delay1 {delay} width1 {duration} \
level2 0.0 delay2 0.0 width2 3600.0 \
baselevel 0.0 trig_mode 0
create neutral {path}/level
setfield {path}/level x {level}
addmsg {path} {comppath} INJECT output
end
/**
* Starts at 100 pA and increases with
*
*/
function runTesteCode(cellpath, scale)
str cellpath
float scale
float level = {scale} * 100.0e-12 // Scale the default value of 100 pA.
float stepsize = {level} * 0.2 // The step size is one-fifth.
createOutput "TesteCode" 0 1
/* Create one copy for each step. */
int n
for (n = 0; n < 5; n = n + 1)
echo "n = "{n}
copy {cellpath} /tmp/neuron[{n}]
currentInj /tmp/neuron[{n}]/soma /tmp/cinj[{n}] {level} 1.0 0.1 0.5
level = {level} + {stepsize}
echo "Level = "{level}
addmsg /tmp/cinj[{n}] /tmp/plotIVchan0 SAVE output
addmsg /tmp/neuron[{n}]/soma /tmp/plotIVchan1 SAVE Vm
end
/* Run the protocol (0.7 s total). */
runCurrentInj 0.7
/* Clean-up. */
for (n = 0; n < 5; n = n + 1)
delete /tmp/neuron[{n}]
delete /tmp/cinj[{n}]
echo "Delete temporary elements (n = "{n}")"
end
deleteOutput
end
/**
* This function runs short (50 ms) steps of high amplitude.
* Steps are 400, 450, ..., 650, 700 pA
* cellpath is the path to the cell in which current is injected somatically
* maxlevel is the maximal current amplitude
*/
function runAPWaveform(cellpath, scale)
str cellpath
float scale
float level = {scale} * 200.0e-12 // Scale the default value of 200 pA.
float stepsize = {level} / 6.0 // The step size is one sixth.
createOutput "APWaveform" 0 1
/* Create one copy for each step. */
int n
for (n = 0; n < 11; n = n + 1)
echo "n = "{n}
copy {cellpath} /tmp/neuron[{n}]
currentInj /tmp/neuron[{n}]/soma /tmp/cinj[{n}] {level} 1.0 0.005 0.05
level = {level} + {stepsize}
echo "Level = "{level}
addmsg /tmp/cinj[{n}] /tmp/plotIVchan0 SAVE output
addmsg /tmp/neuron[{n}]/soma /tmp/plotIVchan1 SAVE Vm
end
runCurrentInj 0.08
/* Clean-up. */
for (n = 0; n < 11; n = n + 1)
delete /tmp/neuron[{n}]
delete /tmp/cinj[{n}]
end
deleteOutput
end
/**
* ...
*/
function currentInjFixDur(comppath, path, level, scale)
str comppath
str path
float level
float scale
if ({exists {path}} == 1)
return
end
create pulsegen {path}
setfield {path} level1 {{scale} * {level}} delay1 0.1 width1 1.0 level2 0.0 delay2 0.0 width2 100.0 baselevel 0.0 trig_mode 0
create neutral {path}/level
setfield {path}/level x {level}
addmsg {path} {comppath} INJECT output
end
/**
* Run different steps of somatic current injection (1 sec).
* cellpath is the path to the cell in which current is injected somatically (e.g. /fsn[0])
* level is the amount of current to be injected at 100%. Current steps are testet for -280..160%.
*/
function runIV(cellpath, level)
str cellpath
float level
/* Create a temporary directory if not existent. */
if ({exists /tmp} != 1)
create neutral /tmp
end
/* Channel 0: current steps. */
create asc_file /tmp/plotIVchan0
setfield /tmp/plotIVchan0 filename "./output/IVchan0.dat"
useclock /tmp/plotIVchan0 1
/* Channel 1: voltage responses. */
create asc_file /tmp/plotIVchan1
setfield /tmp/plotIVchan1 filename "./output/IVchan1.dat"
useclock /tmp/plotIVchan1 1
/* Create one copy for each step. */
int n
for (n = 0; n < 12; n = n + 1)
echo "n = "{n}
copy {cellpath} /tmp/fsn[{n}]
currentInjFixDur /tmp/fsn[{n}]/soma /tmp/cinj[{n}] {level} {{{n}/2.5}-2.8}
addmsg /tmp/cinj[{n}] /tmp/plotIVchan0 SAVE output
addmsg /tmp/fsn[{n}]/soma /tmp/plotIVchan1 SAVE Vm
end
/* Run the protocol (1.2 sec total). */
check
reset
reset
step {1.2/{getclock 0}}
/* Clean-up. */
for (n = 0; n < 12; n = n + 1)
delete /tmp/fsn[{n}]
delete /tmp/cinj[{n}]
end
delete /tmp/plotIVchan0
delete /tmp/plotIVchan1
end
function setInj(path, level1)
str path
float level1
setfield {path} level1 {level1}
setfield {path}/level x {level1}
end
function scaleInj(path, scale)
str path
float scale
setfield {path} level1 {{scale} * {getfield {path}/level x}}
echo "Level1: "{getfield {path} level1}
end
/**
* Run different steps of somatic current injection to test the frequency
* response of the neuron. The stimulus should evoke sub- and superthreshold
* responses.
*/
function runIDrest(cellpath, level)
str cellpath
float level
/* Create a temporary directory if not existent. */
if ({exists /tmp} != 1)
create neutral /tmp
end
/* Channel 0: current steps. */
create asc_file /tmp/plotIVchan0
setfield /tmp/plotIVchan0 filename "./output/IDrestchan0.dat"
useclock /tmp/plotIVchan0 1
/* Channel 1: voltage responses. */
create asc_file /tmp/plotIVchan1
setfield /tmp/plotIVchan1 filename "./output/IDrestchan1.dat"
useclock /tmp/plotIVchan1 1
int n
for (n = 0; n <= 11; n = n + 1)
copy {cellpath} /tmp/fsn[{n}]
currentInjFixDur /tmp/fsn[{n}]/soma /tmp/cinj[{n}] {level} {{{n}/2.5} + 1.2}
setfield /tmp/cinj[{n}] width1 2.0
addmsg /tmp/cinj[{n}] /tmp/plotIVchan0 SAVE output
addmsg /tmp/fsn[{n}]/soma /tmp/plotIVchan1 SAVE Vm
end
/* Run the protocol (1.2 sec total). */
check
reset
reset
step {2.2/{getclock 0}}
/* Clean-up. */
for (n = 0; n <= 11; n = n + 1)
delete /tmp/fsn[{n}]
delete /tmp/cinj[{n}]
end
delete /tmp/plotIVchan0
delete /tmp/plotIVchan1
end