sunpy: python for solar physics

59
Steven Christe 1, , Matt Earnshaw 2 , Keith Hughitt 1 , Jack Ireland 1 , Florian Mayer 3 , Albert Shih 1 , Alex Young 1 1 NASA GSFC 2 Imperial College London 3 Vienna University of Technology Florian Mayer

Upload: segfaulthunter

Post on 10-May-2015

1.360 views

Category:

Education


1 download

TRANSCRIPT

Page 1: SunPy: Python for solar physics

Steven Christe1,, Matt Earnshaw2, Keith Hughitt1, Jack Ireland1, Florian Mayer3, Albert Shih1, Alex Young1

1 NASA GSFC 2 Imperial College London 3 Vienna University of Technology

Florian Mayer

Page 2: SunPy: Python for solar physics

What is Python? Introduction to Python Scientific Python

NumPy

Matplotlib

SciPy

Python in solar physics

Page 3: SunPy: Python for solar physics

General-purpose Object-oriented (disputed) Cross-platform

Windows

Mac OS

Linux

Other Unices (FreeBSD, Solaris, etc.)

High-level

Page 4: SunPy: Python for solar physics

Internet companies Google Rackspace

Games Battlefield 2 Civilization 4

Graphics Walt Disney

Science NASA ESRI

Page 5: SunPy: Python for solar physics

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

Page 6: SunPy: Python for solar physics

PYTHON IDL

Proprietary software License cost Small community Cumbersome plotting Solar software

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

Page 7: SunPy: Python for solar physics

Implementation started 1989 by Guido van Rossum (BDFL)

2.0 appeared 2000

Garbage collection

Unicode

3.0 appeared 2008

Page 8: SunPy: Python for solar physics

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

Page 9: SunPy: Python for solar physics

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

Page 10: SunPy: Python for solar physics

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

Page 11: SunPy: Python for solar physics

Brief introduction into Python

Page 12: SunPy: Python for solar physics

Infix notation operations Python 2 defaults to floor division More mathematical operations in math Complex math in cmath

Page 13: SunPy: Python for solar physics

Integers are arbitrary size. Floats are platform doubles. decimal module for arbitrary precision

decimal numbers fractions module for fractions

Page 14: SunPy: Python for solar physics

STRINGS / BYTES

"foo" Store bytes Useful for binary data

UNICODE

u"foo" Store unicode codepoints Useful for text Behave as expected for

multibyte characters

Page 15: SunPy: Python for solar physics

[1, 2, 3, 4] Mutable Multiple records

(1, u"foo") Immutable Different objects

describing one record

Page 16: SunPy: Python for solar physics

if/elif/else for-loop

break

continue

else

while-loop pass

Page 17: SunPy: Python for solar physics

Default arguments are evaluated once at compile time!

lambda alternative syntax for definition of trivial functions

Functions are objects, too!

Page 18: SunPy: Python for solar physics

Unordered key-value mappings Approx. O(1) lookup and storage Keys must be immutable (hashable)

Page 19: SunPy: Python for solar physics

Unordered collection of unique objects Approx. O(1) membership test Members must be immutable (hashable)

Page 20: SunPy: Python for solar physics

Classes Explicit self Multiple inheritance

Also in IDL 8; no escaping it

Page 21: SunPy: Python for solar physics

try / except / else raise Exceptions inherit from Exception

Page 22: SunPy: Python for solar physics

PYTHON 2.7

Print statement String / Unicode Floor division Relative imports Lists

PYTHON 3.2

Print function Bytes / String Float Division Absolute imports Views

Tons of other changes http://bit.ly/newpy3

Page 23: SunPy: Python for solar physics

Fundamental package for science in Python Multidimensional fixed-size, homogenous

arrays Derived objects: e.g. matrices More efficient Less code

Page 24: SunPy: Python for solar physics

Python list arange linspace / logspace ones / zeros / eye / diag random

Page 25: SunPy: Python for solar physics

Absence of explicit looping

Conciseness – less bugs

Closer to mathematical notation

More pythonic.

Also possible for user functions

Page 26: SunPy: Python for solar physics

Expansion of multidimensional arrays Implicit element-by-element behavior

Page 27: SunPy: Python for solar physics
Page 28: SunPy: Python for solar physics
Page 29: SunPy: Python for solar physics
Page 30: SunPy: Python for solar physics
Page 31: SunPy: Python for solar physics
Page 32: SunPy: Python for solar physics
Page 33: SunPy: Python for solar physics

Boolean area Integer area

Page 34: SunPy: Python for solar physics

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

Page 35: SunPy: Python for solar physics

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

Page 36: SunPy: Python for solar physics

Type Remarks Character code

half '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?

Page 37: SunPy: Python for solar physics

Type Remarks Character code

csingle 'F'

complex_ compatible: Python complex

'D'

clongfloat 'G'

complex64 two 32-bit floats

complex128 two 64-bit floats

complex192 two 96-bit floats, platform?

complex256 two 128-bit floats, platform?

Page 38: SunPy: Python for solar physics

NumPy: weave.blitz (fast NumPy expressions)

NumPy: weave.inline (inline C/C++) f2py (interface Fortran) Pyrex/Cython (python-like compiled

language)

Page 39: SunPy: Python for solar physics

2D plotting library Some 3D support Publication-quality

figures “Make easy things easy

and hard things possible”

Configurable using matplotlibrc

Page 40: SunPy: Python for solar physics

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()

Page 41: SunPy: Python for solar physics

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()

Page 42: SunPy: Python for solar physics

import numpy as np import matplotlib.path as mpath import matplotlib.patches as mpatches import 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()

Page 43: SunPy: Python for solar physics

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()

Page 44: SunPy: Python for solar physics

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()

Page 45: SunPy: Python for solar physics
Page 46: SunPy: Python for solar physics
Page 47: SunPy: Python for solar physics

Statistics Optimization Numerical integration Linear algebra Fourier transforms Signal processing Image processing ODE solvers Special functions And more.

Page 48: SunPy: Python for solar physics

Three phases

Glass sample – light grey

Bubbles – black

Sand grains – dark grey

Determine

Fraction of the sample covered by these

Typical size of sand grains or bubbles

Page 49: SunPy: Python for solar physics

1. Open image and examine it 2. Crop away panel at bottom

Examine histogram 3. Apply median filter 4. Determine thresholds 5. Display colored image 6. Use mathematical morphology to clean the

different phases 7. Attribute labels to all bubbles and sand grains

Remove from the sand mask grains that are smaller than 10 pixels

8. Compute the mean size of bubbles.

Page 50: SunPy: Python for solar physics

Spatially aware maps Read FITS files

RHESSI SDO/AIA EIT TRACE LASCO

standard color tables and hist equalization basic image coalignment VSO HEK

Page 51: SunPy: Python for solar physics

Spatially aware array NumPy array Based on SolarSoft Map.

MapCube

Page 52: SunPy: Python for solar physics

Two APIs

Legacy API (tries to mimic IDL vso_search)

New API based on boolean operations

Page 53: SunPy: Python for solar physics

Create VSO queries from HER responses WIP: Plot HER events over images

Page 54: SunPy: Python for solar physics
Page 55: SunPy: Python for solar physics

Use it! File feature requests Express opinion on the mailing list / in IRC File bug reports Contribute documentation Contribute code

Page 56: SunPy: Python for solar physics

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

Page 57: SunPy: Python for solar physics

Email: [email protected] IRC: __name__ in #sunpy on freenode XMPP: [email protected]

Page 58: SunPy: Python for solar physics

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 This talk: http://graz-talk.bitsrc.org SunPy doc: http://sunpy.org/doc/

Page 59: SunPy: Python for solar physics

Steven Christe1, Matt Earnshaw2

Keith Hughitt1 Jack Ireland1 Florian Mayer3 Albert Shih1 Alex Young1

1 NASA GSFC 2 Imperial College London 3 Vienna University of Technology

Thanks to