Source code for desisim.scripts.newarc

from __future__ import absolute_import, division, print_function
import sys, os
import argparse
import datetime
import time
import warnings

import numpy as np
import astropy.table
# See pixsim.py
import astropy.time
from astropy.io import fits
import astropy.units as u

import desimodel.io
import desisim.simexp
import desisim.io
import desispec.io
import desiutil.depend

def parse(options=None):
    parser=argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)

    if 'DESI_ROOT' in os.environ:
        _default_arcfile = os.path.join(os.getenv('DESI_ROOT'),
            'spectro', 'templates', 'calib', 'v0.4', 'arc-lines-average-in-vacuum-from-winlight-20170118.fits')
    else:
        _default_arcfile = None

    #- Required
    parser.add_argument('--expid', type=int, help="exposure ID")
    parser.add_argument('--night', type=str, help="YEARMMDD")

    #- Optional
    parser.add_argument('--arcfile', type=str, help="input arc calib spec file",
        default=_default_arcfile)
    parser.add_argument('--simspec', type=str, help="output simspec file")
    parser.add_argument('--fibermap', type=str, help="output fibermap file")
    parser.add_argument('--outdir', type=str, help="output directory")
    parser.add_argument('--nspec', type=int, default=5000, help="number of spectra to include")
    parser.add_argument('--nonuniform', action='store_true', help="Include calibration screen non-uniformity")
    parser.add_argument('--clobber', action='store_true', help="overwrite any pre-existing output files")

    if len(sys.argv) == 1:
        parser.print_help()
        sys.exit(1)

    if options is None:
        args = parser.parse_args()
    else:
        args = parser.parse_args(options)

    if args.simspec is None:
        args.simspec = desisim.io.findfile('simspec', args.night, args.expid,
                                           outdir=args.outdir)

    if args.fibermap is None:
        #- put in same directory as simspec by default
        filedir = os.path.dirname(os.path.abspath(args.simspec))
        filename = os.path.basename(desispec.io.findfile('fibermap', args.night, args.expid))
        args.fibermap = os.path.join(filedir, filename)

    return args

[docs]def main(args=None): ''' TODO: document Note: this bypasses specsim since we don't have an arclamp model in surface brightness units; we only have electrons on the CCD ''' import desiutil.log log = desiutil.log.get_logger() from desiutil.iers import freeze_iers freeze_iers() if isinstance(args, (list, tuple, type(None))): args = parse(args) log.info('reading arc data from {}'.format(args.arcfile)) arcdata = astropy.table.Table.read(args.arcfile) wave, phot, fibermap = \ desisim.simexp.simarc(arcdata, nspec=args.nspec, nonuniform=args.nonuniform) log.info('Writing {}'.format(args.fibermap)) fibermap.meta['NIGHT'] = args.night fibermap.meta['EXPID'] = args.expid fibermap.meta['EXTNAME'] = 'FIBERMAP' fibermap.write(args.fibermap, overwrite=args.clobber) #- TODO: explain bypassing desisim.io.write_simspec header = fits.Header() desiutil.depend.add_dependencies(header) header['EXPID'] = args.expid header['NIGHT'] = args.night header['FLAVOR'] = 'arc' header['DOSVER'] = 'SIM' header['EXPTIME'] = 5 #- TODO: add exptime support #- TODO: DATE-OBS on night instead of now tx = astropy.time.Time(datetime.datetime(*time.gmtime()[0:6])) header['DATE-OBS'] = tx.utc.isot desisim.io.write_simspec_arc(args.simspec, wave, phot, header, fibermap, overwrite=args.clobber)