diff --git a/pointprocesses/code/fanoplot.m b/pointprocesses/code/fanoplot.m index 7998859..b53c42f 100644 --- a/pointprocesses/code/fanoplot.m +++ b/pointprocesses/code/fanoplot.m @@ -1,37 +1,33 @@ -function fanoplot( spikes ) -% computes fano factor as a function of window size +function fanoplot(spikes, titles) +% computes and plots fano factor as a function of window size % spikes: a cell array of vectors of spike times - - tmax = spikes{1}(end); - windows = 0.01:0.05:0.01*tmax; +% titles: string that is used as a title for the plots + windows = logspace(-3.0, -0.5, 100); mc = windows; vc = windows; ff = windows; for j = 1:length(windows) - w = windows( j ); - % collect counts: - n = []; - for k = 1:length(spikes) - for tk = 0:w:tmax-w - nn = sum( ( spikes{k} >= tk ) & ( spikes{k} < tk+w ) ); - %nn = length( find( ( spikes{k} >= tk ) & ( spikes{k} < tk+w ) ) ); - n = [ n nn ]; - end - end + w = windows(j); + counts = spikecounts(spikes, w); % statistics for current window: - mc(j) = mean( n ); - vc(j) = var( n ); - ff(j) = vc( j )/mc( j ); + mc(j) = mean(counts); + vc(j) = var(counts); + ff(j) = vc(j)/mc(j); end - subplot( 1, 2, 1 ); - scatter( mc, vc, 'filled' ); - xlabel( 'Mean count' ); - ylabel( 'Count variance' ); + subplot(1, 2, 1); + scatter(mc, vc, 'filled'); + title(titles); + xlabel('Mean count'); + ylabel('Count variance'); - subplot( 1, 2, 2 ); - scatter( 1000.0*windows, ff, 'filled' ); - xlabel( 'Window W [ms]' ); - ylabel( 'Fano factor' ); + subplot(1, 2, 2); + scatter(1000.0*windows, ff, 'filled'); + title(titles); + xlabel('Window [ms]'); + ylabel('Fano factor'); + xlim(1000.0*[windows(1) windows(end)]) + ylim([0.0 1.1]); + set(gca, 'XScale', 'log'); end diff --git a/pointprocesses/code/fanoplots.m b/pointprocesses/code/fanoplots.m new file mode 100644 index 0000000..949eb91 --- /dev/null +++ b/pointprocesses/code/fanoplots.m @@ -0,0 +1,9 @@ +spikes{1} = poissonspikes; +spikes{2} = pifouspikes; +spikes{3} = lifadaptspikes; +idents = {'poisson', 'pifou', 'lifadapt'}; +for k = 1:3 + figure(k) + fanoplot(spikes{k}, titles{k}); + savefigpdf(gcf, sprintf('fanoplots%s.pdf', idents{k}), 20, 7); +end diff --git a/pointprocesses/code/spikecounts.m b/pointprocesses/code/spikecounts.m index 0703e4b..c3eef4f 100644 --- a/pointprocesses/code/spikecounts.m +++ b/pointprocesses/code/spikecounts.m @@ -15,13 +15,14 @@ function counts = spikecounts(spikes, w) counts = []; for k = 1:length(spikes) times = spikes{k}; -% alternative 1: count the number of spikes in each window: +% method 1: count the number of spikes in each window: % for tk = 0:w:tmax-w % nn = sum((times >= tk) & (times < tk+w)); +% %nn = length(times((times >= tk) & (times < tk+w))); % %nn = length(find((times >= tk) & (times < tk+w))); % counts = [counts nn]; % end -% alternative 2: use the hist() function to do that! +% method 2: use the hist() function to do that! tbins = 0.5*w:w:tmax-0.5*w; nn = hist(times, tbins); counts = [counts nn]; diff --git a/pointprocesses/code/spikecountshists.m b/pointprocesses/code/spikecountshists.m new file mode 100644 index 0000000..5876386 --- /dev/null +++ b/pointprocesses/code/spikecountshists.m @@ -0,0 +1,17 @@ +w = 0.1; +bins = 0.0:1.0:10.0; + +counts{1} = spikecounts(poissonspikes, w); +counts{2} = spikecounts(pifouspikes, w); +counts{3} = spikecounts(lifadaptspikes, w); +titles = {'Poisson', 'PIF OU', 'LIF adapt'}; +for k = 1:3 + subplot(1, 3, k); + [h, b] = hist(counts{k}, bins); + bar(b, h/sum(h)); + title(titles{k}) + xlabel('Spike count'); + xlim([-0.5, 8.5]); + ylim([0.0 0.8]); +end +savefigpdf(gcf, 'spikecountshists.pdf', 20, 7); diff --git a/pointprocesses/exercises/fanoplotslifadapt.pdf b/pointprocesses/exercises/fanoplotslifadapt.pdf new file mode 100644 index 0000000..a04d10c Binary files /dev/null and b/pointprocesses/exercises/fanoplotslifadapt.pdf differ diff --git a/pointprocesses/exercises/fanoplotspifou.pdf b/pointprocesses/exercises/fanoplotspifou.pdf new file mode 100644 index 0000000..47cf9cf Binary files /dev/null and b/pointprocesses/exercises/fanoplotspifou.pdf differ diff --git a/pointprocesses/exercises/fanoplotspoisson.pdf b/pointprocesses/exercises/fanoplotspoisson.pdf new file mode 100644 index 0000000..8b1beac Binary files /dev/null and b/pointprocesses/exercises/fanoplotspoisson.pdf differ diff --git a/pointprocesses/exercises/pointprocesses01.tex b/pointprocesses/exercises/pointprocesses01.tex index 565650c..b05f216 100644 --- a/pointprocesses/exercises/pointprocesses01.tex +++ b/pointprocesses/exercises/pointprocesses01.tex @@ -195,7 +195,7 @@ jan.benda@uni-tuebingen.de} \end{parts} - \continue + \continuepage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \question \qt{Statistics of spike counts} Now let's have a look at the statistics of the spike counts. @@ -208,18 +208,25 @@ jan.benda@uni-tuebingen.de} width. \begin{solution} \lstinputlisting{../code/spikecounts.m} - % XXX + \newsolutionpage + \lstinputlisting{../code/spikecountshists.m} + \colorbox{white}{\includegraphics[width=1\textwidth]{spikecountshists}} \end{solution} - \part Write a function that computes for a range from window + \newsolutionpage + \part Write a function that computes for a range of window widths the mean, the variance and the Fano factor of the - corresponding spike counts. The function should the generate two + corresponding spike counts. The function should generate two plots. One showing the spike count variance in dependence on the mean spike count. The other plot showing the Fano factor as a function of window width. \begin{solution} \lstinputlisting{../code/fanoplot.m} - % XXX + \newsolutionpage + \lstinputlisting{../code/fanoplots.m} + \colorbox{white}{\includegraphics[width=1\textwidth]{fanoplotspoisson}} + \colorbox{white}{\includegraphics[width=1\textwidth]{fanoplotspifou}} + \colorbox{white}{\includegraphics[width=1\textwidth]{fanoplotslifadapt}} \end{solution} \end{parts} diff --git a/pointprocesses/exercises/spikecountshists.pdf b/pointprocesses/exercises/spikecountshists.pdf new file mode 100644 index 0000000..a940a04 Binary files /dev/null and b/pointprocesses/exercises/spikecountshists.pdf differ