[pointprocesses] cleaned up code
This commit is contained in:
parent
77b6666347
commit
25dd6ac2c7
@ -1,10 +0,0 @@
|
|||||||
function pcn = colorednoisepdf( x, misi, epsilon, tau )
|
|
||||||
% returns the ISI pdf for PIF with colored noise drive
|
|
||||||
% x: the input ISI
|
|
||||||
% misis: the mean isi
|
|
||||||
% epsilon: a parameter
|
|
||||||
% tau: the correlation time of the noise
|
|
||||||
gamma1 = x/tau+exp(-x/tau)-1.0;
|
|
||||||
gamma2 = 1.0-exp(-x/tau);
|
|
||||||
pcn=exp(-(x-misi).^2./(4.0*epsilon*tau.^2.*gamma1)).*(((misi-x).*gamma2+2*gamma1*tau).^2./(2*gamma1*tau^2)-epsilon*(gamma2.^2-2*gamma1.*exp(-x/tau))) ./ (2*tau*sqrt(4*pi*epsilon*gamma1.^3));
|
|
||||||
end
|
|
@ -1,24 +0,0 @@
|
|||||||
% misi = 0.02;
|
|
||||||
% epsilon = 1.0;
|
|
||||||
% tau = 0.1;
|
|
||||||
x=0:0.002:0.1;
|
|
||||||
% pcn = colorednoisepdf( x, misi, epsilon, tau )+10.0*randn( size( x ) );
|
|
||||||
% plot( x, pcn );
|
|
||||||
|
|
||||||
spikes = lifouspikes( 10, 15, 50.0, 1.0, 1.0 );
|
|
||||||
isivec = isis( spikes );
|
|
||||||
misi = mean( isivec );
|
|
||||||
1.0/misi
|
|
||||||
isibins = 0:0.0005:0.1;
|
|
||||||
[ n, c ] = hist( isivec, isibins );
|
|
||||||
n = n / sum(n)/(isibins(2)-isibins(1));
|
|
||||||
bar( c, n );
|
|
||||||
|
|
||||||
beta0 = [ 1.0, 0.01 ];
|
|
||||||
b = nlinfit(c(1:end-2), n(1:end-2), @(b,x)(colorednoisepdf(x, misi, b(1), b(2))), beta0)
|
|
||||||
|
|
||||||
pcn = colorednoisepdf( x, misi, b(1), b(2) );
|
|
||||||
hold on
|
|
||||||
plot( x, pcn, 'r', 'LineWidth', 3 );
|
|
||||||
hold off
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
|||||||
function [counts, bins] = counthist(spikes, w)
|
|
||||||
% computes count histogram and compare with Poisson distribution
|
|
||||||
%
|
|
||||||
% [counts, bins] = counthist(spikes, w)
|
|
||||||
%
|
|
||||||
% Arguments:
|
|
||||||
% spikes: a cell array of vectors of spike times in seconds
|
|
||||||
% w: observation window duration in seconds for computing the counts
|
|
||||||
%
|
|
||||||
% Returns:
|
|
||||||
% counts: the histogram of counts normalized to probabilities
|
|
||||||
% bins: the bin centers for the histogram
|
|
||||||
|
|
||||||
% collect spike counts:
|
|
||||||
tmax = spikes{1}(end);
|
|
||||||
n = [];
|
|
||||||
r = [];
|
|
||||||
for k = 1:length(spikes)
|
|
||||||
times = spikes{k};
|
|
||||||
% alternative 1: count the number of spikes in each window:
|
|
||||||
% for tk = 0:w:tmax-w
|
|
||||||
% nn = sum( ( times >= tk ) & ( times < tk+w ) );
|
|
||||||
% %nn = length( find( ( times >= tk ) & ( times < tk+w ) ) );
|
|
||||||
% n = [ n nn ];
|
|
||||||
% end
|
|
||||||
% alternative 2: use the hist function to do that!
|
|
||||||
tbins = 0.5*w:w:tmax-0.5*w;
|
|
||||||
nn = hist(times, tbins);
|
|
||||||
n = [ n nn ];
|
|
||||||
% the rate of the spikes:
|
|
||||||
rate = (length(times)-1)/(times(end) - times(1));
|
|
||||||
r = [ r rate ];
|
|
||||||
end
|
|
||||||
|
|
||||||
% histogram of spike counts:
|
|
||||||
maxn = max( n );
|
|
||||||
[counts, bins ] = hist( n, 0:1:maxn+10 );
|
|
||||||
% normalize to probabilities:
|
|
||||||
counts = counts / sum( counts );
|
|
||||||
|
|
||||||
% plot:
|
|
||||||
if nargout == 0
|
|
||||||
bar( bins, counts );
|
|
||||||
hold on;
|
|
||||||
% Poisson distribution:
|
|
||||||
rate = mean( r );
|
|
||||||
x = 0:1:maxn+10;
|
|
||||||
a = rate*w;
|
|
||||||
y = a.^x.*exp(-a)./factorial(x);
|
|
||||||
plot( x, y, 'r', 'LineWidth', 3 );
|
|
||||||
hold off;
|
|
||||||
xlabel( 'counts k' );
|
|
||||||
ylabel( 'P(k)' );
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,24 +0,0 @@
|
|||||||
function isireturnmap( isis, lag2 )
|
|
||||||
% plot return maps for lag 1 and lag lag2
|
|
||||||
|
|
||||||
clf;
|
|
||||||
subplot( 1, 2, 1 );
|
|
||||||
lag = 1;
|
|
||||||
scatter( 1000.0*isis(1:end-lag)', 1000.0*isis(1+lag:end)', 'b', 'filled', 'MarkerEdgeColor', 'white' );
|
|
||||||
xlabel( 'ISI T_i [ms]' );
|
|
||||||
ylabel( 'ISI T_{i+1} [ms]' );
|
|
||||||
maxisi = max( isis );
|
|
||||||
maxy = ceil(maxisi/10)*10.0;
|
|
||||||
xlim( [0 1.5*maxy ])
|
|
||||||
ylim( [0 maxy ])
|
|
||||||
|
|
||||||
subplot( 1, 2, 2 );
|
|
||||||
lag = lag2;
|
|
||||||
scatter( 1000.0*isis(1:end-lag)', 1000.0*isis(1+lag:end)', 'b', 'filled', 'MarkerEdgeColor', 'white' );
|
|
||||||
xlabel( 'ISI T_i [ms]' );
|
|
||||||
ylabel( 'ISI T_{i+2} [ms]' );
|
|
||||||
xlim( [0 1.5*maxy ])
|
|
||||||
ylim( [0 maxy ])
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
@ -1,100 +0,0 @@
|
|||||||
%% load data:
|
|
||||||
clear all
|
|
||||||
% alternative 1:
|
|
||||||
% pro: no structs. contra: global unknown variables
|
|
||||||
load poisson.mat
|
|
||||||
whos
|
|
||||||
poissonspikes = spikes;
|
|
||||||
load pifou.mat;
|
|
||||||
pifouspikes = spikes;
|
|
||||||
load lifadapt.mat;
|
|
||||||
lifadaptspikes = spikes;
|
|
||||||
clear spikes;
|
|
||||||
% alternative 2:
|
|
||||||
% pro: clean code. contra: structs that we do not really know yet
|
|
||||||
clear all
|
|
||||||
x = load( 'poisson.mat' );
|
|
||||||
poissonspikes = x.spikes;
|
|
||||||
x = load( 'pifou.mat' );
|
|
||||||
pifouspikes = x.spikes;
|
|
||||||
x = load( 'lifadapt.mat' );
|
|
||||||
lifadaptspikes = x.spikes;
|
|
||||||
|
|
||||||
%% spike raster plots:
|
|
||||||
tmax = 1.0;
|
|
||||||
subplot(1, 3, 1);
|
|
||||||
spikeraster(poissonspikes, tmax);
|
|
||||||
title('Poisson');
|
|
||||||
|
|
||||||
subplot(1, 3, 2);
|
|
||||||
spikeraster(pifouspikes, tmax);
|
|
||||||
title('PIF OU');
|
|
||||||
|
|
||||||
subplot(1, 3, 3);
|
|
||||||
spikeraster(lifadaptspikes, tmax);
|
|
||||||
title('LIF adapt');
|
|
||||||
|
|
||||||
%% isi histograms:
|
|
||||||
maxisi = 300.0;
|
|
||||||
binwidth = 0.002;
|
|
||||||
subplot(1, 3, 1);
|
|
||||||
poissonisis = isis(poissonspikes);
|
|
||||||
isihist(poissonisis, binwidth);
|
|
||||||
xlim([0, maxisi])
|
|
||||||
title('Poisson');
|
|
||||||
|
|
||||||
subplot(1, 3, 2);
|
|
||||||
pifouisis = isis(pifouspikes);
|
|
||||||
isihist(pifouisis, binwidth);
|
|
||||||
xlim([0, maxisi])
|
|
||||||
title('PIF OU');
|
|
||||||
|
|
||||||
subplot(1, 3, 3);
|
|
||||||
lifadaptisis = isis(lifadaptspikes);
|
|
||||||
isihist(lifadaptisis, binwidth);
|
|
||||||
xlim([0, maxisi])
|
|
||||||
title('LIF adapt');
|
|
||||||
|
|
||||||
%% serial correlations:
|
|
||||||
maxlag = 10;
|
|
||||||
rrange = [-0.5, 1.05];
|
|
||||||
subplot(1, 3, 1);
|
|
||||||
isiserialcorr(poissonisis, maxlag);
|
|
||||||
ylim(rrange)
|
|
||||||
title('Poisson');
|
|
||||||
|
|
||||||
subplot(1, 3, 2);
|
|
||||||
isiserialcorr(pifouisis, maxlag);
|
|
||||||
ylim(rrange)
|
|
||||||
title('PIF OU');
|
|
||||||
|
|
||||||
subplot(1, 3, 3);
|
|
||||||
isiserialcorr(lifadaptisis, maxlag);
|
|
||||||
ylim(rrange)
|
|
||||||
title('LIF adapt');
|
|
||||||
|
|
||||||
%% spike counts:
|
|
||||||
w = 0.1;
|
|
||||||
cmax = 8;
|
|
||||||
pmax = 0.5;
|
|
||||||
subplot(1, 3, 1);
|
|
||||||
counthist(poissonspikes, w);
|
|
||||||
xlim([0 cmax])
|
|
||||||
set(gca, 'XTick', 0:2:cmax)
|
|
||||||
ylim([0 pmax])
|
|
||||||
title('Poisson');
|
|
||||||
|
|
||||||
subplot(1, 3, 2);
|
|
||||||
counthist(pifouspikes, w);
|
|
||||||
xlim([0 cmax])
|
|
||||||
set(gca, 'XTick', 0:2:cmax)
|
|
||||||
ylim([0 pmax])
|
|
||||||
title('PIF OU');
|
|
||||||
|
|
||||||
subplot(1, 3, 3);
|
|
||||||
counthist(lifadaptspikes, w);
|
|
||||||
xlim([0 cmax])
|
|
||||||
set(gca, 'XTick', 0:2:cmax)
|
|
||||||
ylim([0 pmax])
|
|
||||||
title('LIF adapt');
|
|
||||||
savefigpdf(gcf, 'counthist.pdf', 20, 7);
|
|
@ -1,27 +0,0 @@
|
|||||||
rate = 100.0;
|
|
||||||
trials = 50;
|
|
||||||
tmax = 100.0;
|
|
||||||
|
|
||||||
% generate spikes:
|
|
||||||
spikes = poissonspikes( trials, rate, tmax );
|
|
||||||
% interspike intervals:
|
|
||||||
isivec = isis( spikes );
|
|
||||||
% histogram
|
|
||||||
f = figure( 1 );
|
|
||||||
isihist( isivec );
|
|
||||||
hold on
|
|
||||||
% theoretical density:
|
|
||||||
xmax = 5.0/rate;
|
|
||||||
x = 0:0.0001:xmax;
|
|
||||||
y = rate*exp(-rate*x);
|
|
||||||
plot( 1000.0*x, y, 'r', 'LineWidth', 3 );
|
|
||||||
% plot details:
|
|
||||||
title( sprintf( 'Poisson spike trains, rate=%g Hz, nisi=%d', rate, length( isivec ) ) )
|
|
||||||
xlim( [ 0.0 1000.0*xmax ] )
|
|
||||||
ylim( [ 0.0 1.1*rate ] )
|
|
||||||
legend( 'data', 'poisson' )
|
|
||||||
hold off
|
|
||||||
|
|
||||||
% serial correlations:
|
|
||||||
f = figure( 2 );
|
|
||||||
isiserialcorr( isivec, 10 );
|
|
@ -1,46 +0,0 @@
|
|||||||
rates = 1:1:100;
|
|
||||||
avisi = [];
|
|
||||||
sdisi = [];
|
|
||||||
cvisi = [];
|
|
||||||
|
|
||||||
for rate = rates
|
|
||||||
spikes = poissonspikes( 10, rate, 100.0 );
|
|
||||||
isivec = isis( spikes );
|
|
||||||
av = mean( isivec );
|
|
||||||
sd = std( isivec );
|
|
||||||
cv = sd/av;
|
|
||||||
avisi = [ avisi av ];
|
|
||||||
sdisi = [ sdisi sd ];
|
|
||||||
cvisi = [ cvisi cv ];
|
|
||||||
end
|
|
||||||
|
|
||||||
f = figure;
|
|
||||||
subplot( 1, 3, 1 );
|
|
||||||
scatter( rates, 1000.0*avisi, 'b', 'filled' );
|
|
||||||
hold on;
|
|
||||||
plot( rates, 1000.0./rates, 'r' );
|
|
||||||
hold off;
|
|
||||||
xlabel( 'Rate \lambda [Hz]' );
|
|
||||||
ylim( [ 0 1000 ] );
|
|
||||||
title( 'Mean ISI [ms]' );
|
|
||||||
legend( 'simulation', 'theory 1/\lambda' );
|
|
||||||
|
|
||||||
subplot( 1, 3, 2 );
|
|
||||||
scatter( rates, 1000.0*sdisi, 'b', 'filled' );
|
|
||||||
hold on;
|
|
||||||
plot( rates, 1000.0./rates, 'r' );
|
|
||||||
hold off;
|
|
||||||
xlabel( 'Rate \lambda [Hz]' );
|
|
||||||
ylim( [ 0 1000 ] )
|
|
||||||
title( 'Standard deviation ISI [ms]' );
|
|
||||||
legend( 'simulation', 'theory 1/\lambda' );
|
|
||||||
|
|
||||||
subplot( 1, 3, 3 );
|
|
||||||
scatter( rates, cvisi, 'b', 'filled' );
|
|
||||||
hold on;
|
|
||||||
plot( rates, ones( size( rates ) ), 'r' );
|
|
||||||
hold off;
|
|
||||||
xlabel( 'Rate \lambda [Hz]' );
|
|
||||||
ylim( [ 0 2 ] )
|
|
||||||
title( 'CV' );
|
|
||||||
legend( 'simulation', 'theory' );
|
|
@ -1,14 +0,0 @@
|
|||||||
function p = psth(spikes, dt, tmax)
|
|
||||||
% plots a PSTH of the spikes with binwidth dt
|
|
||||||
t = 0.0:dt:tmax+dt;
|
|
||||||
p = zeros(1, length(t));
|
|
||||||
for k=1:length(spikes)
|
|
||||||
times = spikes{k};
|
|
||||||
[h, b] = hist(times, t);
|
|
||||||
p = p + h;
|
|
||||||
end
|
|
||||||
p = p/length(spikes)/dt;
|
|
||||||
t(end) = [];
|
|
||||||
p(end) = [];
|
|
||||||
plot(t, p);
|
|
||||||
end
|
|
@ -1,12 +0,0 @@
|
|||||||
function r = spikerate(spikes, duration)
|
|
||||||
% returns the average spike rate of the spikes
|
|
||||||
% for the first duration seconds
|
|
||||||
% spikes: a cell array of vectors of spike times
|
|
||||||
|
|
||||||
rates = zeros(length(spikes),1);
|
|
||||||
for k = 1:length(spikes)
|
|
||||||
times = spikes{k};
|
|
||||||
rates(k) = sum(times<duration)/duration;
|
|
||||||
end
|
|
||||||
r = mean(rates);
|
|
||||||
end
|
|
@ -20,7 +20,6 @@
|
|||||||
|
|
||||||
\section{TODO}
|
\section{TODO}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Explain difference stationary versus non-stationary point process
|
|
||||||
\item Show different types of ISI histograms (regular, noisy, poisson, bursty, locking)
|
\item Show different types of ISI histograms (regular, noisy, poisson, bursty, locking)
|
||||||
\item Multitrial firing rates
|
\item Multitrial firing rates
|
||||||
\item Better explain difference between ISI method and PSTHes. The
|
\item Better explain difference between ISI method and PSTHes. The
|
||||||
|
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user