コード例 #1
0
def main(args=None):

    log = get_logger()
    if isinstance(args, (list, tuple, type(None))):
        args = parse(args)

    if args.obslist.endswith('.ecsv'):
        obslist = astropy.table.Table.read(args.obslist, format='ascii.ecsv')
    else:
        obslist = astropy.table.Table.read(args.obslist)

    obs = obslist[obslist['EXPID'] == args.expid][0]
    tileid = obs['TILEID']
    night = obs['NIGHT']
    program = obs['PROGRAM']

    if os.path.isdir(args.fiberassign):
        #- TODO: move file location logic to desispec / desitarget / fiberassign
        args.fiberassign = os.path.join(args.fiberassign,
                                        'tile-{:06d}.fits'.format(tileid))
        if not os.path.exists(args.fiberassign):
            #- try previous name
            args.fiberassign = os.path.join(os.path.dirname(args.fiberassign),
                                            'tile_{:06d}.fits'.format(tileid))

    fiberassign = astropy.table.Table.read(args.fiberassign, 'FIBERASSIGN')

    if args.outdir is None:
        args.outdir = desisim.io.simdir(night=night,
                                        expid=args.expid,
                                        mkdir=True)

    if args.nspec is None:
        args.nspec = len(fiberassign)
    elif args.nspec <= len(fiberassign):
        fiberassign = fiberassign[0:args.nspec]
    else:
        log.error('args.nspec {} > len(fiberassign) {}'.format(
            args.nspec, len(fiberassign)))
        sys.exit(1)

    log.info('Simulating night {} expid {} tile {} {}'.format(
        night, args.expid, tileid, program))

    if program.lower() in ('bright', 'sv_bgs', 'sv_mws'):
        mock_obscon = 'bright'
    else:
        mock_obscon = 'dark'  #- includes gray for mocks

    try:
        flux, wave, meta, objmeta = get_mock_spectra(fiberassign,
                                                     mockdir=args.mockdir,
                                                     nside=args.nside,
                                                     obscon=mock_obscon)
    except Exception as err:
        log.fatal('Failed expid {} fiberassign {} tile {}'.format(
            args.expid, args.fiberassign, tileid))
        raise err

    sim, fibermap = simscience((flux, wave, meta),
                               fiberassign,
                               obsconditions=obs,
                               psfconvolve=False)

    #- TODO: header keyword code is replicated from obs.new_exposure()
    telera, teledec = desisim.io.get_tile_radec(tileid)
    header = dict(
        NIGHT=(night, 'Night of observation YEARMMDD'),
        EXPID=(args.expid, 'DESI exposure ID'),
        TILEID=(tileid, 'DESI tile ID'),
        PROGRAM=(program, 'program [dark, bright, ...]'),
        FLAVOR=('science', 'Flavor [arc, flat, science, zero, ...]'),
        TELRA=(telera, 'Telescope pointing RA [degrees]'),
        TELDEC=(teledec, 'Telescope pointing dec [degrees]'),
        AIRMASS=(obs['AIRMASS'], 'Airmass at middle of exposure'),
        EXPTIME=(obs['EXPTIME'], 'Exposure time [sec]'),
        SEEING=(obs['SEEING'], 'Seeing FWHM [arcsec]'),
        MOONFRAC=(obs['MOONFRAC'], 'Moon illumination fraction 0-1; 1=full'),
        MOONALT=(obs['MOONALT'], 'Moon altitude [degrees]'),
        MOONSEP=(obs['MOONSEP'], 'Moon:tile separation angle [degrees]'),
    )
    header['DATE-OBS'] = (sim.observation.exposure_start.isot,
                          'Start of exposure')

    #- Write fibermap to $DESI_SPECTRO_SIM/$PIXPROD not $DESI_SPECTRO_DATA
    fibermap.meta.update(header)
    fibermap.meta['EXTNAME'] = 'FIBERMAP'
    fibermap.write(desisim.io.findfile('simfibermap',
                                       night,
                                       args.expid,
                                       outdir=args.outdir),
                   overwrite=args.clobber)

    desisim.io.write_simspec(sim,
                             meta,
                             fibermap,
                             obs,
                             args.expid,
                             night,
                             header=header,
                             objmeta=objmeta,
                             outdir=args.outdir,
                             overwrite=args.clobber)
コード例 #2
0
ファイル: newexp_mock.py プロジェクト: desihub/desisim
def main(args=None):

    log = get_logger()
    if isinstance(args, (list, tuple, type(None))):
        args = parse(args)

    if args.obslist.endswith('.ecsv'):
        obslist = astropy.table.Table.read(args.obslist, format='ascii.ecsv')
    else:
        obslist = astropy.table.Table.read(args.obslist)

    obs = obslist[obslist['EXPID'] == args.expid][0]
    tileid = obs['TILEID']
    night = obs['NIGHT']
    program = obs['PROGRAM']

    if os.path.isdir(args.fiberassign):
        #- TODO: move file location logic to desispec / desitarget / fiberassign
        args.fiberassign = os.path.join(args.fiberassign, 'tile-{:05d}.fits'.format(tileid))
        if not os.path.exists(args.fiberassign):
            #- try previous name
            args.fiberassign = os.path.join(args.fiberassign, 'tile_{:05d}.fits'.format(tileid))

    fiberassign = astropy.table.Table.read(args.fiberassign, 'FIBERASSIGN')

    if args.outdir is None:
        args.outdir = desisim.io.simdir(night=night, expid=args.expid, mkdir=True)

    if args.nspec is None:
        args.nspec = len(fiberassign)
    elif args.nspec <= len(fiberassign):
        fiberassign = fiberassign[0:args.nspec]
    else:
        log.error('args.nspec {} > len(fiberassign) {}'.format(
            args.nspec, len(fiberassign)))
        sys.exit(1)

    log.info('Simulating night {} expid {} tile {}'.format(night, args.expid, tileid))
    try:
        flux, wave, meta, objmeta = get_mock_spectra(fiberassign, mockdir=args.mockdir, nside=args.nside)
    except Exception as err:
        log.fatal('Failed expid {} fiberassign {} tile {}'.format(
            args.expid, args.fiberassign, tileid))
        raise err

    sim, fibermap = simscience((flux, wave, meta), fiberassign,
        obsconditions=obs, psfconvolve=False)

    #- TODO: header keyword code is replicated from obs.new_exposure()
    telera, teledec = desisim.io.get_tile_radec(tileid)
    header = dict(
        NIGHT = (night, 'Night of observation YEARMMDD'),
        EXPID = (args.expid, 'DESI exposure ID'),
        TILEID = (tileid, 'DESI tile ID'),
        PROGRAM = (program, 'program [dark, bright, ...]'),
        FLAVOR = ('science', 'Flavor [arc, flat, science, zero, ...]'),
        TELRA = (telera, 'Telescope pointing RA [degrees]'),
        TELDEC = (teledec, 'Telescope pointing dec [degrees]'),
        AIRMASS = (obs['AIRMASS'], 'Airmass at middle of exposure'),
        EXPTIME = (obs['EXPTIME'], 'Exposure time [sec]'),
        SEEING = (obs['SEEING'], 'Seeing FWHM [arcsec]'),
        MOONFRAC = (obs['MOONFRAC'], 'Moon illumination fraction 0-1; 1=full'),
        MOONALT  = (obs['MOONALT'], 'Moon altitude [degrees]'),
        MOONSEP  = (obs['MOONSEP'], 'Moon:tile separation angle [degrees]'),
        )
    header['DATE-OBS'] = (sim.observation.exposure_start.isot, 'Start of exposure')

    #- Write fibermap to $DESI_SPECTRO_SIM/$PIXPROD not $DESI_SPECTRO_DATA
    fibermap.meta.update(header)
    fibermap.meta['EXTNAME'] = 'FIBERMAP'
    fibermap.write(desisim.io.findfile('simfibermap', night, args.expid,
        outdir=args.outdir), overwrite=args.clobber)

    desisim.io.write_simspec(sim, meta, fibermap, obs, args.expid, night, header=header,
                             objmeta=objmeta, outdir=args.outdir, overwrite=args.clobber)
コード例 #3
0
ファイル: newexp_mock.py プロジェクト: tskisner/desisim
def main(args=None):

    log = get_logger()
    if isinstance(args, (list, tuple, type(None))):
        args = parse(args)

    if isinstance(args, (list, tuple, type(None))):
        args = parse(args)

    if args.obslist.endswith('.ecsv'):
        obslist = astropy.table.Table.read(args.obslist, format='ascii.ecsv')
    else:
        obslist = astropy.table.Table.read(args.obslist)

    #----
    #-  Standardize some column names from surveysim output vs.
    #- twopct.ecsv from 2% survey data challenge.

    #- column names should be upper case
    for col in list(obslist.colnames):
        obslist.rename_column(col, col.upper())

    #- MOONDIST -> MOONSEP
    if 'MOONDIST' in obslist.colnames:
        obslist.rename_column('MOONDIST', 'MOONSEP')

    #- NIGHT = YEARMMDD (not YEAR-MM-DD) of sunset, derived from MJD if needed
    if 'NIGHT' not in obslist.colnames:
        #- Derive NIGHT from MJD
        obslist['NIGHT'] = [
            desisim.util.dateobs2night(x) for x in obslist['MJD']
        ]
    else:
        #- strip dashes from NIGHT string to make YEARMMDD
        obslist['NIGHT'] = np.char.replace(obslist['NIGHT'], '-', '')

    #- Fragile: derive PROGRAM from PASS
    if 'PROGRAM' not in obslist.colnames:
        obslist['PROGRAM'] = 'BRIGHT'
        obslist['PROGRAM'][obslist['PASS'] < 4] = 'DARK'
        obslist['PROGRAM'][obslist['PASS'] == 4] = 'GRAY'

    #---- end of obslist standardization

    obs = obslist[args.obsnum]
    tileid = obs['TILEID']
    night = obs['NIGHT']
    program = obs['PROGRAM']

    if os.path.isdir(args.fiberassign):
        #- TODO: move file location logic to desispec / desitarget / fiberassign
        args.fiberassign = os.path.join(args.fiberassign,
                                        'tile_{:05d}.fits'.format(tileid))

    fiberassign = astropy.table.Table.read(args.fiberassign,
                                           'FIBER_ASSIGNMENTS')

    if args.outdir is None:
        args.outdir = desisim.io.simdir(night=night, mkdir=True)

    if args.nspec is None:
        args.nspec = len(fiberassign)

    log.info('Simulating night {} expid {} tile {}'.format(
        night, args.expid, tileid))
    try:
        flux, wave, meta = get_mock_spectra(fiberassign, mockdir=args.mockdir)
    except Exception as err:
        log.fatal('Failed obsnum {} fiberassign {} tile {}'.format(
            args.obsnum, args.fiberassign, tileid))
        raise err

    sim, fibermap = simscience((flux, wave, meta),
                               fiberassign,
                               obsconditions=obs,
                               nspec=args.nspec)

    #- TODO: header keyword code is replicated from obs.new_exposure()
    telera, teledec = desisim.io.get_tile_radec(tileid)
    header = dict(
        NIGHT=(night, 'Night of observation YEARMMDD'),
        EXPID=(args.expid, 'DESI exposure ID'),
        TILEID=(tileid, 'DESI tile ID'),
        PROGRAM=(program, 'program [dark, bright, ...]'),
        FLAVOR=('science', 'Flavor [arc, flat, science, zero, ...]'),
        TELRA=(telera, 'Telescope pointing RA [degrees]'),
        TELDEC=(teledec, 'Telescope pointing dec [degrees]'),
        AIRMASS=(obs['AIRMASS'], 'Airmass at middle of exposure'),
        EXPTIME=(obs['EXPTIME'], 'Exposure time [sec]'),
        SEEING=(obs['SEEING'], 'Seeing FWHM [arcsec]'),
        MOONFRAC=(obs['MOONFRAC'], 'Moon illumination fraction 0-1; 1=full'),
        MOONALT=(obs['MOONALT'], 'Moon altitude [degrees]'),
        MOONSEP=(obs['MOONSEP'], 'Moon:tile separation angle [degrees]'),
    )
    header['DATE-OBS'] = (sim.observation.exposure_start.isot,
                          'Start of exposure')

    #- Write fibermap to $DESI_SPECTRO_SIM/$PIXPROD not $DESI_SPECTRO_DATA
    fibermap.meta.update(header)
    fibermap.write(desisim.io.findfile('simfibermap',
                                       night,
                                       args.expid,
                                       outdir=args.outdir),
                   overwrite=args.clobber)

    desisim.io.write_simspec(sim,
                             meta,
                             fibermap,
                             obs,
                             args.expid,
                             night,
                             header=header,
                             outdir=args.outdir,
                             overwrite=args.clobber)