diff --git a/programming/exercises/psths.m b/programming/exercises/psths.m index 7d76c86..4b47850 100644 --- a/programming/exercises/psths.m +++ b/programming/exercises/psths.m @@ -1,16 +1,79 @@ load('ampullary.mat') -fig = figure(); - -%% create PSTH on the basis of the interspike intervals -fig.sub -% 1. get the interspike intervals for each trial +sample_rate = 20000; % Hz +max_time = 0; for i = 1:size(times,2) - isi = diff(times{i}); - + max_time = max([max_time, max(times{i})]); end +%% create PSTH on the basis of the interspike intervals +t = times{1}; +firing_rate = [0 1./diff(t)]; +start = 1; +resp = zeros(1, round(max_time * sample_rate)); +for i = 1:length(t) + resp(1,start:round(t(i) * sample_rate)) = firing_rate(i); + start = round(t(i) * sample_rate); +end +fig = figure(); +set(gcf, 'PaperUnits', 'centimeters'); +set(gcf, 'PaperSize', [11.7 9.0]); +set(gcf, 'PaperPosition',[0.0 0.0 11.7 9.0]); +set(gcf,'Color', 'white') +plot((1/sample_rate:1/sample_rate:max_time), resp) +xlabel('time [s]') +ylabel('firing rate [Hz]') +ylim([0 300]) +xlim([0 1]) +title('instanataneous firing rate') %% create PSTH using the binning method +bin_width = 0.0125; % s +edges = 0:bin_width:max_time; +firing_rate = []; +for i = 1:size(times,2) + t = times{i}; + [n, time] = hist(t, edges); + if isempty(firing_rate) + firing_rate = n / bin_width / size(times,2); + else + firing_rate = firing_rate + (n / bin_width / size(times,2)); + end +end +fig = figure(); +set(gcf, 'PaperUnits', 'centimeters'); +set(gcf, 'PaperSize', [11.7 9.0]); +set(gcf, 'PaperPosition',[0.0 0.0 11.7 9.0]); +set(gcf,'Color', 'white') +plot(time, firing_rate) +ylim([0 300]) +xlim([0 1]) +xlabel('time [s]') +ylabel('firing rate [Hz]') +title('binning method') +%% create PSTH using the kernel-convolution method +kernel_width = 0.0125; %s +binary_spikes = zeros(size(times,2), round(max_time*sample_rate)); +resps = zeros(size(binary_spikes)); +window = hann(kernel_width*sample_rate,'symmetric'); +window = window/sum(window); - -%% create PSTH using the kernel-convolution method \ No newline at end of file +for i = 1:size(times,2) + t = times{i}; + temp = round(t*sample_rate); + if temp(1) <= 0 + temp(1) = 1; + end + binary_spikes(i, temp) = 1; + resps(i,:) = conv(binary_spikes(i,:), window, 'same')*sample_rate; +end +fig = figure(); +set(gcf, 'PaperUnits', 'centimeters'); +set(gcf, 'PaperSize', [11.7 9.0]); +set(gcf, 'PaperPosition',[0.0 0.0 11.7 9.0]); +set(gcf,'Color', 'white') +plot((1/sample_rate:1/sample_rate:max_time), mean(resps,1)) +ylim([0 300]) +xlim([0 1]) +xlabel('time [s]') +ylabel('firing rate [Hz]') +title('convolution method') diff --git a/programming/lectures/plotting_spike_trains.tex b/programming/lectures/plotting_spike_trains.tex index 00028f7..c647920 100644 --- a/programming/lectures/plotting_spike_trains.tex +++ b/programming/lectures/plotting_spike_trains.tex @@ -113,8 +113,8 @@ \frametitle{Tagesmen\"u} \begin{enumerate} \item Graphische Darstellung von Daten I - \item Spiketrain Analyse I \item Fortgeschrittene Datenstrukturen I + \item Spiketrain Analyse I \item Navigieren im Dateisystem \item \"Ubungen, \"Ubungen, \"Ubungen. \end{enumerate} @@ -124,6 +124,7 @@ \huge{1. Graphische Darstellung von Daten} \end{frame} + \begin{frame}[fragile] \frametitle{Graphische Darstellung von Daten} \framesubtitle{Plotting Interface} @@ -135,12 +136,14 @@ Beides hat seine Berechtigung und seine eigenen Vor- und Nachteile. Welche? \end{frame} + \begin{frame} [fragile] \frametitle{Graphische Darstellung von Daten} \framesubtitle{Welche Art Plot wof\"ur?} \url{http://www.mathworks.de/discovery/gallery.html} \end{frame} + \begin{frame} [fragile] \frametitle{Graphische Darstellung von Daten} \framesubtitle{Was macht einen guten Plot aus?} @@ -150,26 +153,39 @@ \end{figure} \end{frame} + \begin{frame} [fragile] \frametitle{Graphische Darstellung von Daten} \framesubtitle{Was macht einen guten Plot aus?} - TODO !!! + \begin{enumerate} + \item Klarheit. + \item Vollstaendige Beschriftung. + \item Deutliche Unterscheidbarkeit von Kurven. + \item Keine suggestive Darstellung. + \item Ausgewogenheit von Linienst\"arken Schrift- und Plotgr\"o{\ss}e. + \end{enumerate} \end{frame} -\begin{frame} [fragile] - \frametitle{Graphische Darstellung von Daten} - \framesubtitle{\"Ubung} - \begin{enumerate} - \item Nehmt euch einen beliebigen Datenplot vor und macht ihn \textbf{sch\"on}. - \item Die Abbildung soll f\"ur eine einspaltige Abbildung im - \textit{Journal of Neuroscience} geeignet sein - (\url{http://www.jneurosci.org/site/misc/ifa_illustrations.xhtml}). - \item Erzeugt/ver\"andert/erweitert das Programm zum plotten so, dass - die Abbildung automatisch erstellt und gespeichert wird. - \item Speichert die Abbildung als pdf. - \item Wer den sch\"onsten Plot macht, dem winkt ein Preis :-) - \end{enumerate} +\begin{frame}[plain] +\huge{2. Fortgeschrittene Datenstrukturen I} +\end{frame} + + +\begin{frame} + \frametitle{Fortgeschrittene Datenstrukturen I} + \framesubtitle{Cell Arrays} + \begin{enumerate} + \item Matrizen k\"onnen nur rechtwinklig sein.\pause + \item Manchmal hat man aber unterschiedlich viele Datenpunkte, die + dennoch logisch zusammengeh\"oren.\pause + \item Z.B. Wenn man Zeitpunkte von Neuronalen- oder Verhaltensereignissen hat. + \end{enumerate} +\end{frame} + + +\begin{frame}[plain] +\huge{3. Spiketrain Analyse I} \end{frame} \begin{frame} @@ -197,14 +213,65 @@ \begin{frame} \frametitle{Spiketrain Analyse I} - \framesubtitle{PSTH} - \textbf{P}eri- \textbf{S}timulus - \textbf{T}ime - \textbf{H}istogram + \framesubtitle{Feuerrate \"uber die Zeit} + \begin{enumerate} + \item Die Feuerrate kann aus dem Abstand zwischen zwei + aufeinanderfolgenden Aktionspotentialen (\textbf{Interspikeinterval}) berechnet werden. \pause + \item Auch als \textbf{Instantane Feuerrate} bezeichnet. + \end{enumerate} + \begin{figure} + \centering + \includegraphics[width=0.75\columnwidth]{images/isi} + \end{figure} +\end{frame} + + +\begin{frame} + \frametitle{Spiketrain Analyse I} + \framesubtitle{Feuerrate \"uber die Zeit} + \begin{enumerate} + \item Z.B. das \textbf{P}eri- \textbf{S}timulus - \textbf{T}ime - + \textbf{H}istogram, \textbf{PSTH} + \item Wird berechnet indem die Zeit in ``bins'' geteilt wird die + Anzahl Spikes pro bin gezaehlt werden. + \item Die Anzahl wird dann in eine Feuerrate umgerechnet. + \end{enumerate}\pause + \begin{figure} + \centering + \includegraphics[width=0.75\columnwidth]{images/binning} + \end{figure} +\end{frame} + + +\begin{frame} + \frametitle{Spiketrain Analyse I} + \framesubtitle{Feuerrate \"uber die Zeit} + \begin{enumerate} + \item Z.B. das \textbf{P}eri- \textbf{S}timulus - \textbf{T}ime - + \textbf{H}istogram, \textbf{PSTH} + \item Wird berechnet indem man die Aktivit\"at bin\"ar ausdr\"uckt. + \item Jede 1 wird dann duch einen bestimmten ``Kern'' ersetzt. + \item Der Vorgagn heisst Verfaltung (convolution). + \end{enumerate}\pause \begin{figure} \centering - \includegraphics[width=0.75\columnwidth]{images/psth} + \includegraphics[width=0.75\columnwidth]{images/convolution} \end{figure} \end{frame} +\begin{frame} [fragile] + \frametitle{Graphische Darstellung von Daten} + \framesubtitle{\"Ubung} + \begin{enumerate} + \item Nehmt euch einen beliebigen Datenplot vor und macht ihn \textbf{sch\"on}. + \item Die Abbildung soll f\"ur eine einspaltige Abbildung im + \textit{Journal of Neuroscience} geeignet sein + (\url{http://www.jneurosci.org/site/misc/ifa_illustrations.xhtml}). + \item Erzeugt/ver\"andert/erweitert das Programm zum plotten so, dass + die Abbildung automatisch erstellt und gespeichert wird. + \item Speichert die Abbildung als pdf. + \end{enumerate} +\end{frame} \end{document} diff --git a/programming/lectures/programming_basics.tex b/programming/lectures/programming_basics.tex index daf56d2..d6cadb0 100644 --- a/programming/lectures/programming_basics.tex +++ b/programming/lectures/programming_basics.tex @@ -52,7 +52,7 @@ Universit\"at T\"ubingen} \institute[Wissenschaftliche Datenverarbeitung]{} - \date{03.10.2014 - 07.11.2014} + \date{13.10.2014 - 07.11.2014} %\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}} \subject{Einf\"uhrung in wissenschaftliche Datenverarbeitung} @@ -528,7 +528,7 @@ \item Definiere zwei Vektoren: \verb+x = [3 2 6 8];+ and \verb+y = [4; 1; 3; 5];+ \begin{enumerate} \item ... addiere 5 zu jedem Element von \verb+x+. - \item ... addiere 3 zu jedem Element zu jedem Element von y, dass einen nicht gerade Index hat. + \item ... addiere 3 zu jedem Element von y, dass einen nicht gerade Index hat. \item ... multipliziere jedes Element von \verb+x+ mit dem entsprechenden Element in \verb+y+ und weise das Ergebnis der Variable \verb+z+ zu. diff --git a/programming/lectures/scripts_functions.tex b/programming/lectures/scripts_functions.tex index 94df3d4..1e6a167 100644 --- a/programming/lectures/scripts_functions.tex +++ b/programming/lectures/scripts_functions.tex @@ -156,7 +156,7 @@ \end{enumerate}\pause \item Alle werden in sogenannte m-files gespeichert (z.B. \textit{meinProgramm.m}). \item K\"onnen dann von der Kommandozeile aufgerufen werden. - \item Programme erh\"ohen die Wiederverwertbarkeit von Programmcode. + \item Programme erh\"ohen die Wiederverwertbarkeit von Programmcode.\pause \item Programme k\"onnen andere Programme aufrufen. \end{itemize} \end{frame} @@ -188,13 +188,13 @@ \frametitle{Skripte und Funktionen} \framesubtitle{\"Ubungen} \begin{enumerate} - \item \"Offnet den Editor und schreibt ein Skript, das f\"unf Sinus + \item \"Offnet den Editor und schreibt ein Skript, das vier Sinus mit den Amplituden \verb+amplitude = [0.25, 0.5, 1.0, 2.0]+ in - einen Graphen plottet. Benutzt eine \verb+for+ Schleife um die Amplituden abzuarbeiten. + einen Graphen plottet. Benutzt eine \verb+for+ Schleife um die Amplituden abzuarbeiten (\verb+hold on+ um linien \"ubereinander zu plotten). \item Speichert das Skript und f\"uhrt es von der Kommandozeile aus. \item Erzeuge ein zweites Skript, das nun die Frequenz setzt und das erste aufruft. Benutzt eine \verb+for+ Schleife um folgende - Frequenzen abzuarbeiten \verb+frequenzen = [1.0, 2.0]+. + Frequenzen abzuarbeiten \verb+frequenzen = [1.0, 2.0, 3.0] %Hz+. \item Speichert und ruft dieses Skript \"uber die Kommandozeile auf. \item Was ist geplottet, passt es zu den Erwartungen? \end{enumerate} @@ -243,6 +243,25 @@ function y = plot_sinus(frequenz, amplitude) \end{lstlisting} \end{frame} + +\begin{frame}[fragile] + \frametitle{Funktionen} + \framesubtitle{Argumente und R\"uckgabewerte} + Eine Funktion kann auch mehrere R\"uckgabewerte haben. + \begin{lstlisting} +function [y, z] = do_something(a, b) + y = a + b + z = a * b +\end{lstlisting} +\pause +\begin{itemize} +\item Alle R\"uckgabewerte m\"ussen in der Funktion definiert sein!\pause +\item Man kann auch mit variablen Anzahlen der Argumente und R\"uckgabewerte programmieren.\pause +\item Ist aber deutlich komplexer und fehleranf\"alliger. +\end{itemize} +\end{frame} + + \begin{frame}[fragile] \frametitle{Skripte und Funktionen} \framesubtitle{Programmierstil} @@ -303,7 +322,7 @@ function y = plot_sinus(frequenz, amplitude) \begin{enumerate} \item Variablen werden klein geschrieben. Wenn n\"otig entweder im \textit{camelCase} oder mit Unterstrichen (z.B. \verb+spikeCount+ - oder \verb+spike\_count+). + oder \verb+spike_count+). \item Funktionen und Skripte mit ausdrucksstarken Namen (z.B. \verb+loadSpikeData+). \item Kommentare sparsam. Eventuell um Abschnitte zu trennen. \item Hilfetexte: Ein Problem; sie m\"ussen aktuell sein sonst sind @@ -357,13 +376,14 @@ function y = plot_sinus(frequenz, amplitude) \item Schreibe eine Funktion \verb+plotSineWave+ die die Amplitude des Sinus als Argument entgegennimmt. \item Erweitere die Funktion in der Weise, dass sie zus\"atzlich die - gew\"uenschte Frequenz \"ubernimmt. + gew\"unschte Frequenz \"ubernimmt. \item Erweitere \verb+plotSineWave+ so, dass sie eine Schar von Sinuswellen unterschiedlicher Frequenz plottet. - \item Erweitere \verb+plotSinWave+ so, dass auch die Amplitude als + \item Erweitere \verb+plotSineWave+ so, dass auch die Amplitude als Vektor \"ubergeben werden kann. Die Funktion soll alle m\"oglichen Kombinationen darstellen. - \item Erweitere \verb+plotSinWave+ so, dass die berechnete Sinus in einer 2-D Matrize zurckgegeben werden. + \item Erweitere \verb+plotSineWave+ so, dass die berechnete Sinus in + einer 2-D Matrize zur\"uckgegeben werden. \item F\"uge zwei weitere R\"uckgabeparameter hinzu, die f\"ur jede Berechnung die Amplitude und Frequenz zur\"uckgeben. \end{enumerate}