% -------------------------------------------------------------------------
% All default parameters for the striatal network model
% -------------------------------------------------------------------------
function SIMPARAMS = StriatumNetworkParameters
% set the path to the network building functions
addpath(pwd, [pwd '/CreateNetwork']);
% network parameters
SIMPARAMS.net.PhysicalDimensions = [250 250 250]; % slice dimensions
SIMPARAMS.net.CellsPerMillimeterCube = 84900; % number of MSNs per mm^3
SIMPARAMS.net.FSpercentage = 3; % percentage of FS neurons (N_MS * FSpercentage/100)
% Use the PhysicalDimensions to get MS.N, FS.N, D1inds, D2inds, and the
% neuron positions MS_P, and FS_P. *** NOTE: was CellsPerMillimeterCube
% based on just MSNs, or all cell types? ***
[SIMPARAMS.net] = GetNeuronPositions(SIMPARAMS.net);
% Assign neurons to the two default channels
SIMPARAMS.net.CHAN1_MS = int32(0:(round(SIMPARAMS.net.MS.N / 2)-1))';
SIMPARAMS.net.CHAN1_FS = int32(0:(round(SIMPARAMS.net.FS.N / 2)-1))';
SIMPARAMS.net.CHAN2_MS = int32(round(SIMPARAMS.net.MS.N / 2):(SIMPARAMS.net.MS.N-1))';
SIMPARAMS.net.CHAN2_FS = int32(round(SIMPARAMS.net.FS.N / 2):(SIMPARAMS.net.FS.N-1))';
% -------------------------------------------------------------------------
% neuron parameters
SIMPARAMS.physiology.MSparams = getMSparams(SIMPARAMS); % get the parameters for the DA MSN model
SIMPARAMS.physiology.FSparams = getFSparams(SIMPARAMS); % get the parameters for the DA FSI model
SIMPARAMS.physiology.Eglu = 0; % msec : double
SIMPARAMS.physiology.Egaba = -60; % msec : double
SIMPARAMS.physiology.ts_glu_AMPA = 6; % msec : double
SIMPARAMS.physiology.ts_glu_NMDA = 160; % msec : double
SIMPARAMS.physiology.ts_gaba = 4; % msec : double
SIMPARAMS.physiology.tau_fsgap = 11; % msec : double
SIMPARAMS.physiology.glu_ratio = 0.5; % based on DA paper, which was based on Moyer et al
SIMPARAMS.physiology.DA = 0.1;
% set the physiological parameters for the intrastriatal pathways
SIMPARAMS.physiology.MS_MS.maxdelay = 2; % msec
SIMPARAMS.physiology.MS_MS.baseweight = 4.36;
SIMPARAMS.physiology.MS_MS.baseweightSD = 0;
SIMPARAMS.physiology.FS_MS.maxdelay = 2; % msec
SIMPARAMS.physiology.FS_MS.baseweight = (4.36 * 5);
SIMPARAMS.physiology.FS_MS.baseweightSD = 0;
SIMPARAMS.physiology.FS_FS.maxdelay = 2; % msec
SIMPARAMS.physiology.FS_FS.baseweight = (4.36 * 5);
SIMPARAMS.physiology.FS_FS.baseweightSD = 0;
SIMPARAMS.physiology.FS_gap.baseweight = (150 / 5);
SIMPARAMS.physiology.FS_gap.baseweightSD = 0;
% -------------------------------------------------------------------------
% Simulation parameters
SIMPARAMS.sim.RANDSEED = int32(12345);
SIMPARAMS.sim.logfname = 'logfile.log';
SIMPARAMS.sim.tstart = 0; % msec : double
SIMPARAMS.sim.tfinal = 100; % msec : double
SIMPARAMS.sim.dt = 0.1; % msec : double
% build the network
SIMPARAMS.net = BuildStriatumNetwork(SIMPARAMS.net, SIMPARAMS.physiology, SIMPARAMS.sim);
SIMPARAMS.sim.RecordChan_MS = int32(0:49)';
SIMPARAMS.sim.MSspikebuffer = int32(2000000); % int32
SIMPARAMS.sim.FSspikebuffer = int32(2000000); % int32
SIMPARAMS.sim.initVms = ones(SIMPARAMS.net.MS.N, 1) .* SIMPARAMS.physiology.MSparams(:,2); % mV
SIMPARAMS.sim.initUms = zeros(SIMPARAMS.net.MS.N, 1);
SIMPARAMS.sim.initVfs = ones(SIMPARAMS.net.FS.N, 1) .* SIMPARAMS.physiology.FSparams(:,2); % mV
SIMPARAMS.sim.initUfs = zeros(SIMPARAMS.net.FS.N, 1);
SIMPARAMS.sim.initVgapfs = ones(length(SIMPARAMS.net.Pgapfs),1) .* SIMPARAMS.physiology.MSparams(1,2); % mV
SIMPARAMS.sim.SpikeEventQue_MS = zeros(SIMPARAMS.net.MS.N, (SIMPARAMS.physiology.MS_MS.maxdelay / SIMPARAMS.sim.dt)+1);
SIMPARAMS.sim.SpikeEventQue_FS = zeros(SIMPARAMS.net.FS.N, (SIMPARAMS.physiology.FS_FS.maxdelay / SIMPARAMS.sim.dt)+1);
SIMPARAMS.sim.Iinj_MS = zeros(SIMPARAMS.net.MS.N,1);
SIMPARAMS.sim.Iinj_FS = zeros(SIMPARAMS.net.FS.N,1);
% -------------------------------------------------------------------------
% unstructured cortical input
SIMPARAMS.input.CTX.r_MSSEG = ones(SIMPARAMS.net.MS.N,1) .* 1.9;
SIMPARAMS.input.CTX.N_MSSEG = int32(ones(SIMPARAMS.net.MS.N,1) .* 250);
SIMPARAMS.input.CTX.alpha_MSSEG = ones(SIMPARAMS.net.MS.N,1) .* 0.0;
SIMPARAMS.input.CTX.r_FSSEG = ones(SIMPARAMS.net.FS.N,1) .* 1.9;
SIMPARAMS.input.CTX.N_FSSEG = int32(ones(SIMPARAMS.net.FS.N,1) .* 250);
SIMPARAMS.input.CTX.alpha_FSSEG = ones(SIMPARAMS.net.FS.N,1) .* 0.0;
% The selection experiment parameters
SIMPARAMS.input.Selection.Pt = int32([0] ./ SIMPARAMS.sim.dt); % time of change in msec, converted into iteration
SIMPARAMS.input.Selection.Pch = int32([1]'); % channel
SIMPARAMS.input.Selection.Phz = SIMPARAMS.input.CTX.r_MSSEG(1); % rate of spkgen
% parameters for the Nisenbaum cortical pulse experiments
SIMPARAMS.input.PULSE.P = zeros(SIMPARAMS.sim.tfinal.*100,1);
SIMPARAMS.input.PULSE.r_ctx = 0;
SIMPARAMS.input.PULSE.Nctx_ms = 0;
SIMPARAMS.input.PULSE.Nctx_fs = 0;
SIMPARAMS.input.PULSE.ts_spks = 50; % msec
SIMPARAMS.input.PULSE.pulsetimes = [250 750 1250 1750 2250 2750 3250 3750 4250 4750];
SIMPARAMS.input.PULSE.ISI = 0;
SIMPARAMS.input.PULSE.firstpulse = 0;
SIMPARAMS.input.PULSE.secondpulse = SIMPARAMS.input.PULSE.firstpulse + SIMPARAMS.input.PULSE.ISI;
% -------------------------------------------------------------------------
% parameters for the MS neurons
% -------------------------------------------------------------------------
function MSparams = getMSparams(SIMPARAMS)
MSparams = ones(SIMPARAMS.net.MS.N,14);
MSparams(:,1) = 50; % C
MSparams(:,2) = -80; % vr
MSparams(:,3) = -33.8; % vt
MSparams(:,4) = 0.05; % a
MSparams(:,5) = -20; % b
MSparams(:,6) = -55; % c
MSparams(:,7) = 377; % d
MSparams(:,8) = 40; % vp
MSparams(:,9) = 1.14; % k
MSparams(:,10) = -68.4; % ED_ms
MSparams(:,11) = 0.03; % alpha_ms
MSparams(SIMPARAMS.net.MS.D1inds,11) = MSparams(SIMPARAMS.net.MS.D1inds,11) .* 0.0; % alpha_ms (D1)
MSparams(:,12) = 3.75; % beta1_ms
MSparams(SIMPARAMS.net.MS.D2inds,12) = MSparams(SIMPARAMS.net.MS.D2inds,12) .* 0.0; % beta1_ms (D2)
MSparams(:,13) = 0.156; % beta2_ms
MSparams(SIMPARAMS.net.MS.D1inds,13) = MSparams(SIMPARAMS.net.MS.D1inds,13) .* 0.0; % beta2_ms (D1)
MSparams(:,14) = 22.7; % gDAms
SIMPAMS.MSparams(SIMPARAMS.net.MS.D2inds,14) = MSparams(SIMPARAMS.net.MS.D2inds,14) .* 0.0; % gDA_ms (D2)
% -------------------------------------------------------------------------
% parameters for the FS neurons
% -------------------------------------------------------------------------
function FSparams = getFSparams(SIMPARAMS)
FSparams = ones(SIMPARAMS.net.FS.N,12);
FSparams(:,1) = 80; % C
FSparams(:,2) = -70; % vr
FSparams(:,3) = -50; % vt
FSparams(:,4) = 1; % k
FSparams(:,5) = 0.2; % a
FSparams(:,6) = 0.025; % b
FSparams(:,7) = -60; % c
FSparams(:,8) = 0.0; % d
FSparams(:,9) = 25; % vpeak
FSparams(:,10) = -55; % vb
FSparams(:,11) = 0.1; % eta
FSparams(:,12) = 0.625; % epsilon