def pass_two(self): ''' Second pass of ccdproc ''' extras.cl_bye(self.verb) print(" Making 2nd pass on images: %s " % len(self.scifiles), file=sys.stderr) print(" \t\t\tdome flats", file=sys.stderr) # Set more params mscred.ccdproc.ccdtype = 'object' mscred.ccdproc.noproc = 'no' mscred.ccdproc.xtalkcor = 'no' mscred.ccdproc.fixpix = 'no' mscred.ccdproc.overscan = 'yes' mscred.ccdproc.trim = 'yes' mscred.ccdproc.zerocor = 'yes' mscred.ccdproc.darkcor = 'no' mscred.ccdproc.flatcor = 'yes' mscred.ccdproc.sflatcor = 'no' mscred.ccdproc.split = 'no' mscred.ccdproc.merge = 'no' #mscred.ccdproc.xtalkfile = '!xtalkfil' #mscred.ccdproc.fixfile = 'BPM' mscred.ccdproc.saturation = '!saturate' mscred.ccdproc.sgrow = 1 mscred.ccdproc.bleed = 20000 mscred.ccdproc.btrail = 20 mscred.ccdproc.bgrow = 0 mscred.ccdproc.biassec = '!biassec' mscred.ccdproc.trimsec = '!trimsec' mscred.ccdproc.zero = self.Zero mscred.ccdproc.dark = 'Dark' mscred.ccdproc.flat = self.Dflat + "*" mscred.ccdproc.sflat = self.Sflat + "*" mscred.ccdproc.minreplace = 1.0 mscred.ccdproc.interactive = 'no' mscred.ccdproc.function = 'legendre' mscred.ccdproc.order = 1 mscred.ccdproc.sample = '*' mscred.ccdproc.naverage = 1 mscred.ccdproc.niterate = 1 mscred.ccdproc.low_reject = 3.0 mscred.ccdproc.high_reject = 3.0 mscred.ccdproc.grow = 0.0 mscred.ccdproc.fd = '' mscred.ccdproc.fd2 = '' mscred.ccdproc.mode = 'h' mscred.ccdproc.images = self.scilist mscred.ccdproc.output = '' #mscred.ccdproc.bpmasks = self.bplist # Run it mscred.ccdproc() extras.cl_bye(self.verb) return
def fixpix(self): N = self.Namps for filter in self.obsfilters: # Avoid if Sflat was not created if len(self.forsky[filter]) < 4: print("# Skipping %s filter, no sky images available" % filter, file=sys.stderr) continue flat = self.Sflat + filter print("Fixpix %s" % flat) for i in range(N): image = "%s[%s]" % (flat, i + 1) mask = os.path.join( self.BCSPIPE, "LIB/MosaicII/BPM/bpmSum%s_0511.pl" % str(i + 1)) proto.fixpix(image, mask, linterp="INDEF", cinterp="INDEF", verbose="yes", pixels="no") extras.cl_bye() return
def set_ccdproc(obs, verb=None): '''Initialize ccdproc''' print(" initializing mscred.ccdproc", file=sys.stderr) mscred.ccdproc.images = '' mscred.ccdproc.output = '' mscred.ccdproc.bpmasks = '' mscred.ccdproc.ccdtype = '' mscred.ccdproc.noproc = 'no' #mscred.ccdproc.xtalkcor = 'yes' #mscred.ccdproc.fixpix = 'no' mscred.ccdproc.xtalkcor = 'no' mscred.ccdproc.fixpix = 'no' mscred.ccdproc.overscan = 'yes' mscred.ccdproc.trim = 'yes' mscred.ccdproc.zerocor = 'no' mscred.ccdproc.darkcor = 'no' mscred.ccdproc.flatcor = 'no' mscred.ccdproc.sflatcor = 'no' mscred.ccdproc.split = 'no' mscred.ccdproc.merge = 'no' #mscred.ccdproc.merge = 'yes' #mscred.ccdproc.xtalkfile = '!xtalkfil' #mscred.ccdproc.xtalkfile = "bcspipe$LIB/MosaicII/xtalk/test2.dat" #mscred.ccdproc.xtalkfile = os.path.join(obs.BCSPIPE,"LIB/MosaicII/xtalk/test2.dat") #mscred.ccdproc.fixfile = 'BPM' mscred.ccdproc.saturation = 'INDEF' mscred.ccdproc.sgrow = 0 mscred.ccdproc.bleed = 'INDEF' mscred.ccdproc.btrail = 20 mscred.ccdproc.bgrow = 0 mscred.ccdproc.biassec = '!biassec' mscred.ccdproc.trimsec = '!trimsec' mscred.ccdproc.zero = obs.Zero mscred.ccdproc.dark = 'Dark' mscred.ccdproc.flat = obs.Dflat + "*" mscred.ccdproc.sflat = obs.Sflat + "*" mscred.ccdproc.minreplace = 1.0 mscred.ccdproc.interactive = 'no' mscred.ccdproc.function = 'legendre' mscred.ccdproc.order = 1 mscred.ccdproc.sample = '*' mscred.ccdproc.naverage = 1 mscred.ccdproc.niterate = 1 mscred.ccdproc.low_reject = 3.0 mscred.ccdproc.high_reject = 3.0 mscred.ccdproc.grow = 0.0 mscred.ccdproc.fd = '' mscred.ccdproc.fd2 = '' mscred.ccdproc.mode = 'h' extras.cl_bye(verb) return
def setIraf(obs, verb=None): # Set vars extras.cl_bye(verb) iraf.set(imclobber="yes") iraf.set(clobber="yes") iraf.set(Verbose='yes') # Initialize some tasks print(" setting up IRAF's initial params", file=sys.stderr) #set_instrument(verb) set_mscred(verb) set_ccdproc(obs, verb) return
def combine(self): extras.cl_bye(self.verb) print(" Making superbias image with %s files:" % len(self.flatfiles), file=sys.stderr) for i in self.flatfiles: print("\t%s" % i, file=sys.stderr) for filter in self.filters: print("\t\t\t--> %s_%s.fits" % (self.Dflat, filter), file=sys.stderr) # Modify the params in ccdproc that changed mscred.ccdproc.ccdtype = 'flat' mscred.ccdproc.noproc = 'no' mscred.ccdproc.zerocor = 'yes' # And the params for flatcombine mscred.flatcombine.combine = "average" mscred.flatcombine.reject = "avsigclip" mscred.flatcombine.ccdtype = "DFLAT" mscred.flatcombine.process = self.process mscred.flatcombine.subsets = 'yes' mscred.flatcombine.delete = 'no' mscred.flatcombine.scale = "mode" mscred.flatcombine.statsec = "" mscred.flatcombine.nlow = 1 mscred.flatcombine.nhigh = 1 mscred.flatcombine.nkeep = 1 mscred.flatcombine.mclip = 'yes' mscred.flatcombine.lsigma = 3.0 mscred.flatcombine.hsigma = 3.0 mscred.flatcombine.rdnoise = "0." mscred.flatcombine.gain = "1." mscred.flatcombine.snoise = "0." mscred.flatcombine.pclip = -0.5 mscred.flatcombine.blank = 1. mscred.flatcombine.mode = "hl" # Make the call print("# Will use flatlist %s" % self.flatlist) mscred.flatcombine(self.flatlist, output=self.Dflat) print("# flatcombine is ready") extras.cl_bye(self.verb) return
def badpix(self, fix=None): N = self.Namps express = "a > 1 ? 0 : 1" for filter in self.obsfilters: # Avoid if Sflat was not created if len(self.forsky[filter]) < 4: print("# Skipping %s filter, no sky images available" % filter, file=sys.stderr) continue flat = self.Sflat + filter bpmdir = "%s_BPM" % flat print("Making bpm for %s" % flat) # Check if the destination folder exists if os.path.exists(bpmdir): print("Will put mask files to: %s" % bpmdir, file=sys.stderr) else: print("Will create new folder: %s" % bpmdir, file=sys.stderr) os.mkdir(bpmdir) for i in range(N): image = "%s[%s]" % (flat, i + 1) mask = "%s/mask_%s.pl" % (bpmdir, i + 1) # make bpm images.imutil.imexpr(express, mask, image) extras.cl_bye() # Correct the Sky flat if fix: # Interpolate bad pixels proto.fixpix(image, mask, linterp="INDEF", cinterp="INDEF", verbose="yes", pixels="no") extras.cl_bye() return
def fixpix(self): N = self.Namps for file in self.scifiles: print("Fixpix %s" % file) for i in range(N): image = "%s[%s]" % (file, i + 1) mask = os.path.join( self.BCSPIPE, "LIB/MosaicII/BPM/bpmSum%s_0511.pl" % str(i + 1)) proto.fixpix(image, mask, linterp="INDEF", cinterp="INDEF", verbose="yes", pixels="no") extras.cl_bye() return
def make_fringe(self, ver=""): extras.cl_bye() #mscred.mscmedian.input = skyflat #mscred.mscmedian.output = tmpmedian mscred.mscmedian.xwindow = 129 mscred.mscmedian.ywindow = 129 mscred.mscmedian.outtype = "median" mscred.mscmedian.zloreject = -20000.0 mscred.mscmedian.zhireject = 30000.0 mscred.mscmedian.verbose = "yes" mscred.mscmedian.fmedian = "yes" mscred.mscmedian.hmin = -20000.0 mscred.mscmedian.hmax = 30000.0 mscred.mscmedian.zmin = -20000.0 mscred.mscmedian.zmax = 30000.0 mscred.mscmedian.fd = "" mscred.mscmedian.mode = "h" # Run it for each filter with fringe for filter in self.frgfilters: # Avoid if not observed if filter not in self.obsfilters: print(" No %s-band observations... skipping" % filter, file=sys.stderr) continue # Avoid if Sflat was not created if len(self.forsky[filter]) < 4: print("# Skipping %s filter, no sky images available" % filter, file=sys.stderr) continue print(" Making Fringe for filter %s " % filter, file=sys.stderr) skyflat = self.Sflat + ver + filter tmpmedian = "tmpMedian_" + filter print("\trunning mscmedian...\t %s --> %s " % (skyflat, tmpmedian), file=sys.stderr) if os.path.isfile(tmpmedian + ".fits"): os.remove(tmpmedian + ".fits") print(" removed file: %s" % (tmpmedian + ".fits"), file=sys.stderr) # 1 - Make the median mscred.mscmedian(skyflat, tmpmedian, 129, 129) extras.cl_bye() # 2 - run mscarith on the sky image Fringe = self.Fringe + filter print("\trunning mscarith...\t %s - %s = %s " % (skyflat, tmpmedian, Fringe), file=sys.stderr) mscred.mscarith(skyflat, "-", tmpmedian, Fringe) extras.cl_bye() print(" Fringe images ready", file=sys.stderr) return
def super_skyflat(self, ver=""): self.output = self.Sflat + ver print(" Creating super sky-flat with %s images" % len(self.scifiles), file=sys.stderr) extras.cl_bye() #mscred.sflatcombine.input = self.scilist #mscred.sflatcombine.output = self.output mscred.sflatcombine.combine = "average" #mscred.sflatcombine.combine = "median" mscred.sflatcombine.reject = "ccdclip" mscred.sflatcombine.ccdtype = "object" mscred.sflatcombine.subsets = "yes" mscred.sflatcombine.masktype = "!objmask" mscred.sflatcombine.maskvalue = "0.0" mscred.sflatcombine.scale = "mode" mscred.sflatcombine.statsec = "" mscred.sflatcombine.nkeep = "1" mscred.sflatcombine.nlow = "1" mscred.sflatcombine.nhigh = "1" mscred.sflatcombine.mclip = "yes" mscred.sflatcombine.lsigma = "6.0" mscred.sflatcombine.hsigma = "3.0" mscred.sflatcombine.rdnoise = "rdnoise" mscred.sflatcombine.gain = "gain" mscred.sflatcombine.snoise = "0." mscred.sflatcombine.pclip = "-0.5" mscred.sflatcombine.blank = "1.0" mscred.sflatcombine.grow = "3.0" mscred.sflatcombine.fd = "" mscred.sflatcombine.mode = "h" #mscred.sflatcombine() # Go filter by filter to avoid iraf's crash for filter in self.obsfilters: if filter not in self.skyfilters: print("# Skipping %s filter, no need for Sflat" % filter, file=sys.stderr) continue if len(self.forsky[filter]) < 4: print("# Skipping %s filter, no sky images available" % filter, file=sys.stderr) continue for l in self.forsky[filter]: print("\t%s" % l, file=sys.stderr) print("\t\t\t\t --> %s %s" % (self.output, filter), file=sys.stderr) #mscred.sflatcombine.input = self.objlist[filter] mscred.sflatcombine.input = extras.imfile(self.forsky[filter]) mscred.sflatcombine.output = self.output mscred.sflatcombine() extras.cl_bye(self.verb) extras.cl_bye(self.verb) return
def combine(self): print("\n Making superbias image with %s files:" % len(self.zerofiles), file=sys.stderr) if self.verb: for i in self.zerofiles: print("\t%s" % i, file=sys.stderr) print("\t\t\t--> %s" % self.Zero + ".fits", file=sys.stderr) # Avoid clobbering -- way around imclobber = yes not working if os.path.isfile(self.Zero + ".fits"): print(" Moving of %s.fits to %s.fits.old" % (self.Zero, self.Zero), file=sys.stderr) shutil.move(self.Zero + ".fits", self.Zero + ".fits.old") # And the params for zerocombine iraf.mscred.zerocombine.combine = 'average' iraf.mscred.zerocombine.reject = 'minmax' iraf.mscred.zerocombine.ccdtype = 'zero' iraf.mscred.zerocombine.process = self.process iraf.mscred.zerocombine.delete = 'no' iraf.mscred.zerocombine.scale = 'none' iraf.mscred.zerocombine.statsec = '' iraf.mscred.zerocombine.nlow = 0 iraf.mscred.zerocombine.nhigh = 1 iraf.mscred.zerocombine.nkeep = 1 iraf.mscred.zerocombine.mclip = 'yes' iraf.mscred.zerocombine.lsigma = 3.0 iraf.mscred.zerocombine.hsigma = 3.0 iraf.mscred.zerocombine.rdnoise = '0.' iraf.mscred.zerocombine.gain = '1.' iraf.mscred.zerocombine.snoise = '0.' iraf.mscred.zerocombine.pclip = -0.5 iraf.mscred.zerocombine.blank = 0.0 iraf.mscred.zerocombine.mode = 'h' # Make the call iraf.mscred.zerocombine(self.zerolist, output=self.Zero) extras.cl_bye(self.verb) return
def fixpix_sky(self): N = self.Namps for filter in self.obsfilters: flat = self.Sflat + filter bpmdir = "%s_BPM" % flat print("Correcting for bpm for %s" % flat) for file in self.forsky[filter]: for i in range(N): mask = "%s/mask_%s.pl" % (bpmdir, i + 1) scifile = "%s[%s]" % (file, i + 1) proto.fixpix(scifile, mask, linterp="INDEF", cinterp="INDEF", verbose="yes", pixels="no") extras.cl_bye() return
def correct_fringe(self): print(" Correcting images with fringe map", file=sys.stderr) # Run it for each filter with fringe for filter in self.frgfilters: print(" Correcting Fringe for filter %s " % filter, file=sys.stderr) # Set up names fringe = self.Fringe + filter # Avoid if not observed if filter not in self.obsfilters: print(" No %s-band observations... skipping" % filter, file=sys.stderr) continue for ima in self.forsky[filter]: print("\t%s" % ima, file=sys.stderr) print("\t\t\t\t with fringe: %s" % fringe, file=sys.stderr) #print images, fringe, extras.imlist_append(images,"_msk"), extras.imlist_append(images,"_sky") extras.cl_bye(self.verb) mscred.rmfringe.input = extras.imfile(self.forsky[filter]) mscred.rmfringe.output = '' mscred.rmfringe.fringe = fringe #mscred.rmfringe.masks = extras.imfile_append(self.forsky[filter],"_msk") #mscred.rmfringe.fringemasks = "" #mscred.rmfringe.background = extras.imfile_append(self.forsky[filter],"_sky") mscred.rmfringe.ncblk = "5" mscred.rmfringe.nlblk = "5" mscred.rmfringe.extfit = "" mscred.rmfringe.logfile = "" mscred.rmfringe.verbose = "yes" mscred.rmfringe.mode = "h" mscred.rmfringe() extras.cl_bye(self.verb) extras.cl_bye(self.verb) return
def craverage(self): ''' Run IRAF craverage ''' N = self.Namps craverage.input = "List" craverage.output = "" craverage.crmask = "" craverage.average = "" craverage.sigma = "" craverage.navg = "7" craverage.nrej = "3" craverage.nbkg = "5" craverage.nsig = "50" craverage.var0 = "0.0" craverage.var1 = "0.0" craverage.var2 = "0.0" craverage.crval = "1" craverage.lcrsig = "10.0" craverage.hcrsig = "3.75" craverage.crgrow = "0.0" craverage.objval = "0" craverage.lobjsig = "10.0" craverage.hobjsig = "5.5" craverage.objgrow = "0.0" craverage.mode = "al" filenames = [] for line in open(self.scilist[1:]).readlines( ): # Trick to avoid the '@' in filenames file = line.split()[0] filenames.append(file) print("Doing file: %s" % file, file=sys.stderr) for i in range(N): print("craverage %s[%s]" % (file, i + 1), file=sys.stderr) input = "%s[%s]" % (file, i + 1) crmask = "%s_crmask_%s" % (file, i + 1) craverage(input, output="", crmask=crmask) extras.cl_bye() # And now we do the mask combination and fixpix express = "max(a,b)" for ima in filenames: # Merging masks print(" Merging masks for %s" % ima, file=sys.stderr) for i in range(N): n = i + 1 hfile = "%s[%s]" % (ima, n) mask1 = "%s_crmask_%s.fits[1]" % (ima, n) mask2 = "%s_BPM/bpm_im%s.pl" % (ima, n) maskout = "%s_BPM/bpmcr_im%s.fits" % (ima, n) images.imutil.imexpr(express, maskout, mask1, mask2) print("\t\tUpdating header information for %s" % hfile, file=sys.stderr) images.imutil.hedit(hfile, "BPM", maskout, add='no', delete='no', ver='no', show='yes', update='yes') images.imutil.hedit(maskout, "BPM", maskout, add='no', delete='no', ver='no', show='yes', update='yes') extras.cl_bye() # Fixing bad pixels print(" Fixpix Interpolating bad pixels %s" % ima, file=sys.stderr) for i in range(N): n = i + 1 image = "%s[%s]" % (ima, n) mask = "%s_BPM/bpmcr_im%s.fits" % (ima, n) proto.fixpix(image, mask, linterp="INDEF", cinterp="INDEF", verbose="yes", pixels="no") extras.cl_bye()
def objmasks(self): extras.cl_bye(self.verb) # Fix objmasks1 nproto.objmasks1.exps = "" nproto.objmasks1.gains = "" nproto.objmasks1.catalogs = "" nproto.objmasks1.catdefs = "" nproto.objmasks1.dodetect = "yes" nproto.objmasks1.dosplit = "no" nproto.objmasks1.dogrow = "yes" nproto.objmasks1.doevaluate = "no" nproto.objmasks1.skytype = "block" nproto.objmasks1.fitstep = "10" nproto.objmasks1.fitblk1d = "10" nproto.objmasks1.fithclip = "2.0" nproto.objmasks1.fitlclip = "3.0" nproto.objmasks1.fitxorder = "1" nproto.objmasks1.fityorder = "1" nproto.objmasks1.fitxterms = "half" nproto.objmasks1.blknsubblks = "2" nproto.objmasks1.updatesky = "yes" nproto.objmasks1.sigavg = "4.0" nproto.objmasks1.sigmax = "4.0" nproto.objmasks1.bpval = "INDEF" nproto.objmasks1.splitmax = "INDEF" nproto.objmasks1.splitstep = "0.4" nproto.objmasks1.splitthresh = "5.0" nproto.objmasks1.sminpix = "8" nproto.objmasks1.ssigavg = "10.0" nproto.objmasks1.ssigmax = "5.0" nproto.objmasks1.magzero = "INDEF" nproto.objmasks1.mode = "ql" # One filter at a time for filter in self.filters: print(" running object masks for filter %s on images" % filter, file=sys.stderr) for i in self.forsky[filter]: print("\t%s" % i, file=sys.stderr) # The old way -- all at one #nproto.objmasks.images = self.scilist #nproto.objmasks.objmasks = self.msklist #nproto.objmasks.skys = self.skylist nproto.objmasks.images = extras.imfile(self.forsky[filter]) nproto.objmasks.objmasks = extras.imfile_append( self.forsky[filter], "_msk") nproto.objmasks.omtype = "numbers" nproto.objmasks.skys = extras.imfile_append( self.forsky[filter], "_sky") nproto.objmasks.sigmas = "" nproto.objmasks.masks = "!BPM" nproto.objmasks.extnames = "" nproto.objmasks.logfiles = "STDOUT" nproto.objmasks.blkstep = "1" nproto.objmasks.blksize = "-10" nproto.objmasks.convolve = "block 3 3" nproto.objmasks.hsigma = "3.0" nproto.objmasks.lsigma = "10.0" nproto.objmasks.hdetect = "yes" nproto.objmasks.ldetect = "no" nproto.objmasks.neighbors = "8" nproto.objmasks.minpix = "6" nproto.objmasks.ngrow = "2" nproto.objmasks.agrow = "2.0" nproto.objmasks.mode = "h" # to avoid prompt # Run nproto.objmasks() extras.cl_bye(self.verb) return
def pass_three(self, skyfilters=('i', 'z')): self.skyfilters = skyfilters ''' Thrid pass of ccdproc ''' extras.cl_bye(self.verb) print(" Making 3rd pass on images: %s " % len(self.scifiles), file=sys.stderr) print(" \t\t\tsky flats", file=sys.stderr) # Set more params mscred.ccdproc.ccdtype = 'object' mscred.ccdproc.noproc = 'no' mscred.ccdproc.xtalkcor = 'no' mscred.ccdproc.fixpix = 'no' mscred.ccdproc.overscan = 'no' mscred.ccdproc.trim = 'no' mscred.ccdproc.zerocor = 'no' mscred.ccdproc.darkcor = 'no' mscred.ccdproc.flatcor = 'no' mscred.ccdproc.sflatcor = 'yes' mscred.ccdproc.split = 'no' mscred.ccdproc.merge = 'no' #mscred.ccdproc.xtalkfile = '!xtalkfil' #mscred.ccdproc.fixfile = 'BPM' mscred.ccdproc.saturation = '!saturate' mscred.ccdproc.sgrow = 1 mscred.ccdproc.bleed = 20000 mscred.ccdproc.btrail = 20 mscred.ccdproc.bgrow = 0 mscred.ccdproc.biassec = '!biassec' mscred.ccdproc.trimsec = '!trimsec' mscred.ccdproc.zero = self.Zero mscred.ccdproc.dark = 'Dark' mscred.ccdproc.flat = self.Dflat + "*" mscred.ccdproc.sflat = self.Sflat + "*" mscred.ccdproc.minreplace = 1.0 mscred.ccdproc.interactive = 'no' mscred.ccdproc.function = 'legendre' mscred.ccdproc.order = 1 mscred.ccdproc.sample = '*' mscred.ccdproc.naverage = 1 mscred.ccdproc.niterate = 1 mscred.ccdproc.low_reject = 3.0 mscred.ccdproc.high_reject = 3.0 mscred.ccdproc.grow = 0.0 mscred.ccdproc.fd = '' mscred.ccdproc.fd2 = '' mscred.ccdproc.mode = 'h' #mscred.ccdproc.images = self.scilist #mscred.ccdproc.output = '' #mscred.ccdproc.bpmasks = self.bplist # Do it filter by filter to avoid non Sflat images for filter in self.obsfilters: if len(self.forsky[filter]) < 1: print("# Skipping %s filter, no sky images available" % filter, file=sys.stderr) continue if filter not in self.skyfilters: print("# Skipping %s filter, no need sky image for " % filter, file=sys.stderr) continue mscred.ccdproc.images = extras.imfile(self.object[filter]) mscred.ccdproc.output = '' mscred.ccdproc.bpmasks = extras.imfile_append( self.object[filter], "_BPM") # Run it mscred.ccdproc() extras.cl_bye(self.verb) return