Example #1
0
def make_flat():
    """
    Makes flat and data mask. 
    Just for single filter I band
    """
    util.mkdir(calib_dir)

    ## Copy flat from a previous night
    #shutil.copyfile(root_dir + '../../20210724/sta/reduce/calib/flat_BRIV.fits', calib_dir + 'flat_BRIV.fits')

    ## Creating flat from range, I band only
    flat_num = np.arange(105, 109 + 1)
    flat_frames = [
        '{0:s}sta{1:03d}_o.fits'.format(dome_dir, ss) for ss in flat_num
    ]
    scan_flat_frames = [
        '{0:s}sta{1:03d}_o_scan.fits'.format(dome_dir, ss) for ss in flat_num
    ]
    reduce_STA.treat_overscan(flat_frames)
    #For darks = use master dark as many times as there are flat frames => reduces noise
    scan_dark_frames = [calib_dir + 'fld2_dark120.fits' for ss in flat_num]
    calib.makeflat(scan_flat_frames,
                   scan_dark_frames,
                   calib_dir + 'domeflat.fits',
                   darks=True)

    calib.make_mask(calib_dir + 'domeflat.fits',
                    calib_dir + 'domemask.fits',
                    mask_min=0.8,
                    mask_max=1.4,
                    left_slice=20,
                    right_slice=20,
                    top_slice=25,
                    bottom_slice=25)
    return
Example #2
0
def make_flat():
    """
    Makes flat and data mask. 
    Just for single filter I band
    """
    util.mkdir(calib_dir)

    ## Creating flat from range, I band only, 60 seconds
    flat_num = np.arange(37, 49 + 1)
    flat_frames = [
        '{0:s}dome_{1:03d}.fits'.format(dome_dir, ss) for ss in flat_num
    ]
    scan_flat_frames = [
        '{0:s}dome_{1:03d}_scan.fits'.format(dome_dir, ss) for ss in flat_num
    ]

    reduce_STA.treat_overscan(flat_frames)
    calib.makeflat(scan_flat_frames,
                   None,
                   calib_dir + 'domeflat_I.fits',
                   darks=False)

    ## Make a mask to use when calling find_stars.
    calib.make_mask(calib_dir + 'domeflat_I.fits',
                    calib_dir + 'mask.fits',
                    mask_min=0.5,
                    mask_max=1.8,
                    left_slice=20,
                    right_slice=20,
                    top_slice=25,
                    bottom_slice=25)

    return
Example #3
0
def make_flat_filter():
    """
    Makes flat and data mask. 
     - makeflat(fourfilter=True) normalizes each quadrant independently
     - combine_filter_flat(filt_order) takes two 4F flats 
         and gives I-band the logner int quadrant
    For four filter, dome flat was made with two integration times, 
        20(2) for BVR 
        60(45) for I
    *Note, no VBRI filter taken forr this date
    """

    util.mkdir(calib_dir)
    util.mkdir(dark_dir)

    filt_order = "RIVB"  # position 1
    flat_num = np.arange(88, 92 + 1)

    print("Filter: ", filt_order)

    print("Scanning Flat Frames... ")
    flat_frames = [
        '{0:s}sta{1:03d}_o.fits'.format(screen_dir, ss) for ss in flat_num
    ]
    scan_flat_frames = [
        '{0:s}sta{1:03d}_o_scan.fits'.format(screen_dir, ss) for ss in flat_num
    ]
    reduce_STA.treat_overscan(flat_frames)

    print("Scanning Dark Frames... ")
    dark_num = np.arange(94, 102 + 1)
    dark_frames = [
        '{0:s}dark_{1:03d}.fits'.format(dark_dir, ss) for ss in dark_num
    ]
    scan_dark_frames = [
        '{0:s}dark_{1:03d}_scan.fits'.format(dark_dir, ss) for ss in dark_num
    ]
    reduce_STA.treat_overscan(dark_frames)

    print("Making Flats... ")
    calib.makeflat(scan_flat_frames,
                   scan_dark_frames[:len(scan_flat_frames)],
                   f'{calib_dir}flat_{filt_order}.fits',
                   darks=True,
                   fourfilter=True)
    print("Making mask... ")
    calib.make_mask(f'{calib_dir}flat_{filt_order}.fits',
                    f'{calib_dir}mask_{filt_order}.fits',
                    mask_min=0.5,
                    mask_max=1.8,
                    left_slice=20,
                    right_slice=20,
                    top_slice=25,
                    bottom_slice=25)

    return
Example #4
0
def make_flat(): 

    util.mkdir(flat_dir)
    
    flat_num = np.arange(0, 10+1)
    flat_frames = ['{0:s}twi_{1:03d}.fits'.format(twi_dir, ss) for ss in flat_num]
    reduce_STA.treat_overscan(flat_frames)
    scan_flat_frames = ['{0:s}twi_{1:03d}_scan.fits'.format(twi_dir, ss) for ss in flat_num]
    calib.makeflat(scan_flat_frames, [], flat_dir + 'flat.fits', darks=False)

    return
Example #5
0
def make_flat():
    """
    Makes a flat and mask from flats. 
    Done for two different binnings
    """
    util.mkdir(flat_dir)

    flat_num_bin1 = np.arange(51, 54 + 1)
    flat_num_bin2 = np.arange(55, 62 + 1)
    flat_frames_bin1 = [
        '{0:s}twi{1:03d}.fits'.format(twi_dir, ss) for ss in flat_num_bin1
    ]
    flat_frames_bin2 = [
        '{0:s}twi{1:03d}.fits'.format(twi_dir, ss) for ss in flat_num_bin2
    ]
    reduce_STA.treat_overscan(flat_frames_bin1)
    reduce_STA.treat_overscan(flat_frames_bin2)

    scan_flat_frames_bin1 = [
        '{0:s}twi{1:03d}_scan.fits'.format(twi_dir, ss) for ss in flat_num_bin1
    ]
    scan_flat_frames_bin2 = [
        '{0:s}twi{1:03d}_scan.fits'.format(twi_dir, ss) for ss in flat_num_bin2
    ]

    calib.makeflat(scan_flat_frames_bin1,
                   None,
                   calib_dir + 'flat_bin1.fits',
                   darks=False)
    calib.makeflat(scan_flat_frames_bin2,
                   None,
                   calib_dir + 'flat_bin2.fits',
                   darks=False)

    # This mask tells us where not to search for stars.
    calib.make_mask(calib_dir + 'flat_bin1.fits',
                    calib_dir + 'mask_bin1.fits',
                    mask_min=0.8,
                    mask_max=1.4,
                    left_slice=20,
                    right_slice=20,
                    top_slice=25,
                    bottom_slice=25)
    calib.make_mask(calib_dir + 'flat_bin2.fits',
                    calib_dir + 'mask_bin2.fits',
                    mask_min=0.8,
                    mask_max=1.4,
                    left_slice=10,
                    right_slice=10,
                    top_slice=15,
                    bottom_slice=15)

    return
Example #6
0
def make_flat_filter(): 
    """
    Makes flat and data mask. 
    For four filter, dome flat was made with two integration times, 20(2) for BVR 60(45) for I
    """
    util.mkdir(calib_dir)
    
    ## Darks are the same all night
    
    #filt_order = "IVBR"
    #flat_num_60 = np.arange(13, 18+1)
    #flat_num_20 = np.arange(19, 24+1)
    
    
    filt_order = "BRIV"
    flat_num_60 = np.arange(73, 78+1)
    flat_num_20 = np.arange(79, 84+1)
    
    print(filt_order)
    
    ## I quad flat (60)
    dark_num = np.arange(29, 34+1)
    dark_frames = ['{0:s}dark_{1:03d}.fits'.format(dark_dir, ss) for ss in dark_num]
    scan_dark_frames = ['{0:s}dark_{1:03d}_scan.fits'.format(dark_dir, ss) for ss in dark_num]
    flat_frames = ['{0:s}dome_{1:03d}.fits'.format(dome_dir, ss) for ss in flat_num_60]
    scan_flat_frames = ['{0:s}dome_{1:03d}_scan.fits'.format(dome_dir, ss) for ss in flat_num_60]
    
    reduce_STA.treat_overscan(dark_frames)
    reduce_STA.treat_overscan(flat_frames)
    calib.makeflat(scan_flat_frames, scan_dark_frames, 
                   f'{calib_dir}domeflat_60_{filt_order}.fits', darks=True, fourfilter=True)
    
    ## BVR quad flat (20)
    dark_num = np.arange(39, 44+1)
    dark_frames = ['{0:s}dark_{1:03d}.fits'.format(dark_dir, ss) for ss in dark_num]
    scan_dark_frames = ['{0:s}dark_{1:03d}_scan.fits'.format(dark_dir, ss) for ss in dark_num]
    flat_frames = ['{0:s}dome_{1:03d}.fits'.format(dome_dir, ss) for ss in flat_num_20]
    scan_flat_frames = ['{0:s}dome_{1:03d}_scan.fits'.format(dome_dir, ss) for ss in flat_num_20]
    
    reduce_STA.treat_overscan(dark_frames)
    reduce_STA.treat_overscan(flat_frames)
    calib.makeflat(scan_flat_frames, scan_dark_frames, 
                   f'{calib_dir}domeflat_20_{filt_order}.fits', darks=True, fourfilter=True)
    
    # Combining two flats based on filter orientation
    calib.combine_filter_flat(f'{calib_dir}domeflat_60_{filt_order}.fits',
                              f'{calib_dir}domeflat_20_{filt_order}.fits', 
                              f'{calib_dir}flat_{filt_order}.fits', filt_order)
    
    return
Example #7
0
def make_flat_4F(): 
    """
    Makes flat and data mask. 
    For four filter, dome flat was made with two integration times, 20(2) for BVR 60(45) for I
    """
    util.mkdir(calib_dir)
    
    ## Darks are the same all night
    filt_order = "VBRI"
    flat_num_60 = np.arange(63, 67+1)
    flat_num_20 = np.array([73, 74, 75, 73, 74])
    
    print(filt_order)
    
    print("I quad flat (60)")
    dark_num = np.arange(81, 85+1)
    dark_frames = ['{0:s}dark_{1:03d}.fits'.format(dark_dir, ss) for ss in dark_num]
    scan_dark_frames = ['{0:s}dark_{1:03d}_scan.fits'.format(dark_dir, ss) for ss in dark_num]
    flat_frames = ['{0:s}sta{1:03d}_o.fits'.format(dome_dir, ss) for ss in flat_num_60]
    scan_flat_frames = ['{0:s}sta{1:03d}_o_scan.fits'.format(dome_dir, ss) for ss in flat_num_60]
    
    reduce_STA.treat_overscan(dark_frames)
    reduce_STA.treat_overscan(flat_frames)
    calib.makeflat(scan_flat_frames, scan_dark_frames, 
                   f'{calib_dir}domeflat_60_{filt_order}.fits', darks=True, fourfilter=True)
    
    print("BVR quad flat (20)")
    dark_num = np.arange(76,80+1)
    dark_frames = ['{0:s}dark_{1:03d}.fits'.format(dark_dir, ss) for ss in dark_num]
    scan_dark_frames = ['{0:s}dark_{1:03d}_scan.fits'.format(dark_dir, ss) for ss in dark_num]
    flat_frames = ['{0:s}sta{1:03d}_o.fits'.format(dome_dir, ss) for ss in flat_num_20]
    scan_flat_frames = ['{0:s}sta{1:03d}_o_scan.fits'.format(dome_dir, ss) for ss in flat_num_20]
    
    reduce_STA.treat_overscan(dark_frames)
    reduce_STA.treat_overscan(flat_frames)
    calib.makeflat(scan_flat_frames, scan_dark_frames, 
                   f'{calib_dir}domeflat_20_{filt_order}.fits', darks=True, fourfilter=True)
    
    # Combining two flats based on filter orientation
    print("Combining: I quad flat (60) & BVR quad flat (20)")
    calib.combine_filter_flat(f'{calib_dir}domeflat_60_{filt_order}.fits',
                              f'{calib_dir}domeflat_20_{filt_order}.fits', 
                              f'{calib_dir}flat_{filt_order}.fits', filt_order, flip_180=True)
    
    calib.make_mask(f'{calib_dir}flat_{filt_order}.fits', f'{calib_dir}mask_{filt_order}.fits',
                       mask_min=0.8, mask_max=1.4,
                       left_slice=20, right_slice=20, top_slice=25, bottom_slice=25)
    
    return
Example #8
0
def make_flat():
    flat_raw_dir = root_dir + 'twilights/'
    dark_raw_dir = root_dir + 'dark/'
    flat_out_dir = root_dir + "reduce/calib/"

    util.mkdir(flat_out_dir)

    flat_num = np.arange(125, 152)
    flat_frames = [
        '{0:s}twi_{1:04d}.fits'.format(flat_raw_dir, ss) for ss in flat_num
    ]
    dark_frames = [
        '{0:s}dark_{1:04d}.fits'.format(dark_raw_dir, ss) for ss in flat_num
    ]
    calib.makeflat(flat_frames, dark_frames, flat_out_dir + 'flat.fits')

    return
Example #9
0
def make_flat():
    """
    Makes flat and data mask. 
    Just for single filter I band
    CHANGES: took domeflats this night
    """
    util.mkdir(calib_dir)

    # Flats: at 200 seconds
    flat_num = np.arange(1, 5 + 1)
    flat_frames = [
        '{0:s}sta{1:03d}_o.fits'.format(dome_dir, ss) for ss in flat_num
    ]
    scan_flat_frames = [
        '{0:s}sta{1:03d}_o_scan.fits'.format(dome_dir, ss) for ss in flat_num
    ]
    reduce_STA.treat_overscan(flat_frames)

    # Darks: at 210 seconds
    dark_num = np.arange(6, 10 + 1)
    dark_frames = [
        '{0:s}sta{1:03d}_o.fits'.format(dome_dir, ss) for ss in dark_num
    ]
    scan_dark_frames = [
        '{0:s}sta{1:03d}_o_scan.fits'.format(dome_dir, ss) for ss in dark_num
    ]
    reduce_STA.treat_overscan(dark_frames)

    # Make flat
    calib.makeflat(scan_flat_frames,
                   scan_dark_frames,
                   calib_dir + 'domeflat.fits',
                   darks=True)

    # Mask for masking find_stars areas
    calib.make_mask(calib_dir + 'domeflat.fits',
                    calib_dir + 'domemask.fits',
                    mask_min=0.8,
                    mask_max=1.4,
                    left_slice=20,
                    right_slice=20,
                    top_slice=25,
                    bottom_slice=25)
Example #10
0
def make_flat():
    flat_raw_dir = root_dir + "twilights/"
    dark_raw_dir = root_dir + "twilights/"
    flat_out_dir = root_dir + "reduce/calib/"

    util.mkdir(flat_out_dir)

    flat_num = [0, 1, 2, 3, 4, 5, 6]
    flat_frames = [
        '{0:s}twi_{1:03d}.fits'.format(flat_raw_dir, ss) for ss in flat_num
    ]
    dark_frames = [
        '{0:s}dark_{1:03d}.fits'.format(flat_raw_dir, ss) for ss in flat_num
    ]
    calib.makeflat(flat_frames, dark_frames, flat_out_dir + 'flat_1.fits')

    flat_num = [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, \
               26, 27, 28, 29]
    flat_frames = [
        '{0:s}twi_{1:03d}.fits'.format(flat_raw_dir, ss) for ss in flat_num
    ]
    dark_frames = [
        '{0:s}dark_{1:03d}.fits'.format(flat_raw_dir, ss) for ss in flat_num
    ]
    calib.makeflat(flat_frames, dark_frames, flat_out_dir + 'flat_2.fits')

    flat1 = fits.getdata(flat_out_dir + 'flat_1.fits')
    flat2 = fits.getdata(flat_out_dir + 'flat_2.fits')

    flat1_rebin3 = reduce_fli.rebin(
        flat1, 3)[:, :-1] / 9  ## WHAT IS THIS REVERSING/DIVIDNG DOING?
    mean, median, stdev = sigma_clipped_stats([flat1_rebin3, flat2],
                                              sigma=3,
                                              iters=2,
                                              axis=0)
    hdu = fits.PrimaryHDU(median.data)
    hdu.writeto(flat_out_dir + 'flat.fits')

    return
Example #11
0
def make_flat(): 

    util.mkdir(flat_dir)

    # We don't have one for this run, so I just symbolically linked from an really
    # really old run.
    # In sta/reduce/calib/
    # ln -s /g/lu/data/imaka/onaga/20181223/sta/reduce/calib/flat.fits
    
    # 2021 update: will link to flats in 20200122 (the following night)
    flat_num = np.arange(221, 230+1)
    flat_frames = ['{0:s}twi_{1:03d}.fits'.format(twi_alt_dir, ss) for ss in flat_num]
    reduce_STA.treat_overscan(flat_frames)
    scan_flat_frames = ['{0:s}twi_{1:03d}_scan.fits'.format(twi_alt_dir, ss) for ss in flat_num]
    calib.makeflat(scan_flat_frames, [], calib_dir + 'flat.fits', darks=False)
    
    # Mask for masking find_stars areas
    calib.make_mask(calib_dir + 'flat.fits', calib_dir + 'mask.fits',
                       mask_min=0.8, mask_max=1.4,
                       left_slice=20, right_slice=20, top_slice=25, bottom_slice=25)

    return
Example #12
0
def make_flat():
    """
    Makes flat and data mask. 
    Just for single filter I band
    """
    util.mkdir(calib_dir)

    ## Copy flat taken the a previous night
    # shutil.copyfile(root_dir + '../../20210828/sta/reduce/calib/flat_1p_VBRI.fits', calib_dir + 'flat_VBRI.fits')

    ## Creating flat from range, I band only
    flat_num = np.arange(1, 5 + 1)
    flat_frames = [
        '{0:s}sta{1:03d}_o.fits'.format(screen_dir, ss) for ss in flat_num
    ]
    scan_flat_frames = [
        '{0:s}sta{1:03d}_o_scan.fits'.format(screen_dir, ss) for ss in flat_num
    ]
    reduce_STA.treat_overscan(flat_frames)
    calib.makeflat(scan_flat_frames,
                   None,
                   calib_dir + 'flat_I.fits',
                   darks=False)

    ## Make a mask to use when calling find_stars.
    calib.make_mask(calib_dir + 'flat_I.fits',
                    calib_dir + 'mask_I.fits',
                    mask_min=0.5,
                    mask_max=1.8,
                    left_slice=20,
                    right_slice=20,
                    top_slice=25,
                    bottom_slice=25)

    #calib.make_mask(calib_dir + 'flat_VBRI.fits', calib_dir + 'mask_VBRI.fits',
    #                   mask_min=0.5, mask_max=1.8,
    #                   left_slice=20, right_slice=20, top_slice=25, bottom_slice=25)

    return
Example #13
0
def make_flat():
    """
    Make a flat... this will be with dome flats for now. 
    These are junk... replace with twilight flats. 
    """
    util.mkdir(calib_dir)

    ## Copy flight from previous night if twilight exposures
    ## are a little saturated.
    #shutil.copyfile(root_dir + '../../20210430/sta/reduce/calib/flat_bin1.fits', calib_dir + 'flat.fits')

    ## assuming these aren't overexposed
    flat_num = np.arange(59, 70 + 1)
    flat_frames = [
        '{0:s}twi_{1:03d}.fits'.format(twi_dir, ss) for ss in flat_num
    ]
    #reduce_STA.treat_overscan(flat_frames)
    scan_flat_frames = [
        '{0:s}twi_{1:03d}_scan.fits'.format(twi_dir, ss) for ss in flat_num
    ]

    calib.makeflat(scan_flat_frames,
                   None,
                   calib_dir + 'flat.fits',
                   darks=False)

    ## Lets also make a mask to use when we call find_stars.
    ## This mask tells us where not to search for stars.
    ## UPDATE: mask_min and mask_max were hand calculated 6/14/2021
    calib.make_mask(calib_dir + 'flat.fits',
                    calib_dir + 'mask.fits',
                    mask_min=0.5,
                    mask_max=1.8,
                    left_slice=20,
                    right_slice=20,
                    top_slice=25,
                    bottom_slice=25)
    return
Example #14
0
def make_flat(): 
    """
    Flats made with twilights
    """
    util.mkdir(calib_dir)
    
    flat_num = np.arange(56, 68+1) # Change per night
    flat_frames = ['{0:s}twi_{1:03d}.fits'.format(twi_dir, ss) for ss in flat_num] # file list
    
    ## STA: needs to deal with overscan
    reduce_STA.treat_overscan(flat_frames) # run once
    
    scan_flat_frames = ['{0:s}twi_{1:03d}_scan.fits'.format(twi_dir, ss) for ss in flat_num] # new file list

    ## Main Function
    calib.makeflat(scan_flat_frames, None, calib_dir + 'flat.fits', darks=False)

    ## Lets also make a mask to use when we call find_stars.
    ## This mask tells us where not to search for stars.
    calib.make_mask(calib_dir + 'flat.fits', calib_dir + 'mask.fits',
                    mask_min=0.7, mask_max=1.6,
                    left_slice=20, right_slice=20, top_slice=25, bottom_slice=25)
    return
Example #15
0
def make_twilight_flats():
    twilights = [
        'twi_1001.fits', 'twi_2002.fits', 'twi_3003.fits', 'twi_4004.fits',
        'twi_5005.fits', 'twi_6006.fits', 'twi_7007.fits', 'twi_8008.fits',
        'twi_9009.fits', 'twi_10010.fits', 'twi_11011.fits', 'twi_12012.fits',
        'twi_13013.fits', 'twi_14014.fits', 'twi_15015.fits', 'twi_16016.fits',
        'twi_17017.fits', 'twi_18018.fits', 'twi_19019.fits', 'twi_20020.fits',
        'twi_21021.fits', 'twi_22022.fits', 'twi_23023.fits', 'twi_24024.fits',
        'twi_25025.fits', 'twi_26026.fits', 'twi_27027.fits', 'twi_28028.fits',
        'twi_29029.fits', 'twi_30030.fits', 'twi_31031.fits'
    ]

    twi_darks = [
        'dark_1001002.fits', 'dark_2002013.fits', 'dark_3003024.fits',
        'dark_4004035.fits', 'dark_5005044.fits', 'dark_6006045.fits',
        'dark_7007046.fits', 'dark_8008047.fits', 'dark_9009048.fits',
        'dark_10010001.fits', 'dark_11011003.fits', 'dark_12012004.fits',
        'dark_13013005.fits', 'dark_14014006.fits', 'dark_15015007.fits',
        'dark_16016008.fits', 'dark_17017009.fits', 'dark_18018010.fits',
        'dark_19019011.fits', 'dark_20020012.fits', 'dark_21021014.fits',
        'dark_22022015.fits', 'dark_23023016.fits', 'dark_24024017.fits',
        'dark_25025018.fits', 'dark_26026019.fits', 'dark_27027020.fits',
        'dark_28028021.fits', 'dark_29029022.fits', 'dark_30030023.fits',
        'dark_31031025.fits'
    ]

    twilight_root = '/Users/jlu/data/imaka/2016_11_19/20161118/twilight/'
    twi_dark_root = '/Users/jlu/data/imaka/2016_11_19/20161118/darks/darks_for_twis/'

    for tt in range(len(twilights)):
        twilights[tt] = twilight_root + twilights[tt]
        twi_darks[tt] = twi_dark_root + twi_darks[tt]

    calib.makeflat(twilights, twi_darks, twilight_root + 'flat_r.fits')

    return
Example #16
0
def make_flat_filter():
    """
    Makes flat and data mask. 
     - makeflat(fourfilter=True) normalizes each quadrant independently
     - combine_filter_flat(filt_order) takes two 4F flats 
         and gives I-band the logner int quadrant
    For four filter, dome flat was made with two integration times, 
        20(2) for BVR 
        60(45) for I
    """

    util.mkdir(calib_dir)
    util.mkdir(dark_dir)

    ## Two exposure length flats taken this night
    ## Not planning on combining them initially
    ## scaling old darks because we took none

    filt_order = "VBRI"
    print(filt_order)

    print("Scanning Flat Frames... ")
    flat_num_3p = np.arange(80, 84 + 1)
    flat_num_1p = np.append(np.arange(87, 90 + 1), 85)

    flat_frames_3p = [
        '{0:s}sta{1:03d}_o.fits'.format(screen_dir, ss) for ss in flat_num_3p
    ]
    flat_frames_1p = [
        '{0:s}sta{1:03d}_o.fits'.format(screen_dir, ss) for ss in flat_num_1p
    ]
    scan_flat_frames_3p = [
        '{0:s}sta{1:03d}_o_scan.fits'.format(screen_dir, ss)
        for ss in flat_num_3p
    ]
    scan_flat_frames_1p = [
        '{0:s}sta{1:03d}_o_scan.fits'.format(screen_dir, ss)
        for ss in flat_num_1p
    ]
    reduce_STA.treat_overscan(flat_frames_3p)
    reduce_STA.treat_overscan(flat_frames_1p)

    print("Scaling Dark Frames... ")
    dark_num = np.arange(29, 33 + 1)
    ## didn't take darks for this date, scaling old ones
    dark_frames = [
        '{0:s}dark_{1:03d}.fits'.format(alt_dark_dir, ss) for ss in dark_num
    ]
    dark_frames_save = [
        '{0:s}dark_{1:03d}.fits'.format(dark_dir, ss) for ss in dark_num
    ]

    # Rescaling Dark frames
    for i in range(len(dark_frames)):
        if not os.path.isfile(dark_frames_save[i]):
            redu.rescale_dark(dark_frames[i], flat_frames_3p[0],
                              dark_frames_save[i])

    print("Scanning Dark Frames... ")
    scan_dark_frames = [
        '{0:s}dark_{1:03d}_scan.fits'.format(dark_dir, ss) for ss in dark_num
    ]
    reduce_STA.treat_overscan(dark_frames_save)

    print("Making Flats... ")
    ## Darker flat, 3 piece3 of paper
    calib.makeflat(scan_flat_frames_3p,
                   scan_dark_frames,
                   f'{calib_dir}flat_3p_{filt_order}.fits',
                   darks=True,
                   fourfilter=True)
    ## Lighter flat, 1 piece of paper
    calib.makeflat(scan_flat_frames_1p,
                   scan_dark_frames,
                   f'{calib_dir}flat_1p_{filt_order}.fits',
                   darks=True,
                   fourfilter=True)

    # Combining two flats based on filter orientation
    #calib.combine_filter_flat(f'{calib_dir}domeflat_60_{filt_order}.fits',
    #                          f'{calib_dir}domeflat_20_{filt_order}.fits',
    #                          f'{calib_dir}flat_{filt_order}.fits', filt_order)

    return
Example #17
0
def make_flat_filter():
    """
    Makes flat and data mask. 
    For four filter, dome flat was made with two integration times, 20(2) for BVR 60(45) for I
    """
    util.mkdir(calib_dir)

    ## I quad flat (60)
    dark_num = np.arange(108, 113 + 1)
    flat_num = np.arange(130, 135 + 1)
    dark_frames = [
        '{0:s}dark_{1:03d}.fits'.format(dark_dir, ss) for ss in dark_num
    ]
    scan_dark_frames = [
        '{0:s}dark_{1:03d}_scan.fits'.format(dark_dir, ss) for ss in dark_num
    ]
    flat_frames = [
        '{0:s}dome_{1:03d}.fits'.format(dome_dir, ss) for ss in flat_num
    ]
    scan_flat_frames = [
        '{0:s}dome_{1:03d}_scan.fits'.format(dome_dir, ss) for ss in flat_num
    ]

    reduce_STA.treat_overscan(dark_frames)
    reduce_STA.treat_overscan(flat_frames)
    calib.makeflat(scan_flat_frames,
                   scan_dark_frames,
                   calib_dir + 'domeflat_60.fits',
                   darks=True,
                   fourfilter=True)

    ## BVR quad flat (20)
    dark_num = np.arange(118, 123 + 1)
    flat_num = np.arange(124, 129 + 1)
    dark_frames = [
        '{0:s}dark_{1:03d}.fits'.format(dark_dir, ss) for ss in dark_num
    ]
    scan_dark_frames = [
        '{0:s}dark_{1:03d}_scan.fits'.format(dark_dir, ss) for ss in dark_num
    ]
    flat_frames = [
        '{0:s}dome_{1:03d}.fits'.format(dome_dir, ss) for ss in flat_num
    ]
    scan_flat_frames = [
        '{0:s}dome_{1:03d}_scan.fits'.format(dome_dir, ss) for ss in flat_num
    ]

    reduce_STA.treat_overscan(dark_frames)
    reduce_STA.treat_overscan(flat_frames)
    calib.makeflat(scan_flat_frames,
                   scan_dark_frames,
                   calib_dir + 'domeflat_20.fits',
                   darks=True,
                   fourfilter=True)

    # Combining two flats based on filter orientation
    filt_order = "RIVB"
    calib.combine_filter_flat(calib_dir + 'domeflat_60.fits',
                              calib_dir + 'domeflat_20.fits',
                              calib_dir + f'flat_{filt_order}.fits',
                              filt_order)

    ## Make a mask to use when calling find_stars.
    #calib.make_mask(calib_dir + 'domeflat_60.fits', calib_dir + 'mask_60.fits',
    #                   mask_min=0.5, mask_max=1.8,
    #                   left_slice=20, right_slice=20, top_slice=25, bottom_slice=25)

    return
Example #18
0
def make_flat_filter():
    """
    Makes flat and data mask. 
     - makeflat(fourfilter=True) normalizes each quadrant independently
     - combine_filter_flat(filt_order) takes two 4F flats 
         and gives I-band the logner int quadrant
    For this run, we illuminated the filter with a lamp, dimming with paper sheets.
        other nights used different numbers of paper, 8_30 we just used 1 extra sheet
    Integration times were 12s, darks taken 08_29
    """

    util.mkdir(calib_dir)
    util.mkdir(dark_dir)

    ## Two exposure length flats taken this night
    ## Not planning on combining them initially
    ## scaling old darks because we took none

    #filt_order = "IVBR" #position 2
    #flat_num = np.arange(1, 5+1)

    filt_order = "BRIV"  #position 4
    flat_num = np.arange(6, 10 + 1)

    print("Filter: ", filt_order)

    print("Scanning Flat Frames... ")
    flat_frames = [
        '{0:s}sta{1:03d}_o.fits'.format(screen_dir, ss) for ss in flat_num
    ]
    scan_flat_frames = [
        '{0:s}sta{1:03d}_o_scan.fits'.format(screen_dir, ss) for ss in flat_num
    ]
    reduce_STA.treat_overscan(flat_frames)

    print("Pulling Dark Frames... ")
    ## didn't take darks for this date, pulling from previous night
    dark_num = np.arange(94, 102 + 1)
    dark_frames = [
        '{0:s}dark_{1:03d}.fits'.format(alt_dark_dir, ss) for ss in dark_num
    ]
    dark_frames_save = [
        '{0:s}dark_{1:03d}.fits'.format(dark_dir, ss) for ss in dark_num
    ]
    #Copying dark frames
    #for i in range(len(dark_frames)):
    #    shutil.copyfile(dark_frames[i], dark_frames_save[i])

    print("Scanning Dark Frames... ")
    scan_dark_frames = [
        '{0:s}dark_{1:03d}_scan.fits'.format(dark_dir, ss) for ss in dark_num
    ]
    reduce_STA.treat_overscan(dark_frames_save)

    print("Making Flats... ")
    calib.makeflat(scan_flat_frames,
                   scan_dark_frames[:len(scan_flat_frames)],
                   f'{calib_dir}flat_{filt_order}.fits',
                   darks=True,
                   fourfilter=True)
    print("Making mask... ")
    calib.make_mask(f'{calib_dir}flat_{filt_order}.fits',
                    f'{calib_dir}mask_{filt_order}.fits',
                    mask_min=0.5,
                    mask_max=1.8,
                    left_slice=20,
                    right_slice=20,
                    top_slice=25,
                    bottom_slice=25)

    # Combining two flats based on filter orientation
    #calib.combine_filter_flat(f'{calib_dir}domeflat_60_{filt_order}.fits',
    #                          f'{calib_dir}domeflat_20_{filt_order}.fits',
    #                          f'{calib_dir}flat_{filt_order}.fits', filt_order)

    return