def nirc_sky(image, bpm): usebpm = 0 if len(bpm) > 0: re1 = re.search("^\!(\w+)", bpm) if re1: bpmkey = re1.group(1) bpmfile = get_head(image, bpmkey) else: bpmfile = bpm if len(bpmfile) > 0 and os.path.exists(bpmfile): usebpm = 1 if usebpm: mimstat = iraf.mimstatistics( image, imasks='!BPM', omasks="", fields='image,npix,mean,stddev,min,max,mode', lower='INDEF', upper='INDEF', nclip=4, lsigma=5.0, usigma=5.0, binwidth=0.1, format=no, Stdout=1, Stderr=1) mimels = mimstat[0].split() skybkg = None if len(mimels) == 6: try: skybkg = float(mimels[5]) except: pass if not skybkg: usebpm = 0 if not usebpm: iraf.iterstat(image, nsigrej=5, maxiter=10, prin=no, verbose=no) skybkg = float(iraf.iterstat.median) return skybkg
def wirc_sky(image,bpm): usebpm=0 if len(bpm)>0: re1=re.search("^\!(\w+)",bpm) if re1: bpmkey=re1.group(1) bpmfile=get_head(image,bpmkey) else: bpmfile=bpm if len(bpmfile)>0 and os.path.exists(bpmfile): usebpm=1 if usebpm: mimstat=iraf.mimstatistics(image,imasks='!BPM',omasks="", fields='image,npix,mean,stddev,min,max,mode', lower='INDEF',upper='INDEF',nclip=4, lsigma=5.0,usigma=5.0,binwidth=0.1, format=no,Stdout=1,Stderr=1) mimels=mimstat[0].split() skybkg=None if len(mimels)==6: try: skybkg=float(mimels[5]) except: pass if not skybkg: usebpm=0 if not usebpm: iraf.iterstat(image,nsigrej=5,maxiter=10, prin=no,verbose=no) skybkg=float(iraf.iterstat.median) return skybkg
def wirc_flatscale(infiles,inflat,outflat,clipfrac=0.03, clobber=globclob): # "infiles" is a list of filenames inlist=','.join(infiles) bpmfile=get_head(infiles[0],'BPM') # Make a median combination of input files imcmb1=iraf.mktemp("iqwircc")+".fits" iraf.imcombine(inlist,imcmb1,combine="median",reject="none", project=no,outtype="real",outlimits="",offsets="", masktype="none",blank=0.0,scale="!SKYBKG",zero="none", weight="none",statsec="",lthreshold="INDEF", hthreshold="INDEF",nkeep=1) [naxis1,naxis2]=get_head(imcmb1,['NAXIS1','NAXIS2']) npixall=float(naxis1)*float(naxis2) # Calculate sky background & divide, subtract 1 skybkg=wirc_sky(imcmb1,bpmfile) imcmb2=iraf.mktemp("iqwircc")+".fits" iraf.imarith(imcmb1,'/',skybkg,imcmb2,verbose=no,noact=no) iraf.imdel(imcmb1,verify=no,go_ahead=yes) iraf.imarith(imcmb2,'-',1.0,imcmb1,verbose=no,noact=no) # Surface fit to median image imsurf1=iraf.mktemp("iqwircs")+".fits" iraf.imsurfit(imcmb1,imsurf1,xorder=6,yorder=6,type_output="fit", function="chebyshev",cross_terms=yes, xmedian=21,ymedian=21,median_percent=50.0, lower=0.0,upper=0.0,ngrow=0,niter=0, regions="all",rows="*",columns="*",border=50, sections="",circle="",div_min="INDEF") # Corresponding bad pixel mask imbpm1=iraf.mktemp("iqwircb")+".pl" iraf.imexpr("abs(x)>%.3f ? 0 : 1" % clipfrac,imbpm1,x=imsurf1) # Subtract 1.0 from flatfield imflat1=iraf.mktemp("iqwircf")+".fits" iraf.imarith(inflat,'-',1.0,imflat1,verbose=no,noact=no) # Surface fit to the flatfield imsurf2=iraf.mktemp("iqwircs")+".fits" iraf.imsurfit(imflat1,imsurf2,xorder=6,yorder=6,type_output="fit", function="chebyshev",cross_terms=yes, xmedian=21,ymedian=21,median_percent=50.0, lower=0.0,upper=0.0,ngrow=0,niter=0, regions="all",rows="*",columns="*",border=50, sections="",circle="",div_min="INDEF") # Corresponding bad pixel mask imbpm2=iraf.mktemp("iqwircb")+".pl" iraf.imexpr("abs(x)>%.3f ? 0 : 1" % clipfrac,imbpm2,x=imsurf2) # Combine bad pixel masks for median + flat imbpm3=iraf.mktemp("iqwircb")+".pl" iraf.imexpr("(x>0 || y>0) ? 1 : 0",imbpm3,x=imbpm1,y=imbpm2) # Calculate the ratio image imratio=iraf.mktemp("iqwircr")+".fits" iraf.imexpr("z>0 ? 0 : x/y",imratio,x=imsurf1,y=imsurf2,z=imbpm3) # Mimstat on the ratio image mimstat=iraf.mimstatistics(imratio,imasks=imbpm3,omasks="", fields='image,npix,mean,stddev,min,max,mode', lower='INDEF',upper='INDEF',nclip=4, lsigma=5.0,usigma=5.0,binwidth=0.1, format=no,Stdout=1,Stderr=1) mimels=mimstat[0].split() npix=float(mimels[1]) xmult=float(mimels[2]) # Check that a reasonable number of pixels have made the grade check_exist(outflat,'w',clobber=clobber) if npix<0.05*npixall: print "Less than 5% of pixels passed the cut... preserving flatfield" iraf.imcopy(inflat,outflat,verbose=no) xmult=1.0 else: # Create the final flatfield image iraf.imexpr("x*%.3f + 1" % xmult,outflat,x=imflat1) # Update header keywords update_head(outflat,'RESCALE',1,"Flatfield has been rescaled") update_head(outflat,'ORIGFLAT',inflat, "Input flatfield name (before rescaling)") update_head(outflat,'XMULT',xmult, "Multiplied ORIGFLAT by this factor to rescale") # Clean up iraf.imdel(imcmb1,verify=no,go_ahead=yes) iraf.imdel(imcmb2,verify=no,go_ahead=yes) iraf.imdel(imsurf1,verify=no,go_ahead=yes) iraf.imdel(imsurf2,verify=no,go_ahead=yes) iraf.imdel(imbpm1,verify=no,go_ahead=yes) iraf.imdel(imbpm2,verify=no,go_ahead=yes) iraf.imdel(imbpm3,verify=no,go_ahead=yes) iraf.imdel(imflat1,verify=no,go_ahead=yes) iraf.imdel(imratio,verify=no,go_ahead=yes)