Gap junction coupled network of striatal fast spiking interneurons (Hjorth et al. 2009)

 Download zip file 
Help downloading and running models
Accession:118389
Gap junctions between striatal FS neurons has very weak ability to synchronise spiking. Input uncorrelated between neighbouring neurons is shunted, while correlated input is not.
Reference:
1 . Hjorth J, Blackwell KT, Kotaleski JH (2009) Gap junctions between striatal fast-spiking interneurons regulate spiking activity and synchronization as a function of cortical activity. J Neurosci 29:5276-86 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Neuron or other electrically excitable cell; Synapse; Channel/Receptor; Dendrite;
Brain Region(s)/Organism: Basal ganglia;
Cell Type(s): Neostriatum fast spiking interneuron;
Channel(s): I A; I_K,Na;
Gap Junctions: Gap junctions;
Receptor(s):
Gene(s):
Transmitter(s): Gaba; Glutamate;
Simulation Environment: GENESIS; MATLAB;
Model Concept(s): Activity Patterns; Ion Channel Kinetics; Synchronization; Detailed Neuronal Models;
Implementer(s): Hjorth, Johannes [hjorth at csc.kth.se];
Search NeuronDB for information about:  I A; I_K,Na; Gaba; Glutamate;
/
FSGJ_Hjorth2009
matlabScripts
checkAllEqual.m *
correlationByDuplicationOfSpikes.m
correlationByJitteringOfSpikes.m
countSpikesWithNumNeighbourSpikes.m
findSpikes.m *
gaussJitterInputKeepCorr.m
makeAllExternalInputAllUpstate.m
makeDaughterInsignal.m
makeDaughterNoise.m *
makeFSconnectionMatrixOnlyPrimWrappedSetNGJ.m
makeFSconnectionMatrixOnlySecWrappedSetNGJ.m
makeFSMorph.m
makeFSrandomNetwork.m *
makeInputWithCorrShift.m
makeInputWithCorrShift125center.m
makeSCCCplot.m
makeTrainInsignal.m
makeTrainNoise.m *
mixTwoTrainsKeepCorr.m
poissonMaxTime.m *
showFSnetwork.m
writeCurrentInputInfo.m
writeInput.m *
writeParameters.m
                            
% This function takes two complete set of input trains as inputs and a
% mixing probability.
%
% First all the spikes in the complete input set for each train is
% shuffled around.
%
% Then spikes are tagged with probability pA or (1 - pA) for inclusion
%
% Then all the tagged spikes are merged together into a new complete
% set of spikes, that is returned by the function.
%
% This 
%

function outTrain = mixTwoTrainsKeepCorr(trainA, trainB, pA)

%DEN HÄR FUNKTIONEN GÖR FEL, TESTA MED pA = 0 eller 1

pB = 1 - pA;

allSpikesA = sort(trainA(:));
allSpikesB = sort(trainB(:));

allSpikesA(find(allSpikesA == inf)) = [];
allSpikesB(find(allSpikesB == inf)) = [];

uSpikesA = unique(allSpikesA);
uSpikesB = unique(allSpikesB);

uMaskA = find(rand(size(uSpikesA)) < pA);
uMaskB = find(rand(size(uSpikesB)) < pB);

% Number the spikes, repetitions of same spike get same number

idxSpikesA = NaN*ones(size(allSpikesA));
idxSpikesA(1) = 1; tol = 1e-8;

for i=2:length(allSpikesA)
  if(abs(allSpikesA(i) - allSpikesA(i-1)) < tol)
    idxSpikesA(i) = idxSpikesA(i-1); % Same as previous spike, keep idx
  else
    idxSpikesA(i) = idxSpikesA(i-1) + 1; % Increment counter if new spike  
  end
end

% Do same for spikes in trainB

idxSpikesB = NaN*ones(size(allSpikesB));
idxSpikesB(1) = 1; tol = 1e-8;

for i=2:length(allSpikesB)
  if(abs(allSpikesB(i) - allSpikesB(i-1)) < tol)
    idxSpikesB(i) = idxSpikesB(i-1); 
  else
    idxSpikesB(i) = idxSpikesB(i-1) + 1;
  end
end

nTrains = size(trainA,2);

% Create storage for the resulting spike vectors
for i = 1:nTrains
  tSpik{i} = [];
end

% We use freeTrains to make sure that two repetitions of the same
% spike does not come in the same input train

for i = 1:length(uMaskA)
  keepSpikes = allSpikesA(find(uMaskA(i) == idxSpikesA));

  freeTrains = 1:nTrains;

  for j = 1:length(keepSpikes)
    idx = ceil(length(freeTrains)*rand(1));
    trainIdx = freeTrains(idx);
    freeTrains(idx) = [];

    tSpik{trainIdx} = [tSpik{trainIdx}; keepSpikes(j)];      
  end
end

for i = 1:length(uMaskB)
  keepSpikes = allSpikesB(find(uMaskB(i) == idxSpikesB));

  freeTrains = 1:nTrains;

  for j = 1:length(keepSpikes)
    idx = ceil(length(freeTrains)*rand(1));
    trainIdx = freeTrains(idx);
    freeTrains(idx) = [];

    tSpik{trainIdx} = [tSpik{trainIdx}; keepSpikes(j)];      
  end
end

% Convert the tSpike cell array to a matrix, pad with inf.

maxLen = 0;

for i=1:nTrains
  maxLen = max(maxLen, length(tSpik{i}));    
end

outTrain = inf*ones(maxLen, nTrains);

for i=1:nTrains
  outTrain(1:length(tSpik{i}),i) = tSpik{i}; 
end

outTrain = sort(outTrain);

Loading data, please wait...