コード例 #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
    ## COPY FROM OLD NIGHT
    print("Copying: 20220609 domeflat")
    shutil.copyfile(root_dir + '../../20220609/sta/reduce/calib/domeflat.fits',
                    calib_dir + 'domeflat.fits')
    #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
コード例 #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
コード例 #3
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')
    #shutil.copyfile(root_dir + '../../20210723/sta/reduce/calib/flat_RIVB.fits', calib_dir + 'flat_RIVB.fits')

    ## Creating flat from range, I band only
    #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)

    calib.make_mask(calib_dir + 'flat_RIVB.fits',
                    calib_dir + 'mask_RIVB.fits',
                    mask_min=0.8,
                    mask_max=1.4,
                    left_slice=20,
                    right_slice=20,
                    top_slice=25,
                    bottom_slice=25)
    return
コード例 #4
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)

    flat_num = np.arange(115, 120 + 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.
    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
コード例 #5
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
コード例 #6
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
コード例 #7
0
def rebin_mask():
    # rebin flat
    redu.write_rebin_single(calib_dir + 'domeflat.fits', 2,
                            calib_dir + 'domeflat_bin2.fits')
    # Mask from rebinned flat
    calib.make_mask(calib_dir + 'domeflat_bin2.fits',
                    calib_dir + 'domemask_bin2.fits',
                    mask_min=0.8 * 4,
                    mask_max=1.4 * 4,
                    left_slice=20,
                    right_slice=20,
                    top_slice=25,
                    bottom_slice=25)
    return
コード例 #8
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
コード例 #9
0
def make_flat(): 
    """
    Makes flat and data mask. 
    Just for single filter I band
    CHANGES: took domeflats 01_22
    """
    util.mkdir(calib_dir)
    
    ## Copy flat from previous night because twilight exposures, did not bring flat lamp
    # opted to not do this, no other flat had wfs in the right position
    shutil.copyfile(root_dir + '../../20220122/sta/reduce/calib/domeflat.fits', calib_dir + 'domeflat.fits')
    
    # 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)
コード例 #10
0
def make_flat():
    """
    Makes flat and data mask. 
    Just for single filter I band
    """
    util.mkdir(calib_dir)

    ## Copy flat from previous night because twilight exposures, did not bring flat lamp
    # opted to not do this, no other flat had wfs in the right position

    #shutil.copyfile(root_dir + '../../20220121/sta/reduce/calib/flat.fits', calib_dir + 'flat.fits')

    ## FOR NOW: using blank flat -> don't have a flat with the right WFS shadow
    # copy file, make ones in the same shape, save over copy

    #shutil.copyfile(root_dir + '../../20210430/sta/reduce/calib/flat_bin1.fits', calib_dir + 'flat_ones.fits')
    #fitsfile = fits.open(root_dir + '../../20210430/sta/reduce/calib/flat_bin1.fits')
    #fitsfile[0].data = np.ones_like(fitsfile[0].data)
    #fitsfile.writeto(calib_dir + 'flat_ones.fits', overwrite=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.8, mask_max=1.4,
    #                   left_slice=20, right_slice=20, top_slice=25, bottom_slice=25)

    # decided to use the dome flats instead, with the rest of the run.

    ## Copy flat from previous night because twilight exposures, did not bring flat lamp
    # opted to not do this, no other flat had wfs in the right position
    shutil.copyfile(root_dir + '../../20220122/sta/reduce/calib/domeflat.fits',
                    calib_dir + 'domeflat.fits')

    # 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)

    return
コード例 #11
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)
コード例 #12
0
def make_flat():
    """
    Makes flat and data mask. 
    Just for single filter I band
    CHANGES: flats and darks are called calls for the cal unit
    """
    util.mkdir(calib_dir)

    # Flats: at 20 seconds
    #flat_num = [0,2,3,4,5]
    #flat_frames = ['{0:s}sta{1:03d}_o.fits'.format(cal_dir, ss) for ss in flat_num]
    #scan_flat_frames = ['{0:s}sta{1:03d}_o_scan.fits'.format(cal_dir, ss) for ss in flat_num]
    #reduce_STA.treat_overscan(flat_frames)

    # Darks: at 20 seconds
    #dark_num = [1,6,7,8,9]
    #dark_frames = ['{0:s}sta{1:03d}_o.fits'.format(cal_dir, ss) for ss in dark_num]
    #scan_dark_frames = ['{0:s}sta{1:03d}_o_scan.fits'.format(cal_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 + 'flat.fits', darks=True)

    # 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)

    ## found the flat from domes better, using that:
    shutil.copyfile(root_dir + '../../20220122/sta/reduce/calib/domeflat.fits',
                    calib_dir + 'domeflat.fits')

    # 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)
コード例 #13
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
コード例 #14
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
コード例 #15
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
コード例 #16
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
コード例 #17
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