-
Notifications
You must be signed in to change notification settings - Fork 1
/
Experiment_ImpactOnCentreMSN.m
102 lines (81 loc) · 5.2 KB
/
Experiment_ImpactOnCentreMSN.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
function out = Experiment_ImpactOnCentralMSN(DA,width,radius)
if nargin == 0
width = 50;
radius = 100;
DA = 0.0;
fname = {'Expt_InputsToCentreMSN'};
else
fname = {['Shell_width' num2str(width) '_innerradius_' num2str(radius)]};
end
% set the model parameters
% network_is_at = 'C:\Users\Mark\Simulations\Striatum models\Simulations for PLoS striatal network paper\Sphere_150micron_radius_MSNFSIs_0_bghz.mat';
% network_is_at = 'C:\Simulations\Striatum models\Simulations for PLoS striatal network paper\CreateNetwork\Striatum_network_1000-1000-1000_num_1_at_734300.5522.mat'; % 3% FSI network
network_is_at = 'C:\Simulations\Striatum models\Simulations for PLoS striatal network paper\CreateNetwork\Striatum_network_1000-1000-1000_num_1_at_734299.3923.mat'; % 1% FSI network
SIMPARAMS = StriatumNetworkParameters(network_is_at); % is vital we use the same network each time!!!
% SIMPARAMS = StriatumNetworkParameters;
% name for the log file
SIMPARAMS.sim.logfname = [char(fname) '.log'];
% -------------------------------------------------------------------------
% set the DA level
SIMPARAMS.physiology.DA = DA;
% set all the GABA the weights to 0
SIMPARAMS.net.Cctms_w = ones(length(SIMPARAMS.net.Cctms),1) .* 6.1;
SIMPARAMS.net.Cctfs_w = ones(length(SIMPARAMS.net.Cctfs),1) .* 6.1;
SIMPARAMS.net.Cmsms_w = ones(length(SIMPARAMS.net.Cmsms),1) .* 4.36;
SIMPARAMS.net.Cfsms_w = ones(length(SIMPARAMS.net.Cfsms),1) .* (4.36 * 5);
SIMPARAMS.net.Cfsfs_w = ones(length(SIMPARAMS.net.Cfsfs),1) .* (4.36 * 5);
SIMPARAMS.net.Cgapfs_w = ones(length(SIMPARAMS.net.Cgapfs_w),1).* (150/5);
% set the backgroung input level
bgHz = 0; % normally 1.9; only interested in effect of shell input here...
SIMPARAMS.input.CTX.r_MSSEG = ones(SIMPARAMS.net.MS.N,1) .* bgHz;
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) .* bgHz;
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;
% standard selection sims....
SIMPARAMS.sim.tfinal = 4000;
hz_input = 5;
% SIMPARAMS.input.Selection.Pt = int32([500 550 750 800] ./ SIMPARAMS.sim.dt)'; % time of change in msec, converted into iteration
% SIMPARAMS.input.Selection.Pch = int32([1 2 1 2])'; % channel
% SIMPARAMS.input.Selection.Phz = [4 6 bgHz bgHz]'; % rate of sp
SIMPARAMS.input.shell.inner_sphere_radius = radius; %n_inputs = 200; nFS_inputs = 20; % assuming minimum sphere diameter is 300 microns, using 3% FSIs....
SIMPARAMS.input.shell.shell_width = width;
mid = SIMPARAMS.net.PhysicalDimensions/2; % centre of cubic network
MSdist_from_mid = sqrt(sum((SIMPARAMS.net.MS.Position - repmat(mid,SIMPARAMS.net.MS.N,1))'.^2));
FSdist_from_mid = sqrt(sum((SIMPARAMS.net.FS.Position - repmat(mid,SIMPARAMS.net.FS.N,1))'.^2));
SIMPARAMS.input.shell.MScentre = find(MSdist_from_mid == min(MSdist_from_mid));
SIMPARAMS.input.shell.MSids = find(MSdist_from_mid >= SIMPARAMS.input.shell.inner_sphere_radius & MSdist_from_mid <= SIMPARAMS.input.shell.inner_sphere_radius + SIMPARAMS.input.shell.shell_width); % all MSNs within this shell
SIMPARAMS.input.shell.FSids = find(FSdist_from_mid >= SIMPARAMS.input.shell.inner_sphere_radius & FSdist_from_mid <= SIMPARAMS.input.shell.inner_sphere_radius + SIMPARAMS.input.shell.shell_width); % all MSNs within this shell
SIMPARAMS.input.CTX.r_MSSEG(SIMPARAMS.input.shell.MScentre) = hz_input; % centre MSN....
SIMPARAMS.input.CTX.r_MSSEG(SIMPARAMS.input.shell.MSids) = hz_input; % all MSNs get input in this shell
SIMPARAMS.input.CTX.r_FSSEG(SIMPARAMS.input.shell.FSids) = hz_input; % all FSIs get input in this shell
% keyboard
% in case we want to randomly assign inputs....
%tmp = randperm(numel(MSids));
%tmp = randperm(numel(FSids));
% SIMPARAMS.input.CTX.r_MSSEG(MSids(tmp(1:n_inputs))) = hz_input; % randomly assign which MSNs get input in this sphere...
% SIMPARAMS.input.CTX.r_FSSEG(FSids(tmp(1:nFS_inputs))) = hz_input; % randomly assign which MSNs get input in this sphere...
% frac_MSNs = n_inputs ./ ((4/3 * pi * (sphere_width/1000)^3) * SIMPARAMS.net.CellsPerMillimeterCube);
% nFS_inputs = round(SIMPARAMS.net.FS.N * frac_MSNs);
% Phasic input to MSNs only
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))' .* 0.0;
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))' .* 0.0;
% -------------------------------------------------------------------------
% Run the simulation
tic
out = RunSimulation(SIMPARAMS);
toc
% -------------------------------------------------------------------------
% Save the results to disc
save(char(fname), 'out', 'SIMPARAMS') ;
% -------------------------------------------------------------------------
% Sort and plot the results
close all
% -------------------------------------------------------------------------
close all
figure(1); clf; plot(out.STms(:,2), out.STms(:,1), '.')
figure(2); clf; plot(out.STfs(:,2), out.STfs(:,1), '.')
% sort out the spikes according to channel and plot the results