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