Пример #1
0
def zeroCorrection():
	print "ZeroCorrection start"
	#put all others params to no , they may be set by previous actions
	zerofilename = os.path.join(OUTPUTDIR, "bias",  "Zero.fits")
	if os.path.isfile(zerofilename):
		iraf.ccdproc.setParam('flatcor', 'no')
		iraf.ccdproc.setParam('fixpix', 'no')
		iraf.ccdproc.setParam('darkcor', 'no')
		iraf.ccdproc.setParam('illumcor', 'no')
		iraf.ccdproc.setParam('trim', 'no')
		iraf.ccdproc.setParam('overscan', 'no')
		#trim and overscan flat and object files
		iraf.ccdproc.setParam('zerocor', 'yes')
		iraf.ccdproc.setParam('zero', zerofilename)
		iraf.ccdproc.setParam('trimsec', '')
		iraf.ccdproc.setParam('biassec', '')
		#online
		iraf.ccdproc.setParam('output', '')
		for imgtype in ["flat", "object"]:
			for f in FILTERS:
				iraf.ccdproc.setParam("images", os.path.join(OUTPUTDIR, imgtype, f) + "/*.fits")
				iraf.ccdproc()
	else:	
		print "Zero file %s not present" % zerofilename
	print "ZeroCorrection end"
Пример #2
0
 def subtract_bias(self):
     """Subtracting Bias Frame"""
     iraf.unlearn(iraf.ccdproc)
     iraf.ccdproc(self.data.iraf.modatfile(), 
         ccdtype="", fixpix="no", overscan="no", trim ="no", zerocor="yes", darkcor="no", flatcor ="no", 
         zero=self.bias.iin("Bias"))
     self.data.idone()
Пример #3
0
def processImages(fileList,
                  inputType=INPUT_SINGLEFRAME,
                  output="",
                  outputType=INPUT_SINGLEFRAME,
                  ccdtype="object",
                  zerocor=iraf.yes,
                  darkcor=iraf.yes,
                  flatcor=iraf.yes,
                  zero="Zero.fits",
                  dark="Dark.fits",
                  flat="Flat*.fits"):
    '''wrapper for IRAF's ccdproc command'''
    iraf.ccdproc(_genIRAFString(fileList, inputType),
                 output=_genIRAFString(output, outputType),
                 ccdtype=ccdtype,
                 zerocor=zerocor,
                 darkcor=darkcor,
                 flatcor=flatcor,
                 zero=zero,
                 dark=dark,
                 flat=flat,
                 fixpix=iraf.no,
                 overscan=iraf.no,
                 trim=iraf.no)
    return
Пример #4
0
def zeroCorrection():
    print "ZeroCorrection start"
    #put all others params to no , they may be set by previous actions
    zerofilename = os.path.join(OUTPUTDIR, "bias", "Zero.fits")
    if os.path.isfile(zerofilename):
        iraf.ccdproc.setParam('flatcor', 'no')
        iraf.ccdproc.setParam('fixpix', 'no')
        iraf.ccdproc.setParam('darkcor', 'no')
        iraf.ccdproc.setParam('illumcor', 'no')
        iraf.ccdproc.setParam('trim', 'no')
        iraf.ccdproc.setParam('overscan', 'no')
        #trim and overscan flat and object files
        iraf.ccdproc.setParam('zerocor', 'yes')
        iraf.ccdproc.setParam('zero', zerofilename)
        iraf.ccdproc.setParam('trimsec', '')
        iraf.ccdproc.setParam('biassec', '')
        #online
        iraf.ccdproc.setParam('output', '')
        for imgtype in ["flat", "object"]:
            for f in FILTERS:
                iraf.ccdproc.setParam(
                    "images",
                    os.path.join(OUTPUTDIR, imgtype, f) + "/*.fits")
                iraf.ccdproc()
    else:
        print "Zero file %s not present" % zerofilename
    print "ZeroCorrection end"
Пример #5
0
def trimAndOverscan():
    print "TrimAndOverscan start"
    #put all others params to no , they may be set by previous actions
    iraf.ccdproc.setParam('zerocor', 'no')
    iraf.ccdproc.setParam('flatcor', 'no')
    iraf.ccdproc.setParam('fixpix', 'no')
    iraf.ccdproc.setParam('darkcor', 'no')
    iraf.ccdproc.setParam('illumcor', 'no')
    #trim and overscan flat and object files
    iraf.ccdproc.setParam('trim', 'yes')
    iraf.ccdproc.setParam('trimsec', DATA_SEC)
    iraf.ccdproc.setParam('overscan', 'yes')
    iraf.ccdproc.setParam('biassec', BIAS_SEC)
    #online
    iraf.ccdproc.setParam('output', '')
    for imgtype in ["flat", "object"]:
        for f in FILTERS:
            iraf.ccdproc.setParam(
                "images",
                os.path.join(OUTPUTDIR, imgtype, f) + "/*.fits")
            iraf.ccdproc()
    #only trim for bias files
    if (os.listdir(os.path.join(OUTPUTDIR, "bias"))):
        iraf.ccdproc.setParam('overscan', 'no')
        iraf.ccdproc.setParam('biassec', '')
        iraf.hselect.setParam("images",
                              os.path.join(OUTPUTDIR, "bias") + "/*.fits")
        iraf.ccdproc()
    else:
        print "No Bias Files present"
    print "TrimAndOverscan end"
Пример #6
0
def trimAndOverscan():
	print "TrimAndOverscan start"
	#put all others params to no , they may be set by previous actions
	iraf.ccdproc.setParam('zerocor', 'no')
	iraf.ccdproc.setParam('flatcor', 'no')
	iraf.ccdproc.setParam('fixpix', 'no')
	iraf.ccdproc.setParam('darkcor', 'no')
	iraf.ccdproc.setParam('illumcor', 'no')
	#trim and overscan flat and object files
	iraf.ccdproc.setParam('trim', 'yes')
	iraf.ccdproc.setParam('trimsec', DATA_SEC)
	iraf.ccdproc.setParam('overscan', 'yes')
	iraf.ccdproc.setParam('biassec', BIAS_SEC)
	#online
	iraf.ccdproc.setParam('output', '')
	for imgtype in ["flat", "object"]:
		for f in FILTERS:
			iraf.ccdproc.setParam("images", os.path.join(OUTPUTDIR, imgtype, f) + "/*.fits")
			iraf.ccdproc()
	#only trim for bias files	
	if(os.listdir(os.path.join(OUTPUTDIR, "bias"))):
		iraf.ccdproc.setParam('overscan', 'no')
		iraf.ccdproc.setParam('biassec', '')
		iraf.hselect.setParam("images",   os.path.join(OUTPUTDIR, "bias") + "/*.fits")
		iraf.ccdproc()
	else:
		print "No Bias Files present"	
	print "TrimAndOverscan end"
Пример #7
0
def flatCorrection():
    print "FlatCorrection start"
    #put all others params to no , they may be set by previous actions
    iraf.ccdproc.setParam('flatcor', 'yes')
    iraf.ccdproc.setParam('fixpix', 'no')
    iraf.ccdproc.setParam('darkcor', 'no')
    iraf.ccdproc.setParam('illumcor', 'no')
    iraf.ccdproc.setParam('trim', 'no')
    iraf.ccdproc.setParam('overscan', 'no')
    iraf.ccdproc.setParam('zerocor', 'no')
    iraf.ccdproc.setParam('trimsec', '')
    iraf.ccdproc.setParam('biassec', '')
    #online
    iraf.ccdproc.setParam('output', '')
    for f in FILTERS:
        flatfilename = os.path.join(OUTPUTDIR, "flat", f, "Flat.fits")
        if os.path.isfile(flatfilename):
            iraf.ccdproc.setParam('flat', flatfilename)
            iraf.ccdproc.setParam(
                "images",
                os.path.join(OUTPUTDIR, "object", f) + "/*.fits")
            iraf.ccdproc()
        else:
            print "Flat file %s not present" % flatfilename
    print "FlatCorrection end"
Пример #8
0
def coroverbiastrim(lstfile):
    iraf.noao()
    iraf.imred()
    iraf.ccdred()
    x1,x2,y1,y2 = get_trim_sec()
    iraf.ccdproc(images = '@' + lstfile + '//[1]'
        , output = '%bo%bo%@' + lstfile
        , ccdtype = '', max_cache = 0, noproc = False
        , fixpix = False, overscan = True, trim = False
        , zerocor = True, darkcor = False, flatcor = False
        , illumcor = False, fringecor = False, readcor = False
        , scancor = False, readaxis = 'line', fixfile = ''
        , biassec = '[5:45,%s:%s]'%(y1,y2), trimsec = '[%s:%s,%s:%s]'%(x1,x2,y1,y2)
        , zero = 'Zero', dark = '', flat = '', illum = '', fringe = ''
        , minreplace = 1.0, scantype = 'shortscan', nscan = 1
        , interactive = False, function = 'chebyshev', order = 1
        , sample = '*', naverage = 1, niterate = 1
        , low_reject = 3.0, high_reject = 3.0, grow = 1.0)
    iraf.ccdproc(images = '%bo%bo%@' + lstfile
        , output = '%tbo%tbo%@' + lstfile
        , ccdtype = '', max_cache = 0, noproc = False
        , fixpix = False, overscan = False, trim = True
        , zerocor = False, darkcor = False, flatcor = False
        , illumcor = False, fringecor = False, readcor = False
        , scancor = False, readaxis = 'line', fixfile = ''
        , biassec = '[5:45,%s:%s]'%(y1,y2), trimsec = '[%s:%s,%s:%s]'%(x1,x2,y1,y2)
        , zero = 'Zero', dark = '', flat = '', illum = '', fringe = ''
        , minreplace = 1.0, scantype = 'shortscan', nscan = 1
        , interactive = False, function = 'chebyshev', order = 1
        , sample = '*', naverage = 1, niterate = 1
        , low_reject = 3.0, high_reject = 3.0, grow = 1.0)
    iraf.flpr()
Пример #9
0
def deimos_preproc(image):

    '''Take a MEF DEIMOS image, extract the relevant extensions, trim the
    LVM slit masks appropriately, and rename.'''

    # Needing grating
    graname = get_head(image, "GRATENAM", extn=0)
    
    # "Blue" chip
    iraf.imcopy("%s[%i]" % (image, BEXT), "d%s_B.fits" % image[6:10])
    iraf.ccdproc("d%s_B.fits" % image[6:10], overscan=yes, trim=yes,
                 fixpix=yes, biassec=BBIASSEC, trimsec=BTRIMSEC,
                 fixfile="%s_%i.fits" % (MASK, BEXT))
    iraf.imcopy("d%s_B.fits%s" % (image[6:10], DGRATINGS[graname]["blvmreg"]),
                "td%s_B.fits" % image[6:10])
    iraf.imtranspose("td%s_B.fits" % image[6:10], "rtd%s_B.fits" % image[6:10])

    # "Red" chip
    iraf.imcopy("%s[%i]" % (image, REXT), "d%s_R.fits" % image[6:10])
    iraf.ccdproc("d%s_R.fits" % image[6:10], overscan=yes, trim=yes,
                 fixpix=yes, biassec=RBIASSEC, trimsec=RTRIMSEC,
                 fixfile="%s_%i.fits" % (MASK, BEXT))
    iraf.imcopy("d%s_R.fits%s" % (image[6:10], DGRATINGS[graname]["rlvmreg"]),
                "td%s_R.fits" % image[6:10])
    iraf.imtranspose("td%s_R.fits" % image[6:10], "rtd%s_R.fits" % image[6:10])
    iraf.rotate("rtd%s_R.fits" % image[6:10], "rtd%s_R.fits" % image[6:10], 180.0)

    return
Пример #10
0
 def subtract_dark(self):
     """Subtracting Dark Frame"""
     iraf.unlearn(iraf.ccdproc)
     iraf.ccdproc(self.data.iraf.modatfile(), 
         ccdtype="", fixpix="no", overscan="no", trim ="no", zerocor="no", darkcor="yes", flatcor ="no", 
         dark=self.dark.iin("Dark"))
     self.data.idone()
Пример #11
0
 def divide_flat(self):
     """Dividing by Flat Frame"""
     iraf.unlearn(iraf.ccdproc)
     iraf.ccdproc(self.data.iraf.inatfile(), 
         output=self.data.iraf.outatfile(append="-Flat"),
         flat=self.flat.iin("Flat"),
         ccdtype="", fixpix="no", overscan="no", trim ="no", zerocor="no", flatcor="yes", darkcor ="no")
     self.data.iraf.done()
Пример #12
0
        def darkcombine(self,
                        files,
                        output,
                        zero=None,
                        method="median",
                        rejection="minmax",
                        ccdtype="",
                        scale="exposure",
                        overwrite=True):
            """IRAF darkcombine"""
            self.logger.info("Darkcombine Started")
            try:
                iraf.ccdred.unlearn()
                iraf.ccdred.ccdproc.unlearn()
                iraf.ccdred.combine.unlearn()
                iraf.ccdred.darkcombine.unlearn()
                iraf.imred.unlearn()

                ccdred.instrument = self.instrument_path

                darks = ",".join(files)

                out_file = "{}/myraf_darks.flist".format(self.fop.tmp_dir)
                with open(out_file, "w") as f2w:
                    for i in files:
                        f2w.write("{}\n".format(i))

                darks = "@{}".format(out_file)

                if zero is not None:
                    iraf.ccdproc(images=darks,
                                 ccdtype='',
                                 fixpix='no',
                                 oversca="no",
                                 trim="no",
                                 zerocor='yes',
                                 darkcor='no',
                                 flatcor='no',
                                 zero=zero,
                                 Stdout="/dev/null")

                if self.fop.is_file(output) and overwrite:
                    self.logger.warning("Over Writing file({})".format(output))
                    self.fop.rm(output)

                iraf.darkcombine(input=darks,
                                 output=output,
                                 combine=method,
                                 reject=rejection,
                                 ccdtype=ccdtype,
                                 scale=scale,
                                 process="no",
                                 Stdout="/dev/null")

                return True
            except Exception as e:
                self.logger.error(e)
                return False
Пример #13
0
def red_preproc(image):

    '''Remove overscan and trim image from blue detector.'''

    gratname = get_head(image, "GRATING_N", extn=0)    
    iraf.ccdproc(image, overscan=yes, trim=yes, biassec=BBIASSEC,
                 trimsec=KGRATINGS[gratname]["sreg"])
    
    return
Пример #14
0
def red_science(image, flats, spath, object=None, arc='Arc-Red.fits', 
                smooth='BD284211.smooth.fits', telluric='telluric.fits',
                sens='BD284211.sens', biassec=REDBIAS, trimsec=REDTRIM, 
                outflat='Flat-Red.fits', gain=REDGAIN, rdnoise=REDRDNOISE):

    '''Full reduction of KAST science spectra on red CCD'''

    # Bias subtract everything first
    redbias(image, biassec=biassec, trimsec=trimsec)
    redbias(flats, biassec=biassec, trimsec=trimsec)

    # Create and apply flat-field
    make_flat(flats, outflat, gain=gain, rdnoise=rdnoise)
    iraf.ccdproc(image[0], ccdtype='', noproc=no, fixpix=no, overscan=no, 
                 trim=no, zerocor=no, darkcor=no, flatcor=yes, illumcor=no,
                 fringecor=no, readcor=no, scancor=no, flat=outflat)

    # Cosmic ray rejection
    #iraf.lacos_spec(image[0], 'c%s' % image[0], 'cm%s' % image[0],
    #                gain=gain, readn=rdnoise, xorder=9, yorder=3,
    #                sigclip=4.5, sigfrac=0.5, objlim=1.0, niter=3)

    # Extract spectrum
    if object==None:
        object=get_head(image, 'OBJECT')
    iraf.apall('%s' % image[0], output=object, references='', interactive=yes, 
               find=yes, recenter=yes, resize=yes, edit=yes, trace=yes, 
               fittrace=yes, extract=yes, extras=yes, review=no, 
               background='fit', weights='variance', pfit='fit1d', 
               readnoise=rdnoise, gain=gain)

    # Apply wavelength solution to standard
    shutil.copy('%s/%s' % (spath, arc), '.')
    shutil.copy('%s/database/id%s' % (spath, arc.rstrip('.fits')), 'database')
    iraf.refspec(object, references=arc, sort="", group="", override=yes,
                 confirm=no, assign=yes)
    iraf.dispcor(object, '%s.w' % object, confirm=no, listonly=no)

    # Smooth
    shutil.copy('%s/%s' % (spath, smooth), '.')
    iraf.sarith('%s.w' % object, '/', smooth, '%s.s' % object)

    # Create and apply telluric correction
    shutil.copy('%s/%s' % (spath, telluric), '.')
    iraf.telluric('%s.s' % object, '%s.t' % object, telluric, xcorr=yes,
                  tweakrms=yes, interactive=yes, sample='6850:6950,7575:7700')

    # Flux calibration
    shutil.copy('%s/%s.0001.fits' % (spath, sens), '.')
    iraf.calibrate('%s.t' % object, '%s.f' % object, extinct=yes, flux=yes,
                   extinction='onedstds$kpnoextinct.dat', 
                   observatory='Lick', sensitivity=sens, airmass='',
                   exptime='')

    return
Пример #15
0
        def ccdproc(self,
                    file,
                    output=None,
                    zero=None,
                    dark=None,
                    flat=None,
                    subset="no"):
            """
            Does IRAF calibration
            IRAF ccdproc
            """
            self.logger.info("Ccdproc Started")
            try:
                iraf.imred.unlearn()
                iraf.ccdred.unlearn()
                iraf.ccdred.ccdproc.unlearn()

                ccdred.instrument = self.instrument_path

                yes_no = {True: "no", False: "yes"}

                if output is None:
                    output = ""

                zeroCor = yes_no[zero is None]
                darkCor = yes_no[dark is None]
                flatCor = yes_no[flat is None]

                if flat is not None:
                    if subset == "no":
                        self.fts.update_header(flat, "subset", "")

                iraf.ccdred.flatcombine.subset = subset

                if subset == "no":
                    self.fts.update_header(file, "subset", "")

                iraf.ccdproc(images=file,
                             output=output,
                             ccdtype='',
                             fixpix='no',
                             oversca="no",
                             trim="no",
                             zerocor=zeroCor,
                             darkcor=darkCor,
                             flatcor=flatCor,
                             zero=zero,
                             dark=dark,
                             flat=flat,
                             Stdout="/dev/null")
                return True
            except Exception as e:
                self.logger.error(e)
                return False
Пример #16
0
def reduceLight(inFn, outFn, mBiasFn, mDarkFn, mFlatFn):
    logger = logging.getLogger(__name__)
    if os.path.isfile(outFn + ".fits"):
        return
    logger.debug(inFn + " -> " + outFn)
    flatcor = "no"
    zerocor = "no"
    darkcor = "no"
    if os.path.isfile(mFlatFn + ".fits"):
        flatcor = "yes"
    if os.path.isfile(mBiasFn + ".fits"):
        zerocor = "yes"
    if os.path.isfile(mDarkFn + ".fits"):
        darkcor = "yes"

    iraf.ccdproc(
        inFn,
        output=outFn,
        ccdtype=" ",
        max_cache=0,
        noproc="no",
        fixpix="no",
        overscan="no",
        trim="no",
        zerocor=zerocor,
        darkcor=darkcor,
        flatcor=flatcor,
        illumcor="no",
        fringecor="no",
        readcor="no",
        scancor="no",
        readaxis="line",
        fixfile="",
        biassec="",
        trimsec="",
        zero=mBiasFn,
        dark=mDarkFn,
        flat=mFlatFn,
        illum="",
        fringe="",
        minreplace=1.0,
        scantype="shortscan",
        nscan=1,
        interactive="no",
        function="legendre",
        order=1,
        sample="*",
        naverage=1,
        niterate=1,
        low_reject=3.0,
        high_reject=3.0,
        grow=0.0,
    )
Пример #17
0
def redbias(images, biassec=REDBIAS, trimsec=REDTRIM):

    '''Subtract overscan and trim red frames'''

    for image in images:
        iraf.ccdproc(image, ccdtype='', noproc=no, fixpix=no, overscan=yes, 
                     trim=yes, zerocor=no, darkcor=no, flatcor=no, illumcor=no,
                     fringecor=no, readcor=no, scancor=no, biassec=biassec, 
                     trimsec=trimsec)
        update_head(image, 'DISPAXIS', 1)

    return
Пример #18
0
def blue_science(image, spath, object=None, flat='Flat-Blue.fits', 
                 arc='Arc-Blue.fits', smooth='BD284211.smooth.fits',
                 sens='BD284211.sens', biassec1=BLUEBIAS1, trimsec1=BLUETRIM1,
                 biassec2=BLUEBIAS2, trimsec2=BLUETRIM2, gain=BLUEGAIN, 
                 rdnoise=BLUERDNOISE):

    '''Full reduction of KAST science spectra on blue CCD'''

    # Bias subtract everything first
    bluebias(image, biassec1=biassec1, trimsec1=trimsec1, biassec2=biassec2,
             trimsec2=trimsec2)

    # Apply flat-field
    shutil.copy('%s/%s' % (spath, flat), '.')
    iraf.ccdproc('j%s' % image[0], ccdtype='', noproc=no, fixpix=no, 
                 overscan=no, trim=no, zerocor=no, darkcor=no, flatcor=yes, 
                 illumcor=no, fringecor=no, readcor=no, scancor=no, 
                 flat=flat)

    # Cosmic ray rejection
   #iraf.lacos_spec('j%s' % image[0], 'cj%s' % image[0], 'cmj%s' % image[0],
   #                gain=gain, readn=rdnoise, xorder=9, yorder=3,
   #                sigclip=4.5, sigfrac=0.5, objlim=1.0, niter=3)

    # Extract spectrum
    if object==None:
        object=get_head(image, 'OBJECT')
    iraf.apall('j%s' % image[0], output=object, references='', 
               interactive=yes, find=yes, recenter=yes, resize=yes, edit=yes, 
               trace=yes, fittrace=yes, extract=yes, extras=yes, review=no, 
               background='fit', weights='variance', pfit='fit1d', 
               readnoise=rdnoise, gain=gain)

    # Apply wavelength solution to standard
    shutil.copy('%s/%s' % (spath, arc), '.')
    shutil.copy('%s/database/id%s' % (spath, arc.rstrip('.fits')), 'database')
    iraf.refspec(object, references=arc, sort="", group="", override=yes,
                 confirm=no, assign=yes)
    iraf.dispcor(object, '%s.w' % object, confirm=no, listonly=no)

    # Smooth
    shutil.copy('%s/%s' % (spath, smooth), '.')
    iraf.sarith('%s.w' % object, '/', smooth, '%s.s' % object)

    # Flux calibration
    shutil.copy('%s/%s.0001.fits' % (spath, sens), '.')
    iraf.calibrate('%s.s' % object, '%s.f' % object, extinct=yes, flux=yes,
                   extinction='onedstds$kpnoextinct.dat', 
                   observatory='Lick', sensitivity=sens, airmass='',
                   exptime='')

    return
Пример #19
0
def calibrateImages(imageList, masterBias, masterDark, masterFlat, outputFile):
    calibrateString = getIrafString(imageList)
    iraf.ccdproc(images=calibrateString,
                 zerocor="yes",
                 darkcor="yes",
                 flatcor="yes",
                 zero=masterBias,
                 dark=masterDark,
                 flat=masterFlat,
                 output=outputFile,
                 fixpix="No",
                 ccdtype="none",
                 overscan="no")
Пример #20
0
def flatten(flatFile):
    """grab any sky-subtracted images, and flatten them using flatFile"""
    # first we have to clean up the flat, and get rid of any negative numbers or zeros
    # just set them equal to 1 (??? why do we do this ???)
    iraf.imreplace(flatFile, 1.0, imaginary=0.0, lower="INDEF", upper=1.0, radius=0.0)
    # get a list of the sky subtracted images
    skyims = glob.glob("scratch/s-binir*fits")
    flatIms = ["s-f-" + i[10:] for i in skyims]
    # organize input and output in iraf-friendly ways
    inputFiles = joinStrList(skyims)
    outputFiles = joinStrList(flatIms, scratch=True)
    # now flatfield the sky subtracted images
    iraf.ccdproc(
        images=inputFiles,
        output=outputFiles,
        ccdtype="",
        max_cache=0,
        noproc="no",
        fixpix="no",
        overscan="no",
        trim="no",
        zerocor="no",
        darkcor="no",
        flatcor="yes",
        illumcor="no",
        fringecor="no",
        readcor="no",
        scancor="no",
        readaxis="line",
        fixfile="",
        biassec="",
        trimsec="",
        zero="",
        dark="",
        flat=flatFile,
        illum="",
        fringe="",
        minreplace=1.0,
        scantype="shortscan",
        nscan=1,
        interactive="no",
        function="legendre",
        order=1,
        sample="*",
        naverage=1,
        niterate=1,
        low_reject=3.0,
        high_reject=3.0,
        grow=0.0,
    )
    return
Пример #21
0
def main(raw_dir):

    if not os.path.exists("{}/step1.tmp".format(os.getcwd())):
        print "Setting up directory"
        list_dict = setup_dir(raw_dir)

        print "OT'ing"
        iraf.ccdproc(
            "@all_raw.lst",
            output="@all_ot.lst",
            overscan=True,
            trim=True,
            zerocor=False,
            darkcor=False,
            flatcor=False,
            illumco=False,
            biassec="image",
            trimsec="image",
            zero="",
            interact=True,
            order=100,
        )

        cull_bias(list_dict["zeros"], "zeros.lst")
        os.system("touch {}/step1.tmp".format(os.getcwd()))
        return

    print "Making master bias"
    iraf.zerocombine("@zeros.lst", output="Zero.fits", combine="average", reject="crreject")
    print "Subtracting bias"
    iraf.ccdproc("@all_otz.lst", overscan=False, trim=False, zerocor=True, zero="Zero.fits")

    detect_flats(os.getcwd())
    flats_to_make = glob("dflat*.lst")
    for flat in flats_to_make:
        name = "dFlat_{}.fits".format(flat.split(".lst")[0].split("_")[1])
        print "Making flat {}".format(name)
        iraf.flatcombine("@{}".format(flat), output=name, combine="average", reject="crreject")

    try:
        print "Making master dark"
        iraf.darkcombine("@darks.lst", output="Dark.fits", combine="average", reject="crreject")
    except Exception as e:
        print "\t{}".format(e)
        print "\tNO DARK FOUND"

    print "Making master comp"
    iraf.imcombine("@comps.lst", "Comp.fits", combine="average", reject="crreject")

    return
Пример #22
0
def trimPicture(image, output, trimsec):
  iraf.ccdproc.setParam('images', image)
  iraf.ccdproc.setParam('output', output)
  iraf.ccdproc.setParam('ccdtype', '')
  iraf.ccdproc.setParam('fixpix', 'no')
  iraf.ccdproc.setParam('overscan', 'no')
  iraf.ccdproc.setParam('trim', 'yes')
  iraf.ccdproc.setParam('zerocor', 'no')
  iraf.ccdproc.setParam('darkcor', 'no')
  iraf.ccdproc.setParam('flatcor', 'no')
  iraf.ccdproc.setParam('illumco', 'no')
  iraf.ccdproc.setParam('readcor', 'no')
  iraf.ccdproc.setParam('scancor', 'no')
  iraf.ccdproc.setParam('trimsec', trimsec)
  iraf.ccdproc()
Пример #23
0
def darkCorrect(image, output, dark):
  iraf.ccdproc.setParam('images', image)
  iraf.ccdproc.setParam('output', output)
  iraf.ccdproc.setParam('ccdtype', '')
  iraf.ccdproc.setParam('fixpix', 'no')
  iraf.ccdproc.setParam('overscan', 'no')
  iraf.ccdproc.setParam('trim', 'no')
  iraf.ccdproc.setParam('zerocor', 'no')
  iraf.ccdproc.setParam('darkcor', 'yes')
  iraf.ccdproc.setParam('flatcor', 'no')
  iraf.ccdproc.setParam('illumco', 'no')
  iraf.ccdproc.setParam('readcor', 'no')
  iraf.ccdproc.setParam('scancor', 'no')
  iraf.ccdproc.setParam('dark', dark)
  iraf.ccdproc()
Пример #24
0
def trimPicture(image, output, trimsec):
    iraf.ccdproc.setParam('images', image)
    iraf.ccdproc.setParam('output', output)
    iraf.ccdproc.setParam('ccdtype', '')
    iraf.ccdproc.setParam('fixpix', 'no')
    iraf.ccdproc.setParam('overscan', 'no')
    iraf.ccdproc.setParam('trim', 'yes')
    iraf.ccdproc.setParam('zerocor', 'no')
    iraf.ccdproc.setParam('darkcor', 'no')
    iraf.ccdproc.setParam('flatcor', 'no')
    iraf.ccdproc.setParam('illumco', 'no')
    iraf.ccdproc.setParam('readcor', 'no')
    iraf.ccdproc.setParam('scancor', 'no')
    iraf.ccdproc.setParam('trimsec', trimsec)
    iraf.ccdproc()
Пример #25
0
def darkCorrect(image, output, dark):
    iraf.ccdproc.setParam('images', image)
    iraf.ccdproc.setParam('output', output)
    iraf.ccdproc.setParam('ccdtype', '')
    iraf.ccdproc.setParam('fixpix', 'no')
    iraf.ccdproc.setParam('overscan', 'no')
    iraf.ccdproc.setParam('trim', 'no')
    iraf.ccdproc.setParam('zerocor', 'no')
    iraf.ccdproc.setParam('darkcor', 'yes')
    iraf.ccdproc.setParam('flatcor', 'no')
    iraf.ccdproc.setParam('illumco', 'no')
    iraf.ccdproc.setParam('readcor', 'no')
    iraf.ccdproc.setParam('scancor', 'no')
    iraf.ccdproc.setParam('dark', dark)
    iraf.ccdproc()
Пример #26
0
def correct_overscan(filename):
	iraf.ccdproc(images = '@' + filename + '//[1]'
		, output = '%o%o%@' + filename
		, ccdtype = '', max_cache = 0, noproc = False
		, fixpix = False, overscan = True, trim = False
		, zerocor = False, darkcor = False, flatcor = False
		, illumcor = False, fringecor = False, readcor = False
		, scancor = False, readaxis = 'line', fixfile = ''
		, biassec = '[5:45,1:4612]', trimsec = '', zero = ''
		, dark = '', flat = '', illum = '', fringe = ''
		, minreplace = 1.0, scantype = 'shortscan', nscan = 1
		, interactive = False, function = 'legendre', order = 1
		, sample = '*', naverage = 1, niterate = 1
		, low_reject = 3.0, high_reject = 3.0, grow = 0.0)
	iraf.flpr()
Пример #27
0
def correct_bias(filename1, filename2):
        iraf.ccdproc(images = 'o//@' + filename1
                , output = 'bo//@' + filename1
                , ccdtype = '', max_cache = 0, noproc = False
                , fixpix = False, overscan = False, trim = False
                , zerocor = True, darkcor = False, flatcor = False
                , illumcor = False, fringecor = False, readcor = False
                , scancor = False, readaxis = 'line', fixfile = ''
                , biassec = '', trimsec = '', zero = filename2
                , dark = '', flat = '', illum = '', fringe = ''
                , minreplace = 1.0, scantype = 'shortscan', nscan = 1
                , interactive = False, function = 'chebyshev', order = 1
                , sample = '*', naverage = 1, niterate = 1
                , low_reject = 3.0, high_reject = 3.0, grow = 0.0)
        iraf.flpr()
Пример #28
0
def bluebias(images,
             biassec1=BLUEBIAS1,
             trimsec1=BLUETRIM1,
             biassec2=BLUEBIAS2,
             trimsec2=BLUETRIM2):
    '''Subtract overscan and trim blue frames'''

    for image in images:

        root, ext = image.split('.')
        iraf.ccdproc(image,
                     output='%s_1' % root,
                     ccdtype='',
                     noproc=no,
                     fixpix=no,
                     overscan=yes,
                     trim=yes,
                     zerocor=no,
                     darkcor=no,
                     flatcor=no,
                     illumcor=no,
                     fringecor=no,
                     readcor=no,
                     scancor=no,
                     biassec=biassec1,
                     trimsec=trimsec1)
        iraf.ccdproc(image,
                     output='%s_2' % root,
                     ccdtype='',
                     noproc=no,
                     fixpix=no,
                     overscan=yes,
                     trim=yes,
                     zerocor=no,
                     darkcor=no,
                     flatcor=no,
                     illumcor=no,
                     fringecor=no,
                     readcor=no,
                     scancor=no,
                     biassec=biassec2,
                     trimsec=trimsec2)
        iraf.imjoin('%s_1,%s_2' % (root, root), 'j%s' % image, 1)
        update_head('j%s' % image, 'DISPAXIS', 1)
        update_head('j%s' % image, ['CCDSEC', 'DATASEC'],
                    ['[1:2048,1:270]', '[1:2048,1:270]'])

    return
Пример #29
0
def basic_2d_proc(rawFile,imgType=None,CLOBBER=False):

    # set up file names based on our convention
    oScanFile = 'pre_reduced/o{}'.format(rawFile)
    toScanFile = 'pre_reduced/to{}'.format(rawFile)
    toScanFlat = 'pre_reduced/to{}'.format(rawFile.replace('.fits','_norm.fits'))

    # run the basic 2D stuff on this image if necessary
    if (not os.path.isfile(oScanFile)) or CLOBBER:

        # get the instrument configuration
        inst = instruments.blue_or_red(rawFile)[1]
        iraf.specred.dispaxi = inst.get('dispaxis')
        iraf.longslit.dispaxi = inst.get('dispaxis')
        _biassec0 = inst.get('biassec')
        _trimsec0 = inst.get('trimsec')
        _flatsec0 = inst.get('flatsec')

        # remove destination files
        for file in [oScanFile,toScanFile]:
            if os.path.isfile(file) and CLOBBER:
                os.remove(file)

        # check the ultimate desination file, since intermediates get deleted
        if not os.path.isfile(toScanFile):
            if inst.get('instrument')=='kast':

                # do Lick specific bias operations
                util.kastbias(rawFile,oScanFile)
            elif inst.get('instrument')=='binospec':

                util.binospecbias(rawFile,oScanFile,inst)

            # do general (IRAF is in such a sorry state I'm not even sure if this works)
            else:
                iraf.ccdproc(rawFile, output=oScanFile,
                             overscan='yes', trim='yes',
                             zerocor="no", flatcor="no",readaxi='line',
                             trimsec=str(_trimsec0), biassec=str(_biassec0),
                             Stdout=1)

            # trim (same trimming operation for all telescopes)
            iraf.ccdproc(oScanFile, output=toScanFile,
                        overscan='no', trim='yes', zerocor="no", flatcor="no",
                        readaxi='line',trimsec=str(_trimsec0), Stdout=1)

            #create trimmed flats for norm region
            if imgType == 'CAL_FLAT' and inst.get('instrument')=='kast':
                iraf.ccdproc(oScanFile, output=toScanFlat,
                        overscan='no', trim='yes', zerocor="no", flatcor="no",
                        readaxi='line',trimsec=str(_flatsec0), Stdout=1)
            if imgType == 'CAL_FLAT' and inst.get('instrument')=='binospec':
                iraf.ccdproc(oScanFile, output=toScanFlat,
                        overscan='no', trim='yes', zerocor="no", flatcor="no",
                        readaxi='line',trimsec=str(_flatsec0), Stdout=1)
            os.remove(oScanFile)

    return 0
Пример #30
0
def correct_flat(filename, flatname):
#	flatname = 'per' + filename.replace('_no_flat.lst', '_flat.fits')
        iraf.ccdproc(images = 'tbo//@' + filename
                , output = 'ftbo//@' + filename
                , ccdtype = '', max_cache = 0, noproc = False
                , fixpix = False, overscan = False, trim = False
                , zerocor = False, darkcor = False, flatcor = True
                , illumcor = False, fringecor = False, readcor = False
                , scancor = False, readaxis = 'line', fixfile = ''
                , biassec = '', trimsec = '', zero = ''
                , dark = '', flat = flatname, illum = '', fringe = ''
                , minreplace = 1.0, scantype = 'shortscan', nscan = 1
                , interactive = False, function = 'legendre', order = 1
                , sample = '*', naverage = 1, niterate = 1
                , low_reject = 3.0, high_reject = 3.0, grow = 0.0)
        iraf.flpr()
Пример #31
0
def trimImages():
    print "TrimAndOverscan start"
    iraf.ccdproc.setParam('zerocor', 'no')
    iraf.ccdproc.setParam('flatcor', 'no')
    iraf.ccdproc.setParam('fixpix', 'no')
    iraf.ccdproc.setParam('darkcor', 'no')
    iraf.ccdproc.setParam('illumcor', 'no')
    iraf.ccdproc.setParam('trim', 'yes')
    iraf.ccdproc.setParam('trimsec', DATA_SEC)
    iraf.ccdproc.setParam('overscan', 'yes')
    iraf.ccdproc.setParam('biassec', BIAS_SEC)
    iraf.ccdproc.setParam("images", "imagenesfits/*.fits")
    #online
    iraf.ccdproc.setParam('output', '')
    iraf.ccdproc()
    print "TrimAndOverscan end"
Пример #32
0
def trimImages():
	print "TrimAndOverscan start"
	iraf.ccdproc.setParam('zerocor', 'no')
	iraf.ccdproc.setParam('flatcor', 'no')
	iraf.ccdproc.setParam('fixpix', 'no')
	iraf.ccdproc.setParam('darkcor', 'no')
	iraf.ccdproc.setParam('illumcor', 'no')
	iraf.ccdproc.setParam('trim', 'yes')
	iraf.ccdproc.setParam('trimsec', DATA_SEC)
	iraf.ccdproc.setParam('overscan', 'yes')
	iraf.ccdproc.setParam('biassec', BIAS_SEC)
	iraf.ccdproc.setParam("images", "imagenesfits/*.fits")
	#online
	iraf.ccdproc.setParam('output', '')
	iraf.ccdproc()
	print "TrimAndOverscan end"
Пример #33
0
def optreduce(fwheel):
	'''
	reduces optical andicam data
	required: combined optical biases and flats, unreduced data need to be in working directory
				also in.{B,V,R,I} and out.{B,V,R,I}, which are text files that list data taken w respective filters
	input: fwheel is a python list that holds the names of the filters for which you want to reduce
	output: rccd versions of ccd*.fits images which are bias and flat corrected are output in working directory
		make sure we have a bias so we can bias subtract the data
	'''
	if len(glob.glob('*.bias*')) < 1:
		print "no combined bias found, exiting. Please place a combined bias in this directory and try agian"
		return
	else:
		for color in fwheel:
			#check that all necessary files exist for reduction, in.color, out.color
			if len(glob.glob('in.'+color)) < 1:
				print "in."+color+" not found. "+color+" data will not be reduced. Please create file and try again"
			#elif len(glob.glob('out.'+color)) < 1:
			#	print "out."+color+" not found. "+color+" data will not be reduced. Please create file and try again"
			else:
				#B data uses the skyflat
				if color=='B':
					if len(glob.glob('*.skyflatB*')) < 1:
						print "no combined B skyflat found. B data will not be reduced. Please create combined B skyflat and try again"
					else:
						with open("in.B") as f:
							num_images=sum(1 for line in f)
						if num_images > 1:
							print str(num_images)+" B images found. Reducing ..."
							iraf.ccdproc(images="@in.B",output="[email protected]",overscan="yes",trim="yes",zerocor="yes",darkcor="no",flatcor="yes",readaxis="line",biassec="[2:16,3:1026]",trimsec="[17:1040,3:1026]",zero="*.bias.fits",flat="*.skyflatB.fits",interactive="no",function="spline3",order="11")
						else:
							print "No B images found"
				#all other data uses domes
				elif color in ['V','R','I']:
					if len(glob.glob('*.dome'+color+'.fits')) < 1:
						print "no combined "+color+" dome found. "+color+" data will not be reduced. Please create combined "+color+" dome and try again"
					else:
						with open("in."+color) as f:
							num_images=sum(1 for line in f)
						if num_images > 1:
							print str(num_images)+" "+color+" images found. Reducing ..."
							iraf.ccdproc(images="@in."+color,output="r@in."+color,overscan="yes",trim="yes",zerocor="yes",darkcor="no",flatcor="yes",readaxis="line",biassec="[2:16,3:1026]",trimsec="[17:1040,3:1026]",zero="*.bias.fits",flat="*.dome"+color+".fits",interactive="no",function="spline3",order="11")
						else:
							print "No "+color+" images found."
				else:
					print color+" is not recognized as a filter. Please use 'B', 'V', 'R', or I"
		return
Пример #34
0
def coroverscan(lstfn):
    """
    call iraf command ccdproc, overscan correct.
    lstfn : lst file name
    type : string
    output file : oYF*.fits
    """
    iraf.noao()
    iraf.imred()
    iraf.ccdred()
    iraf.ccdproc(images='@' + lstfn + '//[1]',
                 output='%o%o%@' + lstfn,
                 ccdtype='',
                 max_cache=0,
                 noproc=False,
                 fixpix=False,
                 overscan=True,
                 trim=False,
                 zerocor=False,
                 darkcor=False,
                 flatcor=False,
                 illumcor=False,
                 fringecor=False,
                 readcor=False,
                 scancor=False,
                 readaxis='line',
                 fixfile='',
                 biassec='[5:45,1:4612]',
                 trimsec='',
                 zero='',
                 dark='',
                 flat='',
                 illum='',
                 fringe='',
                 minreplace=1.0,
                 scantype='shortscan',
                 nscan=1,
                 interactive=False,
                 function='chebyshev',
                 order=1,
                 sample='*',
                 naverage=1,
                 niterate=1,
                 low_reject=3.0,
                 high_reject=3.0,
                 grow=1.0)
    iraf.flpr()
Пример #35
0
def trim(tblst, trimsec):
    iraf.ccdproc(images='b//@' + tblst,
                 output='tb//@' + tblst,
                 ccdtype='',
                 noproc=False,
                 overscan=False,
                 trim=True,
                 zerocor=False,
                 flatcor=False,
                 readaxis='line',
                 biassec='',
                 trimsec=trimsec,
                 interactive=False,
                 function='legendre',
                 order=1)
    iraf.flpr()
    print '<<<<<trim section successfully>>>>>'
Пример #36
0
def optdomecomb(date, fwheel=['bias','B','V','R','I']):
	'''
	#combine biases and optical domes
	#Requires: the uncombined fits images
	#	if you are combining a dome, you must have a bias from the same night as the dome to preform appropriate bias subtraction
	#Input: the date the domes were observed YYMMDD, and fwheel, a list that contains the filters of the domes to be combined
	#Outupt: combined dome fits frame for each color where uncombined frames are in the directory 
	'''
	#convert date to string incase it was entered as an int of float
	date=str(date)
	if len(glob.glob('*bias*')) < 1:
		print "no biases found, exiting"
		return
	else:
		for color in fwheel:
			if color=='bias':
				biaslist=glob.glob('*bias.[0-9]*')
				if len(biaslist) > 10:
					print "only "+str(len(biaslist))+" biases found. you need at least 10"
				else:
					with open("bias.list",'w') as BILIS:
						for i in biaslist:
							BILIS.write(i+'\n')
					iraf.zerocombine("@bias.list",output="ccd"+str(date)+".bias.fits",combine="average",reject="minmax",scale="none",ccdtype="",process="no",delete="no",clobber="no",nlow=1,nhigh=1,nkeep=1)
					print "created ccd"+str(date)+".bias.fits"
					os.system('rm bias.list')

			elif color in ['B','V','R','I']:
				domelist=glob.glob('*dome'+color+'.[0-9]*')
				if len(domelist) < 1:
					print 'no '+color+' domes found'
				elif len(domelist) > 10:
					print 'only '+str(len(domelist))+' domes found. you need at least 10'
				else:
					with open('flat'+color+'.list', 'w') as flist:
						for i in domelist:
							flist.write(i+'\n')
					iraf.ccdproc("@flat"+color+".list", output="z@flat"+color+".list",ccdtype=" ",noproc="no", fixpix="no",overscan="yes", trim="no", zerocor="yes",darkcor="no",flatcor="no", illumcor="no", fringec="no", readcor="no", scancor="no", readaxis="line", biassec="[3:14,1:1024]", zero="ccd"+str(date)+".bias.fits", interactive="no", functio="spline3", order=11)
					iraf.flatcombine("z@flat"+color+".list", output="ccd"+str(date)+".dome"+color+".fits",combine="average", reject="crreject", ccdtype="", process="no", subsets="no", delete="no", clobber="no", scale="mode", rdnoise=6.5, gain=2.3)
					os.system('rm z*dome'+color+'*fits')
					print "created ccd"+str(date)+".dome"+color+".fits"
					os.system('rm flat'+color+'.list')

			else:
				print "your input for the filter was not recognized. Please use either 'bias', 'B', 'V', 'R', or 'I' and try again"
		return
Пример #37
0
def corhalogen(lstfile):
    namelst = glob.glob('ftbo*.fits')
    for name in namelst:
        print 'remove ', name
        os.remove(name)
    iraf.noao()
    iraf.imred()
    iraf.ccdred()
    iraf.ccdproc(images='tbo@' + lstfile,
                 output='%ftbo%ftbo%@' + lstfile,
                 ccdtype='',
                 max_cache=0,
                 noproc=False,
                 fixpix=False,
                 overscan=False,
                 trim=False,
                 zerocor=False,
                 darkcor=False,
                 flatcor=True,
                 illumcor=False,
                 fringecor=False,
                 readcor=False,
                 scancor=False,
                 readaxis='line',
                 fixfile='',
                 biassec='',
                 trimsec='',
                 zero='Zero',
                 dark='',
                 flat='Resp',
                 illum='',
                 fringe='',
                 minreplace=1.0,
                 scantype='shortscan',
                 nscan=1,
                 interactive=False,
                 function='chebyshev',
                 order=1,
                 sample='*',
                 naverage=1,
                 niterate=1,
                 low_reject=3.0,
                 high_reject=3.0,
                 grow=1.0)
    iraf.flpr()
Пример #38
0
def corhalogen(lstfile):
    iraf.noao()
    iraf.imred()
    iraf.ccdred()
    iraf.ccdproc(images = 'tbo@' + lstfile
        , output = '%ftbo%ftbo%@' + lstfile
        , ccdtype = '', max_cache = 0, noproc = False
        , fixpix = False, overscan = False, trim = False
        , zerocor = False, darkcor = False, flatcor = True
        , illumcor = False, fringecor = False, readcor = False
        , scancor = False, readaxis = 'line', fixfile = ''
        , biassec = '', trimsec = ''
        , zero = 'Zero', dark = '', flat = 'Resp', illum = '', fringe = ''
        , minreplace = 1.0, scantype = 'shortscan', nscan = 1
        , interactive = False, function = 'chebyshev', order = 1
        , sample = '*', naverage = 1, niterate = 1
        , low_reject = 3.0, high_reject = 3.0, grow = 1.0)
    iraf.flpr()
Пример #39
0
def reducePyraf(filelist, outputlist, bias, flat, trim, trimsec):
    """
    Reduces the given science frame(s). Uses pyraf.
    """
    from pyraf import iraf
    from pyraf.iraf import imred, ccdred

    ccdtype = " "
    iraf.ccdproc(images=filelist,
                 output=outputlist,
                 ccdtype=ccdtype,
                 trim=trim,
                 zerocor="yes",
                 darkcor="no",
                 flatcor="yes",
                 trimsec=trimsec,
                 zero=bias,
                 flat=flat)
Пример #40
0
def bias_correct(file_list,xmin='18',xmax='4111',ymin='350',ymax='1570',bindefault=1):
    irf_prm.set_ccdproc(iraf.ccdproc)
    biassecs = {1:'[4114:4142,1:1896]',2:'[4114:4142,1:1896]',3:'[4114:4142,1:1896]',4:'[4114:4142,1:1896]'} #NEED UPDATED
    #iraf.ccdproc.biassec = biassecs[binsize]
    iraf.ccdproc.trimsec = '['+xmin+':'+xmax+','+ymin+':'+ymax+']'
    for ff in file_list:
        comm = scnd.get_comment(ff,'PARAM18')
        if comm == '1 / Serial Binning,Pixels':
            binsize = iraf.hselect(ff,'PARAM18','yes')
        else:
            param_name = scnd.find_param_with_comment(ff,'1 / Serial Binning,Pixels')
            if param_name == 'NullReturn':
                binsize=bindefault
            else:
                binsize = iraf.hselect(ff,param_name,'yes')
        iraf.ccdproc.biassec = biassecs[binsize]
        output = 'b'+ff
        iraf.ccdproc(images=ff,output=output,ccdtype = "")
    return
Пример #41
0
def correct_trim(filename, trimsec):
#	print 'Please check the fits image and determine the size to trim...'
#	os.popen('gedit ' + filename +' &')
#	iraf.imexamine(input = 'bo//@' + filename, frame = 1)
#	xy = raw_input("Please input x1, x2, y1, y2 to trim: ")
#	xy = xy.split()
#	trimsec = '[' + xy[0] + ':' + xy[1] + ',' + xy[2] + ':' + xy[3] +']'
	iraf.ccdproc(images = 'bo//@' + filename
                , output = 'tbo//@' + filename
                , ccdtype = '', max_cache = 0, noproc = False
                , fixpix = False, overscan = False, trim = True
                , zerocor = False, darkcor = False, flatcor = False
                , illumcor = False, fringecor = False, readcor = False
                , scancor = False, readaxis = 'line', fixfile = ''
                , biassec = '', trimsec = trimsec, zero = ''
                , dark = '', flat = '', illum = '', fringe = ''
                , minreplace = 1.0, scantype = 'shortscan', nscan = 1
                , interactive = False, function = 'legendre', order = 1
                , sample = '*', naverage = 1, niterate = 1
                , low_reject = 3.0, high_reject = 3.0, grow = 0.0)
        iraf.flpr()
Пример #42
0
    def combineflats(inflats, outflat, outflatdc, darkflat, flat_sigmas=None):
        ir.imcombine("@" + inflats,
                     output=outflat,
                     combine="average",
                     reject="crreject",
                     scale="median",
                     weight="median",
                     bpmasks="")  # sigmas=flat_sigmas
        ns.write_exptime(outflat, itime=itime)
        print(outflat)

        ir.ccdproc(outflat,
                   output=outflatdc,
                   ccdtype="",
                   fixpix="no",
                   overscan="no",
                   trim="no",
                   zerocor="no",
                   darkcor="yes",
                   flatcor="no",
                   dark=darkflat)
Пример #43
0
def cor_flat(corftblst):
    print 1
    iraf.ccdproc(images='tb//@' + corftblst,
                 output='ftb//@' + corftblst,
                 ccdtype='',
                 max_cache=0,
                 noproc=False,
                 fixpix=False,
                 overscan=False,
                 trim=False,
                 zerocor=False,
                 darkcor=False,
                 flatcor=True,
                 illumcor=False,
                 fringecor=False,
                 readcor=False,
                 scancor=False,
                 readaxis='line',
                 fixfile='',
                 biassec='',
                 trimsec='',
                 zero='',
                 dark='',
                 flat='flat',
                 illum='',
                 fringe='',
                 minreplace=1.0,
                 scantype='shortscan',
                 nscan=1,
                 interactive=False,
                 function='chebyshev',
                 order=1,
                 sample='*',
                 naverage=1,
                 niterate=1,
                 low_reject=3.0,
                 high_reject=3.0,
                 grow=1.0)
    iraf.flpr()
    print '<<<<<correct flat successfully>>>>>'
Пример #44
0
def flat_correction(targetdir,flatdir):

    """
    Flat field correction
    """

    print 'Target directory is ' + targetdir
    print 'Flat directory is ' + flatdir
    print 'Applying flat field correction...'

    innames, outnames = [], []

    for n in os.listdir(targetdir):
        if (n.endswith('.fit')) & (n.startswith('cr')):
            outnames.append( os.path.join(targetdir,'f' + n) )
            innames.append( os.path.join( targetdir, n + '[1]') )
            if os.path.exists( os.path.join( targetdir, 'f' + n) ):
                print 'Removing file ' + os.path.join( targetdir, 'f' + n)
                os.remove( os.path.join( targetdir, 'f' + n) )

    with open( os.path.join(targetdir,'input.list'), 'w') as f:
        for name in innames:
            f.write( name + '\n' )

    with open( os.path.join(targetdir,'output.list'), 'w') as f:
        for name in outnames:
            f.write( name + '\n' )

    iraf.noao(_doprint=0)
    iraf.imred(_doprint=0)
    iraf.ccdred(_doprint=0)

    iraf.ccdproc.setParam('images', '@' + os.path.join(targetdir, 'input.list') )
    iraf.ccdproc.setParam('flatcor','yes')
    iraf.ccdproc.setParam('flat', os.path.join(flatdir,'nFlat.fits') )
    iraf.ccdproc.setParam('output', '@' + os.path.join(targetdir, 'output.list'))

    iraf.ccdproc()

    return None
Пример #45
0
def redbias(images, biassec=REDBIAS, trimsec=REDTRIM):
    '''Subtract overscan and trim red frames'''

    for image in images:
        iraf.ccdproc(image,
                     ccdtype='',
                     noproc=no,
                     fixpix=no,
                     overscan=yes,
                     trim=yes,
                     zerocor=no,
                     darkcor=no,
                     flatcor=no,
                     illumcor=no,
                     fringecor=no,
                     readcor=no,
                     scancor=no,
                     biassec=biassec,
                     trimsec=trimsec)
        update_head(image, 'DISPAXIS', 1)

    return
def clean_folder_write_header(WORK_DIR):
  print '\n + Cleaning folder, truncating edges, fixing bad pixels\n'

  for obj in observations[WORK_DIR]['objects']:
    try: os.remove(obj+'.fits')
    except: pass
    try: os.remove(obj+'.ec.fits')
    except: pass
    iraf.imcopy(input=observations[WORK_DIR]['ORIG_DIR']+obj, output=obj) 

  for cal in observations[WORK_DIR]['calibs']:
    try: os.remove(cal+'.fits')
    except: pass  
    iraf.imcopy(input=observations[WORK_DIR]['ORIG_DIR']+cal, output=cal)

  with open('badpix.txt', 'w+') as file:
    file.write('704 704 1262  2048\n703 705 1262  1277')  

  iraf.hedit(images=','.join(observations[WORK_DIR]['objects']+observations[WORK_DIR]['calibs']), fields='CCDSEC', value='[51:2098,1:2048]', add='yes', verify='no')
  iraf.hedit(images=','.join(observations[WORK_DIR]['objects']+observations[WORK_DIR]['calibs']), fields='DATASEC', value='[51:2098,1:2048]', add='yes', verify='no') 

  # FIX badpix
  iraf.ccdproc(images=','.join(observations[WORK_DIR]['objects']+observations[WORK_DIR]['calibs']), ccdtype='', fixpix='yes', oversca='no', trim='yes', zerocor='no', darkcor='no', flatcor='no', fixfile='badpix.txt')
Пример #47
0
def flatCorrection():
	print "FlatCorrection start"
	#put all others params to no , they may be set by previous actions
	iraf.ccdproc.setParam('flatcor', 'yes')
	iraf.ccdproc.setParam('fixpix', 'no')
	iraf.ccdproc.setParam('darkcor', 'no')
	iraf.ccdproc.setParam('illumcor', 'no')
	iraf.ccdproc.setParam('trim', 'no')
	iraf.ccdproc.setParam('overscan', 'no')
	iraf.ccdproc.setParam('zerocor', 'no')
	iraf.ccdproc.setParam('trimsec', '')
	iraf.ccdproc.setParam('biassec', '')
	#online
	iraf.ccdproc.setParam('output', '')
	for f in FILTERS:	
		flatfilename = os.path.join(OUTPUTDIR, "flat", f, "Flat.fits")
		if os.path.isfile(flatfilename):
			iraf.ccdproc.setParam('flat', flatfilename)
			iraf.ccdproc.setParam("images", os.path.join(OUTPUTDIR, "object", f) + "/*.fits")
			iraf.ccdproc()
		else:
			print "Flat file %s not present" % flatfilename
	print "FlatCorrection end"
Пример #48
0
def deimos_preproc(image):
    '''Take a MEF DEIMOS image, extract the relevant extensions, trim the
    LVM slit masks appropriately, and rename.'''

    # Needing grating
    graname = get_head(image, "GRATENAM", extn=0)

    # "Blue" chip
    iraf.imcopy("%s[%i]" % (image, BEXT), "d%s_B.fits" % image[6:10])
    iraf.ccdproc("d%s_B.fits" % image[6:10],
                 overscan=yes,
                 trim=yes,
                 fixpix=yes,
                 biassec=BBIASSEC,
                 trimsec=BTRIMSEC,
                 fixfile="%s_%i.fits" % (MASK, BEXT))
    iraf.imcopy("d%s_B.fits%s" % (image[6:10], DGRATINGS[graname]["blvmreg"]),
                "td%s_B.fits" % image[6:10])
    iraf.imtranspose("td%s_B.fits" % image[6:10], "rtd%s_B.fits" % image[6:10])

    # "Red" chip
    iraf.imcopy("%s[%i]" % (image, REXT), "d%s_R.fits" % image[6:10])
    iraf.ccdproc("d%s_R.fits" % image[6:10],
                 overscan=yes,
                 trim=yes,
                 fixpix=yes,
                 biassec=RBIASSEC,
                 trimsec=RTRIMSEC,
                 fixfile="%s_%i.fits" % (MASK, BEXT))
    iraf.imcopy("d%s_R.fits%s" % (image[6:10], DGRATINGS[graname]["rlvmreg"]),
                "td%s_R.fits" % image[6:10])
    iraf.imtranspose("td%s_R.fits" % image[6:10], "rtd%s_R.fits" % image[6:10])
    iraf.rotate("rtd%s_R.fits" % image[6:10], "rtd%s_R.fits" % image[6:10],
                180.0)

    return
Пример #49
0
def bluebias(images, biassec1=BLUEBIAS1, trimsec1=BLUETRIM1, 
             biassec2=BLUEBIAS2, trimsec2=BLUETRIM2):

    '''Subtract overscan and trim blue frames'''
     
    for image in images:

        root,ext=image.split('.')
        iraf.ccdproc(image, output='%s_1' % root, ccdtype='', noproc=no, 
                     fixpix=no, overscan=yes, trim=yes, zerocor=no, 
                     darkcor=no, flatcor=no, illumcor=no, fringecor=no, 
                     readcor=no, scancor=no, biassec=biassec1, 
                     trimsec=trimsec1)
        iraf.ccdproc(image, output='%s_2' % root, ccdtype='', noproc=no, 
                     fixpix=no, overscan=yes, trim=yes, zerocor=no, 
                     darkcor=no, flatcor=no, illumcor=no, fringecor=no, 
                     readcor=no, scancor=no, biassec=biassec2, 
                     trimsec=trimsec2)
        iraf.imjoin('%s_1,%s_2' % (root, root), 'j%s' % image, 1)
        update_head('j%s' % image, 'DISPAXIS', 1)
        update_head('j%s' % image, ['CCDSEC', 'DATASEC'], ['[1:2048,1:270]', 
                    '[1:2048,1:270]'])

    return
Пример #50
0
def skyflat(date, low=15000, high=23000, numimages=5):
	'''
	make a combined b skyflat. 
	Requires: a bias image in same directory to do the bias subtraction
		skyflats must be offset and have appropriate count number
	input: the date the skyflats were observed YYMMDD
	output: flat.B, a text file that lists the names of the skyflat fits files
		ccdYYMMDD.skyflatB.fits, the combined skyflat
	'''
	#check if biases are in this directory
	if len(glob.glob('*.bias.*')) < 1:
		print "no combined bias found, exiting"
		return
	#get image name and mean pixel value for all skyflat images
	stats=iraf.imstat('*sky*',format=False,fields='image,mean',Stdout=1)
	pairs=[i.split() for i in stats]

	#write the names of the skyflats w right ammount of counts to file
	#keep track of how many good ones there are
	goodCount=0
	with open("flat.B",'w') as FB:
		for i in pairs:
			if float(i[1]) > low and float(i[1]) < high:
				FB.write(i[0]+'\n')
				goodCount+=1

	if goodCount < numimages:
		print "only "+str(goodCount)+" skyflats have counts between "+str(low)+" and "+str(high)
		print "no combined skyflat made"
		return
	else:
		iraf.ccdproc(images="@flat.B",output=" ",fixpix="no",overscan="yes",trim="no",zerocor="yes",darkcor="no",flatcor="no",illumcor="no",fringecor="no",readcor="no",scancor="no",readaxis="line",biassec="[3:14,1:1024]",zero="*.bias.fits",interactive="no",functio="spline3",order=11)
		iraf.flatcombine("@flat.B",output="FLAT",combine="median",reject="minmax",process="no",scale="mode",ccdtype="")
		os.system("mv FLAT.fits ccd"+str(date)+".skyflatB.fits")
		print ("made combined skyflat ccd"+str(date)+".skyflatB.fits")
	return
Пример #51
0
def reduce(imglist, files_arc, files_flat, _cosmic, _interactive_extraction,
           _arc):
    import string
    import os
    import re
    import sys
    import pdb
    os.environ["PYRAF_BETA_STATUS"] = "1"
    try:
        from astropy.io import fits as pyfits
    except:
        import pyfits
    import numpy as np
    import util
    import instruments
    import combine_sides as cs
    import cosmics
    from pyraf import iraf

    dv = util.dvex()
    scal = np.pi / 180.

    if not _interactive_extraction:
        _interactive = False
    else:
        _interactive = True

    if not _arc:
        _arc_identify = False
    else:
        _arc_identify = True

    iraf.noao(_doprint=0)
    iraf.imred(_doprint=0)
    iraf.ccdred(_doprint=0)
    iraf.twodspec(_doprint=0)
    iraf.longslit(_doprint=0)
    iraf.onedspec(_doprint=0)
    iraf.specred(_doprint=0)
    iraf.disp(inlist='1', reference='1')

    toforget = [
        'ccdproc', 'imcopy', 'specred.apall', 'longslit.identify',
        'longslit.reidentify', 'specred.standard', 'longslit.fitcoords',
        'onedspec.wspectext'
    ]
    for t in toforget:
        iraf.unlearn(t)
    iraf.ccdred.verbose = 'no'
    iraf.specred.verbose = 'no'
    iraf.ccdproc.darkcor = 'no'
    iraf.ccdproc.fixpix = 'no'
    iraf.ccdproc.flatcor = 'no'
    iraf.ccdproc.zerocor = 'no'
    iraf.ccdproc.ccdtype = ''

    iraf.longslit.mode = 'h'
    iraf.specred.mode = 'h'
    iraf.noao.mode = 'h'
    iraf.ccdred.instrument = "ccddb$kpno/camera.dat"

    list_arc_b = []
    list_arc_r = []

    for arcs in files_arc:
        hdr = util.readhdr(arcs)
        br, inst = instruments.blue_or_red(arcs)

        if br == 'blue':
            list_arc_b.append(arcs)
        elif br == 'red':
            list_arc_r.append(arcs)
        else:
            errStr = '{} '.format(str(util.readkey3(hdr, 'VERSION')))
            errStr += 'not in database'
            print(errStr)
            sys.exit()

    asci_files = []
    newlist = [[], []]

    print('\n### images to reduce :', imglist)
    #raise TypeError
    for img in imglist:
        if 'b' in img:
            newlist[0].append(img)
        elif 'r' in img:
            newlist[1].append(img)

    if len(newlist[1]) < 1:
        newlist = newlist[:-1]
    elif len(newlist[0]) < 1:
        newlist = newlist[1:]
    else:
        sides = raw_input("Reduce which side? ([both]/b/r): ")
        if sides == 'b':
            newlist = newlist[:-1]
        elif sides == 'r':
            newlist = newlist[1:]

    for imgs in newlist:
        hdr = util.readhdr(imgs[0])
        br, inst = instruments.blue_or_red(imgs[0])
        if br == 'blue':
            flat_file = '../RESP_blue'
        elif br == 'red':
            flat_file = '../RESP_red'
        else:
            errStr = 'Not in intrument list'
            print(errStr)
            sys.exit()

        iraf.specred.dispaxi = inst.get('dispaxis')
        iraf.longslit.dispaxi = inst.get('dispaxis')

        _gain = inst.get('gain')
        _ron = inst.get('read_noise')
        iraf.specred.apall.readnoi = _ron
        iraf.specred.apall.gain = _gain

        _object0 = util.readkey3(hdr, 'OBJECT')
        _date0 = util.readkey3(hdr, 'DATE-OBS')

        _object0 = re.sub(' ', '', _object0)
        _object0 = re.sub('/', '_', _object0)
        nameout0 = str(_object0) + '_' + inst.get('name') + '_' + str(_date0)

        nameout0 = util.name_duplicate(imgs[0], nameout0, '')
        timg = nameout0
        print('\n### now processing :', timg, ' for -> ', inst.get('name'))
        if len(imgs) > 1:
            img_str = ''
            for i in imgs:
                img_str = img_str + i + ','
            iraf.imcombine(img_str, output=timg)
        else:
            img = imgs[0]
            if os.path.isfile(timg):
                os.system('rm -rf ' + timg)
            iraf.imcopy(img, output=timg)

        # should just do this by hand
        iraf.ccdproc(timg,
                     output='',
                     overscan='no',
                     trim='no',
                     zerocor="no",
                     flatcor="yes",
                     readaxi='line',
                     flat=flat_file,
                     Stdout=1)

        img = timg

        #raw_input("Press Enter to continue...")
        if _cosmic:
            print('\n### starting cosmic removal')

            array, header = cosmics.fromfits(img)
            c = cosmics.cosmicsimage(array,
                                     gain=inst.get('gain'),
                                     readnoise=inst.get('read_noise'),
                                     sigclip=5,
                                     sigfrac=0.5,
                                     objlim=2.0)
            c.run(maxiter=5)
            cosmics.tofits('cosmic_' + img, c.cleanarray, header)
            img = 'cosmic_' + img

            print('\n### cosmic removal finished')
        else:
            print(
                '\n### No cosmic removal, saving normalized image for inspection???'
            )

        if inst.get('arm') == 'blue' and len(list_arc_b) > 0:
            arcfile = list_arc_b[0]
        elif inst.get('arm') == 'red' and len(list_arc_r) > 0:
            arcfile = list_arc_r[0]
        else:
            arcfile = None

        if arcfile is not None and not arcfile.endswith(".fits"):
            arcfile = arcfile + '.fits'

        if not os.path.isdir('database/'):
            os.mkdir('database/')

        if _arc_identify:
            os.system('cp ' + arcfile + ' .')
            arcfile = string.split(arcfile, '/')[-1]
            arc_ex = re.sub('.fits', '.ms.fits', arcfile)

            arcref = inst.get('archive_arc_extracted')
            arcref_img = string.split(arcref, '/')[-1]
            arcref_img = arcref_img.replace('.ms.fits', '')
            arcrefid = inst.get('archive_arc_extracted_id')
            os.system('cp ' + arcref + ' .')
            arcref = string.split(arcref, '/')[-1]
            os.system('cp ' + arcrefid + ' ./database')

            aperture = inst.get('archive_arc_aperture')
            os.system('cp ' + aperture + ' ./database')

            print('\n###  arcfile : ', arcfile)
            print('\n###  arcfile extraction : ', arc_ex)
            print('\n###  arc reference : ', arcref)

            # read for some meta data to get the row right
            tmpHDU = pyfits.open(arcfile)
            header = tmpHDU[0].header
            try:
                spatialBin = int(header['binning'].split(',')[0])
            except KeyError:
                spatialBin = 1
            apLine = 700 // spatialBin

            iraf.specred.apall(arcfile,
                               output=arc_ex,
                               ref=arcref_img,
                               line=apLine,
                               nsum=10,
                               interactive='no',
                               extract='yes',
                               find='yes',
                               nfind=1,
                               format='multispec',
                               trace='no',
                               back='no',
                               recen='no')

            iraf.longslit.reidentify(referenc=arcref,
                                     images=arc_ex,
                                     interac='NO',
                                     section=inst.get('section'),
                                     coordli=inst.get('line_list'),
                                     shift='INDEF',
                                     search='INDEF',
                                     mode='h',
                                     verbose='YES',
                                     step=0,
                                     nsum=5,
                                     nlost=2,
                                     cradius=10,
                                     refit='yes',
                                     overrid='yes',
                                     newaps='no')

        print('\n### extraction using apall')
        result = []
        hdr_image = util.readhdr(img)
        _type = util.readkey3(hdr_image, 'object')

        if (_type.startswith("arc") or _type.startswith("dflat")
                or _type.startswith("Dflat") or _type.startswith("Dbias")
                or _type.startswith("Bias")):
            print('\n### warning problem \n exit ')
            sys.exit()
        else:
            imgex = util.extractspectrum(img, dv, inst, _interactive, 'obj')
            print('\n### applying wavelength solution')
            print(arc_ex)
            iraf.disp(inlist=imgex, reference=arc_ex)

        result = result + [imgex] + [timg]

        # asci_files.append(imgasci)
        if not os.path.isdir(_object0 + '_ex/'):
            os.mkdir(_object0 + '_ex/')

        if not _arc_identify:
            util.delete(arcref)
        else:
            util.delete(arcfile)

        util.delete(arc_ex)
        util.delete(img)
        util.delete(imgex)
        util.delete(arcref)
        util.delete('logfile')
        #if _cosmic:
        #util.delete(img[7:])
        #util.delete("cosmic_*")

        os.system('mv ' + 'd' + imgex + ' ' + _object0 + '_ex/')

        use_sens = raw_input('Use archival flux calibration? [y]/n ')
        if use_sens != 'no':
            sensfile = inst.get('archive_sens')
            os.system('cp ' + sensfile + ' ' + _object0 + '_ex/')
            bstarfile = inst.get('archive_bstar')
            os.system('cp ' + bstarfile + ' ' + _object0 + '_ex/')

    return result
Пример #52
0
def process():
    ovrsc = '[1:4,*]'
    trim = '[200:2046,50:200]'
    imglist = glob.glob('FORS2*.fits')
#    objdict = {}
#    objdict.clear()
    for img in imglist:
        hdu = pyfits.getheader(img)
        if 'OBJECT' in hdu:
            obj = hdu['OBJECT']
            if obj not in objdict:
                objdict[obj] = [img]
            else:
                objdict[obj].append(img)

    if 'STD' not in objdict:
        os.system('cp /dark/jsamuel/agn/standards/FORS2.2016-05-12T09:15:14.678.fits ./')
        objdict['STD'] = ['FORS2.2016-05-12T09:15:14.678.fits']
        os.system('cp /dark/jsamuel/agn/standards/FORS2.2016-05-12T04:24:38.547.fits ./')
        objdict['STD'].append('FORS2.2016-05-12T04:24:38.547.fits')

    stars = {'specphot-LTT7379':'l7379','specphot-LDS749B':'lds749b','specphot-EG274':'eg274','specphot-G138-31':'g13831','specphot-C-32d9927':'cd32','specphot-LTT9491':'l9491','specphot-LTT7987':'l7987'}

    i = 0
    for key in objdict.keys():
        if 'STD' in key:
            for img in objdict[key]:
                i = i + 1
                numstars = len(objdict['STD'])
                hds = pyfits.getheader(img)
                _starname = stars[hds['HIERARCH ESO OBS NAME']]
                if _starname in ['lds749b','g13831']:
                    print 'Bad standard, copying from 2016-05-12'
                    if not os.path.isdir('badstd'):
                        os.mkdir('badstd')
                    os.system('mv '+img+' ./badstd')
                    if i >= numstars:
                        objdict.pop('STD')
                        os.system('cp /dark/jsamuel/agn/standards/FORS2.2016-05-12T09:15:14.678.fits ./')
                        objdict['STD'] = ['FORS2.2016-05-12T09:15:14.678.fits']
                        os.system('cp /dark/jsamuel/agn/standards/FORS2.2016-05-12T04:24:38.547.fits ./')
                        objdict['STD'].append('FORS2.2016-05-12T04:24:38.547.fits')



    

    if os.path.isfile('biaslist'):
        os.remove('biaslist')

    if os.path.isfile('masterbias.fits'):
        os.remove('masterbias.fits')

    f = open('biaslist','w')
    for img in objdict['BIAS']:
        f.write(img+'\n')
    f.close()

    imglist = '@biaslist'
    name = 'masterbias.fits'
    hdb = pyfits.getheader(objdict['BIAS'][0])
    _gain = hdb['HIERARCH ESO DET OUT1 GAIN']
    _ron = hdb['HIERARCH ESO DET OUT1 RON']
    iraf.zerocombine(imglist,output=name,combine='average',reject='minmax',ccdtype='none',process='no',gain=_gain,rdnoise=_ron,Stdout=1)



    if os.path.isfile('flatlist'):
        os.remove('flatlist')

    if os.path.isfile('sciflatlist'):
        os.remove('sciflatlist')

    if os.path.isfile('stdflatlist'):
        os.remove('stdflatlist')

    if os.path.isfile('masterflat.fits'):
        os.remove('masterflat.fits')

    if os.path.isfile('scimasterflat.fits'):
        os.remove('scimasterflat.fits')

    if os.path.isfile('stdmasterflat.fits'):
        os.remove('stdmasterflat.fits')



        
    f = open('sciflatlist','w')
    for img in objdict['FLAT,LAMP']:
        hdu = pyfits.getheader(img)
        if hdu['HIERARCH ESO DPR TECH'] == 'SPECTRUM':
            f.write(img+'\n')
    f.close()

    j = 0
    f = open('stdflatlist','w')
    for img in objdict['FLAT,LAMP']:
        hdu = pyfits.getheader(img)
        if hdu['HIERARCH ESO DPR TECH'] == 'MOS':
            f.write(img+'\n')
            j = j + 1
    f.close()





    imglist = '@sciflatlist'
    name = 'scimasterflat.fits'
    hdf = pyfits.getheader(objdict['FLAT,LAMP'][0])
    _gain = hdf['HIERARCH ESO DET OUT1 GAIN']
    _ron = hdf['HIERARCH ESO DET OUT1 RON']
    iraf.flatcombine(imglist,output=name,combine='average',reject='avsigclip',ccdtype='none',process='no',subsets='yes',delete='no',clobber='no',gain=_gain,rdnoise=_ron,Stdout=1)


    if j == 0:
        imglist = '@sciflatlist'
    elif j >= 1:
        imglist = '@stdflatlist'
    name = 'stdmasterflat.fits'
    hdf = pyfits.getheader(objdict['FLAT,LAMP'][0])
    _gain = hdf['HIERARCH ESO DET OUT1 GAIN']
    _ron = hdf['HIERARCH ESO DET OUT1 RON']
    iraf.flatcombine(imglist,output=name,combine='average',reject='avsigclip',ccdtype='none',process='no',subsets='yes',delete='no',clobber='no',gain=_gain,rdnoise=_ron,Stdout=1)





    if os.path.isfile('tmasterbias.fits'):
        os.remove('tmasterbias.fits')

    fits = 'masterbias.fits'
    name = 'tmasterbias.fits'
    zcor = 'no'
    fcor = 'no'
    _zero = ''
    _flat = ''
    iraf.ccdproc(fits,output=name,ccdtype='',noproc='no',fixpix='no',overscan='yes',trim='yes',zerocor=zcor,darkcor='no',flatcor=fcor,illumcor='no',fringecor='no',readcor='no',scancor='no',biassec=ovrsc,trimsec=trim,zero=_zero,flat=_flat,Stdout=1)


    if os.path.isfile('tmasterflat.fits'):
        os.remove('tmasterflat.fits')

    if os.path.isfile('tscimasterflat.fits'):
        os.remove('tscimasterflat.fits')

    if os.path.isfile('tstdmasterflat.fits'):
        os.remove('tstdmasterflat.fits')



    fits = 'scimasterflat.fits'
    name = 'tscimasterflat.fits'
    zcor = 'yes'
    fcor = 'no'
    _zero = 'tmasterbias.fits'
    _flat = ''
    iraf.ccdproc(fits,output=name,ccdtype='',noproc='no',fixpix='no',overscan='yes',trim='yes',zerocor=zcor,darkcor='no',flatcor=fcor,illumcor='no',fringecor='no',readcor='no',scancor='no',biassec=ovrsc,trimsec=trim,zero=_zero,flat=_flat,Stdout=1)

    fits = 'stdmasterflat.fits'
    name = 'tstdmasterflat.fits'
    zcor = 'yes'
    fcor = 'no'
    _zero = 'tmasterbias.fits'
    _flat = ''
    iraf.ccdproc(fits,output=name,ccdtype='',noproc='no',fixpix='no',overscan='yes',trim='yes',zerocor=zcor,darkcor='no',flatcor=fcor,illumcor='no',fringecor='no',readcor='no',scancor='no',biassec=ovrsc,trimsec=trim,zero=_zero,flat=_flat,Stdout=1)
                




    if os.path.isfile('ntmasterflat.fits'):
        os.remove('ntmasterflat.fits')

    if os.path.isfile('ntscimasterflat.fits'):
        os.remove('ntscimasterflat.fits')

    if os.path.isfile('ntstdmasterflat.fits'):
        os.remove('ntstdmasterflat.fits')

    cal = 'tscimasterflat.fits'
    resp = 'ntscimasterflat.fits'
    _order = 100
    iraf.response(calibration=cal,normalization=cal,response=resp,interactive='no',function='legendre',order=_order,graphics='stdgraph')

    cal = 'tstdmasterflat.fits'
    resp = 'ntstdmasterflat.fits'
    _order = 100
    iraf.response(calibration=cal,normalization=cal,response=resp,interactive='no',function='legendre',order=_order,graphics='stdgraph')




##########

    ovrsc = '[1:4,*]'
    trim = '[200:2046,50:200]'
    
    fimg = 'ntscimasterflat'
    _area = '[1:150,*]'
    _value = 1.0
    iraf.imreplace(images=fimg+_area,value=_value)

    fimg = 'ntstdmasterflat'
    _area = '[1:150,*]'
    _value = 1.0
    iraf.imreplace(images=fimg+_area,value=_value)
    

    alist = glob.glob('*AGN*.fits')
    for f in alist:
        os.remove(f)
    slist = glob.glob('STD*.fits')
    for f in slist:
        os.remove(f)
    llist = glob.glob('LAMP*.fits')
    for f in llist:
        os.remove(f)


    zcor = 'yes'
    fcor = 'yes'
    _zero = 'tmasterbias.fits'
    sciflat = 'ntscimasterflat.fits'
    stdflat = 'ntstdmasterflat.fits'

    for key in objdict.keys():
        if 'AGN' in key:
            for img in objdict[key]:
                hds = pyfits.getheader(img)
                if 'EXPTIME' in hds:
                    if hds['EXPTIME'] >= 50.0:
                        num = img.rsplit('.',2)[1]
                        name = key+'_'+num
                        '''
                        iraf.ccdproc(img,output='trim_'+name,ccdtype='',noproc='no',fixpix='no',overscan='yes',trim='yes',zerocor='no',darkcor='no',flatcor='no',illumcor='no',fringecor='no',readcor='no',scancor='no',biassec=ovrsc,trimsec=trim,zero='',flat='',Stdout=1)

                        _gain = hds['HIERARCH ESO DET OUT1 GAIN']
                        _ron = hds['HIERARCH ESO DET OUT1 RON']
                        cosmics.lacos('trim_'+name+'.fits', output='c_'+name+'.fits', gain=_gain, readn=_ron, xorder=9, yorder=9, sigclip=4.5, sigfrac=0.5, objlim=1, verbose=True, interactive=False)

                        iraf.ccdproc('c_'+name,output=name,ccdtype='',noproc='no',fixpix='no',overscan='no',trim='no',zerocor=zcor,darkcor='no',flatcor=fcor,illumcor='no',fringecor='no',readcor='no',scancor='no',biassec='',trimsec='',zero=_zero,flat=sciflat,Stdout=1)
                        '''

                        iraf.ccdproc(img,output=name,ccdtype='',noproc='no',fixpix='no',overscan='yes',trim='yes',zerocor=zcor,darkcor='no',flatcor=fcor,illumcor='no',fringecor='no',readcor='no',scancor='no',biassec=ovrsc,trimsec=trim,zero=_zero,flat=sciflat,Stdout=1)

                    else:
                        pass


        elif 'STD' in key:
            for img in objdict[key]:
                num = img.rsplit('.',2)[1]
                name = key+'_'+num
                iraf.ccdproc(img,output=name,ccdtype='',noproc='no',fixpix='no',overscan='yes',trim='yes',zerocor=zcor,darkcor='no',flatcor=fcor,illumcor='no',fringecor='no',readcor='no',scancor='no',biassec=ovrsc,trimsec=trim,zero=_zero,flat=stdflat,Stdout=1)

        elif 'WAVE' in key:
            for img in objdict[key]:
                num = img.rsplit('.',2)[1]
                name = 'LAMP_'+num
                iraf.ccdproc(img,output=name,ccdtype='',noproc='no',fixpix='no',overscan='yes',trim='yes',zerocor=zcor,darkcor='no',flatcor=fcor,illumcor='no',fringecor='no',readcor='no',scancor='no',biassec=ovrsc,trimsec=trim,zero=_zero,flat=stdflat,Stdout=1)
Пример #53
0
    # 2008-06-04 08:42 IJC: Scale and combine the flats appropriately (as lamp is warming up, flux changes)
    ir.imcombine("@" + procflat,
                 output=_sflat,
                 combine="average",
                 reject="crreject",
                 scale="median",
                 weight="median",
                 bpmasks="")  # sigmas=_sflats

    ns.write_exptime(_sflat, itime=itime)
    print _sflat, _sdark
    ir.ccdproc(_sflat,
               output=_sflatdc,
               ccdtype="",
               fixpix="no",
               overscan="no",
               trim="no",
               zerocor="no",
               darkcor="yes",
               flatcor="no",
               dark=_sdark)

    if verbose: print "Done making flat frame!"

    ir.imdelete(_sflatdcn)
    ir.imdelete(_sflatdcn + 'big')

    # ------------------------------------
    # Do some FITS-file gymnastics to allow all 6 orders to be traced
    # ------------------------------------
    flatdat = pyfits.getdata(_sflatdc + postfn)
    flathdr = pyfits.getheader(_sflatdc + postfn)
Пример #54
0
def efoscfastredu(imglist, _listsens, _listarc, _ext_trace, _dispersionline,
                  _cosmic, _interactive):
    # print "LOGX:: Entering `efoscfastredu` method/function in %(__file__)s"
    # % globals()
    import string
    import os
    import re
    import sys
    os.environ["PYRAF_BETA_STATUS"] = "1"
    try:
        from astropy.io import fits as pyfits
    except:
        import pyfits
    from ntt.util import readhdr, readkey3
    import ntt
    import numpy as np
    dv = ntt.dvex()
    scal = np.pi / 180.
    if not _interactive:
        _interactive = False
        _inter = 'NO'
    else:
        _inter = 'YES'
    from pyraf import iraf

    iraf.noao(_doprint=0, Stdout=0)
    iraf.imred(_doprint=0, Stdout=0)
    iraf.ccdred(_doprint=0, Stdout=0)
    iraf.twodspec(_doprint=0, Stdout=0)
    iraf.longslit(_doprint=0, Stdout=0)
    iraf.onedspec(_doprint=0, Stdout=0)
    iraf.specred(_doprint=0, Stdout=0)
    toforget = [
        'ccdproc', 'imcopy', 'specred.apall', 'longslit.identify',
        'longslit.reidentify', 'specred.standard', 'longslit.fitcoords',
        'onedspec.wspectext'
    ]
    for t in toforget:
        iraf.unlearn(t)
    iraf.ccdred.verbose = 'no'  # not print steps
    iraf.specred.verbose = 'no'  # not print steps
    iraf.ccdproc.darkcor = 'no'
    iraf.ccdproc.fixpix = 'no'
    iraf.ccdproc.flatcor = 'no'
    iraf.ccdproc.zerocor = 'no'
    iraf.ccdproc.ccdtype = ''
    _gain = ntt.util.readkey3(ntt.util.readhdr(imglist[0]), 'gain')
    _ron = ntt.util.readkey3(ntt.util.readhdr(imglist[0]), 'ron')
    iraf.specred.apall.readnoi = _ron
    iraf.specred.apall.gain = _gain
    iraf.specred.dispaxi = 2
    iraf.longslit.dispaxi = 2
    iraf.longslit.mode = 'h'
    iraf.specred.mode = 'h'
    iraf.noao.mode = 'h'
    iraf.ccdred.instrument = "ccddb$kpno/camera.dat"
    iraf.set(direc=ntt.__path__[0] + '/')
    for img in imglist:
        hdr = ntt.util.readhdr(img)
        _tech = ntt.util.readkey3(hdr, 'tech')
        if _tech != 'SPECTRUM':
            sys.exit('error: ' + str(img) + ' is not a spectrum ')
        print '\n####  image name = ' + img + '\n'
        _grism0 = readkey3(hdr, 'grism')
        _filter0 = readkey3(hdr, 'filter')
        _slit0 = readkey3(hdr, 'slit')
        _object0 = readkey3(hdr, 'object')
        _date0 = readkey3(hdr, 'date-night')
        setup = (_grism0, _filter0, _slit0)
        _biassec0 = '[3:1010,1026:1029]'
        if _grism0 == 'Gr16':
            _trimsec0 = '[100:950,1:950]'
        elif _grism0 == 'Gr13':
            if _filter0 == 'Free':
                _trimsec0 = '[100:950,1:1015]'
            elif _filter0 == 'GG495':
                _trimsec0 = '[100:950,208:1015]'
            elif _filter0 == 'OG530':
                _trimsec0 = '[100:950,300:1015]'
        elif _grism0 == 'Gr11':
            _trimsec0 = '[100:950,5:1015]'
        else:
            _trimsec0 = '[100:950,5:1015]'
        _object0 = re.sub(' ', '', _object0)
        _object0 = re.sub('/', '_', _object0)
        nameout0 = 't' + str(_object0) + '_' + str(_date0)
        for _set in setup:
            nameout0 = nameout0 + '_' + _set
        nameout0 = ntt.util.name_duplicate(img, nameout0, '')
        timg = nameout0
        if os.path.isfile(timg):
            os.system('rm -rf ' + timg)
        iraf.imcopy(img, output=timg)
        iraf.ccdproc(timg,
                     output='',
                     overscan='no',
                     trim='yes',
                     zerocor="no",
                     flatcor="no",
                     readaxi='column',
                     trimsec=str(_trimsec0),
                     biassec=_biassec0,
                     Stdout=1)
        img = timg
        if _listarc:
            arcfile = ntt.util.searcharc(img, _listarc)[0]
        else:
            arcfile = ''
        if not arcfile:
            arcfile = ntt.util.searcharc(img, '')[0]
        else:
            iraf.ccdproc(arcfile,
                         output='t' + arcfile,
                         overscan='no',
                         trim='yes',
                         zerocor="no",
                         flatcor="no",
                         readaxi='column',
                         trimsec=str(_trimsec0),
                         biassec=str(_biassec0),
                         Stdout=1)
            arcfile = 't' + arcfile

        if _cosmic:
            # print cosmic rays rejection
            ntt.cosmics.lacos(img,
                              output='',
                              gain=_gain,
                              readn=_ron,
                              xorder=9,
                              yorder=9,
                              sigclip=4.5,
                              sigfrac=0.5,
                              objlim=1,
                              verbose=True,
                              interactive=False)
            print '\n### cosmic rays rejections ........ done '

        if not arcfile:
            print '\n### warning no arcfile \n exit '
        else:
            arcref = ntt.util.searcharc(img, '')[0]
            if arcfile[0] == '/':
                os.system('cp ' + arcfile + ' ' +
                          string.split(arcfile, '/')[-1])
                arcfile = string.split(arcfile, '/')[-1]
            arcref = string.split(arcref, '/')[-1]
            if arcref:
                os.system('cp ' + arcref + ' .')
                arcref = string.split(arcref, '/')[-1]
                if not os.path.isdir('database/'):
                    os.mkdir('database/')
                if os.path.isfile(
                        ntt.util.searcharc(img, '')[1] + '/database/id' +
                        re.sub('.fits', '', arcref)):
                    os.system('cp ' + ntt.util.searcharc(img, '')[1] +
                              '/database/id' + re.sub('.fits', '', arcref) +
                              ' database/')
                iraf.longslit.reidentify(
                    referenc=arcref,
                    images=arcfile,
                    interac=_inter,
                    section='column 10',
                    coordli='direc$standard/ident/Lines_HgCdHeNeAr600.dat',
                    overrid='yes',
                    step=0,
                    newaps='no',
                    nsum=5,
                    nlost=2,
                    mode='h',
                    verbose='no')
            else:
                iraf.longslit.identify(
                    images=arcfile,
                    section='column 10',
                    coordli='direc$standard/ident/Lines_HgCdHeNeAr600.dat',
                    nsum=10,
                    fwidth=7,
                    order=3,
                    mode='h')
            iraf.longslit.reident(
                referenc=arcfile,
                images=arcfile,
                interac='NO',
                section='column 10',
                coordli='direc$standard/ident/Lines_HgCdHeNeAr600.dat',
                overrid='yes',
                step=10,
                newaps='yes',
                nsum=5,
                nlost=2,
                mode='h',
                verbose='no')
            qqq = iraf.longslit.fitcoords(images=re.sub('.fits', '', arcfile),
                                          fitname=re.sub('.fits', '', arcfile),
                                          interac='no',
                                          combine='yes',
                                          databas='database',
                                          function='legendre',
                                          yorder=4,
                                          logfile='logfile',
                                          plotfil='',
                                          mode='h')
            iraf.specred.transform(input=img,
                                   output=img,
                                   minput='',
                                   fitnames=re.sub('.fits', '', arcfile),
                                   databas='database',
                                   x1='INDEF',
                                   x2='INDEF',
                                   y1='INDEF',
                                   y2='INDEF',
                                   flux='yes',
                                   mode='h',
                                   logfile='logfile')
            # ######################  check wavelength calibration ############
            _skyfile = ntt.__path__[0] + '/standard/ident/sky_' + setup[
                0] + '_' + setup[1] + '.fits'
            shift = ntt.efoscspec2Ddef.skyfrom2d(img, _skyfile)
            print '\n###     check in wavelengh performed ...... spectrum shifted of  ' + str(
                shift) + ' Angstrom \n'
            zro = pyfits.open(img)[0].header.get('CRVAL2')
            ntt.util.updateheader(img, 0, {'CRVAL2': [zro + int(shift), '']})
            std, rastd, decstd, magstd = ntt.util.readstandard(
                'standard_efosc_mab.txt')
            hdrt = readhdr(img)
            _ra = readkey3(hdrt, 'RA')
            _dec = readkey3(hdrt, 'DEC')
            _object = readkey3(hdrt, 'object')
            dd = np.arccos(
                np.sin(_dec * scal) * np.sin(decstd * scal) +
                np.cos(_dec * scal) * np.cos(decstd * scal) * np.cos(
                    (_ra - rastd) * scal)) * ((180 / np.pi) * 3600)
            if min(dd) < 100:
                _type = 'stdsens'
                ntt.util.updateheader(img, 0,
                                      {'stdname': [std[np.argmin(dd)], '']})
                ntt.util.updateheader(
                    img, 0, {'magstd': [float(magstd[np.argmin(dd)]), '']})
            else:
                _type = 'obj'
            print '\n###      EXTRACTION USING IRAF TASK APALL \n'
            result = []
            if _type == 'obj':
                imgex = ntt.util.extractspectrum(img, dv, _ext_trace,
                                                 _dispersionline, _interactive,
                                                 _type)
                ntt.util.updateheader(
                    imgex, 0, {'FILETYPE': [22107, 'extracted 1D spectrum ']})
                ntt.util.updateheader(
                    imgex, 0, {
                        'PRODCATG': [
                            'SCIENCE.' +
                            readkey3(readhdr(imgex), 'tech').upper(),
                            'Data product category'
                        ]
                    })
                ntt.util.updateheader(imgex, 0, {'TRACE1': [img, '']})
                result.append(imgex)
                if _listsens:
                    sensfile = ntt.util.searchsens(img, _listsens)[0]
                else:
                    sensfile = ''
                if not sensfile:
                    sensfile = ntt.util.searchsens(img, '')[0]
                if sensfile:
                    imgf = re.sub('.fits', '_f.fits', img)
                    _extinctdir = 'direc$standard/extinction/'
                    _extinction = 'extinction_lasilla.dat'
                    _observatory = 'lasilla'
                    _exptime = readkey3(hdrt, 'exptime')
                    _airmass = readkey3(hdrt, 'airmass')
                    ntt.util.delete(imgf)
                    iraf.specred.calibrate(input=imgex,
                                           output=imgf,
                                           sensiti=sensfile,
                                           extinct='yes',
                                           flux='yes',
                                           ignorea='yes',
                                           extinction=_extinctdir +
                                           _extinction,
                                           observatory=_observatory,
                                           airmass=_airmass,
                                           exptime=_exptime,
                                           fnu='no')
                    hedvec = {
                        'SENSFUN': [
                            string.split(sensfile, '/')[-1],
                            'sensitivity function'
                        ],
                        'FILETYPE':
                        [22208, '1D wavelength and flux calibrated spectrum '],
                        'SNR':
                        [ntt.util.StoN2(imgf, False), 'Average S/N ratio'],
                        'BUNIT':
                        ['erg/cm2/s/Angstrom', 'Flux Calibration Units'],
                        'TRACE1': [imgex, '']
                    }
                    ntt.util.updateheader(imgf, 0, hedvec)
                    imgout = imgf
                    imgd = ntt.efoscspec1Ddef.fluxcalib2d(img, sensfile)
                    ntt.util.updateheader(
                        imgd, 0, {
                            'FILETYPE': [
                                22209,
                                '2D wavelength and flux calibrated spectrum '
                            ]
                        })
                    ntt.util.updateheader(imgd, 0, {'TRACE1': [img, '']})
                    imgasci = re.sub('.fits', '.asci', imgout)
                    ntt.util.delete(imgasci)
                    iraf.onedspec.wspectext(imgout + '[*,1,1]',
                                            imgasci,
                                            header='no')
                    result = result + [imgout, imgd, imgasci]
            else:
                imgex = ntt.util.extractspectrum(img, dv, _ext_trace,
                                                 _dispersionline, _interactive,
                                                 'std')
                imgout = ntt.efoscspec1Ddef.sensfunction(
                    imgex, 'spline3', 6, _inter)
                result = result + [imgout]

    for img in result:
        if img[-5:] == '.fits':
            ntt.util.phase3header(img)  # phase 3 definitions
            ntt.util.airmass(img)  # phase 3 definitions
            ntt.util.updateheader(
                img, 0, {'quality': ['Rapid', 'Final or Rapid reduction']})
    return result
Пример #55
0
def reduce(imglist,files_arc, _cosmic, _interactive_extraction,_arc):

    import string
    import os
    import re
    import sys
    os.environ["PYRAF_BETA_STATUS"] = "1"
    try:      from astropy.io import fits as pyfits
    except:   import   pyfits
    import numpy as np
    import util
    import instruments
    import combine_sides as cs
    import cosmics
    from pyraf import iraf

    dv = util.dvex()
    scal = np.pi / 180.
    
    if not _interactive_extraction:
        _interactive = False
    else:
        _interactive = True

    if not _arc:
        _arc_identify = False
    else:
        _arc_identify = True

    iraf.noao(_doprint=0)
    iraf.imred(_doprint=0)
    iraf.ccdred(_doprint=0)
    iraf.twodspec(_doprint=0)
    iraf.longslit(_doprint=0)
    iraf.onedspec(_doprint=0)
    iraf.specred(_doprint=0)
    iraf.disp(inlist='1', reference='1')

    toforget = ['ccdproc', 'imcopy', 'specred.apall', 'longslit.identify', 'longslit.reidentify', 'specred.standard',
                'longslit.fitcoords', 'onedspec.wspectext']
    for t in toforget:
        iraf.unlearn(t)
    iraf.ccdred.verbose = 'no'
    iraf.specred.verbose = 'no'
    iraf.ccdproc.darkcor = 'no'
    iraf.ccdproc.fixpix = 'no'
    iraf.ccdproc.flatcor = 'no'
    iraf.ccdproc.zerocor = 'no'
    iraf.ccdproc.ccdtype = ''

    iraf.longslit.mode = 'h'
    iraf.specred.mode = 'h'
    iraf.noao.mode = 'h'
    iraf.ccdred.instrument = "ccddb$kpno/camera.dat"

    list_arc_b = []
    list_arc_r = []

    for arcs in files_arc:
        hdr = util.readhdr(arcs)
        if util.readkey3(hdr, 'VERSION') == 'kastb':
            list_arc_b.append(arcs)
        elif util.readkey3(hdr, 'VERSION') == 'kastr':
            list_arc_r.append(arcs)
        else:
            print util.readkey3(hdr, 'VERSION') + 'not in database'
            sys.exit()
    
    asci_files = []
    newlist = [[],[]]

    print '\n### images to reduce :',imglist
    #raise TypeError
    for img in imglist:
        if 'b' in img:
            newlist[0].append(img)
        elif 'r' in img:
            newlist[1].append(img)

    if len(newlist[1]) < 1:
        newlist = newlist[:-1]
    
    for imgs in newlist:
        hdr = util.readhdr(imgs[0])
        if util.readkey3(hdr, 'VERSION') == 'kastb':
            inst = instruments.kast_blue
        elif util.readkey3(hdr, 'VERSION') == 'kastr':
            inst = instruments.kast_red
        else:
            print util.readkey3(hdr, 'VERSION') + 'not in database'
            sys.exit()

        iraf.specred.dispaxi = inst.get('dispaxis')
        iraf.longslit.dispaxi = inst.get('dispaxis')

        _gain = inst.get('gain')
        _ron = inst.get('read_noise')
        iraf.specred.apall.readnoi = _ron
        iraf.specred.apall.gain = _gain

        _object0 = util.readkey3(hdr, 'OBJECT')
        _date0 = util.readkey3(hdr, 'DATE-OBS')


        _biassec0 = inst.get('biassec')
        _trimsec0 = inst.get('trimsec')

        _object0 = re.sub(' ', '', _object0)
        _object0 = re.sub('/', '_', _object0)
        nameout0 = str(_object0) + '_' + inst.get('name') + '_' + str(_date0)

        nameout0 = util.name_duplicate(imgs[0], nameout0, '')
        timg = nameout0
        print '\n### now processing :',timg,' for -> ',inst.get('name')
        if len(imgs) > 1:
            img_str = ''
            for i in imgs:
                img_str = img_str + i + ','
            iraf.imcombine(img_str, output=timg)
        else:
            img = imgs[0]
            if os.path.isfile(timg):
                os.system('rm -rf ' + timg)
            iraf.imcopy(img, output=timg)
        
        zero_file = inst.get('archive_zero_file')
        os.system('cp ' + zero_file + ' .')
        zero_file = string.split(zero_file, '/')[-1]
        
        flat_file = inst.get('archive_flat_file')
        os.system('cp ' + flat_file + ' .')
        flat_file = string.split(flat_file, '/')[-1]
        
        iraf.ccdproc(timg, output='', overscan='yes', trim='yes', zerocor="no", flatcor="no", readaxi='line',
                     trimsec=str(_trimsec0),biassec=str(_biassec0), Stdout=1)

        iraf.ccdproc(timg, output='', overscan='no', trim='no', zerocor="yes", flatcor="no", readaxi='line',
                     zero=zero_file,order=3, Stdout=1)
        iraf.ccdproc(timg, output='', overscan='no', trim='no', zerocor="no", flatcor="yes", readaxi='line',
                     flat=flat_file, Stdout=1)

        img = timg

        #raw_input("Press Enter to continue...")
        print '\n### starting cosmic removal'
        if _cosmic:
            array, header = cosmics.fromfits(img)
            c = cosmics.cosmicsimage(array, gain=inst.get('gain'), readnoise=inst.get('read_noise'), sigclip = 4.5, sigfrac = 0.5, objlim = 1.0)
            c.run(maxiter = 4)
            cosmics.tofits('cosmic_' + img, c.cleanarray, header)

        print '\n### cosmic removal finished'

        img='cosmic_' + img

        if inst.get('name') == 'kast_blue':
            arcfile = list_arc_b[0]
        elif inst.get('name') == 'kast_red':
            arcfile = list_arc_r[0]
        
        if not arcfile.endswith(".fits"):
            arcfile=arcfile+'.fits'

        if os.path.isfile(arcfile):
            util.delete('t' + arcfile)
            iraf.ccdproc(arcfile, output= 't' + arcfile, overscan='yes', trim='yes', zerocor="no", flatcor="no",
                         readaxi='line', trimsec=str(_trimsec0), biassec=str(_biassec0), Stdout=1)
            arcfile = 't' + arcfile
        else:
            print '\n### warning no arcfile \n exit '
            sys.exit()

        if not os.path.isdir('database/'):
                os.mkdir('database/')
        
        if _arc_identify:
            arc_ex=re.sub('.fits', '.ms.fits', arcfile)
            print '\n### arcfile : ',arcfile
            print '\n### arcfile extraction : ',arc_ex
            iraf.specred.apall(arcfile, output='', line = 'INDEF', nsum=10, interactive='no', extract='yes',find='yes', nfind=1 ,format='multispec', trace='no',back='no',recen='no')
            iraf.longslit.identify(images=arc_ex, section=inst.get('section'),coordli=inst.get('line_list'),function = 'spline3',order=3, mode='h')
        else:
            arcref = inst.get('archive_arc_extracted')
            arcrefid = inst.get('archive_arc_extracted_id')
            os.system('cp ' + arcref + ' .')
            arcref = string.split(arcref, '/')[-1]
            os.system('cp ' + arcrefid + ' ./database')

            arc_ex=re.sub('.fits', '.ms.fits', arcfile)

            print '\n###  arcfile : ',arcfile
            print '\n###  arcfile extraction : ',arc_ex
            print '\n###  arc referenece : ',arcref
            iraf.specred.apall(arcfile, output=arc_ex, line = 'INDEF', nsum=10, interactive='no', extract='yes',find='yes', nfind=1 ,format='multispec', trace='no',back='no',recen='no')

            iraf.longslit.reidentify(referenc=arcref, images=arc_ex, interac='NO', section=inst.get('section'), 
                                    coordli=inst.get('line_list'), shift='INDEF', search='INDEF',
                                    mode='h', verbose='YES', step=0,nsum=5, nlost=2, cradius=10, refit='yes',overrid='yes',newaps='no')
        
        #print '\n### checking sky lines '
        #_skyfile = inst.get('sky_file')
        #shift = util.skyfrom2d(img, _skyfile,'True')
        #print '\n### I found a shift of : ',shift

        print '\n### extraction using apall'
        result = []
        hdr_image = util.readhdr(img)
        _type=util.readkey3(hdr_image, 'object')

        if _type.startswith("arc") or _type.startswith("dflat") or _type.startswith("Dflat") or _type.startswith("Dbias") or _type.startswith("Bias"):
            print '\n### warning problem \n exit '
            sys.exit()
        else:
            imgex = util.extractspectrum(
                img, dv, inst, _interactive, 'obj')
            print '\n### applying wavelength solution'
            iraf.disp(inlist=imgex, reference=arc_ex)   
            sensfile = inst.get('archive_sens')
            os.system('cp ' + sensfile + ' .')
            sensfile = string.split(sensfile, '/')[-1]
            if sensfile:
                print '\n### sensitivity function : ',sensfile
                imgf = re.sub('.fits', '_f.fits', img)
                _extinction = inst.get('extinction_file')
                _observatory = inst.get('observatory')
                _exptime = util.readkey3(hdr, 'EXPTIME')
                _airmass = util.readkey3(hdr, 'AIRMASS')
                util.delete(imgf)
                dimgex='d'+imgex
                iraf.specred.calibrate(input=dimgex, output=imgf, sensiti=sensfile, extinct='yes',
                                        extinction=_extinction,flux='yes', ignorea='yes', airmass=_airmass, exptime=_exptime,
                                        fnu='no')
                imgout = imgf
                imgasci = re.sub('.fits', '.asci', imgout)
                errasci = re.sub('.fits', '_err.asci', imgout)
                util.delete(imgasci)
                iraf.onedspec.wspectext(imgout + '[*,1,1]', imgasci, header='no')
                iraf.onedspec.wspectext(imgout + '[*,1,4]', errasci, header='no')
                spec = np.transpose(np.genfromtxt(imgasci))
                err = np.transpose(np.genfromtxt(errasci))
                util.delete(errasci)
                final = np.transpose([spec[0], spec[1], err[1]])
                np.savetxt(imgasci, final)

                result = result + [imgout, imgasci]

        result = result + [imgex] + [timg]
       
        asci_files.append(imgasci)
        if not os.path.isdir(_object0 + '/'):
            os.mkdir(_object0 + '/')
            for img in result:
                os.system('mv ' + img + ' ' + _object0 + '/')
        else:
            for img in result:
                os.system('mv ' + img + ' ' + _object0 + '/')
        
        if not _arc_identify:
            util.delete(arcref)
        util.delete(sensfile)
        util.delete(zero_file)
        util.delete(flat_file)
        util.delete(arc_ex)
        util.delete(arcfile)
        util.delete('logfile')
        util.delete(dimgex)
        util.delete('cosmic_*')
    print '\n### now i will merge ...'
    if len(asci_files) > 1:
        final = cs.combine_blue_red(asci_files[0], asci_files[1], _object0)
    print '\n### final result in folder ',_object0,' is ',_object0+'_merged.asci'
    return result
def flat_correct(WORK_DIR):
  print '\n + Correcting images and arcs for flat\n'

  iraf.ccdproc(images=','.join(observations[WORK_DIR]['objects']+observations[WORK_DIR]['calibs']), ccdtype='', fixpix='yes', oversca='no', trim='yes', zerocor='no', darkcor='no', flatcor='yes', flat='masterflat_norm.fits', fixfile='badpix.txt')
Пример #57
0
def main():

    description = "> Performs pre-reduction steps"
    usage = "%prog    \t [option] \n Recommended syntax: %prog -i -c"

    parser = OptionParser(usage=usage, description=description, version="0.1")
    option, args = parser.parse_args()

    iraf.noao(_doprint=0)
    iraf.imred(_doprint=0)
    iraf.ccdred(_doprint=0)
    iraf.twodspec(_doprint=0)
    iraf.longslit(_doprint=0)
    iraf.onedspec(_doprint=0)
    iraf.specred(_doprint=0)

    iraf.ccdred.verbose = 'no'
    iraf.specred.verbose = 'no'
    iraf.ccdproc.darkcor = 'no'
    iraf.ccdproc.fixpix = 'no'
    iraf.ccdproc.flatcor = 'no'
    iraf.ccdproc.zerocor = 'no'
    iraf.ccdproc.ccdtype = ''

    iraf.longslit.mode = 'h'
    iraf.specred.mode = 'h'
    iraf.noao.mode = 'h'
    iraf.ccdred.instrument = "ccddb$kpno/camera.dat"

    mkarc = raw_input("Make arc? ([y]/n): ")
    mkflat = raw_input("Make flat? ([y]/n): ")

    if len(args) > 1:
        files = []
        sys.argv.append('--help')
        option, args = parser.parse_args()
        sys.exit()
    elif len(args) == 1:
        files = util.readlist(args[0])
        sys.exit()
    else:
        listfile = glob.glob('*.fits')
        files_science = []
        files_arc = []
        files_dflat = []
        #print 'checking your files ...'
        for img in listfile:
            _type = ''
            hdr0 = util.readhdr(img)
            _type = util.readkey3(hdr0, 'object')
            if 'flat' in _type.lower():
                files_dflat.append(img)
            elif 'arc' not in _type.lower() and 'arc' not in img.lower():
                files_science.append(img)
        if mkarc != 'n':
            mkarc_b = raw_input(
                "List blue arc files to combine (.fits will be added): "
            ).split()
            mkarc_r = raw_input(
                "List red arc files to combine (.fits will be added): ").split(
                )
            for arc in mkarc_b:
                files_arc.append(arc + '.fits')
            for arc in mkarc_r:
                files_arc.append(arc + '.fits')

    if mkarc != 'n':
        list_arc_b = []
        list_arc_r = []
        for arcs in files_arc:
            if instruments.blue_or_red(arcs)[0] == 'blue':
                list_arc_b.append(arcs)
            elif instruments.blue_or_red(arcs)[0] == 'red':
                list_arc_r.append(arcs)
            else:
                sys.exit()

    if mkflat != 'n':
        list_flat_b = []
        list_flat_r = []
        for dflats in files_dflat:
            if instruments.blue_or_red(dflats)[0] == 'blue':
                list_flat_b.append(dflats)
            elif instruments.blue_or_red(dflats)[0] == 'red':
                list_flat_r.append(dflats)
            else:
                sys.exit()

    # make pre_reduced if it doesn't exist
    if not os.path.isdir('pre_reduced/'):
        os.mkdir('pre_reduced/')

    # log the existing processed files (need to verify this works if pre_reduced is empty...)
    pfiles = []
    new_files = []
    for root, dirnames, filenames in os.walk('pre_reduced'):
        for file in filenames:
            if file.startswith('to'):
                pfiles.append(file)
    print(pfiles)

    # loop over each image in pre_reduced
    for img in listfile:
        hdr = util.readhdr(img)
        targ = util.readkey3(hdr, 'object')

        # if file is not not a processed file, run the overscan+trim code
        if 'to' + img not in pfiles:

            # if the file is a science file, grab the name for later
            if 'arc' not in targ.lower() and 'flat' not in targ.lower():
                new_files.append(img)
                print('Adding data for: ' + targ)

            inst = instruments.blue_or_red(img)[1]

            iraf.specred.dispaxi = inst.get('dispaxis')
            iraf.longslit.dispaxi = inst.get('dispaxis')

            _biassec0 = inst.get('biassec')
            _trimsec0 = inst.get('trimsec')

            ######################################################################
            #
            # JB: this chunk of code needs attention
            # It seems incredibly hacky for anything but Kast...
            #
            # overscan
            if not img.startswith('o') and inst.get('observatory') == 'lick':
                if os.path.isfile('pre_reduced/o' + img):
                    os.remove('pre_reduced/o' + img)
                util.kastbias(img, 'pre_reduced/o' + img)
            elif not img.startswith('o') and inst.get('observatory') != 'lick':
                if os.path.isfile('pre_reduced/o' + img):
                    os.remove('pre_reduced/o' + img)
                os.system('cp ' + img + ' ' + 'pre_reduced/' + img)

            # trim
            if not img.startswith('t') and inst.get('observatory') == 'lick':
                if os.path.isfile('pre_reduced/to' + img):
                    os.remove('pre_reduced/to' + img)
                iraf.ccdproc('pre_reduced/o' + img,
                             output='pre_reduced/to' + img,
                             overscan='no',
                             trim='yes',
                             zerocor="no",
                             flatcor="no",
                             readaxi='line',
                             trimsec=str(_trimsec0),
                             Stdout=1)

            elif not img.startswith('t') and inst.get('observatory') != 'lick':
                if os.path.isfile('pre_reduced/to' + img):
                    os.remove('pre_reduced/to' + img)
                iraf.ccdproc('pre_reduced/' + img,
                             output='pre_reduced/to' + img,
                             overscan='yes',
                             trim='yes',
                             zerocor="no",
                             flatcor="no",
                             readaxi='line',
                             trimsec=str(_trimsec0),
                             biassec=str(_biassec0),
                             Stdout=1)

    # combine the arcs
    if mkarc != 'n':

        # blue arcs
        if len(list_arc_b) > 0:
            if len(list_arc_b) == 1:
                arc_blue = list_arc_b[0]
                os.system('cp ' + 'pre_reduced/to' + arc_blue + ' ' +
                          'pre_reduced/ARC_blue.fits')
            else:
                arc_str = ''
                for arc in list_arc_b:
                    arc_str = arc_str + 'pre_reduced/to' + arc + ','
                if os.path.isfile('pre_reduced/ARC_blue.fits'):
                    os.remove('pre_reduced/ARC_blue.fits')
                iraf.imcombine(arc_str, output='pre_reduced/ARC_blue.fits')

        # red arcs
        if len(list_arc_r) > 0:
            if len(list_arc_r) == 1:
                arc_red = list_arc_r[0]
                os.system('cp ' + 'pre_reduced/to' + arc_red + ' ' +
                          'pre_reduced/ARC_red.fits')
            else:
                arc_str = ''
                for arc in list_arc_r:
                    arc_str = arc_str + 'pre_reduced/to' + arc + ','
                if os.path.isfile('pre_reduced/ARC_red.fits'):
                    os.remove('pre_reduced/ARC_red.fits')
                iraf.imcombine(arc_str, output='pre_reduced/ARC_red.fits')

    # combine the flats
    if mkflat != 'n':
        inter = 'yes'

        # blue flats
        if len(list_flat_b) > 0:
            br, inst = instruments.blue_or_red(list_flat_b[0])
            iraf.specred.dispaxi = inst.get('dispaxis')
            if len(list_flat_b) == 1:
                # Flat_blue = 'pre_reduced/to'+ list_flat_b[0]
                Flat_blue = list_flat_b[0]
            else:
                flat_str = ''
                for flat in list_flat_b:
                    flat_str = flat_str + 'pre_reduced/to' + flat + ','
                #subsets = 'no'
                if os.path.isfile('pre_reduced/toFlat_blue'):
                    os.remove('pre_reduced/toFlat_blue')
                iraf.flatcombine(flat_str,
                                 output='pre_reduced/toFlat_blue',
                                 ccdtype='',
                                 rdnoise=3.7,
                                 subsets='no',
                                 process='no')
                Flat_blue = 'Flat_blue.fits'

            #What is the output here? Check for overwrite
            iraf.specred.response('pre_reduced/to' + Flat_blue,
                                  normaliz='pre_reduced/to' + Flat_blue,
                                  response='pre_reduced/RESP_blue',
                                  interac=inter,
                                  thresho='INDEF',
                                  sample='*',
                                  naverage=2,
                                  function='legendre',
                                  low_rej=3,
                                  high_rej=3,
                                  order=60,
                                  niterat=20,
                                  grow=0,
                                  graphic='stdgraph')

        # red flats
        if len(list_flat_r) > 0:
            br, inst = instruments.blue_or_red(list_flat_r[0])
            iraf.specred.dispaxi = inst.get('dispaxis')
            if len(list_flat_r) == 1:
                # Flat_red = 'pre_reduced/to' + list_flat_r[0]
                Flat_red = list_flat_r[0]
            else:
                flat_str = ''
                for flat in list_flat_r:
                    flat_str = flat_str + 'pre_reduced/to' + flat + ','
                if os.path.isfile('pre_reduced/toFlat_red'):
                    os.remove('pre_reduced/toFlat_red')
                iraf.flatcombine(flat_str,
                                 output='pre_reduced/toFlat_red',
                                 ccdtype='',
                                 rdnoise=3.8,
                                 subsets='yes',
                                 process='no')
                Flat_red = 'Flat_red.fits'

            #What is the output here? Check for overwrite
            iraf.specred.response('pre_reduced/to' + Flat_red,
                                  normaliz='pre_reduced/to' + Flat_red,
                                  response='pre_reduced/RESP_red',
                                  interac=inter,
                                  thresho='INDEF',
                                  sample='*',
                                  naverage=2,
                                  function='legendre',
                                  low_rej=3,
                                  high_rej=3,
                                  order=80,
                                  niterat=20,
                                  grow=0,
                                  graphic='stdgraph')

    # science files should have 't' in front now
    # this just gets the base name, to prefix assumed below
    if new_files is not None:
        files_science = new_files

    # get all the science objects for the night
    science_targets = []
    for obj in files_science:
        hdr = util.readhdr(obj)
        _type = util.readkey3(hdr, 'object')
        science_targets.append(_type)

    # make a dir for each sci object
    science_targets = set(science_targets)
    for targ in science_targets:
        if not os.path.isdir('pre_reduced/' + targ + '/'):
            os.mkdir('pre_reduced/' + targ + '/')

    # copy the files into the obj dir
    for obj in files_science:
        hdr = util.readhdr(obj)
        targ = util.readkey3(hdr, 'object')
        if not obj.startswith('to'):
            os.system('cp ' + 'pre_reduced/to' + obj + ' ' + 'pre_reduced/' +
                      targ + '/')
        else:
            os.system('cp ' + 'pre_reduced/' + obj + ' ' + 'pre_reduced/' +
                      targ + '/')

    rawfiles = glob.glob('*.fits')
    ofiles = glob.glob('pre_reduced/o' + '*.fits')
    tfiles = glob.glob('pre_reduced/to' + '*.fits')

    # delete raw files from the pre_reduced dir
    # there shouldn't be any there though?
    # maybe if the overscan isn't implemented for that detector
    for img in rawfiles:
        util.delete('pre_reduced/' + img)

    # delete the ofiles from pre_reduced dir
    for img in ofiles:
        util.delete(img)
Пример #58
0
def reduceDark(dListFn, dMasterFn, mBiasFn):
    if os.path.isfile(dMasterFn + ".fits"):
        return

    zerocor = "no"
    if os.path.isfile(mBiasFn + ".fits"):
        zerocor = "yes"

    print("File list: @" + dListFn)
    print("dMasterFn: " + dMasterFn)
    iraf.reset(use_new_imt="no")
    iraf.ccdproc(
        "@" + dListFn,
        output="@" + dListFn + "//atlas_b",
        ccdtype=" ",
        max_cache=0,
        noproc="no",
        fixpix="no",
        overscan="no",
        trim="no",
        zerocor=zerocor,
        darkcor="no",
        flatcor="no",
        illumcor="no",
        fringecor="no",
        readcor="no",
        scancor="no",
        readaxis="line",
        fixfile="",
        biassec="",
        trimsec="",
        zero=mBiasFn,
        dark=" ",
        flat="",
        illum="",
        fringe="",
        minreplace=1.0,
        scantype="shortscan",
        nscan=1,
        interactive="no",
        function="legendre",
        order=1,
        sample="*",
        naverage=1,
        niterate=1,
        low_reject=3.0,
        high_reject=3.0,
        grow=0.0,
    )

    iraf.imcombine(
        "@" + dListFn + "//atlas_b",
        output=dMasterFn,
        headers="",
        bpmasks="",
        rejmasks="",
        nrejmasks="",
        expmasks="",
        sigmas="",
        imcmb="$I",
        logfile=dMasterFn + ".log",
        combine="median",
        reject="crreject",
        project="no",
        outtype="real",
        outlimits="",
        offsets="none",
        masktype="none",
        maskvalue="0",
        blank=0.0,
        scale="exposure",
        zero="none",
        weight="none",
        statsec="",
        expname="",
        lthreshold="INDEF",
        hthreshold="INDEF",
        nlow=1,
        nhigh=1,
        nkeep=1,
        mclip="yes",
        lsigma=3.0,
        hsigma=3.0,
        rdnoise="0.",
        gain="1.",
        snoise="0.",
        sigscale=0.1,
        pclip=-0.5,
        grow=0.0,
    )
Пример #59
0
def run_ccdp(input):
    iraf.noao.imred(_doprint=0)
    iraf.noao.imred.ccdred(_doprint=0)
    iraf.ccdproc(input[0],output=input[1],trim="no",trimsec="",zerocor="no",flatcor="no",flat="",ccdtype="",max_cache="128",noproc="no",fixpix="no",zero="",overscan="no",darkcor="yes",illumcor="no",fringecor="no",readcor="no",scancor="no",readaxis="line",fixfile="",biassec="",dark=input[2],illum="",fringe="",minreplace="1.0",scantype="shortscan",nscan="1",interactive="no",function="legendre",order="1",sample="*",naverage="1",niterate="1",low_reject="3",high_reject="3",grow="0.0")