sunpy: python for solar physics
TRANSCRIPT
![Page 1: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/2.jpg)
What is Python? Introduction to Python Scientific Python
NumPy
Matplotlib
SciPy
Python in solar physics
![Page 3: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/4.jpg)
Internet companies Google Rackspace
Games Battlefield 2 Civilization 4
Graphics Walt Disney
Science NASA ESRI
![Page 5: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/11.jpg)
Brief introduction into Python
![Page 12: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/15.jpg)
[1, 2, 3, 4] Mutable Multiple records
(1, u"foo") Immutable Different objects
describing one record
![Page 16: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/16.jpg)
if/elif/else for-loop
break
continue
else
while-loop pass
![Page 17: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/18.jpg)
Unordered key-value mappings Approx. O(1) lookup and storage Keys must be immutable (hashable)
![Page 19: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/19.jpg)
Unordered collection of unique objects Approx. O(1) membership test Members must be immutable (hashable)
![Page 20: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/20.jpg)
Classes Explicit self Multiple inheritance
Also in IDL 8; no escaping it
![Page 21: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/21.jpg)
try / except / else raise Exceptions inherit from Exception
![Page 22: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/24.jpg)
Python list arange linspace / logspace ones / zeros / eye / diag random
![Page 25: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/26.jpg)
Expansion of multidimensional arrays Implicit element-by-element behavior
![Page 27: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/27.jpg)
![Page 28: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/28.jpg)
![Page 29: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/29.jpg)
![Page 30: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/30.jpg)
![Page 31: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/31.jpg)
![Page 32: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/32.jpg)
![Page 33: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/33.jpg)
Boolean area Integer area
![Page 34: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/35.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/36.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/37.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/38.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/39.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/40.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/41.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/42.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/43.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/44.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/45.jpg)
![Page 46: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/46.jpg)
![Page 47: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/47.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/48.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/49.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/50.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/51.jpg)
Spatially aware array NumPy array Based on SolarSoft Map.
MapCube
![Page 52: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/52.jpg)
Two APIs
Legacy API (tries to mimic IDL vso_search)
New API based on boolean operations
![Page 53: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/53.jpg)
Create VSO queries from HER responses WIP: Plot HER events over images
![Page 54: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/54.jpg)
![Page 55: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/55.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/56.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/57.jpg)
Email: [email protected] IRC: __name__ in #sunpy on freenode XMPP: [email protected]
![Page 58: SunPy: Python for solar physics](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/58.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052822/554e8623b4c905fc368b45d3/html5/thumbnails/59.jpg)
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