Manual merge of branches.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Tutorial slides on Python.
%
% Author: Prabhu Ramachandran <prabhu at aero.iitb.ac.in>
% Copyright (c) 2005-2009, Prabhu Ramachandran
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass[compress,14pt]{beamer}
% \documentclass[handout]{beamer}
% \usepackage{pgfpages}
% \pgfpagesuselayout{4 on 1}[a4paper,border, shrink=5mm,landscape]
\usepackage{tikz}
\newcommand{\hyperlinkmovie}{}
%\usepackage{movie15}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Note that in presentation mode
% \paperwidth 364.19536pt
% \paperheight 273.14662pt
% h/w = 0.888
\mode<presentation>
{
\usetheme{Warsaw}
%\usetheme{Boadilla}
%\usetheme{default}
\useoutertheme{split}
\setbeamercovered{transparent}
}
% To remove navigation symbols
\setbeamertemplate{navigation symbols}{}
\usepackage{amsmath}
\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}
\usepackage{pgf}
\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}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% My Macros
\setbeamercolor{postit}{bg=yellow,fg=black}
\setbeamercolor{emphbar}{bg=blue!20, fg=black}
\newcommand{\emphbar}[1]
{\begin{beamercolorbox}[rounded=true]{emphbar}
{#1}
\end{beamercolorbox}
}
%{\centerline{\fcolorbox{gray!50} {blue!10}{
%\begin{minipage}{0.9\linewidth}
% {#1}
%\end{minipage}
% }}}
\newcommand{\myemph}[1]{\structure{\emph{#1}}}
\newcommand{\PythonCode}[1]{\lstinline{#1}}
\newcommand{\tvtk}{\texttt{tvtk}}
\newcommand{\mlab}{\texttt{mlab}}
\newcounter{time}
\setcounter{time}{0}
\newcommand{\inctime}[1]{\addtocounter{time}{#1}{\vspace*{0.1in}\tiny \thetime\ m}}
\newcommand\BackgroundPicture[1]{%
\setbeamertemplate{background}{%
\parbox[c][\paperheight]{\paperwidth}{%
\vfill \hfill
\hfill \vfill
}}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Configuring the theme
%\setbeamercolor{normal text}{fg=white}
%\setbeamercolor{background canvas}{bg=black}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Title page
\title[]{3D data Visualization}
\author[FOSSEE Team] {FOSSEE}
\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
\date[] {1, November 2009\\Day 2, Session 3}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\pgfdeclareimage[height=0.75cm]{iitblogo}{iitblogo}
%\logo{\pgfuseimage{iitblogo}}
\AtBeginSection[]
{
\begin{frame}<beamer>
\frametitle{Outline}
\tableofcontents[currentsection,currentsubsection]
\end{frame}
}
%% 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}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DOCUMENT STARTS
\begin{document}
\begin{frame}
\maketitle
\end{frame}
\begin{frame}
\frametitle{Outline}
\tableofcontents
% You might wish to add the option [pausesections]
\end{frame}
\section{3D Data Visualization}
\begin{frame}
\frametitle{What is visualization?}
\Large
\begin{center}
Visual representation of data
\end{center}
\end{frame}
\begin{frame}
\frametitle{Is this new?}
\begin{center}
We have moved from:
\end{center}
\begin{columns}
\column{}
\hspace*{-1in}
\includegraphics[width=1.75in,height=1.75in, interpolate=true]{data/3832}
\column{}\hspace*{-0.25in}
To
\column{}
\hspace*{-1in}
\includegraphics[width=1.75in, height=1.75in, interpolate=true]{data/torus}
\end{columns}
\end{frame}
\begin{frame}
\frametitle{3D visualization}
\Large
\begin{center}
Harder but important
\end{center}
\end{frame}
\begin{frame}
\frametitle{Is this Graphics?}
\Large
\begin{center}
Visualization is about data!
\end{center}
\end{frame}
\begin{frame}
\frametitle{Examples: trajectory in space}
\Large
\begin{center}
\pgfimage[width=2.5in]{MEDIA/m2/mlab/plot3d_ex}
\end{center}
\end{frame}
\begin{frame}
\frametitle{Examples: Fire in a room}
\Large
\begin{center}
Demo of data
\end{center}
\inctime{10}
\end{frame}
\section{Tools available}
\subsection{mlab}
\begin{frame}
{Overview}
\Large
\begin{itemize}
\item Simple
\item Convenient
\item Full-featured
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Getting started}
\myemph{\Large Vanilla:}
\begin{lstlisting}[language=bash]
$ ipython -wthread
\end{lstlisting}
\myemph{\Large with Pylab:}
\begin{lstlisting}[language=bash]
$ ipython -pylab -wthread
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Using mlab}
\begin{lstlisting}
>>> from enthought.mayavi import mlab
\end{lstlisting}
\vspace*{0.5in}
\myemph{\Large Try these}
\vspace*{0.25in}
\begin{lstlisting}
>>> mlab.test_<TAB>
>>> mlab.test_contour3d()
>>> mlab.test_contour3d??
\end{lstlisting}
\end{frame}
\begin{frame}
{Exploring the view}
\begin{columns}
\column{0.6\textwidth}
\pgfimage[width=3in]{MEDIA/m2/contour3d}
\column{0.4\textwidth}
\begin{itemize}
\item Mouse
\item Keyboard
\item Toolbar
\item Mayavi icon\pgfimage[width=0.2in]{MEDIA/m2/m2_icon}
\end{itemize}
\end{columns}
\end{frame}
\begin{frame}[fragile]
\frametitle{plotting 3-D Surface: $x^2+y^2-z^2=1$}
\begin{lstlisting}
u,v = mgrid[-2:2:100j, -pi:pi:100j]
x=sqrt(u*u+1)*cos(v)
y=sqrt(u*u+1)*sin(v)
z=u
mlab.mesh(x,y,z)
\end{lstlisting}
\begin{figure}
\includegraphics[width=1in, height=1in, interpolate=true]{data/hyperboloid}
\end{figure}
\end{frame}
\begin{frame}[fragile]
\frametitle{mgrid}
\begin{itemize}
\item Creates a multidimensional ``meshgrid''
\item In this particular case, creates 2 2D arrays: u,v.
\end{itemize}
\begin{lstlisting}
In []: mgrid[0:3,0:3]
Out[]:
array([[[0, 0, 0],
[1, 1, 1],
[2, 2, 2]],
[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]])
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{mesh}
\begin{itemize}
\item Plots a surface from data supplied as 2D arrays.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{\mlab\ plotting functions}
\begin{columns}
\column{0.25\textwidth}
\myemph{Points in 3D space}
\column{0.5\textwidth}
\pgfimage[width=2in]{MEDIA/m2/mlab/points3d_ex}
\end{columns}
\begin{lstlisting}
>>> from numpy import *
>>> t = linspace(0, 2*pi, 50)
>>> u = cos(t)*pi
>>> x, y, z = sin(u), cos(u), sin(t)
\end{lstlisting}
\emphbar{\PythonCode{>>> mlab.points3d(x, y, z)}}
\end{frame}
\begin{frame}
\begin{columns}
\column{0.25\textwidth}
\myemph{Connected points in 3D space}
\column{0.5\textwidth}
\pgfimage[width=2.5in]{MEDIA/m2/mlab/plot3d_ex}
\end{columns}
\emphbar{\PythonCode{>>> mlab.plot3d(x, y, z, t)}}
Plots lines between the points
\end{frame}
\begin{frame}[fragile]
\begin{columns}
\column{0.25\textwidth}
\myemph{\Large 2D data}
\column{0.5\textwidth}
\pgfimage[width=2in]{MEDIA/m2/mlab/surf_ex}
\end{columns}
\begin{lstlisting}
>>> x, y = mgrid[-3:3:100j,-3:3:100j]
>>> z = sin(x*x + y*y)
\end{lstlisting}
\emphbar{\PythonCode{>>> mlab.surf(x, y, z)}}
\alert{Assumes the points are rectilinear}
\end{frame}
\begin{frame}[fragile]
\myemph{\Large 2D data: \texttt{mlab.mesh}}
\vspace*{0.25in}
\emphbar{\PythonCode{>>> mlab.mesh(x, y, z)}}
\alert{Points needn't be regular}
\vspace*{0.25in}
\begin{lstlisting}
>>> phi, theta = numpy.mgrid[0:pi:20j,
... 0:2*pi:20j]
>>> x = sin(phi)*cos(theta)
>>> y = sin(phi)*sin(theta)
>>> z = cos(phi)
>>> mlab.mesh(x, y, z,
... representation=
... 'wireframe')
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\begin{columns}
\column{0.25\textwidth}
\myemph{\Large 3D data}
\column{0.5\textwidth}
\pgfimage[width=1.5in]{MEDIA/m2/mlab/contour3d}\\
\end{columns}
\begin{lstlisting}
>>> x, y, z = ogrid[-5:5:64j,
... -5:5:64j,
... -5:5:64j]
>>> mlab.contour3d(x*x*0.5 + y*y +
z*z*2)
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\myemph{\Large 3D vector data: \PythonCode{mlab.quiver3d}}
\vspace*{0.25in}
\pgfimage[width=2in]{MEDIA/m2/mlab/quiver3d_ex}\\
\begin{lstlisting}
>>> mlab.test_quiver3d()
\end{lstlisting}
\emphbar{\PythonCode{obj = mlab.quiver3d(x, y, z, u, v, w)}}
\inctime{20}
\end{frame}
\subsection{Mayavi2}
\begin{frame}
\frametitle{Introduction to Mayavi}
\begin{itemize}
\item Most scientists not interested in details of visualization
\item Visualization of data files with a nice UI
\item Interactive visualization of data (think Matlab)
\item Embedding visualizations in applications
\item Customization
\end{itemize}
\pause
\begin{block}{The Goal}
Provide a \alert{flexible} library/app for every one of these needs!
\end{block}
\end{frame}
\begin{frame}
{Overview of features}
\vspace*{-0.3in}
\begin{center}
\hspace*{-0.2in}\pgfimage[width=5in]{MEDIA/m2/m2_app3_3}
\end{center}
\end{frame}
\begin{frame}
\frametitle{Mayavi in applications}
\vspace*{-0.3in}
\begin{center}
\hspace*{-0.2in}\pgfimage[width=4.5in]{MEDIA/m2/m2_envisage}
\end{center}
\end{frame}
\begin{frame}
\frametitle{Live in your dialogs}
\vspace*{0.1in}
\begin{center}
\hspace*{-0.2in}\pgfimage[width=2.5in]{MEDIA/m2/mlab_tui}
\end{center}
\end{frame}
\begin{frame}
{Exploring the documentation}
\begin{center}
\pgfimage[width=4in]{MEDIA/m2/m2_ug_doc}
\end{center}
\end{frame}
\begin{frame}
\frametitle{Summary}
\begin{itemize}
\item \url{http://code.enthought.com/projects/mayavi}
\item Uses VTK (\url{www.vtk.org})
\item BSD license
\item Linux, win32 and Mac OS X
\item Highly scriptable
\item Embed in Traits UIs (wxPython and PyQt4)
\item Envisage Plugins
\item Debian/Ubuntu/Fedora
\item \alert{Pythonic}
\end{itemize}
\inctime{10}
\end{frame}
\begin{frame}
{Getting hands dirty!}
\begin{block}{Motivational problem}
Atmospheric data of temperature over the surface of the earth.
Let temperature ($T$) vary linearly with height ($z$):
\begin{center}
$T = 288.15 - 6.5z$
\end{center}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Simple solution}
\begin{lstlisting}
lat = linspace(-89, 89, 37)
lon = linspace(0, 360, 37)
z = linspace(0, 100, 11)
\end{lstlisting}
\pause
\begin{lstlisting}
x, y, z = mgrid[0:360:37j,-89:89:37j,
0:100:11j]
t = 288.15 - 6.5*z
mlab.contour3d(x, y, z, t)
mlab.outline()
mlab.colorbar()
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Exercise: Lorenz equation}
\begin{columns}
\column{0.25\textwidth}
\begin{eqnarray*}
\frac{d x}{dt} &=& s (y-x)\\
\frac{d y}{d t} &=& rx -y -xz\\
\frac{d z}{d t} &=& xy - bz\\
\end{eqnarray*}
\column{0.25\textwidth}
Let $s=10,$
$r=28,$
$b=8./3.$
\end{columns}
\structure{\Large Region of interest}
\begin{lstlisting}
x, y, z = mgrid[-50:50:20j,-50:50:20j,
-10:60:20j]
\end{lstlisting}
\inctime{20}
\end{frame}
\begin{frame}[fragile]
\frametitle{Solution}
\begin{lstlisting}
def lorenz(x,y,z,s=10.,r=28.,b=8./3.):
u = s*(y-x)
v = r*x-y-x*z
w = x*y-b*z
return u,v,w
x,y,z = mgrid [-50:50:20j,-50:50:20j,
-10:60:20j ]
u,v,w = lorenz( x , y , z )
# Your plot here
#
mlab.show()
\end{lstlisting}
\end{frame}
\end{document}