Microsaccades and synchrony coding in the retina (Masquelier et al. 2016)

 Download zip file 
Help downloading and running models
Accession:188423
We show that microsaccades (MS) enable efficient synchrony-based coding among the primate retinal ganglion cells (RGC). We find that each MS causes certain RGCs to fire synchronously, namely those whose receptive fields contain contrast edges after the MS. The emitted synchronous spike volley thus rapidly transmits the most salient edges of the stimulus. We demonstrate that the readout could be done rapidly by simple coincidence-detector neurons, and that the required connectivity could emerge spontaneously with spike timing-dependent plasticity.
Reference:
1 . Masquelier T, Portelli G, Kornprobst P (2016) Microsaccades enable efficient synchrony-based coding in the retina: a simulation study. Sci Rep 6:24086 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Connectionist Network;
Brain Region(s)/Organism:
Cell Type(s): Retina ganglion GLU cell;
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: C or C++ program; MATLAB;
Model Concept(s): Pattern Recognition; Coincidence Detection; Synchronization; Spatio-temporal Activity Patterns; STDP; Information transfer; Sensory processing; Sensory coding;
Implementer(s): Masquelier, Tim [timothee.masquelier at alum.mit.edu];
Search NeuronDB for information about:  Retina ganglion GLU cell;
function neuron = createNewNeuron(PARAM,N)
%         N = round(1.75*PARAM.epspCut*PARAM.tm*length(spikeList)/spikeList(end));
neuron.epspAmplitude = zeros(1,N);
neuron.epspTime = zeros(1,N);
neuron.epspAfferent = uint16(zeros(1,N));
neuron.nEpsp = 0;
if PARAM.fixedFiringMode
    neuron.nextFiring = PARAM.fixedFiringLatency;
else
    neuron.nextFiring = Inf;
end
neuron.firingTime = zeros(1,1000000);
neuron.nFiring = 0;
neuron.alreadyDepressed = false(1,PARAM.nAfferent);
%         neuron.nInefficient = 0;
neuron.maxPotential = 0;
%         neuron.currentPotential = NaN;
neuron.trPot = 0;%PARAM.initialTr;


%         neuron(nn).initialPot = 0;
%         neuron(nn).lastInhib = NaN;

neuron.ipspTime = zeros(1,1000);
neuron.nIpsp = 0;

    if PARAM.fixedFiringMode
        neuron.weight = .5*ones(1,PARAM.nAfferent);
    else
        if PARAM.threshold == Inf % must be a post-fixedFiringMode computatio
            load('../mat/weight.mat');
            neuron.weight = weight;
    %         neuron.weight = double([neuron.weight>.5]);
        else
            %mw = .5;
            %neuron.weight = 1 - (2*(1-mw)) * rand(1,PARAM.nAfferent); % random
            neuron.weight = 0 + 1 * rand(1,PARAM.nAfferent);
            %neuron.weight = mw*ones(1,PARAM.nAfferent); % all equal
            %neuron.weight = rand(1,PARAM.nAfferent)>1-mw; % binary
            neuron.weight = max(0,min(1,neuron.weight));
        end
    end