{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Fitting XShooter data with xtool ###" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from xtool.data import XShooterData, Order\n", "from xtool.model import OrderModel, VirtualPixelWavelength, GenericBackground, MoffatTrace, SlopedMoffatTrace\n", "\n", "from collections import OrderedDict\n", "from scipy import sparse\n", "from scipy import optimize\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Reading XShooter data ####" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "xd = XShooterData('xtool_ds/')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "current_order = xd[17]\n", "current_order.enable_flags_as_mask() # important to update the data to include the bad pixels from the pipeline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Generating a virtual pixel table for \"Wavelength\"-pixels ####" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "virt_pix = VirtualPixelWavelength.from_order(current_order, wavelength_sampling=0.03)\n", "pixel_table = virt_pix()" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "#### Initializing the two Models ####" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "background_mdl = GenericBackground(pixel_table, virt_pix.wavelength_pixels)\n", "trace_mdl = SlopedMoffatTrace(pixel_table, virt_pix.wavelength_pixels)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "order_model = OrderModel([background_mdl, trace_mdl])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Show fittable parameters ####" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "order_model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Initializing the fitter ####" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from xtool.model.fitters import Fitter" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "fitter = Fitter(order_model, current_order)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Differential Evolution fit ####\n", "\n", "Differential evolution is a very thorough but slow processs. It does not use starting values but moves within the bounds of the parameters. " ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "differential_evolution step 1: f(x)= 4.22785e+06\n", "differential_evolution step 2: f(x)= 4.22785e+06\n", "differential_evolution step 3: f(x)= 2.95083e+06\n", "differential_evolution step 4: f(x)= 2.95083e+06\n", "differential_evolution step 5: f(x)= 2.26008e+06\n", "differential_evolution step 6: f(x)= 2.26008e+06\n", "differential_evolution step 7: f(x)= 2.26008e+06\n", "differential_evolution step 8: f(x)= 2.26008e+06\n", "differential_evolution step 9: f(x)= 2.06608e+06\n", "differential_evolution step 10: f(x)= 2.06231e+06\n", "differential_evolution step 11: f(x)= 2.00095e+06\n", "differential_evolution step 12: f(x)= 1.96445e+06\n", "differential_evolution step 13: f(x)= 1.96445e+06\n", "differential_evolution step 14: f(x)= 1.96445e+06\n", "differential_evolution step 15: f(x)= 1.89723e+06\n", "differential_evolution step 16: f(x)= 1.89723e+06\n", "differential_evolution step 17: f(x)= 1.89723e+06\n", "differential_evolution step 18: f(x)= 1.89723e+06\n", "differential_evolution step 19: f(x)= 1.89654e+06\n", "differential_evolution step 20: f(x)= 1.89654e+06\n", "differential_evolution step 21: f(x)= 1.89654e+06\n", "Fit finished in 1475.61700892 s\n" ] } ], "source": [ "order_model.beta.fixed = False\n", "dresult = fitter.fit_differential_evolution(disp=True)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ " fun: 1896544.4149950482\n", " message: 'Optimization terminated successfully.'\n", " nfev: 1425\n", " nit: 21\n", " success: True\n", " x: array([-2.44188896, -0.26832235, 0.19794569, 2.0046534 ])" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dresult" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Nelder Mead / Simplex ####\n", "\n", "This one is much faster algorithm that will use starting values, but is unbounded" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/wkerzend/anaconda3/envs/xtool/lib/python2.7/site-packages/scipy/optimize/_minimize.py:394: RuntimeWarning: Method Nelder-Mead cannot handle constraints nor bounds.\n", " RuntimeWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Fit finished in 851.559898853 s\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/wkerzend/anaconda3/envs/xtool/lib/python2.7/site-packages/scipy/sparse/linalg/dsolve/linsolve.py:243: SparseEfficiencyWarning: splu requires CSC matrix format\n", " warn('splu requires CSC matrix format', SparseEfficiencyWarning)\n", "/Users/wkerzend/anaconda3/envs/xtool/lib/python2.7/site-packages/scipy/sparse/linalg/dsolve/linsolve.py:161: SparseEfficiencyWarning: spsolve is more efficient when sparse b is in the CSC matrix format\n", " 'is in the CSC matrix format', SparseEfficiencyWarning)\n" ] } ], "source": [ "order_model.trace_pos = -2\n", "order_model.sigma = 0.1\n", "order_model.trace_slope = 0.\n", "order_model.beta.fixed = False\n", "order_model.beta = 2.0\n", "result = fitter.fit_scipy_minimize('Nelder-Mead')" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "spec = order_model.model_list[1].to_spectrum()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY8AAAEACAYAAABLfPrqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xu41OS1+PHvEqQgIqJWUEAFBQuCVrRIb7qrCNpTwUu1\nqFWs1J6KrbdqK+r5Ca3n4KUq3rCn3gBvFG0VrIpCYXvUqlBRlIuCRZCNAgqKtiJsYP3+SIbJ3Ccz\nmUkysz7PM89k3rzJrD07yUreJG9EVTHGGGP82CHsAIwxxsSPJQ9jjDG+WfIwxhjjmyUPY4wxvlny\nMMYY45slD2OMMb4FkjxE5BIRWSAib4rIQyLSSkQ6iMhzIvKOiDwrIu099UeJyFIRWSwigzzl/dx5\nLBGRcUHEZowxJnhlJw8R2Rv4JdBPVQ8GWgKnA1cAM1X1QGAWMMqt3xs4DegFHA+MFxFxZ3cXMEJV\newI9RWRwufEZY4wJXlDNVi2AtiLSEmgDrAKGAhPd8ROBE93hIcBkVd2iqsuBpUB/EekEtFPVuW69\nSZ5pjDHGREjZyUNVPwBuAt7HSRobVHUm0FFV17h1VgN7upN0BlZ6ZrHKLesMNHnKm9wyY4wxERNE\ns9WuOEcZ+wJ74xyBnAmk93ti/aAYY0yNaBnAPAYCy1R1PYCIPA58C1gjIh1VdY3bJLXWrb8K6OqZ\nvotblqs8g4hYIjLGmBKoqhSuVVgQ5zzeBwaISGv3xPcxwCJgGnCOW2c4MNUdngYMc6/I6gYcAMxx\nm7Y2iEh/dz5ne6bJoKqRf11zzTWhxxBUnH/5iwLRjzPsVxxitDjrN84glX3koapzROQx4HWg2X3/\nI9AOmCIi5wIrcK6wQlUXicgUnATTDIzU5F91ATABaA08rarTy43PGGNM8IJotkJVxwBj0orX4zRp\nZas/Fhibpfw1oG8QMRljjKkcu8O8ghoaGsIOoSgWZ3DiECNYnEGLS5xBkqDbwapBRDSOccfZ44/D\nySeD/ezGxJeIoBE6YW6MMabOWPIwxhjjmyUPY4wxvlnyMEWRQFpJjTG1wpKHMcYY3yx5GGOM8c2S\nhzHGGN8seZii2P0dxhgvSx7GGGN8s+RhjDHGN0sexhhjfLPkYYwxxjdLHqYodpOgMcbLkoepCYcd\nBgsWhB2FMfXDkoepCfPmwQsvhB2FMfXDkkfEvfee3WNhjIkeSx4R1707PPZY2FEYY0yqQJKHiLQX\nkUdFZLGILBSRI0Skg4g8JyLviMizItLeU3+UiCx16w/ylPcTkTdFZImIjAsitlrw2WdhR2CMMamC\nOvK4FXhaVXsBhwBvA1cAM1X1QGAWMApARHoDpwG9gOOB8SLbr+W5Cxihqj2BniIyOKD4TB2w5j1j\nqqfs5CEiuwDfVdX7AVR1i6puAIYCE91qE4ET3eEhwGS33nJgKdBfRDoB7VR1rltvkmcaY4wxERLE\nkUc34GMRuV9E5onIH0VkJ6Cjqq4BUNXVwJ5u/c7ASs/0q9yyzkCTp7zJLat7tkdtjImaIJJHS6Af\ncKeq9gP+jdNklb7Js02gMcbUiJYBzKMJWKmq/3A//xkneawRkY6qusZtklrrjl8FdPVM38Uty1We\n1ejRo7cPNzQ00NDQUN5fYfL65JOwIyjMjtCMSdXY2EhjY2NF5i0awBonIs8D56nqEhG5BtjJHbVe\nVa8Xkd8AHVT1CveE+UPAETjNUjOAHqqqIvIKcCEwF3gKuE1Vp2f5Pg0i7jgQgbvvhp/+NNw4WreG\nTZuiu4EWgTvugAsuCDsSY6JLRFDVQDobCuLIA5wN/kMisiOwDPgJ0AKYIiLnAitwrrBCVReJyBRg\nEdAMjPRkgguACUBrnKu3MhJHPYrCBnvTprAjMMZESSDJQ1XnA9/IMmpgjvpjgbFZyl8D+gYRk6k/\n1nmjMdVjd5gbY4zxzZJHDNgedXGi0LxnTL2w5BEDtlE0xkSNJQ8Te88/H3YExtQfSx4m9uwWH2Oq\nz5JHlanCO++EHUVtsuY9Y6rHkkeVPfUUfO1r/qaxjaIxJmoseVTZv/8ddgTGGFM+Sx7GGGN8s+Rh\naobdD2NM9VjyML7cd1/YEeRm54aMqR5LHlUW973jiy8OOwJjTBRY8jDGGOObJQ/jizUNmXq0eDG8\n/XbYUURLUM/zMBUUpQ12lGJJF+XYTLz17g0tWsCWLWFHEh125GF8sQ20qVe27Key5GF8sRXIGAOW\nPIxPljyMMWDJwxhjTAkCSx4isoOIzBORae7nDiLynIi8IyLPikh7T91RIrJURBaLyCBPeT8ReVNE\nlojIuKBii5JS7vOwvX1jTNQEeeRxEbDI8/kKYKaqHgjMAkYBiEhv4DSgF3A8MF5k+yb1LmCEqvYE\neorI4ADji5033gg7gkyWyEy9ivsNvkELJHmISBfg+8A9nuKhwER3eCJwojs8BJisqltUdTmwFOgv\nIp2Adqo61603yTNNXTrpJOc9SgutJQ9Tr2zZTxXUkcctwOWA9+ftqKprAFR1NbCnW94ZWOmpt8ot\n6ww0ecqb3DITIbYCGWMggJsEReQ/gDWq+oaINOSpGuhmZ/To0duHGxoaaKjBZ5Fu2+a8R2mDHaVY\n0kU5NmPC0NjYSGNjY0XmHcQd5t8GhojI94E2QDsReQBYLSIdVXWN2yS11q2/Cujqmb6LW5arPCtv\n8qhV778fdgSZbANtTHyk71iPGTMmsHmX3Wylqleq6j6q2h0YBsxS1bOAJ4Fz3GrDganu8DRgmIi0\nEpFuwAHAHLdpa4OI9HdPoJ/tmcYYY0yEVLJvq+uAKSJyLrAC5worVHWRiEzBuTKrGRipun1/9gJg\nAtAaeFpVp1cwPmOMKVqiGdk4Ak0eqvo88Lw7vB4YmKPeWGBslvLXgL5BxhQ1cb/PI0qxGGPCY3eY\nx5wqzJtX3e+LqijHZkytseQRkubmYOYzcyYcdlgw8yqGbaBNlCxcCC+8EHYU9cme5xGSLVtgxx3L\nn8/mzeXPw5i4GjIEli2znZow2JFHSGxhD16U7sQ3ptZZ8jA1wxKyMdVjySMkQW3oqr3BtL17YwxY\n8jDGxNDq1c57VI82m5th/fqwo6gsSx4xkG8FsSOBYH3yCXz1q2FHYQrZay9YsybsKHK7+mrYffew\no6gsSx5VFveNfVT39MC5gq1cTU3w8cflz8dU3ubN0V2fotgvXdAseYQkyhvhuHr33bAjMMbx4YfJ\n4ZYt4amnwoulUix5hGjbNnj88fLmEVYSWrHCEqAxuXz2mfN+5pmwdStMnhxuPJVgySNE8+fDyScX\nrlfMRrraG/L99oNnnqnud1ZDVJtBTHZR34F5+GHnfVXOh0vElyWPkPhZ6L3PMleFdesy6/z1r+XH\n5Nfnn1f/Oyst6hsjEw+FlqNXX41/L72WPGLgHs+T4R9+GPbYI/k5saf8xRfVicW7Zx61Da0dNdQX\nkej+z707fNkMGAB/+1t1YqkUSx4hKmXBT1zfHpaoJQyvl18OOwJjihfE1YFhsuQRc1HemFdbob29\nYkR1T9Yk/eMfYUfg3+zZmWVxX9YseVTQCSdkXu+dWGBK3eivWFFeTCa/Wk/GTU3xb2u/5JLkcJz/\nX5Y8TE5//Wvwzxq4/fZg52fqS9eucNttYUdhwJKHKSB9z+j664Odf5gLYJz3+nKJ+wpdjAULwo4g\nOBs2hB1B8WptfSk7eYhIFxGZJSILReQtEbnQLe8gIs+JyDsi8qyItPdMM0pElorIYhEZ5CnvJyJv\nisgSERlXbmxRkL7AzJmTHA5iQ1VrC6QxfsSp88EHHkj9HPcdlSCOPLYAl6rqQcA3gQtE5GvAFcBM\nVT0QmAWMAhCR3sBpQC/geGC8yPaf8S5ghKr2BHqKyOAA4oukoDf6tXjPhTG1ZNq01M91nzxUdbWq\nvuEO/wtYDHQBhgIT3WoTgRPd4SHAZFXdoqrLgaVAfxHpBLRT1bluvUmeaWLvrrtST/QF7eqrKzdv\nY0z5/vzn1M87xPykQaDPMBeR/YCvA68AHVV1DTgJRkT2dKt1BrxX5K9yy7YATZ7yJrc8ds44A4YO\nTS37/e+dZy0nBHXksWmT8x5G99RxazJTdV5xX2mNI+577nGPP7DkISI7A48BF6nqv0QkfdMS6KZm\n9OjR24cbGhpoaGgIcvZleeQR57kQUPwGVrW0hWnrVv/TlCuMrlCCcNNNcPnl+f8ntdiBXa2K285L\numokj8bGRhobGysy70CSh4i0xEkcD6jqVLd4jYh0VNU1bpPUWrd8FdDVM3kXtyxXeVbe5BFFiQW7\nmAV80yZo3To+K0PQlx9Xy/z5hesEfTVcFMV9jzdMmzdDq1bBzKsa/4f0HesxY8YENu+gDuDvAxap\n6q2esmnAOe7wcGCqp3yYiLQSkW7AAcAcVV0NbBCR/u4J9LM909S0uHdTEBdxSc4mvxdfdN7DSILe\n53SUKrEcxj2Jl33kISLfBs4E3hKR13Gap64ErgemiMi5wAqcK6xQ1UUiMgVYBDQDI1W3r9YXABOA\n1sDTqjq93PjCUugSwlKbqbzWrIn/Amiqz5JouBJ3+Mf9/1B28lDVl4AWOUYPzDHNWGBslvLXgL7l\nxhSEhx6CH/+49H/wXPeasVzTe89VvPRSad/RqRNce21p05bDT5Ocibfly50doX79wo4kGopZ5vP1\nvbV+Pey8c/HzijK77iSHN9/0V3/kSH/Pvh43LnnU8NFH/r7Lq1pdsXv93/9V/ztNcPwcrX7/+3DY\nYZWLJQzNzfCvfxWud++98LWv+Z//N76Re9whhyR3HOPex5glj4DcdVf+E8npK+yaNZl7HhdcUPz3\nJeYXRrNVGAnLhCPuG7hsLrwQ2rUrXO+55+Cdd2Dp0mRZofVt4cL845uaksnDjjxqVCkb5WwLQzEL\nyP33O+/jxwfznZX21lvV/05j0pW64/T227nHqWb2/fWLX6SOT/fFF8nyPn0Kf78deZiyJRb+oJ4o\ntmUL3HxzMPPy+uCD4OcZVXblW3yUuuOUb6M9Ywb0dc+6TpnivBe6+KVtW5jq47pQSx41LnE5oB9+\njjxy7TU1NcGzz2Z2m71gAXz5Zf7vX74cfvWrgmH69sgj2cvjfthdr/zssddin2n5ztlt3Oi8e3ci\nvCfAzznHeVd15pPoNWLlyuK/35qtalwpV0C9/Xb55yC6doXjjoOLLkot79s3+w1spdxhPmNGabHF\nXdxX1qD4+R2ifNS5eHHw80wcDSS6/Un3/PPO+4MPwlFHwf77O58vvLC4dV/EjjxMFv/8Z2Xnn/5U\nQvB/R/Rnn8GgQYXredXKRtfbHX4hxVyNEwX1fPFC4nL4II1zHwSR6F4olz/9qbT5e5NH3NcrSx4F\nLFjg/MN/+9vSpg9yASk0L+/heLZEU+/efbf4uiNHBve9qoU3RqXYuNFpb6+UuG/cVqyA88/3N01i\nHeraNX+9p54qLaYddrAjj7rxstv/b2MjDBmS/7xD4qqpYvlt4irURDVihPO+ejXsu2/2hbN9+8yy\nL7+Ec8/NfalwrqurKrVx2bjR+W2eeaYy8y9GkBv7++6D3XaDhx8Obp7g3K8AMGGCv+mKXe6injwK\nxfenP8Ef/pB7/HPPOe9TpzrrQLFPWCynadqOPOrI7NnJ9yef9N8GnG8B8duN+qRJxdXbay/nfckS\n533jxtxtuIMHw6GHOokv16XCiY1UtSSaYvwcKQTNzxPq3nsv/5FKk/uggaCTYWLZynVBQ7mivmec\nnhjmzUs90f2b3+SffvBg+PRTOPFEaNMmeZVVJdk5jzqSvmKmJ4MtW+AHP8g9/R/+4DwEJtv5kIFZ\nO28JTq9e0KGDc1IvPcY993Qei/ncc/mve8+n0jcoPvZYZeefj5+9wieecG4SzbUxSCTxoCViTOxB\nBy2M7v79SL/C6bDD4D/+I7PemjXw3e9mn0ehKxiDZsmjjqVvVDZsyN/++dpr8MMfVjamfD791OkJ\ndObM1PKPPoKzzy5v3qrw6qvOXbhBSiSlMLtBKeVGyJ/9LHt5ormq1GaK+fOd32Tx4vJ+E7/P+67E\nxu31150m0gcfdI5ov/zSWUeCki2RTpzoXHovkrnDkzhKrxbvOQ9rtqozd9yR+rnUve+77y4/Fr9+\n/OPSpsv1N65dCwMGOP0fVVLi8shq8nO1VWIjUOhqrlI3Fom2+N69nctDsynm5lC/yaASyWPyZKeJ\n9Kyz4Jpr4NZb4fDDy59vehOV91L3UaPKn39Q7Mijjt16a+rnSjc9Bemhh0qbbu3a7OWXXea859so\nfvRRcRvNDRuyl69aBQ0NsG5d4Xnkk+ucT7kmT67MjZleuX4/b3kihnXr4LrrnOGXX07dQCUuL823\nw6PqNLHOn1+Zjdt77yWHX3892Znoiy86RyMJIvDoo6nnvbZuzX2Z+Q03pH723mQbpY301q210yU7\nqhq7lxN2ZSWfeJ35KrZeHF/XXuvvt0i8Nm1S3bpVdds21c2bVWfNSo7r0MGZz5Ahzrhcv/cHH6i2\nbat6zz3JaefPd97Xri3uf5XLlVcm62zdmiw/7zwn5lzzmj9fdfny4r67e/fM8bNnJ8f37Zv77/fa\ntCn18wMPZP8b163LLL/77uQwqN55Z+6/bds21auuSv79v/1tap3Ro5PDW7aofvKJU+/dd1UHDEjO\n97bbVJuacv8+L72UnNY7/+OOy1yONm7MrLd0qeqSJarTphW3LB57bPjrUb7Xa6857488UnhZCJq7\n7SSIVyAzqfbLkkdlX2PGqC5bpvr3v6s+9FBx03zzm877lVeq/uhHmeO3bXPeP/ww+dt98YXq3Lmq\nb73ljFu2zHkfPjw5XWOj875mTXK6jRtVL71U9brrMv8HCRs2qE6enPx82mnJOnfeqdrcnIxp9uzs\n/8/E5333zVw+Nm9WPfPM/MuGqurPfpY6/swzk+NeeUX11VedWDdvVv3zn5PfedFFyXpt22b/jltu\nyR5v4v+QXt9b96mnVP/2N2f41ltVv/zS/3LS3Jw63549nc833uh87tUrtf7SpamfsyWPe+/NjLXW\nXnPmOO8PPZS5vFSaJY9sa2nA8v3zi61nr+TrhRec9yefTCaE9Nfy5Zlll13mvO+8s+qDDzp7wM88\nkxy/dm1q/V/9SnW//TL/V9m+73/+x3nffXfV73638N9w//2qn33mJJ9cdW680TkieOIJ1eefz738\nrF5d+m/Z2OgcneT6rbK9Fi8O/n/6xBOZv+2jj+auP3Jk4Xn27l35ZTHs18svO+8PPljxzViGIJOH\nOPOLFxHRSsddqF24mHrGn7FjK3Ny88kn4YQTgp+vMaV48UX4znec+7bOOqu63y0iqGogWy07YW4i\n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\nycMYY4xv/x/lFdNIhxwu1AAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%pylab inline\n", "plot(spec.wavelength, spec.flux)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plotting in DS9 ####" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import pyds9" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "d = pyds9.DS9()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "order_model.trace_pos = result.x[0]\n", "order_model.trace_slope = result.x[1]\n", "order_model.sigma = result.x[2]\n", "order_model.beta = result.x[3]\n", "model = order_model.evaluate_to_frame(current_order, trace_pos=order_model.trace_pos, \n", " trace_slope=order_model.trace_slope, sigma=order_model.sigma, \n", " beta=order_model.beta.value)\n", "d.set('frame 1')\n", "d.set_np2arr(current_order.data.filled())\n", "\n", "d.set('frame 2')\n", "d.set_np2arr(model.filled())\n", "\n", "d.set('frame 3')\n", "d.set_np2arr((current_order.data.filled() - model.filled()) / current_order.uncertainty.filled())" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "" ] } ], "metadata": { "celltoolbar": "Raw Cell Format", "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2.0 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.11" } }, "nbformat": 4, "nbformat_minor": 0 }