def compSensFunc(self, inIm, **kwargs): print "\nCOMPUTING SENSITIVITY FUNCTION FROM " + inIm suffStart = inIm.find(".") date = inIm[suffStart - 13:suffStart - 5] hdu = fits.open(inIm) tgtName = hdu[0].header["OBJECT"] centWave = str(int(hdu[0].header["CENTWAVE"])) hdu.close() outFlux = tgtName + "_" + centWave + "_" + date + "_flux.txt" sFunc = tgtName + "_" + centWave + "_" + date + "_sFunc" iraf.gsstandard(inIm, sfile=outFlux, sfunction=sFunc, **kwargs) return
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')
# Reduce standard star iraf.gsreduce(rawdir + star, rawpath=rawdir, bias=rawdir + bias_star, fl_fixpix='yes', flat='flat_star.fits', fl_over='no', fl_gscrrej='yes', fl_vardq='yes') iraf.gstransform('gs' + star, wavtraname='gs' + arc_star.replace('.fits', '')) iraf.gsskysub('tgs' + star, long_sample='150:200') iraf.gsextract('stgs' + star) iraf.gsstandard('estgs' + star, sfile='std', sfunction='sens', caldir='onedstds$ctionewcal/', starname='l3218') vardq = 'yes' for i in gal: iraf.gsreduce(rawdir + i, rawpath=rawdir, bias=rawdir + bias, fl_fixpix='yes', flat='flat.fits', fl_over='no', fl_gscrrej='yes', fl_vardq=vardq, fl_fulldq=vardq) iraf.gstransform('gs' + i,
ax.set_ylim([-2.45, 2.45]) ax.set_xticks([-3,-2,-1,0,1,2,3]) ax.set_yticks([-2,-1,0,1,2]) ax.set_xticklabels([r'$-3$',r'$-2$',r'$-1$',0,1,2,3], fontsize=15.0) ax.set_yticklabels([r'$-2$',r'$-1$',0,1,2], fontsize=15.0) ax.set_xlabel('arcsec', fontsize=15.0) ax.set_ylabel('arcsec', fontsize=15.0) ax.tick_params(width=1.0, length=5.0) for axis in ['top','bottom','left','right']: ax.spines[axis].set_linewidth(1.0) # Call gsstandard outflux = ic.root_name+'std' sensfunc = ic.root_name+'sens' iraf.delete(outflux, verify='no') # Not .fits file iraf.imdelete(sensfunc, verify='no') # .fits file iraf.gsstandard('astxeqxbrg'+std0, outflux, sensfunc, starname = ic.starname, observatory = ic.obs_site, caldir = ic.stardir, extinction = ic.extinction, fl_inter = 'yes', function = 'chebyshev', order=11) # Store the solution os.system("cp -rpv "+sensfunc+".fits "+ic.caldir) # Printing the running time print('--- %.3f seconds ---' %(time.time()-start_time))
# Fit wavelength solution iraf.gswavelength('gs' + arc, fl_inter='no') iraf.gswavelength('gs' + arc_star, fl_inter='no') # Reduce standard star iraf.gsreduce( rawdir + star, rawpath=rawdir, bias=rawdir + bias_star, fl_fixpix='yes', flat='flat_star.fits', fl_over='no', fl_gscrrej='yes') iraf.gstransform( 'gs' + star, wavtraname='gs' + arc_star.replace('.fits', '')) iraf.gsskysub( 'tgs' + star, long_sample='150:200') iraf.gsextract( 'stgs' + star) iraf.gsstandard( 'estgs' + star, caldir='onedstds$ctionewcal/', starname='l3218') for i in gal: iraf.gsreduce( rawdir + i, rawpath=rawdir, bias=rawdir + bias, fl_fixpix='yes', flat='flat.fits', fl_over='no', fl_gscrrej='yes') iraf.gstransform( 'gs' + i, wavtraname='gs' + arc.replace('.fits', '')) iraf.gsskysub( 'tgs' + i, long_sample='800:900') iraf.gscalibrate( 'stgs' + i) a = iraf.hselect( (3*'cstgs{:s}[0],').format(*gal), 'xoffset,yoffset', 'yes', Stdout=1)
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))
'stexlrg'+i, fl_inter='no', lthreshold=400., reject='avsigclip') #------------------------------------------------------------------------------------- # # Building sensibility function # for m in range(len(star)): iraf.delete('std'+str(m)) iraf.delete('sens'+str(m)+'.fits') for m in range(len(star)): iraf.gsstandard( 'astexlrg'+star[m], starname=stdstar[m], observatory=observatory[m], sfile='std'+str(m), sfunction='sens'+str(m), caldir=caldir[m]) ''' # Create list of list of star (to be used in gsstandard) # Nao funcionou tmpstar = [star_idx, star] star_idx0 = [[tmpstar[0][i] for i in range(len(star)) if ((star[i]==j))] for j in list(set(star))] star0 = [[tmpstar[1][i] for i in range(len(star)) if ((star[i]==j))] for j in list(set(star))] for m in range(len(star)): iraf.delete('std'+str(m)+'_'+str(i))