Merge branch 'master' of raven.am28.uni-tuebingen.de:scientificComputing

This commit is contained in:
Fabian Sinz 2014-10-16 17:53:35 +02:00
commit f630716151
4 changed files with 187 additions and 37 deletions

View File

@ -1,16 +1,79 @@
load('ampullary.mat') load('ampullary.mat')
fig = figure(); sample_rate = 20000; % Hz
max_time = 0;
%% create PSTH on the basis of the interspike intervals
fig.sub
% 1. get the interspike intervals for each trial
for i = 1:size(times,2) for i = 1:size(times,2)
isi = diff(times{i}); max_time = max([max_time, max(times{i})]);
end 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 %% 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 %% 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);
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')

View File

@ -113,8 +113,8 @@
\frametitle{Tagesmen\"u} \frametitle{Tagesmen\"u}
\begin{enumerate} \begin{enumerate}
\item Graphische Darstellung von Daten I \item Graphische Darstellung von Daten I
\item Spiketrain Analyse I
\item Fortgeschrittene Datenstrukturen I \item Fortgeschrittene Datenstrukturen I
\item Spiketrain Analyse I
\item Navigieren im Dateisystem \item Navigieren im Dateisystem
\item \"Ubungen, \"Ubungen, \"Ubungen. \item \"Ubungen, \"Ubungen, \"Ubungen.
\end{enumerate} \end{enumerate}
@ -124,6 +124,7 @@
\huge{1. Graphische Darstellung von Daten} \huge{1. Graphische Darstellung von Daten}
\end{frame} \end{frame}
\begin{frame}[fragile] \begin{frame}[fragile]
\frametitle{Graphische Darstellung von Daten} \frametitle{Graphische Darstellung von Daten}
\framesubtitle{Plotting Interface} \framesubtitle{Plotting Interface}
@ -135,12 +136,14 @@
Beides hat seine Berechtigung und seine eigenen Vor- und Nachteile. Welche? Beides hat seine Berechtigung und seine eigenen Vor- und Nachteile. Welche?
\end{frame} \end{frame}
\begin{frame} [fragile] \begin{frame} [fragile]
\frametitle{Graphische Darstellung von Daten} \frametitle{Graphische Darstellung von Daten}
\framesubtitle{Welche Art Plot wof\"ur?} \framesubtitle{Welche Art Plot wof\"ur?}
\url{http://www.mathworks.de/discovery/gallery.html} \url{http://www.mathworks.de/discovery/gallery.html}
\end{frame} \end{frame}
\begin{frame} [fragile] \begin{frame} [fragile]
\frametitle{Graphische Darstellung von Daten} \frametitle{Graphische Darstellung von Daten}
\framesubtitle{Was macht einen guten Plot aus?} \framesubtitle{Was macht einen guten Plot aus?}
@ -150,28 +153,41 @@
\end{figure} \end{figure}
\end{frame} \end{frame}
\begin{frame} [fragile] \begin{frame} [fragile]
\frametitle{Graphische Darstellung von Daten} \frametitle{Graphische Darstellung von Daten}
\framesubtitle{Was macht einen guten Plot aus?} \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} \end{frame}
\begin{frame} [fragile] \begin{frame}[plain]
\frametitle{Graphische Darstellung von Daten} \huge{2. Fortgeschrittene Datenstrukturen I}
\framesubtitle{\"Ubung} \end{frame}
\begin{frame}
\frametitle{Fortgeschrittene Datenstrukturen I}
\framesubtitle{Cell Arrays}
\begin{enumerate} \begin{enumerate}
\item Nehmt euch einen beliebigen Datenplot vor und macht ihn \textbf{sch\"on}. \item Matrizen k\"onnen nur rechtwinklig sein.\pause
\item Die Abbildung soll f\"ur eine einspaltige Abbildung im \item Manchmal hat man aber unterschiedlich viele Datenpunkte, die
\textit{Journal of Neuroscience} geeignet sein dennoch logisch zusammengeh\"oren.\pause
(\url{http://www.jneurosci.org/site/misc/ifa_illustrations.xhtml}). \item Z.B. Wenn man Zeitpunkte von Neuronalen- oder Verhaltensereignissen hat.
\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} \end{enumerate}
\end{frame} \end{frame}
\begin{frame}[plain]
\huge{3. Spiketrain Analyse I}
\end{frame}
\begin{frame} \begin{frame}
\frametitle{Spiketrain Analyse I} \frametitle{Spiketrain Analyse I}
\framesubtitle{Rasterplot} \framesubtitle{Rasterplot}
@ -197,14 +213,65 @@
\begin{frame} \begin{frame}
\frametitle{Spiketrain Analyse I} \frametitle{Spiketrain Analyse I}
\framesubtitle{PSTH} \framesubtitle{Feuerrate \"uber die Zeit}
\textbf{P}eri- \textbf{S}timulus - \textbf{T}ime - \textbf{H}istogram \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} \begin{figure}
\centering \centering
\includegraphics[width=0.75\columnwidth]{images/psth} \includegraphics[width=0.75\columnwidth]{images/convolution}
\end{figure} \end{figure}
\end{frame} \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} \end{document}

View File

@ -52,7 +52,7 @@
Universit\"at T\"ubingen} Universit\"at T\"ubingen}
\institute[Wissenschaftliche Datenverarbeitung]{} \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}} %\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}}
\subject{Einf\"uhrung in wissenschaftliche Datenverarbeitung} \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];+ \item Definiere zwei Vektoren: \verb+x = [3 2 6 8];+ and \verb+y = [4; 1; 3; 5];+
\begin{enumerate} \begin{enumerate}
\item ... addiere 5 zu jedem Element von \verb+x+. \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 \item ... multipliziere jedes Element von \verb+x+ mit dem
entsprechenden Element in \verb+y+ und weise das Ergebnis der entsprechenden Element in \verb+y+ und weise das Ergebnis der
Variable \verb+z+ zu. Variable \verb+z+ zu.

View File

@ -156,7 +156,7 @@
\end{enumerate}\pause \end{enumerate}\pause
\item Alle werden in sogenannte m-files gespeichert (z.B. \textit{meinProgramm.m}). \item Alle werden in sogenannte m-files gespeichert (z.B. \textit{meinProgramm.m}).
\item K\"onnen dann von der Kommandozeile aufgerufen werden. \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. \item Programme k\"onnen andere Programme aufrufen.
\end{itemize} \end{itemize}
\end{frame} \end{frame}
@ -188,13 +188,13 @@
\frametitle{Skripte und Funktionen} \frametitle{Skripte und Funktionen}
\framesubtitle{\"Ubungen} \framesubtitle{\"Ubungen}
\begin{enumerate} \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 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 Speichert das Skript und f\"uhrt es von der Kommandozeile aus.
\item Erzeuge ein zweites Skript, das nun die Frequenz setzt und das \item Erzeuge ein zweites Skript, das nun die Frequenz setzt und das
erste aufruft. Benutzt eine \verb+for+ Schleife um folgende 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 Speichert und ruft dieses Skript \"uber die Kommandozeile auf.
\item Was ist geplottet, passt es zu den Erwartungen? \item Was ist geplottet, passt es zu den Erwartungen?
\end{enumerate} \end{enumerate}
@ -243,6 +243,25 @@ function y = plot_sinus(frequenz, amplitude)
\end{lstlisting} \end{lstlisting}
\end{frame} \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] \begin{frame}[fragile]
\frametitle{Skripte und Funktionen} \frametitle{Skripte und Funktionen}
\framesubtitle{Programmierstil} \framesubtitle{Programmierstil}
@ -303,7 +322,7 @@ function y = plot_sinus(frequenz, amplitude)
\begin{enumerate} \begin{enumerate}
\item Variablen werden klein geschrieben. Wenn n\"otig entweder im \item Variablen werden klein geschrieben. Wenn n\"otig entweder im
\textit{camelCase} oder mit Unterstrichen (z.B. \verb+spikeCount+ \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 Funktionen und Skripte mit ausdrucksstarken Namen (z.B. \verb+loadSpikeData+).
\item Kommentare sparsam. Eventuell um Abschnitte zu trennen. \item Kommentare sparsam. Eventuell um Abschnitte zu trennen.
\item Hilfetexte: Ein Problem; sie m\"ussen aktuell sein sonst sind \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 \item Schreibe eine Funktion \verb+plotSineWave+ die die Amplitude
des Sinus als Argument entgegennimmt. des Sinus als Argument entgegennimmt.
\item Erweitere die Funktion in der Weise, dass sie zus\"atzlich die \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 \item Erweitere \verb+plotSineWave+ so, dass sie eine Schar von
Sinuswellen unterschiedlicher Frequenz plottet. 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 Vektor \"ubergeben werden kann. Die Funktion soll alle m\"oglichen
Kombinationen darstellen. 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 \item F\"uge zwei weitere R\"uckgabeparameter hinzu, die f\"ur jede
Berechnung die Amplitude und Frequenz zur\"uckgeben. Berechnung die Amplitude und Frequenz zur\"uckgeben.
\end{enumerate} \end{enumerate}