Beispiel #1
0
def main():

    brickname = '2428p117'
    objtype = 'STAR'
    lobjtype = objtype.lower()

    decals_sim_dir = '/Users/ioannis/decals_sim_dir/star/2428p117'

    zoom = [1800,2400,1800,2400]
    #zoom = [1800,2000,1800,2000]
    #zoom = None

    decals = Decals()
    brickinfo = decals.get_brick_by_name(brickname)
    brickwcs = wcs_for_brick(brickinfo)
    W, H, pixscale = brickwcs.get_width(), brickwcs.get_height(), brickwcs.pixel_scale()

    if zoom is not None:
        # See also runbrick.stage_tims()
        #(x0,x1,y0,y1) = args.zoom
        (x0,x1,y0,y1) = zoom
        W = x1-x0
        H = y1-y0
        targetwcs = brickwcs.get_subimage(x0, y0, W, H)

    bounds = brickwcs.radec_bounds()
    ra_range = bounds[1]-bounds[0]
    dec_range = bounds[3]-bounds[2]
    radec_center = brickwcs.radec_center()
    print(radec_center, ra_range, dec_range)
        
    corners = np.array([brickwcs.pixelxy2radec(x,y) for x,y in
                        [(1,1),(W,1),(W,H),(1,H),(1,1)]])
    

    # Identify the CCDs in the region of interest.
    ccdinfo = decals.ccds_touching_wcs(brickwcs)
    ccdinfo.about()
    log.info('Got {} CCDs'.format(len(ccdinfo)))

    # Generate the catalog of simulated sources here!
    simcat = fits_table('simcat-{}-{}-00.fits'.format(brickname,lobjtype))
    #simcat = fits.getdata('simcat-{}-{}-00.fits'.format(brickname,lobjtype))
    simcat.about()
    blobxy = zip(simcat.x,simcat.y)

    simdecals = SimDecals(sim_sources=simcat)

    # For testing!
    #sim = SimImage(simdecals,ccdinfo[0])
    #tim = sim.get_tractor_image(const2psf=True)

    run_brick(brickname, decals=simdecals, outdir=decals_sim_dir,
              threads=8, zoom=zoom, wise=False, sdssInit=False,
              forceAll=True, writePickles=False, blobxy=blobxy,
              pixPsf=False, stages=['tims','srcs','fitblobs',
                                    'fitblobs_finish','coadds',
                                    'writecat'])
Beispiel #2
0
def main():
    """Main routine which parses the optional inputs."""

    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter,
        description='DECaLS simulations.')
    parser.add_argument('-n',
                        '--nobj',
                        type=long,
                        default=None,
                        metavar='',
                        help='number of objects to simulate (required input)')
    parser.add_argument('-c',
                        '--chunksize',
                        type=long,
                        default=500,
                        metavar='',
                        help='divide NOBJ into CHUNKSIZE chunks')
    parser.add_argument('-b',
                        '--brick',
                        type=str,
                        default='2428p117',
                        metavar='',
                        help='simulate objects in this brick')
    parser.add_argument('-o',
                        '--objtype',
                        type=str,
                        default='STAR',
                        metavar='',
                        help='object type (STAR, ELG, LRG, QSO, LSB)')
    parser.add_argument(
        '-t',
        '--threads',
        type=int,
        default=8,
        metavar='',
        help='number of threads to use when calling The Tractor')
    parser.add_argument('-s',
                        '--seed',
                        type=long,
                        default=None,
                        metavar='',
                        help='random number seed')
    parser.add_argument('-z',
                        '--zoom',
                        nargs=4,
                        type=int,
                        metavar='',
                        help='see runbrick.py; (default is 0 3600 0 3600)')
    parser.add_argument('--rmag-range',
                        nargs=2,
                        type=float,
                        default=(18, 25),
                        metavar='',
                        help='r-band magnitude range')
    parser.add_argument('--no-qaplots',
                        action='store_true',
                        help='do not generate QAplots')
    parser.add_argument('-v',
                        '--verbose',
                        dest='verbose',
                        action='count',
                        default=0,
                        help='toggle on verbose output')

    args = parser.parse_args()
    if args.nobj is None:
        parser.print_help()
        sys.exit(1)

    # Set the debugging level
    if args.verbose:
        lvl = logging.DEBUG
    else:
        lvl = logging.INFO
    logging.basicConfig(format='%(message)s', level=lvl, stream=sys.stdout)
    log = logging.getLogger('__name__')

    brickname = args.brick
    objtype = args.objtype.upper()
    lobjtype = objtype.lower()

    if objtype == 'LRG':
        log.warning('{} objtype not yet supported!'.format(objtype))
        sys.exit(1)
    elif objtype == 'LSB':
        log.warning('{} objtype not yet supported!'.format(objtype))
        sys.exit(1)
    elif objtype == 'QSO':
        log.warning('{} objtype not yet supported!'.format(objtype))
        sys.exit(1)

    # Determine how many chunks we need
    nobj = args.nobj
    chunksize = args.chunksize
    nchunk = long(np.ceil(nobj / chunksize))

    log.info('Object type = {}'.format(objtype))
    log.info('Number of objects = {}'.format(nobj))
    log.info('Chunksize = {}'.format(chunksize))
    log.info('Number of chunks = {}'.format(nchunk))

    # Optionally zoom into a portion of the brick
    decals = Decals()
    brickinfo = decals.get_brick_by_name(brickname)
    brickwcs = wcs_for_brick(brickinfo)
    W, H, pixscale = brickwcs.get_width(), brickwcs.get_height(
    ), brickwcs.pixel_scale()

    log.info('Brick = {}'.format(brickname))
    if args.zoom is not None:  # See also runbrick.stage_tims()
        (x0, x1, y0, y1) = args.zoom
        W = x1 - x0
        H = y1 - y0
        brickwcs = brickwcs.get_subimage(x0, y0, W, H)
        log.info('Zoom (pixel boundaries) = {}'.format(args.zoom))

    radec_center = brickwcs.radec_center()
    log.info('RA, Dec center = {}'.format(radec_center))
    log.info('Brick = {}'.format(brickname))

    if args.seed is not None:
        log.info('Random seed = {}'.format(args.seed))

    # Pack the input parameters into a meta-data table.
    meta = Table()
    meta['brickname'] = Column([brickname], dtype='S10')
    meta['objtype'] = Column([objtype], dtype='S10')
    if args.seed is not None:
        meta['seed'] = Column([args.seed], dtype='i4')
    meta['nobj'] = Column([args.nobj], dtype='i4')
    meta['chunksize'] = Column([args.chunksize], dtype='i2')
    meta['nchunk'] = Column([nchunk], dtype='i2')
    #meta['RA'] = Column([ra_range],dtype='f8')
    #meta['DEC'] = Column([dec_range],dtype='f8')
    if args.zoom is None:
        meta['zoom'] = Column([[0, 3600, 0, 3600]], dtype='i4')
    else:
        meta['zoom'] = Column([args.zoom], dtype='i4')
    meta['rmag_range'] = Column([args.rmag_range], dtype='f4')

    print('Hack!')
    decals_sim_dir = './'
    metafile = os.path.join(decals_sim_dir,
                            'metacat-' + brickname + '-' + lobjtype + '.fits')
    log.info('Writing {}'.format(metafile))
    if os.path.isfile(metafile):
        os.remove(metafile)
    meta.write(metafile)

    # Work in chunks.
    for ichunk in range(nchunk):
        log.info('Working on chunk {:02d}/{:02d}'.format(ichunk + 1, nchunk))
        chunksuffix = '{:02d}'.format(ichunk)

        # There's probably a smarter way to do this
        if ((ichunk + 1) * chunksize) > nobj:
            nobjchunk = (ichunk + 1) * chunksize - nobj
        else:
            nobjchunk = chunksize
        print(nobjchunk)

        # Build and write out the simulated object catalog.
        simcat = build_simcat(nobjchunk, brickname, brickwcs, meta)
        simcatfile = os.path.join(
            decals_sim_dir, 'simcat-' + brickname + '-' + lobjtype + '-' +
            chunksuffix + '.fits')
        log.info('Writing {}'.format(simcatfile))
        if os.path.isfile(simcatfile):
            os.remove(simcatfile)
        simcat.write(simcatfile)
        #fitsio.write(simcatfile,simcat)

        # Use Tractor to just process the blobs containing the simulated sources.
        simdecals = SimDecals(sim_sources=simcat)

        # Test code
        ccdinfo = decals.ccds_touching_wcs(brickwcs)
        sim = SimImage(simdecals, ccdinfo[0])
        tim = sim.get_tractor_image(const2psf=True)
Beispiel #3
0
def main():
    """Main routine which parses the optional inputs."""

    parser = argparse.ArgumentParser(formatter_class=argparse.
                                     ArgumentDefaultsHelpFormatter,
                                     description='DECaLS simulations.')
    parser.add_argument('-n', '--nobj', type=long, default=None, metavar='', 
                        help='number of objects to simulate (required input)')
    parser.add_argument('-c', '--chunksize', type=long, default=500, metavar='', 
                        help='divide NOBJ into CHUNKSIZE chunks')
    parser.add_argument('-b', '--brick', type=str, default='2428p117', metavar='', 
                        help='simulate objects in this brick')
    parser.add_argument('-o', '--objtype', type=str, default='STAR', metavar='', 
                        help='object type (STAR, ELG, LRG, QSO, LSB)') 
    parser.add_argument('-t', '--threads', type=int, default=8, metavar='', 
                        help='number of threads to use when calling The Tractor')
    parser.add_argument('-s', '--seed', type=long, default=None, metavar='', 
                        help='random number seed')
    parser.add_argument('-z', '--zoom', nargs=4, type=int, metavar='', 
                        help='see runbrick.py; (default is 0 3600 0 3600)')
    parser.add_argument('--rmag-range', nargs=2, type=float, default=(18,25), metavar='', 
                        help='r-band magnitude range')
    parser.add_argument('--test', action='store_true',
                        help='run the test code and write out test images')
    parser.add_argument('-v', '--verbose', action='store_true', 
                        help='toggle on verbose output')

    args = parser.parse_args()
    if args.nobj is None:
        parser.print_help()
        sys.exit(1)

    # Set the debugging level
    if args.verbose:
        lvl = logging.DEBUG
    else:
        lvl = logging.INFO
    logging.basicConfig(format='%(message)s',level=lvl,stream=sys.stdout)
    log = logging.getLogger('__name__')

    brickname = args.brick
    objtype = args.objtype.upper()
    lobjtype = objtype.lower()

    if objtype=='LRG':
        log.warning('{} objtype not yet supported!'.format(objtype))
        sys.exit(1)
    elif objtype=='LSB':
        log.warning('{} objtype not yet supported!'.format(objtype))
        sys.exit(1)
    elif objtype=='QSO':
        log.warning('{} objtype not yet supported!'.format(objtype))
        sys.exit(1)

    # Determine how many chunks we need
    nobj = args.nobj
    chunksize = args.chunksize
    nchunk = long(np.ceil(nobj/chunksize))

    log.info('Object type = {}'.format(objtype))
    log.info('Number of objects = {}'.format(nobj))
    log.info('Chunksize = {}'.format(chunksize))
    log.info('Number of chunks = {}'.format(nchunk))

    # Optionally zoom into a portion of the brick
    decals = Decals()
    brickinfo = decals.get_brick_by_name(brickname)
    brickwcs = wcs_for_brick(brickinfo)
    W, H, pixscale = brickwcs.get_width(), brickwcs.get_height(), brickwcs.pixel_scale()
    print(W, H, pixscale)

    log.info('Brick = {}'.format(brickname))
    if args.zoom is not None: # See also runbrick.stage_tims()
        (x0,x1,y0,y1) = args.zoom
        W = x1-x0
        H = y1-y0
        brickwcs = brickwcs.get_subimage(x0, y0, W, H)
        log.info('Zoom (pixel boundaries) = {}'.format(args.zoom))
    targetrd = np.array([brickwcs.pixelxy2radec(x,y) for x,y in
                         [(1,1),(W,1),(W,H),(1,H),(1,1)]])
 
    radec_center = brickwcs.radec_center()
    log.info('RA, Dec center = {}'.format(radec_center))
    log.info('Brick = {}'.format(brickname))

    if args.seed is not None:
        log.info('Random seed = {}'.format(args.seed))

    # Pack the input parameters into a meta-data table.
    metacat = Table()
    metacat['brickname'] = Column([brickname],dtype='S10')
    metacat['objtype'] = Column([objtype],dtype='S10')
    if args.seed is not None:
        metacat['seed'] = Column([args.seed],dtype='i4')
    metacat['nobj'] = Column([args.nobj],dtype='i4')
    metacat['chunksize'] = Column([args.chunksize],dtype='i2')
    metacat['nchunk'] = Column([nchunk],dtype='i2')
    #metacat['RA'] = Column([ra_range],dtype='f8')
    #metacat['DEC'] = Column([dec_range],dtype='f8')
    if args.zoom is None:
        metacat['zoom'] = Column([[0,3600,0,3600]],dtype='i4')
    else:
        metacat['zoom'] = Column([args.zoom],dtype='i4')
    metacat['rmag_range'] = Column([args.rmag_range],dtype='f4')

    print('Hack!')
    decals_sim_dir = './'
    metafile = os.path.join(decals_sim_dir,'metacat-'+brickname+'-'+lobjtype+'.fits')
    log.info('Writing {}'.format(metafile))
    if os.path.isfile(metafile):
        os.remove(metafile)
    metacat.write(metafile)

    # Work in chunks.
    for ichunk in range(nchunk):
        log.info('Working on chunk {:02d}/{:02d}'.format(ichunk+1,nchunk))
        chunksuffix = '{:02d}'.format(ichunk)

        # There's probably a smarter way to do this
        nobjchunk = np.min((nobj,chunksize))
        if (nchunk>1) and (ichunk==(nchunk-1)):
            nobjchunk = np.max((nobjchunk,nobj%((nchunk-1)*chunksize)))

        # Build and write out the simulated object catalog.
        simcat = build_simcat(nobjchunk,brickname,brickwcs,metacat)
        simcatfile = os.path.join(decals_sim_dir,'simcat-'+brickname+'-'+
                                  lobjtype+'-'+chunksuffix+'.fits')
        log.info('Writing {}'.format(simcatfile))
        if os.path.isfile(simcatfile):
            os.remove(simcatfile)
        simcat.write(simcatfile)

#       # Use Tractor to just process the blobs containing the simulated sources. 
        if args.test:
            # Test code
            simdecals = SimDecals(metacat=metacat, simcat=simcat, test=True)
            ccdinfo = decals.ccds_touching_wcs(brickwcs)
            sim = SimImage(simdecals, ccdinfo[19])
            tim = sim.get_tractor_image(const2psf=True, radecpoly=targetrd)
            #for ii, ccd in enumerate(ccdinfo):
            #    log.info('Working on CCD {}'.format(ii))
            #    sim = SimImage(simdecals,ccd)
            #    tim = sim.get_tractor_image(const2psf=True, radecpoly=targetrd, test=args.test)
        else:
            simdecals = SimDecals(metacat=metacat,simcat=simcat)
            blobxy = zip(simcat['x'],simcat['y'])
            run_brick(brickname, decals=simdecals, outdir=decals_sim_dir,
                      threads=8, zoom=args.zoom, wise=False, sdssInit=False,
                      forceAll=True, writePickles=False, do_calibs=False,
                      write_metrics=False, pixPsf=False, blobxy=blobxy, 
                      early_coadds=False, stages=['writecat'])