Esempio n. 1
0
 def __init__(self, datatype=None):
     self.datatype=datatype
     self.fn_pattern=re.compile(".*")
     iraf.images()
     iraf.proto()
     self.statarea=StatArea
     return
Esempio n. 2
0
def ApplyBadPixelMask(images, cal_path, outbase = '_bpm'):
	"""
	#####################################################################################
	# 	Fix a list of images with a bad pixel mask
	#
	# PARAMETERS:
	# 	images - list of images to fix
	#	cal_path - path to calibration data
	#   outbase - addition to the name of the image after mask has been applied
	#
	# RETURNS:
	#	list of fixed images
	#####################################################################################
	"""
   
	print '########################################'
	print '# Applying Bad Pixel Masks'
	print '########################################'

    # finds the bad pixel mask
	badPixelMask = [FindPixelMask(i, cal_path) for i in images]

	# Build the list of output image names
	out = [os.path.splitext(i) for i in images]		# Split off the extension
	out = [i[0] + outbase + '.fit' for i in out]	# Paste the outbase at the end of the filename 
    												# and put the extension back on

	# Set up to call the task
	iraf.set(clobber='yes')
	iraf.proto()
	iraf.fixpix.unlearn()		# Forget everything
	iraf.fixpix.mode = 'h' 		# Don't ask for user input

	for (i,o,m) in zip(images, out, badPixelMask):

		# gets image data and copies it to the corresponding output file name
		shutil.copy(i,o)

		#runs fixpix on the output file (fixpix overwrites file data)
		if not os.path.isfile(i):
			print i + ": Input file does not exist." 
		elif not os.path.isfile(m):
			print i + ": No pixel mask applied."
		else: 

			try:

				#set parameters
				iraf.fixpix.images = o
				iraf.fixpix.masks = m

				print i + ": applying mask at " + m
				iraf.fixpix()

			except iraf.IrafError, e:
				print "fixpix failed"
				print "error #" + str(e.errno)
				print "Msg: " + e.errmsg
				print "Task: " + e.errtask
				raise e
Esempio n. 3
0
def FixBadPixels(PC,images,nightdir):
    """ This will run iraf task proto.fixpix to interpolate badpixels """
    PixelMask = os.path.join(nightdir,PC.BadPixelMaskName)
    if not os.path.isfile(PixelMask):
        print("No Bad Pixel Mask file found by the name "+ PixelMask)
        print("Hence skipping Bad pixel interpolation")
        return

    iraf.proto(_doprint=0)
    iraf.fixpix.unlearn()
    iraf.fixpix(images=images,masks=PixelMask)
Esempio n. 4
0
def marksn2(img,fitstab,frame=1,fitstab2='',verbose=False):
   from pyraf import iraf
   from numpy import array   #,log10
   import lsc
   iraf.noao(_doprint=0)
   iraf.digiphot(_doprint=0)
   iraf.daophot(_doprint=0)
   iraf.images(_doprint=0)
   iraf.imcoords(_doprint=0)
   iraf.proto(_doprint=0)
   iraf.set(stdimage='imt1024')
   hdr=lsc.util.readhdr(fitstab)
   _filter=lsc.util.readkey3(hdr,'filter')
   column=lsc.lscabsphotdef.makecatalogue([fitstab])[_filter][fitstab]

   rasex=array(column['ra0'],float)
   decsex=array(column['dec0'],float)


   if fitstab2:
      hdr=lsc.util.readhdr(fitstab2)
      _filter=lsc.util.readkey3(hdr,'filter')
      _exptime=lsc.util.readkey3(hdr,'exptime')
      column=lsc.lscabsphotdef.makecatalogue([fitstab2])[_filter][fitstab2]
      rasex2=array(column['ra0'],float)
      decsex2=array(column['dec0'],float)

   iraf.set(stdimage='imt1024')
   iraf.display(img + '[0]',frame,fill=True,Stdout=1)
   vector=[]
   for i in range(0,len(rasex)):
      vector.append(str(rasex[i])+' '+str(decsex[i]))

   xy = iraf.wcsctran('STDIN',output="STDOUT",Stdin=vector,Stdout=1,image=img+'[0]',inwcs='world',units='degrees degrees',outwcs='logical',\
                         formats='%10.1f %10.1f',verbose='yes')[3:]
   iraf.tvmark(frame,'STDIN',Stdin=list(xy),mark="circle",number='yes',label='no',radii=10,nxoffse=5,nyoffse=5,color=207,txsize=2)

   if verbose:
 #     print 2.5*log10(_exptime)
      for i in range(0,len(column['ra0'])):
         print xy[i],column['ra0'][i],column['dec0'][i],column['magp3'][i],column['magp4'][i],column['smagf'][i],column['magp2'][i]

   if fitstab2:
      vector2=[]
      for i in range(0,len(rasex2)):
         vector2.append(str(rasex2[i])+' '+str(decsex2[i]))
      xy1 = iraf.wcsctran('STDIN',output="STDOUT",Stdin=vector2,Stdout=1,image=img+'[0]',inwcs='world',units='degrees degrees',outwcs='logical',\
                            formats='%10.1f %10.1f',verbose='yes')[3:]
      iraf.tvmark(frame,'STDIN',Stdin=list(xy1),mark="cross",number='yes',label='no',radii=10,nxoffse=5,nyoffse=5,color=205,txsize=2)
Esempio n. 5
0
def skysub(inlist,
           inpref='',
           outpref='s',
           mskpref='none',
           ndthpos=9,
           iternum=50,
           nsigma=3,
           second=False):

    # load IRAF package
    iraf.proto()

    # check input image list
    inimg_arr = check_input(inlist, inpref)
    if isinstance(inimg_arr, int):
        return 1

    # check output
    outimg_arr = check_outpref(outpref, inimg_arr)
    if isinstance(outimg_arr, int):
        return 1

    # check mask images
    if mskpref.lower() == 'none' or mskpref == '':
        mask = 0
    else:
        mask = 1
        mskimg_arr = check_inpref(mskpref, inimg_arr)
        if isinstance(mskimg_arr, int):
            return 1

    # check dithering width
    if ndthpos != 5 and ndthpos != 9:
        print >> sys.stderr, 'number of dithering position should be 5 or 9'

    if iternum <= 0:
        print >> sys.stderr, 'invalid iternum value (%d)' % iternum
        return 1

    if nsigma <= 0:
        print >> sys.stderr, 'invalid nsigma value (%f)' % nsigma
        return 1

    # check input, output, and mask files and record mask frame into header
    pre_pos = 100
    in_array = []
    out_array = []
    mask_array = []
    iraf.unlearn('hedit')
    for i in range(len(inimg_arr)):

        if mask == 1:
            if mskpref[0] != ':':
                if not second:
                    iraf.hedit(inimg_arr[i],
                               'objmask',
                               mskimg_arr[i] + '[pl]',
                               add='yes',
                               verify='no')
                else:
                    iraf.hedit(inimg_arr[i],
                               'objmask',
                               mskimg_arr[i],
                               add='yes',
                               verify='no')

        # get dithering position from header
        im = pyfits.open(inimg_arr[i])
        pos = int(im[0].header['I_DTHPOS'])
        im.close()

        # record each dithering set into subset
        if pos < pre_pos:
            if i != 0:
                in_array.append(in_subset)
                out_array.append(out_subset)
                if mask == 1:
                    mask_array.append(mask_subset)
            in_subset = []
            out_subset = []
            in_subset.append(inimg_arr[i])
            out_subset.append(outimg_arr[i])
            if mask == 1:
                mask_subset = []
                mask_subset.append(mskimg_arr[i])
            pre_pos = pos
        else:
            in_subset.append(inimg_arr[i])
            out_subset.append(outimg_arr[i])
            if mask == 1:
                mask_subset.append(mskimg_arr[i])
            pre_pos = pos

    # record rest of frames
    in_array.append(in_subset)
    out_array.append(out_subset)
    if mask == 1:
        mask_array.append(mask_subset)

    # number of subsets
    n_subset = len(in_array)

    # sky subtraction
    tmp = tempfile.NamedTemporaryFile(suffix='', prefix='', dir='/tmp')
    tmp_prefix = tmp.name
    tmp.close()

    for i in range(n_subset):
        tmp_sky = '%s_sky_%03d.fits' % (tmp_prefix, int(i))
        tmp_subset = '%s_subset_%03d.lst' % (tmp_prefix, int(i))
        # make subset list
        f = open(tmp_subset, 'w')
        for j in range(len(in_array[i])):
            f.write(in_array[i][j] + '\n')
        f.close()
        # combine subset
        if mask == 1:
            ret = zcombine(tmp_subset,
                           tmp_sky,
                           combine='median',
                           reject='sigclip',
                           masktype='!OBJMASK')
        else:
            ret = zcombine(tmp_subset,
                           tmp_sky,
                           combine='median',
                           reject='sigclip',
                           masktype='none')
        if ret != 0:
            remove_temp_all(tmp_prefix)
            return 1
        os.remove(tmp_subset)

        # calculate median of combined sky background
        iraf.unlearn('imstat')
        ret = iraf.imstat(tmp_sky,
                          format='no',
                          fields='midpt',
                          nclip=iternum,
                          lsigma=nsigma,
                          usigma=nsigma,
                          Stdout=1)
        if len(ret) == 1:
            skymed = float(ret[0])
        else:
            remove_temp_all(tmp_prefix)
            print >> sys.stderr, 'failed to calculate median of the combined sky background'
            return 1

        # save sky data into memory
        sky = pyfits.open(tmp_sky)
        sky_data = sky[0].data
        sky.close()
        os.remove(tmp_sky)

        # subtract sky
        for j in range(len(in_array[i])):
            if mask == 1:
                iraf.unlearn('mimstat')
                if not second:
                    ret = iraf.mimstat(in_array[i][j],
                                       imasks=mask_array[i][j] + '[pl]',
                                       format='no',
                                       fields='midpt',
                                       nclip=iternum,
                                       lsigma=nsigma,
                                       usigma=nsigma,
                                       Stdout=1)
                else:
                    ret = iraf.mimstat(in_array[i][j],
                                       imasks=mask_array[i][j],
                                       format='no',
                                       fields='midpt',
                                       nclip=iternum,
                                       lsigma=nsigma,
                                       usigma=nsigma,
                                       Stdout=1)
            else:
                iraf.unlearn('imstat')
                ret = iraf.imstat(in_array[i][j],
                                  format='no',
                                  fields='midpt',
                                  nclip=iternum,
                                  lsigma=nsigma,
                                  usigma=nsigma,
                                  Stdout=1)
            if len(ret) == 1:
                objmed = float(ret[0])
            else:
                remove_temp_all(tmp_prefix)
                print >> sys.stderr, 'failed to calculate median of the object background'
                return 1
            # record input fits data into memory
            im = pyfits.open(in_array[i][j])
            im_hdr = im[0].header
            im_data = im[0].data
            im.close()

            # subtract sky in memory
            out_data = im_data - (sky_data * objmed / skymed)

            # save output fits file
            hdu = pyfits.PrimaryHDU(out_data)
            imgout = pyfits.HDUList([hdu])
            imgout[0].header = im_hdr
            imgout.writeto(out_array[i][j])
            imgout.close()

    remove_temp_all(tmp_prefix)
    return 0
Esempio n. 6
0
def skysub_mod(inlist,
               inpref='',
               outpref='s',
               mskpref='none',
               ndthpos=9,
               iternum=50,
               nsigma=3,
               second=False,
               step=0.05):

    # load IRAF package
    iraf.proto()

    # check step size
    if step >= 0.5:
        print >> sys.stderr, 'step size should be smaller than 0.5'
        return 1

    # check input image list
    inimg_arr = check_input(inlist, inpref)
    if isinstance(inimg_arr, int):
        return 1

    # check output
    outimg_arr = check_outpref(outpref, inimg_arr)
    if isinstance(outimg_arr, int):
        return 1

    # check mask images
    if mskpref.lower() == 'none' or mskpref == '':
        mask = 0
    else:
        mask = 1
        mskimg_arr = check_inpref(mskpref, inimg_arr)
        if isinstance(mskimg_arr, int):
            return 1

    # check dithering width
    if ndthpos != 5 and ndthpos != 9:
        print >> sys.stderr, 'number of dithering position should be 5 or 9'

    if iternum <= 0:
        print >> sys.stderr, 'invalid iternum value (%d)' % iternum
        return 1

    if nsigma <= 0:
        print >> sys.stderr, 'invalid nsigma value (%f)' % nsigma
        return 1

    # check input, output, and mask files and record mask frame into header
    pre_pos = 100
    in_array = []
    out_array = []
    mask_array = []
    iraf.unlearn('hedit')
    for i in range(len(inimg_arr)):

        if mask == 1:
            if mskpref[0] != ':':
                if not second:
                    iraf.hedit(inimg_arr[i],
                               'objmask',
                               mskimg_arr[i] + '[pl]',
                               add='yes',
                               verify='no')
                else:
                    iraf.hedit(inimg_arr[i],
                               'objmask',
                               mskimg_arr[i],
                               add='yes',
                               verify='no')

        # get dithering position from header
        im = pyfits.open(inimg_arr[i])
        pos = int(im[0].header['I_DTHPOS'])
        im.close()

        # record each dithering set into subset
        if pos < pre_pos:
            if i != 0:
                in_array.append(in_subset)
                out_array.append(out_subset)
                if mask == 1:
                    mask_array.append(mask_subset)
            in_subset = []
            out_subset = []
            in_subset.append(inimg_arr[i])
            out_subset.append(outimg_arr[i])
            if mask == 1:
                mask_subset = []
                mask_subset.append(mskimg_arr[i])
            pre_pos = pos
        else:
            in_subset.append(inimg_arr[i])
            out_subset.append(outimg_arr[i])
            if mask == 1:
                mask_subset.append(mskimg_arr[i])
            pre_pos = pos

    # record rest of frames
    in_array.append(in_subset)
    out_array.append(out_subset)
    if mask == 1:
        mask_array.append(mask_subset)

    # number of subsets
    n_subset = len(in_array)

    # sky subtraction
    tmp = tempfile.NamedTemporaryFile(suffix='', prefix='', dir='/tmp')
    tmp_prefix = tmp.name
    tmp.close()

    for i in range(n_subset):
        tmp_sky = '%s_sky_%03d.fits' % (tmp_prefix, int(i))
        tmp_subset = '%s_subset_%03d.lst' % (tmp_prefix, int(i))
        # make subset list
        f = open(tmp_subset, 'w')
        for j in range(len(in_array[i])):
            f.write(in_array[i][j] + '\n')
        f.close()
        # combine subset
        if mask == 1:
            ret = zcombine(tmp_subset,
                           tmp_sky,
                           combine='median',
                           reject='sigclip',
                           masktype='!OBJMASK')
        else:
            ret = zcombine(tmp_subset,
                           tmp_sky,
                           combine='median',
                           reject='sigclip',
                           masktype='none')
        if ret != 0:
            remove_temp_all(tmp_prefix)
            return 1
        os.remove(tmp_subset)

        # calculate median of combined sky background
        iraf.unlearn('imstat')
        ret = iraf.imstat(tmp_sky,
                          format='no',
                          fields='midpt',
                          nclip=iternum,
                          lsigma=nsigma,
                          usigma=nsigma,
                          Stdout=1)
        if len(ret) == 1:
            skymed = float(ret[0])
        else:
            remove_temp_all(tmp_prefix)
            print >> sys.stderr, 'failed to calculate median of the combined sky background'
            return 1

        # save sky data into memory
        sky = pyfits.open(tmp_sky)
        sky_data = sky[0].data
        sky_arr = np.reshape(np.array(sky[0].data - skymed), sky[0].data.size)
        sky.close()
        os.remove(tmp_sky)

        # subtract sky
        for j in range(len(in_array[i])):
            if mask == 1:
                iraf.unlearn('mimstat')
                if not second:
                    ret = iraf.mimstat(in_array[i][j],
                                       imasks=mask_array[i][j] + '[pl]',
                                       format='no',
                                       fields='midpt',
                                       nclip=iternum,
                                       lsigma=nsigma,
                                       usigma=nsigma,
                                       Stdout=1)
                else:
                    ret = iraf.mimstat(in_array[i][j],
                                       imasks=mask_array[i][j],
                                       format='no',
                                       fields='midpt',
                                       nclip=iternum,
                                       lsigma=nsigma,
                                       usigma=nsigma,
                                       Stdout=1)
            else:
                iraf.unlearn('imstat')
                ret = iraf.imstat(in_array[i][j],
                                  format='no',
                                  fields='midpt',
                                  nclip=iternum,
                                  lsigma=nsigma,
                                  usigma=nsigma,
                                  Stdout=1)
            if len(ret) == 1:
                objmed = float(ret[0])
            else:
                remove_temp_all(tmp_prefix)
                print >> sys.stderr, 'failed to calculate median of the object background'
                return 1

            # record input fits data into memory
            im = pyfits.open(in_array[i][j])
            im_hdr = im[0].header
            im_data = im[0].data
            im_arr = np.reshape(np.array(im[0].data - objmed), im[0].data.size)
            im.close()

            # check if minimum sigma is obtained at scale_factor = 1.0
            m1, s1 = meanclip(im_arr - sky_arr)
            m2, s2 = meanclip(im_arr - (1.0 + step) * sky_arr)
            m3, s3 = meanclip(im_arr - (1.0 - step) * sky_arr)

            if s1 < s2 and s1 < s3:
                print 'scale factor = 1.0'
                # subtract sky in memory
                out_data = (im_data - objmed) - (sky_data - skymed)

            else:
                # find minimum sigma with coarse sampling
                n = 1
                min_i = 0
                while min_i - 1 < 0 or min_i + 1 >= len(s_list):
                    s = -1.0 * n
                    ds = 0.5
                    sigma_list = []
                    s_list = []
                    while s <= 1.0 * n:
                        sub = im_arr - (s * sky_arr)
                        mean, sigma = meanclip(sub)
                        sigma_list.append(sigma)
                        s_list.append(s)
                        s += ds
                    min_i, min_sigma = min(enumerate(sigma_list),
                                           key=itemgetter(1))
                    n += 1

                # find minimum sigma with fine sampling
                s = s_list[min_i - 1]
                ds = step
                s2_list = []
                sigma2_list = []
                while s <= s_list[min_i + 1]:
                    sub = im_arr - (s * sky_arr)
                    mean, sigma = meanclip(sub)
                    sigma2_list.append(sigma)
                    s2_list.append(s)
                    s += ds
                min_i, min_sigma = min(enumerate(sigma2_list),
                                       key=itemgetter(1))

                print 'scale factor = %f' % s2_list[min_i]

                # subtract sky in memory
                out_data = (im_data -
                            objmed) - (sky_data - skymed) * s2_list[min_i]

            # save output fits file
            hdu = pyfits.PrimaryHDU(out_data)
            imgout = pyfits.HDUList([hdu])
            imgout[0].header = im_hdr
            imgout.writeto(out_array[i][j])
            imgout.close()

    remove_temp_all(tmp_prefix)
    return 0
Esempio n. 7
0
def mksky(inlist, outfits, inpref='', mskpref='none', second=False):

    # load IRAF package
    iraf.proto()

    # check input image list
    inimg_arr = check_input(inlist, inpref)
    if isinstance(inimg_arr, int):
        return 1

    # check output fits
    if os.access(outfits, os.R_OK):
        print >> sys.stderr, 'operation would overwrite exisiting image (%s)' % outfits
        return 1

    # check mask images
    if mskpref.lower() == 'none' or mskpref == '':
        mask = 0
    else:
        mask = 1
        mskimg_arr = check_inpref(mskpref, inimg_arr)
        if isinstance(mskimg_arr, int):
            return 1

    # check input, output, and mask files and record mask frame into header
    in_subset = []
    if mask == 1:
        mask_subset = []
    iraf.unlearn('hedit')
    for i in range(len(inimg_arr)):
        if mask == 1:
            if mskpref[0] != ':':
                if not second:
                    iraf.hedit(inimg_arr[i],
                               'objmask',
                               mskimg_arr[i] + '[pl]',
                               add='yes',
                               verify='no')
                else:
                    iraf.hedit(inimg_arr[i],
                               'objmask',
                               mskimg_arr[i],
                               add='yes',
                               verify='no')

        in_subset.append(inimg_arr[i])

    # sky subtraction
    tmp = tempfile.NamedTemporaryFile(suffix='', prefix='', dir='/tmp')
    tmp_prefix = tmp.name
    tmp.close()

    tmp_subset = '%s_subset_%03d.lst' % (tmp_prefix, int(i))
    # make subset list
    f = open(tmp_subset, 'w')
    for j in range(len(in_subset)):
        f.write(in_subset[j] + '\n')
    f.close()
    # combine subset
    if mask == 1:
        ret = zcombine(tmp_subset,
                       outfits,
                       combine='median',
                       reject='sigclip',
                       masktype='!OBJMASK')
    else:
        ret = zcombine(tmp_subset,
                       outfits,
                       combine='median',
                       reject='sigclip',
                       masktype='none')
    if ret != 0:
        remove_temp_all(tmp_prefix)
        return 1

    remove_temp_all(tmp_prefix)
    return 0
Esempio n. 8
0
def efoscreduction(imglist, _interactive, _doflat, _dobias, listflat, listbias, _dobadpixel, badpixelmask,
                   fringingmask, _archive, typefile, filenameobjects, _system, _cosmic, _verbose=False, method='iraf'):
    # print "LOGX:: Entering `efoscreduction` method/function in %(__file__)s"
    # % globals()
    import ntt
    from ntt.efoscphotredudef import searchbias
    from ntt.util import delete, readhdr, readkey3, display_image, searchflat, rangedata, correctcard
    from numpy import argmin, min, abs, sqrt
    import string
    import os
    import re
    import math
    import sys
    from pyraf import iraf
    # ##   Call and set parameters for useful iraf tasks
    iraf.noao(_doprint=0)
    iraf.imred(_doprint=0)
    iraf.ccdred(_doprint=0)
    iraf.proto(_doprint=0)

    toforget = ['ccdproc', 'zerocombine',
                'flatcombine', 'imreplace', 'proto.fixpix']
    for t in toforget:
        iraf.unlearn(t)

    iraf.ccdproc.darkcor = 'no'
    iraf.ccdproc.fixpix = 'no'
    iraf.ccdproc.flatcor = 'no'
    iraf.ccdproc.zerocor = 'no'
    iraf.ccdproc.overscan = 'no'
    iraf.ccdproc.ccdtype = ''
    iraf.ccdproc.biassec = ''
    iraf.ccdred.instrument = "/dev/null"

    if _verbose:
        iraf.ccdred.verbose = 'yes'
    else:
        iraf.ccdred.verbose = 'no'
    import datetime
    import time
    #      starttime=time.time()
    now = datetime.datetime.now()
    datenow = now.strftime('20%y%m%d%H%M')
    MJDtoday = 55927 + (datetime.date.today() - datetime.date(2012, 01, 01)).days
    outputfile = []
    reduceddata = rangedata(imglist)
    img = re.sub('\n', '', imglist[0])
    hdr = readhdr(img)
    _gain = readkey3(hdr, 'gain')
    _rdnoise = readkey3(hdr, 'ron')
    _instrume = readkey3(hdr, 'instrume')
    _trimsec = '[3:1010,1:1015]'
    biaslist = {}
    flatlist1 = {}
    flatlist2 = {}
    objectlist = {}
    filterlist1 = []
    filterlist2 = []
    for img in imglist:
        _type = ''
        img = re.sub('\n', '', img)
        hdr = readhdr(img)
        _naxis1 = readkey3(hdr, 'NAXIS1')
        _naxis2 = readkey3(hdr, 'NAXIS2')
        if _naxis1 != 1030 or _naxis2 != 1030:
            ntt.util.writeinthelog(
                'image ' + str(img) + ' different dimension =\n', './logNTT.txt')
            _type = 'not good'
        if not _type and readkey3(hdr, 'speed') != 'fastL':
            _type = 'not good'
        if not _type and readkey3(hdr, 'instrume') != 'efosc':
            _type = 'not good'
        _imagetype = readkey3(hdr, 'tech')
        if not _type and _imagetype == 'SPECTRUM':
            _type = 'spectroscopic data'
        if not _type:
            _exptime = readkey3(hdr, 'exptime')
            _date = readkey3(hdr, 'date-night')
            _filter = readkey3(hdr, 'filter')
            if float(_exptime) == 0.0:
                if _date not in biaslist:
                    biaslist[_date] = []
                biaslist[_date].append(img)
                _type = 'bias'
            if not _type:
                _object = readkey3(hdr, 'object')
                if _filter.lower() in ['g782', 'r784', 'z623', 'u640', 'b639', 'v641', 'r642',
                                       'i705'] and _imagetype == 'IMAGE':
                    if 'sky,flat' in _object.lower():
                        _type = 'flat'
                    elif 'dome' in _object.lower() or 'flat' in _object.lower():
                        _type = 'flat dome'
                    if _type == 'flat':
                        if _filter not in filterlist1:
                            filterlist1.append(_filter)
                            flatlist1[_filter] = []
                        flatlist1[_filter].append(img)
                    if _type == 'flat dome':
                        if _filter not in filterlist2:
                            filterlist2.append(_filter)
                            flatlist2[_filter] = []
                        flatlist2[_filter].append(img)
            if not _type:
                _catg = readkey3(hdr, 'catg')
                if 'science' in _catg.lower() or 'acquisition' in _catg.lower():
                    _type = 'object'
                    if _filter not in objectlist:
                        objectlist[_filter] = []
                    objectlist[_filter].append(img)
                    if 'acquisition' in _catg.lower():
                        try:
                            correctcard(img)
                            _ra1, _dec1, _name = ntt.util.correctobject(
                                img, 'standard_efosc_mab.txt')
                            _ra1, _dec1, _name = ntt.util.correctobject(
                                img, filenameobjects)
                        except:
                            pass

                elif 'focus' in _object.lower():
                    _type = 'not good'
            if not _type:
                print '\n### warning: object not recognized '
                _object = readkey3(hdr, 'object')
                print img, _object, _imagetype
                answ = raw_input(
                    'what is it: bias [1], flat [3], object[4], test [5] ?  [5] ')
                if not answ:
                    answ = '5'
                if answ == '1':
                    if _date not in biaslist:
                        biaslist[_date] = ()
                    biaslist[_date].append(img)
                elif answ == '4':
                    if _filter not in objectlist:
                        objectlist[_filter] = []
                    objectlist[_filter].append(img)
                elif answ == '3':
                    tt = raw_input('dome or sky [d/[s]] ? ')
                    if tt == 's':
                        _type = 'flat'
                        _filter = readkey3(hdr, 'filter')
                        if _filter not in filterlist1:
                            filterlist1.append(_filter)
                            flatlist1[_filter] = []
                        flatlist1[_filter].append(img)
                    elif tt == 'd':
                        _type = 'flat dome'
                        _filter = readkey3(hdr, 'filter')
                        if _filter not in filterlist2:
                            filterlist2.append(_filter)
                            flatlist2[_filter] = []
                        flatlist2[_filter].append(img)
                elif answ == '5':
                    _type = 'not good'

    filterlist = list(set(filterlist1 + filterlist2))
    if _verbose:
        print filterlist1
        print filterlist2
        print flatlist1
        print flatlist2
    flatlist = {}
    for _filt in filterlist:
        if _filt not in flatlist1.keys():
            if _filt in flatlist2.keys():
                if len(flatlist2[_filt]) >= 3:
                    flatlist[_filt] = flatlist2[_filt]
        elif len(flatlist1[_filt]) < 3:
            if _filt in flatlist2.keys():
                if len(flatlist2[_filt]) >= 3:
                    flatlist[_filt] = flatlist2[_filt]
        elif _filt in flatlist1.keys():
            if len(flatlist1[_filt]) >= 3:
                flatlist[_filt] = flatlist1[_filt]

    listaout = []
    if _verbose:
        print '\n### flat ', str(flatlist), '\n'
        print '\n### bias ', str(biaslist), '\n'
        print '\n### object ', str(objectlist), '\n'
        ###### masterbias  #################
    if _dobias:
        if not _archive:
            if listbias:
                masterbiaslist = listbias
            else:
                masterbiaslist = []
                if biaslist:
                    for _date in biaslist:
                        print '\n do bias ' + str(_date) + '\n'
                        biaslist[_date] = rejectbias(
                            biaslist[_date], False, 10)
                        if len(biaslist[_date]) >= 3:
                            masterbiasfile = 'bias_' + \
                                str(_date) + '_' + str(MJDtoday) + '.fits'
                            delete(masterbiasfile)
                            f = open('biaslist', 'w')
                            h = open('obiaslist', 'w')
                            for img in biaslist[_date]:
                                f.write(img + '\n')
                                h.write('o' + img + '\n')
                                delete('o' + img)
                            f.close()
                            h.close()
                            try:
                                print 'processing bias .....'
                                iraf.ccdproc('@biaslist', output='@obiaslist', overscan="no", trim="yes", zerocor='no',
                                             fixpix='no', ccdtype='', flatcor='no', darkcor='no', biassec='',
                                             trimsec=str(_trimsec), readaxi='column', Stdout=1)
                                iraf.zerocombine('@obiaslist', output=masterbiasfile, combine='median',
                                                 reject='ccdclip', ccdtype='', process='no',
                                                 rdnoise=_rdnoise, gain=_gain, Stdout=1)
                                correctcard(masterbiasfile)
                                num = 0
                                for img in biaslist[_date]:
                                    num = num + 1
                                    ntt.util.updateheader(masterbiasfile, 0, {
                                        'PROV' + str(num): [readkey3(readhdr(img), 'ARCFILE'), 'Originating file']})
                                    ntt.util.updateheader(masterbiasfile, 0, {
                                        'TRACE' + str(num): [readkey3(readhdr(img), 'ARCFILE'), 'Originating file']})
                                    delete('o' + img)
                                ntt.util.updateheader(masterbiasfile, 0,
                                                      {'M_EPOCH': [False, 'TRUE if resulting from multiple epochs']})
                                ntt.util.updateheader(masterbiasfile, 0,
                                                      {'SINGLEXP': [False, 'TRUE if resulting from single exposure']})
                                ntt.util.updateheader(masterbiasfile, 0, {
                                                      'FILETYPE': [11201, 'bias']})
                                masterbiaslist.append(masterbiasfile)

                                if masterbiasfile not in outputfile:
                                    outputfile.append(masterbiasfile)
                            except:
                                ntt.util.writeinthelog(
                                    'Warning ' +
                                    str(biaslist[_date]) +
                                    ' problem with this list of bias \n',
                                    './logNTT.txt')
                            if masterbiasfile and _interactive:
                                aa, bb, cc = display_image(
                                    masterbiasfile, 1, '', '', False)
                                answ = raw_input(
                                    'is the masterbias ok [[y]/n] ?')
                                if not answ:
                                    answ = 'y'
                                if answ in ['n', 'no']:
                                    sys.exit(
                                        'remove bad bias from input list and restart')
        else:
            masterbiaslist = []

    ########## masterflat   #########################

    if _doflat:
        if not _archive:
            if listflat:
                masterflatlist = listflat
            else:
                masterflatlist = []
                if flatlist:
                    for _filter in flatlist:
                        print '\n do flat ' + str(_filter) + '\n'
                        flatlist[_filter] = rejectflat(
                            flatlist[_filter], False)
                        if len(flatlist[_filter]) >= 3:
                            _date = readkey3(
                                readhdr(flatlist[_filter][0]), 'date-night')
                            masterflat = 'flat_' + \
                                str(_date) + '_' + str(_filter) + \
                                '_' + str(MJDtoday) + '.fits'
                            listaflat = 'flatlist_' + \
                                str(_date) + '_' + str(_filter)
                            _bias = ''
                            if masterbiaslist:
                                _bias = searchbias(flatlist[_filter][
                                                   0], masterbiaslist)[0]
                            if not _bias:
                                _bias = searchbias(flatlist[_filter][0], '')[0]
                            if _bias:
                                if _bias[0] == '/':
                                    os.system('cp ' + _bias + ' .')
                                    _bias = string.split(_bias, '/')[-1]
                                    _zerocor = 'yes'
                                else:
                                    _zerocor = 'yes'
                            else:
                                _zerocor = 'no'
                            answ0 = 'n'
                            while answ0 != 'y':
                                f = open(listaflat, 'w')
                                h = open('o' + listaflat, 'w')
                                for img in flatlist[_filter]:
                                    f.write(img + '\n')
                                    h.write('o' + img + '\n')
                                    delete('o' + img)
                                f.close()
                                h.close()
                                try:
                                    print 'processing flat .....'
                                    iraf.ccdproc('@' + listaflat, output='@o' + listaflat, overscan='no', trim='yes',
                                                 darkcor='no', fixpix='no',
                                                 zerocor=_zerocor, flatcor='no', trimsec=str(_trimsec), biassec='',
                                                 zero=_bias, readaxi='column', ccdtype='', Stdout=1)
                                    delete(masterflat)
                                    iraf.flatcombine('@o' + listaflat, output=masterflat, combine='average',
                                                     reject='avsigclip', ccdtype='', process='no',
                                                     rdnoise=_rdnoise, gain=_gain, statsec='[100:800,100:800]',
                                                     lsigma=3, hsigma=2, Stdout=1)
                                    masterflatlist.append(masterflat)
                                    correctcard(masterflat)
                                    num = 0
                                    for img in flatlist[_filter]:
                                        num = num + 1
                                        ntt.util.updateheader(masterflat, 0, {
                                            'PROV' + str(num): [readkey3(readhdr(img), 'ARCFILE'), 'Originating file']})
                                        ntt.util.updateheader(masterflat, 0, {
                                            'TRACE' + str(num): [readkey3(readhdr(img), 'ARCFILE'), 'Originating file']})
                                        delete('o' + img)
                                    ntt.util.updateheader(
                                        masterflat, 0, {'ZEROCOR': [_bias, '']})
                                    ntt.util.updateheader(masterflat, 0, {
                                        'M_EPOCH': [False, 'TRUE if resulting from multiple epochs']})
                                    ntt.util.updateheader(masterflat, 0, {
                                        'SINGLEXP': [False, 'TRUE if resulting from single exposure']})
                                    ntt.util.updateheader(
                                        masterflat, 0, {'FILETYPE': [11202, 'flat field']})

                                    if masterflat not in outputfile:
                                        outputfile.append(masterflat)
                                except:
                                    ntt.util.writeinthelog(
                                        'Warning ' +
                                        str(flatlist[
                                            _filter]) + ' problem with this list of flat \n',
                                        './logNTT.txt')
                                aa, bb, cc = display_image(
                                    masterflat, 1, '', '', False)
                                if masterflat and _interactive:
                                    answ = raw_input(
                                        'is the masterflat ok [[y]/n] ?')
                                    if not answ:
                                        answ = 'y'
                                    if answ.lower() in ['n', 'no']:
                                        answ1 = raw_input(
                                            'try again [[y]/n] ?')
                                        if not answ1:
                                            answ1 = 'y'
                                        if answ1.lower() in ['y', 'yes']:
                                            flatlist[_filter] = ntt.efoscphotredudef.rejectflat(
                                                flatlist[_filter], True)
                                        else:
                                            sys.exit(
                                                'error: problem with flat .... exit')
                                    else:
                                        answ0 = 'y'
                                else:
                                    answ0 = 'y'
        else:
            masterflatlist = []
    ##########################################################################
    if len(masterbiaslist) == 0:
        masterbiaslist = ''
    if len(masterflatlist) == 0:
        masterflatlist = ''
    ######################################
    if _verbose:
        print ''
        print '#############################'
        print masterflatlist
        print masterbiaslist
        print '#############################'
        print ''
    if masterflatlist:
        listaout = listaout + masterflatlist
    if masterbiaslist:
        listaout = listaout + masterbiaslist
    if typefile == 'calib':
        objectlist = {}
    for _filter in objectlist:
        for img in objectlist[_filter]:
            hdr = readhdr(img)
            print '\n#####################################################################\n'
            _object = readkey3(hdr, 'object')
            _object = re.sub(' ', '', _object)
            _object = re.sub('/', '_', _object)
            _object = re.sub('\n', '', _object)
            _exptime = readkey3(hdr, 'exptime')
            _date = readkey3(hdr, 'date-night')
            nameout = ntt.util.name_duplicate(img, str(_object) + '_' + str(_date) + '_' + str(_filter) + '_' + str(
                MJDtoday), '')
            _bias = ''
            if _dobias:
                if masterbiaslist:
                    _bias = searchbias(img, masterbiaslist)[0]
                if not _bias:
                    _bias = searchbias(img, '')[0]
            _flat = ''
            if _doflat:
                if masterflatlist:
                    _flat = searchflat(img, masterflatlist)[0]
                if not _flat:
                    _flat = searchflat(img, '')[0]
                if _bias:  # bias  ###
                    if _bias[0] == '/':
                        os.system('cp ' + _bias + ' .')
                        _bias = string.split(_bias, '/')[-1]
                    _zerocor = 'yes'
                else:
                    _zerocor = 'no'
            else:
                _zerocor = 'no'

            if _flat:  # flat  ###
                if _flat[0] == '/':
                    os.system('cp ' + _flat + ' .')
                    _flat = string.split(_flat, '/')[-1]
                _flatcor = 'yes'
            else:
                _flatcor = 'no'
            sss = str(_object) + '_' + str(_date) + '_' + str(_filter)
            print '### input', img, sss
            print '### bias ', _zerocor, _bias
            print '### flat ', _flatcor, _flat
            print '### name ', nameout
            delete(nameout)
            try:
                iraf.ccdproc(img, output=nameout, overscan="no", trim="yes", zerocor=_zerocor, flatcor='no',
                             darkcor='no', trimsec=str(_trimsec), zero=_bias, biassec='', readaxi='column', Stdout=1)
                try:
                    iraf.ccdproc(nameout, output='', overscan="no", trim="no", zerocor='no', flatcor=_flatcor,
                                 darkcor='no', flat=_flat, readaxi='column', ccdtype='', Stdout=1)
                except:
                    iraf.imrepla(images=_flat, value=0.01,
                                 lower='INDEF', upper=0.01, radius=0)
                    iraf.ccdproc(nameout, output='', overscan="no", trim="no", zerocor='no', flatcor=_flatcor,
                                 darkcor='no', flat=_flat, readaxi='column', ccdtype='', Stdout=1)
                correctcard(nameout)
                ntt.util.updateheader(nameout, 0, {'FILTER': [readkey3(readhdr(nameout), 'filter'), 'Filter name'],
                                                   'SINGLEXP': [True, 'TRUE if resulting from single exposure'],
                                                   'M_EPOCH': [False, 'TRUE if resulting from multiple epochs'],
                                                   'FLATCOR': [_flat, ''],
                                                   'ZEROCOR': [_bias, ''], 'FILETYPE': [12204, 'pre-reduced image'],
                                                   'PROV1': [readkey3(readhdr(nameout), 'ARCFILE'), 'Originating file'],
                                                   'NCOMBINE': [1, 'Number of raw science data'],
                                                   'TRACE1': [readkey3(readhdr(nameout), 'ARCFILE'),
                                                              'Originating file']})
                ntt.util.airmass(nameout)  # phase 3 definitions

                ntt.util.writeinthelog('\n', './logNTT.txt')
                ntt.util.writeinthelog(
                    'image= ' + str(img) + ' output= ' + str(nameout) + '\n', './logNTT.txt')
                ntt.util.writeinthelog(
                    'bias= ' + str(_bias) + ', flat= ' + str(_flat) + '\n', './logNTT.txt')
                ntt.util.writeinthelog('\n', './logNTT.txt')
                if nameout not in outputfile:
                    outputfile.append(nameout)
            except:
                ntt.util.writeinthelog(
                    'image ' + str(img) + ' probably corrupted\n', './logNTT.txt')
            if _dobadpixel:
                if not badpixelmask:
                    badpixelmask = 'bad_pixel_mask.fits'
                    delete(badpixelmask)
                    os.system('cp ' + ntt.__path__[0] + '/archive/' + str(
                        _instrume) + '/badpixels/badpixel.fits ' + badpixelmask)
                iraf.proto.fixpix(images=nameout, masks=badpixelmask,
                                  linterp='INDEF', cinterp='INDEF', verbose='no')
                ntt.util.updateheader(
                    nameout, 0, {'FIXPIX': [badpixelmask, '']})
                ntt.util.writeinthelog('image ' + str(nameout) + ' bad pixel corrected with ' + badpixelmask + '\n',
                                       './logNTT.txt')
                print '\n### bad pixel mask correction ..... done'
            else:
                ntt.util.writeinthelog(
                    'image ' + str(nameout) + ' bad pixel NOT corrected\n', './logNTT.txt')
            if _cosmic:
                try:
                    print '\n### cosmic  ..... '
                    ntt.cosmics.lacos_im(nameout, _output='', gain=_gain, readn=_rdnoise, xorder=9, yorder=9,
                                         sigclip=4.5, sigfrac=0.5, objlim=1, skyval=0, niter=0, verbose=True,
                                         interactive=False)
                    ntt.util.updateheader(nameout, 0, {
                        'LACOSMIC': [True, 'TRUE if Laplacian cosmic ray rejection has been applied to the image']})
                    print '\n### cosmic  .....  removed '
                except Exception, e:
                    print e
            else:
                ntt.util.updateheader(nameout, 0, {
                    'LACOSMIC': [False, 'TRUE if Laplacian cosmic ray rejection has been applied to the image']})
            try:
                ##########################
                sexvec = ntt.efoscastrodef.sextractor(nameout)
                for cat in ['2mass', 'usnoa2', 'usnob1']:
                    rmsx3, rmsy3, num3, fwhmgess, ellgess, ccc, rasys3, decsys3, magsat3 = ntt.efoscastrodef.efoscastroloop(
                        [nameout], cat, False, 40, 40, 100, 'rxyscale', 100, 30, sexvec, True, 10, method)
                    if rmsx3 <= 2 and rmsy3 <= 2:
                        break
                if rmsx3 > 2 and rmsy3 > 2:
                    for cat in ['2mass', 'usnoa2', 'usnob1']:
                        rmsx3, rmsy3, num3, fwhmgess, ellgess, ccc, rasys3, decsys3, magsat3 = ntt.efoscastrodef.efoscastroloop(
                            [nameout], cat, False, 20, int(20), int(50), 'rxyscale', 100, 30, sexvec, True, 5, method)
                        if rmsx3 <= 2 and rmsy3 <= 2:
                            break
                    if rmsx3 > 2 and rmsy3 > 2:
                        for cat in ['2mass', 'usnoa2', 'usnob1']:
                            rmsx3, rmsy3, num3, fwhmgess, ellgess, ccc, rasys3, decsys3, magsat3 = ntt.efoscastrodef.efoscastroloop(
                                [nameout], cat, False, int(10), int(10),
                                int(25), 'rxyscale', 100, 30, sexvec, True, int(3), method)
                        ##########################
                astrostring = str(rmsx3) + ' ' + str(rmsy3) + ' ' + str(num3)
                ntt.util.updateheader(
                    nameout, 0, {'ASTROMET': [astrostring, 'rmsx rmsy nstars']})
                print '\n### check astrometry: fine \n### rmsx rmsy nstars: ' + astrostring
            except Exception, e:
                print e
                rmsx3, rmsy3, num3, fwhmgess, ellgess, ccc, rasys3, decsys3, magsat3 = '', '', '', '', '', '', '', '', ''
                print '\n### problem with astrometry, do you have network ? '
            if fwhmgess and fwhmgess < 99:
                ntt.util.updateheader(nameout, 0, {'PSF_FWHM': [fwhmgess, 'Spatial resolution (arcsec)'],
                                                   'ELLIPTIC': [ellgess, 'Average ellipticity of point sources'],
                                                   'CRDER1': [(1 / sqrt(2.)) * float(rmsx3) * (1. / 3600.),
                                                              'Random error (degree)'],
                                                   'CRDER2': [(1 / sqrt(2.)) * float(rmsy3) * (1. / 3600.),
                                                              'Random error (degree)'],
                                                   'CUNIT1': ['deg', 'unit of the coord. trans.'],
                                                   'CUNIT2': ['deg', 'unit of the coord. trans.'],
                                                   'CSYER1': [rasys3, 'Systematic error (RA_m - Ra_ref)'],
                                                   'CSYER2': [decsys3, 'Systematic error (DEC_m - DEC_ref)']})
            else:
                ntt.util.updateheader(nameout, 0, {'PSF_FWHM': [9999., 'FHWM (arcsec) - computed with sectractor'],
                                                   'ELLIPTIC': [9999., 'ellipticity of point sources (1-b/a)'],
                                                   'CRDER1': [9999., 'Random error in axis 1'],
                                                   'CRDER2': [9999., 'Random error in axis 2'],
                                                   'CUNIT1': ['deg', 'unit of the coord. trans.'],
                                                   'CUNIT2': ['deg', 'unit of the coord. trans.'],
                                                   'CSYER1': [9999., 'Systematic error (RA_m - Ra_ref)'],
                                                   'CSYER2': [9999., 'Systematic error (DEC_m - DEC_ref)']})

            try:
                result = ntt.efoscastrodef.zeropoint(
                    nameout, _system, method, False, False)
            except:
                result = ''
            if result:
                if os.path.isfile(re.sub('.fits', '.ph', nameout)):
                    if re.sub('.fits', '.ph', nameout) not in outputfile:
                        outputfile.append(
                            re.sub('.fits', '.ph', nameout))
                print '\n### zeropoint ..... done'
                for ll in result:
                    valore = '%3.3s %6.6s %6.6s' % (
                        str(ll), str(result[ll][1]), str(result[ll][0]))
                    print '### ', valore
                    ntt.util.updateheader(
                        nameout, 0, {'zp' + ll: [str(valore), '']})
            if magsat3:
                if readkey3(readhdr(nameout), 'FLUXCAL') == 'ABSOLUTE':
                    try:
                        ntt.util.updateheader(nameout, 0, {
                            'ABMAGSAT': [float(magsat3) + float(readkey3(readhdr(nameout)), 'PHOTZP'),
                                         'Saturation limit for point sources (AB mags)']})
                    except:
                        ntt.util.updateheader(nameout, 0, {
                            'ABMAGSAT': [float(magsat3), 'Saturation limit for point sources (AB mags)']})
                else:
                    ntt.util.updateheader(nameout, 0, {
                        'ABMAGSAT': [float(magsat3), 'Saturation limit for point sources (AB mags)']})
            else:
                ntt.util.updateheader(nameout, 0, {'ABMAGSAT': [
                                      9999., 'Saturation limit for point sources (AB mags)']})

            maglim = ntt.util.limmag(nameout)
            if maglim:
                ntt.util.updateheader(nameout, 0,
                                      {'ABMAGLIM': [maglim, '5-sigma limiting AB magnitude for point sources']})
            else:
                ntt.util.updateheader(nameout, 0,
                                      {'ABMAGLIM': [9999., '5-sigma limiting AB magnitude for point sources']})

            if readkey3(readhdr(nameout), 'filter') in ['i705']:
                try:
                    nameout, maskname = ntt.efoscphotredudef.fringing2(
                        nameout, fringingmask, _interactive, False)
                    if nameout not in outputfile:
                        outputfile.append(nameout)
                        if maskname not in outputfile:
                            outputfile.append(maskname)

                except:
                    ntt.util.writeinthelog(
                        'image ' + str(nameout) + ' probably corrupted\n', './logNTT.txt')
                    print '\n### problem with fringing correction'
Esempio n. 9
0
def fringe_sub(inlist, inpref='', outpref='s', mskpref='none', iternum=50, nsigma=3, bpm='none', second=False, fr_x0=0.0, fr_y0=0.0, fr_step=5, surfit=False, xsorder=4, ysorder=4):
    
    # load IRAF package
    iraf.proto()

    # check input image list 
    inimg_arr = check_input(inlist, inpref)
    if isinstance(inimg_arr, int):
        return 1

    # check output 
    outimg_arr = check_outpref(outpref, inimg_arr)
    if isinstance(outimg_arr, int):
        return 1

    # check mask images 
    if mskpref.lower() == 'none' or mskpref == '':
        mask = 0
    else:
        mask = 1
        mskimg_arr = check_inpref(mskpref, inimg_arr)
        if isinstance(mskimg_arr, int):
            return 1

    # check bad pixel mask
    if bpm.lower() != 'none':
        bpmex = 1
        if os.access(bpm, os.R_OK) == False:
            print >> sys.stderr, 'cannot read bad pixel mask (%s)' % bpm
            return 1
    else:
        bpmex = 0

    # prefix for temoprary images
    tmp = tempfile.NamedTemporaryFile(suffix='', prefix='', dir='/tmp')
    tmp_prefix = tmp.name
    tmp.close()

    # subtract sky
    for i in range(len(inimg_arr)):
        if mask == 1:
            iraf.unlearn('mimstat')
            if not second:
                ret = iraf.mimstat(inimg_arr[i], imasks=mskimg_arr[i]+'[pl]', format='no', fields='midpt', nclip=iternum, lsigma=nsigma, usigma=nsigma, Stdout=1)
            else:
                if bpmex == 1:
                    tmp_mask = tmp_prefix + os.path.basename(mask_img_arr[i])
                    iraf.imarith(maskimg_arr[i], '+', bpm, tmp_mask, verbose='no') 
                    convert_maskfits_int(tmp_mask, tmp_mask)
                    ret = iraf.mimstat(inimg_arr[i], imasks=tmp_mask, format='no', fields='midpt', nclip=iternum, lsigma=nsigma, usigma=nsigma, Stdout=1)
                else:
                    ret = iraf.mimstat(inimg_arr[i], imasks=mskimg_arr[i], format='no', fields='midpt', nclip=iternum, lsigma=nsigma, usigma=nsigma, Stdout=1)
        else: 
            iraf.unlearn('imstat')
            ret = iraf.imstat(inimg_arr[i], format='no', fields='midpt', nclip=iternum, lsigma=nsigma, usigma=nsigma, Stdout=1)
        
        if len(ret) == 1:
            objmed = float(ret[0])
        else : 
            print >> sys.stderr, 'failed to calculate median of the object background'
            return 1

        # record input fits data into memory
        im = pyfits.open(inimg_arr[i])
        im_hdr = im[0].header
        im_data = im[0].data
        out_data = im_data - objmed
        if surfit:
            out_data_org = np.copy(out_data)
        im.close()
            
        # fringe subtraction for NB imaging 
        if mask == 1:
            if bpmex == 1:
                tmp_mask = tmp_prefix + os.path.basename(mask_img_arr[i])
                mask_im = pyfits.open(tmp_mask)
            else:
                mask_im = pyfits.open(mskimg_arr[i])
            if not second:
                mask_data = mask_im[1].data
            else:
                mask_data = mask_im[0].data
            mask_im.close()
                
        x = np.ones(out_data.shape[0]*out_data.shape[1]).reshape(out_data.shape[0],out_data.shape[1])* np.arange(out_data.shape[1]) + 1
        y = (np.ones(out_data.shape[1]*out_data.shape[0]).reshape(out_data.shape[1],out_data.shape[0]) * np.arange(out_data.shape[0]) + 1).T
        r = np.sqrt((x-fr_x0)*(x-fr_x0) + (y-fr_y0)*(y-fr_y0))
        rmax = np.max(r)
        rmin = np.min(r)

        r1 = rmin
        while r1 <= rmax:
            r2 = r1 + fr_step
            idx = np.logical_and(r>=r1, r<r2)
            out_subset = out_data[idx]
            
            if mask == 1:
                mask_subset = mask_data[idx]
                idx_sky = np.where(mask_subset == 0)
                #if len(out_subset[idx_sky]) != len(out_subset):
                #    print "masked:",inimg_arr[i],r1,r2,fr_x0,fr_y0,len(out_subset[idx_sky]),"/",len(out_subset),meanclip(out_subset[idx_sky],median=1)[0],meanclip(out_subset, median=1)[0]
                med, sigma = meanclip(out_subset[idx_sky],median=1)
            else:
                med, sigma = meanclip(out_data[idx],median=1)

            out_data[idx] = out_data[idx] - med
            r1 += fr_step

        # save output fits file 
        hdu = pyfits.PrimaryHDU(out_data)
        imgout = pyfits.HDUList([hdu])
        imgout[0].header = im_hdr
        if surfit:
            tmp_fsub = tmp_prefix + "fsub" + os.path.basename(inimg_arr[i])
            tmp_fsub_fit = tmp_prefix + "fsub_fit" + os.path.basename(inimg_arr[i])
            imgout.writeto(tmp_fsub)
            imgout.close()
            
            iraf.imsurfit(tmp_fsub, tmp_fsub_fit, xsorder, ysorder)
            imfit = pyfits.open(tmp_fsub_fit)
            imfit_data = imfit[0].data
            out_data_fs = np.copy(out_data_org - imfit_data)

            r1 = rmin
            while r1 <= rmax:
                r2 = r1 + fr_step
                idx = np.logical_and(r>=r1, r<r2)
                out_subset = out_data_fs[idx]
            
                if mask == 1:
                    mask_subset = mask_data[idx]
                    idx_sky = np.where(mask_subset == 0)
                    med, sigma = meanclip(out_subset[idx_sky],median=1)
                else:
                    med, sigma = meanclip(out_data_fs[idx],median=1)

                out_data_org[idx] = out_data_org[idx] - med
                r1 += fr_step
            
            hdu = pyfits.PrimaryHDU(out_data_org)
            imgout = pyfits.HDUList([hdu])
            imgout[0].header = im_hdr
            imgout.writeto(outimg_arr[i])
            imgout.close()

            remove_temp_all(tmp_prefix)
            
        else:
            imgout.writeto(outimg_arr[i])
            imgout.close()

            if bpmex == 1:
                remove_temp_all(tmp_prefix)

    return 0
Esempio n. 10
0
def makefringingmask(listimg, _output, _interactive, _combine='average', _rejection='avsigclip'):
    # print "LOGX:: Entering `makefringingmask` method/function in
    # %(__file__)s" % globals()
    import ntt
    from ntt.util import readhdr, readkey3, delete, updateheader
    import glob
    import os
    import sys
    import re
    import string
    from pyraf import iraf
    iraf.noao(_doprint=0)
    iraf.immatch(_doprint=0)
    iraf.imutil(_doprint=0)
    iraf.nproto(_doprint=0)
    iraf.proto(_doprint=0)
    toforget = ['nproto.objmasks', 'proto.fixpix']
    for t in toforget:
        iraf.unlearn(t)

    if _interactive == True:
        listimg2 = []
        for img in listimg:
            _exptime = readkey3(readhdr(img), 'exptime')
            if float(_exptime) >= 10:
                answ = 'xxx'
                while answ.lower() not in ['y', 'n', 's', 'a']:
                    iraf.display(img, frame=1, fill='yes')
                    answ = raw_input(
                        'use this image (yes,no,stop (not more images),all) [[y]/n/s/a] ? ')
                    if not answ:
                        answ = 'y'
                    if answ.lower() == 'y':
                        listimg2.append(img)
                    elif answ.lower() == 'a':
                        listimg2 = listimg[:]
                if answ.lower() in ['a', 's']:
                    break
        listimg = listimg2[:]

    iraf.nproto.objmasks1.fitxord = 1
    iraf.nproto.objmasks1.fityord = 1
    hdr0 = readhdr(listimg[0])
    _date = readkey3(hdr0, 'date-obs')
    _filter = readkey3(hdr0, 'filter')
    _exptime = readkey3(hdr0, 'exptime')
    _instrume = readkey3(hdr0, 'instrume')
    _ron = readkey3(hdr0, 'ron')
    _gain = readkey3(hdr0, 'gain')
    badpixelmask = 'bad_pixel_mask.pl'
    if not os.path.isfile(badpixelmask):
        os.system('cp ' + ntt.__path__[0] + '/archive/' + _instrume +
                  '/badpixels/badpixel_20100210.pl ' + badpixelmask)
    ff = open('_listmask', 'w')
    hh = open('_listobgz', 'w')
    for img in listimg:
        _exptime = readkey3(readhdr(img), 'exptime')
        hh.write('z_' + img + '\n')
        ff.write('mask_' + img + '\n')
        delete('mask_' + img)
        aaa = iraf.hedit(img, delete='yes', field='OBJMASK',
                         up='yes', verify='no', Stdout=1)
        aaa = iraf.hedit(img, delete='yes', field='BPM',
                         up='yes', verify='no', Stdout=1)
        delete('z_' + img)
        iraf.imutil.imexpr(expr='(a - median(a))/' + str(_exptime),
                           a=img, output='z_' + img, verbose='no')
        ntt.util.updateheader('z_' + img, 0, {'EXPTIME': [1, '']})
    ff.close()
    hh.close()
    if not _output:
        _output = 'fringing_' + str(_date) + '_' + str(_filter) + '.fits'
    delete(_output)
    print ' making mask for each frame .......'
    ccc = iraf.nproto.objmasks(images='@_listobgz', objmasks='@_listmask', omtype='boolean',
                               blksize=-16, convolv='block 3 3', hsigma=5, lsigma=3, minpix=10, ngrow=2, agrow=4., Stdout=1)
    print 'combining all frames, masking the objects .....'
    iraf.imcombine('@_listobgz', output=_output, masktyp='!OBJMASK', maskval=0, combine=_combine, reject=_rejection,
                   scale='none', statsec='[100:800,100:800]', rdnoise='', gain='', nlow=1, nhigh=1, logfile='imcombinelog')

    ntt.util.phase3header(_output)
    ntt.util.updateheader(
        _output, 0, {'BUNIT': ['ADU', 'pixel units(ADU,electrons)']})
    ntt.util.updateheader(_output, 0, {'FILETYPE': [11231, 'fringing frame']})
    return _output
Esempio n. 11
0
MedianR=np.median(RatioHL)
StdR=np.std(RatioHL)
MadR=np.median(np.abs(RatioHL-MedianR))
print("Median Ratio = %f , Std = %f Mad =%f "%(MedianR,StdR,MadR))

#(XLbp,YLbp)=np.where(RatioHL < MedianR-LsigCut*StdR)
#(XHbp,YHbp)=np.where(RatioHL > MedianR+HsigCut*StdR)
(XLbp,YLbp)=np.where(RatioHL < MedianR-LsigCut*MadR*1.4826)
(XHbp,YHbp)=np.where(RatioHL > MedianR+HsigCut*MadR*1.4826)


OutFILE=open(Outfname,'w')
for X,Y in zip(XLbp,YLbp): OutFILE.write(str(Y+1)+' '+str(X+1)+'\n')
for X,Y in zip(XHbp,YHbp): OutFILE.write(str(Y+1)+' '+str(X+1)+'\n')
OutFILE.close()
print("Text file of list of Bad pixels created in "+Outfname)

if Createpl :
    iraf.proto(_doprint=0)
    iraf.text2mask.unlearn()
    iraf.text2mask(text=Outfname,mask=Outfile,ncols=1024,nlines=1024)
    print("Binary .pl file of Bad pixels created in "+Outfile)
    print("To view mask in IRAF : display "+ImgH+" 1 overlay="+Outfile)



    

    
Esempio n. 12
0
def makefringingmask(listimg,
                     _output,
                     _interactive,
                     _combine='average',
                     _rejection='avsigclip'):
    # print "LOGX:: Entering `makefringingmask` method/function in
    # %(__file__)s" % globals()
    import ntt
    from ntt.util import readhdr, readkey3, delete, updateheader
    import glob
    import os
    import sys
    import re
    import string
    from pyraf import iraf
    iraf.noao(_doprint=0)
    iraf.immatch(_doprint=0)
    iraf.imutil(_doprint=0)
    iraf.nproto(_doprint=0)
    iraf.proto(_doprint=0)
    toforget = ['nproto.objmasks', 'proto.fixpix']
    for t in toforget:
        iraf.unlearn(t)

    if _interactive == True:
        listimg2 = []
        for img in listimg:
            _exptime = readkey3(readhdr(img), 'exptime')
            if float(_exptime) >= 10:
                answ = 'xxx'
                while answ.lower() not in ['y', 'n', 's', 'a']:
                    iraf.display(img, frame=1, fill='yes')
                    answ = raw_input(
                        'use this image (yes,no,stop (not more images),all) [[y]/n/s/a] ? '
                    )
                    if not answ:
                        answ = 'y'
                    if answ.lower() == 'y':
                        listimg2.append(img)
                    elif answ.lower() == 'a':
                        listimg2 = listimg[:]
                if answ.lower() in ['a', 's']:
                    break
        listimg = listimg2[:]

    iraf.nproto.objmasks1.fitxord = 1
    iraf.nproto.objmasks1.fityord = 1
    hdr0 = readhdr(listimg[0])
    _date = readkey3(hdr0, 'date-obs')
    _filter = readkey3(hdr0, 'filter')
    _exptime = readkey3(hdr0, 'exptime')
    _instrume = readkey3(hdr0, 'instrume')
    _ron = readkey3(hdr0, 'ron')
    _gain = readkey3(hdr0, 'gain')
    badpixelmask = 'bad_pixel_mask.pl'
    if not os.path.isfile(badpixelmask):
        os.system('cp ' + ntt.__path__[0] + '/archive/' + _instrume +
                  '/badpixels/badpixel_20100210.pl ' + badpixelmask)
    ff = open('_listmask', 'w')
    hh = open('_listobgz', 'w')
    for img in listimg:
        _exptime = readkey3(readhdr(img), 'exptime')
        hh.write('z_' + img + '\n')
        ff.write('mask_' + img + '\n')
        delete('mask_' + img)
        aaa = iraf.hedit(img,
                         delete='yes',
                         field='OBJMASK',
                         up='yes',
                         verify='no',
                         Stdout=1)
        aaa = iraf.hedit(img,
                         delete='yes',
                         field='BPM',
                         up='yes',
                         verify='no',
                         Stdout=1)
        delete('z_' + img)
        iraf.imutil.imexpr(expr='(a - median(a))/' + str(_exptime),
                           a=img,
                           output='z_' + img,
                           verbose='no')
        ntt.util.updateheader('z_' + img, 0, {'EXPTIME': [1, '']})
    ff.close()
    hh.close()
    if not _output:
        _output = 'fringing_' + str(_date) + '_' + str(_filter) + '.fits'
    delete(_output)
    print ' making mask for each frame .......'
    ccc = iraf.nproto.objmasks(images='@_listobgz',
                               objmasks='@_listmask',
                               omtype='boolean',
                               blksize=-16,
                               convolv='block 3 3',
                               hsigma=5,
                               lsigma=3,
                               minpix=10,
                               ngrow=2,
                               agrow=4.,
                               Stdout=1)
    print 'combining all frames, masking the objects .....'
    iraf.imcombine('@_listobgz',
                   output=_output,
                   masktyp='!OBJMASK',
                   maskval=0,
                   combine=_combine,
                   reject=_rejection,
                   scale='none',
                   statsec='[100:800,100:800]',
                   rdnoise='',
                   gain='',
                   nlow=1,
                   nhigh=1,
                   logfile='imcombinelog')

    ntt.util.phase3header(_output)
    ntt.util.updateheader(_output, 0,
                          {'BUNIT': ['ADU', 'pixel units(ADU,electrons)']})
    ntt.util.updateheader(_output, 0, {'FILETYPE': [11231, 'fringing frame']})
    return _output
Esempio n. 13
0
def mkcalflat(calonlst, calofflst, outimg, mask='none'):

    # load IRAF package
    iraf.proto()

    # open cal off list and check if files exist
    on_list = check_input(calonlst, '')
    if len(on_list) == 1 and on_list[0] == 1:
        return 1

    # open cal off list and check if files exist
    off_list = check_input(calofflst, '')
    if len(off_list) == 1 and off_list[0] == 1:
        return 1

    # check if output file exists
    if os.access(outimg, os.R_OK):
        print >> sys.stderr, 'operation would overwrite existing image (%s)' % outimg
        return 1

    # prefix for temporary images and files
    tmp = tempfile.NamedTemporaryFile(suffix='', prefix='', dir='/tmp')
    tmp_prefix = tmp.name
    tmp.close()

    # check exptime, coadds, ndr, slwcnt for off frames
    tmp_off_list = tmp_prefix + '_off.lst'
    fout = open(tmp_off_list, 'w')
    err = 0
    for i in range(len(off_list)):
        im = pyfits.open(off_list[i])
        im_exptime = float(im[0].header['EXP1TIME'])
        im_coadds = int(im[0].header['COADDS'])
        im_ndr = int(im[0].header['NDR'])
        im_slwcnt = int(im[0].header['I_SLWCNT'])
        if i == 0:
            off_exptime = im_exptime
            off_coadds = im_coadds
            off_ndr = im_ndr
            off_slwcnt = im_slwcnt
        else:
            if im_exptime != off_exptime:
                print >> sys.stderr, 'exptime for %s is not consistent with the first frame (%s)' % (
                    off_list[i], off_list[0])
                err += 1
            if im_coadds != off_coadds:
                print >> sys.stderr, 'coadds for %s is not consistent with the first frame (%s)' % (
                    off_list[i], off_list[0])
                err += 1
            if im_ndr != off_ndr:
                print >> sys.stderr, 'ndr for %s is not consistent with the first frame (%s)' % (
                    off_list[i], off_list[0])
                err += 1
            if im_slwcnt != off_slwcnt:
                print >> sys.stderr, 'slwcnt for %s is not consistent with the first frame (%s)' % (
                    off_list[i], off_list[0])
                err += 1

        im.close()
        fout.write('%s\n' % off_list[i])
    fout.close()

    # check error
    if err != 0:
        remove_temp_all(tmp_prefix)
        return 1

    # check exptime, coadds, ndr, slwcnt for on frames
    tmp_on_list = tmp_prefix + '_on.lst'
    fout = open(tmp_on_list, 'w')
    for i in range(len(on_list)):
        im = pyfits.open(on_list[i])
        im_exptime = float(im[0].header['EXP1TIME'])
        im_coadds = int(im[0].header['COADDS'])
        im_ndr = int(im[0].header['NDR'])
        im_slwcnt = int(im[0].header['I_SLWCNT'])
        if i == 0:
            on_exptime = im_exptime
            on_coadds = im_coadds
            on_ndr = im_ndr
            on_slwcnt = im_slwcnt
        else:
            if im_exptime != on_exptime:
                print >> sys.stderr, 'exptime for %s is not consistent with the first frame (%s)' % (
                    on_list[i], on_list[0])
                err += 1
            if im_coadds != on_coadds:
                print >> sys.stderr, 'coadds for %s is not consistent with the first frame (%s)' % (
                    on_list[i], on_list[0])
                err += 1
            if im_ndr != on_ndr:
                print >> sys.stderr, 'ndr for %s is not consistent with the first frame (%s)' % (
                    on_list[i], on_list[0])
                err += 1
            if im_slwcnt != on_slwcnt:
                print >> sys.stderr, 'slwcnt for %s is not consistent with the first frame (%s)' % (
                    on_list[i], on_list[0])
                err += 1

        im.close()
        fout.write('%s\n' % on_list[i])
    fout.close()

    # check error
    if err != 0:
        remove_temp_all(tmp_prefix)
        return 1

    # check consistency of EXPTIME, COADDS, NDR and SLWCNT between on and off frames
    if on_exptime != off_exptime:
        print >> sys.stderr, 'exptime for on and off frames are not consistent'
        err += 1
    if on_coadds != off_coadds:
        print >> sys.stderr, 'coadds for on and off frames are not consistent'
        err += 1
    if on_ndr != off_ndr:
        print >> sys.stderr, 'ndr for on and off frames are not consistent'
        err += 1
    if on_slwcnt != off_slwcnt:
        print >> sys.stderr, 'slwcnt for on and off frames are not consistent'
        err += 1

    # check error
    if err != 0:
        remove_temp_all(tmp_prefix)
        return 1

    # combine off frames
    tmpoff = tmp_prefix + '_off.fits'
    iraf.unlearn('imcombine')
    iraf.imcombine.combine = 'median'
    iraf.imcombine.reject = 'sigclip'
    iraf.imcombine('@' + tmp_off_list, tmpoff)

    # combine on frames
    tmpon = tmp_prefix + '_on.fits'
    tmp.close()
    iraf.unlearn('imcombine')
    iraf.imcombine.combine = 'median'
    iraf.imcombine.reject = 'sigclip'
    iraf.imcombine('@' + tmp_on_list, tmpon)

    # subtract off from on
    iraf.unlearn('imarith')
    iraf.imarith(tmpon, "-", tmpoff, outimg, verbose='no')

    # delete temporary files
    remove_temp_all(tmp_prefix)

    # calculate average
    if mask == 'none':
        iraf.unlearn('imstat')
        res = iraf.imstat(outimg,
                          format='no',
                          fields='mean',
                          nclip=50,
                          Stdout=1)
        if len(res) == 1:
            ave = float(res[0])
        else:
            print >> sys.stderr, 'failed to calculate avarage of the combined frame'
            os.remove(outimg)
            return 1
    else:
        if os.access(mask, os.R_OK):
            iraf.unlearn('mimstat')
            res = iraf.mimstat(outimg,
                               imasks=mask,
                               format='no',
                               fields='mean',
                               nclip=50,
                               Stdout=1)
            if len(res) == 1:
                ave = float(res[0])
            else:
                print >> sys.stderr, 'failed to calculate masked avarage of the combined frame'
                os.remove(outimg)
                return 1
        else:
            print >> sys.stderr, 'mask frame (%s) does not exist' % mask
            os.remove(outimg)
            return 1

    # divide by average count
    iraf.unlearn('imarith')
    iraf.imarith(outimg, "/", ave, outimg, verbose='no')

    return 0
Esempio n. 14
0
def mkskyflat(inlist, output, inpref='', mskpref='m', bpm='none', iternum=50, nsigma=3, minpix=250, hsigma=3, lsigma=10, conv='block 3 3'):
    
    # load IRAF package
    iraf.proto()
    iraf.nproto()

    # open input list and check if it exists
    inimg_arr = check_input(inlist, inpref)
    if len(inimg_arr) == 1 and inimg_arr[0] == 1:
        return 1

    # check if output image is already exist
    if os.access(output, os.R_OK) : 
        print >> sys.stderr, 'operation would overwrite existing file (%s)' % output
        return 1

    # check optional parameters 
    if bpm.lower() == 'none' or bpm == '':
        bpmex = 0
    else:
        bpmex = 1
        if not os.access(bpm, os.R_OK):
            print >> sys.stderr, 'cannot read bad pixel mask (%s)' % bpm
            return 1

    if iternum <= 0:
        print >> sys.stderr, 'invalid iternum value (%d)' % iternum
        return 1

    if nsigma <= 0:
        print >> sys.stderr, 'invalid nsigma value (%f)' % nsigma
        return 1

    # prefix for temoprary images
    tmp = tempfile.NamedTemporaryFile(suffix='', prefix='', dir='/tmp')
    tmp_prefix = tmp.name
    tmp.close()
    
    # temporary normalize raw frames by average
    tmp_list = tmp_prefix+'.lst'
    fout = open(tmp_list, 'w')
    for i in range(len(inimg_arr)):

        tmpimg = tmp_prefix+os.path.basename(inimg_arr[i])
        fout.write('%s\n' % tmpimg)

        # remove temporary files if it exists
        if os.access(tmpimg, os.R_OK):
            os.remove(tmpimg)

        # calculate average counts in each frame
        if bpmex == 0:
            iraf.unlearn('imstat')
            res = iraf.imstat(inimg_arr[i], format='no', fields='mean', nclip=iternum, lsigma=nsigma, usigma=nsigma, Stdout=1)
            if len(res) == 1:
                ave = float(res[0])
            else:
                print >> sys.stderr, 'failed to calculate avarage from the frame (%s)' % inimg
                remove_temp_all(tmp_prefix)
                fout.close()
                return 1
        else:
            iraf.unlearn('mimstat')
            res = iraf.mimstat(inimg_arr[i], imasks=bpm, format='no', fields='mean', nclip=iternum, lsigma=nsigma, usigma=nsigma, Stdout=1)
            if len(res) == 1:
                ave = float(res[0])
            else:
                print >> sys.stderr, 'failed to calculate masked avarage from the frame (%s)'% inimg
                remove_temp_all(tmp_prefix)
                fout.close()
                return 1

        # normalize each frame by average
        iraf.unlearn('imarith')
        iraf.imarith(inimg_arr[i], '/', ave, tmpimg, verbose='no')

    # close output file handler 
    fout.close()

    # make temporary sky flat frame
    tmp_flat = tmp_prefix+'_sflat.fits'
    ret = zcombine(tmp_list, tmp_flat, combine='median', reject='sigclip')
    if ret != 0:
        remove_temp_all(tmp_prefix)
        return 1

    # temporary flat field 
    iraf.unlearn('imarith')
    tmpff_list = tmp_prefix+'_ff.lst'
    fout = open(tmpff_list, 'w')
    for i in range(len(inimg_arr)):

        tmpimg = tmp_prefix+'_ff_'+os.path.basename(inimg_arr[i])
        fout.write('%s\n' % tmpimg)

        # remove temporary files if it exists
        if os.access(tmpimg, os.R_OK):
            os.remove(tmpimg)

        # divided by temporary flat 
        iraf.imarith(inimg_arr[i], '/', tmp_flat, tmpimg, verbose='no')

        # read image fits header
        im = pyfits.open(inimg_arr[i])
        exptime = float(im[0].header['EXP1TIME'])
        coadds = int(im[0].header['COADDS'])
        ndr = int(im[0].header['NDR'])
        im.close()

        # normalize by coadds, ndr, and exptime values
        iraf.imarith(tmpimg, '/', (coadds*ndr*exptime), tmpimg, verbose='no')


    # close output file handler 
    fout.close()

    # remove temporary flat
    os.remove(tmp_flat)

    # calculate standard deviation of the temporary flat divided images
    try:
        iraf.unlearn('imstat')
        stddev = iraf.imstat('@'+tmpff_list, format='no', fields='stddev', nclip=50, Stdout=1)
    except:
        remove_temp_all(tmp_prefix)
        return 1

    # calculate mean and sigma of the stddev of the image
    y = map(float, stddev)
    mean, sigma = meanclip(np.array(y, dtype=float))
    #print mean, sigma 

    # flag bad frames
    frame_flag = []
    for i in range(len(stddev)):
        im = pyfits.open(inimg_arr[i], mode='update')                
        if math.fabs(y[i] - mean) < nsigma * sigma:
            frame_flag.append(0)
            im[0].header['PATTERN'] = 0
        else:
            frame_flag.append(1)
            im[0].header['PATTERN'] = 1
        im.close()

    # make object mask 
    ret = mkobjmask(tmpff_list, inpref='', outpref=mskpref, bpm=bpm, minpix=minpix, hsigma=hsigma, lsigma=lsigma, conv=conv)

    # rename mask file 
    mskimg_arr = []
    for i in range(len(inimg_arr)):
        base = os.path.basename(inimg_arr[i])
        tmpimg = tmp_prefix+'_ff_'+base
        maskimg = mskpref+base
        tmpmask = mskpref+os.path.basename(tmpimg)
        move(tmpmask, maskimg)
        mskimg_arr.append(maskimg)

    # delete temporary flat fielded files 
    remove_temp_all(tmp_prefix)
    
    # check mkobjmask result 
    if ret != 0:
        return 1

    # nomalize by object masked average 
    fout = open(tmp_list, 'w')
    for i in range(len(inimg_arr)):

        if frame_flag[i] == 0:
        
            tmpimg = tmp_prefix+os.path.basename(inimg_arr[i])
            maskimg = mskimg_arr[i]
            tmpmask = tmp_prefix+maskimg
            fout.write('%s\n' % tmpimg)

            if os.access(tmpimg, os.R_OK):
                os.remove(tmpimg)
                
            if os.access(tmpmask, os.R_OK):
                os.remove(tmpmask)

            if bpmex == 1:
                iraf.unlearn('imarith')
                iraf.imarith(maskimg+'[pl]','+',bpm,tmpmask,verbose='no')
            else :
                iraf.unlearn('imcopy')
                iraf.imcopy(maskimg+'[pl]',tmpmask,verbose='no')

            iraf.unlearn('mimstat')
        
            # calculate average of the raw images with mask
            res = iraf.mimstat(inimg_arr[i], imasks=tmpmask, format='no', fields='mean', nclip=iternum, lsigma=nsigma, usigma=nsigma, Stdout=1)
            if len(res) == 1:
                ave = float(res[0])
            else:
                print >> sys.stderr, 'failed to calculate masked avarage from the frame (%s)' % inimg_arr[i]
                remove_temp_all(tmp_prefix)
                return 1
        
            # normalize each frame by average
            iraf.unlearn('imarith')
            iraf.imarith(inimg_arr[i], '/', ave, tmpimg, verbose='no')
            
            # add mask into header 
            iraf.unlearn('hedit')
            iraf.hedit(tmpimg, 'objmask', maskimg+'[pl]', add='yes', verify='no')

    # close output file handler 
    fout.close()
        
    # combine
    ret = zcombine(tmp_list, output, combine='median', reject='sigclip', masktype='!objmask')
    if ret != 0:
        print >> sys.stderr, 'failed to combine normalized frames'
        remove_temp_all(tmp_prefix)
        return 1   

    # remove temoprary files
    remove_temp_all(tmp_prefix)

    return 0
Esempio n. 15
0
def marksn2(img, fitstab, frame=1, fitstab2='', verbose=False):
    from pyraf import iraf
    from numpy import array  #,log10
    import lsc
    iraf.noao(_doprint=0)
    iraf.digiphot(_doprint=0)
    iraf.daophot(_doprint=0)
    iraf.images(_doprint=0)
    iraf.imcoords(_doprint=0)
    iraf.proto(_doprint=0)
    iraf.set(stdimage='imt1024')
    hdr = lsc.util.readhdr(fitstab)
    _filter = lsc.util.readkey3(hdr, 'filter')
    column = lsc.lscabsphotdef.makecatalogue([fitstab])[_filter][fitstab]

    rasex = array(column['ra0'], float)
    decsex = array(column['dec0'], float)

    if fitstab2:
        hdr = lsc.util.readhdr(fitstab2)
        _filter = lsc.util.readkey3(hdr, 'filter')
        _exptime = lsc.util.readkey3(hdr, 'exptime')
        column = lsc.lscabsphotdef.makecatalogue([fitstab2])[_filter][fitstab2]
        rasex2 = array(column['ra0'], float)
        decsex2 = array(column['dec0'], float)

    iraf.set(stdimage='imt1024')
    iraf.display(img + '[0]', frame, fill=True, Stdout=1)
    vector = []
    for i in range(0, len(rasex)):
        vector.append(str(rasex[i]) + ' ' + str(decsex[i]))

    xy = iraf.wcsctran('STDIN',output="STDOUT",Stdin=vector,Stdout=1,image=img+'[0]',inwcs='world',units='degrees degrees',outwcs='logical',\
                          formats='%10.1f %10.1f',verbose='yes')[3:]
    iraf.tvmark(frame,
                'STDIN',
                Stdin=list(xy),
                mark="circle",
                number='yes',
                label='no',
                radii=10,
                nxoffse=5,
                nyoffse=5,
                color=207,
                txsize=2)

    if verbose:
        #     print 2.5*log10(_exptime)
        for i in range(0, len(column['ra0'])):
            print xy[i], column['ra0'][i], column['dec0'][i], column['magp3'][
                i], column['magp4'][i], column['smagf'][i], column['magp2'][i]

    if fitstab2:
        vector2 = []
        for i in range(0, len(rasex2)):
            vector2.append(str(rasex2[i]) + ' ' + str(decsex2[i]))
        xy1 = iraf.wcsctran('STDIN',output="STDOUT",Stdin=vector2,Stdout=1,image=img+'[0]',inwcs='world',units='degrees degrees',outwcs='logical',\
                              formats='%10.1f %10.1f',verbose='yes')[3:]
        iraf.tvmark(frame,
                    'STDIN',
                    Stdin=list(xy1),
                    mark="cross",
                    number='yes',
                    label='no',
                    radii=10,
                    nxoffse=5,
                    nyoffse=5,
                    color=205,
                    txsize=2)
Esempio n. 16
0
import numpy
import time
from types import *

# Local packages
import add_wcs
import iqpkg
from iqutils import *

# Necessary IRAF packages
iraf.imred()
iraf.ccdred()
iraf.images()
iraf.imutil()
iraf.imfit()
iraf.proto()

# Shortcuts
yes=iraf.yes
no=iraf.no
INDEF=iraf.INDEF
hedit=iraf.hedit
imgets=iraf.imgets

# Pyraf parameters: Where to find them
pyrafdir="python/pyraf/"
pyrafdir_key='PYRAFPARS'

if os.environ.has_key(pyrafdir_key):
    pardir=os.environ[pyrafdir_key]
else:
def mkskyflat_with_mask(inlist,
                        output,
                        inpref='',
                        mskpref='m',
                        bpm='none',
                        iternum=50,
                        nsigma=3):

    # load IRAF package
    iraf.proto()
    iraf.nproto()

    # open input list and check if it exists
    inimg_arr = check_input(inlist, inpref)
    if len(inimg_arr) == 1 and inimg_arr[0] == 1:
        return 1

    # check if output image is already exist
    if os.access(output, os.R_OK):
        print >> sys.stderr, 'operation would overwrite existing file (%s)' % output
        return 1

    # check mask images
    if mskpref.lower() == 'none' or mskpref == '':
        print >> sys.stderr, 'mask frames are required for this task'
        return 1
    else:
        mskimg_arr = check_inpref(mskpref, inimg_arr)
        if isinstance(mskimg_arr, int):
            return 1

    # check optional parameters
    if bpm.lower() == 'none' or bpm == '':
        bpmex = 0
    else:
        bpmex = 1
        if not os.access(bpm, os.R_OK):
            print >> sys.stderr, 'cannot read bad pixel mask (%s)' % bpm
            return 1

    if iternum <= 0:
        print >> sys.stderr, 'invalid iternum value (%d)' % iternum
        return 1

    if nsigma <= 0:
        print >> sys.stderr, 'invalid nsigma value (%f)' % nsigma
        return 1

    # prefix for temoprary images
    tmp = tempfile.NamedTemporaryFile(suffix='', prefix='', dir='/tmp')
    tmp_prefix = tmp.name
    tmp.close()

    # nomalize by object masked average
    tmp_list = tmp_prefix + '.lst'
    fout = open(tmp_list, 'w')
    for i in range(len(inimg_arr)):

        im = pyfits.open(inimg_arr[i], mode='update')
        try:
            pattern = im[0].header['PATTERN']
        except KeyError:
            pattern = 0
        im.close()

        if pattern == 0:
            tmpimg = tmp_prefix + os.path.basename(inimg_arr[i])
            maskimg = mskimg_arr[i]
            tmpmask = tmp_prefix + maskimg
            fout.write('%s\n' % tmpimg)

            if os.access(tmpimg, os.R_OK):
                os.remove(tmpimg)

            if os.access(tmpmask, os.R_OK):
                os.remove(tmpmask)

            if bpmex == 1:
                iraf.unlearn('imarith')
                #iraf.imarith(maskimg+'[pl]','+',bpm,tmpmask,verbose='no')
                iraf.imarith(maskimg, '+', bpm, tmpmask, verbose='no')
            else:
                iraf.unlearn('imcopy')
                #iraf.imcopy(maskimg+'[pl]',tmpmask,verbose='no')
                iraf.imcopy(maskimg, tmpmask, verbose='no')

            iraf.unlearn('mimstat')
            res = iraf.mimstat(inimg_arr[i],
                               imasks=tmpmask,
                               format='no',
                               fields='mean',
                               nclip=iternum,
                               lsigma=nsigma,
                               usigma=nsigma,
                               Stdout=1)
            if len(res) == 1:
                ave = float(res[0])
            else:
                print >> sys.stderr, 'failed to calculate masked avarage from the frame (%s)' % inimg_arr[
                    i]
                remove_temp_all(tmp_prefix)
                return 1

            # normalize each frame by average
            iraf.unlearn('imarith')
            iraf.imarith(inimg_arr[i], '/', ave, tmpimg, verbose='no')

            # add mask into header
            iraf.unlearn('hedit')
            if mskpref[0] != ':':
                iraf.hedit(tmpimg, 'objmask', maskimg, add='yes', verify='no')

    # close output file handler
    fout.close()

    # combine
    ret = zcombine(tmp_list,
                   output,
                   combine='median',
                   reject='sigclip',
                   masktype='!objmask')
    if ret != 0:
        print >> sys.stderr, 'failed to combine normalized frames'
        remove_temp_all(tmp_prefix)
        return 1

    # remove temoprary files
    remove_temp_all(tmp_prefix)

    return 0
def absphot(img,_field,_catalogue,_fix,_color,rejection,_interactive,_type='fit',redo=False,show=False,cutmag=-1,database='dataredulco',_calib='sloan'):
    from astropy.io import fits
    import lsc
    import math
    import sys,re,string,os
    from lsc.util import readkey3, readhdr
    from numpy import array, compress, zeros, median, std, asarray, isfinite,mean
    from pyraf import iraf
    if show:
          from pylab import ion,plot,draw,clf
          import time
    iraf.noao(_doprint=0)
    iraf.digiphot(_doprint=0)
    iraf.daophot(_doprint=0)
    iraf.images(_doprint=0)
    iraf.imcoords(_doprint=0)
    iraf.proto(_doprint=0)
    t = fits.open(img)
    tbdata = t[1].data
    hdr2=t[1].header
    hdr=lsc.util.readhdr(img)
    _cat=readkey3(hdr,'catalog')
    _telescope=lsc.util.readkey3(hdr,'telescop')
    _instrume=lsc.util.readkey3(hdr,'instrume')
    _filter=lsc.util.readkey3(hdr,'filter')
    _airmass=lsc.util.readkey3(hdr,'airmass')
    _exptime=lsc.util.readkey3(hdr,'exptime')
    _date=lsc.util.readkey3(hdr,'date-obs')
    _object=lsc.util.readkey3(hdr,'object')
    _ra=lsc.util.readkey3(hdr,'RA')
    _dec=lsc.util.readkey3(hdr,'DEC')
    print _filter
    if _telescope in ['lsc','1m0-04','1m0-05','1m0-09']:     kk=lsc.sites.extintion('ctio')
    elif _telescope in ['elp','1m0-08']:                     kk=lsc.sites.extintion('mcdonald')
    elif _telescope in ['cpt','1m0-12','1m0-10','1m0-13']:   kk=lsc.sites.extintion('southafrica')
    elif _telescope in ['ftn','Faulkes Telescope North']:    kk=lsc.sites.extintion('mauna')
    elif _telescope in ['1m0-03','1m0-11','coj','fts','Faulkes Telescope South']:    kk=lsc.sites.extintion('siding')

    if _calib not in ['sloan','sloanprime','natural','apass','']:   colorefisso=lsc.sites.colfix(_instrume)
    else:                                                           colorefisso=lsc.sites.colfix(_instrume,_calib)

    print redo
    print _cat
    if _cat and not redo:
        print 'already calibrated'
    else:
     try:
           lsc.mysqldef.updatevalue(database,'zcat','X',string.split(re.sub('.sn2.fits','.fits',img),'/')[-1])
           if os.path.isfile(string.split(re.sub('.diff.sn2.fits','.fits',img),'/')[-1]):
                 lsc.mysqldef.updatevalue(database,'zcat','X',string.split(re.sub('.diff.sn2.fits','.fits',img),'/')[-1])
     except: print 'module mysqldef not found'

     column=makecatalogue([img])[_filter][img]

     rasex=array(column['ra0'],float)
     decsex=array(column['dec0'],float)
     if _type=='fit':
        magsex=array(column['smagf'],float)
        magerrsex=array(column['smagerrf'],float)
     elif _type=='ph':
        magsex=array(column['magp3'],float)
        magerrsex=array(column['merrp3'],float)
     else: sys.exit(_type+' not valid (ph or fit)')
     

     print len(rasex)
     if not cutmag: cutmag=99
     #else: cutmag= cutmag-2.5*math.log10(float(_exptime))
     if len(compress( array(magsex) < float(cutmag) , magsex)) < 5 : cutmag=99  # not cut if only few object
     rasex     = compress(array(magsex,float)<=cutmag,rasex)
     decsex    = compress(array(magsex,float)<=cutmag,decsex)
     magerrsex = compress(array(magsex,float)<=cutmag,magerrsex)
     magsex    = compress(array(magsex,float)<=cutmag,array(magsex))

     print len(rasex)
     if _interactive:
        iraf.set(stdimage='imt1024')
        iraf.display(re.sub('.sn2','',img),1,fill=True,Stdout=1)
        vector=[]
        for i in range(0,len(rasex)):
            vector.append(str(rasex[i])+' '+str(decsex[i]))
        xy = iraf.wcsctran('STDIN',output="STDOUT",Stdin=vector,Stdout=1,image=img,inwcs='world',units='degrees degrees',outwcs='logical',\
                               formats='%10.1f %10.1f',verbose='yes')[3:]
        iraf.tvmark(1,'STDIN',Stdin=list(xy),mark="circle",number='yes',label='no',radii=10,nxoffse=5,nyoffse=5,color=207,txsize=2)
#        raw_input('here')
     if _catalogue:
        ######## use external catalogue
        if _catalogue[0]=='/':   stdcooC=lsc.lscastrodef.readtxt(_catalogue)
        else:                   stdcooC=lsc.lscastrodef.readtxt(lsc.__path__[0]+'/standard/cat/'+_catalogue)
        rastdC,decstdL=array(stdcooC['ra'],float),array(stdcooC['dec'],float)
        lsc.util.delete('tmp.stdL.pix')
        colonne=str(stdcooC['rapos'])+'   '+str(stdcooC['decpos'])
        if _catalogue[0]=='/': 
            iraf.wcsctran(_catalogue,'tmp.stdL.pix',img,inwcs='world',units='degrees degrees',outwcs='logical',\
                          columns=colonne,formats='%10.1f %10.1f',verbose='no')
        else:
            iraf.wcsctran(lsc.__path__[0]+'/standard/cat/'+_catalogue,'tmp.stdL.pix',img,inwcs='world',units='degrees degrees',outwcs='logical',\
                          columns=colonne,formats='%10.1f %10.1f',verbose='no')
        standardpixC=lsc.lscastrodef.readtxt('tmp.stdL.pix')
        if _interactive:
            iraf.tvmark(1,'tmp.stdL.pix',mark="circle",number='yes',label='no',radii=8,nxoffse=5,nyoffse=5,color=204,txsize=2)
        xstdC=standardpixC['ra']
        ystdC=standardpixC['dec']
        idstdC=standardpixC['id']
        xstdC=compress((array(xstdC,float)<readkey3(hdr,'XDIM'))&(array(xstdC,float)>0)&(array(ystdC,float)>0)&(array(ystdC,float)<readkey3(hdr,'YDIM')),xstdC)
        xstdL=xstdLL=xstdS=xstdC
        standardpixL=standardpixLL=standardpixS=standardpixC
        stdcooL=stdcooLL=stdcooS=stdcooC
     else:
        ######## check if it is landolt field
        stdcooL=lsc.lscastrodef.readtxt(lsc.__path__[0]+'/standard/cat/landolt.cat')
        rastdL,decstdL=array(stdcooL['ra'],float),array(stdcooL['dec'],float)
        lsc.util.delete('tmp.stdL.pix')
        iraf.wcsctran(lsc.__path__[0]+'/standard/cat/landolt.cat','tmp.stdL.pix',img,inwcs='world',units='degrees degrees',outwcs='logical',\
                          columns='1 2',formats='%10.1f %10.1f',verbose='no')
        standardpixL=lsc.lscastrodef.readtxt('tmp.stdL.pix')
        if _interactive:
            iraf.tvmark(1,'tmp.stdL.pix',mark="circle",number='yes',label='no',radii=8,nxoffse=5,nyoffse=5,color=204,txsize=2)
            print 'yelow circles sextractor'

        xstdL=standardpixL['ra']
        ystdL=standardpixL['dec']
        idstdL=standardpixL['id']
        xstdL=compress((array(xstdL,float)<readkey3(hdr,'XDIM'))&(array(xstdL,float)>0)&(array(ystdL,float)>0)&(array(ystdL,float)<readkey3(hdr,'YDIM')),xstdL)

        ######## check if it is Stetson field
        stdcooLL=lsc.lscastrodef.readtxt(lsc.__path__[0]+'/standard/cat/StetsonCat.dat')
        ww=asarray([i for i in range(len(stdcooLL['ra'])) if ( abs(float(stdcooLL['ra'][i])-float(_ra))<.2 and  abs(float(stdcooLL['dec'][i])-_dec)<.2    )])
        if len(ww)>0:
            for hh in stdcooLL.keys(): 
                if type(stdcooLL[hh])!=int:
                    if hh not in ['id','ra','dec']:
                        stdcooLL[hh]=array(array(stdcooLL[hh])[ww],float)
                    else:
                        stdcooLL[hh]=array(stdcooLL[hh])[ww]
        lll=[]
        for i in range(0,len(stdcooLL['ra'])): lll.append(stdcooLL['ra'][i]+' '+stdcooLL['dec'][i])

        rastdLL,decstdLL=array(stdcooLL['ra'],float),array(stdcooLL['dec'],float)
        lsc.util.delete('tmp.stdLL.pix')
        iraf.wcsctran('STDIN','tmp.stdLL.pix',img,inwcs='world',Stdin=lll,units='degrees degrees',outwcs='logical',\
                          columns='1 2',formats='%10.1f %10.1f',verbose='no')
        if _interactive:
            iraf.tvmark(1,'tmp.stdLL.pix',mark="cross",number='yes',label='no',radii=8,nxoffse=5,nyoffse=5,color=204,txsize=2)
            print 'red crosses Stetson'

        standardpixLL={}
        for ii in stdcooLL.keys(): standardpixLL[ii]=stdcooLL[ii]
        standardpixLL['ra']=array(iraf.proto.fields('tmp.stdLL.pix',fields='1',Stdout=1),float) #standardpixLL['ra']
        standardpixLL['dec']=array(iraf.proto.fields('tmp.stdLL.pix',fields='2',Stdout=1),float) #standardpixLL['dec']
        xstdLL=array(iraf.proto.fields('tmp.stdLL.pix',fields='1',Stdout=1),float) #standardpixLL['ra']
        ystdLL=array(iraf.proto.fields('tmp.stdLL.pix',fields='2',Stdout=1),float) #standardpixLL['dec']
        idstdLL=standardpixLL['id']

        xstdLL=compress((array(xstdLL,float)<readkey3(hdr,'XDIM'))&(array(xstdLL,float)>0)&(array(ystdLL,float)>0)&(array(ystdLL,float)<readkey3(hdr,'YDIM')),xstdLL)
        ######## check if it is sloan field
        magsel0,magsel1=12,18
        _ids=lsc.lscastrodef.sloan2file(_ra,_dec,20,float(magsel0),float(magsel1),'_tmpsloan.cat')
        ascifile='_tmpsloan.cat'
        stdcooS=lsc.lscastrodef.readtxt(ascifile)
        rastdS,decstdS=array(stdcooS['ra'],float),array(stdcooS['dec'],float)
        lsc.util.delete('tmp.stdS.pix')
        iraf.wcsctran(ascifile,'tmp.stdS.pix',img,inwcs='world',units='degrees degrees',outwcs='logical',columns='1 2',formats='%10.1f %10.1f',verbose='no')
        standardpixS=lsc.lscastrodef.readtxt('tmp.stdS.pix')
        if _interactive:
            iraf.tvmark(1,'tmp.stdS.pix',mark="cross",number='yes',label='no',radii=8,nxoffse=5,nyoffse=5,color=205,txsize=2)
            print 'green cross sloan'
        xstdS=standardpixS['ra']
        ystdS=standardpixS['dec']
        idstdS=standardpixS['id']
        xstdS=compress((array(xstdS,float)<readkey3(hdr,'XDIM'))&(array(xstdS,float)>0)&(array(ystdS,float)>0)&(array(ystdS,float)<readkey3(hdr,'YDIM')),xstdS)
        ##############################################3
     if not _catalogue and len(xstdLL)>0:
             xstdL=xstdLL
             standardpixL=standardpixLL
             stdcooL=stdcooLL

     if _filter in ['U', 'B', 'V', 'R','I','Bessell-B','Bessell-V','Bessell-R','Bessell-I']:
        filters={'U':'U', 'B':'B', 'V':'V', 'R':'R', 'I':'I','Bessell-B':'B','Bessell-V':'V','Bessell-R':'R','Bessell-I':'I'}
        if _color:
            colors=lsc.myloopdef.chosecolor(_color,False)
            if not colors:             colors={'U':['UB'],'B':['UB','BV'],'V':['BV','VR'],'R':['VR','RI'],'I':['RI']}
        else:
            colors={'U':['UB'],'B':['UB','BV'],'V':['BV','VR'],'R':['VR','RI'],'I':['RI']}
        if _field=='sloan':
                standardpix,stdcoo={'ra':[9999],'dec':[9999],'id':[1]},{'ra':[9999],'dec':[9999]}
                print 'filters and field selected do not match'
        else:
            _field='landolt'
            if len(xstdL)>=1:
                    standardpix=standardpixL
                    stdcoo=stdcooL
                    if not _catalogue:
                          if len(xstdLL)>0: _catalogue='StetsonCat.dat'
                          else:             _catalogue='landolt.dat'
            elif len(xstdS)>=1:
                if not _catalogue:  _catalogue='sdss8'  
                standardpix=standardpixS
                stdcoo=stdcooS
                stdcoo=lsc.lscastrodef.transformsloanlandolt(stdcoo)
                if not _catalogue:  _catalogue='sdss8' 
                print '\n### transform sloan in landolt'
            else:
                print 'landolt, but catalogue not found'
                standardpix,stdcoo={'ra':[9999],'dec':[9999],'id':[1]},{'ra':[9999],'dec':[9999]}
     elif _filter in  ['up','gp','rp','ip','zs','SDSS-G','SDSS-R','SDSS-I','Pan-Starrs-Z']: 
        filters={'up':'u','ip':'i','gp':'g','rp':'r','zs':'z','SDSS-G':'g','SDSS-R':'r','SDSS-I':'i','Pan-Starrs-Z':'z'}
        if _color:
            colors=lsc.myloopdef.chosecolor(_color,False)
            if not colors:             colors={'i':['ri','iz'],'r':['gr','ri'],'g':['ug','gr'],'z':['iz'],'u':['ug']}
        else:
            colors={'i':['ri','iz'],'r':['gr','ri'],'g':['ug','gr'],'z':['iz'],'u':['ug']}
        if _field=='landolt':   
                standardpix,stdcoo={'ra':[9999],'dec':[9999],'id':[1]},{'ra':[9999],'dec':[9999]}
                print 'filters and field selected do not match'
        else:
            _field='sloan'
            if len(xstdS)>=1:
                if not _catalogue:  _catalogue='sdss8' 
                standardpix=standardpixS
                stdcoo=stdcooS
            elif len(xstdL)>=1:
                standardpix=standardpixL
                stdcoo=stdcooL
                stdcoo=lsc.lscastrodef.transformlandoltsloan(stdcoo)
                if not _catalogue:  _catalogue='landolt.dat' 
                print '\n### transform landolt to sloan'
            else:
                print 'sloan, but not in the sdss footprint'
                standardpix,stdcoo={'ra':[9999],'dec':[9999],'id':[1]},{'ra':[9999],'dec':[9999]}        

     xstd=standardpix['ra']
     ystd=standardpix['dec']
     idstd=standardpix['id']
     rastd,decstd=array(stdcoo['ra'],float),array(stdcoo['dec'],float)
     xstd0=compress((array(xstd,float)<readkey3(hdr,'XDIM'))&(array(xstd,float)>0)&(array(ystd,float)>0)&(array(ystd,float)<readkey3(hdr,'YDIM')),xstd)

     if len(xstd0)>1:  ########   go only if standard stars are in the field  ##########
        magstd0={}
        airmass0={}
        result={}
        fileph={}
        print '\n###  standard field: '+str(_field)
        ystd0=compress((array(xstd,float)<readkey3(hdr,'XDIM'))&(array(xstd,float)>0)&(array(ystd,float)>0)\
                               &(array(ystd,float)<readkey3(hdr,'YDIM')),ystd)
        rastd0=compress((array(xstd,float)<readkey3(hdr,'XDIM'))&(array(xstd,float)>0)&(array(ystd,float)>0)\
                                &(array(ystd,float)<readkey3(hdr,'YDIM')),rastd)
        decstd0=compress((array(xstd,float)<readkey3(hdr,'XDIM'))&(array(xstd,float)>0)&(array(ystd,float)>0)\
                                 &(array(ystd,float)<readkey3(hdr,'YDIM')),decstd)
        idstd0=compress((array(xstd,float)<readkey3(hdr,'XDIM'))&(array(xstd,float)>0)&(array(ystd,float)>0)\
                                 &(array(ystd,float)<readkey3(hdr,'YDIM')),idstd)
        stdcoo0={}
        for key in stdcoo.keys():
              if key in 'ugrizUBVRI':
                    stdcoo0[key]=compress((array(xstd,float)<readkey3(hdr,'XDIM'))&(array(xstd,float)>0)&(array(ystd,float)>0)\
                                                &(array(ystd,float)<readkey3(hdr,'YDIM')),stdcoo[key])
        ###############################################################
        #               pos0 = standard                          pos1 = sextractor
        distvec,pos0,pos1=lsc.lscastrodef.crossmatch(array(rastd0),array(decstd0),array(rasex),array(decsex),10)
        for key in stdcoo0.keys():            stdcoo0[key]=stdcoo0[key][pos0]
        rastd0=rastd0[pos0]
        decstd0=decstd0[pos0]
        idstd0=idstd0[pos0]
        rasex=rasex[pos1]
        decsex=decsex[pos1]
        # after change in may 2013 mag in sn2.fits file are already at 1s
        magsex=magsex[pos1]-kk[filters[_filter]]*float(_airmass)  #   - K x airmass
#        magsex=magsex[pos1]+2.5*math.log10(float(_exptime))-kk[filters[_filter]]*float(_airmass)  #  mag    exptime      - K x airmass
#################################################################################
        if _field=='landolt':
            print '\n###  landolt system'
            for _filtlandolt in 'UBVRI':
                if _filtlandolt==filters[_filter]:  airmass0[_filtlandolt]=  0 #_airmass
                else: airmass0[_filtlandolt]= 0
                magstd0[_filtlandolt]=stdcoo0[_filtlandolt]
            fileph['mU']=zeros(len(rastd0))+999
            fileph['mB']=zeros(len(rastd0))+999
            fileph['mV']=zeros(len(rastd0))+999
            fileph['mR']=zeros(len(rastd0))+999
            fileph['mI']=zeros(len(rastd0))+999
            fileph['V']=magstd0['V']
            fileph['BV']=array(array(magstd0['B'],float)-array(magstd0['V'],float),str)
            fileph['UB']=array(array(magstd0['U'],float)-array(magstd0['B'],float),str)
            fileph['VR']=array(array(magstd0['V'],float)-array(magstd0['R'],float),str)
            fileph['RI']=array(array(magstd0['R'],float)-array(magstd0['I'],float),str)
        elif _field=='sloan':
            for _filtsloan in 'ugriz':
                if _filtsloan==filters[_filter]:  airmass0[_filtsloan]= 0   # _airmass
                else: airmass0[_filtsloan]=0
                magstd0[_filtsloan]=stdcoo0[_filtsloan]
            fileph['mu']=zeros(len(rastd0))+999
            fileph['mg']=zeros(len(rastd0))+999
            fileph['mr']=zeros(len(rastd0))+999
            fileph['mi']=zeros(len(rastd0))+999
            fileph['mz']=zeros(len(rastd0))+999
            fileph['r']=magstd0['r']
            fileph['gr']=array(array(magstd0['g'],float)-array(magstd0['r'],float),str)
            fileph['ri']=array(array(magstd0['r'],float)-array(magstd0['i'],float),str)
            fileph['ug']=array(array(magstd0['u'],float)-array(magstd0['g'],float),str)
            fileph['iz']=array(array(magstd0['i'],float)-array(magstd0['z'],float),str)
########################################################################################
        zero=[]
        magcor=[]
        fil = open(re.sub('.fits','.ph',img),'w')
        fil.write(str(_instrume)+' '+str(_date)+'\n')
        fil.write('*** '+_object+' '+str(len(magsex))+'\n')
        if _field=='landolt':
            fil.write('%6.6s\t%6.6s\t%6.6s\t%6.6s\t%6.6s\n' % (str(1),str(1),str(1),str(1),str(1)))  # exptime
            fil.write('%6.6s\t%6.6s\t%6.6s\t%6.6s\t%6.6s\n' % (str(airmass0['U']),str(airmass0['B']),str(airmass0['V']),str(airmass0['R']),str(airmass0['I'])))
        elif _field=='sloan':
            fil.write('%6.6s\t%6.6s\t%6.6s\t%6.6s\t%6.6s\n' % (str(1),str(1),str(1),str(1),str(1)))  # exptime
            fil.write('%6.6s\t%6.6s\t%6.6s\t%6.6s\t%6.6s\n' % (str(airmass0['u']),str(airmass0['g']),str(airmass0['r']),str(airmass0['i']),str(airmass0['z'])))
        for i in range(0,len(magsex)): 
            fileph['m'+filters[_filter]][i]=magsex[i]    #  instrumental mangitude of std in pos0[i]
            if _field=='landolt':
                stringastandard='%12.12s\t%7.7s\t%7.7s\t%7.7s\t%7.7s\t%7.7s' % (idstd0[i],fileph['V'][i],fileph['BV'][i],fileph['UB'][i],\
                                                                                fileph['VR'][i],fileph['RI'][i])
                fil.write('%7.7s\t%7.7s\t%7.7s\t%7.7s\t%7.7s\t%60.60s\n' \
                              % (str(fileph['mU'][i]),str(fileph['mB'][i]),str(fileph['mV'][i]),str(fileph['mR'][i]),str(fileph['mI'][i]),str(stringastandard)))
            elif _field=='sloan':
                stringastandard='%12.12s\t%7.7s\t%7.7s\t%7.7s\t%7.7s\t%7.7s' % (idstd0[i],fileph['r'][i],fileph['gr'][i],fileph['ug'][i],\
                                                                                fileph['ri'][i],fileph['iz'][i])
                fil.write('%7.7s\t%7.7s\t%7.7s\t%7.7s\t%7.7s\t%60.60s\n' \
                              % (str(fileph['mu'][i]),str(fileph['mg'][i]),str(fileph['mr'][i]),str(fileph['mi'][i]),str(fileph['mz'][i]),str(stringastandard)))
            zero.append(float(float(magstd0[filters[_filter]][i]))-float(magsex[i]))
            magcor.append(magsex[i])
        fil.close()

        if show:
              import time
              from pylab import ion,plot,draw
              ion()
              aa=mean(compress(abs(array(zero))<99,zero))
              xxx=compress((abs(array(magcor))<99)&(abs(array(zero))<99),magcor)
              yyy=compress((abs(array(zero))<99)&(abs(array(magcor))<99),zero)
              plot(xxx,yyy,'or')
              plot([min(compress(abs(array(magcor))<99,magcor)),max(compress(abs(array(magcor))<99,magcor))],[aa,aa],'-b')
              draw()
              print std(compress(abs(array(zero))<99,zero))
              time.sleep(5)

        colorvec=colors[filters[_filter]]
        for col in colorvec:
            col0=magstd0[col[0]] 
            col1=magstd0[col[1]]
            colstd0=array(col0,float)-array(col1,float)
            ################## sex  ######################
            colore=[]
            for i in range(0,len(pos1)):   colore.append(colstd0[i])

            colore1=compress(abs(array(zero))<50,array(colore))
            zero1=compress(abs(array(zero))<50,array(zero))
            zero2=compress(abs(array(colore1))<2,array(zero1))
            colore2=compress(abs(array(colore1))<2,array(colore1))
            if _fix: fisso=colorefisso[filters[_filter]+col]
            else: fisso=''

            if len(colore2)==0:
                print 'no calibration, '+_filter+' '+_field
                b,a,sa,sb=9999,9999,0,0
            else:
                if _interactive:    a,sa,b,sb=fitcol(colore2,zero2,_filter,col,fisso)
                else:               a,sa,b,sb=fitcol2(colore2,zero2,_filter,col,fisso,show,rejection)

            print a,sa,b,sb
            result[filters[_filter]+col]=[a,sa,b,sb]
        if result:
            print '\n### zeropoint ..... done at airmass 0'
            if _catalogue:
                lsc.util.updateheader(img,0,{'CATALOG':[str(string.split(_catalogue,'/')[-1]),'catalogue source']})
            stringa=''
            for ll in result:
                for kk in range(0,len(result[ll])):
                                    if not isfinite(result[ll][kk]): result[ll][kk]=0.0 
                valore='%3.3s %6.6s %6.6s  %6.6s  %6.6s' %  (str(ll),str(result[ll][0]),str(result[ll][2]),str(result[ll][1]),str(result[ll][3]))
                print '### ',valore
                lsc.util.updateheader(img,0,{'zp'+ll:[str(valore),'a b sa sb in y=a+bx']})
                if ll[0]==ll[2]: num=2
                elif ll[0]==ll[1]: num=1
                else: sys.exit('somthing wrong with color '+ll)
                print ll,num
                try:
                    print 'zcol'+str(num),ll[1:],string.split(re.sub('.sn2.fits','.fits',img),'/')[-1]
                    lsc.mysqldef.updatevalue(database,'zcol'+str(num),ll[1:],string.split(re.sub('.sn2.fits','.fits',img),'/')[-1])
                    lsc.mysqldef.updatevalue(database,'z'+str(num),result[ll][0],string.split(re.sub('.sn2.fits','.fits',img),'/')[-1])
                    lsc.mysqldef.updatevalue(database,'c'+str(num),result[ll][2],string.split(re.sub('.sn2.fits','.fits',img),'/')[-1])
                    lsc.mysqldef.updatevalue(database,'dz'+str(num),result[ll][1],string.split(re.sub('.sn2.fits','.fits',img),'/')[-1])
                    lsc.mysqldef.updatevalue(database,'dc'+str(num),result[ll][3],string.split(re.sub('.sn2.fits','.fits',img),'/')[-1])
                    if os.path.isfile(string.split(re.sub('.diff.sn2.fits','.fits',img),'/')[-1]):
                          lsc.mysqldef.updatevalue(database,'zcol'+str(num),ll[1:],string.split(re.sub('.diff.sn2.fits','.fits',img),'/')[-1])
                          lsc.mysqldef.updatevalue(database,'z'+str(num),result[ll][0],string.split(re.sub('.diff.sn2.fits','.fits',img),'/')[-1])
                          lsc.mysqldef.updatevalue(database,'c'+str(num),result[ll][2],string.split(re.sub('.diff.sn2.fits','.fits',img),'/')[-1])
                          lsc.mysqldef.updatevalue(database,'dz'+str(num),result[ll][1],string.split(re.sub('.diff.sn2.fits','.fits',img),'/')[-1])
                          lsc.mysqldef.updatevalue(database,'dc'+str(num),result[ll][3],string.split(re.sub('.diff.sn2.fits','.fits',img),'/')[-1])
                    if result[ll][0]!=9999:
                          print _catalogue
                          lsc.mysqldef.updatevalue(database,'zcat',string.split(_catalogue,'/')[-1],string.split(re.sub('.sn2.fits','.fits',img),'/')[-1])
                          if os.path.isfile(string.split(re.sub('.diff.sn2.fits','.fits',img),'/')[-1]):
                                lsc.mysqldef.updatevalue(database,'zcat',string.split(_catalogue,'/')[-1],string.split(re.sub('.diff.sn2.fits','.fits',img),'/')[-1])
                    else:
                        lsc.mysqldef.updatevalue(database,'zcat','X',string.split(re.sub('.sn2.fits','.fits',img),'/')[-1])
                        if os.path.isfile(string.split(re.sub('.diff.sn2.fits','.fits',img),'/')[-1]):
                              lsc.mysqldef.updatevalue(database,'zcat','X',string.split(re.sub('.diff.sn2.fits','.fits',img),'/')[-1])
                except: print 'module mysqldef not found'
Esempio n. 19
0
def mkskyflat_quick(inlist,
                    output,
                    inpref='',
                    bpm='none',
                    iternum=50,
                    nsigma=3):

    # load IRAF package
    iraf.proto()
    iraf.nproto()

    # open input list and check if it exists
    inimg_arr = check_input(inlist, inpref)
    if len(inimg_arr) == 1 and inimg_arr[0] == 1:
        return 1

    # check if output image is already exist
    if os.access(output, os.R_OK):
        print >> sys.stderr, 'operation would overwrite existing file (%s)' % output
        return 1

    # check optional parameters
    if bpm.lower() == 'none' or bpm == '':
        bpmex = 0
    else:
        bpmex = 1
        if not os.access(bpm, os.R_OK):
            print >> sys.stderr, 'cannot read bad pixel mask (%s)' % bpm
            return 1

    if iternum <= 0:
        print >> sys.stderr, 'invalid iternum value (%d)' % iternum
        return 1

    if nsigma <= 0:
        print >> sys.stderr, 'invalid nsigma value (%f)' % nsigma
        return 1

    # prefix for temoprary images
    tmp = tempfile.NamedTemporaryFile(suffix='', prefix='', dir='/tmp')
    tmp_prefix = tmp.name
    tmp.close()

    # temporary normalize raw frames by average
    tmp_list = tmp_prefix + '.lst'
    fout = open(tmp_list, 'w')
    for i in range(len(inimg_arr)):

        tmpimg = tmp_prefix + os.path.basename(inimg_arr[i])
        fout.write('%s\n' % tmpimg)

        # remove temporary files if it exists
        if os.access(tmpimg, os.R_OK):
            os.remove(tmpimg)

        # calculate average counts in each frame
        if bpmex == 0:
            iraf.unlearn('imstat')
            res = iraf.imstat(inimg_arr[i],
                              format='no',
                              fields='mean',
                              nclip=iternum,
                              lsigma=nsigma,
                              usigma=nsigma,
                              Stdout=1)
            if len(res) == 1:
                ave = float(res[0])
            else:
                print >> sys.stderr, 'failed to calculate avarage from the frame (%s)' % inimg
                remove_temp_all(tmp_prefix)
                fout.close()
                return 1
        else:
            iraf.unlearn('mimstat')
            res = iraf.mimstat(inimg_arr[i],
                               imasks=bpm,
                               format='no',
                               fields='mean',
                               nclip=iternum,
                               lsigma=nsigma,
                               usigma=nsigma,
                               Stdout=1)
            if len(res) == 1:
                ave = float(res[0])
            else:
                print >> sys.stderr, 'failed to calculate masked avarage from the frame (%s)' % inimg
                remove_temp_all(tmp_prefix)
                fout.close()
                return 1

        # normalize each frame by average
        iraf.unlearn('imarith')
        iraf.imarith(inimg_arr[i], '/', ave, tmpimg, verbose='no')

    # close output file handler
    fout.close()

    # make temporary sky flat frame
    tmp_flat = tmp_prefix + '_sflat.fits'
    ret = zcombine(tmp_list, output, combine='median', reject='sigclip')
    if ret != 0:
        remove_temp_all(tmp_prefix)
        return 1

    # remove temoprary files
    remove_temp_all(tmp_prefix)

    return 0