SPT–Downloads–fastgammatrain

function [t,s] = fastgammatrain(duration,meanrate,order)

% function [t,s] = fastgammatrain(duration,meanrate,order)
%
% returns spike train output of an integrate and fire neuron with
% a random spiking threshold which is distributed according to
% a gamma distribution of order n. n=1 gives a poisson train.
% increasing n gives increasingly regular spike trains.
%
% where
%    duration = duration of spiketrain (s)
%    meanrate = mean firing rate of the spike train (spikes/s)
%    order    = order of the gamma distribution for resetting threshold
%
% return parameters are:
%    t = vector containing the time index for spike train (s)
%    s = spike train (1’s represent spikes, 0’s represent no spikes)

delta_t = 0.001; % resolution of spike train = 1 ms
t = 0:delta_t:duration;
idur=length(t);
Vrandth = gamrnd(order,1/order,1,idur);
itonextspike =round(Vrandth/(meanrate*delta_t));
itonextspike = itonextspike(itonextspike > 2); % refractory period = 2 ms
ispikes = cumsum(itonextspike);
ispikes = ispikes(ispikes < (duration/delta_t));
nspikes = length(ispikes);
s = sparse(1,ispikes,1,1,idur,nspikes);
if (nargout == 0)
plot(t,s)
end
s = full(s);