: : RetinalInput.mod : : This mechanism describes the retinal input spike-train. : (Depends on RandomGenerator.mod, see "setpointer" in Geometry.hoc) : : Thalamocortical convergence studies : Sebastien Behuret, UNIC/CNRS Paris, 2009 : NEURON { POINT_PROCESS RetinalInput RANGE Frequency, Phase, Noise, Gamma, InterCorrelation RANGE Spike, Spike10 RANGE LastISI, LastSpike, SpikeCount RANGE SpikeTime POINTER ExpRand1, ExpRand2, ExpRand3 } PARAMETER { Frequency = 5 (/s) Phase = 0 (ms) Noise = 0 Gamma = 0 InterCorrelation = 0 } ASSIGNED { Spike Spike10 LastISI (ms) LastSpike (ms) SpikeCount SpikeTime ExpRand1 ExpRand2 ExpRand3 } INITIAL { Spike = 0 Spike10 = 0 LastISI = 0 LastSpike = 0 SpikeCount = 0 CalculateSpikeTime() SpikeTime = SpikeTime + Phase } BREAKPOINT { SOLVE TriggerSpike } PROCEDURE CalculateSpikeTime() { LOCAL i UNITSOFF if (Noise != 1) : Will use an exponential distribution if Noise <> 1 { if (scop_random() <= InterCorrelation) { SpikeTime = t + 1e3 * (1 - Noise + Noise * ExpRand1) / Frequency } else { SpikeTime = t + 1e3 * (1 - Noise + Noise * exprand(1)) / Frequency } } else : InterCorrelation will not work if Gamma > 3 { SpikeTime = t if (Gamma == 3 && scop_random() <= InterCorrelation) { SpikeTime = SpikeTime + (1e3 / (Frequency * Gamma)) * (ExpRand1 + ExpRand2 + ExpRand3) } else { FROM i = 1 TO Gamma { SpikeTime = SpikeTime + 1e3 * exprand(1) / (Frequency * Gamma) } } } UNITSON } PROCEDURE TriggerSpike() { if (t >= SpikeTime) { Spike = 1 Spike10 = 10 LastISI = t - LastSpike LastSpike = t SpikeCount = SpikeCount + 1 CalculateSpikeTime() } else { Spike = 0 Spike10 = 0 } }