diff --git a/programming/lectures/Makefile b/programming/lectures/Makefile index dec2459..355432d 100644 --- a/programming/lectures/Makefile +++ b/programming/lectures/Makefile @@ -1,5 +1,5 @@ TEXFILES=$(wildcard *.tex) -TEXFILES=boolean_logical_indexing.tex control_structures.tex data_structures.tex plotting_spike_trains.tex programming_basics.tex scripts_functions.tex sta_stc.tex variables_datatypes.tex vectors_matrices.tex +TEXFILES=boolean_logical_indexing.tex control_structures.tex data_structures.tex plotting.tex programming_basics.tex scripts_functions.tex sta_stc.tex variables_datatypes.tex vectors_matrices.tex PDFFILES=$(TEXFILES:.tex=.pdf) diff --git a/programming/lectures/images/spike_detection.pdf b/programming/lectures/images/spike_detection.pdf new file mode 100644 index 0000000..8b682b0 Binary files /dev/null and b/programming/lectures/images/spike_detection.pdf differ diff --git a/programming/lectures/plotting_spike_trains.tex b/programming/lectures/plotting.tex similarity index 54% rename from programming/lectures/plotting_spike_trains.tex rename to programming/lectures/plotting.tex index 0926fbd..b2426bd 100644 --- a/programming/lectures/plotting_spike_trains.tex +++ b/programming/lectures/plotting.tex @@ -101,10 +101,9 @@ \begin{frame} \frametitle{Grundlagen der Programmierung} - \frametitle{Tagesmen\"u} + \frametitle{Inhalt} \begin{enumerate} \item Graphische Darstellung von Daten - \item Spiketrain Analyse \end{enumerate} \end{frame} @@ -356,288 +355,4 @@ saveas(fig, 'spike_detection.pdf', 'pdf') \end{enumerate} \end{frame} - -\begin{frame}[plain] -\huge{2. Spiketrain Analyse} -\end{frame} - - -\begin{frame} - \frametitle{Spiketrain Analyse} - \framesubtitle{Rasterplot} - \begin{figure} - \centering - \includegraphics[width=0.375\columnwidth]{images/rasterplot} - \end{figure} -\end{frame} - - -\begin{frame} - \frametitle{Spiketrain Analyse} - \framesubtitle{Rasterplot} - \"Ubung: - \begin{enumerate} - \item Ladet die Datei: \code{lifoustim.mat} aus dem - Ilias Ordner. - \item Der Datensatz enth\"alt die Zeiten von Aktionspotentialen. - \item Erzeugt einen sch\"onen Rasterplot der Zellantworten, speichert ihn. - \item Welche Information liefert er, welche Information ist schwer - abzulesen? - \end{enumerate} -\end{frame} - -\begin{frame} - \frametitle{Spiketrain Analyse} - \framesubtitle{Zeitabh\"angige Feuerrate, PSTH} - - Darstellung der Feurreate eines Neuron als Funktion der Zeit. Es - gibt verschiedene Methoden dieses \textbf{P}eri \textbf{S}timulus - \textbf{T}ime \textbf{H}istogram zu erstellen. - \begin{enumerate} - \item Auf Basis der \textit{instantanen} Feuerrate. - \item Auf Basis des Zeithistogramms. - \item Durch Faltung der Zellantwort mit einem Gauss Kern. - \end{enumerate} -\end{frame} - - -\begin{frame} - \frametitle{Spiketrain Analyse} - \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Instantane Feuerrate ---} - \Large{Berechnung des PSTHs durch die Instantane Feurerrate:} - \normalsize - \begin{enumerate} - \item Die Feuerrate kann aus dem Abstand zwischen zwei - aufeinanderfolgenden Aktionspotentialen - (\textbf{Interspikeinterval}) berechnet werden. \pause - \item Die \textbf{Instantane Feuerrate} wird aus dem Kehrwert des - Interspikeintervals berechnet. - \end{enumerate} -\end{frame} - - -\begin{frame} - \frametitle{Spiketrain Analyse} - \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Instantane Feuerrate ---} - \begin{figure} - \centering - \includegraphics[width=0.9\columnwidth]{images/instantaneous_rate} - \end{figure} -\end{frame} - - -\begin{frame} - \frametitle{Spiketrain Analyse} - \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Instantane Feuerrate ---} - Berechnung des PSTHs durch die Instantane Feurerrate: - \textbf{Vorteile:} - - \begin{enumerate} - \item Sehr einfach zu Berechnen. - \item Macht keine Annahmen \"uber ein Zeitraster, oder die Zeitskala - der neuronalen Verarbeitung. - \end{enumerate} - - \textbf{Nachteile:} - \begin{enumerate} - \item Die Feuerrate ist nie null, auch wenn f\"ur lange Zeit kein - Aktionspotential auftritt. - \item Verh\"alt sich im Fourrier Raum nicht sehr sch\"on. - \end{enumerate} -\end{frame} - - -\begin{frame} - \frametitle{Spiketrain Analyse} - \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Binning Methode ---} - \Large{Binning Methode:} - \normalsize - \begin{enumerate} - \item Die Zeitachse wird in gleich gro{\ss}e Abschnitte ``bins'' - unterteilt. - \item F\"ur jedes ``bin'' wird die Anzahl vorkommender - Aktionspotentiale gez\"ahlt. - \item Der Spike-count pro bin muss nun noch in die Rate umgerechnet - werden. - \end{enumerate} -\end{frame} - - -\begin{frame} - \frametitle{Spiketrain Analyse} - \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Binning Methode ---} - \begin{figure} - \includegraphics[width=0.9\columnwidth]{images/binned_rate} - \end{figure} -\end{frame} - - -\begin{frame} - \frametitle{Spiketrain Analyse} - \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Binning Methode ---} - - Berechnung des PSTHs durch die Binning Methode: - - \textbf{Vorteile:} - \begin{enumerate} - \item Sehr einfach zu Berechnen. - \item Zeigt nur da Aktivit\"at an, wo auch Aktionspotentiale - generiert wurden. - \end{enumerate} - - \textbf{Nachteile:} - \begin{enumerate} - \item Mach Annahmen \"uber die relevante Zeitskala neuronaler - Verarbeitung. - \item Die Zeitachse wird diskretisiert. - \item Verh\"alt sich im Fourrier Raum nicht sehr sch\"on. - \end{enumerate} -\end{frame} - - -\begin{frame}[fragile] - \frametitle{Spiketrain Analyse} - \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Faltungsmethode ---} - \Large{Faltung mit einem Gauss Kern:} - \normalsize - \[r_{est}(t) = \int_{-\infty}^{\infty}d\tau \omega(\tau)\rho(t-\tau) \] - - wobei $\omega(\tau)$ der Gauss Kern und $\rho(t)$ die Antwortfunktion ist. - - Gl\"ucklicherweise m\"ussen wir das nicht selbst implementieren... -\end{frame} - - -\begin{frame}[fragile] - \frametitle{Spiketrain Analyse} - \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Faltungsmethode ---} - \large Algortihmus: - \normalsize - \begin{enumerate} - \item Die neuronalen Antworten werden ``bin\"ar'' ausgedr\"uckt. - \item Ein Filterkern wird berechnet, der das Integral 1 hat. - \item Mithilfe der Faltung (\code{conv} Funktion) wird jede 1 durch - den ``Kern'' ersetzt.\\ - \code{conv(x, kern, 'mode', 'same')} - \end{enumerate} -\end{frame} - - -\begin{frame} - \frametitle{Spiketrain Analyse} - \framesubtitle{Feurerrate als Funktion der Zeit --- Faltungsmethode ---} - \begin{figure} - \includegraphics[width=0.9\columnwidth]{images/convolved_rate} - \end{figure} -\end{frame} - - -\begin{frame} - \frametitle{Spiketrain Analyse} - \framesubtitle{Feurerrate als Funktion der Zeit --- Faltungsmethode ---} - \textbf{Vorteile:} - \begin{enumerate} - \item Sehr ``nat\"urliche'' erscheinende Darstellung. - \item Sehr gutes Verhalten im Fourrier Raum. - \end{enumerate} - - \textbf{Nachteile:} - \begin{enumerate} - \item Relativ rechenintensiv. - \item Macht Annahmen \"uber die Zeitskalen neuronaler Verarbeitung. - \end{enumerate} -\end{frame} - -\begin{frame}[plain] - \huge{3. Analyse der Beziehung zwischen Stimulus und Antwort} -\end{frame} - - -\begin{frame}[fragile] - \frametitle{Spiketrain Analyse} - \framesubtitle{Spike-Triggered-Average} - \begin{itemize} - \item[] Die Antworten darzustellen ist gut und sch\"on, aber was sagt es uns?\pause - \item[] Idealerweise wollen wir die Antworten in Beziehung zum - hervorrufenden Stimulus setzen. - \item[] Eine Methode ist der sogenannte \textbf{Spike-Triggered-Average} (STA). - \end{itemize} -\end{frame} - - -\begin{frame}[fragile] - \frametitle{Spiketrain Analyse} - \framesubtitle{Spike-Triggered-Average} - - Der STA stellt den (mittleren) Stimulus dar, der zu einem - Aktionspotential gef\"uhrt hat: - - \begin{equation} - STA(\tau) = \frac{1}{\langle n \rangle} \left\langle \displaystyle\sum_{i=1}^{n}{s(t_i - \tau)} \right\rangle - \end{equation} - Wobei: $\tau$ ist eine bestimmte Zeit relativ zur Zeit eines - Aktionspotentials, $t_i$ ist der Zeitpunkt eines APs, $s(t)$ ist der - Stimulus.\\ - - Leider m\"ussen wir das selbst implementieren... -\end{frame} - - -\begin{frame}[fragile] - \frametitle{Spiketrain Analyse} - \framesubtitle{Spike-Triggered-Average} - \large{Algorithmus:} - \normalsize - \begin{enumerate} - \item Der \textbf{STA} ist der mittlere Stimulus, der zu einem Aktionspotential f\"uhrt. - \item F\"ur jeden Spike wird ein entsprechender Abschnitt um die Zeit des Spikes herausgeschnitten. - \item Die einzelen Stimulussegmente werden gemittelt. - \end{enumerate}\pause - \begin{figure} - \centering - \includegraphics[width=0.5\columnwidth]{images/sta} - \end{figure} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Spiketrain Analyse} - \framesubtitle{Spike-Triggered-Average} - \vspace{-1em} - \begin{figure} - \centering - \includegraphics[width=0.6\columnwidth]{images/sta} - \end{figure} - \pause - \vspace{-0.5em} - Welche Information liefert der \textbf{STA}? - \small - \begin{enumerate} - \item Gibt es eine Beziehung zwischen Stimulus und Antwort?\pause - \item Gibt es eine Verz\"ogerung zwischen Stimulus und Antwort? Wie - gro{\ss} ist diese?\pause - \item Wie weit h\"angt das Auftreten eines Aktionspotentials von der - Vergangenheit ab? \pause - \item Kann die Zelle in die Zukunft sehen? - \end{enumerate} -\end{frame} - -\end{document} - - - -\begin{frame} [fragile] - \frametitle{Spiketrain Analyse} - \framesubtitle{\"Ubung} - \begin{enumerate} - \item Berechnet die Feuerrate eines Neurons mit einer der drei Methoden. - \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 Ladet den Stimulus aus dem Ilias Ordner und benutzt die - \verb+subplot+ Funktion um den Stimulus zu der neuronalen - Aktivit\"at zu plotten. - \end{enumerate} -\end{frame} \ No newline at end of file +\end{document} \ No newline at end of file diff --git a/programming/code/firing_rates.py b/spike_trains/code/firing_rates.py similarity index 78% rename from programming/code/firing_rates.py rename to spike_trains/code/firing_rates.py index b38dac8..0f02e87 100644 --- a/programming/code/firing_rates.py +++ b/spike_trains/code/firing_rates.py @@ -62,7 +62,7 @@ def plot_isi_rate(spike_times, max_t=30, dt=1e-4): ax1.vlines(times[times < (50000*dt)], ymin=0, ymax=1, color="dodgerblue", lw=1.5) ax1.set_ylabel("skpikes", fontsize=12) set_axis_fontsize(ax1, 12) - + ax1.set_xlim([0, 5]) ax2.plot(time, rate, label="instantaneous rate, trial 1") ax2.set_ylabel("firing rate [Hz]", fontsize=12) ax2.legend(fontsize=12) @@ -191,8 +191,61 @@ def plot_conv_rate(spike_times, sigma=0.05, max_t=30, dt=1e-4): plt.close() +def plot_comparison(spike_times, bin_width, sigma, max_t=30., dt=1e-4): + times = np.squeeze(spike_times[0][0]) + time, conv_rate = get_convolved_rate(times, bin_width/np.sqrt(12.)) + time, inst_rate = get_instantaneous_rate(times) + time, binn_rate = get_binned_rate(times, bin_width) + + fig = plt.figure() + ax1 = fig.add_subplot(411) + ax2 = fig.add_subplot(412) + ax3 = fig.add_subplot(413) + ax4 = fig.add_subplot(414) + + ax1.vlines(times[times < (100000*dt)], ymin=0, ymax=1, color="dodgerblue", lw=1.5) + ax1.set_ylabel("spikes", fontsize=10) + ax1.set_xlim([1.5, 3.5]) + ax1.set_ylim([0, 1]) + ax1.set_yticks([0, 1]) + set_axis_fontsize(ax1, 10) + ax1.set_xticklabels([]) + + ax2.plot(time, inst_rate, label="instantaneous rate") + ax2.set_ylabel("firing rate [Hz]", fontsize=10) + ax2.legend(fontsize=10) + ax2.set_xlim([1.5, 3.5]) + ax2.set_ylim([0, 300]) + set_axis_fontsize(ax2, 10) + ax2.set_xticklabels([]) + + ax3.plot(time, binn_rate, label="binned rate") + ax3.set_ylabel("firing rate [Hz]", fontsize=10) + ax3.legend(fontsize=10) + ax3.set_xlim([1.5, 3.5]) + ax3.set_ylim([0, 300]) + set_axis_fontsize(ax3, 10) + ax3.set_xticklabels([]) + + ax4.plot(time, conv_rate, label="convolved rate") + ax4.set_xlabel("times [s]", fontsize=10) + ax4.set_ylabel("firing rate [Hz]", fontsize=10) + ax4.legend(fontsize=10) + ax4.set_xlim([1.5, 3.5]) + ax4.set_ylim([0, 300]) + set_axis_fontsize(ax4, 10) + + fig.set_size_inches(7.5, 5) + fig.subplots_adjust(left=0.1, bottom=0.125, top=0.95, right=0.95, ) + fig.set_facecolor("white") + fig.savefig("../lecture/images/psth_comparison.pdf") + plt.close() + + if __name__ == "__main__": spike_times = spio.loadmat('lifoustim.mat')["spikes"] - plot_isi_rate(spike_times) - plot_bin_rate(spike_times, 0.05) - plot_conv_rate(spike_times, 0.025) + # plot_isi_rate(spike_times) + # plot_bin_rate(spike_times, 0.05) + # plot_conv_rate(spike_times, 0.025) + plot_comparison(spike_times, 0.05, 0.025) + diff --git a/programming/exercises/plotting_psth.tex b/spike_trains/exercises/psth.tex similarity index 75% rename from programming/exercises/plotting_psth.tex rename to spike_trains/exercises/psth.tex index 8dcee53..8145a16 100644 --- a/programming/exercises/plotting_psth.tex +++ b/spike_trains/exercises/psth.tex @@ -37,17 +37,21 @@ \end{center} \begin{questions} - \question Graphische Darstellung der zeitabh\"angigen Antwort eines - Neurons. PSTH auf Basis der instantanen Feuerrate. Verwendet den Datensatz \code{} + \question Stellt die zeitabh\"angigen Feuerrate eines Neurons als + PSTH dar. Das PSTH soll auf Basis der instantanen Feuerrate (des + Interspikeintervals) berechnet werden. Verwendet den Datensatz + \code{lifoustim.mat}. Dieser enth\"at drei Variablen: 1. die + Spikezeiten, 2. den Stimulus und 3. die zeitliche Aufl\"osung. Die + Dauer eines Trials betr\"agt 30 Sekunden. \begin{parts} \part Schreibt eine Funktion, die einen Vektor mit Spikezeiten, die Dauer des Trials, und die zeitliche Aufl\"osung entgegennimmt - und die Zeitachse sowie die Feuerrate zur\"uckgiebt. + und die Zeitachse sowie die Feuerrate zur\"uckgibt. \part Benutzt diese Funktion in einem Skript und stellt das PSTH eines einzelnen Trials sowie den Mittelwert \"uber alle Trials dar. - \part Erweitert das Programm so, dass die Abbildung den Standards - z.B. vom \textit{Journal of Neuroscience} entspricht + \part Erweitert das Programm so, dass die Abbildung den Richtlinien + des \textit{Journal of Neuroscience} entspricht (Schriftgr\"o{\ss}e, Abbildungsgr\"o{\ss}e). \part Die Abbildung sollte als pdf gespeichert werden. \end{parts} @@ -62,13 +66,13 @@ Abbildungen sollten nat\"urlich ``publikationsreif'' sein und gespeichert werden. - \question Einige trials sind anders als die \"Ubrigen. Benutzt den - Rasterplot um sie zu finden. Speichert alle Abbildungen in - ``publikationsreifer'' Form. + \question Einige Trials sind anders als die \"Ubrigen. Benutzt den + Rasterplot um sie zu finden. Alle erstellten Abbildungen sollen in + ``publikationsreifer'' Form gespeichert werden. \begin{parts} \part Benutzt den Rasterplot um sie zu finden. \part Plottet die Verteilung der Spike counts. - \part Filtert all die trials heraus, deren spike count mehr als + \part Filtert all die Trials heraus, deren Spikecount mehr als $2\sigma$ vom Mittelwert abweicht. \part Plottet das PSTH vor und nach dem Filtern. \end{parts} diff --git a/spike_trains/lecture/Makefile b/spike_trains/lecture/Makefile new file mode 100644 index 0000000..96b7d0e --- /dev/null +++ b/spike_trains/lecture/Makefile @@ -0,0 +1,20 @@ +TEXFILES=$(wildcard *.tex) +TEXFILES=psth_sta.tex + +PDFFILES=$(TEXFILES:.tex=.pdf) + +pdf : $(PDFFILES) + +$(PDFFILES) : %.pdf : %.tex + pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true + +clean : + rm -f *~ $(TEXFILES:.tex=.aux) $(TEXFILES:.tex=.log) $(TEXFILES:.tex=.out) $(TEXFILES:.tex=.nav) $(TEXFILES:.tex=.snm) $(TEXFILES:.tex=.toc) $(TEXFILES:.tex=.vrb) + +cleanall : clean + rm -f $(PDFFILES) + +watch : + while true; do ! make -q pdf && make pdf; sleep 0.5; done + + diff --git a/spike_trains/lecture/beamercolorthemetuebingen.sty b/spike_trains/lecture/beamercolorthemetuebingen.sty new file mode 100644 index 0000000..c4a5da6 --- /dev/null +++ b/spike_trains/lecture/beamercolorthemetuebingen.sty @@ -0,0 +1,61 @@ +% Copyright 2007 by Till Tantau +% +% This file may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU Public License. +% +% See the file doc/licenses/LICENSE for more details. + +\usepackage{color} +\definecolor{karminrot}{RGB}{165,30,55} +\definecolor{gold}{RGB}{180,160,105} +\definecolor{anthrazit}{RGB}{50 ,65 ,75 } + +\mode + +\setbeamercolor*{normal text}{fg=anthrazit,bg=white} +\setbeamercolor*{alerted text}{fg=anthrazit} +\setbeamercolor*{example text}{fg=anthrazit} +\setbeamercolor*{structure}{fg=gold,bg=karminrot} + +\providecommand*{\beamer@bftext@only}{% + \relax + \ifmmode + \expandafter\beamer@bftext@warning + \else + \expandafter\bfseries + \fi +} +\providecommand*{\beamer@bftext@warning}{% + \ClassWarning{beamer} + {Cannot use bold for alerted text in math mode}% +} + +\setbeamerfont{alerted text}{series=\beamer@bftext@only} + +\setbeamercolor{palette primary}{fg=karminrot,bg=white} +\setbeamercolor{palette secondary}{fg=gold,bg=white} +\setbeamercolor{palette tertiary}{fg=anthrazit,bg=white} +\setbeamercolor{palette quaternary}{fg=black,bg=white} + +\setbeamercolor{sidebar}{bg=karminrot!100} + +\setbeamercolor{palette sidebar primary}{fg=karminrot} +\setbeamercolor{palette sidebar secondary}{fg=karminrot} +\setbeamercolor{palette sidebar tertiary}{fg=karminrot} +\setbeamercolor{palette sidebar quaternary}{fg=karminrot} + +\setbeamercolor{item projected}{fg=black,bg=black!20} + +\setbeamercolor*{block body}{} +\setbeamercolor*{block body alerted}{} +\setbeamercolor*{block body example}{} +\setbeamercolor*{block title}{parent=structure} +\setbeamercolor*{block title alerted}{parent=alerted text} +\setbeamercolor*{block title example}{parent=example text} + +\setbeamercolor*{titlelike}{parent=structure} + +\mode + diff --git a/programming/lectures/images/binned_rate.png b/spike_trains/lecture/images/binned_rate.png similarity index 100% rename from programming/lectures/images/binned_rate.png rename to spike_trains/lecture/images/binned_rate.png diff --git a/programming/lectures/images/convolved_rate.png b/spike_trains/lecture/images/convolved_rate.png similarity index 100% rename from programming/lectures/images/convolved_rate.png rename to spike_trains/lecture/images/convolved_rate.png diff --git a/programming/lectures/images/instantaneous_rate.png b/spike_trains/lecture/images/instantaneous_rate.png similarity index 100% rename from programming/lectures/images/instantaneous_rate.png rename to spike_trains/lecture/images/instantaneous_rate.png diff --git a/spike_trains/lecture/images/psth_comparison.pdf b/spike_trains/lecture/images/psth_comparison.pdf new file mode 100644 index 0000000..b9a5275 Binary files /dev/null and b/spike_trains/lecture/images/psth_comparison.pdf differ diff --git a/programming/lectures/images/rasterplot.png b/spike_trains/lecture/images/rasterplot.png similarity index 100% rename from programming/lectures/images/rasterplot.png rename to spike_trains/lecture/images/rasterplot.png diff --git a/programming/lectures/images/sta.pdf b/spike_trains/lecture/images/sta.pdf similarity index 100% rename from programming/lectures/images/sta.pdf rename to spike_trains/lecture/images/sta.pdf diff --git a/spike_trains/lecture/psth_sta-slides.tex b/spike_trains/lecture/psth_sta-slides.tex new file mode 100644 index 0000000..668716d --- /dev/null +++ b/spike_trains/lecture/psth_sta-slides.tex @@ -0,0 +1,389 @@ +\documentclass{beamer} +\usepackage{xcolor} +\usepackage{listings} +\usepackage{pgf} +%\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps,pgfshade} +%\usepackage{multimedia} + +\usepackage[english]{babel} +\usepackage{movie15} +\usepackage[latin1]{inputenc} +\usepackage{times} +\usepackage{amsmath} +\usepackage{bm} +\usepackage[T1]{fontenc} +\usepackage[scaled=.90]{helvet} +\usepackage{scalefnt} +\usepackage{tikz} +\usepackage{ textcomp } +\usepackage{soul} +\usepackage{hyperref} +\definecolor{lightblue}{rgb}{.7,.7,1.} +\definecolor{mygreen}{rgb}{0,1.,0} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\mode +{ + \usetheme{Singapore} + \setbeamercovered{opaque} + \usecolortheme{tuebingen} + \setbeamertemplate{navigation symbols}{} + \usefonttheme{default} + \useoutertheme{infolines} + % \useoutertheme{miniframes} +} + +\AtBeginSection[] +{ + \begin{frame} + \begin{center} + \Huge \insertsectionhead + \end{center} + % \frametitle{\insertsectionhead} + % \tableofcontents[currentsection,hideothersubsections] + \end{frame} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 + +\setbeamertemplate{blocks}[rounded][shadow=true] + +\title[]{Scientific Computing -- Grundlagen der Programmierung } +\author[]{Jan Grewe\\Abteilung f\"ur Neuroethologie\\ + Universit\"at T\"ubingen} + +\institute[Wissenschaftliche Datenverarbeitung]{} + \date{12.10.2015 - 06.11.2015} + %\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}} + +\subject{Einf\"uhrung in die wissenschaftliche Datenverarbeitung} +\vspace{1em} +\titlegraphic{ + \includegraphics[width=0.5\linewidth]{../../resources/UT_WBMW_Rot_RGB} +} +%%%%%%%%%% configuration for code +\lstset{ + basicstyle=\ttfamily, + numbers=left, + showstringspaces=false, + language=Matlab, + commentstyle=\itshape\color{darkgray}, + keywordstyle=\color{blue}, + stringstyle=\color{green}, + backgroundcolor=\color{blue!10}, + breaklines=true, + breakautoindent=true, + columns=flexible, + frame=single, + captionpos=b, + xleftmargin=1em, + xrightmargin=1em, + aboveskip=10pt + } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\mycite}[1]{ +\begin{flushright} +\tiny \color{black!80} #1 +\end{flushright} +} + +\newcommand{\code}[1]{\texttt{#1}} + +\input{../../latex/environments.tex} +\makeatother + +\begin{document} + +\begin{frame}[plain] + \frametitle{} + \vspace{-1cm} + \titlepage % erzeugt Titelseite +\end{frame} + +\begin{frame} + \frametitle{Spiketrain Analyse} + \frametitle{Inhalt} + \begin{enumerate} + \item Peri Stimulus Time Histogram + \item Spike-triggered average + \end{enumerate} +\end{frame} + + +\begin{frame}[plain] +\huge{1. Peri Stimulus Time Histogram, PSTH} +\end{frame} + + +\begin{frame} + \frametitle{Spiketrain Analyse} + \framesubtitle{Rasterplot} + \begin{figure} + \centering + \includegraphics[width=0.375\columnwidth]{images/rasterplot} + \end{figure} +\end{frame} + + +\begin{frame} + \frametitle{Spiketrain Analyse} + \framesubtitle{Rasterplot} + \"Ubung: + \begin{enumerate} + \item Ladet die Datei: \code{lifoustim.mat} aus dem + Ilias Ordner. + \item Der Datensatz enth\"alt die Zeiten von Aktionspotentialen. + \item Erzeugt einen sch\"onen Rasterplot der Zellantworten, speichert ihn. + \item Welche Information liefert er, welche Information ist schwer + abzulesen? + \end{enumerate} +\end{frame} + +\begin{frame} + \frametitle{Spiketrain Analyse} + \framesubtitle{Zeitabh\"angige Feuerrate, PSTH} + + Darstellung der Feurreate eines Neuron als Funktion der Zeit. Es + gibt verschiedene Methoden dieses \textbf{P}eri \textbf{S}timulus + \textbf{T}ime \textbf{H}istogram zu erstellen. + \begin{enumerate} + \item Auf Basis der \textit{instantanen} Feuerrate. + \item Auf Basis des Zeithistogramms. + \item Durch Faltung der Zellantwort mit einem Gauss Kern. + \end{enumerate} +\end{frame} + + +\begin{frame} + \frametitle{Spiketrain Analyse} + \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Instantane Feuerrate ---} + \Large{Berechnung des PSTHs durch die Instantane Feurerrate:} + \normalsize + \begin{enumerate} + \item Die Feuerrate kann aus dem Abstand zwischen zwei + aufeinanderfolgenden Aktionspotentialen + (\textbf{Interspikeinterval}) berechnet werden. \pause + \item Die \textbf{Instantane Feuerrate} wird aus dem Kehrwert des + Interspikeintervals berechnet. + \end{enumerate} +\end{frame} + + +\begin{frame} + \frametitle{Spiketrain Analyse} + \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Instantane Feuerrate ---} + \begin{figure} + \centering + \includegraphics[width=0.9\columnwidth]{images/instantaneous_rate} + \end{figure} +\end{frame} + + +\begin{frame} + \frametitle{Spiketrain Analyse} + \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Instantane Feuerrate ---} + Berechnung des PSTHs durch die Instantane Feurerrate: + \textbf{Vorteile:} + + \begin{enumerate} + \item Sehr einfach zu Berechnen. + \item Macht keine Annahmen \"uber ein Zeitraster, oder die Zeitskala + der neuronalen Verarbeitung. + \end{enumerate} + + \textbf{Nachteile:} + \begin{enumerate} + \item Die Feuerrate ist nie null, auch wenn f\"ur lange Zeit kein + Aktionspotential auftritt. + \item Verh\"alt sich im Fourrier Raum nicht sehr sch\"on. + \end{enumerate} +\end{frame} + + +\begin{frame} + \frametitle{Spiketrain Analyse} + \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Binning Methode ---} + \Large{Binning Methode:} + \normalsize + \begin{enumerate} + \item Die Zeitachse wird in gleich gro{\ss}e Abschnitte ``bins'' + unterteilt. + \item F\"ur jedes ``bin'' wird die Anzahl vorkommender + Aktionspotentiale gez\"ahlt. + \item Der Spike-count pro bin muss nun noch in die Rate umgerechnet + werden. + \end{enumerate} +\end{frame} + + +\begin{frame} + \frametitle{Spiketrain Analyse} + \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Binning Methode ---} + \begin{figure} + \includegraphics[width=0.9\columnwidth]{images/binned_rate} + \end{figure} +\end{frame} + + +\begin{frame} + \frametitle{Spiketrain Analyse} + \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Binning Methode ---} + + Berechnung des PSTHs durch die Binning Methode: + + \textbf{Vorteile:} + \begin{enumerate} + \item Sehr einfach zu Berechnen. + \item Zeigt nur da Aktivit\"at an, wo auch Aktionspotentiale + generiert wurden. + \end{enumerate} + + \textbf{Nachteile:} + \begin{enumerate} + \item Mach Annahmen \"uber die relevante Zeitskala neuronaler + Verarbeitung. + \item Die Zeitachse wird diskretisiert. + \item Verh\"alt sich im Fourrier Raum nicht sehr sch\"on. + \end{enumerate} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Spiketrain Analyse} + \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Faltungsmethode ---} + \Large{Faltung mit einem Gauss Kern:} + \normalsize + \[r_{est}(t) = \int_{-\infty}^{\infty}d\tau \omega(\tau)\rho(t-\tau) \] + + wobei $\omega(\tau)$ der Gauss Kern und $\rho(t)$ die Antwortfunktion ist. + + Gl\"ucklicherweise m\"ussen wir das nicht selbst implementieren... +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Spiketrain Analyse} + \framesubtitle{Zeitabh\"angige Feuerrate, PSTH --- Faltungsmethode ---} + \large Algortihmus: + \normalsize + \begin{enumerate} + \item Die neuronalen Antworten werden ``bin\"ar'' ausgedr\"uckt. + \item Ein Filterkern wird berechnet, der das Integral 1 hat. + \item Mithilfe der Faltung (\code{conv} Funktion) wird jede 1 durch + den ``Kern'' ersetzt.\\ + \code{conv(x, kern, 'mode', 'same')} + \end{enumerate} +\end{frame} + + +\begin{frame} + \frametitle{Spiketrain Analyse} + \framesubtitle{Feurerrate als Funktion der Zeit --- Faltungsmethode ---} + \begin{figure} + \includegraphics[width=0.9\columnwidth]{images/convolved_rate} + \end{figure} +\end{frame} + + +\begin{frame} + \frametitle{Spiketrain Analyse} + \framesubtitle{Feurerrate als Funktion der Zeit --- Faltungsmethode ---} + \textbf{Vorteile:} + \begin{enumerate} + \item Sehr ``nat\"urliche'' erscheinende Darstellung. + \item Sehr gutes Verhalten im Fourrier Raum. + \end{enumerate} + + \textbf{Nachteile:} + \begin{enumerate} + \item Relativ rechenintensiv. + \item Macht Annahmen \"uber die Zeitskalen neuronaler Verarbeitung. + \end{enumerate} +\end{frame} + +\begin{frame}[plain] + \huge{2. Analyse der Beziehung zwischen Stimulus und Antwort} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Spiketrain Analyse} + \framesubtitle{Spike-Triggered-Average} + \begin{itemize} + \item[] Die Antworten darzustellen ist gut und sch\"on, aber was sagt es uns?\pause + \item[] Idealerweise wollen wir die Antworten in Beziehung zum + hervorrufenden Stimulus setzen. + \item[] Eine Methode ist der sogenannte \textbf{Spike-Triggered-Average} (STA). + \end{itemize} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Spiketrain Analyse} + \framesubtitle{Spike-Triggered-Average} + + Der STA stellt den (mittleren) Stimulus dar, der zu einem + Aktionspotential gef\"uhrt hat: + + \begin{equation} + STA(\tau) = \frac{1}{\langle n \rangle} \left\langle \displaystyle\sum_{i=1}^{n}{s(t_i - \tau)} \right\rangle + \end{equation} + Wobei: $\tau$ ist eine bestimmte Zeit relativ zur Zeit eines + Aktionspotentials, $t_i$ ist der Zeitpunkt eines APs, $s(t)$ ist der + Stimulus.\\ + + Leider m\"ussen wir das selbst implementieren... +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Spiketrain Analyse} + \framesubtitle{Spike-Triggered-Average} + \large{Algorithmus:} + \normalsize + \begin{enumerate} + \item Der \textbf{STA} ist der mittlere Stimulus, der zu einem Aktionspotential f\"uhrt. + \item F\"ur jeden Spike wird ein entsprechender Abschnitt um die Zeit des Spikes herausgeschnitten. + \item Die einzelen Stimulussegmente werden gemittelt. + \end{enumerate}\pause + \begin{figure} + \centering + \includegraphics[width=0.5\columnwidth]{images/sta} + \end{figure} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Spiketrain Analyse} + \framesubtitle{Spike-Triggered-Average} + \vspace{-1em} + \begin{figure} + \centering + \includegraphics[width=0.6\columnwidth]{images/sta} + \end{figure} + \pause + \vspace{-0.5em} + Welche Information liefert der \textbf{STA}? + \small + \begin{enumerate} + \item Gibt es eine Beziehung zwischen Stimulus und Antwort?\pause + \item Gibt es eine Verz\"ogerung zwischen Stimulus und Antwort? Wie + gro{\ss} ist diese?\pause + \item Wie weit h\"angt das Auftreten eines Aktionspotentials von der + Vergangenheit ab? \pause + \item Kann die Zelle in die Zukunft sehen? + \end{enumerate} +\end{frame} + +\end{document} + + +\begin {frame} + \framesubtitle{Spiketrain Analyse} + \framesubtitle{Weitere Themen} + \begin{enumerate} + \item Tuningkurven. + \item Stimulusrekonstruktion mittels STA. + \item Kreuzkorrelation. + \item Fourier Analyse, Transferfunktion, Kohärenz. + \item Reverse Rekonstruktion. + \end{enumerate} +\end{frame} \ No newline at end of file diff --git a/spike_trains/lecture/psth_sta.tex b/spike_trains/lecture/psth_sta.tex new file mode 100644 index 0000000..57ea7a3 --- /dev/null +++ b/spike_trains/lecture/psth_sta.tex @@ -0,0 +1,47 @@ +\chapter{Spiketrainanalyse} + +Die zeitliche Abfolge von Aktionspotentialen, die ein Neuron generiert +enth\"alt die Information \"uber den Stimulus, die das Neuron +codiert. Aus der Analyse dieser Aktionspotentialfolgen oder, +kompakter, Spiketrains k\"onnen wir herausfinden welche Aspekte des +Stimulus codiert wird und somit nachfolgenden Verarbeitungsschritten +zur Verf\"ugung steht. + +Im elektrophysiologischen Experiment werden h\"aufig nur die +Zeitpunkte registriert an denen Aktionspotentiale, Spikes, +auftraten. Die Neuronale Aktivit\"at wird mitunter als Punktprozess +aufgefasst. Erstaunlicherweise lassen sich die Spiketrains mancher +kortikaler Neurone sehr gut durch ratenmodulierte Poissonprozesse +modellieren. + +Die Analyse von Spiketrains beinhaltet demnach einige der Methoden, +die auch f\"r die Beschreibung von Punktprozessen angewandt +werden. Dar\"uber hinaus wird versucht die Beziehung zwischen der +zeitabh\"aengigen neuronalen Antwort und dem zugrundeliegenden +Stimulus zu analysieren. + +\section{Darstellung der zeitabh\"angigen Feuerrate} + +Eine klassische Darstellung zeitabh\"angiger neuronaler Aktivit\"at +ist das sog. Peri Stimulus Zeithistogramm (peri stimulus time +histogram, PSTH). Es wird der zeitliche Verlauf der Feuerrate $r(t)$ +dargestellt. Die Einheit der Feuerrate ist Hertz, das heisst, die +Anzahl Aktionspotentiale pro Sekunde. Dabei gibt es verschiedene +Methoden diese zu bestimmen. Drei solcher Methoden sind in Abbildung +\ref{psthfig} dargestellt. + +\begin{figure} + \includegraphics[width=\columnwidth]{images/psth_comparison} + \caption{}\label{psthfig} +\end{figure} + + + +\section{Spike triggered Average} + +Der Spike triggered average (STA) ist der mittlere Stimulus, der zu +einem Aktionspotential in der neuronalen Antwort f\"uhrt. + +\begin{equation} + STA(\tau) = \frac{1}{\langle n \rangle} \left\langle \displaystyle\sum_{i=1}^{n}{s(t_i - \tau)} \right\rangle +\end{equation} diff --git a/spike_trains/lecture/spike_trains-chapter.tex b/spike_trains/lecture/spike_trains-chapter.tex new file mode 100644 index 0000000..88ce960 --- /dev/null +++ b/spike_trains/lecture/spike_trains-chapter.tex @@ -0,0 +1,226 @@ +\documentclass[12pt]{report} + +%%%%% title %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\title{\tr{Introduction to Scientific Computing}{Einf\"uhrung in die wissenschaftliche Datenverarbeitung}} +\author{Jan Benda\\Abteilung Neuroethologie\\[2ex]\includegraphics[width=0.3\textwidth]{UT_WBMW_Rot_RGB}} +\date{WS 15/16} + +%%%% language %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \newcommand{\tr}[2]{#1} % en +% \usepackage[english]{babel} +\newcommand{\tr}[2]{#2} % de +\usepackage[german]{babel} + +%%%%% packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage{pslatex} % nice font for pdf file +\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref} + +%%%% layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage[left=25mm,right=25mm,top=20mm,bottom=30mm]{geometry} +\setcounter{tocdepth}{1} + +%%%%% section style %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage[sf,bf,it,big,clearempty]{titlesec} +\setcounter{secnumdepth}{1} + + +%%%%% units %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage[mediumspace,mediumqspace,Gray]{SIunits} % \ohm, \micro + + +%%%%% figures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage{graphicx} +\usepackage{xcolor} +\pagecolor{white} + +\newcommand{\ruler}{\par\noindent\setlength{\unitlength}{1mm}\begin{picture}(0,6)% + \put(0,4){\line(1,0){170}}% + \multiput(0,2)(10,0){18}{\line(0,1){4}}% + \multiput(0,3)(1,0){170}{\line(0,1){2}}% + \put(0,0){\makebox(0,0){{\tiny 0}}}% + \put(10,0){\makebox(0,0){{\tiny 1}}}% + \put(20,0){\makebox(0,0){{\tiny 2}}}% + \put(30,0){\makebox(0,0){{\tiny 3}}}% + \put(40,0){\makebox(0,0){{\tiny 4}}}% + \put(50,0){\makebox(0,0){{\tiny 5}}}% + \put(60,0){\makebox(0,0){{\tiny 6}}}% + \put(70,0){\makebox(0,0){{\tiny 7}}}% + \put(80,0){\makebox(0,0){{\tiny 8}}}% + \put(90,0){\makebox(0,0){{\tiny 9}}}% + \put(100,0){\makebox(0,0){{\tiny 10}}}% + \put(110,0){\makebox(0,0){{\tiny 11}}}% + \put(120,0){\makebox(0,0){{\tiny 12}}}% + \put(130,0){\makebox(0,0){{\tiny 13}}}% + \put(140,0){\makebox(0,0){{\tiny 14}}}% + \put(150,0){\makebox(0,0){{\tiny 15}}}% + \put(160,0){\makebox(0,0){{\tiny 16}}}% + \put(170,0){\makebox(0,0){{\tiny 17}}}% + \end{picture}\par} + +% figures: +\setlength{\fboxsep}{0pt} +\newcommand{\texpicture}[1]{{\sffamily\footnotesize\input{#1.tex}}} +%\newcommand{\texpicture}[1]{\fbox{\sffamily\footnotesize\input{#1.tex}}} +%\newcommand{\texpicture}[1]{\setlength{\fboxsep}{2mm}\fbox{#1}} +%\newcommand{\texpicture}[1]{} +\newcommand{\figlabel}[1]{\textsf{\textbf{\large \uppercase{#1}}}} + +% maximum number of floats: +\setcounter{topnumber}{2} +\setcounter{bottomnumber}{0} +\setcounter{totalnumber}{2} + +% float placement fractions: +\renewcommand{\textfraction}{0.2} +\renewcommand{\topfraction}{0.8} +\renewcommand{\bottomfraction}{0.0} +\renewcommand{\floatpagefraction}{0.5} + +% spacing for floats: +\setlength{\floatsep}{12pt plus 2pt minus 2pt} +\setlength{\textfloatsep}{20pt plus 4pt minus 2pt} +\setlength{\intextsep}{12pt plus 2pt minus 2pt} + +% spacing for a floating page: +\makeatletter + \setlength{\@fptop}{0pt} + \setlength{\@fpsep}{8pt plus 2.0fil} + \setlength{\@fpbot}{0pt plus 1.0fil} +\makeatother + +% rules for floats: +\newcommand{\topfigrule}{\vspace*{10pt}{\hrule height0.4pt}\vspace*{-10.4pt}} +\newcommand{\bottomfigrule}{\vspace*{-10.4pt}{\hrule height0.4pt}\vspace*{10pt}} + +% captions: +\usepackage[format=plain,singlelinecheck=off,labelfont=bf,font={small,sf}]{caption} + +% put caption on separate float: +\newcommand{\breakfloat}{\end{figure}\begin{figure}[t]} + +% references to panels of a figure within the caption: +\newcommand{\figitem}[1]{\textsf{\bfseries\uppercase{#1}}} +% references to figures: +\newcommand{\panel}[1]{\textsf{\uppercase{#1}}} +\newcommand{\fref}[1]{\textup{\ref{#1}}} +\newcommand{\subfref}[2]{\textup{\ref{#1}}\,\panel{#2}} +% references to figures in normal text: +\newcommand{\fig}{Fig.} +\newcommand{\Fig}{Figure} +\newcommand{\figs}{Figs.} +\newcommand{\Figs}{Figures} +\newcommand{\figref}[1]{\fig~\fref{#1}} +\newcommand{\Figref}[1]{\Fig~\fref{#1}} +\newcommand{\figsref}[1]{\figs~\fref{#1}} +\newcommand{\Figsref}[1]{\Figs~\fref{#1}} +\newcommand{\subfigref}[2]{\fig~\subfref{#1}{#2}} +\newcommand{\Subfigref}[2]{\Fig~\subfref{#1}{#2}} +\newcommand{\subfigsref}[2]{\figs~\subfref{#1}{#2}} +\newcommand{\Subfigsref}[2]{\Figs~\subfref{#1}{#2}} +% references to figures within bracketed text: +\newcommand{\figb}{Fig.} +\newcommand{\figsb}{Figs.} +\newcommand{\figrefb}[1]{\figb~\fref{#1}} +\newcommand{\figsrefb}[1]{\figsb~\fref{#1}} +\newcommand{\subfigrefb}[2]{\figb~\subfref{#1}{#2}} +\newcommand{\subfigsrefb}[2]{\figsb~\subfref{#1}{#2}} + +% references to tables: +\newcommand{\tref}[1]{\textup{\ref{#1}}} +% references to tables in normal text: +\newcommand{\tab}{Tab.} +\newcommand{\Tab}{Table} +\newcommand{\tabs}{Tabs.} +\newcommand{\Tabs}{Tables} +\newcommand{\tabref}[1]{\tab~\tref{#1}} +\newcommand{\Tabref}[1]{\Tab~\tref{#1}} +\newcommand{\tabsref}[1]{\tabs~\tref{#1}} +\newcommand{\Tabsref}[1]{\Tabs~\tref{#1}} +% references to tables within bracketed text: +\newcommand{\tabb}{Tab.} +\newcommand{\tabsb}{Tab.} +\newcommand{\tabrefb}[1]{\tabb~\tref{#1}} +\newcommand{\tabsrefb}[1]{\tabsb~\tref{#1}} + + +%%%%% equation references %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%\newcommand{\eqref}[1]{(\ref{#1})} +\newcommand{\eqn}{\tr{Eq}{Gl}.} +\newcommand{\Eqn}{\tr{Eq}{Gl}.} +\newcommand{\eqns}{\tr{Eqs}{Gln}.} +\newcommand{\Eqns}{\tr{Eqs}{Gln}.} +\newcommand{\eqnref}[1]{\eqn~\eqref{#1}} +\newcommand{\Eqnref}[1]{\Eqn~\eqref{#1}} +\newcommand{\eqnsref}[1]{\eqns~\eqref{#1}} +\newcommand{\Eqnsref}[1]{\Eqns~\eqref{#1}} + + +%%%%% listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage{listings} +\lstset{ + inputpath=../code, + basicstyle=\ttfamily\footnotesize, + numbers=left, + showstringspaces=false, + language=Matlab, + commentstyle=\itshape\color{darkgray}, + keywordstyle=\color{blue}, + stringstyle=\color{green}, + backgroundcolor=\color{blue!10}, + breaklines=true, + breakautoindent=true, + columns=flexible, + frame=single, + caption={\protect\filename@parse{\lstname}\protect\filename@base}, + captionpos=t, + xleftmargin=1em, + xrightmargin=1em, + aboveskip=10pt +} + +%%%%% math stuff: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage{amsmath} +\usepackage{bm} +\usepackage{dsfont} +\newcommand{\naZ}{\mathds{N}} +\newcommand{\gaZ}{\mathds{Z}} +\newcommand{\raZ}{\mathds{Q}} +\newcommand{\reZ}{\mathds{R}} +\newcommand{\reZp}{\mathds{R^+}} +\newcommand{\reZpN}{\mathds{R^+_0}} +\newcommand{\koZ}{\mathds{C}} + + +%%%%% structure: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage{ifthen} + +\newcommand{\code}[1]{\texttt{#1}} + +\newcommand{\source}[1]{ + \begin{flushright} + \color{gray}\scriptsize \url{#1} + \end{flushright} +} + +\newenvironment{definition}[1][]{\medskip\noindent\textbf{Definition}\ifthenelse{\equal{#1}{}}{}{ #1}:\newline}% + {\medskip} + +\newcounter{maxexercise} +\setcounter{maxexercise}{9} % show listings up to exercise maxexercise +\newcounter{theexercise} +\setcounter{theexercise}{1} +\newenvironment{exercise}[1][]{\medskip\noindent\textbf{\tr{Exercise}{\"Ubung} + \arabic{theexercise}:}\newline \newcommand{\exercisesource}{#1}}% + {\ifthenelse{\equal{\exercisesource}{}}{}{\ifthenelse{\value{theexercise}>\value{maxexercise}}{}{\medskip\lstinputlisting{\exercisesource}}}\medskip\stepcounter{theexercise}} + +\graphicspath{{figures/}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{document} + +\include{psth_sta} + +\end{document} +