def fgmosLS(input_fnames, rawdir, inter_flags=inter_flags, nsrc=1, linelist=None, logfile="fgmosLS.log", verbose=False): # Load GMOS package from Gemini IRAF iraf.gemini() iraf.gmos() # Make a processed flatfield if matchfits.search(input_fnames["flatfile"]) == None: procflatfile = input_fnames["flatfile"] + "_flat.fits" else: procflatfile = re.sub(r"\.fits$", "_flat.fits", input_fnames["flatfile"]) return
def reduce(self): """ Prepare, reduce, mosaic FITS File - currently using IRAF, to be replaced by our own constructs """ reduce_dir = os.path.join(self.fits.work_dir, 'reduced') if not os.path.exists(reduce_dir): os.mkdir(reduce_dir) reduce_fname = os.path.join(reduce_dir, 'red-{0}'.format(self.fits.fname)) if os.path.exists(reduce_fname): logger.warn('{0} exists - deleting') os.system('rm {0}'.format(reduce_fname)) from pyraf import iraf prepare_temp_fname = tempfile.NamedTemporaryFile().name reduce_temp_fname = tempfile.NamedTemporaryFile().name iraf.gemini() iraf.gmos() iraf.gprepare(self.fits.full_path, rawpath='', outimag=prepare_temp_fname) iraf.gireduce(inimages=prepare_temp_fname, outimag=reduce_temp_fname, fl_over=True, fl_trim=True, fl_bias=False, fl_dark=False, fl_qeco=False, fl_flat=False) iraf.gmosaic(inimages=reduce_temp_fname, outimages=reduce_fname) return reduce_fname
''' import os, shutil from glob import glob import pyfits import numpy as np from astroscrappy import detect_cosmics from pyraf import iraf from scipy import interpolate, ndimage, signal, optimize import pf_model as pfm import statsmodels as sm from astropy.modeling import models, fitting import astropy iraf.cd(os.getcwd()) iraf.gemini() iraf.gmos() iraf.onedspec() bluecut = 3450 iraf.gmos.logfile = "log.txt" iraf.gmos.mode = 'h' iraf.set(clobber='yes') iraf.set(stdimage='imtgmos') dooverscan = False is_GS = False def normalize_fitting_coordinate(x): xrange = x.max() - x.min()
def reduce_science(rawdir, rundir, flat, arc, twilight, twilight_flat, sciimg, starimg, bias, overscan, vardq, observatory, lacos, apply_lacos, lacos_xorder, lacos_yorder, lacos_sigclip, lacos_objlim, bpm, instrument, slits, fl_gscrrej, wltrim_frac, grow_gap, cube_bit_mask): """ Reduction pipeline for standard star. Parameters ---------- rawdir: string Directory containing raw images. rundir: string Directory where processed files are saved. flat: string Names of the files containing flat field images. arc: string Arc images. twilight: string Twilight flat images. twilight_flat: string Flat field for twilight image. starimg: string Name of the file containing the image to be reduced. bias: string Bias images. grow_gap: number Number of pixels by which to grow the bad pixel mask around the chip gaps. """ iraf.set(stdimage='imtgmos') iraf.gemini() iraf.unlearn('gemini') iraf.gmos() iraf.unlearn('gmos') iraf.gemtools() iraf.unlearn('gemtools') # os.path.isfile('arquivo') iraf.unlearn('gemini') iraf.unlearn('gmos') iraf.task(lacos_spec=lacos) # set directories iraf.set(caldir=rawdir) # iraf.set(rawdir=rawdir) # raw files iraf.set(procdir=rundir) # processed files iraf.gmos.logfile = 'logfile.log' iraf.gfextract.verbose = 'no' iraf.cd('procdir') flat = flat.replace('.fits', '') twilight = twilight.replace('.fits', '') twilight_flat = twilight_flat.replace('.fits', '') arc = arc.replace('.fits', '') starimg = starimg.replace('.fits', '') sciimg = sciimg.replace('.fits', '') mdffile = 'mdf' + flat + '.fits' iraf.gfreduce.bias = 'caldir$' + bias iraf.gfreduce.fl_fulldq = 'yes' iraf.gfreduce.fl_fixgaps = 'yes' iraf.gfreduce.grow = grow_gap iraf.gireduce.bpm = 'rawdir$' + bpm iraf.gfextract.verbose = 'no' cal_reduction(rawdir=rawdir, rundir=rundir, flat=flat, arc=arc, twilight=twilight, bias=bias, bpm=bpm, overscan=overscan, vardq=vardq, instrument=instrument, slits=slits, twilight_flat=twilight_flat, grow_gap=grow_gap) # # Actually reduce science # image_name = 'rg' + sciimg + '.fits' if os.path.isfile(image_name): pipe.skipwarn(image_name) else: iraf.gfreduce(sciimg, slits='header', rawpath='rawdir$', fl_inter='no', fl_addmdf='yes', key_mdf='MDF', mdffile=mdffile, weights='no', fl_over=overscan, fl_trim='yes', fl_bias='yes', trace='no', recenter='no', fl_fulldq='yes', fl_flux='no', fl_gscrrej='no', fl_extract='no', fl_gsappwave='no', fl_wavtran='no', fl_novl='yes', fl_skysub='no', fl_vardq=vardq, mdfdir='procdir$') prefix = 'rg' # Gemfix image_name = 'p' + prefix + sciimg + '.fits' if os.path.isfile(image_name): pipe.skipwarn(image_name) else: iraf.gemfix(prefix + sciimg, out='p' + prefix + sciimg, method='fit1d', bitmask=65535, axis=1) prefix = 'p' + prefix # LA Cosmic - cosmic ray removal if apply_lacos: image_name = 'l' + prefix + sciimg + '.fits' if os.path.isfile(image_name): pipe.skipwarn(image_name) else: iraf.gemcrspec(prefix + sciimg, out='l' + prefix + sciimg, sigfrac=0.5, niter=4, fl_vardq=vardq, xorder=lacos_xorder, yorder=lacos_yorder, sigclip=lacos_sigclip, objlim=lacos_objlim) prefix = 'l' + prefix if fl_gscrrej: image_name = 'ex' + prefix + sciimg + '.fits' else: image_name = 'e' + prefix + sciimg + '.fits' if os.path.isfile(image_name): pipe.skipwarn(image_name) else: iraf.gfreduce(prefix + sciimg, slits='header', rawpath='./', fl_inter='no', fl_addmdf='no', key_mdf='MDF', mdffile=mdffile, fl_over='no', fl_trim='no', fl_bias='no', trace='no', recenter='no', fl_flux='no', fl_gscrrej=fl_gscrrej, fl_extract='yes', fl_gsappwave='yes', fl_wavtran='no', fl_novl='no', fl_skysub='no', grow=grow_gap, reference='eprg' + flat, weights='no', wavtraname='eprg' + arc, response='eprg' + flat + '_response.fits', fl_vardq=vardq, fl_fulldq='yes', fl_fixgaps='yes') if fl_gscrrej: prefix = 'ex' + prefix else: prefix = 'e' + prefix # if wl2 > 7550.0: # wl2 = 7550.0 # # Apply wavelength transformation # wl1, wl2 = wl_lims(prefix + sciimg + '.fits', wltrim_frac) image_name = 't' + prefix + sciimg + '.fits' if os.path.isfile(image_name): pipe.skipwarn(image_name) else: iraf.gftransform( prefix + sciimg, wavtraname='eprg' + arc, fl_vardq=vardq, w1=wl1, w2=wl2, ) prefix = 't' + prefix # # Sky subtraction # image_name = 's' + prefix + sciimg + '.fits' if os.path.isfile(image_name): pipe.skipwarn(image_name) else: iraf.gfskysub( prefix + sciimg, expr='default', combine='median', reject='avsigclip', scale='none', zero='none', weight='none', sepslits='yes', fl_inter='no', lsigma=1, hsigma=1, ) prefix = 's' + prefix # # Apply flux calibration to galaxy # image_name = 'c' + prefix + sciimg + '.fits' if os.path.isfile(image_name): pipe.skipwarn(image_name) else: iraf.gscalibrate(prefix + sciimg, sfuncti=starimg, extinct='onedstds$ctioextinct.dat', observatory=observatory, fluxsca=1, fl_vardq=vardq) prefix = 'c' + prefix # # Remove spurious data with PCA # image_name = 'x' + prefix + sciimg + '.fits' print(os.getcwd()) print(image_name) if os.path.isfile(image_name): pipe.skipwarn(image_name) else: t = pca.Tomography(prefix + sciimg + '.fits') t.decompose() t.remove_cosmic_rays(sigma_threshold=10.0) t.write(image_name) prefix = 'x' + prefix # # Create data cubes # image_name = 'd' + prefix + sciimg + '.fits' if os.path.isfile(image_name): pipe.skipwarn(image_name) else: data_cube = CubeBuilder(prefix + sciimg + '.fits') data_cube.build_cube() data_cube.fit_refraction_function() data_cube.fix_atmospheric_refraction() data_cube.write(image_name)
def reduce_stdstar(rawdir, rundir, caldir, starobj, stdstar, flat, arc, twilight, twilight_flat, starimg, bias, overscan, vardq, lacos, observatory, apply_lacos, lacos_xorder, lacos_yorder, lacos_objlim, lacos_sigclip, bpm, instrument, slits, fl_gscrrej, wltrim_frac=0.03, sens_order=6, sens_function='spline3', apsum_radius=1): """ Reduction pipeline for standard star. Parameters ---------- rawdir: string Directory containing raw images. rundi: string Directory where processed files are saved. caldir: string Directory containing standard star calibration files. starobj: string Object keyword for the star image. stdstar: string Star name in calibration file. flat: list Names of the files containing flat field images. arc: list Arc images. twilight: list Twilight flat images. starimg: string Name of the file containing the image to be reduced. bias: list Bias images. """ iraf.set(stdimage='imtgmos') iraf.task(lacos_spec=lacos) iraf.gemini() iraf.unlearn('gemini') iraf.gmos() iraf.unlearn('gmos') iraf.gemtools() iraf.unlearn('gemtools') iraf.gmos.logfile = 'logfile.log' iraf.gemtools.gloginit.logfile = 'logfile.log' iraf.gfextract.verbose = 'no' # set directories iraf.set(caldir=rawdir) # iraf.set(rawdir=rawdir) # raw files iraf.set(procdir=rundir) # processed files # os.path.isfile('arquivo') iraf.cd('procdir') flat = flat.strip('.fits') twilight = twilight.strip('.fits') twilight_flat = twilight_flat.strip('.fits') arc = arc.strip('.fits') starimg = starimg.strip('.fits') mdffile = 'mdf' + flat + '.fits' iraf.gfreduce.bias = 'rawdir$' + bias iraf.gfreduce.fl_fulldq = 'yes' iraf.gfreduce.fl_fixgaps = 'yes' iraf.gireduce.bpm = 'rawdir$' + bpm cal_reduction(rawdir=rawdir, rundir=rundir, flat=flat, arc=arc, twilight=twilight, bias=bias, bpm=bpm, overscan=overscan, vardq=vardq, instrument=instrument, slits=slits, twilight_flat=twilight_flat) # # Actually reduce star # imageName = 'rg' + starimg + '.fits' if os.path.isfile(imageName): skipwarn(imageName) else: imageName = 'g' + starimg + '.fits' if os.path.isfile(imageName): iraf.printlog( 'GIREDS: WARNING: Removing file {:s}'.format(imageName), 'logfile.log', 'yes') iraf.delete(imageName) iraf.gfreduce(starimg, slits='header', rawpath='rawdir$', fl_inter='no', fl_addmdf='yes', key_mdf='MDF', mdffile=mdffile, weights='no', fl_over=overscan, fl_trim='yes', fl_bias='yes', trace='no', recenter='no', fl_flux='no', fl_gscrrej='no', fl_extract='no', fl_gsappwave='no', fl_wavtran='no', fl_novl='yes', fl_skysub='no', fl_vardq=vardq, mdfdir='procdir$') prefix = 'rg' # # Gemfix # imageName = 'p' + prefix + starimg + '.fits' if os.path.isfile(imageName): skipwarn(imageName) else: iraf.gemfix(prefix + starimg, out='p' + prefix + starimg, method='fit1d', bitmask=1, axis=1) prefix = 'p' + prefix # # LA Cosmic # if apply_lacos: imageName = 'l' + prefix + starimg + '.fits' if os.path.isfile(imageName): skipwarn(imageName) else: if apply_lacos: iraf.gemcrspec(prefix + starimg, out='l' + prefix + starimg, sigfrac=0.32, niter=4, fl_vardq=vardq, xorder=lacos_xorder, yorder=lacos_yorder, objlim=lacos_objlim, sigclip=lacos_sigclip) prefix = 'l' + prefix # # Extraction and Gemini's comsmic ray rejection # if fl_gscrrej: imageName = 'x' + prefix + starimg + '.fits' if os.path.isfile(imageName): skipwarn(imageName) fl_gscrrej = False else: imageName = 'ex' + prefix + starimg + '.fits' if os.path.isfile(imageName): skipwarn(imageName) else: iraf.gfreduce(prefix + starimg, slits='header', rawpath='./', fl_inter='no', fl_addmdf='no', key_mdf='MDF', mdffile=mdffile, fl_over='no', fl_trim='no', fl_bias='no', trace='no', recenter='no', fl_flux='no', fl_gscrrej=fl_gscrrej, fl_extract='yes', fl_gsappwave='yes', fl_wavtran='no', fl_novl='no', fl_skysub='no', reference='eprg' + flat, weights='no', wavtraname='eprg' + arc, response='eprg' + flat + '_response.fits', fl_vardq=vardq) prefix = 'ex' + prefix else: imageName = 'e' + prefix + starimg + '.fits' if os.path.isfile(imageName): skipwarn(imageName) else: iraf.gfreduce(prefix + starimg, slits='header', rawpath='./', fl_inter='no', fl_addmdf='no', key_mdf='MDF', mdffile=mdffile, fl_over='no', fl_trim='no', fl_bias='no', trace='no', recenter='no', fl_flux='no', fl_gscrrej=fl_gscrrej, fl_extract='yes', fl_gsappwave='yes', fl_wavtran='no', fl_novl='no', fl_skysub='no', reference='eprg' + flat, weights='no', wavtraname='eprg' + arc, response='eprg' + flat + '_response.fits', fl_vardq=vardq) prefix = 'e' + prefix # # Wavelength transform # wl1, wl2 = wl_lims(prefix + starimg + '.fits', wltrim_frac) imageName = 't' + prefix + starimg + '.fits' if os.path.isfile(imageName): skipwarn(imageName) else: iraf.gfreduce(prefix + starimg, slits='header', rawpath='./', fl_inter='no', fl_addmdf='no', key_mdf='MDF', mdffile=mdffile, fl_over='no', fl_trim='no', fl_bias='no', trace='no', recenter='no', fl_flux='no', fl_gscrrej='no', fl_extract='no', fl_gsappwave='no', fl_wavtran='yes', fl_novl='no', fl_skysub='no', reference='eprg' + flat, weights='no', wavtraname='eprg' + arc, response='eprg' + flat + '_response.fits', fl_vardq=vardq, w1=wl1, w2=wl2) prefix = 't' + prefix # # Sky subtraction # imageName = 's' + prefix + starimg + '.fits' if os.path.isfile(imageName): skipwarn(imageName) else: iraf.gfreduce(prefix + starimg, slits='header', rawpath='./', fl_inter='no', fl_addmdf='no', key_mdf='MDF', mdffile=mdffile, fl_over='no', fl_trim='no', fl_bias='no', trace='no', recenter='no', fl_flux='no', fl_gscrrej='no', fl_extract='no', fl_gsappwave='no', fl_wavtran='no', fl_novl='no', fl_skysub='yes', reference='eprg' + flat, weights='no', wavtraname='eprg' + arc, response='eprg' + flat + '_response.fits', fl_vardq=vardq, w1=wl1, w2=wl2) prefix = 's' + prefix # # Apsumming the stellar spectra # xinst = pf.getdata(prefix + starimg + '.fits', ext=1)['XINST'] if instrument == 'GMOS-N': x0 = np.average(xinst[xinst < 10]) elif instrument == 'GMOS-S': x0 = np.average(xinst[xinst > 10]) ap_expression = '((XINST-{:.2f})**2 + '\ '(YINST-2.45)**2)**0.5 < {:.2f}'.format(x0, apsum_radius) imageName = 'a' + prefix + starimg + '.fits' if os.path.isfile(imageName): skipwarn(imageName) else: iraf.gfapsum(prefix + starimg, fl_inter='no', lthreshold='INDEF', hthreshold='INDEF', reject='avsigclip', expr=ap_expression) # # Building sensibility function # if os.path.isfile('std' + starimg)\ and os.path.isfile('sens' + starimg + '.fits'): skipwarn('std{0:s} and sens{0:s}.fits'.format(starimg)) else: imageName = 'std' + starimg if os.path.isfile(imageName): iraf.printlog( 'GIREDS: WARNING: Removing file {:s}'.format(imageName), 'logfile.log', 'yes') iraf.delete(imageName) imageName = 'sens' + starimg + '.fits' if os.path.isfile(imageName): iraf.printlog( 'GIREDS: WARNING: Removing file {:s}'.format(imageName), 'logfile.log', 'yes') iraf.delete(imageName) iraf.gsstandard('a' + prefix + starimg, starname=stdstar, observatory=observatory, sfile='std' + starimg, sfunction='sens' + starimg, caldir=caldir, order=sens_order, function=sens_function) # # Apply flux calibration to star # imageName = 'c' + prefix + starimg + '.fits' if os.path.isfile(imageName): skipwarn(imageName) else: iraf.gscalibrate(prefix + starimg, sfuncti='sens' + starimg, extinct='onedstds$ctioextinct.dat', observatory=observatory, fluxsca=1, fl_vardq=vardq) # # Create data cubes # imageName = 'dc' + prefix + starimg + '.fits' if os.path.isfile(imageName): skipwarn(imageName) else: data_cube = CubeBuilder('c' + prefix + starimg + '.fits') data_cube.build_cube() data_cube.fit_refraction_function() data_cube.fix_atmospheric_refraction() data_cube.write(imageName) # # Test calibration # iraf.cd(caldir) caldata = np.loadtxt(stdstar + '.dat', unpack=True) iraf.cd('procdir') calflux = mag2flux(caldata[0], caldata[1]) imageName = 'ca' + prefix + starimg + '.fits' if os.path.isfile(imageName): skipwarn(imageName) else: iraf.gscalibrate('a' + prefix + starimg, sfuncti='sens' + starimg, extinct='onedstds$ctioextinct.dat', observatory=observatory, fluxsca=1) sumflux = pf.getdata('ca' + prefix + starimg + '.fits', ext=2) sumhead = pf.getheader('ca' + prefix + starimg + '.fits', ext=2) sumwl = sumhead['crval1'] + np.arange( sumhead['naxis1']) * sumhead['cdelt1'] plt.close('all') plt.plot(sumwl, sumflux, 'b', lw=.5) plt.plot(caldata[0], calflux, 'r', lw=1.5) plt.xlim(sumwl[0] * .99, sumwl[-1] * 1.01) plt.ylim(min(calflux) * .8, max(calflux) * 1.2) plt.savefig('calib' + starimg + '.eps')
def merge_cubes(rawdir, rundir, name, observatory, imgcube, xoff, yoff, crval3, cdelt3, cdelt1): """ Merge cubes. Parameters ---------- rawdir: string Directory containing raw images. rundir: string Directory where processed files are saved. name: string Name of the object. observatory: string Gemini-South/Gemini-North. imgcube: list of strings Cube file for each object cube. xoff: list of floats x-offset for each object cube. yoff: list of floats y-offset for each object cube. crval3: list of floats crval3 for each object cube. cdelt3: list of floats cdelt3 for each object cube. cdelt1: list of floats cdelt1 for each object cube. """ rundir = rundir + '/' iraf.set(stdimage='imtgmos') iraf.gemini() iraf.unlearn('gemini') iraf.gmos() iraf.unlearn('gmos') iraf.gemtools() iraf.unlearn('gemtools') iraf.gmos.logfile = 'logfile.log' iraf.gemtools.gloginit.logfile = 'logfile.log' # set directories iraf.set(caldir=rawdir) # iraf.set(rawdir=rawdir) # raw files iraf.set(procdir=rundir) # processed files iraf.cd('procdir') # # Creation of file/offset files # nCubes = len(imgcube) in_filesSCI = 'files_' + name + '_SCI' in_filesVAR = 'files_' + name + '_VAR' in_offset = 'offsets_' + name with open(in_filesSCI, 'w') as f: for img in imgcube: f.write(rundir + img + '[1]' + '\n') with open(in_filesVAR, 'w') as f: for img in imgcube: f.write(rundir + img + '[2]' + '\n') # Invert (x,y)offsets if in gemini-north sign = -1 if (observatory.lower() == 'gemini-north') else 1 with open(in_offset, 'w') as f: for k in range(nCubes): f.write("{:.5f} {:.5f} {:.5f}\n".format( sign * (xoff[k] - xoff[0]) / cdelt1[k], sign * (yoff[k] - yoff[0]) / cdelt1[k], (crval3[k] - crval3[0]) / cdelt3[k])) # # Definition of in/output files. And header modification. # in_sci = [img + '[1]' for img in imgcube] in_var = [img + '[2]' for img in imgcube] in_dq = [img + '[3]' for img in imgcube] out_sci = name + '_SCI.fits' out_var = name + '_VAR.fits' out_sigIN = name + '_SIGIN.fits' out_exp = name + '_EXP' # Convert DQ extension to 'pl' and add the its filename to 'bpm' key # --- Change to other key. (Other rotines use this key) - Improve # --- Change also the key for bpm used by 'fixpix' ------ Improve out_dqPL = [img[:-5] + '_DQ.pl' for img in imgcube] for k in range(nCubes): print(in_sci[k], in_var[k], in_dq[k], out_dqPL[k]) iraf.imcopy(in_dq[k], out_dqPL[k]) iraf.hedit(in_sci[k], 'BPM', out_dqPL[k], add='yes', verify='no') iraf.hedit(in_var[k], 'BPM', out_dqPL[k], add='yes', verify='no') # # Merge sci/var cubes # iraf.imcombine("@" + in_filesSCI, out_sci, offsets=in_offset, combine='average', reject='avsigclip', masktype='goodvalue', maskvalue=0, expmasks=out_exp, sigmas=out_sigIN) iraf.imcombine("@" + in_filesVAR, out_var, offsets=in_offset, combine='sum', reject='none', masktype='goodvalue', maskvalue=0) # # Criate correct error cube # iraf.imcopy(out_exp + '.pl', out_exp.replace('.pl', '.fits')) # Read cubes sci_cube = pf.getdata(out_sci) var_cube = pf.getdata(out_var) sigIN_cube = pf.getdata(out_sigIN) exp_cube = pf.getdata(out_exp + '.fits') # --- Identify problem with negative values ---- Improve # RuntimeWarning: invalid value encountered in divide exp_MASK = np.ma.array(exp_cube, mask=(exp_cube == 0)) err_cube = np.sqrt(abs(var_cube / exp_MASK**2).data) # # Criate hypercube # # ---- Maybe don't need header for each extension -- Improve pry = pf.PrimaryHDU(header=pf.getheader(out_sci)) hdu1 = pf.ImageHDU(sci_cube, header=pf.getheader(out_sci), name='SCI') hdu2 = pf.ImageHDU(err_cube, header=pf.getheader(out_var), name='ERR') hdu4 = pf.ImageHDU(sigIN_cube, header=pf.getheader(out_sigIN), name='SIG_IN') hdu3 = pf.ImageHDU(exp_cube, header=pf.getheader(out_exp + '.fits'), name='NCUBE') hdu = pf.HDUList([pry, hdu1, hdu2, hdu3, hdu4]) hdu.writeto(name + '_HYPERCUBE.fits')
import sys import os import astropy.io.fits as fits import glob #logincl_dir='/Users/emir/iraf' #workingdir=os.getcwd() #os.chdir(logincl_dir) from pyraf import iraf #os.chdir(workingdir) iraf.gemini() iraf.gmos() iraf.stsdas() iraf.onedspec() yes = 'yes' no = 'no' default_caldir = 'onedstds$iidscal/' l = open('reduction.log', 'w') #Produce normalized flats #if not os.path.isfile('b600_525_norm_flat_3.fits'): iraf.gsflat(inflats="@flatb600_520_1.txt", specflat='b600_520_norm_flat_1.fits', order=20, fl_over=yes, fl_bias=no, fl_inter=no, fl_detec=yes,
def reduce_stdstar(rawdir, rundir, caldir, starobj, stdstar, flat, arc, twilight, starimg, bias, overscan, vardq): """ Reduction pipeline for standard star. Parameters ---------- rawdir: string Directory containing raw images. rundi: string Directory where processed files are saved. caldir: string Directory containing standard star calibration files. starobj: string Object keyword for the star image. stdstar: string Star name in calibration file. flat: list Names of the files containing flat field images. arc: list Arc images. twilight: list Twilight flat images. starimg: string Name of the file containing the image to be reduced. bias: list Bias images. """ iraf.set(stdimage='imtgmos') iraf.gemini() iraf.gemtools() iraf.gmos() #iraf.unlearn('gemini') #iraf.unlearn('gmos') iraf.task(lacos_spec='/storage/work/gemini_pairs/lacos_spec.cl') tstart = time.time() #set directories iraf.set(caldir=rawdir) # iraf.set(rawdir=rawdir) # raw files iraf.set(procdir=rundir) # processed files iraf.gmos.logfile='logfile.log' iraf.cd('procdir') # building lists def range_string(l): return (len(l)*'{:4s},').format(*[i[-9:-5] for i in l]) iraf.gemlist(range=range_string(flat), root=flat[0][:-9], Stdout='flat.list') iraf.gemlist(range=range_string(arc), root=arc[0][:-9], Stdout='arc.list') #iraf.gemlist(range=range_string(star), root=star[0][:-4], # Stdout='star.list') iraf.gemlist(range=range_string(twilight), root=twilight[0][:-9], Stdout='twilight.list') iraf.gfreduce.bias = 'caldir$'+bias[0] ####################################################################### ####################################################################### ### Star reduction # ####################################################################### ####################################################################### # # Flat reduction # iraf.gfreduce( '@flat.list', slits='header', rawpath='rawdir$', fl_inter='no', fl_addmdf='yes', key_mdf='MDF', mdffile='default', weights='no', fl_over=overscan, fl_trim='yes', fl_bias='yes', trace='yes', t_order=4, fl_flux='no', fl_gscrrej='no', fl_extract='yes', fl_gsappwave='no', fl_wavtran='no', fl_novl='no', fl_skysub='no', reference='', recenter='yes', fl_vardq=vardq) iraf.gfreduce('@twilight.list', slits='header', rawpath='rawdir$', fl_inter='no', fl_addmdf='yes', key_mdf='MDF', mdffile='default', weights='no', fl_over=overscan, fl_trim='yes', fl_bias='yes', trace='yes', recenter='no', fl_flux='no', fl_gscrrej='no', fl_extract='yes', fl_gsappwave='no', fl_wavtran='no', fl_novl='no', fl_skysub='no', reference='erg'+flat[0], fl_vardq=vardq) # # Response function # for i, j in enumerate(flat): j = j[:-5] iraf.imdelete(j+'_response') iraf.gfresponse('erg'+j+'.fits', out='erg'+j+'_response', skyimage='erg'+twilight[i], order=95, fl_inter='no', func='spline3', sample='*', verbose='yes') # Arc reduction # iraf.gfreduce( '@arc.list', slits='header', rawpath='rawdir$', fl_inter='no', fl_addmdf='yes', key_mdf='MDF', mdffile='default', weights='no', fl_over=overscan, fl_trim='yes', fl_bias='yes', trace='no', recenter='no', fl_flux='no', fl_gscrrej='no', fl_extract='yes', fl_gsappwave='no', fl_wavtran='no', fl_novl='no', fl_skysub='no', reference='erg'+flat[0], fl_vardq=vardq) # Finding wavelength solution # Note: the automatic identification is very good # for i in arc: iraf.gswavelength('erg'+i, function='chebyshev', nsum=15, order=4, fl_inter='no', nlost=5, ntarget=20, aiddebug='s', threshold=5, section='middle line') # # Apply wavelength solution to the lamp 2D spectra # iraf.gftransform('erg'+i, wavtran='erg'+i, outpref='t', fl_vardq=vardq) ## ## Actually reduce star ## iraf.gfreduce( starimg, slits='header', rawpath='rawdir$', fl_inter='no', fl_addmdf='yes', key_mdf='MDF', mdffile='default', weights='no', fl_over=overscan, fl_trim='yes', fl_bias='yes', trace='no', recenter='no', fl_flux='no', fl_gscrrej='no', fl_extract='no', fl_gsappwave='no', fl_wavtran='no', fl_novl='yes', fl_skysub='no', fl_vardq=vardq) iraf.gemcrspec('rg{:s}'.format(starimg), out='lrg'+starimg, sigfrac=0.32, niter=4, fl_vardq=vardq) iraf.gfreduce( 'lrg'+starimg, slits='header', rawpath='./', fl_inter='no', fl_addmdf='no', key_mdf='MDF', mdffile='default', fl_over='no', fl_trim='no', fl_bias='no', trace='no', recenter='no', fl_flux='no', fl_gscrrej='no', fl_extract='yes', fl_gsappwave='yes', fl_wavtran='yes', fl_novl='no', fl_skysub='yes', reference='erg'+flat[0][:-5], weights='no', wavtraname='erg'+arc[0][:-5], response='erg'+flat[0][:-5]+'_response.fits', fl_vardq=vardq) # # Apsumming the stellar spectra # iraf.gfapsum( 'stexlrg'+starimg, fl_inter='no', lthreshold=400., reject='avsigclip') # # Building sensibility function # iraf.gsstandard( ('astexlrg{:s}').format(starimg), starname=stdstar, observatory='Gemini-South', sfile='std', sfunction='sens', caldir=caldir) # # Apply flux calibration to galaxy # # ##iraf.imdelete('*****@*****.**') # ##iraf.gscalibrate('*****@*****.**',sfunction='sens.fits',fl_ext='yes',extinct='onedstds$ctioextinct.dat',observatory='Gemini-South',fluxsca=1) # ## ## Create data cubes ## # # ##for i in objs: ## iraf.imdelete('d0.1cstexlrg'+i+'.fits') ## iraf.gfcube('cstexlrg'+i+'.fits',outpref='d0.1',ssample=0.1,fl_atmd='yes',fl_flux='yes') # ## ## Combine cubes ## # # ##iraf.imdelete('am2306-721r4_wcsoffsets.fits') ##iraf.imcombine('d0.1cstexlrgS20141113S00??.fits[1]',output='am2306-721r4_wcsoffsets.fits',combine='average',reject='sigclip',masktype='badvalue',lsigma=2,hsigma=2,offset='wcs',outlimits='2 67 2 48 100 1795') # tend = time.time() print('Elapsed time in reduction: {:.2f}'.format(tend - tstart))
def main(): iraf.set(stdimage='imtgmos') iraf.gemini() iraf.gmos() # set directories iraf.set(rawdir='/dados/gmos/raw') # raw files iraf.set( procdir='/dados/gmos/reduction/products/ngc7213/') # processed files iraf.gmos.logfile = 'logfile.log' iraf.gfextract.verbose = 'no' iraf.cd('procdir') for task in ['gemini', 'gmos', 'gfextract']: iraf.unlearn(task) flat = 'S20110927S0062' for name in glob.glob('database/apeprg' + flat + '*'): if os.path.isfile(name): print('Removing file {:s}'.format(name)) os.remove(name) if os.path.isfile('eprg' + flat + '.fits'): os.remove('eprg' + flat + '.fits') grow_gap = 1 vardq = 'yes' ap = auto_apertures.AutoApertures('prg' + flat + '.fits') ap.find_dead_beams() ap.fix_mdf() iraf.delete('eprg' + flat + '.fits') extract_args = { 'inimage': 'prg' + flat, 'exslits': '*', 'trace': 'yes', 'recenter': 'yes', 'order': 9, 't_nsum': 50, 'function': 'chebyshev', 'fl_novl': 'no', 'fl_fulldq': vardq, 'fl_gnsskysub': 'no', 'fl_fixnc': 'no', 'fl_fixgaps': 'yes', 'fl_vardq': 'yes', 'grow': grow_gap, 'fl_inter': 'no', 'verbose': 'no' } iraf.gfextract(**extract_args) sys.exit() time_out = 0 while (ap.check_iraf('database/apeprg' + flat) != 0) and (time_out < 5): ap.fix_mdf() print('Aperture iteration #{:d}.'.format(time_out)) iraf.delete('eprg' + flat + '.fits') iraf.delete('database/apeprg' + flat + '*') extract_args['fl_inter'] = 'yes' iraf.gfextract(**extract_args) time_out += 1