This commit is contained in:
Jan Grewe 2021-01-27 09:59:56 +01:00
commit cc1b550015
4 changed files with 45 additions and 30 deletions

View File

@ -282,7 +282,7 @@ def axis_label(label, unit=None):
if not unit: if not unit:
return label return label
elif xkcd_style: elif xkcd_style:
return '%s/%s' % (label, unit) return '%s (%s)' % (label, unit)
else: else:
return '%s [%s]' % (label, unit) return '%s [%s]' % (label, unit)

View File

@ -158,20 +158,25 @@
\question \qt{Statistics of spike counts} \question \qt{Statistics of spike counts}
Now let's have a look at the statistics of the spike counts. Now let's have a look at the statistics of the spike counts.
\begin{parts} \begin{parts}
\part Write a function that counts and returns a vector with the \part \label{counts} Write a function that counts with the number
number of spikes in windows of a given width $W$. of spikes in windows of a given width $W$. The spikes are passed
to the function as a cell array containing vectors of spike times.
The function returns a single vector with all the spike counts.
\begin{solution}
\lstinputlisting{counts.m}
\end{solution}
Use this function to generate a properly normalized histogram of \part Generate a properly normalized histogram of spike counts for
spike counts for the data of the three types of neurons. Use the data of the three types of neurons. Use 100\,ms for the window
100\,ms for the window width. width and the function from (\ref{counts}) for computing the spike
counts.
Compare the distributions with the Poisson distribution expected In addition, compare the distributions with the Poisson
for a Poisson spike train: distribution expected for a Poisson spike train:
\[ P(k) = \frac{(\lambda W)^ke^{\lambda W}}{k!} \; , \] where \[ P(k) = \frac{(\lambda W)^ke^{\lambda W}}{k!} \; , \] where
$\lambda$ is the rate of the spike train that you should estimate $\lambda$ is the rate of the spike train that you should estimate
from the data. from the data.
\begin{solution} \begin{solution}
\lstinputlisting{counts.m}
\newsolutionpage \newsolutionpage
\lstinputlisting{spikecountshists.m} \lstinputlisting{spikecountshists.m}
\colorbox{white}{\includegraphics[width=1\textwidth]{spikecountshists}} \colorbox{white}{\includegraphics[width=1\textwidth]{spikecountshists}}

View File

@ -14,13 +14,27 @@
\input{../../exercisestitle} \input{../../exercisestitle}
\begin{questions} \begin{questions}
\question The dataset \code{lifoustim.mat} contains the responses of a (model) neuron to a time-varying stimulus.
The dataset stores three variables: 1st the spike times in different trials,
2nd the stimulus, and 3rd the temporal resolution of the recording. The total
duration of each trial is 30 seconds.
\question{} Some trials are different than the others.
\begin{parts}
\part Use a rasterplot to identify them. In which sense
are they different?
\part Extend your program that it saves the figure with the width and height of 8.5\,cm using a fontsize of 10\,pt for labels.
See Chapter 3 in the script, or browse the Matlab help for more
information. Store the figure in pdf format.
\part Identify those trials in which the spike count
deviates more than $2\sigma$ (twice the standard deviation) from the average.
\end{parts}
\question Plot the time-dependent firing rate of a neuron. Calculate \question Plot the time-dependent firing rate of a neuron. Calculate
the firing rate from the \emph{instantaneous firing rate} (based on the the firing rate from the \emph{instantaneous firing rate} (based on the
interspike interval). Use the \code{lifoustim.mat}. The dataset interspike interval).
contains three variables. 1st the spike times in different trials,
2nd the stimulus, and 3rd the temporal resolution of the recording. The total
duration of each trial is 30 seconds.
\begin{parts} \begin{parts}
\part Write a function that takes three arguments: the spike \part Write a function that takes three arguments: the spike
@ -29,26 +43,18 @@
time-dependent firing rate. time-dependent firing rate.
\part Write a script that applies the above function to estimate \part Write a script that applies the above function to estimate
the time-dependent firing rate of each trial. Plot the firing rates of the individual responses the time-dependent firing rate of each trial. Plot the firing rates of the individual responses
and the average response as a function of time into the same graph. and the average response as a function of time into the same graph. Save the figure in pdf
\part Extend your program that it saves the figure with the width and height of 8.5\,cm using a fontsize of 10\,pt for labels. format. Use the same figure specifications as above and make sure it is properly labeled.
See Chapter 3 in the script, or browse the Matlab help for more
information. Store the figure in pdf format.
\end{parts} \end{parts}
\question{} As before but use the binning method. \question{} As before but estimate the "PSTH" using the binning method.
\question{} Extend your script that it also plots the interspike \question{} Extend your script that it also plots the interspike
interval histogram and the distribution of spike counts into interval histogram and the distribution of spike counts into
separate figures. Save the figures to file using the pdf format. You may also choose to use subplots instead of individual figures. separate figures. Save the figures to file using the pdf format. You may also choose to use subplots instead of individual figures.
\question{} Some trials are different than the others.
\begin{parts}
\part Use a rasterplot to identify them. In which sense
are they different? Save the rasterplot in pdf
format. Use the same figure specifications as above and make sure it is properly labeled.
\part Identify those trials in which the spike count
deviates more than $2\sigma$ (twice the standard deviation) from the average.
\end{parts}
\end{questions} \end{questions}
\end{document} \end{document}

View File

@ -69,7 +69,9 @@ def plot_homogeneous_spikes(ax):
ax.set_title('stationary') ax.set_title('stationary')
ax.set_xlim(0.0, duration) ax.set_xlim(0.0, duration)
ax.set_ylim(-0.5, trials-0.5) ax.set_ylim(-0.5, trials-0.5)
ax.set_xlabel('Time [s]') ax.set_xticks([0, 1, 2])
ax.set_yticks(np.arange(0, trials+1, 5))
ax.set_xlabel('Time', 's')
ax.set_ylabel('Trial') ax.set_ylabel('Trial')
ax.eventplot(homspikes, colors=[lsA['color']], linelength=0.8, lw=1) ax.eventplot(homspikes, colors=[lsA['color']], linelength=0.8, lw=1)
@ -79,14 +81,16 @@ def plot_inhomogeneous_spikes(ax):
ax.set_title('non-stationary') ax.set_title('non-stationary')
ax.set_xlim(0.0, duration) ax.set_xlim(0.0, duration)
ax.set_ylim(-0.5, trials-0.5) ax.set_ylim(-0.5, trials-0.5)
ax.set_xlabel('Time [s]') ax.set_xticks([0, 1, 2])
ax.set_ylabel('Trial') ax.set_yticks(np.arange(0, trials+1, 5))
ax.set_xlabel('Time', 's')
#ax.set_ylabel('Trial')
ax.eventplot(inhspikes, colors=[lsA['color']], linelength=0.8, lw=1) ax.eventplot(inhspikes, colors=[lsA['color']], linelength=0.8, lw=1)
if __name__ == "__main__": if __name__ == "__main__":
fig, (ax1, ax2) = plt.subplots(1, 2) fig, (ax1, ax2) = plt.subplots(1, 2)
fig.subplots_adjust(**adjust_fs(fig, left=4.0, right=1.0, top=1.2)) fig.subplots_adjust(**adjust_fs(fig, left=5.0, right=1.0, top=1.2))
plot_homogeneous_spikes(ax1) plot_homogeneous_spikes(ax1)
plot_inhomogeneous_spikes(ax2) plot_inhomogeneous_spikes(ax2)
plt.savefig('rasterexamples.pdf') plt.savefig('rasterexamples.pdf')