{ "metadata": { "name": "", "signature": "sha256:20d5aa0a380f90d1f6bc869a1be9f0ef8063341c07fd4dec122de44d5e4bb347" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Tutorial for POPPY: Physical Optics Propagation in PYthon" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This document is not intended as comprehensive documentation for the ``poppy`` package. Please see [the documentation](http://pythonhosted.org/poppy/) for full details in the API, and the SPIE papers by Perrin et al. ([2012](http://adsabs.harvard.edu/abs/2012SPIE.8442E..3DP), 2014) for further background information and discussion of algorithms. However this notebook should be enough to get you started. \n", "\n", "Poppy implementsan object-oriented system for modeling physical optics propagation with diffraction, particularly for telescopic and coronagraphic imaging. Right now only image and pupil planes are supported using Fraunhofer (far-field) diffraction; Fresnel modeling of intermediate planes is a future goal." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Getting Started" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You should be able to install poppy directly from PyPI in the usual manner: \n", "\n", "
\n", " pip install poppy --upgrade\n", "" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import poppy\n", "%pylab inline --no-import-all\n", "matplotlib.rcParams['image.origin'] = 'lower'" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "For all of the following examples, you will have more informative text output when running the code if you first enable Python\u2019s logging mechanism to display log messages to screen. This can sometimes be more verbose than is desired, so feel free to turn this on or off as desired. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "import logging\n", "logging.getLogger('poppy').setLevel(logging.WARN) \n", "#Can be logging.CRITICAL, logging.WARN, logging.INFO, logging.DEBUG for increasingly verbose output" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Working with OpticalElements" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "OpticalElements can be instantiated from FITS files, or created by one of a large number of analytic function definitions implemented as AnalyticOpticalElement subclasses. Typically these classes take some number of arguments to set their properties. Once instantiated, any analytic function can be displayed on screen, sampled onto a numerical grid, and/or saved to disk.:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "ap = poppy.CircularAperture(radius=2)\n", "values = ap.sample(npix=512) # evaluate on 512 x 512 grid\n", "\n", "plt.figure(figsize=(10,5))\n", "ap.display(what='both') # display phase and amplitude transmission\n" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "