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
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
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)),
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
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 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...
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...
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"...
Density-based spatial clustering of applications with noise (DBSCAN) is a data clustering algorithm proposed 1996. "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...
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...
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...
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."...
Ready to download the document? Go ahead and hit continue!