Skip to content

Instantly share code, notes, and snippets.

@eteq
Created April 1, 2020 16:49
Show Gist options
  • Save eteq/d65b62656a593e42fa6f412fa22862a2 to your computer and use it in GitHub Desktop.
Save eteq/d65b62656a593e42fa6f412fa22862a2 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import sys\n",
"sys.path.insert(1, '/Users/erik/src/specutils')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import pathlib\n",
"import collections\n",
"from glob import glob\n",
"\n",
"import numpy as np\n",
"\n",
"from astropy import units as u\n",
"from astropy.constants import c\n",
"from astropy.io import fits\n",
"from astropy import nddata, visualization\n",
"visualization.quantity_support()\n",
"\n",
"from IPython import display\n",
"import ipywidgets\n",
"from ipyevents import Event \n",
"\n",
"import specutils\n",
"\n",
"import tqdm\n",
"\n",
"first = lambda x:next(iter(x))\n",
"\n",
"%matplotlib inline\n",
"from matplotlib import style, pyplot as plt\n",
"from matplotlib.backends.backend_agg import FigureCanvasAgg"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"cat_lines = [8498, 8542, 8662]*u.angstrom"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"datadir = pathlib.Path('/Users/erik/astrodata/DEIMOS/LeoT1')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Allslits0.LeoT1.fits.gz\n",
"Allslits1.LeoT1.fits.gz\n",
"LeoT1.bintabs.fits\n",
"LeoT1.log\n",
"LeoT1.plan\n",
"LeoT1_1d.log\n",
"LeoT1_mcerr.log\n",
"arcwave_qa1.fits\n",
"arcwave_qa2.fits\n",
"arcwave_qa3.fits\n",
"arcwave_qa4.fits\n",
"arcwave_qa5.fits\n",
"arcwave_qa6.fits\n",
"arcwave_qa7.fits\n",
"arcwave_qa8.fits\n",
"calibSlit.LeoT1.000B.fits.gz\n",
"calibSlit.LeoT1.000R.fits.gz\n",
"calibSlit.LeoT1.001B.fits.gz\n",
"calibSlit.LeoT1.001R.fits.gz\n",
"calibSlit.LeoT1.002B.fits.gz\n",
"calibSlit.LeoT1.002R.fits.gz\n",
"calibSlit.LeoT1.003B.fits.gz\n",
"calibSlit.LeoT1.003R.fits.gz\n",
"calibSlit.LeoT1.004B.fits.gz\n",
"calibSlit.LeoT1.004R.fits.gz\n",
"calibSlit.LeoT1.005B.fits.gz\n",
"calibSlit.LeoT1.005R.fits.gz\n",
"calibSlit.LeoT1.006B.fits.gz\n",
"calibSlit.LeoT1.006R.fits.gz\n",
"calibSlit.LeoT1.007B.fits.gz\n",
"calibSlit.LeoT1.007R.fits.gz\n",
"calibSlit.LeoT1.008B.fits.gz\n",
"calibSlit.LeoT1.008R.fits.gz\n",
"calibSlit.LeoT1.009B.fits.gz\n",
"calibSlit.LeoT1.009R.fits.gz\n",
"calibSlit.LeoT1.010B.fits.gz\n",
"calibSlit.LeoT1.010R.fits.gz\n",
"calibSlit.LeoT1.011B.fits.gz\n",
"calibSlit.LeoT1.011R.fits.gz\n",
"calibSlit.LeoT1.012B.fits.gz\n",
"calibSlit.LeoT1.012R.fits.gz\n",
"calibSlit.LeoT1.013B.fits.gz\n",
"calibSlit.LeoT1.013R.fits.gz\n",
"calibSlit.LeoT1.014B.fits.gz\n",
"calibSlit.LeoT1.014R.fits.gz\n",
"calibSlit.LeoT1.015B.fits.gz\n",
"calibSlit.LeoT1.015R.fits.gz\n",
"calibSlit.LeoT1.016B.fits.gz\n",
"calibSlit.LeoT1.016R.fits.gz\n",
"calibSlit.LeoT1.017B.fits.gz\n",
"calibSlit.LeoT1.017R.fits.gz\n",
"calibSlit.LeoT1.018B.fits.gz\n",
"calibSlit.LeoT1.018R.fits.gz\n",
"calibSlit.LeoT1.019B.fits.gz\n",
"calibSlit.LeoT1.019R.fits.gz\n",
"calibSlit.LeoT1.020B.fits.gz\n",
"calibSlit.LeoT1.020R.fits.gz\n",
"calibSlit.LeoT1.022B.fits.gz\n",
"calibSlit.LeoT1.022R.fits.gz\n",
"calibSlit.LeoT1.023B.fits.gz\n",
"calibSlit.LeoT1.023R.fits.gz\n",
"calibSlit.LeoT1.024B.fits.gz\n",
"calibSlit.LeoT1.024R.fits.gz\n",
"calibSlit.LeoT1.025B.fits.gz\n",
"calibSlit.LeoT1.025R.fits.gz\n",
"calibSlit.LeoT1.026B.fits.gz\n",
"calibSlit.LeoT1.026R.fits.gz\n",
"calibSlit.LeoT1.027B.fits.gz\n",
"calibSlit.LeoT1.027R.fits.gz\n",
"calibSlit.LeoT1.028B.fits.gz\n",
"calibSlit.LeoT1.028R.fits.gz\n",
"calibSlit.LeoT1.029B.fits.gz\n",
"calibSlit.LeoT1.029R.fits.gz\n",
"calibSlit.LeoT1.030B.fits.gz\n",
"calibSlit.LeoT1.030R.fits.gz\n",
"calibSlit.LeoT1.031B.fits.gz\n",
"calibSlit.LeoT1.031R.fits.gz\n",
"calibSlit.LeoT1.032B.fits.gz\n",
"calibSlit.LeoT1.032R.fits.gz\n",
"calibSlit.LeoT1.033B.fits.gz\n",
"calibSlit.LeoT1.033R.fits.gz\n",
"calibSlit.LeoT1.034B.fits.gz\n",
"calibSlit.LeoT1.034R.fits.gz\n",
"calibSlit.LeoT1.035B.fits.gz\n",
"calibSlit.LeoT1.035R.fits.gz\n",
"calibSlit.LeoT1.036B.fits.gz\n",
"calibSlit.LeoT1.036R.fits.gz\n",
"calibSlit.LeoT1.037B.fits.gz\n",
"calibSlit.LeoT1.037R.fits.gz\n",
"calibSlit.LeoT1.039B.fits.gz\n",
"calibSlit.LeoT1.039R.fits.gz\n",
"calibSlit.LeoT1.040B.fits.gz\n",
"calibSlit.LeoT1.040R.fits.gz\n",
"calibSlit.LeoT1.041B.fits.gz\n",
"calibSlit.LeoT1.041R.fits.gz\n",
"calibSlit.LeoT1.042B.fits.gz\n",
"calibSlit.LeoT1.042R.fits.gz\n",
"calibSlit.LeoT1.043B.fits.gz\n",
"calibSlit.LeoT1.043R.fits.gz\n",
"calibSlit.LeoT1.044B.fits.gz\n",
"calibSlit.LeoT1.044R.fits.gz\n",
"calibSlit.LeoT1.045B.fits.gz\n",
"calibSlit.LeoT1.045R.fits.gz\n",
"calibSlit.LeoT1.046B.fits.gz\n",
"calibSlit.LeoT1.046R.fits.gz\n",
"calibSlit.LeoT1.047B.fits.gz\n",
"calibSlit.LeoT1.047R.fits.gz\n",
"calibSlit.LeoT1.048B.fits.gz\n",
"calibSlit.LeoT1.048R.fits.gz\n",
"calibSlit.LeoT1.049B.fits.gz\n",
"calibSlit.LeoT1.049R.fits.gz\n",
"calibSlit.LeoT1.050B.fits.gz\n",
"calibSlit.LeoT1.050R.fits.gz\n",
"calibSlit.LeoT1.051B.fits.gz\n",
"calibSlit.LeoT1.051R.fits.gz\n",
"calibSlit.LeoT1.052B.fits.gz\n",
"calibSlit.LeoT1.052R.fits.gz\n",
"calibSlit.LeoT1.053B.fits.gz\n",
"calibSlit.LeoT1.053R.fits.gz\n",
"calibSlit.LeoT1.054B.fits.gz\n",
"calibSlit.LeoT1.054R.fits.gz\n",
"calibSlit.LeoT1.055B.fits.gz\n",
"calibSlit.LeoT1.055R.fits.gz\n",
"calibSlit.LeoT1.056B.fits.gz\n",
"calibSlit.LeoT1.056R.fits.gz\n",
"calibSlit.LeoT1.057B.fits.gz\n",
"calibSlit.LeoT1.057R.fits.gz\n",
"calibSlit.LeoT1.058B.fits.gz\n",
"calibSlit.LeoT1.058R.fits.gz\n",
"calibSlit.LeoT1.059B.fits.gz\n",
"calibSlit.LeoT1.059R.fits.gz\n",
"calibSlit.LeoT1.060B.fits.gz\n",
"calibSlit.LeoT1.060R.fits.gz\n",
"calibSlit.LeoT1.061B.fits.gz\n",
"calibSlit.LeoT1.061R.fits.gz\n",
"calibSlit.LeoT1.062B.fits.gz\n",
"calibSlit.LeoT1.062R.fits.gz\n",
"calibSlit.LeoT1.063B.fits.gz\n",
"calibSlit.LeoT1.063R.fits.gz\n",
"calibSlit.LeoT1.064B.fits.gz\n",
"calibSlit.LeoT1.064R.fits.gz\n",
"calibSlit.LeoT1.065B.fits.gz\n",
"calibSlit.LeoT1.065R.fits.gz\n",
"calibSlit.LeoT1.066B.fits.gz\n",
"calibSlit.LeoT1.066R.fits.gz\n",
"calibSlit.LeoT1.067B.fits.gz\n",
"calibSlit.LeoT1.067R.fits.gz\n",
"calibSlit.LeoT1.068B.fits.gz\n",
"calibSlit.LeoT1.068R.fits.gz\n",
"calibSlit.LeoT1.069B.fits.gz\n",
"calibSlit.LeoT1.069R.fits.gz\n",
"calibSlit.LeoT1.070B.fits.gz\n",
"calibSlit.LeoT1.070R.fits.gz\n",
"calibSlit.LeoT1.071B.fits.gz\n",
"calibSlit.LeoT1.071R.fits.gz\n",
"calibSlit.LeoT1.072B.fits.gz\n",
"calibSlit.LeoT1.072R.fits.gz\n",
"calibSlit.LeoT1.073B.fits.gz\n",
"calibSlit.LeoT1.073R.fits.gz\n",
"calibSlit.LeoT1.074B.fits.gz\n",
"calibSlit.LeoT1.074R.fits.gz\n",
"calibSlit.LeoT1.075B.fits.gz\n",
"calibSlit.LeoT1.075R.fits.gz\n",
"calibSlit.LeoT1.076B.fits.gz\n",
"calibSlit.LeoT1.076R.fits.gz\n",
"calibSlit.LeoT1.077B.fits.gz\n",
"calibSlit.LeoT1.077R.fits.gz\n",
"calibSlit.LeoT1.078B.fits.gz\n",
"calibSlit.LeoT1.078R.fits.gz\n",
"calibSlit.LeoT1.079B.fits.gz\n",
"calibSlit.LeoT1.079R.fits.gz\n",
"calibSlit.LeoT1.080B.fits.gz\n",
"calibSlit.LeoT1.080R.fits.gz\n",
"calibSlit.LeoT1.081B.fits.gz\n",
"calibSlit.LeoT1.081R.fits.gz\n",
"calibSlit.LeoT1.082B.fits.gz\n",
"calibSlit.LeoT1.082R.fits.gz\n",
"calibSlit.LeoT1.083B.fits.gz\n",
"calibSlit.LeoT1.083R.fits.gz\n",
"calibSlit.LeoT1.084B.fits.gz\n",
"calibSlit.LeoT1.084R.fits.gz\n",
"calibSlit.LeoT1.085B.fits.gz\n",
"calibSlit.LeoT1.085R.fits.gz\n",
"calibSlit.LeoT1.086B.fits.gz\n",
"calibSlit.LeoT1.086R.fits.gz\n",
"calibSlit.LeoT1.087B.fits.gz\n",
"calibSlit.LeoT1.087R.fits.gz\n",
"calibSlit.LeoT1.088B.fits.gz\n",
"calibSlit.LeoT1.088R.fits.gz\n",
"calibSlit.LeoT1.089B.fits.gz\n",
"calibSlit.LeoT1.089R.fits.gz\n",
"calibSlit.LeoT1.090B.fits.gz\n",
"calibSlit.LeoT1.090R.fits.gz\n",
"calibSlit.LeoT1.091B.fits.gz\n",
"calibSlit.LeoT1.091R.fits.gz\n",
"calibSlit.LeoT1.092B.fits.gz\n",
"calibSlit.LeoT1.092R.fits.gz\n",
"calibSlit.LeoT1.093B.fits.gz\n",
"calibSlit.LeoT1.093R.fits.gz\n",
"calibSlit.LeoT1.095B.fits.gz\n",
"calibSlit.LeoT1.095R.fits.gz\n",
"calibSlit.LeoT1.096B.fits.gz\n",
"calibSlit.LeoT1.096R.fits.gz\n",
"calibSlit.LeoT1.097B.fits.gz\n",
"calibSlit.LeoT1.097R.fits.gz\n",
"calibSlit.LeoT1.098B.fits.gz\n",
"calibSlit.LeoT1.098R.fits.gz\n",
"calibSlit.LeoT1.099B.fits.gz\n",
"calibSlit.LeoT1.099R.fits.gz\n",
"calibSlit.LeoT1.100B.fits.gz\n",
"calibSlit.LeoT1.100R.fits.gz\n",
"calibSlit.LeoT1.101B.fits.gz\n",
"calibSlit.LeoT1.101R.fits.gz\n",
"calibSlit.LeoT1.102B.fits.gz\n",
"calibSlit.LeoT1.102R.fits.gz\n",
"calibSlit.LeoT1.103B.fits.gz\n",
"calibSlit.LeoT1.103R.fits.gz\n",
"calibSlit.LeoT1.104B.fits.gz\n",
"calibSlit.LeoT1.104R.fits.gz\n",
"calibSlit.LeoT1.105B.fits.gz\n",
"calibSlit.LeoT1.105R.fits.gz\n",
"calibSlit.LeoT1.106B.fits.gz\n",
"calibSlit.LeoT1.106R.fits.gz\n",
"calibSlit.LeoT1.107B.fits.gz\n",
"calibSlit.LeoT1.107R.fits.gz\n",
"calibSlit.LeoT1.108B.fits.gz\n",
"calibSlit.LeoT1.108R.fits.gz\n",
"calibSlit.LeoT1.109B.fits.gz\n",
"calibSlit.LeoT1.109R.fits.gz\n",
"calibSlit.LeoT1.110B.fits.gz\n",
"calibSlit.LeoT1.110R.fits.gz\n",
"calibSlit.LeoT1.111B.fits.gz\n",
"calibSlit.LeoT1.111R.fits.gz\n",
"calibSlit.LeoT1.112B.fits.gz\n",
"calibSlit.LeoT1.112R.fits.gz\n",
"calibSlit.LeoT1.113B.fits.gz\n",
"calibSlit.LeoT1.113R.fits.gz\n",
"calibSlit.LeoT1.114B.fits.gz\n",
"calibSlit.LeoT1.114R.fits.gz\n",
"calibSlit.LeoT1.115B.fits.gz\n",
"calibSlit.LeoT1.115R.fits.gz\n",
"calibSlit.LeoT1.116B.fits.gz\n",
"calibSlit.LeoT1.116R.fits.gz\n",
"calibSlit.LeoT1.117B.fits.gz\n",
"calibSlit.LeoT1.117R.fits.gz\n",
"doneprocessing.txt\n",
"failure.19.3.sav\n",
"failure.19.7.sav\n",
"failure.56.2.sav\n",
"failure.56.6.sav\n",
"failure.91.4.sav\n",
"failure.92.4.sav\n",
"failure.96.1.sav\n",
"failure.96.5.sav\n",
"obj_info.LeoT1.fits\n",
"\u001b[1m\u001b[36mps\u001b[m\u001b[m/\n",
"slit.LeoT1.000B.fits.gz\n",
"slit.LeoT1.000R.fits.gz\n",
"slit.LeoT1.001B.fits.gz\n",
"slit.LeoT1.001R.fits.gz\n",
"slit.LeoT1.002B.fits.gz\n",
"slit.LeoT1.002R.fits.gz\n",
"slit.LeoT1.003B.fits.gz\n",
"slit.LeoT1.003R.fits.gz\n",
"slit.LeoT1.004B.fits.gz\n",
"slit.LeoT1.004R.fits.gz\n",
"slit.LeoT1.005B.fits.gz\n",
"slit.LeoT1.005R.fits.gz\n",
"slit.LeoT1.006B.fits.gz\n",
"slit.LeoT1.006R.fits.gz\n",
"slit.LeoT1.007B.fits.gz\n",
"slit.LeoT1.007R.fits.gz\n",
"slit.LeoT1.008B.fits.gz\n",
"slit.LeoT1.008R.fits.gz\n",
"slit.LeoT1.009B.fits.gz\n",
"slit.LeoT1.009R.fits.gz\n",
"slit.LeoT1.010B.fits.gz\n",
"slit.LeoT1.010R.fits.gz\n",
"slit.LeoT1.011B.fits.gz\n",
"slit.LeoT1.011R.fits.gz\n",
"slit.LeoT1.012B.fits.gz\n",
"slit.LeoT1.012R.fits.gz\n",
"slit.LeoT1.013B.fits.gz\n",
"slit.LeoT1.013R.fits.gz\n",
"slit.LeoT1.014B.fits.gz\n",
"slit.LeoT1.014R.fits.gz\n",
"slit.LeoT1.015B.fits.gz\n",
"slit.LeoT1.015R.fits.gz\n",
"slit.LeoT1.016B.fits.gz\n",
"slit.LeoT1.016R.fits.gz\n",
"slit.LeoT1.017B.fits.gz\n",
"slit.LeoT1.017R.fits.gz\n",
"slit.LeoT1.018B.fits.gz\n",
"slit.LeoT1.018R.fits.gz\n",
"slit.LeoT1.019B.fits.gz\n",
"slit.LeoT1.019R.fits.gz\n",
"slit.LeoT1.020B.fits.gz\n",
"slit.LeoT1.020R.fits.gz\n",
"slit.LeoT1.022B.fits.gz\n",
"slit.LeoT1.022R.fits.gz\n",
"slit.LeoT1.023B.fits.gz\n",
"slit.LeoT1.023R.fits.gz\n",
"slit.LeoT1.024B.fits.gz\n",
"slit.LeoT1.024R.fits.gz\n",
"slit.LeoT1.025B.fits.gz\n",
"slit.LeoT1.025R.fits.gz\n",
"slit.LeoT1.026B.fits.gz\n",
"slit.LeoT1.026R.fits.gz\n",
"slit.LeoT1.027B.fits.gz\n",
"slit.LeoT1.027R.fits.gz\n",
"slit.LeoT1.028B.fits.gz\n",
"slit.LeoT1.028R.fits.gz\n",
"slit.LeoT1.029B.fits.gz\n",
"slit.LeoT1.029R.fits.gz\n",
"slit.LeoT1.030B.fits.gz\n",
"slit.LeoT1.030R.fits.gz\n",
"slit.LeoT1.031B.fits.gz\n",
"slit.LeoT1.031R.fits.gz\n",
"slit.LeoT1.032B.fits.gz\n",
"slit.LeoT1.032R.fits.gz\n",
"slit.LeoT1.033B.fits.gz\n",
"slit.LeoT1.033R.fits.gz\n",
"slit.LeoT1.034B.fits.gz\n",
"slit.LeoT1.034R.fits.gz\n",
"slit.LeoT1.035B.fits.gz\n",
"slit.LeoT1.035R.fits.gz\n",
"slit.LeoT1.036B.fits.gz\n",
"slit.LeoT1.036R.fits.gz\n",
"slit.LeoT1.037B.fits.gz\n",
"slit.LeoT1.037R.fits.gz\n",
"slit.LeoT1.039B.fits.gz\n",
"slit.LeoT1.039R.fits.gz\n",
"slit.LeoT1.040B.fits.gz\n",
"slit.LeoT1.040R.fits.gz\n",
"slit.LeoT1.041B.fits.gz\n",
"slit.LeoT1.041R.fits.gz\n",
"slit.LeoT1.042B.fits.gz\n",
"slit.LeoT1.042R.fits.gz\n",
"slit.LeoT1.043B.fits.gz\n",
"slit.LeoT1.043R.fits.gz\n",
"slit.LeoT1.044B.fits.gz\n",
"slit.LeoT1.044R.fits.gz\n",
"slit.LeoT1.045B.fits.gz\n",
"slit.LeoT1.045R.fits.gz\n",
"slit.LeoT1.046B.fits.gz\n",
"slit.LeoT1.046R.fits.gz\n",
"slit.LeoT1.047B.fits.gz\n",
"slit.LeoT1.047R.fits.gz\n",
"slit.LeoT1.048B.fits.gz\n",
"slit.LeoT1.048R.fits.gz\n",
"slit.LeoT1.049B.fits.gz\n",
"slit.LeoT1.049R.fits.gz\n",
"slit.LeoT1.050B.fits.gz\n",
"slit.LeoT1.050R.fits.gz\n",
"slit.LeoT1.051B.fits.gz\n",
"slit.LeoT1.051R.fits.gz\n",
"slit.LeoT1.052B.fits.gz\n",
"slit.LeoT1.052R.fits.gz\n",
"slit.LeoT1.053B.fits.gz\n",
"slit.LeoT1.053R.fits.gz\n",
"slit.LeoT1.054B.fits.gz\n",
"slit.LeoT1.054R.fits.gz\n",
"slit.LeoT1.055B.fits.gz\n",
"slit.LeoT1.055R.fits.gz\n",
"slit.LeoT1.056B.fits.gz\n",
"slit.LeoT1.056R.fits.gz\n",
"slit.LeoT1.057B.fits.gz\n",
"slit.LeoT1.057R.fits.gz\n",
"slit.LeoT1.058B.fits.gz\n",
"slit.LeoT1.058R.fits.gz\n",
"slit.LeoT1.059B.fits.gz\n",
"slit.LeoT1.059R.fits.gz\n",
"slit.LeoT1.060B.fits.gz\n",
"slit.LeoT1.060R.fits.gz\n",
"slit.LeoT1.061B.fits.gz\n",
"slit.LeoT1.061R.fits.gz\n",
"slit.LeoT1.062B.fits.gz\n",
"slit.LeoT1.062R.fits.gz\n",
"slit.LeoT1.063B.fits.gz\n",
"slit.LeoT1.063R.fits.gz\n",
"slit.LeoT1.064B.fits.gz\n",
"slit.LeoT1.064R.fits.gz\n",
"slit.LeoT1.065B.fits.gz\n",
"slit.LeoT1.065R.fits.gz\n",
"slit.LeoT1.066B.fits.gz\n",
"slit.LeoT1.066R.fits.gz\n",
"slit.LeoT1.067B.fits.gz\n",
"slit.LeoT1.067R.fits.gz\n",
"slit.LeoT1.068B.fits.gz\n",
"slit.LeoT1.068R.fits.gz\n",
"slit.LeoT1.069B.fits.gz\n",
"slit.LeoT1.069R.fits.gz\n",
"slit.LeoT1.070B.fits.gz\n",
"slit.LeoT1.070R.fits.gz\n",
"slit.LeoT1.071B.fits.gz\n",
"slit.LeoT1.071R.fits.gz\n",
"slit.LeoT1.072B.fits.gz\n",
"slit.LeoT1.072R.fits.gz\n",
"slit.LeoT1.073B.fits.gz\n",
"slit.LeoT1.073R.fits.gz\n",
"slit.LeoT1.074B.fits.gz\n",
"slit.LeoT1.074R.fits.gz\n",
"slit.LeoT1.075B.fits.gz\n",
"slit.LeoT1.075R.fits.gz\n",
"slit.LeoT1.076B.fits.gz\n",
"slit.LeoT1.076R.fits.gz\n",
"slit.LeoT1.077B.fits.gz\n",
"slit.LeoT1.077R.fits.gz\n",
"slit.LeoT1.078B.fits.gz\n",
"slit.LeoT1.078R.fits.gz\n",
"slit.LeoT1.079B.fits.gz\n",
"slit.LeoT1.079R.fits.gz\n",
"slit.LeoT1.080B.fits.gz\n",
"slit.LeoT1.080R.fits.gz\n",
"slit.LeoT1.081B.fits.gz\n",
"slit.LeoT1.081R.fits.gz\n",
"slit.LeoT1.082B.fits.gz\n",
"slit.LeoT1.082R.fits.gz\n",
"slit.LeoT1.083B.fits.gz\n",
"slit.LeoT1.083R.fits.gz\n",
"slit.LeoT1.084B.fits.gz\n",
"slit.LeoT1.084R.fits.gz\n",
"slit.LeoT1.085B.fits.gz\n",
"slit.LeoT1.085R.fits.gz\n",
"slit.LeoT1.086B.fits.gz\n",
"slit.LeoT1.086R.fits.gz\n",
"slit.LeoT1.087B.fits.gz\n",
"slit.LeoT1.087R.fits.gz\n",
"slit.LeoT1.088B.fits.gz\n",
"slit.LeoT1.088R.fits.gz\n",
"slit.LeoT1.089B.fits.gz\n",
"slit.LeoT1.089R.fits.gz\n",
"slit.LeoT1.090B.fits.gz\n",
"slit.LeoT1.090R.fits.gz\n",
"slit.LeoT1.091B.fits.gz\n",
"slit.LeoT1.091R.fits.gz\n",
"slit.LeoT1.092B.fits.gz\n",
"slit.LeoT1.092R.fits.gz\n",
"slit.LeoT1.093B.fits.gz\n",
"slit.LeoT1.093R.fits.gz\n",
"slit.LeoT1.095B.fits.gz\n",
"slit.LeoT1.095R.fits.gz\n",
"slit.LeoT1.096B.fits.gz\n",
"slit.LeoT1.096R.fits.gz\n",
"slit.LeoT1.097B.fits.gz\n",
"slit.LeoT1.097R.fits.gz\n",
"slit.LeoT1.098B.fits.gz\n",
"slit.LeoT1.098R.fits.gz\n",
"slit.LeoT1.099B.fits.gz\n",
"slit.LeoT1.099R.fits.gz\n",
"slit.LeoT1.100B.fits.gz\n",
"slit.LeoT1.100R.fits.gz\n",
"slit.LeoT1.101B.fits.gz\n",
"slit.LeoT1.101R.fits.gz\n",
"slit.LeoT1.102B.fits.gz\n",
"slit.LeoT1.102R.fits.gz\n",
"slit.LeoT1.103B.fits.gz\n",
"slit.LeoT1.103R.fits.gz\n",
"slit.LeoT1.104B.fits.gz\n",
"slit.LeoT1.104R.fits.gz\n",
"slit.LeoT1.105B.fits.gz\n",
"slit.LeoT1.105R.fits.gz\n",
"slit.LeoT1.106B.fits.gz\n",
"slit.LeoT1.106R.fits.gz\n",
"slit.LeoT1.107B.fits.gz\n",
"slit.LeoT1.107R.fits.gz\n",
"slit.LeoT1.108B.fits.gz\n",
"slit.LeoT1.108R.fits.gz\n",
"slit.LeoT1.109B.fits.gz\n",
"slit.LeoT1.109R.fits.gz\n",
"slit.LeoT1.110B.fits.gz\n",
"slit.LeoT1.110R.fits.gz\n",
"slit.LeoT1.111B.fits.gz\n",
"slit.LeoT1.111R.fits.gz\n",
"slit.LeoT1.112B.fits.gz\n",
"slit.LeoT1.112R.fits.gz\n",
"slit.LeoT1.113B.fits.gz\n",
"slit.LeoT1.113R.fits.gz\n",
"slit.LeoT1.114B.fits.gz\n",
"slit.LeoT1.114R.fits.gz\n",
"slit.LeoT1.115B.fits.gz\n",
"slit.LeoT1.115R.fits.gz\n",
"slit.LeoT1.116B.fits.gz\n",
"slit.LeoT1.116R.fits.gz\n",
"slit.LeoT1.117B.fits.gz\n",
"slit.LeoT1.117R.fits.gz\n",
"spSlit.LeoT1.000B.fits.gz\n",
"spSlit.LeoT1.000R.fits.gz\n",
"spSlit.LeoT1.001B.fits.gz\n",
"spSlit.LeoT1.001R.fits.gz\n",
"spSlit.LeoT1.002B.fits.gz\n",
"spSlit.LeoT1.002R.fits.gz\n",
"spSlit.LeoT1.003B.fits.gz\n",
"spSlit.LeoT1.003R.fits.gz\n",
"spSlit.LeoT1.004B.fits.gz\n",
"spSlit.LeoT1.004R.fits.gz\n",
"spSlit.LeoT1.005B.fits.gz\n",
"spSlit.LeoT1.005R.fits.gz\n",
"spSlit.LeoT1.006B.fits.gz\n",
"spSlit.LeoT1.006R.fits.gz\n",
"spSlit.LeoT1.007B.fits.gz\n",
"spSlit.LeoT1.007R.fits.gz\n",
"spSlit.LeoT1.008B.fits.gz\n",
"spSlit.LeoT1.008R.fits.gz\n",
"spSlit.LeoT1.009B.fits.gz\n",
"spSlit.LeoT1.009R.fits.gz\n",
"spSlit.LeoT1.010B.fits.gz\n",
"spSlit.LeoT1.010R.fits.gz\n",
"spSlit.LeoT1.011B.fits.gz\n",
"spSlit.LeoT1.011R.fits.gz\n",
"spSlit.LeoT1.012B.fits.gz\n",
"spSlit.LeoT1.012R.fits.gz\n",
"spSlit.LeoT1.013B.fits.gz\n",
"spSlit.LeoT1.013R.fits.gz\n",
"spSlit.LeoT1.014B.fits.gz\n",
"spSlit.LeoT1.014R.fits.gz\n",
"spSlit.LeoT1.015B.fits.gz\n",
"spSlit.LeoT1.015R.fits.gz\n",
"spSlit.LeoT1.016B.fits.gz\n",
"spSlit.LeoT1.016R.fits.gz\n",
"spSlit.LeoT1.017B.fits.gz\n",
"spSlit.LeoT1.017R.fits.gz\n",
"spSlit.LeoT1.018B.fits.gz\n",
"spSlit.LeoT1.018R.fits.gz\n",
"spSlit.LeoT1.019B.fits.gz\n",
"spSlit.LeoT1.019R.fits.gz\n",
"spSlit.LeoT1.020B.fits.gz\n",
"spSlit.LeoT1.020R.fits.gz\n",
"spSlit.LeoT1.022B.fits.gz\n",
"spSlit.LeoT1.022R.fits.gz\n",
"spSlit.LeoT1.023B.fits.gz\n",
"spSlit.LeoT1.023R.fits.gz\n",
"spSlit.LeoT1.024B.fits.gz\n",
"spSlit.LeoT1.024R.fits.gz\n",
"spSlit.LeoT1.025B.fits.gz\n",
"spSlit.LeoT1.025R.fits.gz\n",
"spSlit.LeoT1.026B.fits.gz\n",
"spSlit.LeoT1.026R.fits.gz\n",
"spSlit.LeoT1.027B.fits.gz\n",
"spSlit.LeoT1.027R.fits.gz\n",
"spSlit.LeoT1.028B.fits.gz\n",
"spSlit.LeoT1.028R.fits.gz\n",
"spSlit.LeoT1.029B.fits.gz\n",
"spSlit.LeoT1.029R.fits.gz\n",
"spSlit.LeoT1.030B.fits.gz\n",
"spSlit.LeoT1.030R.fits.gz\n",
"spSlit.LeoT1.031B.fits.gz\n",
"spSlit.LeoT1.031R.fits.gz\n",
"spSlit.LeoT1.032B.fits.gz\n",
"spSlit.LeoT1.032R.fits.gz\n",
"spSlit.LeoT1.033B.fits.gz\n",
"spSlit.LeoT1.033R.fits.gz\n",
"spSlit.LeoT1.034B.fits.gz\n",
"spSlit.LeoT1.034R.fits.gz\n",
"spSlit.LeoT1.035B.fits.gz\n",
"spSlit.LeoT1.035R.fits.gz\n",
"spSlit.LeoT1.036B.fits.gz\n",
"spSlit.LeoT1.036R.fits.gz\n",
"spSlit.LeoT1.037B.fits.gz\n",
"spSlit.LeoT1.037R.fits.gz\n",
"spSlit.LeoT1.039B.fits.gz\n",
"spSlit.LeoT1.039R.fits.gz\n",
"spSlit.LeoT1.040B.fits.gz\n",
"spSlit.LeoT1.040R.fits.gz\n",
"spSlit.LeoT1.041B.fits.gz\n",
"spSlit.LeoT1.041R.fits.gz\n",
"spSlit.LeoT1.042B.fits.gz\n",
"spSlit.LeoT1.042R.fits.gz\n",
"spSlit.LeoT1.043B.fits.gz\n",
"spSlit.LeoT1.043R.fits.gz\n",
"spSlit.LeoT1.044B.fits.gz\n",
"spSlit.LeoT1.044R.fits.gz\n",
"spSlit.LeoT1.045B.fits.gz\n",
"spSlit.LeoT1.045R.fits.gz\n",
"spSlit.LeoT1.046B.fits.gz\n",
"spSlit.LeoT1.046R.fits.gz\n",
"spSlit.LeoT1.047B.fits.gz\n",
"spSlit.LeoT1.047R.fits.gz\n",
"spSlit.LeoT1.048B.fits.gz\n",
"spSlit.LeoT1.048R.fits.gz\n",
"spSlit.LeoT1.049B.fits.gz\n",
"spSlit.LeoT1.049R.fits.gz\n",
"spSlit.LeoT1.050B.fits.gz\n",
"spSlit.LeoT1.050R.fits.gz\n",
"spSlit.LeoT1.051B.fits.gz\n",
"spSlit.LeoT1.051R.fits.gz\n",
"spSlit.LeoT1.052B.fits.gz\n",
"spSlit.LeoT1.052R.fits.gz\n",
"spSlit.LeoT1.053B.fits.gz\n",
"spSlit.LeoT1.053R.fits.gz\n",
"spSlit.LeoT1.054B.fits.gz\n",
"spSlit.LeoT1.054R.fits.gz\n",
"spSlit.LeoT1.055B.fits.gz\n",
"spSlit.LeoT1.055R.fits.gz\n",
"spSlit.LeoT1.056B.fits.gz\n",
"spSlit.LeoT1.056R.fits.gz\n",
"spSlit.LeoT1.057B.fits.gz\n",
"spSlit.LeoT1.057R.fits.gz\n",
"spSlit.LeoT1.058B.fits.gz\n",
"spSlit.LeoT1.058R.fits.gz\n",
"spSlit.LeoT1.059B.fits.gz\n",
"spSlit.LeoT1.059R.fits.gz\n",
"spSlit.LeoT1.060B.fits.gz\n",
"spSlit.LeoT1.060R.fits.gz\n",
"spSlit.LeoT1.061B.fits.gz\n",
"spSlit.LeoT1.061R.fits.gz\n",
"spSlit.LeoT1.062B.fits.gz\n",
"spSlit.LeoT1.062R.fits.gz\n",
"spSlit.LeoT1.063B.fits.gz\n",
"spSlit.LeoT1.063R.fits.gz\n",
"spSlit.LeoT1.064B.fits.gz\n",
"spSlit.LeoT1.064R.fits.gz\n",
"spSlit.LeoT1.065B.fits.gz\n",
"spSlit.LeoT1.065R.fits.gz\n",
"spSlit.LeoT1.066B.fits.gz\n",
"spSlit.LeoT1.066R.fits.gz\n",
"spSlit.LeoT1.067B.fits.gz\n",
"spSlit.LeoT1.067R.fits.gz\n",
"spSlit.LeoT1.068B.fits.gz\n",
"spSlit.LeoT1.068R.fits.gz\n",
"spSlit.LeoT1.069B.fits.gz\n",
"spSlit.LeoT1.069R.fits.gz\n",
"spSlit.LeoT1.070B.fits.gz\n",
"spSlit.LeoT1.070R.fits.gz\n",
"spSlit.LeoT1.071B.fits.gz\n",
"spSlit.LeoT1.071R.fits.gz\n",
"spSlit.LeoT1.072B.fits.gz\n",
"spSlit.LeoT1.072R.fits.gz\n",
"spSlit.LeoT1.073B.fits.gz\n",
"spSlit.LeoT1.073R.fits.gz\n",
"spSlit.LeoT1.074B.fits.gz\n",
"spSlit.LeoT1.074R.fits.gz\n",
"spSlit.LeoT1.075B.fits.gz\n",
"spSlit.LeoT1.075R.fits.gz\n",
"spSlit.LeoT1.076B.fits.gz\n",
"spSlit.LeoT1.076R.fits.gz\n",
"spSlit.LeoT1.077B.fits.gz\n",
"spSlit.LeoT1.077R.fits.gz\n",
"spSlit.LeoT1.078B.fits.gz\n",
"spSlit.LeoT1.078R.fits.gz\n",
"spSlit.LeoT1.079B.fits.gz\n",
"spSlit.LeoT1.079R.fits.gz\n",
"spSlit.LeoT1.080B.fits.gz\n",
"spSlit.LeoT1.080R.fits.gz\n",
"spSlit.LeoT1.081B.fits.gz\n",
"spSlit.LeoT1.081R.fits.gz\n",
"spSlit.LeoT1.082B.fits.gz\n",
"spSlit.LeoT1.082R.fits.gz\n",
"spSlit.LeoT1.083B.fits.gz\n",
"spSlit.LeoT1.083R.fits.gz\n",
"spSlit.LeoT1.084B.fits.gz\n",
"spSlit.LeoT1.084R.fits.gz\n",
"spSlit.LeoT1.085B.fits.gz\n",
"spSlit.LeoT1.085R.fits.gz\n",
"spSlit.LeoT1.086B.fits.gz\n",
"spSlit.LeoT1.086R.fits.gz\n",
"spSlit.LeoT1.087B.fits.gz\n",
"spSlit.LeoT1.087R.fits.gz\n",
"spSlit.LeoT1.088B.fits.gz\n",
"spSlit.LeoT1.088R.fits.gz\n",
"spSlit.LeoT1.089B.fits.gz\n",
"spSlit.LeoT1.089R.fits.gz\n",
"spSlit.LeoT1.090B.fits.gz\n",
"spSlit.LeoT1.090R.fits.gz\n",
"spSlit.LeoT1.091B.fits.gz\n",
"spSlit.LeoT1.091R.fits.gz\n",
"spSlit.LeoT1.092B.fits.gz\n",
"spSlit.LeoT1.092R.fits.gz\n",
"spSlit.LeoT1.093B.fits.gz\n",
"spSlit.LeoT1.093R.fits.gz\n",
"spSlit.LeoT1.095B.fits.gz\n",
"spSlit.LeoT1.095R.fits.gz\n",
"spSlit.LeoT1.096B.fits.gz\n",
"spSlit.LeoT1.096R.fits.gz\n",
"spSlit.LeoT1.097B.fits.gz\n",
"spSlit.LeoT1.097R.fits.gz\n",
"spSlit.LeoT1.098B.fits.gz\n",
"spSlit.LeoT1.098R.fits.gz\n",
"spSlit.LeoT1.099B.fits.gz\n",
"spSlit.LeoT1.099R.fits.gz\n",
"spSlit.LeoT1.100B.fits.gz\n",
"spSlit.LeoT1.100R.fits.gz\n",
"spSlit.LeoT1.101B.fits.gz\n",
"spSlit.LeoT1.101R.fits.gz\n",
"spSlit.LeoT1.102B.fits.gz\n",
"spSlit.LeoT1.102R.fits.gz\n",
"spSlit.LeoT1.103B.fits.gz\n",
"spSlit.LeoT1.103R.fits.gz\n",
"spSlit.LeoT1.104B.fits.gz\n",
"spSlit.LeoT1.104R.fits.gz\n",
"spSlit.LeoT1.105B.fits.gz\n",
"spSlit.LeoT1.105R.fits.gz\n",
"spSlit.LeoT1.106B.fits.gz\n",
"spSlit.LeoT1.106R.fits.gz\n",
"spSlit.LeoT1.107B.fits.gz\n",
"spSlit.LeoT1.107R.fits.gz\n",
"spSlit.LeoT1.108B.fits.gz\n",
"spSlit.LeoT1.108R.fits.gz\n",
"spSlit.LeoT1.109B.fits.gz\n",
"spSlit.LeoT1.109R.fits.gz\n",
"spSlit.LeoT1.110B.fits.gz\n",
"spSlit.LeoT1.110R.fits.gz\n",
"spSlit.LeoT1.111B.fits.gz\n",
"spSlit.LeoT1.111R.fits.gz\n",
"spSlit.LeoT1.112B.fits.gz\n",
"spSlit.LeoT1.112R.fits.gz\n",
"spSlit.LeoT1.113B.fits.gz\n",
"spSlit.LeoT1.113R.fits.gz\n",
"spSlit.LeoT1.114B.fits.gz\n",
"spSlit.LeoT1.114R.fits.gz\n",
"spSlit.LeoT1.115B.fits.gz\n",
"spSlit.LeoT1.115R.fits.gz\n",
"spSlit.LeoT1.116B.fits.gz\n",
"spSlit.LeoT1.116R.fits.gz\n",
"spSlit.LeoT1.117B.fits.gz\n",
"spSlit.LeoT1.117R.fits.gz\n",
"spec1d.LeoT1.000.s67782280741880h.fits.gz\n",
"spec1d.LeoT1.001.s67735028630104h.fits.gz\n",
"spec1d.LeoT1.002.s67782280806769h.fits.gz\n",
"spec1d.LeoT1.003.s67782280742003h.fits.gz\n",
"spec1d.LeoT1.004.s67782280742000h.fits.gz\n",
"spec1d.LeoT1.005.s67782280742008h.fits.gz\n",
"spec1d.LeoT1.006.s67782280741936h.fits.gz\n",
"spec1d.LeoT1.007.s67782280741158h.fits.gz\n",
"spec1d.LeoT1.008.s67782280741964h.fits.gz\n",
"spec1d.LeoT1.009.s67782280742004h.fits.gz\n",
"spec1d.LeoT1.010.s67782280741218h.fits.gz\n",
"spec1d.LeoT1.010.serendip1.fits.gz\n",
"spec1d.LeoT1.011.s67782280741842h.fits.gz\n",
"spec1d.LeoT1.012.s67782280741115h.fits.gz\n",
"spec1d.LeoT1.013.s67782280741213h.fits.gz\n",
"spec1d.LeoT1.014.s67782280741856h.fits.gz\n",
"spec1d.LeoT1.015.s67782280741815h.fits.gz\n",
"spec1d.LeoT1.016.s67782280741884h.fits.gz\n",
"spec1d.LeoT1.017.s67782280741914h.fits.gz\n",
"spec1d.LeoT1.017.serendip1.fits.gz\n",
"spec1d.LeoT1.017.serendip2.fits.gz\n",
"spec1d.LeoT1.018.s67782280741835.fits.gz\n",
"spec1d.LeoT1.019.s67782280741321.fits.gz\n",
"spec1d.LeoT1.020.s67782280741763.fits.gz\n",
"spec1d.LeoT1.022.s67782280806771.fits.gz\n",
"spec1d.LeoT1.023.s67782280806780.fits.gz\n",
"spec1d.LeoT1.024.s67782280806784.fits.gz\n",
"spec1d.LeoT1.025.s67782280806827.fits.gz\n",
"spec1d.LeoT1.026.s67782280806844.fits.gz\n",
"spec1d.LeoT1.027.s67782280807271.fits.gz\n",
"spec1d.LeoT1.028.s67735028629971.fits.gz\n",
"spec1d.LeoT1.029.s67735028630019.fits.gz\n",
"spec1d.LeoT1.030.s67735028630021.fits.gz\n",
"spec1d.LeoT1.031.s67735028630026.fits.gz\n",
"spec1d.LeoT1.032.s67735028630050.fits.gz\n",
"spec1d.LeoT1.033.s67735028630051.fits.gz\n",
"spec1d.LeoT1.034.s67782280741681.fits.gz\n",
"spec1d.LeoT1.035.s67782280741743.fits.gz\n",
"spec1d.LeoT1.036.s67782280742025.fits.gz\n",
"spec1d.LeoT1.037.s67782280806816.fits.gz\n",
"spec1d.LeoT1.039.s67782280806842.fits.gz\n",
"spec1d.LeoT1.040.s67782280806868.fits.gz\n",
"spec1d.LeoT1.041.s67782280807273.fits.gz\n",
"spec1d.LeoT1.042.s67735028564964.fits.gz\n",
"spec1d.LeoT1.043.hst230.fits.gz\n",
"spec1d.LeoT1.044.s67782280741759.fits.gz\n",
"spec1d.LeoT1.045.s67735028629954.fits.gz\n",
"spec1d.LeoT1.046.s67735028629997.fits.gz\n",
"spec1d.LeoT1.047.s67735028630460.fits.gz\n",
"spec1d.LeoT1.048.s67782280806696.fits.gz\n",
"spec1d.LeoT1.049.s67782280806857.fits.gz\n",
"spec1d.LeoT1.049.serendip1.fits.gz\n",
"spec1d.LeoT1.050.s67735028564345.fits.gz\n",
"spec1d.LeoT1.050.serendip1.fits.gz\n",
"spec1d.LeoT1.051.s67735028564736.fits.gz\n",
"spec1d.LeoT1.052.s67735028564930.fits.gz\n",
"spec1d.LeoT1.053.s67735028564331.fits.gz\n",
"spec1d.LeoT1.054.s67735028564340.fits.gz\n",
"spec1d.LeoT1.055.s67735028564348.fits.gz\n",
"spec1d.LeoT1.056.s67735028564654.fits.gz\n",
"spec1d.LeoT1.057.s67735028564661.fits.gz\n",
"spec1d.LeoT1.058.s67735028564669.fits.gz\n",
"spec1d.LeoT1.059.s67735028564682.fits.gz\n",
"spec1d.LeoT1.060.s67735028629955.fits.gz\n",
"spec1d.LeoT1.061.s67735028629959.fits.gz\n",
"spec1d.LeoT1.062.s67735028629960.fits.gz\n",
"spec1d.LeoT1.063.s67735028629962.fits.gz\n",
"spec1d.LeoT1.064.s67782280806433.fits.gz\n",
"spec1d.LeoT1.065.s67782280806455.fits.gz\n",
"spec1d.LeoT1.065.serendip1.fits.gz\n",
"spec1d.LeoT1.066.s67735028564091.fits.gz\n",
"spec1d.LeoT1.067.s67782280806957.fits.gz\n",
"spec1d.LeoT1.068.s67782280806964.fits.gz\n",
"spec1d.LeoT1.069.s67782280806965.fits.gz\n",
"spec1d.LeoT1.070.s67782280807000.fits.gz\n",
"spec1d.LeoT1.070.serendip1.fits.gz\n",
"spec1d.LeoT1.071.s67782280807282.fits.gz\n",
"spec1d.LeoT1.072.s67782280807300.fits.gz\n",
"spec1d.LeoT1.073.s67782280807306.fits.gz\n",
"spec1d.LeoT1.074.s67782280807314.fits.gz\n",
"spec1d.LeoT1.075.s67782280807334.fits.gz\n",
"spec1d.LeoT1.076.s67782280807339.fits.gz\n",
"spec1d.LeoT1.076.serendip1.fits.gz\n",
"spec1d.LeoT1.077.s67782280807346.fits.gz\n",
"spec1d.LeoT1.078.s67735028564083.fits.gz\n",
"spec1d.LeoT1.078.serendip1.fits.gz\n",
"spec1d.LeoT1.079.s67735028564084.fits.gz\n",
"spec1d.LeoT1.079.serendip1.fits.gz\n",
"spec1d.LeoT1.080.s67735028564252.fits.gz\n",
"spec1d.LeoT1.081.s67735028564326.fits.gz\n",
"spec1d.LeoT1.082.s67735028564328.fits.gz\n",
"spec1d.LeoT1.083.s67735028564591.fits.gz\n",
"spec1d.LeoT1.084.s67735028564603.fits.gz\n",
"spec1d.LeoT1.085.s67735028564616.fits.gz\n",
"spec1d.LeoT1.086.s67735028564651.fits.gz\n",
"spec1d.LeoT1.087.s67735028564674.fits.gz\n",
"spec1d.LeoT1.088.s67735028564910.fits.gz\n",
"spec1d.LeoT1.089.s67735028564925.fits.gz\n",
"spec1d.LeoT1.089.serendip1.fits.gz\n",
"spec1d.LeoT1.090.s67782280806447.fits.gz\n",
"spec1d.LeoT1.090.serendip1.fits.gz\n",
"spec1d.LeoT1.091.s67782280806938.fits.gz\n",
"spec1d.LeoT1.091.serendip1.fits.gz\n",
"spec1d.LeoT1.092.s67782280806951.fits.gz\n",
"spec1d.LeoT1.093.s67782280807004.fits.gz\n",
"spec1d.LeoT1.095.s67735028564834.fits.gz\n",
"spec1d.LeoT1.096.s67735028564835.fits.gz\n",
"spec1d.LeoT1.096.serendip1.fits.gz\n",
"spec1d.LeoT1.096.serendip2.fits.gz\n",
"spec1d.LeoT1.096.serendip3.fits.gz\n",
"spec1d.LeoT1.097.s67735028564839.fits.gz\n",
"spec1d.LeoT1.098.s67735028564857.fits.gz\n",
"spec1d.LeoT1.099.s67735028564047.fits.gz\n",
"spec1d.LeoT1.099.serendip1.fits.gz\n",
"spec1d.LeoT1.100.s67735028564310.fits.gz\n",
"spec1d.LeoT1.101.s67735028564312.fits.gz\n",
"spec1d.LeoT1.102.s67735028564315.fits.gz\n",
"spec1d.LeoT1.102.serendip1.fits.gz\n",
"spec1d.LeoT1.103.s67735028564502.fits.gz\n",
"spec1d.LeoT1.104.s67735028564507.fits.gz\n",
"spec1d.LeoT1.105.s67735028564551.fits.gz\n",
"spec1d.LeoT1.106.s67735028564568.fits.gz\n",
"spec1d.LeoT1.107.s67735028564599.fits.gz\n",
"spec1d.LeoT1.108.s67735028564639.fits.gz\n",
"spec1d.LeoT1.109.s67735028564657.fits.gz\n",
"spec1d.LeoT1.110.s67735028629668.fits.gz\n",
"spec1d.LeoT1.111.s67782280806547.fits.gz\n",
"spec1d.LeoT1.112.s67782280806555.fits.gz\n",
"spec1d.LeoT1.113.s67735028564217.fits.gz\n",
"spec1d.LeoT1.114.s67735028564082.fits.gz\n",
"spec1d.LeoT1.115.s67735028564198.fits.gz\n",
"spec1d.LeoT1.116.s67782280806558.fits.gz\n",
"spec1d.LeoT1.117.s67735028564202.fits.gz\n",
"zspec1d.LeoT1.000.s67782280741880h.fits.gz\n",
"zspec1d.LeoT1.001.s67735028630104h.fits.gz\n",
"zspec1d.LeoT1.002.s67782280806769h.fits.gz\n",
"zspec1d.LeoT1.003.s67782280742003h.fits.gz\n",
"zspec1d.LeoT1.004.s67782280742000h.fits.gz\n",
"zspec1d.LeoT1.005.s67782280742008h.fits.gz\n",
"zspec1d.LeoT1.006.s67782280741936h.fits.gz\n",
"zspec1d.LeoT1.007.s67782280741158h.fits.gz\n",
"zspec1d.LeoT1.008.s67782280741964h.fits.gz\n",
"zspec1d.LeoT1.009.s67782280742004h.fits.gz\n",
"zspec1d.LeoT1.010.s67782280741218h.fits.gz\n",
"zspec1d.LeoT1.010.serendip1.fits.gz\n",
"zspec1d.LeoT1.011.s67782280741842h.fits.gz\n",
"zspec1d.LeoT1.012.s67782280741115h.fits.gz\n",
"zspec1d.LeoT1.013.s67782280741213h.fits.gz\n",
"zspec1d.LeoT1.014.s67782280741856h.fits.gz\n",
"zspec1d.LeoT1.015.s67782280741815h.fits.gz\n",
"zspec1d.LeoT1.016.s67782280741884h.fits.gz\n",
"zspec1d.LeoT1.017.s67782280741914h.fits.gz\n",
"zspec1d.LeoT1.017.serendip1.fits.gz\n",
"zspec1d.LeoT1.017.serendip2.fits.gz\n",
"zspec1d.LeoT1.018.s67782280741835.fits.gz\n",
"zspec1d.LeoT1.019.s67782280741321.fits.gz\n",
"zspec1d.LeoT1.020.s67782280741763.fits.gz\n",
"zspec1d.LeoT1.022.s67782280806771.fits.gz\n",
"zspec1d.LeoT1.023.s67782280806780.fits.gz\n",
"zspec1d.LeoT1.024.s67782280806784.fits.gz\n",
"zspec1d.LeoT1.025.s67782280806827.fits.gz\n",
"zspec1d.LeoT1.026.s67782280806844.fits.gz\n",
"zspec1d.LeoT1.027.s67782280807271.fits.gz\n",
"zspec1d.LeoT1.028.s67735028629971.fits.gz\n",
"zspec1d.LeoT1.029.s67735028630019.fits.gz\n",
"zspec1d.LeoT1.030.s67735028630021.fits.gz\n",
"zspec1d.LeoT1.031.s67735028630026.fits.gz\n",
"zspec1d.LeoT1.032.s67735028630050.fits.gz\n",
"zspec1d.LeoT1.033.s67735028630051.fits.gz\n",
"zspec1d.LeoT1.034.s67782280741681.fits.gz\n",
"zspec1d.LeoT1.035.s67782280741743.fits.gz\n",
"zspec1d.LeoT1.036.s67782280742025.fits.gz\n",
"zspec1d.LeoT1.037.s67782280806816.fits.gz\n",
"zspec1d.LeoT1.039.s67782280806842.fits.gz\n",
"zspec1d.LeoT1.040.s67782280806868.fits.gz\n",
"zspec1d.LeoT1.041.s67782280807273.fits.gz\n",
"zspec1d.LeoT1.042.s67735028564964.fits.gz\n",
"zspec1d.LeoT1.043.hst230.fits.gz\n",
"zspec1d.LeoT1.044.s67782280741759.fits.gz\n",
"zspec1d.LeoT1.045.s67735028629954.fits.gz\n",
"zspec1d.LeoT1.046.s67735028629997.fits.gz\n",
"zspec1d.LeoT1.047.s67735028630460.fits.gz\n",
"zspec1d.LeoT1.048.s67782280806696.fits.gz\n",
"zspec1d.LeoT1.049.s67782280806857.fits.gz\n",
"zspec1d.LeoT1.049.serendip1.fits.gz\n",
"zspec1d.LeoT1.050.s67735028564345.fits.gz\n",
"zspec1d.LeoT1.050.serendip1.fits.gz\n",
"zspec1d.LeoT1.051.s67735028564736.fits.gz\n",
"zspec1d.LeoT1.052.s67735028564930.fits.gz\n",
"zspec1d.LeoT1.053.s67735028564331.fits.gz\n",
"zspec1d.LeoT1.054.s67735028564340.fits.gz\n",
"zspec1d.LeoT1.055.s67735028564348.fits.gz\n",
"zspec1d.LeoT1.056.s67735028564654.fits.gz\n",
"zspec1d.LeoT1.057.s67735028564661.fits.gz\n",
"zspec1d.LeoT1.058.s67735028564669.fits.gz\n",
"zspec1d.LeoT1.059.s67735028564682.fits.gz\n",
"zspec1d.LeoT1.060.s67735028629955.fits.gz\n",
"zspec1d.LeoT1.061.s67735028629959.fits.gz\n",
"zspec1d.LeoT1.062.s67735028629960.fits.gz\n",
"zspec1d.LeoT1.063.s67735028629962.fits.gz\n",
"zspec1d.LeoT1.064.s67782280806433.fits.gz\n",
"zspec1d.LeoT1.065.s67782280806455.fits.gz\n",
"zspec1d.LeoT1.065.serendip1.fits.gz\n",
"zspec1d.LeoT1.066.s67735028564091.fits.gz\n",
"zspec1d.LeoT1.067.s67782280806957.fits.gz\n",
"zspec1d.LeoT1.068.s67782280806964.fits.gz\n",
"zspec1d.LeoT1.069.s67782280806965.fits.gz\n",
"zspec1d.LeoT1.070.s67782280807000.fits.gz\n",
"zspec1d.LeoT1.070.serendip1.fits.gz\n",
"zspec1d.LeoT1.071.s67782280807282.fits.gz\n",
"zspec1d.LeoT1.072.s67782280807300.fits.gz\n",
"zspec1d.LeoT1.073.s67782280807306.fits.gz\n",
"zspec1d.LeoT1.074.s67782280807314.fits.gz\n",
"zspec1d.LeoT1.075.s67782280807334.fits.gz\n",
"zspec1d.LeoT1.076.s67782280807339.fits.gz\n",
"zspec1d.LeoT1.076.serendip1.fits.gz\n",
"zspec1d.LeoT1.077.s67782280807346.fits.gz\n",
"zspec1d.LeoT1.078.s67735028564083.fits.gz\n",
"zspec1d.LeoT1.078.serendip1.fits.gz\n",
"zspec1d.LeoT1.079.s67735028564084.fits.gz\n",
"zspec1d.LeoT1.079.serendip1.fits.gz\n",
"zspec1d.LeoT1.080.s67735028564252.fits.gz\n",
"zspec1d.LeoT1.081.s67735028564326.fits.gz\n",
"zspec1d.LeoT1.082.s67735028564328.fits.gz\n",
"zspec1d.LeoT1.083.s67735028564591.fits.gz\n",
"zspec1d.LeoT1.084.s67735028564603.fits.gz\n",
"zspec1d.LeoT1.085.s67735028564616.fits.gz\n",
"zspec1d.LeoT1.086.s67735028564651.fits.gz\n",
"zspec1d.LeoT1.087.s67735028564674.fits.gz\n",
"zspec1d.LeoT1.088.s67735028564910.fits.gz\n",
"zspec1d.LeoT1.089.s67735028564925.fits.gz\n",
"zspec1d.LeoT1.089.serendip1.fits.gz\n",
"zspec1d.LeoT1.090.s67782280806447.fits.gz\n",
"zspec1d.LeoT1.090.serendip1.fits.gz\n",
"zspec1d.LeoT1.091.s67782280806938.fits.gz\n",
"zspec1d.LeoT1.091.serendip1.fits.gz\n",
"zspec1d.LeoT1.092.s67782280806951.fits.gz\n",
"zspec1d.LeoT1.093.s67782280807004.fits.gz\n",
"zspec1d.LeoT1.095.s67735028564834.fits.gz\n",
"zspec1d.LeoT1.097.s67735028564839.fits.gz\n",
"zspec1d.LeoT1.098.s67735028564857.fits.gz\n",
"zspec1d.LeoT1.099.s67735028564047.fits.gz\n",
"zspec1d.LeoT1.099.serendip1.fits.gz\n",
"zspec1d.LeoT1.100.s67735028564310.fits.gz\n",
"zspec1d.LeoT1.101.s67735028564312.fits.gz\n",
"zspec1d.LeoT1.102.s67735028564315.fits.gz\n",
"zspec1d.LeoT1.102.serendip1.fits.gz\n",
"zspec1d.LeoT1.103.s67735028564502.fits.gz\n",
"zspec1d.LeoT1.104.s67735028564507.fits.gz\n",
"zspec1d.LeoT1.105.s67735028564551.fits.gz\n",
"zspec1d.LeoT1.106.s67735028564568.fits.gz\n",
"zspec1d.LeoT1.107.s67735028564599.fits.gz\n",
"zspec1d.LeoT1.108.s67735028564639.fits.gz\n",
"zspec1d.LeoT1.109.s67735028564657.fits.gz\n",
"zspec1d.LeoT1.110.s67735028629668.fits.gz\n",
"zspec1d.LeoT1.111.s67782280806547.fits.gz\n",
"zspec1d.LeoT1.112.s67782280806555.fits.gz\n",
"zspec1d.LeoT1.113.s67735028564217.fits.gz\n",
"zspec1d.LeoT1.114.s67735028564082.fits.gz\n",
"zspec1d.LeoT1.115.s67735028564198.fits.gz\n",
"zspec1d.LeoT1.116.s67782280806558.fits.gz\n",
"zspec1d.LeoT1.117.s67735028564202.fits.gz\n"
]
}
],
"source": [
"ls $datadir"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-6-a698f4fff297>:2: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0\n",
"Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook`\n",
" for fn in tqdm.tqdm_notebook(glob(str(datadir / 'zspec1d.LeoT1.*.fits.gz'))):\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "0b60d976429d4561a01096c591380cb2",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=129.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"zspecs = {}\n",
"for fn in tqdm.tqdm_notebook(glob(str(datadir / 'zspec1d.LeoT1.*.fits.gz'))):\n",
" nm = fn.split('LeoT1.')[-1].replace('.fits.gz', '')\n",
" d = fits.getdata(fn, 1)\n",
" zspecs[nm] = specutils.Spectrum1D(spectral_axis=d[0]['LAMBDA']*u.angstrom, flux=d[0]['SPEC']*u.count,\n",
" uncertainty=nddata.InverseVariance(d[0]['IVAR']))\n",
" for dnm in d.dtype.names:\n",
" if dnm not in ('SPEC', 'LAMBDA', 'IVAR'):\n",
" zspecs[nm].meta[dnm] = d[dnm][0]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-7-e793a316b3c0>:2: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0\n",
"Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook`\n",
" for fn in tqdm.tqdm_notebook(glob(str(datadir / 'slit.LeoT1.*.fits.gz'))):\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "7cf4da5eb5d14cdb99424e3435e0ba56",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=230.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"slits_temp = {}\n",
"for fn in tqdm.tqdm_notebook(glob(str(datadir / 'slit.LeoT1.*.fits.gz'))):\n",
" nm = fn.split('LeoT1.')[-1].replace('.fits.gz', '')\n",
" slits_temp[nm] = fits.getdata(fn, 1)\n",
"\n",
"slits = {}\n",
"for i in range(len(slits_temp)):\n",
" rstr = '{:03}R'.format(i)\n",
" bstr = '{:03}B'.format(i)\n",
" if bstr not in slits_temp and rstr not in slits_temp:\n",
" continue\n",
" slits[i] = (slits_temp[bstr], slits_temp[rstr])\n",
"del slits_temp"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"stemp = fits.open('templates/deimos-021507.fits')[0]\n",
"wl = 10**(stemp.header['COEFF0'] + np.arange(stemp.data.shape[1])*stemp.header['COEFF1'])*u.angstrom\n",
"\n",
"template_specs = {}\n",
"for i, val in enumerate(stemp.data):\n",
" template_specs[stemp.header[f'NAME{i}']] = specutils.Spectrum1D(spectral_axis=wl, flux=val*u.dimensionless_unscaled)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Ipywidgets zspeccer"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"zspec_vals = collections.defaultdict(lambda:'uncategorized')\n",
"spec_comments = collections.defaultdict(lambda:'')\n",
"\n",
"KEY_TO_QUALITY = {\n",
" '0': 'uncategorized',\n",
" '`' : 'bad',\n",
" '1': 'galaxy/other',\n",
" '2' : 'marginal',\n",
" '3' : 'good',\n",
"}\n",
"\n",
"imshow_norm_kwargs = dict(stretch='log', min_percent=5, max_percent=99.)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-14-fb1d44242235>:58: DeprecationWarning: on_trait_change is deprecated in traitlets 4.1: use observe instead\n",
" dropdown.on_trait_change(update_dropdown, 'value')\n",
"<ipython-input-14-fb1d44242235>:76: DeprecationWarning: on_trait_change is deprecated in traitlets 4.1: use observe instead\n",
" zspec.on_trait_change(update_zspec, 'value')\n",
"<ipython-input-14-fb1d44242235>:81: DeprecationWarning: on_trait_change is deprecated in traitlets 4.1: use observe instead\n",
" comments.on_trait_change(update_comments, 'value')\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "daf232af99a64e77af12e9917fa8b974",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"VBox(children=(HBox(children=(Button(description='<', style=ButtonStyle()), Dropdown(options=('000.s6778228074…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d2d37a5d52894e46969359929d09623d",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-14-fb1d44242235>:151: DeprecationWarning: on_trait_change is deprecated in traitlets 4.1: use observe instead\n",
" widget.on_trait_change(update_fig, 'value')\n"
]
}
],
"source": [
"def make_fig(specname, templname, v, output, new_canvas=True):\n",
" if new_canvas:\n",
" fig = plt.Figure(figsize=(15, 10))\n",
" canvas = FigureCanvasAgg(fig)\n",
" else:\n",
" fig = plt.figure(figsize=(15, 10))\n",
" \n",
" (ax1, ax2), (ax3, ax4) = fig.subplots(2, 2)\n",
" \n",
" zline = (v*u.km/u.s/c + 1).decompose().value\n",
" \n",
" spec = zspecs[specname]\n",
" specnum = int(specname.split('.')[0])\n",
" slit = slits[specnum]\n",
" \n",
" if templname is not None:\n",
" tspec = template_specs[templname]\n",
" for ax in [ax1, ax2]:\n",
" ax.cla()\n",
" ax.step(spec.wavelength, spec.flux, lw=1)\n",
" data_yls = ax.get_ylim()\n",
" if templname is None:\n",
" ax.step([]*first(template_specs.values()).wavelength.unit, \n",
" [], alpha=.5, lw=1)\n",
" else:\n",
" ax.step(tspec.wavelength, tspec.flux.value*np.median(spec.flux))\n",
" ax.set_ylim(*data_yls)\n",
" \n",
" snormb = visualization.simple_norm(slit[0]['FLUX'][0], **imshow_norm_kwargs)\n",
" ax3.imshow(slit[0]['FLUX'][0], extent=(slit[0]['LAMBDA0'][0][0], slit[0]['LAMBDA0'][0][-1],0, 50), \n",
" aspect=15, norm=snormb)\n",
" snormr = visualization.simple_norm(slit[1]['FLUX'][0], **imshow_norm_kwargs)\n",
" ax3.imshow(slit[1]['FLUX'][0], extent=(slit[1]['LAMBDA0'][0][0], slit[1]['LAMBDA0'][0][-1],0, 50), \n",
" aspect=15, norm=snormr)\n",
" ax4.imshow(slit[1]['FLUX'][0], extent=(slit[1]['LAMBDA0'][0][0], slit[1]['LAMBDA0'][0][-1],0, 50), \n",
" aspect=2, norm=snormr)\n",
" \n",
" ax1.set_title(specname)\n",
" ax2.set_xlim(cat_lines[0]*zline-20*u.angstrom, cat_lines[-1]*zline+20*u.angstrom)\n",
" ax4.set_xlim(cat_lines[0]*zline-20*u.angstrom, cat_lines[-1]*zline+20*u.angstrom)\n",
" \n",
" msk2 = (ax2.get_xlim()[0]<spec.wavelength.value)&(spec.wavelength.value<ax2.get_xlim()[1])\n",
" ax2.set_ylim(np.min(spec.flux[msk2]), np.max(spec.flux[msk2]))\n",
" for line in cat_lines:\n",
" ax2.axvline(line*zline, c='k', ls=':')\n",
" \n",
" if output is not None:\n",
" with output:\n",
" display.display(fig)\n",
" \n",
" return fig, ax1, ax2, ax3, ax4\n",
"\n",
"\n",
"dropdown = ipywidgets.Dropdown(options=zspecs.keys())\n",
"def update_dropdown(change):\n",
" zspec.value = zspec_vals[dropdown.value]\n",
" comments.value = spec_comments[dropdown.value]\n",
"dropdown.on_trait_change(update_dropdown, 'value')\n",
"\n",
"left = ipywidgets.Button(description='<')\n",
"right = ipywidgets.Button(description='>')\n",
"@left.on_click\n",
"def on_left_clicked(b):\n",
" idx = dropdown.options.index(dropdown.value)\n",
" if idx > 0:\n",
" dropdown.value = dropdown.options[idx-1]\n",
"@right.on_click\n",
"def on_right_clicked(b):\n",
" idx = dropdown.options.index(dropdown.value)\n",
" if idx < len(dropdown.options)-1:\n",
" dropdown.value = dropdown.options[idx+1]\n",
"\n",
"zspec = ipywidgets.Dropdown(options=['uncategorized', 'bad', 'galaxy/other', 'marginal', 'good'], description='zspec:')\n",
"def update_zspec(change):\n",
" zspec_vals[dropdown.value] = zspec.value\n",
"zspec.on_trait_change(update_zspec, 'value')\n",
"\n",
"comments = ipywidgets.Text(description='Comments:')\n",
"def update_comments(change):\n",
" spec_comments[dropdown.value] = comments.value\n",
"comments.on_trait_change(update_comments, 'value')\n",
"\n",
"template = ipywidgets.Dropdown(description='template', options=[None]+list(template_specs.keys()))\n",
"vval = ipywidgets.FloatText(value=35, description='v (km/s)')\n",
"\n",
" \n",
"top = ipywidgets.HBox([left, dropdown, right])\n",
"middle = ipywidgets.HBox([zspec, comments])\n",
"lower = ipywidgets.HBox([template, vval])\n",
"\n",
"ui = ipywidgets.VBox([top, middle, lower])\n",
"\n",
"out = ipywidgets.Output()\n",
" \n",
"d = Event(source=out, watched_events=['keydown'])\n",
"def handle_event(event):\n",
" try:\n",
" if event['key'] in KEY_TO_QUALITY.keys():\n",
" zspec.value = KEY_TO_QUALITY[event['key']]\n",
" elif event['key'] in ('-', '[',','):\n",
" left.click()\n",
" elif event['key'] in ('+', ']','.'):\n",
" right.click()\n",
" except Exception as e:\n",
" comments.value = repr(e)\n",
"d.on_dom_event(handle_event)\n",
"\n",
"display.display(ui, out)\n",
"\n",
"\n",
"fig, ax1, ax2, ax3, ax4 = make_fig(dropdown.value, template.value, vval.value, out)\n",
"def update_fig(change):\n",
" specname = dropdown.value\n",
" templname = template.value\n",
" v = vval.value\n",
" \n",
" zline = (v*u.km/u.s/c + 1).decompose().value\n",
" spec = zspecs[specname]\n",
" if templname is not None:\n",
" tspec = template_specs[templname]\n",
" specnum = int(specname.split('.')[0])\n",
" slit = slits[specnum]\n",
" \n",
" for ax in [ax1, ax2]:\n",
" ax.get_children()[0].set_data(spec.wavelength, spec.flux)\n",
" if templname is not None:\n",
" ax.get_children()[1].set_data(tspec.wavelength, tspec.flux.value*np.median(spec.flux))\n",
" ax.set_ylim(np.min(spec.flux), np.max(spec.flux))\n",
" \n",
" ax3.get_children()[-2].set_array(slit[0]['FLUX'][0])\n",
" ax3.get_children()[-2].set_norm(visualization.simple_norm(slit[0]['FLUX'][0], **imshow_norm_kwargs))\n",
" ax4.get_children()[-2].set_array(slit[1]['FLUX'][0])\n",
" ax4.get_children()[-2].set_norm(visualization.simple_norm(slit[1]['FLUX'][0], **imshow_norm_kwargs))\n",
" \n",
" ax1.set_title(specname)\n",
" ax2.set_xlim(cat_lines[0]*zline-20*u.angstrom, cat_lines[-1]*zline+20*u.angstrom)\n",
" ax4.set_xlim(cat_lines[0]*zline-20*u.angstrom, cat_lines[-1]*zline+20*u.angstrom)\n",
" \n",
" msk2 = (ax2.get_xlim()[0]<spec.wavelength.value)&(spec.wavelength.value<ax2.get_xlim()[1])\n",
" ax2.set_ylim(np.min(spec.flux[msk2]), np.max(spec.flux[msk2]))\n",
" \n",
" with out:\n",
" display.clear_output(True)\n",
" display.display(fig)\n",
" \n",
"def get_current_spec():\n",
" specname = dropdown.value\n",
" return zspecs[specname]\n",
" \n",
"for widget in (dropdown, template, vval):\n",
" widget.on_trait_change(update_fig, 'value')"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(1, 1)\n",
"ax.imshow(np.random.randn(10, 10))\n",
"p = ax.get_children()[-2]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(defaultdict(<function __main__.<lambda>()>, {}),\n",
" defaultdict(<function __main__.<lambda>()>, {}))"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"zspec_vals, spec_comments"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Marla requests:\n",
"\n",
"* Fast enough to go fast\n",
"* hit number buttons for zspeccing (ipyevents)\n",
"* 2D slit\n",
"\n",
"* (some quality plots/chi^2 surfaces - understandable interface to Marla)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.0"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment