## ****************************************** Define Script functions ******************************************
# Take in a single bash variable and write that variable to
# our Neuron hoc parameter file
function wp()
{
echo $1 = ${!1} >> ${PARAM_FILENAME} #Use BASH indirection
#echo $1 = ${!1}
}
# Same as above, but special treatment for string variables
function wp_str()
{
echo strdef $1 >> ${PARAM_FILENAME}
echo $1 = \"${!1}\" >> ${PARAM_FILENAME}
#echo $1 = \"${!1}\"
}
# Genesis variable types
function wp_int()
{
echo int $1 = ${!1} >> ${PARAM_FILENAME} #Use BASH indirection
}
function wp_float()
{
echo float $1 = ${!1} >> ${PARAM_FILENAME} #Use BASH indirection
}
function wp_strgen()
{
echo str $1 = \"${!1}\" >> ${PARAM_FILENAME}
}
function wp_text()
{
echo ${!1} >> ${PARAM_FILENAME}
#echo ${!1}
}
function write_all_params()
{
echo '//Bash generated parameter file' > ${PARAM_FILENAME}
# wp_int scriptmode
# wp_float scale_difshell_binding_tau
# wp_strgen script_chan
wp_int small_net
wp_int no_synapses
wp_int plot_on
wp_int include_NMDA
wp_int bc_gammanet
wp_float percent_msg_intact
wp_float percent_ACh_intact
wp_float pi
wp_float EC_val
wp_float SCN_val
wp_float mel_val
wp_float ACh_val
wp_float Ca_val
wp_float EC_amp
wp_float SCN_amp
wp_float mel_amp
wp_float ACh_amp
wp_float Ca_amp
wp_float ACh_accom_amp
wp_float ACh_Esyn_amp
wp_float ACh_Isyn_amp
wp_float ACh_pyr_amp
wp_float ACh_bc_amp
wp_float ACh_olm_amp
wp_float pyr_inject0
wp_float bc_inject0
wp_float olm_inject0
wp_float msg_inject0
wp_float bc2pyr_GABA_A0
wp_float pyr2pyr_AMPA0
wp_float Gmax_pyr_bkgnd0
# # Defined below
wp_strgen dataoutput_path #String
wp_strgen expname_path #String
wp_strgen circtime_path #String
wp_float sim_time
wp_int tindex
strvar="include "${GEN_SIMNAME}
wp_text strvar
}
function setup_batch()
{
if [ $NOSAVE = 1 ]; then # If we're not worried about saving data,
dataoutput_path="./dataset_temp" # dump to currentdir
if [ -d $dataoutput_path ]; then
echo Temporary data path already exists. Purging…
rm -rf $dataoutput_path
mkdir $dataoutput_path
else
mkdir $dataoutput_path
fi
else
if [ -d $dataoutput_path ]; then # Check if save directory already exists
echo Output directory \"${dataoutput_path}\" already exists. Exiting…
exit 0
fi
mkdir $dataoutput_path
cp ./ssh_script.sh ${dataoutput_path}
fi
mkdir ${dataoutput_path}/snapshot
echo Copying simulation files
cp ./*.p ${dataoutput_path}/snapshot/
cp ./*.g ${dataoutput_path}/snapshot/
cp ./*.sh ${dataoutput_path}/snapshot/
cp ./*.m ${dataoutput_path}/snapshot/
echo '% List of pathnames' > ${dataoutput_path}/${MATLAB_FILELIST}file.m
echo '% List of variable names' > ${dataoutput_path}/${MATLAB_VARLIST}file.m
export numprocs=1
}
function getcirc
{
circ_amp=$1; circ_period=$2; circ_phase=$3; t=$4
echo "{1 + "${circ_amp}"* {cos {2*{pi}/"${circ_period}"*{"${t}"-"${circ_phase}"}}} }"
}
function run_neuron()
{
fullname_spike=${dataoutput_path}${filename_spike}${filename_suffix} # Generate filename for raster
echo fnamearr_spike\{${numprocs}\} = "'"${fullname_spike}"'"';' >> ${dataoutput_path}${MATLAB_FILELIST}.m # Save filename to Matlab
fullname_count=${dataoutput_path}${filename_counts}${filename_suffix}
echo fnamearr_count\{${numprocs}\} = "'"${fullname_count}"'"';' >> ${dataoutput_path}${MATLAB_FILELIST}.m
fullname_smooth=${dataoutput_path}${filename_smooth}${filename_suffix}
echo fnamearr_smooth\{${numprocs}\} = "'"${fullname_smooth}"'"';' >> ${dataoutput_path}${MATLAB_FILELIST}.m
write_all_params
if [ $run_mode = 1 ]; then
echo Opening new command window
cmd_prefix="xterm -e"
$cmd_prefix ${EXECPATH}${MODPATH} ${SIMPATH1}${SIMNAME1} ${SIMPATH2}${SIMNAME2} - &
else
echo Loading in current command window
cmd_prefix = ""
$cmd_prefix ${EXECPATH}${MODPATH} ${SIMPATH1}${SIMNAME1} ${SIMPATH2}${SIMNAME2} -
fi
numprocs=$(($numprocs+1))
# echo 'echo filenamearr"{"'$[$numprocs + 1]'"}" = '"'"'{datafilename}fb1'"'"' >> matlab_script.m' >> main_script.g
}
function run_genesis()
{
EC_val=`getcirc $EC_amp $EC_period $EC_phase $t`
SCN_val=`getcirc $SCN_amp $SCN_period $SCN_phase $t`
mel_val=`getcirc $mel_amp $mel_period $mel_phase $t`
ACh_val=`getcirc $ACh_amp $ACh_period $ACh_phase $t`
Ca_val=`getcirc $Ca_amp $Ca_period $Ca_phase $t`
write_all_params
if [ $run_mode = 1 ]; then
echo Loading in current command window
cmd_prefix=""
$cmd_prefix ${GEN_EXEC} ${PARAM_FILENAME}
elif [ $run_mode = 2 ]; then
echo Opening new command window
cmd_prefix="xterm -e"
$cmd_prefix ${GEN_EXEC} ${PARAM_FILENAME} &
elif [ $run_mode = 3 ]; then
echo Running in SSH on Appliedchaos
cmd_prefix=""
ssh appliedchaos.asu.edu "export PATH=$PATH; export TERM=$TERM; cd $currpath; $cmd_prefix ${GEN_EXEC} ${PARAM_FILENAME} > sag_stdout${numprocs}.out" &
elif [ $run_mode = 4 ]; then
cmd_prefix=""
# echo SENDING to Dominique2; export SERVER="dominique2.asu.edu"
if (( $(( $numprocs % 4 )) == 0)); then
echo SENDING to Dominique1; export SERVER="dominique1.asu.edu"
elif (( $(( $numprocs % 4 )) == 1)); then
echo SENDING to Dominique2; export SERVER="dominique2.asu.edu"
elif (( $(( $numprocs % 4 )) == 2)); then
echo SENDING to Dominique3; export SERVER="dominique3.asu.edu"
elif (( $(( $numprocs % 4 )) == 3)); then
echo SENDING to Dominique4; export SERVER="dominique4.asu.edu"
fi
ssh $SERVER "export PATH=$PATH; export TERM=$TERM; cd $currpath; $cmd_prefix ${GEN_EXEC} ${PARAM_FILENAME} > sag_stdout${numprocs}.out" &
elif [ $run_mode = 5 ]; then
echo QSub to saguaro.
cmd_prefix=""
qsub <<< "cd ${currpath}; $cmd_prefix ${GEN_EXEC} ${PARAM_FILENAME} > sag_stdout${numprocs}.out" # Submits command to start GENESIS while running corresponding script.
elif [ $run_mode = 6 ]; then
cmd_prefix=""
# echo SENDING to Dominique2; export SERVER="dominique2.asu.edu"
if (( $(( $numprocs % 4 )) == 0)); then
echo SENDING to Hera1; export SERVER="heracles1.ahc.ufl.edu"
elif (( $(( $numprocs % 4 )) == 1)); then
echo SENDING to Hera2; export SERVER="heracles2.ahc.ufl.edu"
elif (( $(( $numprocs % 4 )) == 2)); then
echo SENDING to Hera3; export SERVER="heracles3.ahc.ufl.edu"
elif (( $(( $numprocs % 4 )) == 3)); then
echo SENDING to Hera4; export SERVER="heracles4.ahc.ufl.edu"
fi
ssh $SERVER "export PATH=$PATH; export TERM=$TERM; cd $currpath; $cmd_prefix ${GEN_EXEC} ${PARAM_FILENAME} > sag_stdout${numprocs}.out" &
fi
numprocs=$(($numprocs+1))
}
function runcirc()
{
export tindex=$(( ${tindex}+1 ))
echo ${MATLAB_CIRCLIST}\{${tindex}\} = "'"${expname_path}/${circtime_path}"'"';' >> ${dataoutput_path}/${expname_path}/${MATLAB_CIRCLIST}file.m # Save circadian file info to Matlab
if [ -d ${dataoutput_path}/${expname_path}/${circtime_path} ]; then # Check if save directory already exists
echo Output directory \"${dataoutput_path}/${expname_path}/${circtime_path}\" already exists. Exiting…
exit 0
fi
mkdir ${dataoutput_path}/${expname_path}/${circtime_path}
PARAM_FILENAME=${PARAM_FILENAME_ROOT}${numprocs}".g"
run_genesis;
if [ $NOSAVE = 0 ]; then # If we're going to save the data, give a delay
sleep 1
fi
}
function runexp()
{
num_time_intervals=$1
export numexps=$(( ${numexps}+1 ))
expname_path=${expname_raw}${expname_suffix} # Generate pathname for rasterplot
echo ${MATLAB_FILELIST}\{${numexps}\} = "'"${expname_path}"'"';' >> ${dataoutput_path}/${MATLAB_FILELIST}file.m # Save pathname to Matlab
echo ${MATLAB_VARLIST}\{${numexps}\} = "'"${expname_suffix}"'"';' >> ${dataoutput_path}/${MATLAB_VARLIST}file.m # Save variable name to Matlab
if [ -d ${dataoutput_path}/${expname_path} ]; then # Check if save directory already exists
echo Output directory \"${dataoutput_path}/${expname_path}\" already exists. Exiting…
exit 0
fi
mkdir ${dataoutput_path}/${expname_path}
export tindex=0
if [ $num_time_intervals = 1 ]; then
t=6; circtime_path='t6'; runcirc
fi
if [ $num_time_intervals = 2 ]; then
t=5; circtime_path='t5'; runcirc
t=7; circtime_path='t7'; runcirc
fi
if [ $num_time_intervals = 4 ]; then
t=0; circtime_path='t0'; runcirc
t=6; circtime_path='t6'; runcirc
t=12; circtime_path='t12'; runcirc
t=18; circtime_path='t18'; runcirc
fi
if [ $num_time_intervals = 5 ]; then
t=0; circtime_path='t0'; runcirc
t=2; circtime_path='t2'; runcirc
t=6; circtime_path='t6'; runcirc
t=10; circtime_path='t10'; runcirc
t=12; circtime_path='t12'; runcirc
fi
if [ $num_time_intervals = 7 ]; then
t=0; circtime_path='t0'; runcirc
t=2; circtime_path='t2'; runcirc
t=6; circtime_path='t6'; runcirc
t=10; circtime_path='t10'; runcirc
t=11; circtime_path='t11'; runcirc
t=12; circtime_path='t12'; runcirc
t=13; circtime_path='t13'; runcirc
fi
if [ $num_time_intervals = 9 ]; then
t=0; circtime_path='t0'; runcirc
t=3; circtime_path='t3'; runcirc
t=6; circtime_path='t6'; runcirc
t=9; circtime_path='t9'; runcirc
t=12; circtime_path='t12'; runcirc
t=14; circtime_path='t14'; runcirc
t=17; circtime_path='t17'; runcirc
t=20; circtime_path='t20'; runcirc
t=23; circtime_path='t23'; runcirc
fi
if [ $num_time_intervals = 10 ]; then
t=0; circtime_path='t0'; runcirc
t=2; circtime_path='t2'; runcirc
t=3; circtime_path='t3'; runcirc
t=4; circtime_path='t4'; runcirc
t=6; circtime_path='t6'; runcirc
t=8; circtime_path='t8'; runcirc
t=9; circtime_path='t9'; runcirc
t=10; circtime_path='t10'; runcirc
t=12; circtime_path='t12'; runcirc
t=13; circtime_path='t13'; runcirc
fi
if [ $num_time_intervals = 12 ]; then
t=0; circtime_path='t0'; runcirc
t=1; circtime_path='t1'; runcirc
t=2; circtime_path='t2'; runcirc
t=3; circtime_path='t3'; runcirc
t=4; circtime_path='t4'; runcirc
t=5; circtime_path='t5'; runcirc
t=6; circtime_path='t6'; runcirc
t=7; circtime_path='t7'; runcirc
t=8; circtime_path='t8'; runcirc
t=9; circtime_path='t9'; runcirc
t=10; circtime_path='t10'; runcirc
t=11; circtime_path='t11'; runcirc
fi
if [ $num_time_intervals = 16 ]; then
t=0; circtime_path='t0'; runcirc
t=1; circtime_path='t1'; runcirc
t=2; circtime_path='t2'; runcirc
t=4; circtime_path='t4'; runcirc
t=6; circtime_path='t6'; runcirc
t=8; circtime_path='t8'; runcirc
t=10; circtime_path='t10'; runcirc
t=12; circtime_path='t12'; runcirc
t=13; circtime_path='t13'; runcirc
t=14; circtime_path='t14'; runcirc
t=15; circtime_path='t15'; runcirc
t=17; circtime_path='t17'; runcirc
t=18; circtime_path='t18'; runcirc
t=19; circtime_path='t19'; runcirc
t=21; circtime_path='t21'; runcirc
t=23; circtime_path='t23'; runcirc
fi
}