script work, further topics slides
529
further_topics/lectures/UT_WBMW_Rot_RGB.pdf
Normal file
61
further_topics/lectures/beamercolorthemetuebingen.sty
Normal 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>
|
BIN
further_topics/lectures/images/course_git.png
Normal file
After Width: | Height: | Size: 424 KiB |
BIN
further_topics/lectures/images/git_logo.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
further_topics/lectures/images/git_pro_distributed.png
Normal file
After Width: | Height: | Size: 167 KiB |
BIN
further_topics/lectures/images/git_pro_lifecycle.png
Normal file
After Width: | Height: | Size: 93 KiB |
BIN
further_topics/lectures/images/git_pro_local.png
Normal file
After Width: | Height: | Size: 77 KiB |
BIN
further_topics/lectures/images/github_logo.jpeg
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
further_topics/lectures/images/hines_etal_2014.png
Normal file
After Width: | Height: | Size: 275 KiB |
BIN
further_topics/lectures/images/hines_etal_2014_grey.png
Normal file
After Width: | Height: | Size: 271 KiB |
BIN
further_topics/lectures/images/phd092506s.gif
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
further_topics/lectures/images/pro_git-branches.png
Normal file
After Width: | Height: | Size: 164 KiB |
BIN
further_topics/lectures/images/pro_git_commits.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
further_topics/lectures/images/project_end.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
further_topics/lectures/images/project_middle.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
further_topics/lectures/images/project_start.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
further_topics/lectures/images/rung_brazma_2013.png
Normal file
After Width: | Height: | Size: 81 KiB |
BIN
further_topics/lectures/images/rung_brazma_2013_grey.png
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
further_topics/lectures/images/savage_vickers_2009.png
Normal file
After Width: | Height: | Size: 460 KiB |
BIN
further_topics/lectures/images/savage_vickers_2009_title.png
Normal file
After Width: | Height: | Size: 82 KiB |
228
further_topics/lectures/topics-chapter.tex
Normal 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}
|
656
further_topics/lectures/topics-slides.tex
Normal 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 other’s
|
||||
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}
|
10
header.tex
@ -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}
|
@ -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
|
||||
|