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)
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")
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"))
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"))
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")
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"))
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"))
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")
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)
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)
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 )
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)
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 )