script work, further topics slides

This commit is contained in:
Jan Grewe 2015-11-04 18:28:08 +01:00
parent 750336467f
commit be13ea7610
27 changed files with 1633 additions and 2 deletions

File diff suppressed because one or more lines are too long

View File

@ -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<presentation>
\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
<all>

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

View File

@ -0,0 +1,228 @@
\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{topics}
\end{document}
\end{document}

View File

@ -0,0 +1,656 @@
\documentclass{beamer}
%%%%% title %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title[]{Scientific Computing --- Reproduzierbarkeit}
\author[]{Jan Grewe}
\institute[]{Neuroethology}
\date[]{WS 14/15}
\titlegraphic{\includegraphics[width=0.3\textwidth]{UT_WBMW_Rot_RGB}}
%%%%% beamer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\mode<presentation>
{
\usetheme{Singapore}
\setbeamercovered{opaque}
\usecolortheme{tuebingen}
\setbeamertemplate{navigation symbols}{}
\usefonttheme{default}
\useoutertheme{infolines}
% \useoutertheme{miniframes}
}
%\AtBeginSection[]
%{
% \begin{frame}<beamer>
% \begin{center}
% \Huge \insertsectionhead
% \end{center}
% \end{frame}
%}
\setbeamertemplate{blocks}[rounded][shadow=true]
\setcounter{tocdepth}{1}
%%%%% packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{bm}
\usepackage{pslatex} % nice font for pdf file
%\usepackage{multimedia}
\usepackage{wasysym}
\usepackage{tikz}
\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}}
%%%% graphics %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{graphicx}
\newcommand{\texpicture}[1]{{\sffamily\small\input{#1.tex}}}
%%%%% listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{listings}
\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
}
\graphicspath{{figures/}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{frame}[plain]
\frametitle{}
\vspace{-1cm}
\titlepage % erzeugt Titelseite
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Content}
\tableofcontents
\end{frame}
\subsection{Reproduzierbarkeit von wisschenschaftlichen Ergebnissen}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Problem --- Fehlende Informationen}
\only<1>{
\begin{figure}
\includegraphics[width=0.9\columnwidth]{./images/rung_brazma_2013}
\end{figure}
}
\only<2>{
\begin{tikzpicture}
\node[anchor=south west,inner sep=0] (image) at (0,0) {
\includegraphics[width=0.8\columnwidth]{images/rung_brazma_2013_grey}};
\node[align=center,red,font={\normalsize\bfseries}] at (image.center)
{``The authors replicated two studies in principle\\ and six
partially, whereas ten were not reproduced,\\ ...\\ The main
reason for the lack of reproducibility \\ was the
unavailability of all relevant data or metadata:''};
\end{tikzpicture}
}
\only<3>{
\begin{figure}
\includegraphics[width=0.8\columnwidth]{./images/hines_etal_2014}
\end{figure}
}
\only<4> {
\begin{tikzpicture}
\node[anchor=south west,inner sep=0] (image) at (0,0) {
\includegraphics[width=0.8\columnwidth]{images/hines_etal_2014_grey}};
\node[align=center,red,font={\normalsize\bfseries}] at
(image.center) {``... our two laboratories quite reproducibly
were unable\\ to replicate each others
fluorescence-activated cell sorting \\ (FACS) profiles of
primary breast cells.``};
\end{tikzpicture}
}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Problem --- Gro{\ss}er Aufwand}
\only<1>{
\begin{figure}
\includegraphics[width=0.9\columnwidth]{./images/savage_vickers_2009_title}
\end{figure}
}
\only<2> {
\begin{figure}
\includegraphics[width=0.9\columnwidth]{./images/savage_vickers_2009}\\
\tiny{Savage and Vickers, 2009, PLoSOne}
\end{figure}
}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Auch auf im Labor --- Das ``Dead\footnote[frame]{Im Sinne von ''nicht mehr im Labor''} PhD - student'' Problem}
\begin{columns}
\begin{column}{2cm}
\begin{figure}
\includegraphics[width=0.9\columnwidth]{./images/project_start}\\
\end{figure}
\end{column} \pause
\begin{column}{4cm}
\begin{figure}
\includegraphics[width=0.9\columnwidth]{./images/project_middle}\\
\end{figure}
\end{column}\pause
\begin{column}{5cm}
\begin{figure}
\includegraphics[width=0.9\columnwidth]{./images/project_end}\\
\end{figure}
\end{column}
\end{columns}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Ist eine Herausforderung}
\begin{itemize}
\item Auf \textbf{lokaler} wie auch \textbf{globaler} Ebene.
\item Fehlende Annotation von Daten.
\item Information is h\"aufig weit verteilt (Laborbuch,
Protokollbl\"atter, Programmcode, ...).
\item Meist in nicht-maschinenlesbarer Form.
\item Manuelle Datenannotation ist ein gro{\ss}er Aufwand.
\item Implizites Wissen (Labortaditionen, Standardprotokolle) sind
nicht explizit verf\"ugbar.\pause \vspace{1em}
\item Ist nicht nur ein Problem in den Neurowissenschaften.\pause
\item Ist nicht nur ein Problem einer anderen Person sondern
etwas, was einen sehr schnell pers\"onlich in Schwierigkeiten
bringen kann.
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{DFG: ``Gute wissenschaftliche Praxis''}
\begin{itemize}
\item Daten, auf denen Publikationen basieren m\"ussen f\"ur den
Zeitlraum von 10 Jahren archiviert und Verf\"ugbar gehalten
werden.
\item Auf Verlangen m\"ussen die Daten herausgegeben werden.
\item Daten m\"ussen verst\"andlich annotiert sein.
\item \url{http://www.dfg.de/foerderung/grundlagen_rahmenbedingungen/gwp/}
\end{itemize}
\end{frame}
\section{Annotationen}
\begin{frame}[plain]
\huge{1. Annotation von Daten und Code}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Annotation}
Probleme, die jeder kennt (oder kennenlernen wird):
\begin{enumerate}
\item Wie habe ich die Analyse nochmal gestartet?
\item Welche Parameter hatte ich f\"ur den Fit benutzt?\pause
\end{enumerate}
L\"osungsans\"atze:
\begin{enumerate}
\item Annotation der Ergebnisse. Zu jeder Abbildung/Analyse eine
Datei, die beschreibt, wie sie erstellt wurde.
\item Kommentare im Code.
\item Automatisches sammeln von Metadaten z.B. in Matlab Strukturen.\pause
\item \textbf{Provenance Tracking}
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Automatische Annotation}
Wenn man sich nicht auf ein gro{\ss}es Provenance Tracking System
einlassen will, z.B. weil es nicht der Labortradition entspricht,
dann stellt sicher, dass\footnote[frame]{Auch f\"ur euch selbst!}:
\begin{itemize}
\item Annotationen ``bei'' den Daten, bzw. den Resultaten gefunden
werden kann.
\item Annotationen lesbar sind!
\item Der Code lesbar ist!
\item Die Daten und Resultate in nachvollziehbarer und einheitlicher
Form organisiert sind.
\item Klar ist, welche Version der Analyse zu den Resultaten
z.B. der Masterarbeit gef\"uhrt hat.
\end{itemize}
\end{frame}
\section{Versionskontrolle}
\begin{frame}[plain]
\huge{2. Versionskontrolle}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\frametitle{Versionskontrolle}
Jeder kennt es:
\begin{enumerate}
\item Ich versuche das gleiche Programm nach ein paar Tagen wieder
auszuf\"uhren...\pause
\item Verdammt, ... eine Fehlermeldung, die vorher nicht da war (glaube ich).
\item Wann habe ich was an dem code ge\"andert?!?\pause
\end{enumerate}
\vspace{0.5cm}
\Large{L\"osung: \textbf{Versionskontrolle}}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Versionskontrolle}
Es gibt verschiedene Systeme, die einen im Hintergrund
unterst\"utzen \"Anderungen zu verfolgen.
\begin{enumerate}
\item Subversion.
\item Mercurial.
\item Git.
\item ... und viele andere.\pause
\end{enumerate}
Hier als Beispiel \textbf{Git}!
\url{http://www.git-scm.git}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Versionskontrolle --- Git ---}
\begin{itemize}
\item Aktuell das beliebteste VCS.
\item Ist open-source!
\item F\"ur alle Platformen verf\"ugbar.
\item Sehr gute Unterst\"utzung durch die Community.
\item Viele Web-Services, die auf Git basieren.
\item Viele Entwicklungsumgebungen (auch Matlab ab 2015b)
unterst\"utzen Versionskontrolle.
\end{itemize}
\begin{columns}
\begin{column}{5cm}
\begin{figure}
\includegraphics[width=0.6\columnwidth]{images/git_logo}
\end{figure}
\end{column}
\begin{column}{5cm}
\begin{figure}
\includegraphics[width=0.5\columnwidth]{images/github_logo}
\end{figure}
\end{column}
\end{columns}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Versionskontrolle --- Git ---}
Vereinfacht die Zusammenarbeit:
\begin{figure}
\includegraphics[width=0.45\columnwidth]{images/git_pro_distributed}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Versionskontrolle --- Git ---}
Aber auch nur auf dem eigenen Rechner
\begin{figure}
\includegraphics[width=0.5\columnwidth]{images/git_pro_local}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Versionskontrolle --- Git ---}
Typischer Arbeitsablauf --- lokales Repository:
\only<1-2> {
\begin{enumerate}
\item \"Anderungen an einer oder mehreren Dateien.
\item Bekanntgabe der \"Anderung im VCS (\textit{commit}).
\item Unter Umst\"anden Synchronisation mit dem Repository auf einem
Server (\textit{pull} und \textit{push}).
\end{enumerate}
}
\only<1> {
\begin{figure}
\includegraphics[width=0.75\columnwidth]{images/git_pro_lifecycle}
\end{figure}
}
\only<2> {
\begin{figure}
\includegraphics[width=0.75\columnwidth]{images/pro_git_commits}
\end{figure}
}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Versionskontrolle --- Git ---}
Vorteile von Versionskontrolle:
\begin{enumerate}
\item Nachverfolgung von \"Anderungen. Wer hat was gemacht und wann?
\item Ver\"anderungen ungeschehen machen.
\item Jeder Zustand hat eine UUID, die ihn eindeutig identifizieren
(weltweit f\"ur alle Zeit).
\item Es gibt Sicherheit! Wenn ich etwas kaputt mache, dann kann ich
es wiederherstellen.
\item Meist m\"uhelose Synchronisation mit anderen Rechnern oder
Servern.
\item Wenn mit einem Server synchronisiert, dann ist das Backup eingebaut.
\item Nicht nur f\"ur Programmcode sondern auch f\"ur Textdateien
(Bachelor-, Master-, Doktorarbeiten!!)
\end{enumerate}\pause
Mehr Information im Web (kostenloses Buch:
\url{www.git-scm.com/book}. Oder fragt uns, wenn ihr vor dem Problem
steht.
\end{frame}
\begin{frame}
\frametitle{Reproduzierbearkeit wissenschaftlicher Daten}
\framesubtitle{Versionskontrolle --- Git ---}
Wir verwalten die Materialien f\"ur diesen Kurs in einem Git Repository.
\begin{figure}
\includegraphics[width=0.9\columnwidth]{images/course_git}
\end{figure}
\end{frame}
\section{Publikation von Daten und Code}
\begin{frame}[plain]
\huge{3. Publikation von Daten und Code}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Publikation von Daten und Programmcode}
\begin{itemize}
\item Es gibt mehr und mehr Bestrebungen Daten und Code zu teilen.
\item Mehrere Gr\"unde daf\"ur:
\begin{enumerate}
\item Zusammenarbeit von Experimentatoren und Theoretikern.
\item Gew\"ahrleistung von Datenverf\"gbarkeit.
\item Reproduzierbarkeit von Ergebnissen.
\item Experimentelle Daten (z.B. in vivo Elektrophysiology Daten
von Affen etc.) werden zunehmend wertvoller, weil die
Experimente politisch nicht mehr opportun sind.
\item Forderung von Geldgebern und Journalen.
\end{enumerate}
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Publikation von Daten und Programmcode}
Es gibt verschiedene Platformen, die Data Sharing anbieten
zum Beispiel.
\begin{enumerate}
\item \url{Incf.org}
\item \url{www.crcns.org}
\item \url{www.g-node.org}\pause
\end{enumerate}
Sie alle kranken daran, dass es keine Standards gibt, in welcher
From Daten und Metadaten abgelegt werden.
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Publikation von Daten und Programmcode}
Daten zu publizieren ist ein Problem. Zum einen sind die Datenmengen
h\"aufig nicht unerheblich, zum anderen gibt es rechtliche Bedenken?
\begin{enumerate}
\item Wem geh\"oren ``meine'' Daten eigentlich?\\ \pause
Dem Institut oder sogar dem Drittmittelgeber
\item Wer darf mit meinen Daten was machen?\\
Hierf\"ur gibt es verschiedene Lizenzmodelle. Generell kann man
festlegen, dass Daten nur nach Absprache und/oder unter Zitation
des Urhebers benutzt werden d\"urfen.
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Publikation von Daten und Programmcode}
Warum sollte ich meinen code ver\"offentlichen?
\begin{itemize}
\item Es geht um Wissenschaft!
\item Sie muss reproduzierbar sein, dass hei{\ss}t, dass andere in
der Lage sein m\"ussen Deine Ergebnisse nachzuvollziehen und zu
\"uberpr\"ufen.
\end{itemize}
Es sollte eher eine Verpflichtung sein als eine Option.\pause
\vspace{1em}
Wenn man seinen Code in einem GitHub Repository hat, dann ist es
m\"oglich ihn zu archivieren und eine zitierbare DOI zu
erhalten\footnote[frame]{\url{https://guides.github.com/activities/citable-code/}}.
\end{frame}
\subsection{Unit Tests}
\begin{frame}[plain]
\huge{4. Unit Tests}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Unit Tests}
\begin{itemize}
\item[] Woher weiss ich eigentlich, dass mein Code das tut, was er soll?
\vspace{0.5cm}
\item[] Wie stelle ich sicher, dass er auch nach \"Anderung noch all
das richtig macht, was er vorher tat?
\vspace{0.5cm}
\item[] Wie kann ich meinen code jemandem weitergeben ohne ein
schlechtes Gewissen zu haben?
\vspace{0.5cm}
\end{itemize}
\pause
\large{Unit tests!}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Unit Tests}
\begin{itemize}
\item Unit tests sind kleine Programme, die testen, ob sich eine
Funktion oder ein Programm so verh\"alt, wie es gedacht ist.
\item Normalerweise entwickelt man die Tests parallel zur
eigentlichen Implementierung.
\end{itemize}
\textbf{Vorteile:}
\begin{itemize}
\item Findet Probleme sehr fr\"uh..
\item Formalisiert unsere Erwartungen an den Code.
\item Macht es sicher, den Code zu \"uberarbeiten.
\item Ist eine Art Dokumentation, die zeigt wie der Code eingesetzt
werden soll.
\end{itemize}\pause
\textbf{Limitationen:}
\begin{itemize}
\item Der Test kann nur f\"ur die F\"alle Sicherheit geben, die
explizit getestet werden.
\item Ist nur so gut, wie der Programierer sich M\"uhe gibt.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Unit Tests}
Seit R2013b unterst\"utzt MATLAB Unit Tests und bietet ein Testing
Framework.
Angenommen man hat eine Funktion, die die Winkel in einem Dreieck berechnen soll:
\begin{lstlisting}
% Copyright 2015 The MathWorks, Inc.
function angles = rightTri(sides)
A = atand(sides(1)/sides(2));
B = atand(sides(2)/sides(1));
hypotenuse = sides(1)/sind(A);
C = asind(hypotenuse*sind(A)/sides(1));
angles = [A B C];
end
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Unit Tests}
Ein Testskript fuer diese Funktion k\"onnte so aussehen:
\footnotesize
\begin{lstlisting}
% Copyright 2015 The MathWorks, Inc.
tri = [7 9];
triIso = [4 4];
tri306090 = [2 2*sqrt(3)];
% preconditions
angles = rightTri(tri);
assert(angles(3) == 90,'Fundamental problem: rightTri not producing right triangle')
%% Test 1: sum of angles
angles = rightTri(tri);
assert(sum(angles) == 180)
angles = rightTri(triIso);
assert(sum(angles) == 180)
angles = rightTri(tri306090);
assert(sum(angles) == 180)
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Unit Tests}
Ein Testskript fuer diese Funktion k\"onnte so aussehen:
\footnotesize
\begin{lstlisting}
%% Test 2: isosceles triangles
angles = rightTri(triIso);
assert(angles(1) == 45)
assert(angles(1) == angles(2))
%% Test 3: 30-60-90 triangle
angles = rightTri(tri306090);
assert(angles(1) == 30)
assert(angles(2) == 60)
assert(angles(3) == 90)
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Unit Tests}
Um den Test auszuf\"uhren:
\begin{lstlisting}
result = runtests('rightTriTest');
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Unit Tests}
Das Testresultat k\"onnte so aussehen:
\tiny
\begin{lstlisting}
Running rightTriTest
..
================================================================================
Error occurred in rightTriTest/Test3_30_60_90Triangle and it did not run to completion.
--------------
Error Details:
--------------
Assertion failed.
================================================================================
.
Done rightTriTest
__________
Failure Summary:
Name Failed Incomplete Reason(s)
===========================================================================
rightTriTest/Test3_30_60_90Triangle X X Errored.
\end{lstlisting}
\end{frame}
\begin{frame}
\frametitle{Reproduzierbarkeit wissenschaftlicher Daten}
\framesubtitle{Unit Tests}
\Large{Summary}
\begin{enumerate}
\item Unit Tests sind ein m\"achtiges Tool um die Korrektheit des eigenen Codes zu testen.
\item In der Regel geben sie Sicherheit.
\item Machen das \"Andern einfacher und sicherer.
\item Sind eine Art Dokumentation.
\item Tests sind immer so gut, wie sie programmiert werden.
\end{enumerate}
Ein Aufwand der sich lohnen kann. Er formalisiert, was wir uns eh denken...
\end{frame}
\end{document}

View File

@ -203,3 +203,13 @@
{\addtocounter{lstlisting}{-1}\lstinputlisting[language={},title={\textbf{\tr{Output}{Ausgabe}:}},belowskip=0pt]{\codepath\exerciseoutput}}}}%
\endMakeFramed\stepcounter{theexercise}%
\renewcommand{\theenumi}{\saveenumi}}
%%%%%%%%%%%%% Table stuff %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{multirow}
%%%%%%%%%%%%% Colors %%%%%%%%%%%%%%%%
\usepackage{xcolor}
\definecolor{lightblue}{rgb}{.7,.7,1.}
\definecolor{mygreen}{rgb}{0.2,0.7,0.2}
\definecolor{myred}{rgb}{1.,0,0}

View File

@ -605,12 +605,159 @@ durchgef\"uhrt werden soll.
\section{Boolesche Operationen}
Boolesche Ausdr\"ucke sind Anweisungen, die zu \textit{wahr} oder
\textit{falsch} ausgewertet werden. Man kennt sie z.B. aus der
Mengenlehre. In der Programmierung werdens sie eingesetzt um z.B. die
Beziehung zwischen Entit\"aten zu testen. Hierzu werden die
\textit{relationalen Operatoren} (\code{>, <, ==, !}, gr\"o{\ss}er
als, kleiner als, gleich und nicht) eingesetzt. Mehrere Ausdr\"ucke
werden mittels der \textit{logischen Operatoren} (\code{\&, |}, UND,
ODER ) verkn\"upft. Sie sind f\"ur uns nicht nur wichtig um
Codeabschnitte bedingt auszuf\"uhren (Verzweigungen,
\ref{controlstructsec}) sondern auch um aus Vektoren und Matrizen
bequem Elemente auszuw\"ahlen (logisches Indizieren,
\ref{logicalindexingsec}).
Die folgenden Tabellen zeigen die Wahrheitstabellen f\"ur das logische
UND (\ref{logicalandor}, links) aund das logische ODER
(\ref{logicalandor}, rechts). Es werden die Aussagen A und B mit dem
Operator verkn\"upft. Beim logischen UND ist der gesamte Ausdruck nur
dann wahr, wenn beide Ausdr\"ucke sich zu wahr auswerten lassen.
\section{Logisches Indizieren}
\begin{table}[]
\caption{Wahrheitstabellen logisches UND (links) und logisches ODER (rechts).}\label{logicalandor}
\begin{minipage}[t]{0.4\textwidth}
\begin{tabular}{llll}
\multicolumn{2}{l}{\multirow{2}{*}{}} & \multicolumn{2}{c}{\textbf{B}} \\
\multicolumn{2}{l}{} & \multicolumn{1}{|c|}{wahr} & falsch \\ \cline{2-4}
\multirow{2}{*}{\textbf{A}} & \multicolumn{1}{l|}{wahr} & \multicolumn{1}{c|}{\textcolor{mygreen}{wahr}} & \textcolor{red}{falsch} \\ \cline{2-4}
& \multicolumn{1}{l|}{falsch} & \multicolumn{1}{l|}{\textcolor{red}{falsch}} & \textcolor{red}{falsch}
\end{tabular}
\end{minipage}
\begin{minipage}[t]{0.4\textwidth}
\begin{tabular}{llll}
\multicolumn{2}{l}{\multirow{2}{*}{}} & \multicolumn{2}{c}{\textbf{B}} \\
\multicolumn{2}{l}{} & \multicolumn{1}{|c|}{wahr} & falsch \\ \cline{2-4}
\multirow{2}{*}{\textbf{A}} & \multicolumn{1}{l|}{wahr} & \multicolumn{1}{c|}{\textcolor{mygreen}{wahr}} & \textcolor{mygreen}{wahr} \\ \cline{2-4}
& \multicolumn{1}{l|}{falsch} & \multicolumn{1}{l|}{\textcolor{mygreen}{wahr}} & \textcolor{red}{falsch}
\end{tabular}
\end{minipage}
\end{table}
Anders ist das beim logischen ODER. Hier ist der gesamte Ausdruck
wahr, wenn sich der eine \textit{oder} der andere Ausdruck zu wahr
auswerten l\"a{\ss}t.
Tabelle \ref{logicaloperators} zeigt die logischen Operatoren, die in
Matlab definiert sind. Zu bemerken sind hier noch die \code{\&\&} und
\code{||} Operatoren. Man kann beliebige Ausdr\"ucke verkn\"uepfen und
h\"aufig kann schon anhand des ersten Ausdrucks entschieden werden, ob
der gesamte Boolesche Ausdruck zu wahr oder falsch ausgewertet werden
wird. Wenn zwei Aussagen mit einem UND verkn\"upft werden und der
erste zu falsch ausgewerte wird, dann muss der zweite gar nicht mehr
gepr\"uft werden. Die Verwendung der ``short-circuit'' Versionen spart
rechenzeit. Das auschliessende ODER (XOR) ist in Matlab nur als Funktion
\code{xor(A, B)} verf\"ugbar.
\begin{table}[th]
\caption{\label{logicaloperators}
\textbf{Logische Operatoren in Matlab.}}
\begin{center}
\begin{tabular}{c|c}
\hline
\textbf{Operator} & \textbf{Beschreibung} \\ \hline
$\sim$ & logisches NOT\\
$\&$ & logisches UND\\
$|$ & logisches ODER\\
$\&\&$ & short-circuit logical UND\\
$\|$ & short-circuit logical ODER\\
\hline
\end{tabular}
\end{center}
\end{table}
Um Werte miteinander zu vergleichen gibt es die \textit{relationalen
Operatoren} (Tabelle \ref{relationaloperators}). Mit ihnen kann man
auf Dinge wie Gleicheit (\code{==}) gr\"o{\ss}er oder kleiner als
(\code{>, <}) testen.
\begin{table}[th]
\caption{\label{relationaloperators}
\textbf{Relationale Operatoren in Matlab.}}
\begin{center}
\begin{tabular}{c|c}
\hline
\textbf{Operator} & \textbf{Beschreibung} \\ \hline
$<$ & kleiner als\\
$>$ & gr\"osser als \\
$==$ & gleich \\
$>=$ & gr\"osser oder gleich \\
$<=$ & kleiner oder gleich \\
$\sim=$ & ungleich\\
\hline
\end{tabular}
\end{center}
\end{table}
Das Ergebnis eines Booleschen Ausdrucks ist immer vom Datentyp
\textit{logical}. Man kann jede beliebige Variable zu wahr oder falsch
auswerten indem man in den Typ \textit{logical} umwandelt. Dabei
werden von Matlab alle Werte, die nicht 0 sind als wahr
eingesch\"atzt. Listing \ref{booleanexpressions} zeigt einige
Beispiele. Matlab kennt die Schl\"usselworte \code{true} und
\code{false}. Diese sind jedoch nur Synonyme f\"ur die
\textit{logical} Werte 1 und 0. Man beachte, dass der
Zuweisungsoperator \code{=} und der logische Operator \code{==} zwei
grundverschiedene Dinge sind. Da sie umgangsprachlich gleich sind kann
man sie leider leicht verwechseln.
\footnotesize
\begin{lstlisting}[caption={Boolesche Ausdr\"ucke.}, label=booleanexpressions]
>> true
ans =
1
>> false
ans =
0
>> logical(1)
ans =
1
>> 1 == true
ans =
1
>> 1 == false
ans =
0
>> logical('test')
ans =
1 1 1 1
>> 1 > 2
ans =
0
>> 1 < 2
ans =
1
>> x = [2 0 0 5 0] & [1 0 3 2 0]
x =
1 0 0 1 0
>> ~([2 0 0 5 0] & [1 0 3 2 0])
ans =
0 1 1 0 1
>> [2 0 0 5 0] | [1 0 3 2 0]
ans =
1 0 1 1 0
\end{lstlisting}
\normalsize
\section{Logisches Indizieren}\label{logicalindexingsec}
\section{Kontrollstrukturen}
\section{Kontrollstrukturen}\label{controlstructsec}
\begin{definition}[Kontrollstrukturen]
In der Regel wird ein Programm Zeile f\"ur Zeile von oben nach unten

Binary file not shown.