#!/bin/bash
currpath=`pwd`
## ****************************************** Overview ***************************************************
# Please address feedback or comments to David Stanley, Boston University.
# Email is my last name followed by my first initial at bu dot edu.
########### Quick start ###############
#This is the bash script used for launching the Genesis code. It assumes Genesis executable is in your
#current path, and will call Genesis by the command "genesis."
#
#The function of this script is to run one or several Genesis simulations for the purpose of condcuting
#parameter sweeps. The main parameter that is swept over is the "time of day" parameter, upon which certain
#neural parameters are dependent.
#
#To run the script, type
#
#./ssh_script.sh N
#
#where N is a number from 0 - 5 controlling which parameter sweep is used. The possibilities are
#listed below. Note that Modes 3-5 assume parallel execution is set up.
#
# Mode 0 run small network under default settings. Use local machine.
# Mode 1 - Run full network locally.
# Mode 2 Run small network at multiple circadian time points. Plotting is disabled
# Mode 3 - Healthy vs Injured (tests the effects of removing the septum)
# Used in Figure 7A-D of paper
# Note that I sweep through several parameters here. I end up only using EC_amp0 = 0.25
# Mode 4 - Sensitivity analysis; vary melatonin and septal inputs
# Used in Figure 7E of paper
# Mode 5 - Singles; apply only 1 circadian input at a time.
# Used in Figure A3 (Appendix) of paper
# (This code is taken from S05f_singles_huge)
#
############# How the script works ########
#This script works by setting up basic parameters and then calling a function called runexp (see
#ssh_script_funcs.sh). This function will automatically generate a bunch of Genesis scripts named sag_paramsI.g,
#where i is an integer. These scripts correspond to different "times of day." It will then execute these scripts
#(in serial or parallel, depending on run_mode; see below). runexp also accepts an argument. This argument tells
#the script how many times of day you would like to simulate. These values are hard coded into runexp (see
#ssh_script_funcs.sh).
#
#Additional parameter sweeps can be conducted over synaptic channel strengths, etc (see Modes 3 and 4 below).
#
############# Simulation output ########
#Output is generated and stored in a directory (specified by the variable dataoutput_path). It is organized
#by the time of day of each simulation and includes both membrane voltage (spike traces, sptr*.dat) and spike
#times (raster plots, raster*.dat).
#
############# Note: Parallel execution ########
#This script has two ways to run code and this is controlled by the "run_mode" variable. When run_mode=1, all
#parameter sweeps will run in serail within your current terminal, one after the other. For other values of
#run_mode, the bash script will distribute simulations via ssh commands to a machine with multiple nodes. This
#will likely require some customizaiton to get working, but you can see examples of how this works by looking
#at the run_genesis() function in ssh_script_funcs.sh. In particular, run_mode=5 is useful for submitting to
#a cluster that uses qsub, while run_mode=4 can distribute to different nodes based on their names.
## ****************************************** Load parameters and functions **********************************
source ssh_script_params.sh
source ssh_script_funcs.sh
## ****************************************** Start Script ***************************************************
## Neuron Setup
SIMPATH1="/Applications/NEURON-7.1/nrn/share/nrn/"
SIMNAME1="lib/hoc/nrngui.hoc"
SIMPATH2="./"
SIMNAME2="50knet_dav.hoc"
MODFILE_HOME="mod/umac/special"
MODFILE_REMOTE="mod_MB/umac/special"
EXECPATH="./"
## Genesis Setup
GEN_EXEC="genesis"
GEN_SIMNAME="main_script.g"
## Files
PARAM_FILENAME_ROOT="sag_params"
MATLAB_FILELIST="fnamelist"
MATLAB_CIRCLIST="circnamelist"
MATLAB_VARLIST="varnamelist"
## Simflags
run_mode=1
NOSAVE=0
dataoutput_path="./S05f_randseed_huge"
expname_suffix='_def'
expname_raw="do"
sim_mode=$1
## Turn off graphics if running remotely via SSH
if ([ $run_mode = 3 ]||[ $run_mode = 4 ]); then graphics_on=0; fi
## Mode 0 run small network under default settings. Use local machine.
if [ $sim_mode = 0 ]; then
NOSAVE=1;
run_mode=1 ## Run full sim locally
sim_time=1.0 # 1 seconds simtime
plot_on=1
small_net=1 # Run a small network with only a few neurons
include_NMDA=0 # NMDA synapses were not used in this version
bc_gammanet=0 # This was used for tuning purposes only
percent_msg_intact=1.0 # Adjust this parameter to simulate septal injury
percent_ACh_intact=1.0 # Ach synapses were not used in this version
no_synapses=0 # Synapse-less version of model. Useful for parameter tuning.
setup_batch
export numexps=0
# Setting up default circadian input magnitudes
EC_amp0=0.25; SCN_amp0=0.20; mel_amp0=0.10; Ca_amp0=0.20
ACh_accom_amp0=0.20; ACh_Esyn_amp0=0.20; ACh_pyr_amp0=0.20;
ACh_Isyn_amp0=${ACh_Esyn_amp0}; ACh_bc_amp0=${ACh_pyr_amp0}; ACh_olm_amp0=${ACh_pyr_amp0}
# Set up parameters for the simulation
percent_msg_intact=1.0
EC_amp=${EC_amp0}; SCN_amp=${SCN_amp0}; mel_amp=${mel_amp0}; Ca_amp=0.0; ACh_Esyn_amp=0.0;
ACh_accom_amp=0.0; ACh_pyr_amp=0.0;
ACh_Isyn_amp=${ACh_Esyn_amp}; ACh_bc_amp=${ACh_pyr_amp}; ACh_olm_amp=${ACh_pyr_amp}
expname_raw=""$numexps"_"; expname_suffix="test_smallnet_6am"; runexp 1
# This batch of simulations will be named "test_smallnet_6am"
# runexp N function controls generation of circadian simulations
# N tells the number of times of day to simulate (see runexp function
# for possibilities).
fi
# Mode 1 - Run full network locally.
if [ $sim_mode = 1 ]; then
NOSAVE=1;
run_mode=1 ## Run full sim locally
sim_time=1.0 # 1 seconds simtime
plot_on=1
small_net=0 # Run whole network
include_NMDA=0 # NMDA synapses were not used in this version
bc_gammanet=0 # This was used for tuning purposes only
percent_msg_intact=1.0 # Adjust this parameter to simulate septal injury
percent_ACh_intact=1.0 # Ach synapses were not used in this version
no_synapses=0 # Synapse-less version of model. Useful for parameter tuning.
setup_batch
export numexps=0
# Setting up default circadian input magnitudes
EC_amp0=0.25; SCN_amp0=0.20; mel_amp0=0.10; Ca_amp0=0.20
ACh_accom_amp0=0.20; ACh_Esyn_amp0=0.20; ACh_pyr_amp0=0.20;
ACh_Isyn_amp0=${ACh_Esyn_amp0}; ACh_bc_amp0=${ACh_pyr_amp0}; ACh_olm_amp0=${ACh_pyr_amp0}
# Set up parameters for the simulation
percent_msg_intact=1.0
EC_amp=${EC_amp0}; SCN_amp=${SCN_amp0}; mel_amp=${mel_amp0}; Ca_amp=0.0; ACh_Esyn_amp=0.0;
ACh_accom_amp=0.0; ACh_pyr_amp=0.0;
ACh_Isyn_amp=${ACh_Esyn_amp}; ACh_bc_amp=${ACh_pyr_amp}; ACh_olm_amp=${ACh_pyr_amp}
expname_raw=""$numexps"_"; expname_suffix="test_fullnet_6am"; runexp 1
fi
# Mode 2 Run small network at multiple
if [ $sim_mode = 2 ]; then # circadian time points. Plotting is disabled
NOSAVE=1;
run_mode=1 ## Run full sim locally
sim_time=1.0 # 1 seconds simtime
plot_on=0
small_net=1 # Run whole network
include_NMDA=0 # NMDA synapses were not used in this version
bc_gammanet=0 # This was used for tuning purposes only
percent_msg_intact=1.0 # Adjust this parameter to simulate septal injury
percent_ACh_intact=1.0 # Ach synapses were not used in this version
no_synapses=0 # Synapse-less version of model. Useful for parameter tuning.
setup_batch
export numexps=0
# Setting up default circadian input magnitudes
EC_amp0=0.25; SCN_amp0=0.20; mel_amp0=0.10; Ca_amp0=0.20
ACh_accom_amp0=0.20; ACh_Esyn_amp0=0.20; ACh_pyr_amp0=0.20;
ACh_Isyn_amp0=${ACh_Esyn_amp0}; ACh_bc_amp0=${ACh_pyr_amp0}; ACh_olm_amp0=${ACh_pyr_amp0}
# Set up parameters for the simulation
percent_msg_intact=1.0
EC_amp=${EC_amp0}; SCN_amp=${SCN_amp0}; mel_amp=${mel_amp0}; Ca_amp=0.0; ACh_Esyn_amp=0.0;
ACh_accom_amp=0.0; ACh_pyr_amp=0.0;
ACh_Isyn_amp=${ACh_Esyn_amp}; ACh_bc_amp=${ACh_pyr_amp}; ACh_olm_amp=${ACh_pyr_amp}
expname_raw=""$numexps"_"; expname_suffix="test_fullnet_6am"; runexp 4
fi
if [ $sim_mode = 3 ]; then # Mode 3 - Healthy vs Injured (tests the effects of removing the septum)
# Used in Figure 7A-D of paper
# Note that I sweep through several parameters here. I end up only using EC_amp0 = 0.25
NOSAVE=0;
run_mode=4 ## Run full sim locally
sim_time=10.0
plot_on=0
small_net=0
include_NMDA=0
bc_gammanet=0
percent_msg_intact=1.0
percent_ACh_intact=1.0
no_synapses=0
setup_batch
export numexps=0
# Setting up default circadian input magnitudes
EC_amp0=0.25; SCN_amp0=0.20; mel_amp0=0.10; Ca_amp0=0.20
ACh_accom_amp0=0.20; ACh_Esyn_amp0=0.20; ACh_pyr_amp0=0.20;
ACh_Isyn_amp0=${ACh_Esyn_amp0}; ACh_bc_amp0=${ACh_pyr_amp0}; ACh_olm_amp0=${ACh_pyr_amp0}
# Running simulations
# Sens
for EC_amp0 in 0.23 0.25
do
for SCN_amp0 in 0.25
do
# Healthy
percent_msg_intact=1.0
EC_amp=${EC_amp0}; SCN_amp=${SCN_amp0}; mel_amp=${mel_amp0}; Ca_amp=0.0; ACh_Esyn_amp=0.0;
ACh_accom_amp=0.0; ACh_pyr_amp=0.0;
ACh_Isyn_amp=${ACh_Esyn_amp}; ACh_bc_amp=${ACh_pyr_amp}; ACh_olm_amp=${ACh_pyr_amp}
expname_raw=""$numexps"_"; expname_suffix="healthy_all3"; runexp 16
done
done
for EC_amp0 in 0.25
do
for SCN_amp0 in 0.10
do
# Latent
percent_msg_intact=0.0
EC_amp=${EC_amp0}; SCN_amp=${SCN_amp0}; mel_amp=${mel_amp0}; Ca_amp=0.0; ACh_Esyn_amp=0.0;
ACh_accom_amp=0.0; ACh_pyr_amp=0.0;
ACh_Isyn_amp=${ACh_Esyn_amp}; ACh_bc_amp=${ACh_pyr_amp}; ACh_olm_amp=${ACh_pyr_amp}
expname_raw=""$numexps"_"; expname_suffix="latent_all3"; runexp 16
done
done
fi
if [ $sim_mode = 4 ]; then # Mode 4 - Sensitivity analysis; vary melatonin and septal inputs
# Used in Figure 7E of paper
NOSAVE=0;
run_mode=6 ## Run full sim locally
sim_time=5.0
plot_on=0
small_net=0
include_NMDA=0
bc_gammanet=0
percent_msg_intact=1.0
percent_ACh_intact=1.0
no_synapses=0
setup_batch
export numexps=0
# Setting up default circadian input magnitudes
EC_amp0=0.25; SCN_amp0=0.25; mel_amp0=0.10; Ca_amp0=0.20
ACh_accom_amp0=0.20; ACh_Esyn_amp0=0.20; ACh_pyr_amp0=0.20;
ACh_Isyn_amp0=${ACh_Esyn_amp0}; ACh_bc_amp0=${ACh_pyr_amp0}; ACh_olm_amp0=${ACh_pyr_amp0}
# Running simulations
# Sens
for mel_amp0 in 0.05 0.075 0.085 0.10 0.12 0.14 0.18
do
for percent_msg_intact in 0.0 0.15 0.3 0.45 0.65 0.80 1.0
do
# Healthy
EC_amp=${EC_amp0}; SCN_amp=${SCN_amp0}; mel_amp=${mel_amp0}; Ca_amp=0.0; ACh_Esyn_amp=0.0;
ACh_accom_amp=0.0; ACh_pyr_amp=0.0;
ACh_Isyn_amp=${ACh_Esyn_amp}; ACh_bc_amp=${ACh_pyr_amp}; ACh_olm_amp=${ACh_pyr_amp}
expname_raw=""$numexps"_"; expname_suffix="healthy_all3"; runexp 9
done
done
fi
if [ $sim_mode = 5 ]; then # Mode 5 - Singles; apply only 1 circadian input at a time.
# Used in Figure A3 (Appendix) of paper
# This code is taken from S05f_singles_huge
NOSAVE=0;
run_mode=4 ## Run full sim locally
sim_time=10.0
plot_on=0
small_net=0
include_NMDA=0
bc_gammanet=0
percent_msg_intact=1.0
percent_ACh_intact=1.0
no_synapses=0
setup_batch
export numexps=0
# Setting up default circadian input magnitudes
EC_amp0=0.25; SCN_amp0=0.25; mel_amp0=0.10; Ca_amp0=0.20
ACh_accom_amp0=0.20; ACh_Esyn_amp0=0.20; ACh_pyr_amp0=0.20;
ACh_Isyn_amp0=${ACh_Esyn_amp0}; ACh_bc_amp0=${ACh_pyr_amp0}; ACh_olm_amp0=${ACh_pyr_amp0}
# Running simulations
# Healthy
percent_msg_intact=1.0
EC_amp=${EC_amp0}; SCN_amp=0.0; mel_amp=0.0; Ca_amp=0.0; ACh_Esyn_amp=0.0;
ACh_accom_amp=0.0; ACh_pyr_amp=0.0;
ACh_Isyn_amp=${ACh_Esyn_amp}; ACh_bc_amp=${ACh_pyr_amp}; ACh_olm_amp=${ACh_pyr_amp}
expname_raw=""$numexps"_"; expname_suffix="Pyrinj"; runexp 16
EC_amp=0.0; SCN_amp=${SCN_amp0}; mel_amp=0.0; Ca_amp=0.0; ACh_Esyn_amp=0.0;
ACh_accom_amp=0.0; ACh_pyr_amp=0.0;
ACh_Isyn_amp=${ACh_Esyn_amp}; ACh_bc_amp=${ACh_pyr_amp}; ACh_olm_amp=${ACh_pyr_amp}
expname_raw=""$numexps"_"; expname_suffix="SCN"; runexp 16
EC_amp=0.0; SCN_amp=0.0; mel_amp=${mel_amp0}; Ca_amp=0.0; ACh_Esyn_amp=0.0;
ACh_accom_amp=0.0; ACh_pyr_amp=0.0;
ACh_Isyn_amp=${ACh_Esyn_amp}; ACh_bc_amp=${ACh_pyr_amp}; ACh_olm_amp=${ACh_pyr_amp}
expname_raw=""$numexps"_"; expname_suffix="mel"; runexp 16
# percent_msg_intact=0.0
# EC_amp=${EC_amp0}; SCN_amp=0.0; mel_amp=0.0; Ca_amp=0.0; ACh_Esyn_amp=0.0;
# ACh_accom_amp=0.0; ACh_pyr_amp=0.0;
# ACh_Isyn_amp=${ACh_Esyn_amp}; ACh_bc_amp=${ACh_pyr_amp}; ACh_olm_amp=${ACh_pyr_amp}
# expname_raw=""$numexps"_"; expname_suffix="latent_Pyrinj"; runexp 16
#
# EC_amp=0.0; SCN_amp=0.0; mel_amp=${mel_amp0}; Ca_amp=0.0; ACh_Esyn_amp=0.0;
# ACh_accom_amp=0.0; ACh_pyr_amp=0.0;
# ACh_Isyn_amp=${ACh_Esyn_amp}; ACh_bc_amp=${ACh_pyr_amp}; ACh_olm_amp=${ACh_pyr_amp}
# expname_raw=""$numexps"_"; expname_suffix="latent_mel"; runexp 16
fi