Striatal GABAergic microcircuit, spatial scales of dynamics (Humphries et al, 2010)

 Download zip file 
Help downloading and running models
Accession:137502
The main thrust of this paper was the development of the 3D anatomical network of the striatum's GABAergic microcircuit. We grew dendrite and axon models for the MSNs and FSIs and extracted probabilities for the presence of these neurites as a function of distance from the soma. From these, we found the probabilities of intersection between the neurites of two neurons given their inter-somatic distance, and used these to construct three-dimensional striatal networks. These networks were examined for their predictions for the distributions of the numbers and distances of connections for all the connections in the microcircuit. We then combined the neuron models from a previous model (Humphries et al, 2009; ModelDB ID: 128874) with the new anatomical model. We used this new complete striatal model to examine the impact of the anatomical network on the firing properties of the MSN and FSI populations, and to study the influence of all the inputs to one MSN within the network.
Reference:
1 . Humphries MD, Wood R, Gurney K (2010) Reconstructing the three-dimensional GABAergic microcircuit of the striatum. PLoS Comput Biol 6:e1001011 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Striatum;
Cell Type(s): Neostriatum fast spiking interneuron;
Channel(s):
Gap Junctions: Gap junctions;
Receptor(s): D1; D2; GabaA; AMPA; NMDA;
Gene(s):
Transmitter(s): Dopamine; Gaba; Glutamate;
Simulation Environment: MATLAB;
Model Concept(s): Activity Patterns; Spatio-temporal Activity Patterns; Winner-take-all; Connectivity matrix;
Implementer(s): Humphries, Mark D [m.d.humphries at shef.ac.uk]; Wood, Ric [ric.wood at shef.ac.uk];
Search NeuronDB for information about:  D1; D2; GabaA; AMPA; NMDA; Dopamine; Gaba; Glutamate;
%% testing striatal model construction using "fully-wired"
% approximation....

clear all

%% network parameters
SIMPARAMS.net.PhysicalDimensions = [300 300 300];   % slice dimensions
SIMPARAMS.net.CellsPerMillimeterCube = 84900;       % number of MSNs per mm^3 (Oorschot: 84,900 MSNs per mm3 of rat)

SIMPARAMS.net.FSpercentage = 3;                     % percentage of FS neurons (N_MS * FSpercentage/100)
% "fully-wired" model, target numbers taken from striatal anatomical network model paper
SIMPARAMS.net.ConnectMethod = 'random';     % either 'physical' or 'random'. 
SIMPARAMS.net.random.targetN_msms =  422;   % target number of MSNS INPUT TO 1 MSN connections for this % FSI..
SIMPARAMS.net.random.targetN_fsms =  7.88;   % target number of FSIS INPUT TO 1 MSN connections for this % FSI..
SIMPARAMS.net.random.targetN_fsfs =  3.29;     % target number of FSIS INPUT TO 1 FSI connections for this % FSI..
SIMPARAMS.net.random.targetN_fsgap =  2.04;  % target number of gap junctions per FSI for this % of FSIs

% SIMPARAMS.net.FSpercentage = 5;                     % percentage of FS neurons (N_MS * FSpercentage/100)
% % "fully-wired" model, target numbers taken from striatal anatomical network model paper
% SIMPARAMS.net.ConnectMethod = 'random';     % either 'physical' or 'random'. 
% SIMPARAMS.net.random.targetN_msms =  422;   % target number of MSNS INPUT TO 1 MSN connections for this % FSI..
% SIMPARAMS.net.random.targetN_fsms =  13.3;   % target number of FSIS INPUT TO 1 MSN connections for this % FSI..
% SIMPARAMS.net.random.targetN_fsfs =  5.95;     % target number of FSIS INPUT TO 1 FSI connections for this % FSI..
% SIMPARAMS.net.random.targetN_fsgap =  3.72;  % target number of gap junctions per FSI for this % of FSIs


SIMPARAMS.net.ConnectMethod = 'physical'; 

% set the physiological parameters for the intrastriatal pathways
% required to fill in parameters that the striatum building function
% calls...
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;

%%% set some simulation parameters required by construction function...
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

%% run code 
% get positions, and number of MSNs and FSIs
SIMPARAMS.net = GetNeuronPositions(SIMPARAMS.net); 

% wire them up...
net = BuildStriatumNetwork(SIMPARAMS.net,SIMPARAMS.physiology,SIMPARAMS.sim);

% shift indices
Cmsms = net.Cmsms +1; % was zero-indexed
Cmsms_b = net.Cmsms_b+1; % was zero-indexed
Cfsms = net.Cfsms +1; % was zero-indexed
Cfsms_b = net.Cfsms_b+1; % was zero-indexed
Cfsfs = net.Cfsfs +1; % was zero-indexed
Cfsfs_b = net.Cfsfs_b+1; % was zero-indexed
Pgapfs = net.Pgapfs +1; % was zero-indexed

% storage
nMSN_MSNtgts = []; MSN_MSNtgt_d = {}; 
nMSN_MSNsrcs = []; MSN_MSNsrc_d = {}; 
nFSI_MSNsrcs = []; FSI_MSNsrc_d = {}; 
nFSI_MSNtgts = []; FSI_MSNtgt_d = {}; 
nFSI_FSItgts = []; FSI_FSItgt_d = {}; 
nFSI_FSIsrcs = []; FSI_FSIsrc_d = {}; 
nFSIgap = []; FSIgap_d = {}; 

%% MSN connections
for idx = 1:SIMPARAMS.net.MS.N
    thispos = net.MS.Position(idx,:);
    %%% output to other MSNs
    tgts = Cmsms(Cmsms_b(idx):Cmsms_b(idx+1)-1);
    nMSN_MSNtgts = [nMSN_MSNtgts; numel(tgts)];     % build array: number of MSN tgts
    tgtpos = net.MS.Position(tgts,:);   % position of all targets
    % array of all distances to tgts
    dists = sqrt(sum((tgtpos - repmat(thispos,numel(tgts),1))'.^2))';
    MSN_MSNtgt_d = [MSN_MSNtgt_d; dists ]; % distances to all targets

    %%% input
    % inputs from other MSN
    MSNbs = find(Cmsms == idx); % idx of srcs
    MSNsrcs = zeros(numel(MSNbs),1);
    for k = 1:numel(MSNbs)
        % the source cell idx corresponds to the idx of the bound array
        % entry lower than the idx in Cmsms
        MSNsrcs(k) = find(Cmsms_b <= MSNbs(k),1,'last'); 
    end
    nMSN_MSNsrcs = [nMSN_MSNsrcs; numel(MSNsrcs)];  % number of source MSNs
    srcpos = net.MS.Position(MSNsrcs,:);   % position of all sources
    dists = sqrt(sum((srcpos - repmat(thispos,numel(MSNsrcs),1))'.^2))'; % distances to all targets
    MSN_MSNsrc_d = [MSN_MSNsrc_d; dists];

    % inputs from FSIs
    FSIbs = find(Cfsms == idx); % idx of srcs
    FSIsrcs = zeros(numel(FSIbs),1);
    for k = 1:numel(FSIbs)
        % the source cell idx corresponds to the idx of the bound array
        % entry lower than the idx in Cmsms
        FSIsrcs(k) = find(Cfsms_b <= FSIbs(k),1,'last'); 
    end
    nFSI_MSNsrcs = [nFSI_MSNsrcs; numel(FSIsrcs)];  % build array: number of source FSIs
    srcpos = net.FS.Position(FSIsrcs,:);   % position of all sources
    dists = sqrt(sum((srcpos - repmat(thispos,numel(FSIsrcs),1))'.^2))'; % distances to all targets
    FSI_MSNsrc_d = [FSI_MSNsrc_d; dists]; % cell array of individual distributions
end

%% FSI connection stats
for idx = 1:SIMPARAMS.net.FS.N
    %%% output to MSNs
    tgts = Cfsms(Cfsms_b(idx):Cfsms_b(idx+1)-1);
    tgtpos = net.MS.Position(tgts,:);   % position of all targets
    % array of all distances to tgts
    dists = sqrt(sum((tgtpos - repmat(thispos,numel(tgts),1))'.^2))'; % distances to all targets
    FSI_MSNtgt_d = [FSI_MSNtgt_d; dists];
    nFSI_MSNtgts = [nFSI_MSNtgts; numel(tgts)];     % build array: number of MSN tgts

    % to other FSIs
    tgts = Cfsfs(Cfsfs_b(idx):Cfsfs_b(idx+1)-1);
    tgtpos = net.FS.Position(tgts,:);   % position of all targets
    % array of all distances to tgts - note that this is stored so
    dists = sqrt(sum((tgtpos - repmat(thispos,numel(tgts),1))'.^2))'; % distances to all targets
    FSI_FSItgt_d = [FSI_FSItgt_d; dists];
    nFSI_FSItgts = [nFSI_FSItgts; numel(tgts)];     % build array: number of MSN tgts

    %%% input from other FSIs (axo-dendritic)
    FSIbs = find(Cfsfs == idx); % idx of srcs
    FSIsrcs = zeros(numel(FSIbs),1);
    for k = 1:numel(FSIbs)
        % the source cell idx corresponds to the idx of the bound array
        % entry lower than the idx in Cmsms
        FSIsrcs(k) = find(Cfsfs_b <= FSIbs(k),1,'last'); 
    end
    srcpos = net.FS.Position(FSIsrcs,:);   % position of all sources
    dists = sqrt(sum((srcpos - repmat(thispos,numel(FSIsrcs),1))'.^2))'; % distances to all targets
    FSI_FSIsrc_d = [FSI_FSIsrc_d; dists]; 
    nFSI_FSIsrcs = [nFSI_FSIsrcs; numel(FSIsrcs)];  % build array

    %%% FS-FS gap junctions....
    % find all gap junctions involving the current FSI
    c1 = find(Pgapfs(:,1) == idx); c2 = find(Pgapfs(:,2) == idx);
    gapvec = [c1; c2];
    gaplist = [fliplr(Pgapfs(c2,:)); Pgapfs(c1,:)]; % create list of all gap junctions
    gappos = net.FS.Position(gaplist(:,2),:);   % position of all gap junction coupled neurons
    dists = sqrt(sum((gappos - repmat(thispos,numel(c1)+numel(c2),1))'.^2))'; % distances to all targets
    FSIgap_d = [FSIgap_d; dists];
    nFSIgap = [nFSIgap; numel(gapvec)]; % vector of number of gap junctions

end


Loading data, please wait...