%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Tutorial slides on Python.
%
% Author: FOSSEE
% Copyright (c) 2009, FOSSEE, IIT Bombay
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\documentclass[14pt,compress]{beamer}
%\documentclass[draft]{beamer}
%\documentclass[compress,handout]{beamer}
%\usepackage{pgfpages} 
%\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]

% Modified from: generic-ornate-15min-45min.de.tex
\mode<presentation>
{
  \usetheme{Warsaw}
  \useoutertheme{infolines}
  \setbeamercovered{transparent}
}

\usepackage[english]{babel}
\usepackage[latin1]{inputenc}
%\usepackage{times}
\usepackage[T1]{fontenc}

% Taken from Fernando's slides.
\usepackage{ae,aecompl}
\usepackage{mathpazo,courier,euler}
\usepackage[scaled=.95]{helvet}

\definecolor{darkgreen}{rgb}{0,0.5,0}

\usepackage{listings}
\lstset{language=Python,
    basicstyle=\ttfamily\bfseries,
    commentstyle=\color{red}\itshape,
  stringstyle=\color{darkgreen},
  showstringspaces=false,
  keywordstyle=\color{blue}\bfseries}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Macros
\setbeamercolor{emphbar}{bg=blue!20, fg=black}
\newcommand{\emphbar}[1]
{\begin{beamercolorbox}[rounded=true]{emphbar} 
      {#1}
 \end{beamercolorbox}
}
\newcounter{time}
\setcounter{time}{0}
\newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}}

\newcommand{\typ}[1]{\lstinline{#1}}

\newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}}  }

%%% This is from Fernando's setup.
% \usepackage{color}
% \definecolor{orange}{cmyk}{0,0.4,0.8,0.2}
% % Use and configure listings package for nicely formatted code
% \usepackage{listings}
% \lstset{
%    language=Python,
%    basicstyle=\small\ttfamily,
%    commentstyle=\ttfamily\color{blue},
%    stringstyle=\ttfamily\color{orange},
%    showstringspaces=false,
%    breaklines=true,
%    postbreak = \space\dots
% }


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Title page
\title[Plotting with Python]{Python for Science and Engg: Plotting experimental data}

\author[FOSSEE group] {FOSSEE}

\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
\date[] {SciPy.in 2010, Tutorials}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%\pgfdeclareimage[height=0.75cm]{iitmlogo}{iitmlogo}
%\logo{\pgfuseimage{iitmlogo}}


%% Delete this, if you do not want the table of contents to pop up at
%% the beginning of each subsection:
\AtBeginSubsection[]
{
  \begin{frame}<beamer>
    \frametitle{Outline}
    \tableofcontents[currentsection,currentsubsection]
  \end{frame}
}

\AtBeginSection[]
{
  \begin{frame}<beamer>
    \frametitle{Outline}
    \tableofcontents[currentsection,currentsubsection]
  \end{frame}
}

% If you wish to uncover everything in a step-wise fashion, uncomment
% the following command: 
%\beamerdefaultoverlayspecification{<+->}

%\includeonlyframes{current,current1,current2,current3,current4,current5,current6}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DOCUMENT STARTS
\begin{document}

\begin{frame}
  \titlepage
\end{frame}

\begin{frame}
  \frametitle{Outline}
  \tableofcontents
  % You might wish to add the option [pausesections]
\end{frame}

\section{Plotting Points}
\begin{frame}[fragile]
\frametitle{Why would I plot f(x)?}
Do we plot analytical functions or experimental data?
\begin{small}
\begin{lstlisting}
In []: time = [0, 1, 2, 3]

In []: distance = [7, 11, 15, 19]

In []: plot(time, distance)
Out[]: [<matplotlib.lines.Line2D object at 0xa73aa8c>]

In []: xlabel('time')
Out[]: <matplotlib.text.Text object at 0x986e9ac>

In []: ylabel('distance')
Out[]: <matplotlib.text.Text object at 0x98746ec>
\end{lstlisting}
\end{small}
\end{frame}

\begin{frame}[fragile]
\begin{figure}
\includegraphics[width=3.5in]{data/straightline.png}
\end{figure}
\alert{Is this what you have?}
\end{frame}

\begin{frame}[fragile]
\frametitle{Plotting points}
\begin{itemize}
\item What if we want to plot the points?
\end{itemize}
\begin{lstlisting}
  In []: clf()

  In []: plot(time, distance, 'o')
  Out[]: [<matplotlib.lines.Line2D object at 0xac17e0c>]

  In []: clf()
  In []: plot(time, distance, '.')
  Out[]: [<matplotlib.lines.Line2D object at 0xac17e0c>]
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
\begin{figure}
\includegraphics[interpolate=true,width=2.35in]{data/stline_dots.png}
\includegraphics[interpolate=true,width=2.35in]{data/stline_points.png}
\end{figure}
\end{frame}

\begin{frame}[fragile]
\frametitle{Additional Line Styles}
\begin{itemize}
  \item \typ{'o'} - Filled circles
  \item \typ{'.'} - Small Dots
  \item \typ{'-'} - Lines
  \item \typ{'--'} - Dashed lines
\end{itemize}
\end{frame}

\section{Lists}
\begin{frame}[fragile]
  \frametitle{Lists: Introduction}
  \begin{lstlisting}
    In []: time = [0, 1, 2, 3]

    In []: distance = [7, 11, 15, 19]

  \end{lstlisting}
What are \typ{x} and \typ{y}?\\
\begin{center}
\alert{\typ{lists!!}}
\end{center}
\end{frame}

\begin{frame}[fragile]
\frametitle{Lists: Initializing \& accessing elements}
\begin{lstlisting}
In []: mtlist = [] 
\end{lstlisting}
\emphbar{Empty List}
\begin{lstlisting}
In []: p = [ 2, 3, 5, 7] 

In []: p[1]
Out[]: 3

In []: p[0]+p[1]+p[-1]
Out[]: 12
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
\frametitle{List: Appending elements}
\begin{lstlisting}
In []: p.append(11)
In []: p
Out[]: [ 2, 3, 5, 7, 11]

In []: b = [11, 13, 17]
In []: p.append(b)
Out[]: [ 2, 3, 5, 7, 11, [11, 13, 17]]
\end{lstlisting}
%\inctime{10}
\end{frame}

\section{Simple Pendulum}
\begin{frame}[fragile]
\frametitle{Simple Pendulum - L and T}
Let us look at the Simple Pendulum experiment.
\begin{center}
\begin{small}
\begin{tabular}{| c | c | c |}
\hline
$L$ & $T$ & $T^2$ \\ \hline
0.1 & 0.69 & \\ \hline
0.2 & 0.90 & \\ \hline
0.3 & 1.19 & \\ \hline
0.4 & 1.30 & \\ \hline
0.5 & 1.47 & \\ \hline
0.6 & 1.58 & \\ \hline
0.7 & 1.77 & \\ \hline
0.8 & 1.83 & \\ \hline
0.9 & 1.94 & \\ \hline
\end{tabular}
\end{small}\\
\alert{$L \alpha T^2$}
\end{center}
Our data is present in \typ{pendulum.txt}. Let's look at it.
\end{frame}

\begin{frame}[fragile]
    \frametitle{Gotcha and an aside}
    Ensure you are in the same directory as \typ{pendulum.txt}\\
    if not, do the following on IPython:
    \begin{lstlisting}
In []: %cd directory_containing_file
# Check if pendulum.txt is there.
In []: ls
# Also try 
In []: !ls
    \end{lstlisting}

    \alert{Note:} \typ{\%cd} is an IPython magic command.  For more information
    do:
    \begin{lstlisting}
In []: ?
    \end{lstlisting}
\end{frame}

\begin{frame}[fragile]
\frametitle{Looking at \typ{pendulum.txt}}
\begin{lstlisting} 
In []: cat pendulum.txt 
1.0000e-01 6.9004e-01
1.1000e-01 6.9497e-01
1.2000e-01 7.4252e-01
1.3000e-01 7.5360e-01
\end{lstlisting}  %$
\ldots
\begin{itemize}
  \item File contains L vs.\ T values 
  \item First Column -- L values
  \item Second Column -- T values
\end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{\typ{loadtxt}}
  \begin{itemize}
  \item We shall use the \typ{loadtxt} command to load data
  \item Let's use \typ{primes.txt} file learn to use it
  \item \typ{primes.txt} has a single column
  \item Then, we shall use it for \typ{pendulum.txt} -- 2 cols
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
\frametitle{What's in \typ{primes.txt}?}
Lets look at the \typ{primes.txt} file.
\begin{lstlisting} 
In []: cat primes.txt 
2
3      
5      
7     
11     
13
.
.
.
\end{lstlisting}  %$
\end{frame}


\begin{frame}[fragile]
  \frametitle{\typ{loadtxt} \ldots}
  \begin{lstlisting}
In []: primes = loadtxt('primes.txt')
In []: primes
Out[]: array([ 2., 3., 5., 7., 11., 13., 
               17., 19., 23., 29., 31., 
               37., 41., 43., 47., 53., 
               59., 61., 67., 71., 73., 
               79., 83., 89., 97.])
  \end{lstlisting}

\end{frame}

\begin{frame}[fragile]
  \frametitle{Reading \typ{pendulum.txt}}
  \begin{lstlisting}
In []: pend = loadtxt('pendulum.txt')
In []: pend
  \end{lstlisting}
  \begin{itemize}
  \item \typ{pend} is 2 Dimensional. 
  \item We don't \alert{yet} know how to handle it.
  \item We obtain 1D sequences using \typ{unpack=True}
  \end{itemize}

  \begin{lstlisting}
In []: L, T = loadtxt('pendulum.txt', 
                      unpack=True)
In []: print L, T
In []: print len(L), len(T)
Out[]: 90 90
  \end{lstlisting}
\end{frame}

\begin{frame}[fragile]
\frametitle{Plotting $L$ vs $T^2$}
\begin{itemize}
\item We must square each of the values in \typ{T}
\item How to do it?
\item We use a \kwrd{for} loop to iterate over \typ{T}
\end{itemize}
\end{frame}

\begin{frame}[fragile]
\frametitle{Plotting $L$ vs $T^2$}
\begin{lstlisting}
In []: tsq = []

In []: for time in T:
 ....:     tsq.append(time*time)
 ....:
 ....:

\end{lstlisting}
\alert{Hit ``ENTER'' key twice, to get out of \typ{for} loop}.

\begin{lstlisting}
In []: print len(tsq)
Out[]: 90
\end{lstlisting}
\typ{tsq} is a \kwrd{list} of squares of \typ{T} values.
\end{frame}


\begin{frame}[fragile]
\frametitle{Plotting $L$ vs $T^2$ \ldots}

\begin{lstlisting}
In []: plot(L, tsq, '.')
\end{lstlisting}

\begin{figure}
  \includegraphics[width=3.5in]{data/L-Tsq.png}
\end{figure}

\end{frame}

\section {Summary}
\begin{frame}[fragile]
\frametitle{What did we learn?}
\begin{itemize}
  \item Plot attributes and plotting points
  \item Lists
  \item \kwrd{for}
  \item Loading data from files
\end{itemize}
\end{frame}

\end{document}

%% Questions for Quiz %%
%% ------------------ %%

\begin{frame}[fragile]
\frametitle{\incqno }
  \begin{lstlisting}
  In []: a = [1, 2, 5, 9]
  In []: a[0:-1]
  \end{lstlisting}
  What is the output?
\end{frame}

\begin{frame}
\frametitle{\incqno }
  How do you combine two lists \emph{a} and \emph{b} to produce one list?
\end{frame}

\begin{frame}[fragile]
\frametitle{\incqno }
  \begin{lstlisting}
  In []: a = [1, 2, 5, 9]
  \end{lstlisting}
  How do you add the value 10 to the end of this list?
\end{frame}

\begin{frame}
\frametitle{\incqno }
Write the code to read a file \texttt{data.txt} and print each line of it?
\end{frame}

\begin{frame}[fragile]
\frametitle{\incqno }
What would be the result of the following code snippet:
\begin{lstlisting}
In []: x = linspace(0, 10, 50)
In []: y = linspace(50, 100, 100)
In []: plot(x, y)
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
\frametitle{\incqno }
The following code snippet has an error/bug:
\begin{lstlisting}
In []: l = [0.1, 0.2, 0.3, 0.4]
In []: t = [0.69, 0.90, 1.19, 1.30]
In []: tsq = []
In []: for time in t:
 ....:     tsq.append(time*time)
 ....:     plot(l, tsq)
\end{lstlisting}
What is the error? How do you fix it?
\end{frame}
