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')
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);
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}
\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,28 +153,41 @@
\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{frame}[plain]
\huge{2. Fortgeschrittene Datenstrukturen I}
\end{frame}
\begin{frame}
\frametitle{Fortgeschrittene Datenstrukturen I}
\framesubtitle{Cell Arrays}
\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 :-)
\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}
\frametitle{Spiketrain Analyse I}
\framesubtitle{Rasterplot}
@ -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}

View File

@ -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.

View File

@ -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}