%
% Generates the simulations for paper as mat files to be run by parallel processor
%
function generate_simulations(n_sims)
  if (exist('n_sims', 'var') == 0) 
	  n_sims = 10;
  end

	disp('Disregard any "vector too big" warnings.');

  % call this for nature neuroscience
  parpath = 'nn_par_mat/';
  save_path = 'nn_par_out/';
  natureneuro_sims(parpath, save_path, n_sims);

%
% generates for nature neuroscience
%
function natureneuro_sims(parpath, save_path, n_sims) 
  % ----------------------------------------------------------
  % 'Realistic' visual simulations -- repeat each n_sims times
  for n=1:n_sims
    % --- ones for which you have data
    % regular box
    ps_mod = get_default_psmod(1);
		ps_mod.g_syn_of_t_inh = get_synaptic_pattern(1, 1, 40 , ps_mod.tau_syn_inh, ps_mod.g_max_syn_inh,  ps_mod.duration, ...
														ps_mod.dt, 'uniform_synmap.mat', ps_mod.n_syns_per_facet_inh, ps_mod.tvnf_inh, ...
														ps_mod.tsdvnf_inh, ps_mod.velsf_inh);
		ps_mod.g_syn_of_t_exc = get_synaptic_pattern(1, 1, 40 , ps_mod.tau_syn_exc, ps_mod.g_max_syn_exc,  ps_mod.duration, ...
														ps_mod.dt, 'uniform_synmap.mat', ps_mod.n_syns_per_facet_exc, ps_mod.tvnf_exc, ...
														ps_mod.tsdvnf_exc, ps_mod.velsf_exc);
    ps_mod.savefile = [save_path '/realistic_nobapta_transbox_' num2str(n) '.mat'];
    params(1).value = ps_mod ; 
		generate(parpath, 'three_cmpt', params);

    ps_mod.tauCa = 20; 
    ps_mod.savefile = [save_path '/realistic_bapta_transbox_' num2str(n) '.mat'];
    params(1).value = ps_mod ; 
		generate(parpath, 'three_cmpt', params);
    
		% loom boxes
    L = [10 30 50];
    for l=1:length(L)
			ps_mod = get_default_psmod(1);
			ps_mod.g_syn_of_t_inh = get_synaptic_pattern(3, 1, L(l) , ps_mod.tau_syn_inh, ps_mod.g_max_syn_inh,  ps_mod.duration, ...
															ps_mod.dt, 'uniform_synmap.mat', ps_mod.n_syns_per_facet_inh, ps_mod.tvnf_inh, ...
															ps_mod.tsdvnf_inh, ps_mod.velsf_inh);
			ps_mod.g_syn_of_t_exc = get_synaptic_pattern(3, 1, L(l), ps_mod.tau_syn_exc, ps_mod.g_max_syn_exc,  ps_mod.duration, ...
															ps_mod.dt, 'uniform_synmap.mat', ps_mod.n_syns_per_facet_exc, ps_mod.tvnf_exc, ...
															ps_mod.tsdvnf_exc, ps_mod.velsf_exc);
													
			ps_mod.savefile = [save_path '/realistic_nobapta_loom_lv_' num2str(L(l)) '_' num2str(n) '.mat'];
			params(1).value = ps_mod ; generate(parpath, 'three_cmpt', params);
			ps_mod.tauCa = 20; 
			ps_mod.savefile = [save_path '/realistic_bapta_loom_lv_' num2str(L(l)) '_' num2str(n) '.mat'];
			params(1).value = ps_mod ; generate(parpath, 'three_cmpt', params);
    end
	end


%
% returns defaults
%
function ps_mod = get_default_psmod(use_set)
  % ----------------------------------------
  % model settings
 
  ps_mod = get_general_model_settings(use_set);

  % other stuff
  ps_mod.dt = .1; % ms
  ps_mod.duration = 2500; % ms 
  
  % current injection parameters
  ps_mod.g_syn_of_t_exc = zeros(1,length(0:ps_mod.dt:ps_mod.duration));
  ps_mod.g_syn_of_t_inh = zeros(1,length(0:ps_mod.dt:ps_mod.duration));
  ps_mod.I_of_t = zeros(3,length(0:ps_mod.dt:ps_mod.duration));
	ps_mod.I_inj_nA = [0 0 0]; % nA -- [ax dend mid]