示例#1
0
def mk_skyflats(file_list=None,file_path=None, bias_fil=None):
    import xastropy.PH136.experiments.hrdiagram as hrd
    from astropy.io.fits import getdata

    # Frames
    B_sky = 32 + np.arange(5)
    V_sky = 37 + np.arange(5)
    R_sky = 43 + np.arange(5)
    all_sky = [B_sky, V_sky, R_sky]

    # Outfiles
    outfil = ['Sky_B.fits', 'Sky_V.fits', 'Sky_R.fits']
    filters = ['B','V','R']

    # Bias
    if bias_fil == None:
        bias_fil = 'Bias.fits'
    bias_img,bias_head = getdata(bias_fil,0,header=True)
    

    # Loop on Filters
    for ff in filters:
        # Index
        idx = filters.index(ff)

        # Generate file names
        files= hrd.mk_file_list(all_sky[idx])

        # Stack with scaling
        img = hrd.stack_img(files, bias_img=bias_img, norm=True)

        # Trim
        trim_img = hrd.trimflip_img(img)

        # Deal with zeros
        zro = np.where( trim_img == 0.)
        trim_img[zro] = 1.

        # Write
        print 'Sky Flats: Writing ', outfil[idx]
        fits.writeto(outfil[idx], trim_img, clobber=True)

    print 'Sky Flats: All done'
    return
示例#2
0
def proc_sa104(file_path=None,outdir=None, bias_fil=None):

    from astropy.coordinates import ICRS 
    from astropy.io import ascii
    from astropy import units as u
    from astropy.io.fits import getdata
    import xastropy.PH136.experiments.hrdiagram as hrd

    # Defaults
    if file_path == None: 
        file_path = 'Raw/'
    if outdir == None: 
        outdir = 'Std/'

    # Bias frame
    if bias_fil == None:
        bias_fil = 'Bias.fits'
    bias_img,bias_head = getdata(bias_fil,0,header=True)
    

    # Read Log
    data = ascii.read('simple.log',delimiter='|')
    nfil = len(data)
    all_coord = ICRS(ra=data['RA'], dec=data['DEC'], unit=(u.hour,u.degree))

    # M67 coords
    sa104_rac = '12:43:44.3'
    sa104_decc = '-00:29:40.0'
    sa104_c = ICRS(sa104_rac, sa104_decc, unit=(u.hour,u.degree))

    # Find all SA 104
    sep = (sa104_c.separation(all_coord)).degree
    isa104, = np.where( sep < 1. ) # 1 degree
    sa104 = data[isa104]

    # Filters
    all_filt=np.array(sa104['Filter'])
    filters,ifilt = np.unique(all_filt,return_index=True)

    # Loop on Filterse
    all_fil = []
    for ff in filters:

        # Load Sky frame
        skyfil = 'Sky_'+ff+'.fits'
        sky_img,head = getdata(skyfil,0,header=True)

        # Images
        idx = np.where(sa104['Filter'] == ff) 

        # Loop on images
        for kk in np.concatenate(idx,axis=0):
            # Read
            img,head = getdata(sa104[kk]['File'],0,header=True)

            # Bias subtract
            img = img - bias_img

            # Trim
            timg = hrd.trimflip_img(img)

            # Flat field
            timg = timg / sky_img

            # Normalize by exposure
            timg = timg / sa104[kk]['Exp']

            # Filename
            outfil = outdir+'SA104_t'+str(int(sa104[kk]['Exp']))+'_'+ff+'.fits'

            # Check for duplicate
            flg_skip = 0
            mt = [i for i in range(len(all_fil)) if all_fil[i] == outfil] 
            if len(mt) > 0:
                print 'Duplicate image', outfil
                print 'Skipping...'
                continue
            all_fil.append(outfil)
            

            # Write
            print 'Writing ', outfil
            fits.writeto(outfil, timg, head, clobber=True)
            
    return
示例#3
0
def proc_m67(file_path=None,outdir=None, bias_fil=None):

    from astropy.coordinates import ICRS 
    from astropy.io import ascii
    from astropy import units as u
    from astropy.io.fits import getdata
    import xastropy.PH136.experiments.hrdiagram as hrd

    # Defaults
    if file_path == None: 
        file_path = 'Raw/'
    if outdir == None: 
        outdir = 'Science/'

    # Bias frame
    if bias_fil == None:
        bias_fil = 'Bias.fits'
    bias_img,bias_head = getdata(bias_fil,0,header=True)
    

    # Read Log
    data = ascii.read('simple.log',delimiter='|')
    nfil = len(data)
    all_coord = ICRS(ra=data['RA'], dec=data['DEC'], unit=(u.hour,u.degree))

    # M67 coords
    m67_rac = '08:54:24'
    m67_decc = '+11:49:00'
    m67_c = ICRS(m67_rac, m67_decc, unit=(u.hour,u.degree))

    # Find all M67
    sep = (m67_c.separation(all_coord)).degree
    im67, = np.where( sep < 1. ) # 1 degree
    m67 = data[im67]

    # 5 positions
    m67_ra = ['08:52:02.2', '08:52:15.3', '08:51:49.9', '08:51:50.0', '08:52:16.2']
    m67_dec = ['+11:52:41.0', '+11:55:51.0', '+11:55:53.0', '+11:49:38.0', '+11:49:40.0']
    m67_pointings = ICRS(ra=m67_ra, dec=m67_dec, unit=(u.hour, u.degree))

    # Filters
    all_filt=np.array(m67['Filter'])
    filters,ifilt = np.unique(all_filt,return_index=True)

    # Loop on Filterse
    all_fil = []
    for ff in filters:

        # Load Sky frame
        skyfil = 'Sky_'+ff+'.fits'
        sky_img,head = getdata(skyfil,0,header=True)

        # Images
        idx = np.where(m67['Filter'] == ff) 

        # Loop on images
        for kk in np.concatenate(idx,axis=0):
            # Read
            img,head = getdata(m67[kk]['File'],0,header=True)

            # Bias subtract
            img = img - bias_img

            # Trim
            timg = hrd.trimflip_img(img)

            # Flat field
            timg = timg / sky_img

            # Normalize by exposure
            timg = timg / m67[kk]['Exp']

            # Filename
            coord = ICRS(head['RA'], head['DEC'], unit=(u.hour,u.degree))
            sep = (coord.separation(m67_pointings)).degree
            ipos = np.argmin(sep)
            outfil = outdir+'M67_C'+str(ipos)+'_t'+str(int(m67[kk]['Exp']))+'_'+ff+'.fits'

            # Check for duplicate
            flg_skip = 0
            mt = [i for i in range(len(all_fil)) if all_fil[i] == outfil] 
            if len(mt) > 0:
                print 'Duplicate image', outfil
                print 'Skipping...'
                continue
            all_fil.append(outfil)
            

            # Write
            print 'Writing ', outfil
            fits.writeto(outfil, timg, clobber=True)
            
    return