Source code for pypeit.scripts.show_1dspec

"""
Wrapper for 1D spectrum viewer in ginga.

.. 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='PypeIt spec1d file (this script does not work with coadd_1dspec output spectra).' ) parser.add_argument( '--list', default=False, action='store_true', help='Instead of plotting any spectra, simply list the extensions with spectra' ) grp = parser.add_mutually_exclusive_group() grp.add_argument( '--exten', type=int, default=1, help='Number of the extension to plot' ) grp.add_argument( '--obj', type=str, help='Extension (object) name to plot, e.g. SPAT0424-SLIT0000-DET01' ) parser.add_argument( '--extract', type=str, default='OPT', choices=['BOX', 'OPT'], help='Method used to extract the spectrum' ) parser.add_argument( '--flux', default=False, action='store_true', help='Show the flux-calibrated spectrum (if available)' ) parser.add_argument( '-m', '--unmasked', dest='masked', default=True, action='store_false', help='Only show the 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] @classmethod def main(cls, args): """ Runs the XSpecGui on an input file """ from pathlib import Path import numpy as np from pypeit import PypeItError from pypeit import specobjs from pypeit.display.display import show_1dspec # Initialize the log cls.init_log(args) 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: # raise PypeItError('specutils package must be installed.') # try: # from jdaviz import Specviz # except ModuleNotFoundError: # raise PypeItError('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 # raise PypeItError(f'Could not parse input file: {args.file}') if args.obj is not None: exten = np.where(sobjs.NAME == args.obj)[0][0] else: exten = args.exten-1 # 1-index in FITS file if exten < 0: raise PypeItError(f"Bad input extension/object name: {args.obj}") # Check Extraction if args.extract == 'OPT': if sobjs[exten]['OPT_WAVE'] is None: #not in sobjs[exten]._data.keys(): raise PypeItError("Spectrum not extracted with OPT. Try --extract BOX") # Pre-pend cwd to filename (in case RC Ginga was launched already) full_file = Path(args.file).absolute() # Ginga show_1dspec( str(full_file), ext=exten, masked=args.masked, extraction=args.extract, fluxed=args.flux )