Python for solar physics - Amazon S3

Python for solar physics - Amazon S3

Steven Christe1,, Matt Earnshaw2, Keith Hughitt1, Jack Ireland1, Florian Mayer3, Albert Shih1, Alex Young1 1 2 3 NASA GSFC Imperial College London Vienna University of Technology SunPy: Python for solar physics Florian Mayer Outline What is Python?

Introduction to Python Scientific Python NumPy Matplotlib SciPy Python in solar physics What is Python? General-purpose Object-oriented (disputed)

Cross-platform Windows Mac OS Linux Other Unices (FreeBSD, Solaris, etc.) High-level Who uses Python? Internet companies Google Rackspace

Games Battlefield 2 Civilization 4 Graphics Walt Disney Science NASA ESRI Why Python? Easy Comprehensive standard library

(batteries included) Quality does vary, though. Good support for scientific tasks Permissive open-source license On the downside: Slower, but ways to speed up Python / IDL PYTHON

Free open-source software Without cost General purpose Good plotting No solar software IDL

Proprietary software License cost Small community Cumbersome plotting Solar software History of Python Implementation started 1989 by Guido van Rossum (BDFL) 2.0 appeared 2000 Garbage collection Unicode 3.0

appeared 2008 Python in science Astronomy Artificial intelligence & machine learning Bayesian Statistics Biology (including Neuroscience) Dynamical systems Economics and Econometrics Electromagnetics Electrical Engineering Geosciences Molecular modeling

Signal processing Symbolic math, number theory Python in astronomy pyFITS read FITS files pyRAF run IRAF tasks pywcs pyephem compute positions of objects in space spacepy (space sciences, just released) Planned standard library AstroPy Zen of Python by Tim Peters

Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Readability counts. There should be one and preferably only one obvious way to do it. Although that way may not be obvious at first unless you're Dutch. >>> import this Python tutorial Brief introduction into Python

Python as a calculator Infix notation operations Python 2 defaults to floor division More mathematical operations in math Complex math in cmath Integers and Floats Integers are arbitrary size. Floats are platform doubles. decimal module for arbitrary precision decimal numbers

fractions module for fractions Strings and Unicode STRINGS / BYTES "foo" Store bytes Useful for binary data UNICODE

u"foo" Store unicode codepoints Useful for text Behave as expected for multibyte characters Lists and Tuples [1, 2, 3, 4] Mutable Multiple records

(1, u"foo") Immutable Different objects describing one record Control flow if/elif/else for-loop break continue else

while-loop pass Functions Default arguments are evaluated once at compile time! lambda alternative syntax for definition of trivial functions Functions are objects, too! Dictionaries Unordered key-value mappings Approx. O(1) lookup and storage Keys

must be immutable (hashable) Sets Unordered collection of unique objects Approx. O(1) membership test Members must be immutable (hashable) Object-orientation Classes Explicit self

Multiple Also inheritance in IDL 8; no escaping it Exception handling try / except raise Exceptions / else inherit from Exception Current versions

PYTHON 2.7 PYTHON 3.2 Print statement String / Unicode Floor division Relative imports Lists

Print function Bytes / String Float Division Absolute imports Views Tons of other changes http://bit.ly/newpy3 NumPy Fundamental

package for science in Python Multidimensional fixed-size, homogenous arrays Derived objects: e.g. matrices More efficient Less code NumPy: Create arrays Python arange list

linspace / logspace ones / zeros / eye / diag random NumPy: Vectorization Absence of explicit looping Conciseness less bugs Closer to mathematical notation More pythonic. Also possible for user functions

NumPy: Broadcasting Expansion of multidimensional arrays Implicit element-by-element behavior NumPy: Broadcasting illustrated NumPy: Indexing arr[0,3:5]

arr[4:,4:] arr[:,2] arr[2::2,::2] Other Options Boolean area Integer area NumPy Data-types: Integers Type Remarks

Character code byte compatible: C char 'b' short compatible: C short 'h' intc

compatible: C int 'i' int_ compatible: Python int 'l' longlong compatible: C long long

'q' intp large enough to fit a pointer 'p' int8 8 bits int16

16 bits int32 32 bits int64 64 bits NumPy Data-types: Unsigned Type Remarks

Character code ubyte compatible: C u. char 'B' ushort compatible: C u. short 'H' uintc compatible: C unsigned int

'I' uint compatible: Python int 'L' ulonglong compatible: C long long 'Q'

uintp large enough to fit a pointer 'P' uint8 8 bits uint16 16 bits

uint32 32 bits uint64 64 bits NumPy Data-types: Floating point Type Remarks half

Character code 'e' single compatible: C float 'f' double compatible: C double float_ compatible: Python

float 'd' longfloat compatible: C long float 'g' float16 16 bits float32

32 bits float64 64 bits float96 96 bits, platform? float128 128 bits, platform? NumPy Data-types: Complex

Type Remarks csingle complex_ Character code 'F' compatible: Python complex clongfloat 'D'

'G' complex64 two 32-bit floats complex128 two 64-bit floats complex192 two 96-bit floats, platform? complex256

two 128-bit floats, platform? Optimize Python NumPy: weave.blitz (fast NumPy expressions) NumPy: weave.inline (inline C/C++) f2py (interface Fortran) Pyrex/Cython (python-like compiled language) Matplotlib 2D plotting library

Some 3D support Publication-quality figures Make easy things easy and hard things possible Configurable using matplotlibrc Matplotlib: Simple Plot import numpy as np from matplotlib import pyplot as plt t = np.linspace(0, 2, 200) s = np.sin(2*pi*t)

plt.plot(t, s, linewidth=1.0) plt.xlabel('time (s)') plt.ylabel('voltage (mV)') plt.title('About as simple as it gets, folks') plt.grid(True) plt.show() Matplotlib: Subplots import numpy as np from matplotlib import pyplot as plt def f(t): s1 = np.cos(2*pi*t) e1 = np.exp(-t) return np.multiply(s1,e1) t1 = np.arange(0.0, 5.0, 0.1) t2 = np.arange(0.0, 5.0, 0.02)

t3 = np.arange(0.0, 2.0, 0.01) plt.subplot(211) l = plot(t1, f(t1), 'bo', t2, f(t2), 'k--', markerfacecolor='green') plt.grid(True) plt.title('A tale of 2 subplots') plt.ylabel('Damped oscillation') plt.subplot(212) plt.plot(t3, np.cos(2*pi*t3), 'r.') plt.grid(True) plt.xlabel('time (s)') plt.ylabel('Undamped') plt.show() Matplotlib: Paths import

import import import numpy as np matplotlib.path as mpath matplotlib.patches as mpatches matplotlib.pyplot as plt Path = mpath.Path fig = plt.figure() ax = fig.add_subplot(111) pathdata = [ (Path.MOVETO, (1.58, -2.57)), (Path.CURVE4, (0.35, -1.1)), (Path.CURVE4, (-1.75, 2.0)),

(Path.CURVE4, (0.375, 2.0)), (Path.LINETO, (0.85, 1.15)), (Path.CURVE4, (2.2, 3.2)), (Path.CURVE4, (3, 0.05)), (Path.CURVE4, (2.0, -0.5)), (Path.CLOSEPOLY, (1.58, -2.57)), ] codes, verts = zip(*pathdata) path = mpath.Path(verts, codes) patch = mpatches.PathPatch(path, facecolor='red', edgecolor='yellow', alpha=0.5) ax.add_patch(patch) x, y = zip(*path.vertices) line, = ax.plot(x, y, 'go-') ax.grid() ax.set_xlim(-3,4)

ax.set_ylim(-3,4) ax.set_title('spline paths') plt.show() Matplotlib: mplot3d from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import (LinearLocator, FixedLocator, FormatStrFormatter) import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.gca(projection='3d') X = np.arange(-5, 5, 0.25) Y = np.arange(-5, 5, 0.25) X, Y = np.meshgrid(X, Y)

R = np.sqrt(X**2 + Y**2) Z = np.sin(R) surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, linewidth=0, antialiased=False) ax.set_zlim3d(-1.01, 1.01) ax.w_zaxis.set_major_locator(LinearLocator(10)) ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f')) fig.colorbar(surf, shrink=0.5, aspect=5) plt.show() Matplotlib: Ellipses import numpy as np from matplotlib import pyplot as plt from matplotlib.patches import Ellipse NUM = 250

ells = [ Ellipse(xy=rand(2)*10, width=np.rand(), height=np.rand(), angle=np.rand()*360) for i in xrange(NUM)] fig = plt.figure() ax = fig.add_subplot(111, aspect='equal') for e in ells: ax.add_artist(e) e.set_clip_box(ax.bbox) e.set_alpha(rand()) e.set_facecolor(rand(3)) ax.set_xlim(0, 10) ax.set_ylim(0, 10) plt.show() Matplotlib Example: EEG

viewer Matplotlib: Gallery SciPy Statistics Optimization Numerical integration Linear algebra Fourier transforms Signal processing Image processing ODE solvers Special functions

And more. SciPy Example: Problem Three phases Glass sample light grey Bubbles black Sand grains dark grey Determine Fraction of the

sample covered by these Typical size of sand SciPy Example: Solution 1. 2. 3. 4. 5. 6. 7. 8.

Open image and examine it Crop away panel at bottom Examine histogram Apply median filter Determine thresholds Display colored image Use mathematical morphology to clean the different phases Attribute labels to all bubbles and sand grains Remove from the sand mask grains that are smaller than 10 pixels Compute the mean size of bubbles.

SunPy Spatially aware maps Read FITS files RHESSI SDO/AIA EIT TRACE LASCO standard color tables and hist equalization basic image coalignment VSO

HEK SunPy: Maps Spatially aware NumPy array Based array on SolarSoft Map. MapCube SunPy: VSO Two

APIs Legacy API (tries to mimic IDL vso_search) New API based on boolean operations SunPy: HEK HER Create VSO queries from HER responses WIP: Plot HER events over images SunPy: Plotman

SunPy: Get involved! Use it! File feature requests Express opinion on the mailing list / in IRC File bug reports Contribute documentation Contribute code SunPy: Reaching us Website: http://sunpy.org Mailing list: http://bit.ly/sunpy-forum IRC: #sunpy on irc.freenode.net Git code repository: https://

github.com/sunpy/sunpy Reaching me Email: [email protected] IRC: __name__ in #sunpy on freenode XMPP: [email protected] Resources SciPy: http://scipy.org Astronomical modules: http://

bit.ly/astropy Science modules: http:// bit.ly/sciencepy NumPy/IDL: http://hvrd.me/numpy-idl Python for interactive data analysis: http://bit.ly/pydatatut SciPy lecture notes: http:// bit.ly/scipylec Thanks Steven Christe1, Matt Earnshaw2 Keith Hughitt1 Jack Ireland1

Florian Mayer3 Albert Shih1 Alex Young1 1 2 3 Thanks to NASA GSFC Imperial College London Vienna University of Technology

Recently Viewed Presentations

  • Unfinished Earth - Oneonta

    Unfinished Earth - Oneonta

    Unfinished Earth History and modern continuation of planetary accretion and The Origin of Crust Earth's Early History Hadean Eon - Earth's first 500 Ma Intense bombardment by bolides (meteors, comets, etc.)
  • Food Chains

    Food Chains

    Food Chains All energy comes from the sun Plants need light for photosynthesis, what else do they need? Many animals eat only plants-they are vegetarians. We call animals that eat plants primary (first) consumers The next group, called the secondary...
  • Respond and support with quotes

    Respond and support with quotes

    Disobedient wretch!" Quite a change from 'hopeful lady of my earth. Write a paragraph . . . Tell me where your sympathies lie; is Juliet right to feel she doesn't want to marry Paris, or does Lord Capulet have the...
  • Clinical Terminology Alan Rector School of Computer Science

    Clinical Terminology Alan Rector School of Computer Science

    Logic + Web liberates users Open 'Just-in-time Terminology' If you can test the consequences then you can give users the freedom to develop New compositions New additions to established lists Hide the complexity "Close to user forms" GALEN's "Intermediate Representation"...
  • Garrett Poppe, Liv Nguekap, Adrian Mirabel

    Garrett Poppe, Liv Nguekap, Adrian Mirabel

    Density-based spatial clustering of applications with noise (DBSCAN) is a data clustering algorithm proposed 1996.[1] "It is a density-based clustering algorithm: given a set of points in some space, it groups together points that are closely packed together (points with...
  • State and Regional Registries: Implications for Policy

    State and Regional Registries: Implications for Policy

    Fleet Average Emission Standards Regulation Reduces California's Fleetwide LDV GHG Emissions Average Price Increase of New, Low CO2 Vehicles Net Savings for Vehicle Purchaser Other Economic Impacts More jobs (53,000) Higher income ($5 billion/year) Positive impacts on low income communities...
  • Droplet Size Standardization* Symbol Color Code Approximate Dv0.5

    Droplet Size Standardization* Symbol Color Code Approximate Dv0.5

    Labels for Engenia, XtendiMax, and Fexapan restrict sprayer speed to a maximum of 15 MPH. They do that because sprayer speed can affect drift. When driving fast, there is more bounce on the boom, meaning boom height during the bounce...
  • Poetry - MS. DEASY'S NOTES

    Poetry - MS. DEASY'S NOTES

    Peter Piper Picked a Peck of Pickled Peppers. Quincy'squiltersquitquiltingquickly. ... Allusion. A reference to another writer or to something else which is not really part of the main body of the poem. "He was a real Romeo with the ladies."...