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'])
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)
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'])