\documentclass[aspectratio=169]{beamer}

\usepackage{microtype}
\usepackage{tikz}
\usetikzlibrary{fit}
\usepackage[style=verbose-ibid,url=false,natbib=true]{biblatex}
\addbibresource{references.bib}
\renewcommand*{\footnotesize}{\Tiny}
\setlength{\footnotesep}{3pt}

\definecolor{bngreen}{HTML}{3c8e64}
\definecolor{bnorange}{HTML}{e08919}
%\setbeamercolor*{structure}{bg=white,fg=bngreen}
\usecolortheme[named=bngreen]{structure}
\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{headline}{\hfill\includegraphics[width=.7cm]{logo-running}\hspace{0.1cm}\vspace{-.7cm}}

\author{Justin Bed\H{o}\\WEHI}
\title{\includegraphics[width=.7\linewidth]{logo}\\functional, reproducible bioinformatics workflows}
\date{November 10, 2020}

\begin{document}

{
  \setbeamertemplate{headline}{}
  \begin{frame}
    \maketitle
  \end{frame}
}

\begin{frame}
  \frametitle{Core problems}
  \begin{enumerate}
    \item \emph{Managing software versions and dependencies}.
      \begin{itemize}
        \item Conda
        \item BioConda~\autocite{Grning2018}
        \item apt-get
      \end{itemize}

    \item \emph{Managing computational environments}.
      \begin{itemize}
        \item Docker
        \item Singularity
        \item \emph{virtual machines}
      \end{itemize}

    \item \emph{Managing workflows}.
      \begin{itemize}
        \item Toil~\autocite{toil}
        \item SnakeMake~\autocite{Koster2012}
        \item NextFlow~\autocite{di_tommaso_nextflow_2017}
      \end{itemize}
  \end{enumerate}
\end{frame}

\begin{frame}[label=dag]
  \begin{center}
    \begin{tikzpicture}[->,>=stealth,shorten >=1pt,auto,node distance=2cm,thick]
      \node (a) {align};
      \node (s) [below of=a] {sort};
      \node (c) [below of=s] {calling};

      \path (a) edge node {} (s);
      \path (s) edge node {} (c);

      \pause

      \node (input) [above of=a] {input};
      \path (input) edge node {} (a);
      \node (ref) [right of=a] {reference};
      \path (ref) edge node {} (a);
      \node (db) [right of=c] {dbNSFP};
      \path (db) edge node {} (c);

      \pause

      \node (bwa) [left of=a] {BWA};
      \path (bwa) edge node {} (a);
      \node (samtools) [left of=s] {samtools};
      \path (samtools) edge node {} (s);
      \node (platypus) [left of=c] {platypus};
      \path (platypus) edge node {} (c);

      \pause

      \node (glib) [left of=samtools] {glibc,$\cdots$};
      \node (python) [left of=platypus] {python};
      \path (glib) edge node {} (bwa);
      \path (glib) edge node {} (samtools);
      \path (python) edge node {} (platypus);
      \path (glib) edge node {} (python);

      \pause

      \node[draw=bngreen, fit=(bwa) (samtools) (platypus) (glib) (python),label=containers](cont){};
      \node[draw=bnorange, fit=(ref) (db),label=tarball](tar){};
    \end{tikzpicture}
  \end{center}
\end{frame}

\begin{frame}
  \frametitle{Containers do not solve reproducibility}
  \begin{minipage}{.2\textwidth}
    \includegraphics[height=.9\textheight]{docker}
  \end{minipage}
  \begin{minipage}{.78\textwidth}
    \begin{enumerate}
      \item Shifts the problem
      \item Containers provide isolated distributable computational environments
      \item Overkill for reproducible bioinformatics: e.g., don't need virtualised networking (or even networks at all!)
    \end{enumerate}
  \end{minipage}
\end{frame}

\againframe<4>{dag}

\begin{frame}
  \frametitle{BioNix contributions}
  \begin{enumerate}
    \item Builds on Nix, a robust functional package manager
    \item Manages both software, data, and workflows within the one system
    \item Implicitly specifies its entire computational environment
    \item Purely functional domain-specific language, simplifying specifying workflows
      to function composition
    \item Typing to reduce errors~\autocite{Bed2019}
  \end{enumerate}
\end{frame}  

\begin{frame}
  \frametitle{What is Nix?}
  \begin{enumerate}
    \item Simple configuration language (like JSON + functions)
    \item Build engine that \emph{realises} \emph{derivations}
      \begin{itemize}
        \item resumption
        \item error handling
        \item logging
        \item parallelisation
      \end{itemize}
    \item Derivations are complete descriptions for producing build products: all inputs and a build recipe
    \item Controlled \emph{side effects}\footnote{stuff not captured by the derivation}: none allowed during a build
    \item Output location unique and determined by hashing the derivation: i.e., hash based version management
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{What is BioNix?}
  \begin{enumerate}
    \item Thin wrapper on Nix
    \item Models \emph{stages}\footnote{the execution of one or more executables on one or more input files, producing one or more output files.} as functions (\texttt{config → inputs → drv})
    \item Library of bioinformatics tools (BWA, samtools, etc)
  \end{enumerate}
\end{frame}

\begin{frame}
  \frametitle{Example}
  \begin{minipage}{.4\textwidth}
  \includegraphics[width=.8\linewidth]{graph}
  \end{minipage}
  \begin{minipage}{.55\textwidth}
  \begin{overprint}
  \onslide<1>\includegraphics[width=\linewidth]{pipeline}
  \onslide<2>\includegraphics[width=.75\linewidth]{bwa-stage}
  \onslide<3>\includegraphics[width=\linewidth]{bwa-drv}
  \end{overprint}
  \end{minipage}
\end{frame}

\begin{frame}
  \frametitle{Demo}
  \pause
  \includegraphics[width=\linewidth]{demo-graph}
\end{frame}

\end{document}