// ************************************************************
// Common functions to be used in CIP-injection experiments.
// See bottom for out-of-function commands.
// ---
// Made into function form with added logics by C. Gunay, 2006/01/25
// ************************************************************
// Initialize defaults
include ../../common/simdefaults.g
// Configuration options that can be overridden in the setup script
// ----------------------------------------------------------------------
// Where data files normally reside
str defdatadir = "data"
// Temporary directory where data files are created.
// Can improve speed if network drives are avoided during simulation.
str tmpdir = "/var/tmp"
// Move files to this destination, can have host names like "work00:run/data"
str destdir = "data"
// Whether or not to compress data files
int compressdata = 0
// Whether or not to save the snapshot image
int savesnapshot = 0
// Whether or not to save Itotal array
int saveItotal = 0
// Snapshotname
str snapshotname
// Sequence number of the trial parameter
int trialparamnum = 11
// ----------------------------------------------------------------------
// end of configuration options
// temp variables
str fileexists
// sets pulse amplitude and width
function setpulse (cip_pA, delay, width)
setfield /pulse \
level1 {{cip_pA}*1e-12}\
width1 {width} \
delay1 {delay} \
delay2 50 \
baselevel 0 \
trig_mode 0
end
// Compresses data file and returns new file name.
// If fails, returns original filename.
function compress_data_file (raw_filename)
str comp_filename={strsub {raw_filename} .bin .genflac}
// TODO: check if 86-84 architecture
str success = {sh convertgenesis16bit-x86_64 {raw_filename} {comp_filename}}
if ({success} == "0")
// successfully compressed file
rm {raw_filename}
return {comp_filename}
else
echo "*** Warning: Failed to compress data file " @ {raw_filename} @ "."
return {raw_filename}
end
end
// run a simulation for given cip parameters
function do_cip_run (cip_pA, delay, width, run_dur, cellpath, basefilename, snapshotname)
str file_ext
str filename_stem = {basefilename} @ "_" @ {cip_pA} @ "_pAcip"
str filename_v = {filename_stem} @ ".bin"
str filename_itot = {filename_stem} @ "_g" @ ".bin"
// Exit if data file already exists, assume sim done
str deffilename = {defdatadir} @ {filename_v}
str checkfilename
if ({compressdata} != 0)
checkfilename = {defdatadir} @ {filename_stem} @ ".genflac"
else
checkfilename = {defdatadir} @ {filename_stem} @ ".bin"
end
fileexists = {ls {checkfilename}}
if ({fileexists} == "0")
echo "*** Warning: Datafile " {filename_v} " already exists, skipping."
echo " Remove it and rerun the simulation if you want it recreated."
return
end
// Write to file
str deffilename = {tmpdir} @ {filename_v}
str deffilename_itot = {tmpdir} @ {filename_itot}
// Write voltage trace
setfield /out_v filename {deffilename}
setpulse {cip_pA} {delay} {width}
if ({saveItotal} != 0)
// Write total currents
setfield /out_Itot filename {deffilename_itot}
end
// Run simulation
reset
if ({snapshotname} != "")
restore {snapshotname}
call {cellpath} HRESTORE
end
step {run_dur} -time
// File data is not flushed unless the following is done
setfield /out_v flush 1
setfield /out_v filename "/var/tmp/a"
step 1
setfield /out_v flush 0
//rm /tmp/a
if ({saveItotal} != 0)
setfield /out_Itot flush 1
setfield /out_Itot filename "/var/tmp/a"
step 1
setfield /out_Itot flush 0
end
if ({compressdata} != 0)
// compress data file
deffilename = {compress_data_file {deffilename}}
if ({saveItotal} != 0)
deffilename_itot = {compress_data_file {deffilename_itot}}
end
end
// Copy file from temporary location to desired location
fileexists = {time mv {deffilename} {destdir}}
if ({fileexists} == "0")
// Remove original data file only if copy was successful
//rm {deffilename}
end
end
function create_tmpdir
// create tmpdir, if missing
fileexists = {mkdir {tmpdir}}
//echo "exit status: " @ {fileexists}
/*if (fileexists != "0")
echo "Error creating directory " @ {tmpdir}
quit
end
*/
end
// Cleanup and finish CIP experiment
function cip_finish
// No need to save snapshot. takes too much space and wastes time.
if (savesnapshot != 0)
mv {snapshotname} {destdir}
else
rm {snapshotname}
end
quit
end
function cip_init
// Start saving voltage data
create disk_out /out_v
useclock /out_v 1
setfield /out_v flush 0 append 0 leave_open 1
str hstr = {findsolvefield {cellpath} {cellpath}/soma Vm}
addmsg {cellpath} /out_v SAVE {hstr}
if ({saveItotal} != 0)
// For saving current data
create disk_out /out_Itot
useclock /out_Itot 1
setfield /out_Itot flush 0 append 0 leave_open 1
// Itotal array
int i
for (i=1; i<=15; i=i+1)
addmsg {cellpath} /out_Itot SAVE itotal[{i}]
end
end
create_tmpdir
end
// function to read variable parameter values from environment variable
function read_env_params
str parrow = {getenv GENESIS_PAR_ROW}
if ({parrow} == "")
echo "*********************************************************************"
echo "Error: This script needs to read the parameters from the environment "
echo " variable GENESIS_PAR_ROW. Set the variable prior to running"
echo " the script. Aborting simulation."
echo "*********************************************************************"
quit
end
return {parrow}
end