From f76ab7170e6d9594fefef7d8a2315476edc23a99 Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Fri, 11 Jan 2019 19:31:01 +0100 Subject: [PATCH] [projects] added solution to isicorrelations --- projects/README | 3 +- projects/instructions.tex | 4 +- projects/project.mk | 3 +- .../isicorrelations.tex | 71 +++++++++++-------- .../project_isicorrelations/lifadaptspikes.m | 7 +- .../solution/firingrate.m | 11 +++ .../solution/isicorrelations.m | 36 ++++++++++ .../solution/lifadaptspikes.m | 50 +++++++++++++ .../solution/serialcorr.m | 15 ++++ .../project_photoreceptor/photoreceptor.tex | 27 ++++--- 10 files changed, 178 insertions(+), 49 deletions(-) create mode 100644 projects/project_isicorrelations/solution/firingrate.m create mode 100644 projects/project_isicorrelations/solution/isicorrelations.m create mode 100644 projects/project_isicorrelations/solution/lifadaptspikes.m create mode 100644 projects/project_isicorrelations/solution/serialcorr.m diff --git a/projects/README b/projects/README index 4cd45fd..dbc7699 100644 --- a/projects/README +++ b/projects/README @@ -29,8 +29,7 @@ Improve questions project_isicorrelations medium-difficult -Add statistical test for dependence on adapttau! -Need to program a solution! +Need to finish solution project_isipdffit Too technical diff --git a/projects/instructions.tex b/projects/instructions.tex index 8c79ed6..d4791cb 100644 --- a/projects/instructions.tex +++ b/projects/instructions.tex @@ -4,7 +4,7 @@ \textbf{Evaluation criteria:} You can view the evaluation criteria on the - emph{SciCompScoreSheet.pdf} on Ilias. + \emph{SciCompScoreSheet.pdf} on Ilias. \vspace{1ex} \textbf{Dates:} @@ -23,7 +23,7 @@ zip-file. Hint: make the zip file you want to upload, unpack it somewhere - else and check if your main script is running properly. + else and check if your main script is still running properly. \vspace{1ex} \textbf{Code:} diff --git a/projects/project.mk b/projects/project.mk index eac9e2a..1a9bf0b 100644 --- a/projects/project.mk +++ b/projects/project.mk @@ -19,7 +19,8 @@ clean: latex: pdflatex $(BASENAME).tex + pdflatex $(BASENAME).tex -zip: pdf +zip: latex rm -f zip $(BASENAME).zip zip $(BASENAME).zip *.pdf *.m data/* $(ZIPFILES) diff --git a/projects/project_isicorrelations/isicorrelations.tex b/projects/project_isicorrelations/isicorrelations.tex index f9eee80..7b49a02 100644 --- a/projects/project_isicorrelations/isicorrelations.tex +++ b/projects/project_isicorrelations/isicorrelations.tex @@ -1,6 +1,6 @@ \documentclass[a4paper,12pt,pdftex]{exam} -\newcommand{\ptitle}{Interspike-intervall correlations} +\newcommand{\ptitle}{Adaptation and interspike-interval correlations} \input{../header.tex} \firstpagefooter{Supervisor: Jan Benda}{phone: 29 74573}% {email: jan.benda@uni-tuebingen.de} @@ -20,10 +20,10 @@ Explore the dependence of interspike interval correlations on the firing rate, adaptation time constant and noise level. -The neuron is a neuron with an adaptation current. - It is implemented in the file \texttt{lifadaptspikes.m}. Call it - with the following parameters: - \begin{lstlisting} + The neuron is a neuron with an adaptation current. It is + implemented in the file \texttt{lifadaptspikes.m}. Call it with the + following parameters: + \begin{lstlisting} trials = 10; tmax = 50.0; input = 10.0; % the input I @@ -31,7 +31,7 @@ Dnoise = 1e-2; % noise strength adapttau = 0.1; % adaptation time constant in seconds adaptincr = 0.5; % adaptation strength -spikes = lifadaptspikes( trials, input, tmax, Dnoise, adapttau, adaptincr ); +spikes = lifadaptspikes(trials, input, tmax, Dnoise, adapttau, adaptincr); \end{lstlisting} The returned \texttt{spikes} is a cell array with \texttt{trials} elements, each being a vector of spike times (in seconds) computed for a duration of \texttt{tmax} seconds. @@ -39,29 +39,42 @@ spikes = lifadaptspikes( trials, input, tmax, Dnoise, adapttau, adaptincr ); and the adaptation time constant via \texttt{adapttau}. \begin{parts} - \part Measure the intensity-response curve of the neuron, that is the mean firing rate - as a function of the input for a range of inputs from 0 to 120. - - \part Compute the correlations between each interspike interval $T_i$ and the next one $T_{i+1}$ - (serial interspike interval correlation at lag 1). Plot this correlation as a function of the - firing rate by varying the input as in (a). - - \part How does this dependence change for different values of the adaptation - time constant \texttt{adapttau}? Use values between 10\,ms and - 1\,s for \texttt{adapttau}. - - \part Determine the firing rate at which the minimum interspike interval correlation - occurs. How does the minimum correlation and this firing rate - depend on the adaptation time constant \texttt{adapttau}? - - \part How do the results change if the level of the intrinsic noise \texttt{Dnoise} is modified? - Use values of 1e-4, 1e-3, 1e-2, 1e-1, and 1 for \texttt{Dnoise}. - - - \uplevel{If you still have time you can continue with the following question:} - - \part How do the interspike interval distributions look like for the different noise levels - at some example values for the input and the adaptation time constant? + \part Show a spike-raster plot and a time-resolved firing rate of + the neuron for an input current of 50 for three different + adaptation time constants \texttt{adapttau} (10\,m, 100\,ms, + 1\,s). How do the neural responses look like and how do they + depend on the adaptation time constant? + + \uplevel{For all the following analysis we only use the spike + times of the steady-state response, i.e. we skip all spikes + occuring before at least three times the adaptation time + constant.} + + \part \label{ficurve} Measure the intensity-response curve of the + neuron, that is the mean firing rate as a function of the input + for a range of inputs from 0 to 120. + + \part Additionally compute the correlations between each + interspike interval $T_i$ and the next one $T_{i+1}$ (serial + interspike interval correlation at lag 1) for the same range of + inputs as in (\ref{ficurve}). Plot the correlation as a function + of the input. + + \part How does the intensity-response curve and the + interspike-interval correlations depend on the adaptation time + constant \texttt{adapttau}? Use several values between 10\,ms and + 1\,s for \texttt{adapttau} (logarithmically distributed). + + \part Determine the firing rate at which the minimum interspike + interval correlation occurs. How does the minimum correlation and + this firing rate (or the inverse of it, the mean interspike + interval) depend on the adaptation time constant + \texttt{adapttau}? Is this dependence siginificant? If yes, can + you explain this dependence? + + \part How do all the results change if the level of the intrinsic + noise \texttt{Dnoise} is modified? Use values of 1e-4, 1e-3, + 1e-2, 1e-1, and 1 for \texttt{Dnoise}. \end{parts} diff --git a/projects/project_isicorrelations/lifadaptspikes.m b/projects/project_isicorrelations/lifadaptspikes.m index e2de8fc..2236a76 100644 --- a/projects/project_isicorrelations/lifadaptspikes.m +++ b/projects/project_isicorrelations/lifadaptspikes.m @@ -41,11 +41,8 @@ function spikes = lifadaptspikes( trials, input, tmaxdt, D, tauadapt, adaptincr if v >= vthresh v = vreset; a = a + adaptincr/tauadapt; - spiketime = i*dt; - if spiketime > 4.0*tauadapt - times(j) = spiketime - 4.0*tauadapt; - j = j + 1; - end + times(j) = i*dt; + j = j + 1; end end spikes{k} = times; diff --git a/projects/project_isicorrelations/solution/firingrate.m b/projects/project_isicorrelations/solution/firingrate.m new file mode 100644 index 0000000..ea85254 --- /dev/null +++ b/projects/project_isicorrelations/solution/firingrate.m @@ -0,0 +1,11 @@ +function [ rate ] = firingrate(spikes, t0, t1) +% compute the firing rate from spikes between t0 and t1 + +rates = zeros(length(spikes), 1); +for k = 1:length(spikes) + spiketimes = spikes{k}; + rates(k) = length(spiketimes((spiketimes>=t0)&(spiketimes<=t1)))/(t1-t0); +end +rate = mean(rates); +end + diff --git a/projects/project_isicorrelations/solution/isicorrelations.m b/projects/project_isicorrelations/solution/isicorrelations.m new file mode 100644 index 0000000..49d7985 --- /dev/null +++ b/projects/project_isicorrelations/solution/isicorrelations.m @@ -0,0 +1,36 @@ +trials = 5; +tmax = 10.0; +Dnoise = 1e-2; % noise strength +adapttau = 0.1; % adaptation time constant in seconds +adaptincr = 0.5; % adaptation strength +t0=2.0; +t1=tmax; +maxlag = 5; + +taus = [0.01, 0.1, 1.0]; +colors = ['r', 'b', 'g']; +for j = 1:length(taus) + adapttau = taus(j); + % f-I curves: + Is = [0:10:80]; + rate = zeros(length(Is),1); + corr = zeros(length(Is),maxlag); + for k = 1:length(Is) + input = Is(k); + spikes = lifadaptspikes(trials, input, tmax, Dnoise, adapttau, adaptincr); + rate(k) = firingrate(spikes, t0, t1); + corr(k,:) = serialcorr(spikes, t0, t1, maxlag); + end + + figure(1); + hold on + plot(Is, rate, colors(j)); + hold off + + figure(2); + hold on + plot(Is, corr(:,2), colors(j)); + hold off +end + +pause diff --git a/projects/project_isicorrelations/solution/lifadaptspikes.m b/projects/project_isicorrelations/solution/lifadaptspikes.m new file mode 100644 index 0000000..2236a76 --- /dev/null +++ b/projects/project_isicorrelations/solution/lifadaptspikes.m @@ -0,0 +1,50 @@ +function spikes = lifadaptspikes( trials, input, tmaxdt, D, tauadapt, adaptincr ) +% Generate spike times of a leaky integrate-and-fire neuron +% with an adaptation current +% trials: the number of trials to be generated +% input: the stimulus either as a single value or as a vector +% tmaxdt: in case of a single value stimulus the duration of a trial +% in case of a vector as a stimulus the time step +% D: the strength of additive white noise +% tauadapt: adaptation time constant +% adaptincr: adaptation strength + + tau = 0.01; + if nargin < 4 + D = 1e0; + end + if nargin < 5 + tauadapt = 0.1; + end + if nargin < 6 + adaptincr = 1.0; + end + vreset = 0.0; + vthresh = 10.0; + dt = 1e-4; + + if max( size( input ) ) == 1 + input = input * ones( ceil( tmaxdt/dt ), 1 ); + else + dt = tmaxdt; + end + spikes = cell( trials, 1 ); + for k=1:trials + times = []; + j = 1; + v = vreset + (vthresh-vreset)*rand(); + a = 0.0; + noise = sqrt(2.0*D)*randn( length( input ), 1 )/sqrt(dt); + for i=1:length( noise ) + v = v + ( - v - a + noise(i) + input(i))*dt/tau; + a = a + ( - a )*dt/tauadapt; + if v >= vthresh + v = vreset; + a = a + adaptincr/tauadapt; + times(j) = i*dt; + j = j + 1; + end + end + spikes{k} = times; + end +end diff --git a/projects/project_isicorrelations/solution/serialcorr.m b/projects/project_isicorrelations/solution/serialcorr.m new file mode 100644 index 0000000..589337c --- /dev/null +++ b/projects/project_isicorrelations/solution/serialcorr.m @@ -0,0 +1,15 @@ +function [ isicorrs ] = serialcorr(spikes, t0, t1, maxlag) +% compute the serial correlations from spikes between t0 and t1 + +ics = zeros(length(spikes), maxlag); +for k = 1:length(spikes) + spiketimes = spikes{k}; + isis = diff(spiketimes((spiketimes>=t0)&(spiketimes<=t1))); + if length(isis) > 2*maxlag + for j=1:maxlag + ics(k, j) = corr(isis(j:end)', isis(1:end+1-j)'); + end + end +end +isicorrs = mean(ics, 1); +end diff --git a/projects/project_photoreceptor/photoreceptor.tex b/projects/project_photoreceptor/photoreceptor.tex index e80b8bb..350341b 100644 --- a/projects/project_photoreceptor/photoreceptor.tex +++ b/projects/project_photoreceptor/photoreceptor.tex @@ -36,22 +36,29 @@ resting potential before stimulus onset. project, however, you can treat it as if it was the intensity.) \begin{parts} - \part{} Create a plot of the raw data. For each light intensity plot the average response - as a function of time. This plot should also depict the across-trial - variability in an appropriate way.\\[0.5ex] - \part{} You will notice that the responses have three main parts, a + \part Create a plot of the raw data. For each light intensity plot + the average response as a function of time. This plot should also + depict the across-trial variability in an appropriate way. + + \part You will notice that the responses have three main parts, a pre-stimulus phase, the phase in which the light was on, and finally a post-stimulus phase. Create an characteristic curve that plots the response strength as a function of the stimulus intensity for the ``onset'' and the ``steady state'' - phases of the light response.\\[0.5ex] - \part{} The light switches on at time zero. Estimate the delay between stimulus and response.\\[0.5ex] - \part{} Analyze the across trial variability in the ``onset'' and ``steady state''. Check for statistically significant differences. - \pate{} The membrane potential shows some fluctuations (noise) + phases of the light response. + + \part The light switches on at time zero. Estimate the delay + between stimulus and response. + + \part Analyze the across trial variability in the ``onset'' and + ``steady state''. Check for statistically significant differences. + + \part The membrane potential shows some fluctuations (noise) compare the noise before stimulus onset and in the steady state phase of the response. - \part{} (optional) You may also analyze the post-stimulus response in some - more detail. + + \part (optional) You may also analyze the post-stimulus response + in some more detail. \end{parts} \end{questions}