Example #1
0
def test_gki_prow_to_different_devices():  # rename to disable for now
    """Test 2 prow calls, each to different devices - one .ps written.

    10 May 2012 - rename to disable for now - is sending nightly prints
    to hpc84.
    It seems that the cups system takes the print to hp_dev_null and
    changes that to an existing printer, knowing it is wrong ...
    When there is time, look into a way to start this test up again without any
    danger of prints going to an actual printer.
    """
    iraf.plot(_doprint=0)  # load plot for prow
    # get look at tmp dir before plot/flush
    flistBef = findAllTmpPskFiles()
    # use a fake printer name so we don't waste a sheet of paper with each test
    os.environ['LPDEST'] = "hp_dev_null"
    os.environ['PRINTER'] = "hp_dev_null"
    # plot
    iraf.prow("dev$pix", row=256, dev=PSDEV)  # plot (no .ps file yet)
    # plot to fake printer, should flush
    iraf.prow("dev$pix", row=333, dev="lw")
    # last plot, and should warn @ fake
    # get output postscript temp file name
    psOut = getNewTmpPskFile(flistBef, "prow_to_different_devices")
    # diff
    diffit(EXP2IGNORE, psOut,
           os.path.join(DATA_DIR, PSDEV + "_prow_256.ps"))
    # NOW flush - should do nothing
    flistBef = findAllTmpPskFiles()
    iraf.gflush()
    flistAft = findAllTmpPskFiles()
    assert flistBef == flistAft, "Extra tmp .ps file written? "+str(flistAft)
Example #2
0
def gki_2_prows_no_append_test():
   """ Test 2 prow calls with no append (2 dev$pix rows) to 2 .ps's """
   iraf.plot(_doprint=0) # load plot for prow
   # get look at tmp dir before plot/flush
   flistBef = findAllTmpPskFiles()
   # plot
   iraf.prow("dev$pix", row=256, dev=PSDEV) # plot
   iraf.prow("dev$pix", row=250, dev=PSDEV) # plot again (flushes 1st)
   # get output postscript temp file name
   prf = None
   if os.uname()[0] == 'SunOS': prf = '.eps' # Solaris can leave extras here
   psOut = getNewTmpPskFile(flistBef, "2_prows_no_append - A", preferred=prf)
   # diff
   # NOTE - this seems to get 0-len files when (not stdin.isatty()) for psdump
   diffit(EXP2IGNORE, psOut,
          os.environ['PYRAF_TEST_DATA']+os.sep+PSDEV+"_prow_256.ps")
   # NOW flush second
   flistBef = findAllTmpPskFiles()
   iraf.gflush()
   # get output postscript temp file name
   prf = None
   if os.uname()[0] == 'SunOS': prf = '.eps' # Solaris can leave extras here
   psOut = getNewTmpPskFile(flistBef, "2_prows_no_append - B", preferred=prf)
   # diff
   diffit(EXP2IGNORE, psOut,
          os.environ['PYRAF_TEST_DATA']+os.sep+PSDEV+"_prow_250.ps")
Example #3
0
def test_gki_2_prows_no_append():
    """ Test 2 prow calls with no append (2 dev$pix rows) to 2 .ps's """
    iraf.plot(_doprint=0)  # load plot for prow
    # get look at tmp dir before plot/flush
    flistBef = findAllTmpPskFiles()
    # plot
    iraf.prow("dev$pix", row=256, dev=PSDEV)  # plot
    iraf.prow("dev$pix", row=250, dev=PSDEV)  # plot again (flushes 1st)
    # get output postscript temp file name
    prf = None
    if os.uname()[0] == 'SunOS':
        prf = '.eps'  # Solaris can leave extras here
    psOut = getNewTmpPskFile(flistBef, "2_prows_no_append - A", preferred=prf)
    # diff
    # NOTE - this seems to get 0-len files when (not stdin.isatty()) for psdump
    diffit(EXP2IGNORE, psOut,
           os.path.join(DATA_DIR, PSDEV + "_prow_256.ps"))
    # NOW flush second
    flistBef = findAllTmpPskFiles()
    iraf.gflush()
    # get output postscript temp file name
    prf = None
    if os.uname()[0] == 'SunOS':
        prf = '.eps'  # Solaris can leave extras here
    psOut = getNewTmpPskFile(flistBef, "2_prows_no_append - B", preferred=prf)
    # diff
    diffit(EXP2IGNORE, psOut,
           os.path.join(DATA_DIR, PSDEV + "_prow_250.ps"))
Example #4
0
def test_gki_single_prow():
    """ Test a prow-plot of a single row from dev$pix to .ps """
    iraf.plot(_doprint=0)  # load plot for prow
    # get look at tmp dir before plot/flush
    flistBef = findAllTmpPskFiles()
    # plot
    iraf.prow("dev$pix", row=256, dev=PSDEV)  # plot
    iraf.gflush()
    # get output postscript temp file name
    psOut = getNewTmpPskFile(flistBef, "single_prow")
    # diff
    diffit(EXP2IGNORE, psOut, os.path.join(DATA_DIR, PSDEV + "_prow_256.ps"))
Example #5
0
def gki_prow_1_append_test():
   """ Test a prow-plot with 1 append (2 rows total, dev$pix) to .ps """
   iraf.plot(_doprint=0) # load plot for prow
   # get look at tmp dir before plot/flush
   flistBef = findAllTmpPskFiles()
   # plot
   iraf.prow("dev$pix", row=256, dev=PSDEV) # plot
   iraf.prow("dev$pix", row=250, dev=PSDEV, append=True) # append #1
   iraf.gflush()
   # get output postscript temp file name
   psOut = getNewTmpPskFile(flistBef, "prow_1_append")
   # diff
   diffit(EXP2IGNORE, psOut,
          os.environ['PYRAF_TEST_DATA']+os.sep+PSDEV+"_prow_256_250.ps")
Example #6
0
def test_gki_prow_1_append():
    """ Test a prow-plot with 1 append (2 rows total, dev$pix) to .ps """
    iraf.plot(_doprint=0)  # load plot for prow
    # get look at tmp dir before plot/flush
    flistBef = findAllTmpPskFiles()
    # plot
    iraf.prow("dev$pix", row=256, dev=PSDEV)  # plot
    iraf.prow("dev$pix", row=250, dev=PSDEV, append=True)  # append #1
    iraf.gflush()
    # get output postscript temp file name
    psOut = getNewTmpPskFile(flistBef, "prow_1_append")
    # diff
    diffit(EXP2IGNORE, psOut,
           os.path.join(DATA_DIR, PSDEV + "_prow_256_250.ps"))
Example #7
0
def test_gki_prow_2_appends():
    """ Test a prow-plot with 2 appends (3 rows total, dev$pix) to .ps """
    iraf.plot(_doprint=0)  # load plot for prow
    # get look at tmp dir before plot/flush
    flistBef = findAllTmpPskFiles()
    # plot
    iraf.prow("dev$pix", row=256, dev=PSDEV)  # plot
    iraf.prow("dev$pix", row=250, dev=PSDEV, append=True)  # append #1
    iraf.prow("dev$pix", row=200, dev=PSDEV, append=True)  # append #2
    iraf.gflush()
    # get output postscript temp file name
    psOut = getNewTmpPskFile(flistBef, "prow_2_appends")
    # diff
    diffit(EXP2IGNORE, psOut,
           os.path.join(DATA_DIR, PSDEV + "_prow_256_250_200.ps"))
Example #8
0
def gki_prow_2_appends_test():
   """ Test a prow-plot with 2 appends (3 rows total, dev$pix) to .ps """
   iraf.plot(_doprint=0) # load plot for prow
   # get look at tmp dir before plot/flush
   flistBef = findAllTmpPskFiles()
   # plot
   iraf.prow("dev$pix", row=256, dev=PSDEV) # plot
   iraf.prow("dev$pix", row=250, dev=PSDEV, append=True) # append #1
   iraf.prow("dev$pix", row=200, dev=PSDEV, append=True) # append #2
   iraf.gflush()
   # get output postscript temp file name
   psOut = getNewTmpPskFile(flistBef, "prow_2_appends")
   # diff
   diffit(EXP2IGNORE, psOut,
          os.environ['PYRAF_TEST_DATA']+os.sep+PSDEV+"_prow_256_250_200.ps")
Example #9
0
def gki_prow_to_different_devices_tst(): # rename to disable for now
   """ Test 2 prow calls, each to different devices - one .ps written """
   iraf.plot(_doprint=0) # load plot for prow
   # get look at tmp dir before plot/flush
   flistBef = findAllTmpPskFiles()
   # use a fake printer name so we don't waste a sheet of paper with each test
   os.environ['LPDEST'] = "hp_dev_null"
   os.environ['PRINTER'] = "hp_dev_null"
   # plot
   iraf.prow("dev$pix", row=256, dev=PSDEV) # plot (no .ps file yet)
   iraf.prow("dev$pix", row=333, dev="lw") # plot to fake printer, should flush
                                           # last plot, and should warn @ fake
   # get output postscript temp file name
   psOut = getNewTmpPskFile(flistBef, "prow_to_different_devices")
   # diff
   diffit(EXP2IGNORE, psOut,
          os.environ['PYRAF_TEST_DATA']+os.sep+PSDEV+"_prow_256.ps")
   # NOW flush - should do nothing
   flistBef = findAllTmpPskFiles()
   iraf.gflush()
   flistAft = findAllTmpPskFiles()
   assert flistBef==flistAft, "Extra tmp .ps file written? "+str(flistAft)
Example #10
0
def gki_prow_to_different_devices_tst(): # rename to disable for now
   """ Test 2 prow calls, each to different devices - one .ps written """
   iraf.plot(_doprint=0) # load plot for prow
   # get look at tmp dir before plot/flush
   flistBef = findAllTmpPskFiles()
   # use a fake printer name so we don't waste a sheet of paper with each test
   os.environ['LPDEST'] = "hp_dev_null"
   os.environ['PRINTER'] = "hp_dev_null"
   # plot
   iraf.prow("dev$pix", row=256, dev=PSDEV) # plot (no .ps file yet)
   iraf.prow("dev$pix", row=333, dev="lw") # plot to fake printer, should flush
                                           # last plot, and should warn @ fake
   # get output postscript temp file name
   psOut = getNewTmpPskFile(flistBef, "prow_to_different_devices")
   # diff
   diffit(EXP2IGNORE, psOut,
          os.environ['PYRAF_TEST_DATA']+os.sep+PSDEV+"_prow_256.ps")
   # NOW flush - should do nothing
   flistBef = findAllTmpPskFiles()
   iraf.gflush()
   flistAft = findAllTmpPskFiles()
   assert flistBef==flistAft, "Extra tmp .ps file written? "+str(flistAft)
Example #11
0
def drztranback(drzfile, x=0, y=0, fltlist=None, xylistfile='', verbose=True):
    """ 
    convert a set of coordinates from a drz image into
    the coordinate space of each of the contributing _flt files
    returns a list of tuples with (fltfile,x,y)
    """
    import os
    import pyfits
    from pyraf import iraf
    from iraf import stsdas
    from numpy import loadtxt, iterable
    stsdas.analysis()
    stsdas.dither()

    # get output (i.e. drizzled) image size
    nxout = pyfits.getval(drzfile, 'NAXIS1')
    nyout = pyfits.getval(drzfile, 'NAXIS2')
    scaleout = 3600 * (abs(pyfits.getval(drzfile, 'CD1_1')) +
                       abs(pyfits.getval(drzfile, 'CD2_2')))

    xscaleout = 7200 * abs(pyfits.getval(drzfile, 'CD1_1'))
    yscaleout = 7200 * abs(pyfits.getval(drzfile, 'CD2_2'))

    # if needed, get a list of contributing flt files and/or coeff files
    if not fltlist:
        fltlist = getfltlist(drzfile)

    # build the list of coordinates, starting with the original drzfile x,y coords
    returnlist = []
    if xylistfile:
        xlist, ylist = loadtxt(xylistfile, unpack=True)
    elif iterable(x):
        xlist, ylist = x, y
    else:
        xlist, ylist = [float(x)], [float(y)]
    for xx, yy in zip(x, y):
        returnlist.append((drzfile, 1, xx, yy))

    # write out a list of drz-frame x,y positions into a text file.
    # this is used as input to wtranback for all flt files
    xylistfile = util.naming.chsuffix(os.path.basename(drzfile),
                                      '_fake.xylist')
    fout = open(xylistfile, 'w')
    for xx, yy in zip(xlist, ylist):
        print >> fout, "%15.5f %15.5f" % (xx, yy)
    fout.close()

    # translate the x,y coords back to _flt coordinates
    # TODO : probably need to allow for up to 2 coeff files
    # for every flt file, for UVIS and ACS
    # for fltfile,coefffile in zip(fltlist,coefflist) :
    for fltfile in fltlist:
        if verbose: print("translating %s to %s coords" % (drzfile, fltfile))

        # find all the sci extensions
        flthdulist = pyfits.open(fltfile)
        extlist = [
            i for i in range(len(flthdulist))
            if flthdulist[i].name.lower().startswith('sci')
        ]

        for ext in extlist:
            nxin = pyfits.getval(fltfile, 'NAXIS1', ext=ext)
            nyin = pyfits.getval(fltfile, 'NAXIS2', ext=ext)
            scalein = 3600 * (abs(pyfits.getval(fltfile, 'CD1_1', ext=ext)) +
                              abs(pyfits.getval(fltfile, 'CD2_2', ext=ext)))
            xscalein = 7200 * abs(pyfits.getval(fltfile, 'CD1_1', ext=ext))
            yscalein = 7200 * abs(pyfits.getval(fltfile, 'CD2_2', ext=ext))

            # slimmed down wtranback call from LS: 2011.04.28
            #
            # NOTE: we use the xylistfile as input even when
            # there is only one pair of coordinates
            iraf.wtranback.unlearn()
            iraf.flpr()
            iraf.flpr()
            iraf.gflush()
            iraf.gflush()

            #coeffile = os.path.join(snworkdir,fltfile[:-5] + '_coeffs1.dat')
            coeffile = fltfile[:-5] + '_coeffs1.dat'
            output = iraf.wtranback(0,
                                    0,
                                    nxin=nxin,
                                    nxout=nxout,
                                    nyin=nyin,
                                    nyout=nyout,
                                    xylist=xylistfile,
                                    coeffs=coeffile,
                                    geomode='wcs',
                                    refim=drzfile,
                                    inimage=fltfile + '[%i]' % ext,
                                    Stdout=1)

            for line in output:
                if line.startswith(' Xin,Yin:'):
                    xin, yin = map(float, line.split()[1:3])
                    if xin > 0 and xin < nxin and yin > 0 and yin < nyin:
                        returnlist.append(
                            (fltfile, ext, float(xin), float(yin)))
    return (returnlist)
Example #12
0
def runApphot(imfile, coofile=None, magfile=None):
    """ 
    use iraf.digiphot.apphot 
    to collect aperture photometry
    """
    import pyraf
    from pyraf import iraf
    import os
    import pyfits

    if not coofile : 
        coofile = imfile.replace('.fits', '.coo')
    if not magfile : 
        magfile = imfile.replace('.fits', '.mag')

    iraf.digiphot(_doprint=0)
    iraf.apphot(_doprint=0)
    
    if os.path.exists( magfile ) : 
        os.remove( magfile ) 

    hdr = pyfits.getheader( imfile )
    if 'FILTER' in hdr: 
        filt=hdr['FILTER']
        filtkey='FILTER'
    elif 'FILTER1' in hdr :
        filt=hdr['FILTER1']
        filtkey='FILTER1'
    if filt.startswith('CLEAR'):
        filt = hdr['FILTER2']
        filtkey='FILTER2'

    if filt not in APCOR.keys() :
        return( [] )
    
    # iraf.digiphot.apphot.datapars : 
    iraf.datapars.scale = 1.0
    iraf.datapars.fwhmpsf = 2.5
    iraf.datapars.emission = True
    iraf.datapars.sigma = 'INDEF'
    iraf.datapars.datamin = 'INDEF'
    iraf.datapars.datamax = 'INDEF'
    iraf.datapars.noise =  'constant'
    iraf.datapars.ccdread = ''
    iraf.datapars.gain = ''
    iraf.datapars.readnoise = 0.0
    iraf.datapars.epadu = 1.0
    iraf.datapars.exposure = ''
    iraf.datapars.airmass = ''
    iraf.datapars.filter = filt
    iraf.datapars.obstime = ''
    iraf.datapars.itime = 1.0
    iraf.datapars.xairmass = 'INDEF'
    iraf.datapars.ifilter = 'INDEF'
    iraf.datapars.otime = 'INDEF'
    
    # iraf.digiphot.apphot.centerpars : 
    iraf.unlearn( iraf.centerpars )
    iraf.centerpars.calgorithm = 'centroid'
    iraf.centerpars.cbox = 3.0
    iraf.centerpars.cthreshold = 0.0
    iraf.centerpars.minsnratio = 1.0
    iraf.centerpars.cmaxiter = 10.0
    iraf.centerpars.maxshift = 1.0
    iraf.centerpars.clean = False
    iraf.centerpars.rclean = 1.0
    iraf.centerpars.rclip = 2.0
    iraf.centerpars.kclean = 3.0
    iraf.centerpars.mkcenter = False

    # iraf.digiphot.apphot.fitskypars : 
    iraf.unlearn( iraf.fitskypars )
    iraf.fitskypars.salgorithm = 'median'
    iraf.fitskypars.annulus = 25.0
    iraf.fitskypars.dannulus = 40.0
    iraf.fitskypars.skyvalue = 0.0
    iraf.fitskypars.smaxiter = 10.0
    iraf.fitskypars.sloclip = 0.0
    iraf.fitskypars.shiclip = 0.0
    iraf.fitskypars.snreject = 50.0
    iraf.fitskypars.sloreject = 3.0
    iraf.fitskypars.shireject = 3.0
    iraf.fitskypars.khist = 3.0
    iraf.fitskypars.binsize = 0.1
    iraf.fitskypars.smooth = False
    iraf.fitskypars.rgrow = 0.0
    iraf.fitskypars.mksky = False

    # iraf.digiphot.apphot.photpars : 
    iraf.unlearn(iraf.photpars)
    iraf.photpars.weighting = 'constant'
    iraf.photpars.apertures = '2,3,4,5'
    iraf.photpars.zmag = ZPT[filt]
    iraf.photpars.mkapert = False

    iraf.unlearn(iraf.phot)
    iraf.gflush(); iraf.gflush()
    iraf.flpr(); iraf.flpr(); iraf.flpr()

    photparams={
        'interac':False,
        'radplot':False,
        }
    outputstuff = iraf.phot(image=imfile, skyfile='',coords=coofile, output=magfile, 
                            verify=False, verbose=True, Stdout=1,**photparams)
    sourcelist = apphotOutput( magfile ) 
    return( sourcelist )
Example #13
0
def runApphot(imfile, coofile=None, magfile=None):
    """ 
    use iraf.digiphot.apphot 
    to collect aperture photometry
    """
    import pyraf
    from pyraf import iraf
    import os
    import pyfits

    if not coofile:
        coofile = imfile.replace('.fits', '.coo')
    if not magfile:
        magfile = imfile.replace('.fits', '.mag')

    iraf.digiphot(_doprint=0)
    iraf.apphot(_doprint=0)

    if os.path.exists(magfile):
        os.remove(magfile)

    hdr = pyfits.getheader(imfile)
    if 'FILTER' in hdr:
        filt = hdr['FILTER']
        filtkey = 'FILTER'
    elif 'FILTER1' in hdr:
        filt = hdr['FILTER1']
        filtkey = 'FILTER1'
    if filt.startswith('CLEAR'):
        filt = hdr['FILTER2']
        filtkey = 'FILTER2'

    if filt not in APCOR.keys():
        return ([])

    # iraf.digiphot.apphot.datapars :
    iraf.datapars.scale = 1.0
    iraf.datapars.fwhmpsf = 2.5
    iraf.datapars.emission = True
    iraf.datapars.sigma = 'INDEF'
    iraf.datapars.datamin = 'INDEF'
    iraf.datapars.datamax = 'INDEF'
    iraf.datapars.noise = 'constant'
    iraf.datapars.ccdread = ''
    iraf.datapars.gain = ''
    iraf.datapars.readnoise = 0.0
    iraf.datapars.epadu = 1.0
    iraf.datapars.exposure = ''
    iraf.datapars.airmass = ''
    iraf.datapars.filter = filt
    iraf.datapars.obstime = ''
    iraf.datapars.itime = 1.0
    iraf.datapars.xairmass = 'INDEF'
    iraf.datapars.ifilter = 'INDEF'
    iraf.datapars.otime = 'INDEF'

    # iraf.digiphot.apphot.centerpars :
    iraf.unlearn(iraf.centerpars)
    iraf.centerpars.calgorithm = 'centroid'
    iraf.centerpars.cbox = 3.0
    iraf.centerpars.cthreshold = 0.0
    iraf.centerpars.minsnratio = 1.0
    iraf.centerpars.cmaxiter = 10.0
    iraf.centerpars.maxshift = 1.0
    iraf.centerpars.clean = False
    iraf.centerpars.rclean = 1.0
    iraf.centerpars.rclip = 2.0
    iraf.centerpars.kclean = 3.0
    iraf.centerpars.mkcenter = False

    # iraf.digiphot.apphot.fitskypars :
    iraf.unlearn(iraf.fitskypars)
    iraf.fitskypars.salgorithm = 'median'
    iraf.fitskypars.annulus = 25.0
    iraf.fitskypars.dannulus = 40.0
    iraf.fitskypars.skyvalue = 0.0
    iraf.fitskypars.smaxiter = 10.0
    iraf.fitskypars.sloclip = 0.0
    iraf.fitskypars.shiclip = 0.0
    iraf.fitskypars.snreject = 50.0
    iraf.fitskypars.sloreject = 3.0
    iraf.fitskypars.shireject = 3.0
    iraf.fitskypars.khist = 3.0
    iraf.fitskypars.binsize = 0.1
    iraf.fitskypars.smooth = False
    iraf.fitskypars.rgrow = 0.0
    iraf.fitskypars.mksky = False

    # iraf.digiphot.apphot.photpars :
    iraf.unlearn(iraf.photpars)
    iraf.photpars.weighting = 'constant'
    iraf.photpars.apertures = '2,3,4,5'
    iraf.photpars.zmag = ZPT[filt]
    iraf.photpars.mkapert = False

    iraf.unlearn(iraf.phot)
    iraf.gflush()
    iraf.gflush()
    iraf.flpr()
    iraf.flpr()
    iraf.flpr()

    photparams = {
        'interac': False,
        'radplot': False,
    }
    outputstuff = iraf.phot(image=imfile,
                            skyfile='',
                            coords=coofile,
                            output=magfile,
                            verify=False,
                            verbose=True,
                            Stdout=1,
                            **photparams)
    sourcelist = apphotOutput(magfile)
    return (sourcelist)
Example #14
0
def drztranback( drzfile, x=0, y=0, fltlist=None, 
                 xylistfile='', verbose=True ):
    """ 
    convert a set of coordinates from a drz image into
    the coordinate space of each of the contributing _flt files
    returns a list of tuples with (fltfile,x,y)
    """
    import os
    import pyfits
    from pyraf import iraf
    from iraf import stsdas
    from numpy import loadtxt, iterable
    stsdas.analysis()
    stsdas.dither()

    # get output (i.e. drizzled) image size
    nxout = pyfits.getval( drzfile, 'NAXIS1')
    nyout = pyfits.getval( drzfile, 'NAXIS2')
    scaleout = 3600*( abs(pyfits.getval(drzfile,'CD1_1')) +
                     abs(pyfits.getval(drzfile,'CD2_2')) )

    xscaleout = 7200*abs(pyfits.getval(drzfile,'CD1_1'))
    yscaleout = 7200*abs(pyfits.getval(drzfile,'CD2_2'))

    # if needed, get a list of contributing flt files and/or coeff files
    if not fltlist : 
        fltlist = getfltlist( drzfile )

    # build the list of coordinates, starting with the original drzfile x,y coords 
    returnlist = []
    if xylistfile : 
        xlist,ylist = loadtxt( xylistfile, unpack=True )
    elif iterable(x) : 
        xlist, ylist = x, y
    else : 
        xlist,ylist = [float(x)],[float(y)]
    for xx,yy in zip(x,y) : 
        returnlist.append( (drzfile,1,xx,yy) )

    # write out a list of drz-frame x,y positions into a text file.
    # this is used as input to wtranback for all flt files
    xylistfile = util.naming.chsuffix( os.path.basename(drzfile), '_fake.xylist')
    fout = open(xylistfile, 'w') 
    for xx,yy in zip(xlist,ylist) : 
        print >> fout, "%15.5f %15.5f"%(xx,yy)
    fout.close()

    # translate the x,y coords back to _flt coordinates
    # TODO : probably need to allow for up to 2 coeff files 
    # for every flt file, for UVIS and ACS
    # for fltfile,coefffile in zip(fltlist,coefflist) : 
    for fltfile in fltlist: 
        if verbose: print("translating %s to %s coords"%(drzfile,fltfile))

        # find all the sci extensions
        flthdulist = pyfits.open( fltfile ) 
        extlist = [ i for i in range(len(flthdulist)) if flthdulist[i].name.lower().startswith('sci') ]

        for ext in extlist : 
            nxin = pyfits.getval( fltfile, 'NAXIS1', ext=ext)
            nyin = pyfits.getval( fltfile, 'NAXIS2', ext=ext)
            scalein = 3600*( abs(pyfits.getval(fltfile,'CD1_1',ext=ext)) +
                             abs(pyfits.getval(fltfile,'CD2_2',ext=ext)) )
            xscalein = 7200*abs(pyfits.getval(fltfile,'CD1_1',ext=ext))
            yscalein = 7200*abs(pyfits.getval(fltfile,'CD2_2',ext=ext))
        
            # slimmed down wtranback call from LS: 2011.04.28
            # 
            # NOTE: we use the xylistfile as input even when 
            # there is only one pair of coordinates
            iraf.wtranback.unlearn()
            iraf.flpr(); iraf.flpr()
            iraf.gflush(); iraf.gflush()

            #coeffile = os.path.join(snworkdir,fltfile[:-5] + '_coeffs1.dat')
            coeffile = fltfile[:-5] + '_coeffs1.dat'
            output = iraf.wtranback( 0, 0, nxin=nxin, nxout=nxout, 
                                     nyin=nyin, nyout=nyout, xylist=xylistfile,
                                     coeffs=coeffile,  
                                     geomode='wcs', refim=drzfile,
                                     inimage=fltfile+'[%i]'%ext, Stdout=1 )

            for line in output:
                if line.startswith(' Xin,Yin:') : 
                    xin,yin = map(float,line.split()[1:3])
                    if xin>0 and xin<nxin and yin>0 and yin<nyin :
                        returnlist.append( (fltfile,ext,float(xin),float(yin)) )
    return( returnlist )