<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>astropy.wcs.wcs — Astropy v0.2.4</title> <link rel="stylesheet" href="../../../_static/bootstrap-astropy.css" type="text/css" /> <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../../../', VERSION: '0.2.4', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../../../_static/jquery.js"></script> <script type="text/javascript" src="../../../_static/underscore.js"></script> <script type="text/javascript" src="../../../_static/doctools.js"></script> <script type="text/javascript" src="../../../_static/sidebar.js"></script> <link rel="shortcut icon" href="../../../_static/astropy_logo.ico"/> <link rel="top" title="Astropy v0.2.4" href="../../../index.html" /> <link rel="up" title="astropy.wcs" href="../wcs.html" /> </head> <body> <div class="topbar"> <a class="brand" title="Documentation Home" href="../../../index.html"></a> <ul> <li><a class="homelink" title="AstroPy Homepage" href="http://www.astropy.org"></a></li> <li><a title="General Index" href="../../../genindex.html">Index</a></li> <li><a title="Python Module Index" href="../../../py-modindex.html">Modules</a></li> <li> <form action="../../../search.html" method="get"> <input type="text" name="q" placeholder="Search" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </li> </ul> </div> <div class="related"> <h3>Navigation</h3> <ul> <li> <a href="../../../index.html">Astropy v0.2.4</a> » </li> <li><a href="../../index.html" >Module code</a> »</li> <li><a href="../wcs.html" accesskey="U">astropy.wcs</a> »</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <h1>Source code for astropy.wcs.wcs</h1><div class="highlight"><pre> <span class="c"># Licensed under a 3-clause BSD style license - see LICENSE.rst</span> <span class="sd">"""</span> <span class="sd">Under the hood, there are 3 separate classes that perform different</span> <span class="sd">parts of the transformation:</span> <span class="sd"> - `~astropy.wcs.Wcsprm`: Is a direct wrapper of the core WCS</span> <span class="sd"> functionality in `wcslib`_.</span> <span class="sd"> - `~astropy.wcs.Sip`: Handles polynomial distortion as defined in the</span> <span class="sd"> `SIP`_ convention.</span> <span class="sd"> - `~astropy.wcs.DistortionLookupTable`: Handles `Paper IV`_ distortion</span> <span class="sd"> lookup tables.</span> <span class="sd">Additionally, the class `WCS` aggregates all of these transformations</span> <span class="sd">together in a pipeline:</span> <span class="sd"> - Detector to image plane correction (by a pair of</span> <span class="sd"> `~astropy.wcs.DistortionLookupTable` objects).</span> <span class="sd"> - `SIP`_ distortion correction (by an underlying `~astropy.wcs.Sip`</span> <span class="sd"> object)</span> <span class="sd"> - `Paper IV`_ table-lookup distortion correction (by a pair of</span> <span class="sd"> `~astropy.wcs.DistortionLookupTable` objects).</span> <span class="sd"> - `wcslib`_ WCS transformation (by a `~astropy.wcs.Wcsprm` object)</span> <span class="sd">"""</span> <span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">division</span> <span class="c"># confidence high</span> <span class="c"># STDLIB</span> <span class="kn">import</span> <span class="nn">copy</span> <span class="kn">import</span> <span class="nn">io</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="nn">warnings</span> <span class="c"># THIRD-PARTY</span> <span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span> <span class="c"># LOCAL</span> <span class="kn">from</span> <span class="nn">..io</span> <span class="kn">import</span> <span class="n">fits</span> <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">_docutil</span> <span class="k">as</span> <span class="n">__</span> <span class="k">try</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">_wcs</span> <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> <span class="n">_wcs</span> <span class="o">=</span> <span class="bp">None</span> <span class="kn">from</span> <span class="nn">..utils</span> <span class="kn">import</span> <span class="n">deprecated</span><span class="p">,</span> <span class="n">deprecated_attribute</span> <span class="kn">from</span> <span class="nn">..</span> <span class="kn">import</span> <span class="n">log</span> <span class="k">if</span> <span class="n">_wcs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="k">assert</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">_sanity_check</span><span class="p">(),</span> \ <span class="s">"astropy.wcs did not pass its sanity check for your build "</span> \ <span class="s">"on your platform."</span> <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">>=</span> <span class="mi">3</span><span class="p">:</span> <span class="c"># pragma: py3</span> <span class="n">string_types</span> <span class="o">=</span> <span class="p">(</span><span class="nb">bytes</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="c"># pragma: py2</span> <span class="n">string_types</span> <span class="o">=</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">)</span> <span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s">'FITSFixedWarning'</span><span class="p">,</span> <span class="s">'WCS'</span><span class="p">,</span> <span class="s">'find_all_wcs'</span><span class="p">,</span> <span class="s">'DistortionLookupTable'</span><span class="p">,</span> <span class="s">'Sip'</span><span class="p">,</span> <span class="s">'Tabprm'</span><span class="p">,</span> <span class="s">'UnitConverter'</span><span class="p">,</span> <span class="s">'Wcsprm'</span><span class="p">,</span> <span class="s">'WCSBase'</span><span class="p">]</span> <span class="k">if</span> <span class="n">_wcs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">WCSBase</span> <span class="o">=</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">_Wcs</span> <span class="n">DistortionLookupTable</span> <span class="o">=</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">DistortionLookupTable</span> <span class="n">Sip</span> <span class="o">=</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">Sip</span> <span class="n">UnitConverter</span> <span class="o">=</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">UnitConverter</span> <span class="n">Wcsprm</span> <span class="o">=</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">Wcsprm</span> <span class="n">Tabprm</span> <span class="o">=</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">Tabprm</span> <span class="c"># Copy all the constants from the C extension into this module's namespace</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> <span class="k">if</span> <span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">'WCSSUB'</span><span class="p">)</span> <span class="ow">or</span> <span class="n">key</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">'WCSHDR'</span><span class="p">)</span> <span class="ow">or</span> <span class="n">key</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">'WCSHDO'</span><span class="p">)):</span> <span class="nb">locals</span><span class="p">()[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span> <span class="n">__all__</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="n">UnitConverter</span> <span class="o">=</span> <span class="n">deprecated</span><span class="p">(</span> <span class="s">'0.2'</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s">'UnitConverter'</span><span class="p">,</span> <span class="n">alternative</span><span class="o">=</span><span class="s">'astropy.units'</span><span class="p">)(</span> <span class="n">UnitConverter</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">WCSBase</span> <span class="o">=</span> <span class="nb">object</span> <span class="n">Wcsprm</span> <span class="o">=</span> <span class="nb">object</span> <span class="n">DistortionLookupTable</span> <span class="o">=</span> <span class="nb">object</span> <span class="n">Sip</span> <span class="o">=</span> <span class="nb">object</span> <span class="n">UnitConverter</span> <span class="o">=</span> <span class="nb">object</span> <span class="n">Tabprm</span> <span class="o">=</span> <span class="nb">object</span> <span class="c"># Additional relax bit flags</span> <span class="n">WCSHDO_SIP</span> <span class="o">=</span> <span class="mh">0x10000</span> <span class="k">def</span> <span class="nf">_parse_keysel</span><span class="p">(</span><span class="n">keysel</span><span class="p">):</span> <span class="n">keysel_flags</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">if</span> <span class="n">keysel</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">keysel</span><span class="p">:</span> <span class="k">if</span> <span class="n">element</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">'image'</span><span class="p">:</span> <span class="n">keysel_flags</span> <span class="o">|=</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">WCSHDR_IMGHEAD</span> <span class="k">elif</span> <span class="n">element</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">'binary'</span><span class="p">:</span> <span class="n">keysel_flags</span> <span class="o">|=</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">WCSHDR_BIMGARR</span> <span class="k">elif</span> <span class="n">element</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">'pixel'</span><span class="p">:</span> <span class="n">keysel_flags</span> <span class="o">|=</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">WCSHDR_PIXLIST</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"keysel must be a list of 'image', 'binary' "</span> <span class="o">+</span> <span class="s">"and/or 'pixel'"</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">keysel_flags</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> <span class="k">return</span> <span class="n">keysel_flags</span> <div class="viewcode-block" id="FITSFixedWarning"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.FITSFixedWarning.html#astropy.wcs.wcs.FITSFixedWarning">[docs]</a><span class="k">class</span> <span class="nc">FITSFixedWarning</span><span class="p">(</span><span class="ne">Warning</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> The warning raised when the contents of the FITS header have been</span> <span class="sd"> modified to be standards compliant.</span> <span class="sd"> """</span> <span class="k">pass</span> </div> <div class="viewcode-block" id="WCS"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS">[docs]</a><span class="k">class</span> <span class="nc">WCS</span><span class="p">(</span><span class="n">WCSBase</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> WCS objects perform standard WCS transformations, and correct for</span> <span class="sd"> `SIP`_ and `Paper IV`_ table-lookup distortions, based on the WCS</span> <span class="sd"> keywords and supplementary data read from a FITS file.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> <span class="sd"> header : astropy.io.fits header object, string, dict-like, or None, optional</span> <span class="sd"> If *header* is not provided or None, the object will be</span> <span class="sd"> initialized to default values.</span> <span class="sd"> fobj : An astropy.io.fits file (hdulist) object, optional</span> <span class="sd"> It is needed when header keywords point to a `Paper IV`_</span> <span class="sd"> Lookup table distortion stored in a different extension.</span> <span class="sd"> key : string, optional</span> <span class="sd"> The name of a particular WCS transform to use. This may be</span> <span class="sd"> either ``' '`` or ``'A'``-``'Z'`` and corresponds to the</span> <span class="sd"> ``\"a\"`` part of the ``CTYPEia`` cards. *key* may only be</span> <span class="sd"> provided if *header* is also provided.</span> <span class="sd"> minerr : float, optional</span> <span class="sd"> The minimum value a distortion correction must have in order</span> <span class="sd"> to be applied. If the value of ``CQERRja`` is smaller than</span> <span class="sd"> *minerr*, the corresponding distortion is not applied.</span> <span class="sd"> relax : bool or int, optional</span> <span class="sd"> Degree of permissiveness:</span> <span class="sd"> - `True` (default): Admit all recognized informal extensions</span> <span class="sd"> of the WCS standard.</span> <span class="sd"> - `False`: Recognize only FITS keywords defined by the</span> <span class="sd"> published WCS standard.</span> <span class="sd"> - `int`: a bit field selecting specific extensions to accept.</span> <span class="sd"> See :ref:`relaxread` for details.</span> <span class="sd"> naxis : int or sequence, optional</span> <span class="sd"> Extracts specific coordinate axes using</span> <span class="sd"> :meth:`~astropy.wcs.Wcsprm.sub`. If a header is provided, and</span> <span class="sd"> *naxis* is not ``None``, *naxis* will be passed to</span> <span class="sd"> :meth:`~astropy.wcs.Wcsprm.sub` in order to select specific</span> <span class="sd"> axes from the header. See :meth:`~astropy.wcs.Wcsprm.sub` for</span> <span class="sd"> more details about this parameter.</span> <span class="sd"> keysel : sequence of flags, optional</span> <span class="sd"> A sequence of flags used to select the keyword types</span> <span class="sd"> considered by wcslib. When ``None``, only the standard image</span> <span class="sd"> header keywords are considered (and the underlying wcspih() C</span> <span class="sd"> function is called). To use binary table image array or pixel</span> <span class="sd"> list keywords, *keysel* must be set.</span> <span class="sd"> Each element in the list should be one of the following</span> <span class="sd"> strings:</span> <span class="sd"> - 'image': Image header keywords</span> <span class="sd"> - 'binary': Binary table image array keywords</span> <span class="sd"> - 'pixel': Pixel list keywords</span> <span class="sd"> Keywords such as ``EQUIna`` or ``RFRQna`` that are common to</span> <span class="sd"> binary table image arrays and pixel lists (including</span> <span class="sd"> ``WCSNna`` and ``TWCSna``) are selected by both 'binary' and</span> <span class="sd"> 'pixel'.</span> <span class="sd"> colsel : sequence of int, optional</span> <span class="sd"> A sequence of table column numbers used to restrict the WCS</span> <span class="sd"> transformations considered to only those pertaining to the</span> <span class="sd"> specified columns. If `None`, there is no restriction.</span> <span class="sd"> fix : bool, optional</span> <span class="sd"> When `True` (default), call `~astropy.wcs._wcs.Wcsprm.fix` on</span> <span class="sd"> the resulting object to fix any non-standard uses in the</span> <span class="sd"> header. `FITSFixedWarning` Warnings will be emitted if any</span> <span class="sd"> changes were made.</span> <span class="sd"> Raises</span> <span class="sd"> ------</span> <span class="sd"> MemoryError</span> <span class="sd"> Memory allocation failed.</span> <span class="sd"> ValueError</span> <span class="sd"> Invalid key.</span> <span class="sd"> KeyError</span> <span class="sd"> Key not found in FITS header.</span> <span class="sd"> AssertionError</span> <span class="sd"> Lookup table distortion present in the header but *fobj* was</span> <span class="sd"> not provided.</span> <span class="sd"> Notes</span> <span class="sd"> -----</span> <span class="sd"> 1. astropy.wcs supports arbitrary *n* dimensions for the core WCS</span> <span class="sd"> (the transformations handled by WCSLIB). However, the Paper IV</span> <span class="sd"> lookup table and SIP distortions must be two dimensional.</span> <span class="sd"> Therefore, if you try to create a WCS object where the core WCS</span> <span class="sd"> has a different number of dimensions than 2 and that object</span> <span class="sd"> also contains a Paper IV lookup table or SIP distortion, a</span> <span class="sd"> `ValueError` exception will be raised. To avoid this, consider</span> <span class="sd"> using the *naxis* kwarg to select two dimensions from the core</span> <span class="sd"> WCS.</span> <span class="sd"> 2. The number of coordinate axes in the transformation is not</span> <span class="sd"> determined directly from the ``NAXIS`` keyword but instead from</span> <span class="sd"> the highest of:</span> <span class="sd"> - ``NAXIS`` keyword</span> <span class="sd"> - ``WCSAXESa`` keyword</span> <span class="sd"> - The highest axis number in any parameterized WCS keyword.</span> <span class="sd"> The keyvalue, as well as the keyword, must be</span> <span class="sd"> syntactically valid otherwise it will not be considered.</span> <span class="sd"> If none of these keyword types is present, i.e. if the header</span> <span class="sd"> only contains auxiliary WCS keywords for a particular</span> <span class="sd"> coordinate representation, then no coordinate description is</span> <span class="sd"> constructed for it.</span> <span class="sd"> The number of axes, which is set as the `naxis` member, may</span> <span class="sd"> differ for different coordinate representations of the same</span> <span class="sd"> image.</span> <span class="sd"> 3. When the header includes duplicate keywords, in most cases the</span> <span class="sd"> last encountered is used.</span> <span class="sd"> """</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">header</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">fobj</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s">' '</span><span class="p">,</span> <span class="n">minerr</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">relax</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">naxis</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">keysel</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">colsel</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">fix</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span> <span class="n">close_fds</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">if</span> <span class="n">header</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">if</span> <span class="n">naxis</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="n">naxis</span> <span class="o">=</span> <span class="mi">2</span> <span class="n">wcsprm</span> <span class="o">=</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">Wcsprm</span><span class="p">(</span><span class="n">header</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">relax</span><span class="o">=</span><span class="n">relax</span><span class="p">,</span> <span class="n">naxis</span><span class="o">=</span><span class="n">naxis</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">naxis</span> <span class="o">=</span> <span class="n">wcsprm</span><span class="o">.</span><span class="n">naxis</span> <span class="c"># Set some reasonable defaults.</span> <span class="n">det2im</span> <span class="o">=</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="n">cpdis</span> <span class="o">=</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="n">sip</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">else</span><span class="p">:</span> <span class="n">keysel_flags</span> <span class="o">=</span> <span class="n">_parse_keysel</span><span class="p">(</span><span class="n">keysel</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">header</span><span class="p">,</span> <span class="n">string_types</span><span class="p">):</span> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">header</span><span class="p">):</span> <span class="k">if</span> <span class="n">fobj</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"Can not provide both a FITS filename to "</span> <span class="s">"argument 1 and a FITS file object to argument 2"</span><span class="p">)</span> <span class="n">fobj</span> <span class="o">=</span> <span class="n">fits</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">header</span><span class="p">)</span> <span class="n">close_fds</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fobj</span><span class="p">)</span> <span class="n">header</span> <span class="o">=</span> <span class="n">fobj</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">header</span> <span class="n">header_string</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">tostring</span><span class="p">()</span> <span class="k">else</span><span class="p">:</span> <span class="n">header_string</span> <span class="o">=</span> <span class="n">header</span> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">header</span><span class="p">,</span> <span class="n">fits</span><span class="o">.</span><span class="n">Header</span><span class="p">):</span> <span class="n">header_string</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">tostring</span><span class="p">()</span> <span class="k">else</span><span class="p">:</span> <span class="k">try</span><span class="p">:</span> <span class="c"># Accept any dict-like object</span> <span class="n">new_header</span> <span class="o">=</span> <span class="n">fits</span><span class="o">.</span><span class="n">Header</span><span class="p">()</span> <span class="k">for</span> <span class="n">dict_key</span> <span class="ow">in</span> <span class="n">header</span><span class="p">:</span> <span class="n">new_header</span><span class="p">[</span><span class="n">dict_key</span><span class="p">]</span> <span class="o">=</span> <span class="n">header</span><span class="p">[</span><span class="n">dict_key</span><span class="p">]</span> <span class="n">header_string</span> <span class="o">=</span> <span class="n">new_header</span><span class="o">.</span><span class="n">tostring</span><span class="p">()</span> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span> <span class="s">"header must be a string, an astropy.io.fits.Header "</span> <span class="s">"object, or a dict-like object"</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">header_string</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">):</span> <span class="n">header_bytes</span> <span class="o">=</span> <span class="n">header_string</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">'ascii'</span><span class="p">)</span> <span class="n">header_string</span> <span class="o">=</span> <span class="n">header_string</span> <span class="k">else</span><span class="p">:</span> <span class="n">header_bytes</span> <span class="o">=</span> <span class="n">header_string</span> <span class="n">header_string</span> <span class="o">=</span> <span class="n">header_string</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s">'ascii'</span><span class="p">)</span> <span class="k">try</span><span class="p">:</span> <span class="n">wcsprm</span> <span class="o">=</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">Wcsprm</span><span class="p">(</span><span class="n">header</span><span class="o">=</span><span class="n">header_bytes</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">relax</span><span class="o">=</span><span class="n">relax</span><span class="p">,</span> <span class="n">keysel</span><span class="o">=</span><span class="n">keysel_flags</span><span class="p">,</span> <span class="n">colsel</span><span class="o">=</span><span class="n">colsel</span><span class="p">)</span> <span class="k">except</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">NoWcsKeywordsFoundError</span><span class="p">:</span> <span class="c"># The header may have SIP or distortions, but no core</span> <span class="c"># WCS. That isn't an error -- we want a "default"</span> <span class="c"># (identity) core Wcs transformation in that case.</span> <span class="k">if</span> <span class="n">colsel</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="n">wcsprm</span> <span class="o">=</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">Wcsprm</span><span class="p">(</span><span class="n">header</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">relax</span><span class="o">=</span><span class="n">relax</span><span class="p">,</span> <span class="n">keysel</span><span class="o">=</span><span class="n">keysel_flags</span><span class="p">,</span> <span class="n">colsel</span><span class="o">=</span><span class="n">colsel</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="k">if</span> <span class="n">naxis</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">wcsprm</span> <span class="o">=</span> <span class="n">wcsprm</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">naxis</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">naxis</span> <span class="o">=</span> <span class="n">wcsprm</span><span class="o">.</span><span class="n">naxis</span> <span class="n">header</span> <span class="o">=</span> <span class="n">fits</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="n">header_string</span><span class="p">)</span> <span class="n">det2im</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_read_det2im_kw</span><span class="p">(</span><span class="n">header</span><span class="p">,</span> <span class="n">fobj</span><span class="p">,</span> <span class="n">err</span><span class="o">=</span><span class="n">minerr</span><span class="p">)</span> <span class="n">cpdis</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_read_distortion_kw</span><span class="p">(</span> <span class="n">header</span><span class="p">,</span> <span class="n">fobj</span><span class="p">,</span> <span class="n">dist</span><span class="o">=</span><span class="s">'CPDIS'</span><span class="p">,</span> <span class="n">err</span><span class="o">=</span><span class="n">minerr</span><span class="p">)</span> <span class="n">sip</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_read_sip_kw</span><span class="p">(</span><span class="n">header</span><span class="p">)</span> <span class="k">if</span> <span class="p">(</span><span class="n">wcsprm</span><span class="o">.</span><span class="n">naxis</span> <span class="o">!=</span> <span class="mi">2</span> <span class="ow">and</span> <span class="p">(</span><span class="n">det2im</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="n">det2im</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">cpdis</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="n">cpdis</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">sip</span><span class="p">)):</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="sd">"""</span> <span class="sd">Paper IV lookup tables and SIP distortions only work in 2 dimensions.</span> <span class="sd">However, WCSLIB has detected {0} dimensions in the core WCS keywords.</span> <span class="sd">To use core WCS in conjunction with Paper IV lookup tables or SIP</span> <span class="sd">distortion, you must select or reduce these to 2 dimensions using the</span> <span class="sd">naxis kwarg.</span> <span class="sd">"""</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">wcsprm</span><span class="o">.</span><span class="n">naxis</span><span class="p">))</span> <span class="n">header_naxis</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'NAXIS'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="k">if</span> <span class="n">header_naxis</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">header_naxis</span> <span class="o"><</span> <span class="n">wcsprm</span><span class="o">.</span><span class="n">naxis</span><span class="p">:</span> <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span> <span class="s">"The WCS transformation has more axes ({0:d}) than the "</span> <span class="s">"image it is associated with ({1:d})"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> <span class="n">wcsprm</span><span class="o">.</span><span class="n">naxis</span><span class="p">,</span> <span class="n">header_naxis</span><span class="p">))</span> <span class="k">if</span> <span class="n">fix</span><span class="p">:</span> <span class="n">fixes</span> <span class="o">=</span> <span class="n">wcsprm</span><span class="o">.</span><span class="n">fix</span><span class="p">()</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">fixes</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span> <span class="k">if</span> <span class="n">val</span> <span class="o">!=</span> <span class="s">"No change"</span><span class="p">:</span> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span> <span class="p">(</span><span class="s">"'{0}' made the change '{1}'. "</span> <span class="s">"This FITS header contains non-standard content."</span><span class="p">)</span><span class="o">.</span> <span class="n">format</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">),</span> <span class="n">FITSFixedWarning</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_naxis</span><span class="p">(</span><span class="n">header</span><span class="p">)</span> <span class="n">WCSBase</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sip</span><span class="p">,</span> <span class="n">cpdis</span><span class="p">,</span> <span class="n">wcsprm</span><span class="p">,</span> <span class="n">det2im</span><span class="p">)</span> <span class="k">for</span> <span class="n">fd</span> <span class="ow">in</span> <span class="n">close_fds</span><span class="p">:</span> <span class="n">fd</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> <span class="k">def</span> <span class="nf">__copy__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="n">new_copy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="p">()</span> <span class="n">WCSBase</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">new_copy</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sip</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cpdis1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cpdis2</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">det2im1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">det2im2</span><span class="p">))</span> <span class="n">new_copy</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="p">)</span> <span class="k">return</span> <span class="n">new_copy</span> <span class="k">def</span> <span class="nf">__deepcopy__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">memo</span><span class="p">):</span> <span class="n">new_copy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="p">()</span> <span class="n">new_copy</span><span class="o">.</span><span class="n">naxis</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">naxis</span><span class="p">,</span> <span class="n">memo</span><span class="p">)</span> <span class="n">WCSBase</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">new_copy</span><span class="p">,</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sip</span><span class="p">,</span> <span class="n">memo</span><span class="p">),</span> <span class="p">(</span><span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cpdis1</span><span class="p">,</span> <span class="n">memo</span><span class="p">),</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cpdis2</span><span class="p">,</span> <span class="n">memo</span><span class="p">)),</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="p">,</span> <span class="n">memo</span><span class="p">),</span> <span class="p">(</span><span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">det2im1</span><span class="p">,</span> <span class="n">memo</span><span class="p">),</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">det2im2</span><span class="p">,</span> <span class="n">memo</span><span class="p">)))</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="p">:</span> <span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="n">new_copy</span><span class="o">.</span><span class="n">__dict__</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">memo</span><span class="p">)</span> <span class="k">return</span> <span class="n">new_copy</span> <div class="viewcode-block" id="WCS.copy"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.copy">[docs]</a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Return a shallow copy of the object.</span> <span class="sd"> Convenience method so user doesn't have to import the</span> <span class="sd"> :mod:`copy` stdlib module.</span> <span class="sd"> """</span> <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> </div> <div class="viewcode-block" id="WCS.deepcopy"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.deepcopy">[docs]</a> <span class="k">def</span> <span class="nf">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Return a deep copy of the object.</span> <span class="sd"> Convenience method so user doesn't have to import the</span> <span class="sd"> :mod:`copy` stdlib module.</span> <span class="sd"> """</span> <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> </div> <div class="viewcode-block" id="WCS.sub"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.sub">[docs]</a> <span class="k">def</span> <span class="nf">sub</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">axes</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="n">copy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">()</span> <span class="n">copy</span><span class="o">.</span><span class="n">wcs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">axes</span><span class="p">)</span> <span class="n">copy</span><span class="o">.</span><span class="n">naxis</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">naxis</span> <span class="k">return</span> <span class="n">copy</span></div> <span class="k">if</span> <span class="n">_wcs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">sub</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">Wcsprm</span><span class="o">.</span><span class="n">sub</span><span class="o">.</span><span class="n">__doc__</span> <div class="viewcode-block" id="WCS.calcFootprint"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.calcFootprint">[docs]</a> <span class="k">def</span> <span class="nf">calcFootprint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">header</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">undistort</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">axes</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Calculates the footprint of the image on the sky.</span> <span class="sd"> A footprint is defined as the positions of the corners of the</span> <span class="sd"> image on the sky after all available distortions have been</span> <span class="sd"> applied.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> <span class="sd"> header : astropy.io.fits header object, optional</span> <span class="sd"> undistort : bool, optional</span> <span class="sd"> If `True`, take SIP and distortion lookup table into</span> <span class="sd"> account</span> <span class="sd"> axes : length 2 sequence ints, optional</span> <span class="sd"> If provided, use the given sequence as the shape of the</span> <span class="sd"> image. Otherwise, use the ``NAXIS1`` and ``NAXIS2``</span> <span class="sd"> keywords from the header that was used to create this</span> <span class="sd"> `WCS` object.</span> <span class="sd"> Returns</span> <span class="sd"> -------</span> <span class="sd"> coord : (4, 2) array of (*x*, *y*) coordinates.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="n">axes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">naxis1</span><span class="p">,</span> <span class="n">naxis2</span> <span class="o">=</span> <span class="n">axes</span> <span class="k">else</span><span class="p">:</span> <span class="k">if</span> <span class="n">header</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">try</span><span class="p">:</span> <span class="c"># classes that inherit from WCS and define naxis1/2</span> <span class="c"># do not require a header parameter</span> <span class="n">naxis1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_naxis1</span> <span class="n">naxis2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_naxis2</span> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">"Need a valid header in order to calculate footprint</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span> <span class="k">return</span> <span class="bp">None</span> <span class="k">else</span><span class="p">:</span> <span class="n">naxis1</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'NAXIS1'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="n">naxis2</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'NAXIS2'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="n">corners</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span> <span class="k">if</span> <span class="n">naxis1</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">naxis2</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="bp">None</span> <span class="n">corners</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mf">1.</span> <span class="n">corners</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="mf">1.</span> <span class="n">corners</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mf">1.</span> <span class="n">corners</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">naxis2</span> <span class="n">corners</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">naxis1</span> <span class="n">corners</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">naxis2</span> <span class="n">corners</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">naxis1</span> <span class="n">corners</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="mf">1.</span> <span class="k">if</span> <span class="n">undistort</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">all_pix2world</span><span class="p">(</span><span class="n">corners</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs_pix2world</span><span class="p">(</span><span class="n">corners</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> </div> <span class="k">def</span> <span class="nf">_read_det2im_kw</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">header</span><span class="p">,</span> <span class="n">fobj</span><span class="p">,</span> <span class="n">err</span><span class="o">=</span><span class="mf">0.0</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Create a `Paper IV`_ type lookup table for detector to image</span> <span class="sd"> plane correction.</span> <span class="sd"> """</span> <span class="n">cpdis</span> <span class="o">=</span> <span class="p">[</span><span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">]</span> <span class="n">crpix</span> <span class="o">=</span> <span class="p">[</span><span class="mf">0.</span><span class="p">,</span> <span class="mf">0.</span><span class="p">]</span> <span class="n">crval</span> <span class="o">=</span> <span class="p">[</span><span class="mf">0.</span><span class="p">,</span> <span class="mf">0.</span><span class="p">]</span> <span class="n">cdelt</span> <span class="o">=</span> <span class="p">[</span><span class="mf">1.</span><span class="p">,</span> <span class="mf">1.</span><span class="p">]</span> <span class="k">if</span> <span class="n">fobj</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fobj</span><span class="p">,</span> <span class="n">fits</span><span class="o">.</span><span class="n">HDUList</span><span class="p">):</span> <span class="k">return</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="n">d_error</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'D2IMERR'</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="k">if</span> <span class="n">d_error</span> <span class="o"><</span> <span class="n">err</span><span class="p">:</span> <span class="k">return</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="k">try</span><span class="p">:</span> <span class="n">d2im_data</span> <span class="o">=</span> <span class="n">fobj</span><span class="p">[(</span><span class="s">'D2IMARR'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]</span><span class="o">.</span><span class="n">data</span> <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span> <span class="k">return</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span> <span class="k">return</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="n">d2im_data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">d2im_data</span><span class="p">])</span> <span class="n">d2im_hdr</span> <span class="o">=</span> <span class="n">fobj</span><span class="p">[(</span><span class="s">'D2IMARR'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]</span><span class="o">.</span><span class="n">header</span> <span class="n">naxis</span> <span class="o">=</span> <span class="n">d2im_hdr</span><span class="p">[</span><span class="s">'NAXIS'</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">naxis</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span> <span class="n">crpix</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">d2im_hdr</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'CRPIX'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">),</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">crval</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">d2im_hdr</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'CRVAL'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">),</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">cdelt</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">d2im_hdr</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'CDELT'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">),</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">cpdis</span> <span class="o">=</span> <span class="n">DistortionLookupTable</span><span class="p">(</span><span class="n">d2im_data</span><span class="p">,</span> <span class="n">crpix</span><span class="p">,</span> <span class="n">crval</span><span class="p">,</span> <span class="n">cdelt</span><span class="p">)</span> <span class="n">axiscorr</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'AXISCORR'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="k">if</span> <span class="n">axiscorr</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> <span class="k">return</span> <span class="p">(</span><span class="n">cpdis</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">cpdis</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_write_det2im</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hdulist</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Writes a Paper IV type lookup table to the given</span> <span class="sd"> `astropy.io.fits.HDUList`.</span> <span class="sd"> """</span> <span class="n">det2im1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">det2im1</span> <span class="n">det2im2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">det2im2</span> <span class="k">if</span> <span class="n">det2im1</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">det2im2</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="n">hdulist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="s">'AXISCORR'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="n">det2im</span> <span class="o">=</span> <span class="n">det2im1</span> <span class="k">elif</span> <span class="n">det2im1</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">det2im2</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">hdulist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="s">'AXISCORR'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="n">det2im</span> <span class="o">=</span> <span class="n">det2im2</span> <span class="k">elif</span> <span class="n">det2im1</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">det2im2</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"Saving both distortion images is not supported"</span><span class="p">)</span> <span class="n">image</span> <span class="o">=</span> <span class="n">fits</span><span class="o">.</span><span class="n">ImageHDU</span><span class="p">(</span><span class="n">det2im</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">name</span><span class="o">=</span><span class="s">'D2IMARR'</span><span class="p">)</span> <span class="n">header</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">header</span> <span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="s">'CRPIX1'</span><span class="p">,</span> <span class="n">det2im</span><span class="o">.</span><span class="n">crpix</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="s">'CRPIX2'</span><span class="p">,</span> <span class="n">det2im</span><span class="o">.</span><span class="n">crpix</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="s">'CRVAL1'</span><span class="p">,</span> <span class="n">det2im</span><span class="o">.</span><span class="n">crval</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="s">'CRVAL2'</span><span class="p">,</span> <span class="n">det2im</span><span class="o">.</span><span class="n">crval</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="s">'CDELT1'</span><span class="p">,</span> <span class="n">det2im</span><span class="o">.</span><span class="n">cdelt</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="s">'CDELT2'</span><span class="p">,</span> <span class="n">det2im</span><span class="o">.</span><span class="n">cdelt</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="n">hdulist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">image</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_read_distortion_kw</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">header</span><span class="p">,</span> <span class="n">fobj</span><span class="p">,</span> <span class="n">dist</span><span class="o">=</span><span class="s">'CPDIS'</span><span class="p">,</span> <span class="n">err</span><span class="o">=</span><span class="mf">0.0</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Reads `Paper IV`_ table-lookup distortion keywords and data,</span> <span class="sd"> and returns a 2-tuple of `~astropy.wcs.DistortionLookupTable`</span> <span class="sd"> objects.</span> <span class="sd"> If no `Paper IV`_ distortion keywords are found, ``(None,</span> <span class="sd"> None)`` is returned.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">header</span><span class="p">,</span> <span class="n">string_types</span><span class="p">):</span> <span class="k">return</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="k">if</span> <span class="n">dist</span> <span class="o">==</span> <span class="s">'CPDIS'</span><span class="p">:</span> <span class="n">d_kw</span> <span class="o">=</span> <span class="s">'DP'</span> <span class="n">err_kw</span> <span class="o">=</span> <span class="s">'CPERR'</span> <span class="k">else</span><span class="p">:</span> <span class="n">d_kw</span> <span class="o">=</span> <span class="s">'DQ'</span> <span class="n">err_kw</span> <span class="o">=</span> <span class="s">'CQERR'</span> <span class="n">tables</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">naxis</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span> <span class="n">d_error</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">err_kw</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">),</span> <span class="mf">0.0</span><span class="p">)</span> <span class="k">if</span> <span class="n">d_error</span> <span class="o"><</span> <span class="n">err</span><span class="p">:</span> <span class="n">tables</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">continue</span> <span class="n">distortion</span> <span class="o">=</span> <span class="n">dist</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">if</span> <span class="n">distortion</span> <span class="ow">in</span> <span class="n">header</span><span class="p">:</span> <span class="n">dis</span> <span class="o">=</span> <span class="n">header</span><span class="p">[</span><span class="n">distortion</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">if</span> <span class="n">dis</span> <span class="o">==</span> <span class="s">'lookup'</span><span class="p">:</span> <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fobj</span><span class="p">,</span> <span class="n">fits</span><span class="o">.</span><span class="n">HDUList</span><span class="p">),</span> \ <span class="s">'An astropy.io.fits.HDUList is required for '</span> <span class="o">+</span> \ <span class="s">'Lookup table distortion.'</span> <span class="n">dp</span> <span class="o">=</span> <span class="p">(</span><span class="n">d_kw</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">))</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="n">d_extver</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dp</span> <span class="o">+</span> <span class="s">'.EXTVER'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">header</span><span class="p">[</span><span class="n">dp</span> <span class="o">+</span> <span class="s">'.AXIS.'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)]:</span> <span class="n">d_data</span> <span class="o">=</span> <span class="n">fobj</span><span class="p">[</span><span class="s">'WCSDVARR'</span><span class="p">,</span> <span class="n">d_extver</span><span class="p">]</span><span class="o">.</span><span class="n">data</span> <span class="k">else</span><span class="p">:</span> <span class="n">d_data</span> <span class="o">=</span> <span class="p">(</span><span class="n">fobj</span><span class="p">[</span><span class="s">'WCSDVARR'</span><span class="p">,</span> <span class="n">d_extver</span><span class="p">]</span><span class="o">.</span><span class="n">data</span><span class="p">)</span><span class="o">.</span><span class="n">transpose</span><span class="p">()</span> <span class="n">d_header</span> <span class="o">=</span> <span class="n">fobj</span><span class="p">[</span><span class="s">'WCSDVARR'</span><span class="p">,</span> <span class="n">d_extver</span><span class="p">]</span><span class="o">.</span><span class="n">header</span> <span class="n">d_crpix</span> <span class="o">=</span> <span class="p">(</span><span class="n">d_header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'CRPIX1'</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">),</span> <span class="n">d_header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'CRPIX2'</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">))</span> <span class="n">d_crval</span> <span class="o">=</span> <span class="p">(</span><span class="n">d_header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'CRVAL1'</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">),</span> <span class="n">d_header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'CRVAL2'</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">))</span> <span class="n">d_cdelt</span> <span class="o">=</span> <span class="p">(</span><span class="n">d_header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'CDELT1'</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">),</span> <span class="n">d_header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'CDELT2'</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">))</span> <span class="n">d_lookup</span> <span class="o">=</span> <span class="n">DistortionLookupTable</span><span class="p">(</span><span class="n">d_data</span><span class="p">,</span> <span class="n">d_crpix</span><span class="p">,</span> <span class="n">d_crval</span><span class="p">,</span> <span class="n">d_cdelt</span><span class="p">)</span> <span class="n">tables</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">d_lookup</span> <span class="k">else</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">'Polynomial distortion is not implemented.</span><span class="se">\n</span><span class="s">'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">tables</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">tables</span><span class="p">:</span> <span class="k">return</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="p">(</span><span class="n">tables</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="n">tables</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="mi">2</span><span class="p">))</span> <span class="k">def</span> <span class="nf">_write_distortion_kw</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hdulist</span><span class="p">,</span> <span class="n">dist</span><span class="o">=</span><span class="s">'CPDIS'</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Write out Paper IV distortion keywords to the given</span> <span class="sd"> `fits.HDUList`.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cpdis1</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">cpdis2</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="k">if</span> <span class="n">dist</span> <span class="o">==</span> <span class="s">'CPDIS'</span><span class="p">:</span> <span class="n">d_kw</span> <span class="o">=</span> <span class="s">'DP'</span> <span class="n">err_kw</span> <span class="o">=</span> <span class="s">'CPERR'</span> <span class="k">else</span><span class="p">:</span> <span class="n">d_kw</span> <span class="o">=</span> <span class="s">'DQ'</span> <span class="n">err_kw</span> <span class="o">=</span> <span class="s">'CQERR'</span> <span class="k">def</span> <span class="nf">write_dist</span><span class="p">(</span><span class="n">num</span><span class="p">,</span> <span class="n">cpdis</span><span class="p">):</span> <span class="k">if</span> <span class="n">cpdis</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="n">hdulist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span> <span class="s">'{0}{1:d}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">dist</span><span class="p">,</span> <span class="n">num</span><span class="p">),</span> <span class="p">(</span><span class="s">'LOOKUP'</span><span class="p">,</span> <span class="s">'Prior distortion function type'</span><span class="p">))</span> <span class="n">hdulist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span> <span class="s">'{0}{1:d}.EXTVER'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">d_kw</span><span class="p">,</span> <span class="n">num</span><span class="p">),</span> <span class="p">(</span><span class="n">num</span><span class="p">,</span> <span class="s">'Version number of WCSDVARR extension'</span><span class="p">))</span> <span class="n">hdulist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span> <span class="s">'{0}{1:d}.NAXES'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">d_kw</span><span class="p">,</span> <span class="n">num</span><span class="p">),</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">cpdis</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">shape</span><span class="p">),</span> <span class="s">'Number of independent variables in distortion function'</span><span class="p">))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">cpdis</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">ndim</span><span class="p">):</span> <span class="n">hdulist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span> <span class="s">'{0}{1:d}.AXIS.{2:d}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">d_kw</span><span class="p">,</span> <span class="n">num</span><span class="p">,</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="s">'Axis number of the jth independent variable in a '</span> <span class="s">'distortion function'</span><span class="p">))</span> <span class="n">image</span> <span class="o">=</span> <span class="n">fits</span><span class="o">.</span><span class="n">ImageHDU</span><span class="p">(</span><span class="n">cpdis</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s">'WCSDVARR'</span><span class="p">)</span> <span class="n">header</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">header</span> <span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span> <span class="s">'CRPIX1'</span><span class="p">,</span> <span class="p">(</span><span class="n">cpdis</span><span class="o">.</span><span class="n">crpix</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s">'Coordinate system reference pixel'</span><span class="p">))</span> <span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span> <span class="s">'CRPIX2'</span><span class="p">,</span> <span class="p">(</span><span class="n">cpdis</span><span class="o">.</span><span class="n">crpix</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s">'Coordinate system reference pixel'</span><span class="p">))</span> <span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span> <span class="s">'CRVAL1'</span><span class="p">,</span> <span class="p">(</span><span class="n">cpdis</span><span class="o">.</span><span class="n">crval</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s">'Coordinate system value at reference pixel'</span><span class="p">))</span> <span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span> <span class="s">'CRVAL2'</span><span class="p">,</span> <span class="p">(</span><span class="n">cpdis</span><span class="o">.</span><span class="n">crval</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s">'Coordinate system value at reference pixel'</span><span class="p">))</span> <span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span> <span class="s">'CDELT1'</span><span class="p">,</span> <span class="p">(</span><span class="n">cpdis</span><span class="o">.</span><span class="n">cdelt</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s">'Coordinate increment along axis'</span><span class="p">))</span> <span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span> <span class="s">'CDELT2'</span><span class="p">,</span> <span class="p">(</span><span class="n">cpdis</span><span class="o">.</span><span class="n">cdelt</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s">'Coordinate increment along axis'</span><span class="p">))</span> <span class="n">image</span><span class="o">.</span><span class="n">update_ext_version</span><span class="p">(</span> <span class="nb">int</span><span class="p">(</span><span class="n">hdulist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">header</span><span class="p">[</span><span class="s">'{0}{1:d}.EXTVER'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">d_kw</span><span class="p">,</span> <span class="n">num</span><span class="p">)]))</span> <span class="n">hdulist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">image</span><span class="p">)</span> <span class="n">write_dist</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cpdis1</span><span class="p">)</span> <span class="n">write_dist</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cpdis2</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_read_sip_kw</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">header</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Reads `SIP`_ header keywords and returns a `~astropy.wcs.Sip`</span> <span class="sd"> object.</span> <span class="sd"> If no `SIP`_ header keywords are found, ``None`` is returned.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">header</span><span class="p">,</span> <span class="n">string_types</span><span class="p">):</span> <span class="c"># TODO: Parse SIP from a string without pyfits around</span> <span class="k">return</span> <span class="bp">None</span> <span class="k">if</span> <span class="s">"A_ORDER"</span> <span class="ow">in</span> <span class="n">header</span><span class="p">:</span> <span class="k">if</span> <span class="s">"B_ORDER"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">header</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"A_ORDER provided without corresponding B_ORDER "</span> <span class="s">"keyword for SIP distortion"</span><span class="p">)</span> <span class="n">m</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">header</span><span class="p">[</span><span class="s">"A_ORDER"</span><span class="p">])</span> <span class="n">a</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">m</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">m</span> <span class="o">+</span> <span class="mi">1</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">double</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span> <span class="o">-</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span> <span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">((</span><span class="s">"A_{0}_{1}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">)),</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">m</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">header</span><span class="p">[</span><span class="s">"B_ORDER"</span><span class="p">])</span> <span class="n">b</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">m</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">m</span> <span class="o">+</span> <span class="mi">1</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">double</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span> <span class="o">-</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span> <span class="n">b</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">((</span><span class="s">"B_{0}_{1}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">)),</span> <span class="mf">0.0</span><span class="p">)</span> <span class="k">elif</span> <span class="s">"B_ORDER"</span> <span class="ow">in</span> <span class="n">header</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"B_ORDER provided without corresponding A_ORDER "</span> <span class="o">+</span> <span class="s">"keyword for SIP distortion"</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">a</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">b</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">if</span> <span class="s">"AP_ORDER"</span> <span class="ow">in</span> <span class="n">header</span><span class="p">:</span> <span class="k">if</span> <span class="s">"BP_ORDER"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">header</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"AP_ORDER provided without corresponding BP_ORDER "</span> <span class="s">"keyword for SIP distortion"</span><span class="p">)</span> <span class="n">m</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">header</span><span class="p">[</span><span class="s">"AP_ORDER"</span><span class="p">])</span> <span class="n">ap</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">m</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">m</span> <span class="o">+</span> <span class="mi">1</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">double</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span> <span class="o">-</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span> <span class="n">ap</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">"AP_{0}_{1}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">),</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">m</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">header</span><span class="p">[</span><span class="s">"BP_ORDER"</span><span class="p">])</span> <span class="n">bp</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">m</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">m</span> <span class="o">+</span> <span class="mi">1</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">double</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span> <span class="o">-</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span> <span class="n">bp</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">"BP_{0}_{1}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">),</span> <span class="mf">0.0</span><span class="p">)</span> <span class="k">elif</span> <span class="s">"BP_ORDER"</span> <span class="ow">in</span> <span class="n">header</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"BP_ORDER provided without corresponding AP_ORDER "</span> <span class="s">"keyword for SIP distortion"</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">ap</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">bp</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">if</span> <span class="n">a</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">b</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">ap</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">bp</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="bp">None</span> <span class="k">if</span> <span class="s">"CRPIX1"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">header</span> <span class="ow">or</span> <span class="s">"CRPIX2"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">header</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"Header has SIP keywords without CRPIX keywords"</span><span class="p">)</span> <span class="n">crpix1</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">"CRPIX1"</span><span class="p">)</span> <span class="n">crpix2</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">"CRPIX2"</span><span class="p">)</span> <span class="k">return</span> <span class="n">Sip</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">ap</span><span class="p">,</span> <span class="n">bp</span><span class="p">,</span> <span class="p">(</span><span class="n">crpix1</span><span class="p">,</span> <span class="n">crpix2</span><span class="p">))</span> <span class="k">def</span> <span class="nf">_write_sip_kw</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Write out SIP keywords. Returns a dictionary of key-value</span> <span class="sd"> pairs.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sip</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="p">{}</span> <span class="n">keywords</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">def</span> <span class="nf">write_array</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">a</span><span class="p">):</span> <span class="k">if</span> <span class="n">a</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="n">size</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="n">keywords</span><span class="p">[</span><span class="s">'{0}_ORDER'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">)]</span> <span class="o">=</span> <span class="n">size</span> <span class="o">-</span> <span class="mi">1</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">size</span><span class="p">):</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">size</span> <span class="o">-</span> <span class="n">i</span><span class="p">):</span> <span class="k">if</span> <span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span> <span class="o">!=</span> <span class="mf">0.0</span><span class="p">:</span> <span class="n">keywords</span><span class="p">[</span> <span class="s">'{0}_{1:d}_{2:d}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">)]</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span> <span class="n">write_array</span><span class="p">(</span><span class="s">'A'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sip</span><span class="o">.</span><span class="n">a</span><span class="p">)</span> <span class="n">write_array</span><span class="p">(</span><span class="s">'B'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sip</span><span class="o">.</span><span class="n">b</span><span class="p">)</span> <span class="n">write_array</span><span class="p">(</span><span class="s">'AP'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sip</span><span class="o">.</span><span class="n">ap</span><span class="p">)</span> <span class="n">write_array</span><span class="p">(</span><span class="s">'BP'</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sip</span><span class="o">.</span><span class="n">bp</span><span class="p">)</span> <span class="n">keywords</span><span class="p">[</span><span class="s">'CRPIX1'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sip</span><span class="o">.</span><span class="n">crpix</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="n">keywords</span><span class="p">[</span><span class="s">'CRPIX2'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sip</span><span class="o">.</span><span class="n">crpix</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">return</span> <span class="n">keywords</span> <span class="k">def</span> <span class="nf">_denormalize_sky</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sky</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lngtyp</span> <span class="o">!=</span> <span class="s">'RA'</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"WCS does not have longitude type of 'RA', therefore "</span> <span class="o">+</span> <span class="s">"(ra, dec) data can not be used as input"</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lattype</span> <span class="o">!=</span> <span class="s">'DEC'</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"WCS does not have longitude type of 'DEC', therefore "</span> <span class="o">+</span> <span class="s">"(ra, dec) data can not be used as input"</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">naxis</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lng</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lat</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> <span class="k">return</span> <span class="n">sky</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lng</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lat</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="c"># Reverse the order of the columns</span> <span class="k">return</span> <span class="n">sky</span><span class="p">[:,</span> <span class="p">::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"WCS does not have longitude and latitude celestial "</span> <span class="o">+</span> <span class="s">"axes, therefore (ra, dec) data can not be used as input"</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lng</span> <span class="o"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lat</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"WCS does not have both longitude and latitude "</span> <span class="s">"celestial axes, therefore (ra, dec) data can not be "</span> <span class="o">+</span> <span class="s">"used as input"</span><span class="p">)</span> <span class="n">out</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">sky</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">naxis</span><span class="p">))</span> <span class="n">out</span><span class="p">[:,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lng</span><span class="p">]</span> <span class="o">=</span> <span class="n">sky</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">]</span> <span class="n">out</span><span class="p">[:,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lat</span><span class="p">]</span> <span class="o">=</span> <span class="n">sky</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">]</span> <span class="k">return</span> <span class="n">out</span> <span class="k">def</span> <span class="nf">_normalize_sky</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sky</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lngtyp</span> <span class="o">!=</span> <span class="s">'RA'</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"WCS does not have longitude type of 'RA', therefore "</span> <span class="o">+</span> <span class="s">"(ra, dec) data can not be returned"</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lattype</span> <span class="o">!=</span> <span class="s">'DEC'</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"WCS does not have longitude type of 'DEC', therefore "</span> <span class="o">+</span> <span class="s">"(ra, dec) data can not be returned"</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">naxis</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lng</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lat</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> <span class="k">return</span> <span class="n">sky</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lng</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lat</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="c"># Reverse the order of the columns</span> <span class="k">return</span> <span class="n">sky</span><span class="p">[:,</span> <span class="p">::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"WCS does not have longitude and latitude celestial "</span> <span class="s">"axes, therefore (ra, dec) data can not be returned"</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lng</span> <span class="o"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lat</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"WCS does not have both longitude and latitude celestial "</span> <span class="s">"axes, therefore (ra, dec) data can not be returned"</span><span class="p">)</span> <span class="n">out</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty</span><span class="p">((</span><span class="n">sky</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="mi">2</span><span class="p">))</span> <span class="n">out</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">sky</span><span class="p">[:,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lng</span><span class="p">]</span> <span class="n">out</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">sky</span><span class="p">[:,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">lat</span><span class="p">]</span> <span class="k">return</span> <span class="n">out</span> <span class="k">def</span> <span class="nf">_array_converter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">sky</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> A helper function to support reading either a pair of arrays</span> <span class="sd"> or a single Nx2 array.</span> <span class="sd"> """</span> <span class="n">ra_dec_order</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">'ra_dec_order'</span><span class="p">,</span> <span class="bp">False</span><span class="p">)</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">kwargs</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">"Unexpected keyword argument {0!r}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">keys</span><span class="p">()[</span><span class="mi">0</span><span class="p">]))</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="n">xy</span><span class="p">,</span> <span class="n">origin</span> <span class="o">=</span> <span class="n">args</span> <span class="k">try</span><span class="p">:</span> <span class="n">xy</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">xy</span><span class="p">)</span> <span class="n">origin</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">origin</span><span class="p">)</span> <span class="k">except</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span> <span class="s">"When providing two arguments, they must be "</span> <span class="s">"(coords[N][{0}], origin)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">naxis</span><span class="p">))</span> <span class="k">if</span> <span class="n">ra_dec_order</span> <span class="ow">and</span> <span class="n">sky</span> <span class="o">==</span> <span class="s">'input'</span><span class="p">:</span> <span class="n">xy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_denormalize_sky</span><span class="p">(</span><span class="n">xy</span><span class="p">)</span> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">xy</span><span class="p">,</span> <span class="n">origin</span><span class="p">)</span> <span class="k">if</span> <span class="n">ra_dec_order</span> <span class="ow">and</span> <span class="n">sky</span> <span class="o">==</span> <span class="s">'output'</span><span class="p">:</span> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_sky</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="k">return</span> <span class="n">result</span> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">naxis</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span> <span class="n">axes</span> <span class="o">=</span> <span class="n">args</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="n">origin</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">try</span><span class="p">:</span> <span class="n">axes</span> <span class="o">=</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">axes</span><span class="p">]</span> <span class="n">origin</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">origin</span><span class="p">)</span> <span class="k">except</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span> <span class="s">"When providing more than two arguments, they must be "</span> <span class="o">+</span> <span class="s">"a 1-D array for each axis, followed by an origin."</span><span class="p">)</span> <span class="k">try</span><span class="p">:</span> <span class="n">axes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">broadcast_arrays</span><span class="p">(</span><span class="o">*</span><span class="n">axes</span><span class="p">)</span> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"Coordinate arrays are not broadcastable to each other"</span><span class="p">)</span> <span class="n">xy</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">hstack</span><span class="p">([</span><span class="n">x</span><span class="o">.</span><span class="n">reshape</span><span class="p">((</span><span class="n">x</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">axes</span><span class="p">])</span> <span class="k">if</span> <span class="n">ra_dec_order</span> <span class="ow">and</span> <span class="n">sky</span> <span class="o">==</span> <span class="s">'input'</span><span class="p">:</span> <span class="n">xy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_denormalize_sky</span><span class="p">(</span><span class="n">xy</span><span class="p">)</span> <span class="n">sky</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">xy</span><span class="p">,</span> <span class="n">origin</span><span class="p">)</span> <span class="k">if</span> <span class="n">ra_dec_order</span> <span class="ow">and</span> <span class="n">sky</span> <span class="o">==</span> <span class="s">'output'</span><span class="p">:</span> <span class="n">sky</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_sky_output</span><span class="p">(</span><span class="n">sky</span><span class="p">)</span> <span class="k">return</span> <span class="p">(</span><span class="n">sky</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">axes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span><span class="p">),</span> <span class="n">sky</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">axes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span><span class="p">))</span> <span class="k">return</span> <span class="p">[</span><span class="n">sky</span><span class="p">[:,</span> <span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">axes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">sky</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])]</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span> <span class="s">"Expected 2 or {0} arguments, {1} given"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">naxis</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)))</span> <div class="viewcode-block" id="WCS.all_pix2world"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.all_pix2world">[docs]</a> <span class="k">def</span> <span class="nf">all_pix2world</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_array_converter</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">_all_pix2world</span><span class="p">,</span> <span class="s">'output'</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div> <span class="n">all_pix2world</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="s">"""</span> <span class="s"> Transforms pixel coordinates to world coordinates.</span> <span class="s"> Performs all of the following in order:</span> <span class="s"> - Detector to image plane correction (optionally)</span> <span class="s"> - `SIP`_ distortion correction (optionally)</span> <span class="s"> - `Paper IV`_ table-lookup distortion correction (optionally)</span> <span class="s"> - `wcslib`_ WCS transformation</span> <span class="s"> Parameters</span> <span class="s"> ----------</span> <span class="s"> {0}</span> <span class="s"> For a transformation that is not two-dimensional, the</span> <span class="s"> two-argument form must be used.</span> <span class="s"> {1}</span> <span class="s"> Returns</span> <span class="s"> -------</span> <span class="s"> {2}</span> <span class="s"> Notes</span> <span class="s"> -----</span> <span class="s"> The order of the axes for the result is determined by the</span> <span class="s"> `CTYPEia` keywords in the FITS header, therefore it may not</span> <span class="s"> always be of the form (*ra*, *dec*). The</span> <span class="s"> `~astropy.wcs.Wcsprm.lat`, `~astropy.wcs.Wcsprm.lng`,</span> <span class="s"> `~astropy.wcs.Wcsprm.lattyp` and `~astropy.wcs.Wcsprm.lngtyp`</span> <span class="s"> members can be used to determine the order of the axes.</span> <span class="s"> Raises</span> <span class="s"> ------</span> <span class="s"> MemoryError</span> <span class="s"> Memory allocation failed.</span> <span class="s"> SingularMatrixError</span> <span class="s"> Linear transformation matrix is singular.</span> <span class="s"> InconsistentAxisTypesError</span> <span class="s"> Inconsistent or unrecognized coordinate axis types.</span> <span class="s"> ValueError</span> <span class="s"> Invalid parameter value.</span> <span class="s"> ValueError</span> <span class="s"> Invalid coordinate transformation parameters.</span> <span class="s"> ValueError</span> <span class="s"> x- and y-coordinate arrays are not the same size.</span> <span class="s"> InvalidTransformError</span> <span class="s"> Invalid coordinate transformation parameters.</span> <span class="s"> InvalidTransformError</span> <span class="s"> Ill-conditioned coordinate transformation parameters.</span> <span class="s"> """</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">__</span><span class="o">.</span><span class="n">TWO_OR_MORE_ARGS</span><span class="p">(</span><span class="s">'naxis'</span><span class="p">,</span> <span class="mi">8</span><span class="p">),</span> <span class="n">__</span><span class="o">.</span><span class="n">RA_DEC_ORDER</span><span class="p">(</span><span class="mi">8</span><span class="p">),</span> <span class="n">__</span><span class="o">.</span><span class="n">RETURNS</span><span class="p">(</span><span class="s">'sky coordinates, in degrees'</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span> <span class="nd">@deprecated</span><span class="p">(</span><span class="s">"0.0"</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s">"all_pix2sky"</span><span class="p">,</span> <span class="n">alternative</span><span class="o">=</span><span class="s">"all_pix2world"</span><span class="p">)</span> <div class="viewcode-block" id="WCS.all_pix2sky"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.all_pix2sky">[docs]</a> <span class="k">def</span> <span class="nf">all_pix2sky</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">all_pix2world</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> </div> <div class="viewcode-block" id="WCS.wcs_pix2world"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.wcs_pix2world">[docs]</a> <span class="k">def</span> <span class="nf">wcs_pix2world</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"No basic WCS settings were created."</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_array_converter</span><span class="p">(</span> <span class="k">lambda</span> <span class="n">xy</span><span class="p">,</span> <span class="n">o</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">p2s</span><span class="p">(</span><span class="n">xy</span><span class="p">,</span> <span class="n">o</span><span class="p">)[</span><span class="s">'world'</span><span class="p">],</span> <span class="s">'output'</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div> <span class="n">wcs_pix2world</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="s">"""</span> <span class="s"> Transforms pixel coordinates to world coordinates by doing</span> <span class="s"> only the basic `wcslib`_ transformation.</span> <span class="s"> No `SIP`_ or `Paper IV`_ table lookup distortion correction is</span> <span class="s"> applied. To perform distortion correction, see</span> <span class="s"> `~astropy.wcs.WCS.all_pix2world`,</span> <span class="s"> `~astropy.wcs.WCS.sip_pix2foc`, `~astropy.wcs.WCS.p4_pix2foc`,</span> <span class="s"> or `~astropy.wcs.WCS.pix2foc`.</span> <span class="s"> Parameters</span> <span class="s"> ----------</span> <span class="s"> {0}</span> <span class="s"> For a transformation that is not two-dimensional, the</span> <span class="s"> two-argument form must be used.</span> <span class="s"> {1}</span> <span class="s"> Returns</span> <span class="s"> -------</span> <span class="s"> {2}</span> <span class="s"> Raises</span> <span class="s"> ------</span> <span class="s"> MemoryError</span> <span class="s"> Memory allocation failed.</span> <span class="s"> SingularMatrixError</span> <span class="s"> Linear transformation matrix is singular.</span> <span class="s"> InconsistentAxisTypesError</span> <span class="s"> Inconsistent or unrecognized coordinate axis types.</span> <span class="s"> ValueError</span> <span class="s"> Invalid parameter value.</span> <span class="s"> ValueError</span> <span class="s"> Invalid coordinate transformation parameters.</span> <span class="s"> ValueError</span> <span class="s"> x- and y-coordinate arrays are not the same size.</span> <span class="s"> InvalidTransformError</span> <span class="s"> Invalid coordinate transformation parameters.</span> <span class="s"> InvalidTransformError</span> <span class="s"> Ill-conditioned coordinate transformation parameters.</span> <span class="s"> Notes</span> <span class="s"> -----</span> <span class="s"> The order of the axes for the result is determined by the</span> <span class="s"> `CTYPEia` keywords in the FITS header, therefore it may not</span> <span class="s"> always be of the form (*ra*, *dec*). The</span> <span class="s"> `~astropy.wcs.Wcsprm.lat`, `~astropy.wcs.Wcsprm.lng`,</span> <span class="s"> `~astropy.wcs.Wcsprm.lattyp` and `~astropy.wcs.Wcsprm.lngtyp`</span> <span class="s"> members can be used to determine the order of the axes.</span> <span class="s"> """</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">__</span><span class="o">.</span><span class="n">TWO_OR_MORE_ARGS</span><span class="p">(</span><span class="s">'naxis'</span><span class="p">,</span> <span class="mi">8</span><span class="p">),</span> <span class="n">__</span><span class="o">.</span><span class="n">RA_DEC_ORDER</span><span class="p">(</span><span class="mi">8</span><span class="p">),</span> <span class="n">__</span><span class="o">.</span><span class="n">RETURNS</span><span class="p">(</span><span class="s">'world coordinates, in degrees'</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span> <span class="nd">@deprecated</span><span class="p">(</span><span class="s">"0.0"</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s">"wcs_pix2sky"</span><span class="p">,</span> <span class="n">alternative</span><span class="o">=</span><span class="s">"wcs_pix2world"</span><span class="p">)</span> <div class="viewcode-block" id="WCS.wcs_pix2sky"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.wcs_pix2sky">[docs]</a> <span class="k">def</span> <span class="nf">wcs_pix2sky</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs_pix2world</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> </div> <div class="viewcode-block" id="WCS.wcs_world2pix"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.wcs_world2pix">[docs]</a> <span class="k">def</span> <span class="nf">wcs_world2pix</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"No basic WCS settings were created."</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_array_converter</span><span class="p">(</span> <span class="k">lambda</span> <span class="n">xy</span><span class="p">,</span> <span class="n">o</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">s2p</span><span class="p">(</span><span class="n">xy</span><span class="p">,</span> <span class="n">o</span><span class="p">)[</span><span class="s">'pixcrd'</span><span class="p">],</span> <span class="s">'input'</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div> <span class="n">wcs_world2pix</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="s">"""</span> <span class="s"> Transforms world coordinates to pixel coordinates, using only</span> <span class="s"> the basic `wcslib`_ WCS transformation. No `SIP`_ or `Paper</span> <span class="s"> IV`_ table lookup distortion is applied.</span> <span class="s"> Parameters</span> <span class="s"> ----------</span> <span class="s"> {0}</span> <span class="s"> For a transformation that is not two-dimensional, the</span> <span class="s"> two-argument form must be used.</span> <span class="s"> {1}</span> <span class="s"> Returns</span> <span class="s"> -------</span> <span class="s"> {2}</span> <span class="s"> Notes</span> <span class="s"> -----</span> <span class="s"> The order of the axes for the input world array is determined by</span> <span class="s"> the `CTYPEia` keywords in the FITS header, therefore it may</span> <span class="s"> not always be of the form (*ra*, *dec*). The</span> <span class="s"> `~astropy.wcs.Wcsprm.lat`, `~astropy.wcs.Wcsprm.lng`,</span> <span class="s"> `~astropy.wcs.Wcsprm.lattyp` and `~astropy.wcs.Wcsprm.lngtyp`</span> <span class="s"> members can be used to determine the order of the axes.</span> <span class="s"> Raises</span> <span class="s"> ------</span> <span class="s"> MemoryError</span> <span class="s"> Memory allocation failed.</span> <span class="s"> SingularMatrixError</span> <span class="s"> Linear transformation matrix is singular.</span> <span class="s"> InconsistentAxisTypesError</span> <span class="s"> Inconsistent or unrecognized coordinate axis types.</span> <span class="s"> ValueError</span> <span class="s"> Invalid parameter value.</span> <span class="s"> ValueError</span> <span class="s"> Invalid coordinate transformation parameters.</span> <span class="s"> ValueError</span> <span class="s"> x- and y-coordinate arrays are not the same size.</span> <span class="s"> InvalidTransformError</span> <span class="s"> Invalid coordinate transformation parameters.</span> <span class="s"> InvalidTransformError</span> <span class="s"> Ill-conditioned coordinate transformation parameters.</span> <span class="s"> """</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">__</span><span class="o">.</span><span class="n">TWO_OR_MORE_ARGS</span><span class="p">(</span><span class="s">'naxis'</span><span class="p">,</span> <span class="mi">8</span><span class="p">),</span> <span class="n">__</span><span class="o">.</span><span class="n">RA_DEC_ORDER</span><span class="p">(</span><span class="mi">8</span><span class="p">),</span> <span class="n">__</span><span class="o">.</span><span class="n">RETURNS</span><span class="p">(</span><span class="s">'pixel coordinates'</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span> <span class="nd">@deprecated</span><span class="p">(</span><span class="s">"0.0"</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s">"wcs_sky2pix"</span><span class="p">,</span> <span class="n">alternative</span><span class="o">=</span><span class="s">"wcs_world2pix"</span><span class="p">)</span> <div class="viewcode-block" id="WCS.wcs_sky2pix"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.wcs_sky2pix">[docs]</a> <span class="k">def</span> <span class="nf">wcs_sky2pix</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs_world2pix</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> </div> <div class="viewcode-block" id="WCS.pix2foc"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.pix2foc">[docs]</a> <span class="k">def</span> <span class="nf">pix2foc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_array_converter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_pix2foc</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span></div> <span class="n">pix2foc</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="s">"""</span> <span class="s"> Convert pixel coordinates to focal plane coordinates using the</span> <span class="s"> `SIP`_ polynomial distortion convention and `Paper IV`_</span> <span class="s"> table-lookup distortion correction.</span> <span class="s"> Parameters</span> <span class="s"> ----------</span> <span class="s"> {0}</span> <span class="s"> Returns</span> <span class="s"> -------</span> <span class="s"> {1}</span> <span class="s"> Raises</span> <span class="s"> ------</span> <span class="s"> MemoryError</span> <span class="s"> Memory allocation failed.</span> <span class="s"> ValueError</span> <span class="s"> Invalid coordinate transformation parameters.</span> <span class="s"> """</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">__</span><span class="o">.</span><span class="n">TWO_OR_MORE_ARGS</span><span class="p">(</span><span class="s">'2'</span><span class="p">,</span> <span class="mi">8</span><span class="p">),</span> <span class="n">__</span><span class="o">.</span><span class="n">RETURNS</span><span class="p">(</span><span class="s">'focal coordinates'</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span> <div class="viewcode-block" id="WCS.p4_pix2foc"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.p4_pix2foc">[docs]</a> <span class="k">def</span> <span class="nf">p4_pix2foc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_array_converter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_p4_pix2foc</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span></div> <span class="n">p4_pix2foc</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="s">"""</span> <span class="s"> Convert pixel coordinates to focal plane coordinates using</span> <span class="s"> `Paper IV`_ table-lookup distortion correction.</span> <span class="s"> Parameters</span> <span class="s"> ----------</span> <span class="s"> {0}</span> <span class="s"> Returns</span> <span class="s"> -------</span> <span class="s"> {1}</span> <span class="s"> Raises</span> <span class="s"> ------</span> <span class="s"> MemoryError</span> <span class="s"> Memory allocation failed.</span> <span class="s"> ValueError</span> <span class="s"> Invalid coordinate transformation parameters.</span> <span class="s"> """</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">__</span><span class="o">.</span><span class="n">TWO_OR_MORE_ARGS</span><span class="p">(</span><span class="s">'2'</span><span class="p">,</span> <span class="mi">8</span><span class="p">),</span> <span class="n">__</span><span class="o">.</span><span class="n">RETURNS</span><span class="p">(</span><span class="s">'focal coordinates'</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span> <div class="viewcode-block" id="WCS.det2im"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.det2im">[docs]</a> <span class="k">def</span> <span class="nf">det2im</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_array_converter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_det2im</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span></div> <span class="n">det2im</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="s">"""</span> <span class="s"> Convert detector coordinates to image plane coordinates using</span> <span class="s"> `Paper IV`_ table-lookup distortion correction.</span> <span class="s"> Parameters</span> <span class="s"> ----------</span> <span class="s"> {0}</span> <span class="s"> Returns</span> <span class="s"> -------</span> <span class="s"> {1}</span> <span class="s"> Raises</span> <span class="s"> ------</span> <span class="s"> MemoryError</span> <span class="s"> Memory allocation failed.</span> <span class="s"> ValueError</span> <span class="s"> Invalid coordinate transformation parameters.</span> <span class="s"> """</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">__</span><span class="o">.</span><span class="n">TWO_OR_MORE_ARGS</span><span class="p">(</span><span class="s">'2'</span><span class="p">,</span> <span class="mi">8</span><span class="p">),</span> <span class="n">__</span><span class="o">.</span><span class="n">RETURNS</span><span class="p">(</span><span class="s">'pixel coordinates'</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span> <div class="viewcode-block" id="WCS.sip_pix2foc"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.sip_pix2foc">[docs]</a> <span class="k">def</span> <span class="nf">sip_pix2foc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sip</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="k">return</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span> <span class="k">return</span> <span class="n">args</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">"Wrong number of arguments"</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_array_converter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sip</span><span class="o">.</span><span class="n">pix2foc</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span></div> <span class="n">sip_pix2foc</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="s">"""</span> <span class="s"> Convert pixel coordinates to focal plane coordinates using the</span> <span class="s"> `SIP`_ polynomial distortion convention.</span> <span class="s"> `Paper IV`_ table lookup distortion correction is not applied,</span> <span class="s"> even if that information existed in the FITS file that</span> <span class="s"> initialized this :class:`~astropy.wcs.WCS` object. To correct</span> <span class="s"> for that, use `~astropy.wcs.WCS.pix2foc` or</span> <span class="s"> `~astropy.wcs.WCS.p4_pix2foc`.</span> <span class="s"> Parameters</span> <span class="s"> ----------</span> <span class="s"> {0}</span> <span class="s"> Returns</span> <span class="s"> -------</span> <span class="s"> {1}</span> <span class="s"> Raises</span> <span class="s"> ------</span> <span class="s"> MemoryError</span> <span class="s"> Memory allocation failed.</span> <span class="s"> ValueError</span> <span class="s"> Invalid coordinate transformation parameters.</span> <span class="s"> """</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">__</span><span class="o">.</span><span class="n">TWO_OR_MORE_ARGS</span><span class="p">(</span><span class="s">'2'</span><span class="p">,</span> <span class="mi">8</span><span class="p">),</span> <span class="n">__</span><span class="o">.</span><span class="n">RETURNS</span><span class="p">(</span><span class="s">'focal coordinates'</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span> <div class="viewcode-block" id="WCS.sip_foc2pix"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.sip_foc2pix">[docs]</a> <span class="k">def</span> <span class="nf">sip_foc2pix</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sip</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="k">return</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span> <span class="k">return</span> <span class="n">args</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">"Wrong number of arguments"</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_array_converter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sip</span><span class="o">.</span><span class="n">foc2pix</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span></div> <span class="n">sip_foc2pix</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="s">"""</span> <span class="s"> Convert focal plane coordinates to pixel coordinates using the</span> <span class="s"> `SIP`_ polynomial distortion convention.</span> <span class="s"> `Paper IV`_ table lookup distortion correction is not applied,</span> <span class="s"> even if that information existed in the FITS file that</span> <span class="s"> initialized this `~astropy.wcs.WCS` object.</span> <span class="s"> Parameters</span> <span class="s"> ----------</span> <span class="s"> {0}</span> <span class="s"> Returns</span> <span class="s"> -------</span> <span class="s"> {1}</span> <span class="s"> Raises</span> <span class="s"> ------</span> <span class="s"> MemoryError</span> <span class="s"> Memory allocation failed.</span> <span class="s"> ValueError</span> <span class="s"> Invalid coordinate transformation parameters.</span> <span class="s"> """</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">__</span><span class="o">.</span><span class="n">TWO_OR_MORE_ARGS</span><span class="p">(</span><span class="s">'2'</span><span class="p">,</span> <span class="mi">8</span><span class="p">),</span> <span class="n">__</span><span class="o">.</span><span class="n">RETURNS</span><span class="p">(</span><span class="s">'pixel coordinates'</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span> <div class="viewcode-block" id="WCS.to_fits"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.to_fits">[docs]</a> <span class="k">def</span> <span class="nf">to_fits</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">relax</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Generate an `astropy.io.fits.HDUList` object with all of the</span> <span class="sd"> information stored in this object. This should be logically identical</span> <span class="sd"> to the input FITS file, but it will be normalized in a number of ways.</span> <span class="sd"> See `to_header` for some warnings about the output produced.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> <span class="sd"> relax : bool or int, optional</span> <span class="sd"> Degree of permissiveness:</span> <span class="sd"> - `False` (default): Write all extensions that are</span> <span class="sd"> considered to be safe and recommended.</span> <span class="sd"> - `True`: Write all recognized informal extensions of the</span> <span class="sd"> WCS standard.</span> <span class="sd"> - `int`: a bit field selecting specific extensions to</span> <span class="sd"> write. See :ref:`relaxwrite` for details.</span> <span class="sd"> Returns</span> <span class="sd"> -------</span> <span class="sd"> hdulist : `astropy.io.fits.HDUList`</span> <span class="sd"> """</span> <span class="n">header</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_header</span><span class="p">(</span><span class="n">relax</span><span class="o">=</span><span class="n">relax</span><span class="p">)</span> <span class="n">hdu</span> <span class="o">=</span> <span class="n">fits</span><span class="o">.</span><span class="n">PrimaryHDU</span><span class="p">(</span><span class="n">header</span><span class="o">=</span><span class="n">header</span><span class="p">)</span> <span class="n">hdulist</span> <span class="o">=</span> <span class="n">fits</span><span class="o">.</span><span class="n">HDUList</span><span class="p">(</span><span class="n">hdu</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_write_det2im</span><span class="p">(</span><span class="n">hdulist</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_write_distortion_kw</span><span class="p">(</span><span class="n">hdulist</span><span class="p">)</span> <span class="k">return</span> <span class="n">hdulist</span> </div> <div class="viewcode-block" id="WCS.to_header"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.to_header">[docs]</a> <span class="k">def</span> <span class="nf">to_header</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">relax</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Generate an `astropy.io.fits.Header` object with the basic WCS and SIP</span> <span class="sd"> information stored in this object. This should be logically</span> <span class="sd"> identical to the input FITS file, but it will be normalized in</span> <span class="sd"> a number of ways.</span> <span class="sd"> .. warning::</span> <span class="sd"> This function does not write out Paper IV distortion</span> <span class="sd"> information, since that requires multiple FITS header data</span> <span class="sd"> units. To get a full representation of everything in this</span> <span class="sd"> object, use `to_fits`.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> <span class="sd"> relax : bool or int, optional</span> <span class="sd"> Degree of permissiveness:</span> <span class="sd"> - `False` (default): Write all extensions that are</span> <span class="sd"> considered to be safe and recommended.</span> <span class="sd"> - `True`: Write all recognized informal extensions of the</span> <span class="sd"> WCS standard.</span> <span class="sd"> - `int`: a bit field selecting specific extensions to</span> <span class="sd"> write. See :ref:`relaxwrite` for details.</span> <span class="sd"> Returns</span> <span class="sd"> -------</span> <span class="sd"> header : `astropy.io.fits.Header`</span> <span class="sd"> Notes</span> <span class="sd"> -----</span> <span class="sd"> The output header will almost certainly differ from the input in a</span> <span class="sd"> number of respects:</span> <span class="sd"> 1. The output header only contains WCS-related keywords. In</span> <span class="sd"> particular, it does not contain syntactically-required</span> <span class="sd"> keywords such as ``SIMPLE``, ``NAXIS``, ``BITPIX``, or</span> <span class="sd"> ``END``.</span> <span class="sd"> 2. Deprecated (e.g. ``CROTAn``) or non-standard usage will</span> <span class="sd"> be translated to standard (this is partially dependent on</span> <span class="sd"> whether `fix` was applied).</span> <span class="sd"> 3. Quantities will be converted to the units used internally,</span> <span class="sd"> basically SI with the addition of degrees.</span> <span class="sd"> 4. Floating-point quantities may be given to a different decimal</span> <span class="sd"> precision.</span> <span class="sd"> 5. Elements of the ``PCi_j`` matrix will be written if and</span> <span class="sd"> only if they differ from the unit matrix. Thus, if the</span> <span class="sd"> matrix is unity then no elements will be written.</span> <span class="sd"> 6. Additional keywords such as ``WCSAXES``, ``CUNITia``,</span> <span class="sd"> ``LONPOLEa`` and ``LATPOLEa`` may appear.</span> <span class="sd"> 7. The original keycomments will be lost, although</span> <span class="sd"> `to_header` tries hard to write meaningful comments.</span> <span class="sd"> 8. Keyword order may be changed.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="n">relax</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">True</span><span class="p">,</span> <span class="bp">False</span><span class="p">):</span> <span class="n">do_sip</span> <span class="o">=</span> <span class="n">relax</span> <span class="o">&</span> <span class="n">WCSHDO_SIP</span> <span class="n">relax</span> <span class="o">&=</span> <span class="o">~</span><span class="n">WCSHDO_SIP</span> <span class="k">else</span><span class="p">:</span> <span class="n">do_sip</span> <span class="o">=</span> <span class="n">relax</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">header_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">to_header</span><span class="p">(</span><span class="n">relax</span><span class="p">)</span> <span class="n">header</span> <span class="o">=</span> <span class="n">fits</span><span class="o">.</span><span class="n">Header</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="n">header_string</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">header</span> <span class="o">=</span> <span class="n">fits</span><span class="o">.</span><span class="n">Header</span><span class="p">()</span> <span class="k">if</span> <span class="n">do_sip</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">sip</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_write_sip_kw</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> <span class="n">header</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span> <span class="k">return</span> <span class="n">header</span> </div> <div class="viewcode-block" id="WCS.to_header_string"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.to_header_string">[docs]</a> <span class="k">def</span> <span class="nf">to_header_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">relax</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Identical to `to_header`, but returns a string containing the</span> <span class="sd"> header cards.</span> <span class="sd"> """</span> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">to_header</span><span class="p">(</span><span class="n">relax</span><span class="p">))</span> </div> <div class="viewcode-block" id="WCS.footprint_to_file"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.footprint_to_file">[docs]</a> <span class="k">def</span> <span class="nf">footprint_to_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">'green'</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Writes out a `ds9`_ style regions file. It can be loaded</span> <span class="sd"> directly by `ds9`_.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> <span class="sd"> filename : string, optional</span> <span class="sd"> Output file name - default is ``'footprint.reg'``</span> <span class="sd"> color : string, optional</span> <span class="sd"> Color to use when plotting the line.</span> <span class="sd"> width : int, optional</span> <span class="sd"> Width of the region line.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">filename</span><span class="p">:</span> <span class="n">filename</span> <span class="o">=</span> <span class="s">'footprint.reg'</span> <span class="n">comments</span> <span class="o">=</span> <span class="s">'# Region file format: DS9 version 4.0 </span><span class="se">\n</span><span class="s">'</span> <span class="n">comments</span> <span class="o">+=</span> <span class="p">(</span><span class="s">'# global color=green font="helvetica 12 bold '</span> <span class="o">+</span> <span class="s">'select=1 highlite=1 edit=1 move=1 delete=1 '</span> <span class="o">+</span> <span class="s">'include=1 fixed=0 source</span><span class="se">\n</span><span class="s">'</span><span class="p">)</span> <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s">'a'</span><span class="p">)</span> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">'linear</span><span class="se">\n</span><span class="s">'</span><span class="p">)</span> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">'polygon('</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">footprint</span><span class="o">.</span><span class="n">tofile</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s">','</span><span class="p">)</span> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">') # color={0}, width={1:d} </span><span class="se">\n</span><span class="s">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">width</span><span class="p">))</span> <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> </div> <span class="n">naxis1</span> <span class="o">=</span> <span class="n">deprecated_attribute</span><span class="p">(</span><span class="s">'naxis1'</span><span class="p">,</span> <span class="s">'0.2'</span><span class="p">)</span> <span class="n">naxis2</span> <span class="o">=</span> <span class="n">deprecated_attribute</span><span class="p">(</span><span class="s">'naxis2'</span><span class="p">,</span> <span class="s">'0.2'</span><span class="p">)</span> <span class="nd">@deprecated</span><span class="p">(</span><span class="s">'0.2'</span><span class="p">,</span> <span class="n">message</span><span class="o">=</span><span class="s">'This method should not be public'</span><span class="p">)</span> <div class="viewcode-block" id="WCS.get_naxis"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.get_naxis">[docs]</a> <span class="k">def</span> <span class="nf">get_naxis</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">header</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_naxis</span><span class="p">(</span><span class="n">header</span><span class="o">=</span><span class="n">header</span><span class="p">)</span> </div> <span class="k">def</span> <span class="nf">_get_naxis</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">header</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">_naxis1</span> <span class="o">=</span> <span class="mi">0</span> <span class="bp">self</span><span class="o">.</span><span class="n">_naxis2</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">if</span> <span class="n">header</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">header</span><span class="p">,</span> <span class="n">string_types</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">naxis1</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'NAXIS1'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">naxis2</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'NAXIS2'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <div class="viewcode-block" id="WCS.rotateCD"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.rotateCD">[docs]</a> <span class="k">def</span> <span class="nf">rotateCD</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span> <span class="n">_theta</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">deg2rad</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="n">_mrot</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">double</span><span class="p">)</span> <span class="n">_mrot</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">_theta</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">_theta</span><span class="p">))</span> <span class="n">_mrot</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">_theta</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">_theta</span><span class="p">))</span> <span class="n">new_cd</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">cd</span><span class="p">,</span> <span class="n">_mrot</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">cd</span> <span class="o">=</span> <span class="n">new_cd</span> </div> <div class="viewcode-block" id="WCS.printwcs"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.printwcs">[docs]</a> <span class="k">def</span> <span class="nf">printwcs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Temporary function for internal use.</span> <span class="sd"> """</span> <span class="k">print</span><span class="p">(</span><span class="s">'WCS Keywords</span><span class="se">\n</span><span class="s">'</span><span class="p">)</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="p">,</span> <span class="s">'cd'</span><span class="p">):</span> <span class="k">print</span><span class="p">(</span><span class="s">'CD_11 CD_12: {!r} {!r}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">cd</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">cd</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]))</span> <span class="k">print</span><span class="p">(</span><span class="s">'CD_21 CD_22: {!r} {!r}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">cd</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">cd</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">]))</span> <span class="k">print</span><span class="p">(</span><span class="s">'CRVAL : {!r} {!r}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">crval</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">crval</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> <span class="k">print</span><span class="p">(</span><span class="s">'CRPIX : {!r} {!r}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">crpix</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">crpix</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> <span class="k">print</span><span class="p">(</span><span class="s">'NAXIS : {!r} {!r}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">naxis1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">naxis2</span><span class="p">))</span> </div> <div class="viewcode-block" id="WCS.get_axis_types"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.WCS.html#astropy.wcs.wcs.WCS.get_axis_types">[docs]</a> <span class="k">def</span> <span class="nf">get_axis_types</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Similar to `self.wcsprm.axis_types <_wcs.Wcsprm.axis_types>`</span> <span class="sd"> but provides the information in a more Python-friendly format.</span> <span class="sd"> Returns</span> <span class="sd"> -------</span> <span class="sd"> result : list of dicts</span> <span class="sd"> Returns a list of dictionaries, one for each axis, each</span> <span class="sd"> containing attributes about the type of that axis.</span> <span class="sd"> Each dictionary has the following keys:</span> <span class="sd"> - 'coordinate_type':</span> <span class="sd"> - None: Non-specific coordinate type.</span> <span class="sd"> - 'stokes': Stokes coordinate.</span> <span class="sd"> - 'celestial': Celestial coordinate (including ``CUBEFACE``).</span> <span class="sd"> - 'spectral': Spectral coordinate.</span> <span class="sd"> - 'scale':</span> <span class="sd"> - 'linear': Linear axis.</span> <span class="sd"> - 'quantized': Quantized axis (``STOKES``, ``CUBEFACE``).</span> <span class="sd"> - 'non-linear celestial': Non-linear celestial axis.</span> <span class="sd"> - 'non-linear spectral': Non-linear spectral axis.</span> <span class="sd"> - 'logarithmic': Logarithmic axis.</span> <span class="sd"> - 'tabular': Tabular axis.</span> <span class="sd"> - 'group'</span> <span class="sd"> - Group number, e.g. lookup table number</span> <span class="sd"> - 'number'</span> <span class="sd"> - For celestial axes:</span> <span class="sd"> - 0: Longitude coordinate.</span> <span class="sd"> - 1: Latitude coordinate.</span> <span class="sd"> - 2: ``CUBEFACE`` number.</span> <span class="sd"> - For lookup tables:</span> <span class="sd"> - the axis number in a multidimensional table.</span> <span class="sd"> ``CTYPEia`` in ``"4-3"`` form with unrecognized algorithm code will</span> <span class="sd"> generate an error.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span> <span class="s">"This WCS object does not have a wcsprm object."</span><span class="p">)</span> <span class="n">coordinate_type_map</span> <span class="o">=</span> <span class="p">{</span> <span class="mi">0</span><span class="p">:</span> <span class="bp">None</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="s">'stokes'</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s">'celestial'</span><span class="p">,</span> <span class="mi">3</span><span class="p">:</span> <span class="s">'spectral'</span><span class="p">}</span> <span class="n">scale_map</span> <span class="o">=</span> <span class="p">{</span> <span class="mi">0</span><span class="p">:</span> <span class="s">'linear'</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="s">'quantized'</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s">'non-linear celestial'</span><span class="p">,</span> <span class="mi">3</span><span class="p">:</span> <span class="s">'non-linear spectral'</span><span class="p">,</span> <span class="mi">4</span><span class="p">:</span> <span class="s">'logarithmic'</span><span class="p">,</span> <span class="mi">5</span><span class="p">:</span> <span class="s">'tabular'</span><span class="p">}</span> <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">axis_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">wcs</span><span class="o">.</span><span class="n">axis_types</span><span class="p">:</span> <span class="n">subresult</span> <span class="o">=</span> <span class="p">{}</span> <span class="n">coordinate_type</span> <span class="o">=</span> <span class="p">(</span><span class="n">axis_type</span> <span class="o">//</span> <span class="mi">1000</span><span class="p">)</span> <span class="o">%</span> <span class="mi">10</span> <span class="n">subresult</span><span class="p">[</span><span class="s">'coordinate_type'</span><span class="p">]</span> <span class="o">=</span> <span class="n">coordinate_type_map</span><span class="p">[</span><span class="n">coordinate_type</span><span class="p">]</span> <span class="n">scale</span> <span class="o">=</span> <span class="p">(</span><span class="n">axis_type</span> <span class="o">//</span> <span class="mi">100</span><span class="p">)</span> <span class="o">%</span> <span class="mi">10</span> <span class="n">subresult</span><span class="p">[</span><span class="s">'scale'</span><span class="p">]</span> <span class="o">=</span> <span class="n">scale_map</span><span class="p">[</span><span class="n">scale</span><span class="p">]</span> <span class="n">group</span> <span class="o">=</span> <span class="p">(</span><span class="n">axis_type</span> <span class="o">//</span> <span class="mi">10</span><span class="p">)</span> <span class="o">%</span> <span class="mi">10</span> <span class="n">subresult</span><span class="p">[</span><span class="s">'group'</span><span class="p">]</span> <span class="o">=</span> <span class="n">group</span> <span class="n">number</span> <span class="o">=</span> <span class="n">axis_type</span> <span class="o">%</span> <span class="mi">10</span> <span class="n">subresult</span><span class="p">[</span><span class="s">'number'</span><span class="p">]</span> <span class="o">=</span> <span class="n">number</span> <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">subresult</span><span class="p">)</span> <span class="k">return</span> <span class="n">result</span> </div> <span class="k">def</span> <span class="nf">__reduce__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Support pickling of WCS objects. This is done by serializing</span> <span class="sd"> to an in-memory FITS file and dumping that as a string.</span> <span class="sd"> """</span> <span class="n">hdulist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_fits</span><span class="p">(</span><span class="n">relax</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> <span class="nb">buffer</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">BytesIO</span><span class="p">()</span> <span class="n">hdulist</span><span class="o">.</span><span class="n">writeto</span><span class="p">(</span><span class="nb">buffer</span><span class="p">)</span> <span class="k">return</span> <span class="p">(</span><span class="n">__WCS_unpickle__</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="p">,</span> <span class="nb">buffer</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(),))</span> </div> <span class="k">def</span> <span class="nf">__WCS_unpickle__</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">dct</span><span class="p">,</span> <span class="n">fits_data</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Unpickles a WCS object from a serialized FITS string.</span> <span class="sd"> """</span> <span class="bp">self</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">__new__</span><span class="p">(</span><span class="n">cls</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">dct</span><span class="p">)</span> <span class="nb">buffer</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">BytesIO</span><span class="p">(</span><span class="n">fits_data</span><span class="p">)</span> <span class="n">hdulist</span> <span class="o">=</span> <span class="n">fits</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="nb">buffer</span><span class="p">)</span> <span class="n">WCS</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hdulist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">header</span><span class="p">,</span> <span class="n">hdulist</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span> <div class="viewcode-block" id="find_all_wcs"><a class="viewcode-back" href="../../../_generated/astropy.wcs.wcs.find_all_wcs.html#astropy.wcs.wcs.find_all_wcs">[docs]</a><span class="k">def</span> <span class="nf">find_all_wcs</span><span class="p">(</span><span class="n">header</span><span class="p">,</span> <span class="n">relax</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">keysel</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Find all the WCS transformations in the given header.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> <span class="sd"> header : string or astropy.io.fits header object.</span> <span class="sd"> relax : bool or int, optional</span> <span class="sd"> Degree of permissiveness:</span> <span class="sd"> - `True` (default): Admit all recognized informal extensions of the</span> <span class="sd"> WCS standard.</span> <span class="sd"> - `False`: Recognize only FITS keywords defined by the</span> <span class="sd"> published WCS standard.</span> <span class="sd"> - `int`: a bit field selecting specific extensions to accept.</span> <span class="sd"> See :ref:`relaxread` for details.</span> <span class="sd"> keysel : sequence of flags, optional</span> <span class="sd"> A list of flags used to select the keyword types considered by</span> <span class="sd"> wcslib. When ``None``, only the standard image header</span> <span class="sd"> keywords are considered (and the underlying wcspih() C</span> <span class="sd"> function is called). To use binary table image array or pixel</span> <span class="sd"> list keywords, *keysel* must be set.</span> <span class="sd"> Each element in the list should be one of the following strings:</span> <span class="sd"> - 'image': Image header keywords</span> <span class="sd"> - 'binary': Binary table image array keywords</span> <span class="sd"> - 'pixel': Pixel list keywords</span> <span class="sd"> Keywords such as ``EQUIna`` or ``RFRQna`` that are common to</span> <span class="sd"> binary table image arrays and pixel lists (including</span> <span class="sd"> ``WCSNna`` and ``TWCSna``) are selected by both 'binary' and</span> <span class="sd"> 'pixel'.</span> <span class="sd"> Returns</span> <span class="sd"> -------</span> <span class="sd"> wcses : list of `WCS` objects</span> <span class="sd"> """</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">header</span><span class="p">,</span> <span class="n">string_types</span><span class="p">):</span> <span class="n">header_string</span> <span class="o">=</span> <span class="n">header</span> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">header</span><span class="p">,</span> <span class="n">fits</span><span class="o">.</span><span class="n">Header</span><span class="p">):</span> <span class="n">header_string</span> <span class="o">=</span> <span class="n">header</span><span class="o">.</span><span class="n">tostring</span><span class="p">()</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span> <span class="s">"header must be a string or astropy.io.fits.Header object"</span><span class="p">)</span> <span class="n">keysel_flags</span> <span class="o">=</span> <span class="n">_parse_keysel</span><span class="p">(</span><span class="n">keysel</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">header_string</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">):</span> <span class="n">header_bytes</span> <span class="o">=</span> <span class="n">header_string</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">'ascii'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">header_bytes</span> <span class="o">=</span> <span class="n">header_string</span> <span class="n">wcsprms</span> <span class="o">=</span> <span class="n">_wcs</span><span class="o">.</span><span class="n">find_all_wcs</span><span class="p">(</span><span class="n">header_bytes</span><span class="p">,</span> <span class="n">relax</span><span class="p">,</span> <span class="n">keysel_flags</span><span class="p">)</span> <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">wcsprm</span> <span class="ow">in</span> <span class="n">wcsprms</span><span class="p">:</span> <span class="n">subresult</span> <span class="o">=</span> <span class="n">WCS</span><span class="p">()</span> <span class="n">subresult</span><span class="o">.</span><span class="n">wcs</span> <span class="o">=</span> <span class="n">wcsprm</span> <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">subresult</span><span class="p">)</span> <span class="k">return</span> <span class="n">result</span></div> </pre></div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"><h3>Page Contents</h3> </div> </div> <div class="clearer"></div> </div> <footer class="footer"> <p class="pull-right"> <a href="#">Back to Top</a></p> <p> © Copyright 2011-2013, The Astropy Developers.<br/> Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. Last built 22 Oct 2013. <br/> </p> </footer> </body> </html>