From 6383bfaaafd5533fc4ddf4a4a5a4f44c78d6c11f Mon Sep 17 00:00:00 2001
From: Mihai <M.Lefter@lumc.nl>
Date: Mon, 26 Nov 2018 21:56:04 +0100
Subject: [PATCH] Started day2 tex

---
 more_python/more_01/Makefile            |   1 +
 more_python/more_01/beamerthemelumc.sty |   1 +
 more_python/more_01/logos               |   1 +
 more_python/more_01/more_01.tex         | 299 ++++++++++++++++++++++++
 more_python/more_01/seq_toolbox.py      |  13 ++
 more_python/more_01/seq_toolbox_02.py   |  16 ++
 more_python/more_01/seq_toolbox_03.py   |  16 ++
 7 files changed, 347 insertions(+)
 create mode 120000 more_python/more_01/Makefile
 create mode 120000 more_python/more_01/beamerthemelumc.sty
 create mode 120000 more_python/more_01/logos
 create mode 100644 more_python/more_01/more_01.tex
 create mode 100644 more_python/more_01/seq_toolbox.py
 create mode 100644 more_python/more_01/seq_toolbox_02.py
 create mode 100644 more_python/more_01/seq_toolbox_03.py

diff --git a/more_python/more_01/Makefile b/more_python/more_01/Makefile
new file mode 120000
index 0000000..a732eef
--- /dev/null
+++ b/more_python/more_01/Makefile
@@ -0,0 +1 @@
+../../.presentation/Makefile
\ No newline at end of file
diff --git a/more_python/more_01/beamerthemelumc.sty b/more_python/more_01/beamerthemelumc.sty
new file mode 120000
index 0000000..cdbf3bb
--- /dev/null
+++ b/more_python/more_01/beamerthemelumc.sty
@@ -0,0 +1 @@
+../../.presentation/beamerthemelumc.sty
\ No newline at end of file
diff --git a/more_python/more_01/logos b/more_python/more_01/logos
new file mode 120000
index 0000000..dee1a45
--- /dev/null
+++ b/more_python/more_01/logos
@@ -0,0 +1 @@
+../../.presentation/logos
\ No newline at end of file
diff --git a/more_python/more_01/more_01.tex b/more_python/more_01/more_01.tex
new file mode 100644
index 0000000..2ebb1c0
--- /dev/null
+++ b/more_python/more_01/more_01.tex
@@ -0,0 +1,299 @@
+\documentclass[aspectratio=1610,slidestop]{beamer}
+
+\author{Mihai Lefter}
+\title{Python Programming}
+\providecommand{\mySubTitle}{String methods, error and exceptions}
+\providecommand{\myConference}{Programming Course}
+\providecommand{\myDate}{27-11-2018}
+\providecommand{\myGroup}{}
+\providecommand{\myDepartment}{}
+\providecommand{\myCenter}{}
+
+\usetheme{lumc}
+\usepackage{minted}
+\usepackage{tikz}
+\usepackage[many]{tcolorbox}
+
+\definecolor{monokaibg}{HTML}{272822}
+\definecolor{emailc}{HTML}{1e90FF}
+\definecolor{scriptback}{HTML}{CDECF0}
+
+\newenvironment{ipython}
+ {\begin{tcolorbox}[title=IPython,
+                   title filled=false,
+                   fonttitle=\scriptsize,
+                   fontupper=\footnotesize,
+                   enhanced,
+                   colback=monokaibg,
+                   drop small lifted shadow,
+                   boxrule=0.1mm,
+                   left=0.1cm,
+                   arc=0mm,
+                   colframe=black]}
+ {\end{tcolorbox}}
+
+
+
+\newenvironment{terminal}
+ {\begin{tcolorbox}[title=terminal,
+                   title filled=false,
+                   fonttitle=\scriptsize,
+                   fontupper=\footnotesize,
+                   enhanced,
+                   colback=monokaibg,
+                   drop small lifted shadow,
+                   boxrule=0.1mm,
+                   left=0.1cm,
+                   arc=0mm,
+                   colframe=black]}
+ {\end{tcolorbox}}
+
+
+\newcommand{\hrefcc}[2]{\textcolor{#1}{\href{#2}{#2}}}
+\newcommand{\hrefc}[3]{\textcolor{#1}{\href{#2}{#3}}}
+
+\newcounter{cntr}
+\renewcommand{\thecntr}{\texttt{[\arabic{cntr}]}}
+
+\newenvironment{pythonin}[1]
+{\VerbatimEnvironment
+  \begin{minipage}[t]{0.11\linewidth}
+   \textcolor{green}{\texttt{{\refstepcounter{cntr}\label{#1}In \thecntr:}}}
+  \end{minipage}
+  \begin{minipage}[t]{0.89\linewidth}
+  \begin{minted}[
+    breaklines=true,style=monokai]{#1}}
+ {\end{minted}
+ \end{minipage}}
+
+\newenvironment{pythonout}[1]
+{\VerbatimEnvironment
+  \addtocounter{cntr}{-1}
+  \begin{minipage}[t]{0.11\linewidth}
+   \textcolor{red}{\texttt{{\refstepcounter{cntr}\label{#1}Out\thecntr:}}}
+  \end{minipage}
+  \begin{minipage}[t]{0.89\linewidth}
+  \begin{minted}[
+    breaklines=true,style=monokai]{#1}}
+ {\end{minted}
+ \end{minipage}}
+
+\newenvironment{pythonerr}[1]
+{\VerbatimEnvironment
+  \begin{minted}[
+    breaklines=true,style=monokai]{#1}}
+ {\end{minted}}
+
+
+\newenvironment{pythonfile}[1]
+ {\begin{tcolorbox}[title=#1,
+                    title filled=false,
+                    coltitle=LUMCDonkerblauw,
+                    fonttitle=\scriptsize,
+                    fontupper=\footnotesize,
+                    enhanced,
+                    drop small lifted shadow,
+                    boxrule=0.1mm,
+                    leftrule=5mm,
+                    rulecolor=white,
+                    left=0.1cm,
+                    colback=white!92!black,
+                    colframe=scriptback]}
+ {\end{tcolorbox}}
+
+
+\begin{document}
+
+% This disables the \pause command, handy in the editing phase.
+%\renewcommand{\pause}{}
+
+% Make the title slide.
+\makeTitleSlide{\includegraphics[height=3.5cm]{../../images/Python.pdf}}
+
+% First page of the presentation.
+\section{Introduction}
+\makeTableOfContents
+
+\subsection{Let's start with a simple GC calculator}
+\begin{pframe}
+ \begin{pythonfile}{seq\_toolbox.py}
+  \begin{minted}[linenos]{python}
+def calc_gc_percent(seq):
+    at_count, gc_count = 0, 0
+    for char in seq:
+        if char in ('A', 'T'):
+            at_count += 1
+        elif char in ('G', 'C'):
+            gc_count += 1
+
+    return gc_count * 100.0 / (gc_count + at_count)       
+
+print("The sequence 'CAGG' has a %GC of {:.2f}".format(
+          calc_gc_percent("CAGG")))
+  \end{minted}
+ \end{pythonfile}
+ \pause
+ Our script is nice and dandy, but we don't want to edit the source file everytime we calculate a sequence's GC. 
+\end{pframe}
+
+
+
+\section{The standard library}
+
+\begin{pframe}
+\begin{itemize}
+  \item A collection of Python modules (or functions, for now) that comes packaged with a default Python installation.
+  \item They're not part of the language per se, more like a batteries included thing.
+\end{itemize}
+
+\end{pframe}
+
+\subsection{Our first standard library module: sys}
+\begin{pframe}
+We'll start by using the simple sys module to make our script more flexible.
+
+Standard library (and other modules, as we'll see later) can be used via the import statement, for example:
+\end{pframe}
+
+
+\subsection{Improving our script with sys.argv}
+\begin{pframe}
+ \begin{pythonfile}{seq\_toolbox.py}
+  \begin{minted}[linenos]{python}
+import sys
+
+def calc_gc_percent(seq):
+    at_count, gc_count = 0, 0
+    for char in seq:
+        if char in ('A', 'T'):
+            at_count += 1
+        elif char in ('G', 'C'):
+            gc_count += 1
+
+    return gc_count * 100.0 / (gc_count + at_count)       
+
+input_seq = sys.argv[1]
+print("The sequence '{}' has a %GC of {:.2f}".format(
+          input_seq, calc_gc_percent(input_seq)))
+  \end{minted}
+ \end{pythonfile}
+\end{pframe}
+
+
+
+\section{String methods}
+
+\begin{pframe}
+\end{pframe}
+
+\subsection{Improving our script with upper()}
+\begin{pframe}
+ \begin{pythonfile}{seq\_toolbox.py}
+  \begin{minted}[linenos]{python}
+import sys
+
+def calc_gc_percent(seq):
+    at_count, gc_count = 0, 0
+    for char in seq.upper():
+        if char in ('A', 'T'):
+            at_count += 1
+        elif char in ('G', 'C'):
+            gc_count += 1
+
+    return gc_count * 100.0 / (gc_count + at_count)
+
+input_seq = sys.argv[1]
+print("The sequence '{}' has a %GC of {:.2f}".format(
+          input_seq, calc_gc_percent(input_seq)))
+  \end{minted}
+ \end{pythonfile}
+\end{pframe}
+
+
+\section{Improving our script with comments and docstrings}
+\begin{pframe}
+  \vspace{-1.2cm}
+ \begin{pythonfile}{seq\_toolbox.py}
+  \begin{tiny}
+  \begin{minted}[linenos]{python}
+import sys
+
+def calc_gc_percent(seq):
+    """
+    Calculates the GC percentage of the given sequence.
+
+    Arguments:
+        - seq - the input sequence (string).
+
+    Returns:
+        - GC percentage (float).
+
+    The returned value is always <= 100.0
+    """
+    at_count, gc_count = 0, 0
+    # Change input to all caps to allow for non-capital
+    # input sequence.
+    for char in seq.upper():
+        if char in ('A', 'T'):
+            at_count += 1
+        elif char in ('G', 'C'):
+            gc_count += 1
+
+    return gc_count * 100.0 / (gc_count + at_count)
+    
+input_seq = sys.argv[1]
+print("The sequence '{}' has a %GC of {:.2f}".format(
+          input_seq, calc_gc_percent(input_seq)))
+  \end{minted}
+  \end{scriptsize}
+ \end{pythonfile}}
+\end{pframe}
+
+
+\section{Errors and exceptions}
+\subsection{Improving our script by handling corner cases}
+\begin{pframe}
+ \begin{pythonfile}{seq\_toolbox.py}
+  \begin{tiny}
+  \begin{minted}[linenos]{python}
+def calc_gc_percent(seq):
+    """
+    Calculates the GC percentage of the given sequence.
+    ...
+    The returned value is always <= 100.0
+    """
+    at_count, gc_count = 0, 0
+    # Change input to all caps to allow for non-capital
+    # input sequence.
+    for char in seq.upper():
+        if char in ('A', 'T'):
+            at_count += 1
+        elif char in ('G', 'C'):
+            gc_count += 1
+        else:
+            raise ValueError(
+                "Unexpeced character found: {}. Only "
+                "ACTGs are allowed.".format(char))
+
+    # Corner case handling: empty input sequence.
+    try:
+        return gc_count * 100.0 / (gc_count + at_count)
+    except ZeroDivisionError:
+        return 0.0    
+  \end{minted}
+  \end{scriptsize}
+ \end{pythonfile}}
+\end{pframe}
+
+
+
+% Make the acknowledgements slide.
+\makeAcknowledgementsSlide{
+  \begin{tabular}{ll}
+    Martijn Vermaat\\
+    Jeroen Laros\\
+    Jonathan Vis
+  \end{tabular}
+}
+
+\end{document}
diff --git a/more_python/more_01/seq_toolbox.py b/more_python/more_01/seq_toolbox.py
new file mode 100644
index 0000000..b592996
--- /dev/null
+++ b/more_python/more_01/seq_toolbox.py
@@ -0,0 +1,13 @@
+def calc_gc_percent(seq):
+    at_count, gc_count = 0, 0
+    for char in seq:
+        if char in ('A', 'T'):
+            at_count += 1
+        elif char in ('G', 'C'):
+            gc_count += 1
+
+    return gc_count * 100.0 / (gc_count + at_count)       
+
+print("The sequence 'CAGG' has a %GC of {:.2f}".format(
+          calc_gc_percent("CAGG")))
+
diff --git a/more_python/more_01/seq_toolbox_02.py b/more_python/more_01/seq_toolbox_02.py
new file mode 100644
index 0000000..1a282ac
--- /dev/null
+++ b/more_python/more_01/seq_toolbox_02.py
@@ -0,0 +1,16 @@
+import sys
+
+def calc_gc_percent(seq):
+    at_count, gc_count = 0, 0
+    for char in seq:
+        if char in ('A', 'T'):
+            at_count += 1
+        elif char in ('G', 'C'):
+            gc_count += 1
+
+    return gc_count * 100.0 / (gc_count + at_count)       
+
+input_seq = sys.argv[1]
+print("The sequence '{}' has a %GC of {:.2f}".format(
+          input_seq, calc_gc_percent(input_seq)))
+
diff --git a/more_python/more_01/seq_toolbox_03.py b/more_python/more_01/seq_toolbox_03.py
new file mode 100644
index 0000000..e28a172
--- /dev/null
+++ b/more_python/more_01/seq_toolbox_03.py
@@ -0,0 +1,16 @@
+import sys
+
+def calc_gc_percent(seq):
+    at_count, gc_count = 0, 0
+    for char in seq.upper():
+        if char in ('A', 'T'):
+            at_count += 1
+        elif char in ('G', 'C'):
+            gc_count += 1
+
+    return gc_count * 100.0 / (gc_count + at_count)
+
+input_seq = sys.argv[1]
+print("The sequence '{}' has a %GC of {:.2f}".format(
+          input_seq, calc_gc_percent(input_seq)))
+
-- 
GitLab