Source code for pypeit.scripts.show_1dspec

"""
Wrapper to the linetools XSpecGUI

.. include common links, assuming primary doc root is up one directory
.. include:: ../include/links.rst
"""
from IPython import embed

from pypeit.scripts import scriptbase


[docs]class Show1DSpec(scriptbase.ScriptBase):
[docs] @classmethod def get_parser(cls, width=None): parser = super().get_parser(description='Show a 1D spectrum', width=width) parser.add_argument("file", type=str, help="Spectral file") parser.add_argument("--list", default=False, help="List the extensions only?", action="store_true") parser.add_argument("--exten", type=int, default=1, help="FITS extension") parser.add_argument("--obj", type=str, help="Object name in lieu of extension, e.g. SPAT0424-SLIT0000-DET01") parser.add_argument("--extract", type=str, default='OPT', help="Extraction method. Default is OPT. ['BOX', 'OPT']") parser.add_argument("--flux", default=False, action="store_true", help="Show fluxed spectrum?") parser.add_argument('-m', '--unmasked', dest='masked', default=True, action='store_false', help='Only show unmasked data.') # parser.add_argument('--jdaviz', default=False, action='store_true', # help='Open the spectrum in jdaviz (requires specutils and jdaviz ' # 'to be installed)') return parser
[docs] @staticmethod def main(args): """ Runs the XSpecGui on an input file """ import sys import numpy as np from qtpy.QtWidgets import QApplication from linetools.guis.xspecgui import XSpecGui from pypeit import specobjs from pypeit import msgs sobjs = specobjs.SpecObjs.from_fitsfile(args.file, chk_version=False) # List only? if args.list: print("Showing object names for input file...") for ii in range(len(sobjs)): line = "EXT{:07d} = {}".format(ii + 1, sobjs[ii].NAME) if sobjs[ii].RA is not None: line += " {:0.5f} {:0.5f} {:s}".format( sobjs[ii].RA, sobjs[ii].DEC, sobjs[ii].MASKDEF_OBJNAME) if sobjs[ii].MASKDEF_EXTRACT is not None and sobjs[ii].MASKDEF_EXTRACT is True: line += " maskdef_extract" if sobjs[ii].hand_extract_flag is True: line += " manual_extract" # print(line) return # TODO: Keep this for now, assuming jdaviz ever allows users to # instantiate from within a python script. # if args.jdaviz: # from pypeit.specutils import Spectrum1D, SpectrumList # if Spectrum1D is None: # msgs.error('specutils package must be installed.') # try: # from jdaviz import Specviz # except ModuleNotFoundError: # msgs.error('jdaviz package must be installed.') # # # First try reading it as a list # try: # spec = SpectrumList.read(args.file, extract=args.extract, fluxed=args.flux) # except: # pass # else: # specviz = Specviz() # specviz.load_spectrum(spec) # specviz.show() # return # # # Maybe it's a OneSpec? # try: # # TODO: add "grid" as a command-line argument # spec = Spectrum1D.read(args.file) # except: # pass # else: # specviz = Specviz() # specviz.load_spectrum(spec) # specviz.show() # return # # # If we get here, the file couldn't be parsed # msgs.error(f'Could not parse input file: {args.file}') if args.obj is not None: exten = np.where(sobjs.NAME == args.obj)[0][0] if exten < 0: msgs.error("Bad input object name: {:s}".format(args.obj)) else: exten = args.exten-1 # 1-index in FITS file # Check Extraction if args.extract == 'OPT': if sobjs[exten]['OPT_WAVE'] is None: #not in sobjs[exten]._data.keys(): msgs.error("Spectrum not extracted with OPT. Try --extract BOX") spec = sobjs[exten].to_xspec1d(masked=args.masked, extraction=args.extract, fluxed=args.flux) # Setup app = QApplication(sys.argv) # Screen dimensions width = app.screens()[0].geometry().width() scale = 2. * (width/3200.) # Launch gui = XSpecGui(spec)#, screen_scale=scale) gui.show() app.exec_()