def cootoxy(image,ra,dec): """ Given an ra and dec in sexigesimal form, this will return the pixel coordinates of that location in the image, make sure the WCS is correct! """ from pyraf import iraf IN = "/tmp/cootoxy.in" OUT = "/tmp/cootoxy.out" for f in (IN,OUT): try: os.remove(f) except OSError: pass with open(IN,"w") as infile: infile.write("{0} {1}".format(ra,dec)) # create a file with pixel coordinates iraf.wcsctran(input = IN, output = OUT, image = image, inwcs = "world", outwcs = "logical", units="h n", formats="%8.3f %8.3f", columns = "1 2") # return x and y as floats return map(float,open(OUT,"r").readlines()[-1].strip().split())
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)
def checksnlist(img,listfile): import lsc import string from lsc.util import readkey3,readhdr from numpy import cos,sin,arccos,pi, argmin scal=pi/180. std,rastd,decstd,magstd=lsc.util.readstandard(listfile) hdrt=readhdr(img) _ra=readkey3(hdrt,'RA') _dec=readkey3(hdrt,'DEC') _object=readkey3(hdrt,'object') _xdimen=readkey3(hdrt,'XDIM') _ydimen=readkey3(hdrt,'YDIM') if not _xdimen: _xdimen=readkey3(hdrt,'NAXIS1') if not _ydimen: _ydimen=readkey3(hdrt,'NAXIS2') dd=arccos(sin(_dec*scal)*sin(decstd*scal)+cos(_dec*scal)*cos(decstd*scal)*cos((_ra-rastd)*scal))*((180/pi)*3600) lll=[str(rastd[argmin(dd)])+' '+str(decstd[argmin(dd)])] from pyraf import iraf bbb=iraf.wcsctran('STDIN','STDOUT',img+'[0]',Stdin=lll,inwcs='world',units='degrees degrees',outwcs='logical',columns='1 2',formats='%10.5f %10.5f',Stdout=1)[3] if 'INDEF' not in bbb and float(string.split(bbb)[0])<=_xdimen and float(string.split(bbb)[1])<=_ydimen and float(string.split(bbb)[0])>=0 and float(string.split(bbb)[1])>=0: #print str(std[argmin(dd)])+' in the field '+str(bbb) _RA=rastd[argmin(dd)] _DEC=decstd[argmin(dd)] _SN=std[argmin(dd)] else: #print 'out '+str(bbb) _RA,_DEC,_SN='','','' return _RA,_DEC,_SN
def checksnlist(img, listfile): import lsc import string from lsc.util import readkey3, readhdr from numpy import cos, sin, arccos, pi, argmin scal = pi / 180. std, rastd, decstd, magstd = lsc.util.readstandard(listfile) hdrt = readhdr(img) _ra = readkey3(hdrt, 'RA') _dec = readkey3(hdrt, 'DEC') _object = readkey3(hdrt, 'object') _xdimen = readkey3(hdrt, 'XDIM') _ydimen = readkey3(hdrt, 'YDIM') if not _xdimen: _xdimen = readkey3(hdrt, 'NAXIS1') if not _ydimen: _ydimen = readkey3(hdrt, 'NAXIS2') dd = arccos( sin(_dec * scal) * sin(decstd * scal) + cos(_dec * scal) * cos(decstd * scal) * cos((_ra - rastd) * scal)) * ( (180 / pi) * 3600) lll = [str(rastd[argmin(dd)]) + ' ' + str(decstd[argmin(dd)])] from pyraf import iraf bbb = iraf.wcsctran('STDIN', 'STDOUT', img + '[0]', Stdin=lll, inwcs='world', units='degrees degrees', outwcs='logical', columns='1 2', formats='%10.5f %10.5f', Stdout=1)[3] if 'INDEF' not in bbb and float(string.split(bbb)[0]) <= _xdimen and float( string.split(bbb)[1]) <= _ydimen and float( string.split(bbb)[0]) >= 0 and float( string.split(bbb)[1]) >= 0: #print str(std[argmin(dd)])+' in the field '+str(bbb) _RA = rastd[argmin(dd)] _DEC = decstd[argmin(dd)] _SN = std[argmin(dd)] else: #print 'out '+str(bbb) _RA, _DEC, _SN = '', '', '' return _RA, _DEC, _SN
else: sys.exit('no box and sn coordinate ') if _dec0: _dec= [_dec0] else: sys.exit('no box and sn coordinate ') if _ra and _dec: os.system('rm -rf tmp.*') lll=[] for jj in range(0,len(_ra)): lll.append(str(_ra[jj]) + ' ' + str(_dec[jj])) #lll = [str(_ra) + ' ' + str(_dec)] iraf.wcsctran('STDIN', 'tmp.pix', img + '[0]', Stdin=lll, inwcs='world', units='degrees degrees', outwcs='logical', columns='1 2', formats='%10.1f %10.1f') if _show: iraf.tvmark(1, 'tmp.pix', mark="circle", number='yes', radii=10, nxoffse=5, nyoffse=5, color=214, txsize=2) xxsn, yysn = [], [] for kk in iraf.fields('tmp.pix', '1,2', Stdout=1): if kk: xxsn.append(string.split(kk)[0]) yysn.append(string.split(kk)[1]) xxsn = array(xxsn,float) yysn = array(yysn,float) print 'SN coordinate ',xxsn, yysn
def ecpsf(img, ofwhm, threshold, psfstars, distance, interactive, psffun='gauss', fixaperture=False, _catalog='', _datamax=None, show=False): try: import lsc, string hdr = lsc.util.readhdr(img + '.fits') instrument = lsc.util.readkey3(hdr, 'instrume') print 'INSTRUMENT:', instrument if 'PIXSCALE' in hdr: scale = lsc.util.readkey3(hdr, 'PIXSCALE') elif 'CCDSCALE' in hdr: if 'CCDXBIN' in hdr: scale = lsc.util.readkey3(hdr, 'CCDSCALE') * lsc.util.readkey3(hdr, 'CCDXBIN') elif 'CCDSUM' in hdr: scale = lsc.util.readkey3(hdr, 'CCDSCALE') * int(string.split(lsc.util.readkey3(hdr, 'CCDSUM'))[0]) if _datamax is None: _datamax = lsc.util.readkey3(hdr, 'datamax') _wcserr = lsc.util.readkey3(hdr, 'wcserr') print _wcserr if float(_wcserr) == 0: if 'L1FWHM' in hdr: seeing = float(lsc.util.readkey3(hdr, 'L1FWHM')) elif 'L1SEEING' in hdr: seeing = float(lsc.util.readkey3(hdr, 'L1SEEING')) * scale else: seeing = 3 else: seeing = 3 if 'PSF_FWHM' in hdr: seeing = float(lsc.util.readkey3(hdr, 'PSF_FWHM')) else: sys.exit('astrometry not good') #except: sys.exit('astrometry not good') fwhm = seeing / scale print 'FWHM[header] ', fwhm, ' in pixel' if ofwhm: fwhm = float(ofwhm) print ' FWHM[input] ', fwhm, ' in pixel' xdim, ydim = iraf.hselect(img+'[0]', 'i_naxis1,i_naxis2', 'yes', Stdout=1)[0].split() print img, fwhm, threshold, scale,xdim ################################################################################# ################### write file to compute psf _psf.coo ############ ################################################################################# if _catalog: print '\n#### use catalog to measure the psf' ddd=iraf.wcsctran(input=_catalog,output='STDOUT',Stdout=1,image=img + '[0]',inwcs='world',outwcs='logical', units='degrees degrees',columns='1 2',formats='%10.1f %10.1f',verbose='no') ddd=[i for i in ddd if i[0]!='#'] ddd=[' '.join(i.split()[0:3]) for i in ddd] line='' for i in ddd: a,b,c = string.split(i) if float(a) < float(xdim) and float(b) < float(ydim) and float(b) > 0: line = line + '%10s %10s %10s \n' % (a, b, c) if line: ff = open('_psf.coo', 'w') ff.write(line) ff.close() else: sys.exit('error: no catalog objects are in the field') elif interactive: iraf.display(img + '[0]', 1, fill=True) iraf.delete('tmp.lo?', verify=False) print '_' * 80 print '>>> Mark reference stars with "a". Then "q"' print '-' * 80 iraf.imexamine(img, 1, wcs='logical', logfile='tmp.log', keeplog=True) xyrefer = iraf.fields('tmp.log', '1,2,6,15', Stdout=1) xns, yns, _fws = [], [], [] ############# write file for PSF ######################### ff = open('_psf.coo', 'w') for i in range(len(xyrefer)): xns.append(float(xyrefer[i].split()[0])) yns.append(float(xyrefer[i].split()[1])) _fws.append(float(xyrefer[i].split()[3])) ff.write('%10.3f %10.3f %7.2f \n' % (xns[i], yns[i], float(_fws[i]))) ff.close() fwhm = np.median(_fws) else: ############ run sextractor ##################################### xs, ys, ran, decn, magbest, classstar, fluxrad, bkg = runsex(img, fwhm, threshold, scale) tot = np.compress(abs(np.array(fluxrad) * 1.6 - fwhm) / fwhm < .5, fluxrad) if len(tot) < 5: print 'warning: fwhm from sexractor different from fwhm computed during pre-reduction' print 'try using option --fwhm xxx' ff = open('tmp.cursor', 'w') image_hdu = fits.open(img + '.fits') for i in range(len(xs)): _xs = np.delete(xs, i) _ys = np.delete(ys, i) dist2 = np.sqrt((_xs - xs[i]) ** 2 + (_ys - ys[i]) ** 2) ########### cut star, not near other object ########################## if abs(fluxrad[i] * 1.6 - fwhm) / fwhm < .5 and min(dist2) > distance * fwhm: x1, x2 = int(xs[i] - fwhm * 3), int(xs[i] + fwhm * 3) y1, y2 = int(ys[i] - fwhm * 3), int(ys[i] + fwhm * 3) if x1 < 1: x1 = 1 if y1 < 1: y1 = 1 if x2 > int(xdim): x2 = int(xdim) if y2 > int(ydim): y2 = int(ydim) fmax = np.max(image_hdu[0].data[y1-1:y2, x1-1:x2]) ########## cut saturated object ######################## if float(fmax) < _datamax: # not saturated ff.write('%10.3f %10.3f 1 m \n' % (xs[i], ys[i])) ff.close() image_hdu.close() iraf.delete('tmp.lo?,tmp.sta?,tmp.gk?', verify=False) iraf.psfmeasure(img+'[0]', imagecur='tmp.cursor', logfile='tmp.log', radius=int(fwhm), iter=3, display=False, StdoutG='tmp.gki') ff = open('tmp.log') righe = ff.readlines() xn = [float(righe[3].split()[1])] yn = [float(righe[3].split()[2])] _fw = [float(righe[3].split()[4])] for r in righe[4:-2]: if len(r) > 0: xn.append(float(r.split()[0])) yn.append(float(r.split()[1])) _fw.append(float(r.split()[3])) print 'FWHM: ', righe[-1].split()[-1] print 80 * "#" ###### ############## eliminate double object identification ########################### xns, yns, _fws = [xn[0]], [yn[0]], [_fw[0]] for i in range(1, len(xn)): if abs(xn[i] - xn[i - 1]) > .2 and abs(yn[i] - yn[i - 1]) > .2: xns.append(xn[i]) yns.append(yn[i]) _fws.append(_fw[i]) ######### write clean file for PSF ######################### fw = [] ff = open('_psf.coo', 'w') for i in range(len(xns)): if abs(_fws[i] - fwhm) / fwhm < .3: ff.write('%10.3f %10.3f %7.2f \n' % (xns[i], yns[i], float(_fws[i]))) fw.append(_fws[i]) ff.close() ## End automatic selection ###################################################################################### ################### write file of object to store in fits table ############# ###################################################################################### if _catalog: ddd=iraf.wcsctran(input=_catalog,output='STDOUT',Stdout=1,image=img + '[0]',inwcs='world',outwcs='logical', units='degrees degrees',columns='1 2',formats='%10.1f %10.1f',verbose='no') ddd=[i for i in ddd if i[0]!='#'] ddd=[' '.join(i.split()[0:3]) for i in ddd] ff = open('_psf2.coo', 'w') for i in ddd: a,b,c = string.split(i) ff.write('%10s %10s %10s \n' % (a, b, c)) ff.close() elif interactive: xs, ys, ran, decn, magbest, classstar, fluxrad, bkg = runsex(img, fwhm, threshold, scale) ff = open('_psf2.coo', 'w') for i in range(len(xs)): ff.write('%10s %10s %10s \n' % (xs[i], ys[i], fluxrad[i])) ff.close() else: os.system('cp _psf.coo _psf2.coo') # dflux = fluxrad - np.median(fluxrad) # fstar = np.compress(dflux < np.std(fluxrad), fluxrad) ################################################################################################################# print 80 * "#" photmag, pst, fitmag = psffit(img, fwhm, psfstars, hdr, interactive, _datamax, psffun, fixaperture) photmag2, fitmag2 = psffit2(img, fwhm, psfstars, hdr, _datamax, psffun, fixaperture) radec = iraf.wcsctran(input='STDIN', output='STDOUT', Stdin=photmag, Stdout=1, image=img + '[0]', inwcs='logical', outwcs='world', columns="1 2", format='%13.3H %12.2h', min_sig=9, mode='h')[3:] radec2 = iraf.wcsctran(input='STDIN', output='STDOUT', Stdin=photmag2, Stdout=1, image=img + '[0]', inwcs='logical', outwcs='world', columns="1 2", format='%13.3H %12.2h', min_sig=9, mode='h')[3:] if interactive or show: iraf.set(stdimage='imt1024') iraf.display(img + '[0]', 1, fill=True, Stdout=1) iraf.tvmark(1, coords='STDIN', mark='circle', radii=15, label=True, Stdin=photmag, nxoffset=5, nyoffset=5, txsize=2) iraf.tvmark(1, coords='STDIN', mark='circle', radii=35, label=False, Stdin=pst, color=208) # iraf.tvmark(1, coords='STDIN', mark='cross', length=35, label=False, Stdin=fitmag2, color=204) idpsf = [] for i in range(len(pst)): idpsf.append(pst[i].split()[2]) dmag = [] for i in range(len(radec)): ra, dec, idph, magp2, magp3, magp4, merrp2, merrp3, merrp4 = radec[i].split() dmag.append(9.99) for j in range(len(fitmag)): raf, decf, idf, magf, magerrf = fitmag[j].split() if idph == idf and idph in idpsf and \ magp3 != 'INDEF' and magf != 'INDEF': dmag[i] = float(magp3) - float(magf) break _dmag = np.compress(np.array(dmag) < 9.99, np.array(dmag)) print '>>> Aperture correction (phot) %6.3f +/- %5.3f %3d ' % \ (np.mean(_dmag), np.std(_dmag), len(_dmag)) if len(_dmag) > 3: _dmag = np.compress(np.abs(_dmag - np.median(_dmag)) < 2 * np.std(_dmag), _dmag) print '>>> 2 sigma rejection) %6.3f +/- %5.3f %3d [default]' \ % (np.mean(_dmag), np.std(_dmag), len(_dmag)) print '>>> fwhm %s ' % (str(fwhm)) for i in range(len(dmag)): if dmag[i] == 9.99: dmag[i] = '' else: dmag[i] = '%6.3f' % (dmag[i]) exptime = lsc.util.readkey3(hdr, 'exptime') object = lsc.util.readkey3(hdr, 'object').replace(' ', '') filtro = lsc.util.readkey3(hdr, 'filter') ####################################### rap, decp, magp2, magp3, magp4, smagf, merrp3, smagerrf = [], [], [], [], [], [], [], [] rap0, decp0 = [], [] for i in range(len(radec2)): aa = radec2[i].split() rap.append(aa[0]) decp.append(aa[1]) rap0.append(lsc.lscabsphotdef.deg2HMS(ra=aa[0])) decp0.append(lsc.lscabsphotdef.deg2HMS(dec=aa[1])) idp = aa[2] magp2.append(aa[3]) magp3.append(aa[4]) magp4.append(aa[5]) merrp3.append(aa[7]) _smagf, _smagerrf = 9999, 9999 for j in range(len(fitmag2)): raf, decf, idf, magf, magerrf = fitmag2[j].split() if idf == idp: _smagf = magf _smagerrf = magerrf break smagf.append(_smagf) smagerrf.append(_smagerrf) tbhdu = fits.BinTableHDU.from_columns(fits.ColDefs([fits.Column(name='ra', format='20A', array=np.array(rap)), fits.Column(name='dec', format='20A', array=np.array(decp)), fits.Column(name='ra0', format='E', array=np.array(rap0)), fits.Column(name='dec0', format='E', array=np.array(decp0)), fits.Column(name='magp2', format='E', array=np.array(np.where((np.array(magp2) != 'INDEF'), np.array(magp2), 9999), float)), fits.Column(name='magp3', format='E', array=np.array(np.where((np.array(magp3) != 'INDEF'), np.array(magp3), 9999), float)), fits.Column(name='merrp3', format='E', array=np.array(np.where((np.array(merrp3) != 'INDEF'), np.array(merrp3), 9999), float)), fits.Column(name='magp4', format='E', array=np.array(np.where((np.array(magp4) != 'INDEF'), np.array(magp4), 9999), float)), fits.Column(name='smagf', format='E', array=np.array(np.where((np.array(smagf) != 'INDEF'), np.array(smagf), 9999), float)), fits.Column(name='smagerrf', format='E', array=np.array(np.where((np.array(smagerrf) != 'INDEF'), np.array(smagerrf), 9999), float)), ])) hdu = fits.PrimaryHDU(header=hdr) thdulist = fits.HDUList([hdu, tbhdu]) lsc.util.delete(img + '.sn2.fits') thdulist.writeto(img + '.sn2.fits') lsc.util.updateheader(img + '.sn2.fits', 0, {'APCO': [np.mean(_dmag), 'Aperture correction']}) lsc.util.updateheader(img + '.sn2.fits', 0, {'APCOERR': [np.std(_dmag), 'Aperture correction error']}) lsc.util.updateheader(img + '.sn2.fits', 0, {'XDIM': [lsc.util.readkey3(hdr, 'naxis1'), 'x number of pixels']}) lsc.util.updateheader(img + '.sn2.fits', 0, {'YDIM': [lsc.util.readkey3(hdr, 'naxis2'), 'y number of pixels']}) lsc.util.updateheader(img + '.sn2.fits', 0, {'PSF_FWHM': [fwhm * scale, 'FWHM (arcsec) - computed with daophot']}) os.chmod(img + '.sn2.fits', 0664) os.chmod(img + '.psf.fits', 0664) result = 1 except: result = 0 fwhm = 0.0 traceback.print_exc() return result, fwhm * scale
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)
from iraf import daophot from iraf import ptools targ = lsc.mysqldef.targimg(img) aa = lsc.mysqldef.query( ['select ra0,dec0 from targets where id="' + str(targ) + '"'], lsc.conn) if len(aa) > 0: rasn = aa[0]['ra0'] decsn = aa[0]['dec0'] lll = [str(rasn) + ' ' + str(decsn)] sss = iraf.wcsctran('STDIN', 'STDOUT', img + '[0]', Stdin=lll, inwcs='world', units='degrees degrees', outwcs='logical', columns='1 2', formats='%10.1f %10.1f', Stdout=1) f = open('_coord', 'w') f.write(sss[-1]) f.close() _gain = lsc.util.readkey3(hdr, 'gain') _ron = lsc.util.readkey3(hdr, 'ron') _exptime = lsc.util.readkey3(hdr, 'exptime') _pixelscale = lsc.util.readkey3(hdr, 'PIXSCALE') _datamin = lsc.util.readkey3(hdr, 'datamin') _datamax = lsc.util.readkey3(hdr, 'datamax') a1, a2, a3, a4, = float(5. / _pixelscale), float(
len(data) / 2 / 2:3 * len(data) / 2 / 2])) ax1.set_title(image) ax1.set_xlim(0, len(data)) ax1.set_ylim(0, len(data)) ax1.get_yaxis().set_visible(False) ax1.get_xaxis().set_visible(False) plt.draw() iraf.wcsctran(input='coords', output=image + '_pix.fits', image=image, inwcs='world', outwcs='logical') co = np.genfromtxt(image + '_pix.fits') ax1.errorbar(co[:, 0], co[:, 1], fmt='o', mfc='none', markeredgewidth=3, markersize=20, label='Sequence stars') for j in range(len(co)): ax1.text(co[j, 0] + 20, co[j, 1] - 20, str(j + 1))
def ecpsf(img, ofwhm, threshold, psfstars, distance, interactive, ds9, psffun='gauss', fixaperture=False,_catalog='',_datamax=''): try: import agnkey hdr = agnkey.util.readhdr(img + '.fits') instrument = agnkey.util.readkey3(hdr, 'instrume') print ('INSTRUMENT:', instrument) if 'PIXSCALE' in hdr: pixelscale = agnkey.util.readkey3(hdr, 'PIXSCALE') elif 'CCDSCALE' in hdr: if 'CCDXBIN' in hdr: pixelscale = agnkey.util.readkey3(hdr, 'CCDSCALE') * agnkey.util.readkey3(hdr, 'CCDXBIN') elif 'CCDSUM' in hdr: pixelscale = agnkey.util.readkey3(hdr, 'CCDSCALE') * int( string.split(agnkey.util.readkey3(hdr, 'CCDSUM'))[0]) if 'kb' in instrument: scale = pixelscale if not _datamax: _datamax = 45000 elif 'fl' in instrument: scale = pixelscale if not _datamax: _datamax = 60000 elif 'fa' in instrument: scale = pixelscale if not _datamax: _datamax = 60000 elif 'fs' in instrument: scale = pixelscale if not _datamax: _datamax = 65000 try: #if 1==1: if 'WCSERR' in hdr: _wcserr = hdr['WCSERR'] elif 'WCS_ERR' in hdr: _wcserr = hdr['WCS_ERR'] print _wcserr if float(_wcserr) == 0: if 'kb' in instrument: seeing = float(agnkey.util.readkey3(hdr, 'L1FWHM')) * .75 elif 'fl' in instrument: seeing = float(agnkey.util.readkey3(hdr, 'L1FWHM')) * .75 elif 'fa' in instrument: seeing = float(agnkey.util.readkey3(hdr, 'L1FWHM')) * .75 elif 'fs' in instrument: if 'L1FWHM' in hdr: seeing = float(agnkey.util.readkey3(hdr, 'L1FWHM')) * .75 elif 'L1SEEING' in hdr: seeing = float(agnkey.util.readkey3(hdr, 'L1SEEING')) * scale else: seeing = 3 else: seeing = 3 else: seeing = float(agnkey.util.readkey3(hdr, 'PSF_FWHM')) sys.exit('astrometry not good') except ValueError: # except: sys.exit('astrometry not good') fwhm = seeing / scale print 'FWHM[header] ', fwhm, ' in pixel' if ofwhm: fwhm = float(ofwhm) print ' FWHM[input] ', fwhm, ' in pixel' xdim, ydim = iraf.hselect(img+'.fits[0]', 'i_naxis1,i_naxis2', 'yes', Stdout=1)[0].split() print img, fwhm, threshold, scale ################################################################################# ################### write file to compute psf _psf.coo ############ ################################################################################# if interactive: iraf.set(stdimage='imt1024') iraf.display(img+'.fits[0]', 1, fill=True) iraf.delete('tmp.lo?', verify=False) print '_' * 80 print '>>> Mark reference stars with "a". Then "q"' print '-' * 80 iraf.imexamine(img+'[0]', 1, wcs='logical', logfile='tmp.log', keeplog=True) xyrefer = iraf.fields('tmp.log', '1,2,6,15', Stdout=1) xns, yns, _fws = [], [], [] ############# write file for PSF ######################### ff = open('_psf.coo', 'w') for i in range(len(xyrefer)): xns.append(float(xyrefer[i].split()[0])) yns.append(float(xyrefer[i].split()[1])) _fws.append(float(xyrefer[i].split()[3])) ff.write('%10.3f %10.3f %7.2f \n' % (xns[i], yns[i], float(_fws[i]))) ff.close() fwhm = np.median(_fws) else: ############ run sextractor ##################################### xs, ys, ran, decn, magbest, classstar, fluxrad, bkg = runsex(img, fwhm, threshold, scale) _ra1,_dec1,xx11,yy11,_mag,_dist = agnkey.agnastrodef.starsfields(img+'.fits',20,19) if len(_ra1): dist,pos0,pos1 = agnkey.agnastrodef.crossmatchxy(xs,ys,xx11,yy11,10) if len(pos0): xs = xs[pos0] ys = ys[pos0] ran = ran[pos0] decn = decn[pos0] magbest = magbest[pos0] classstar = classstar[pos0] fluxrad = fluxrad[pos0] bkg = bkg[pos0] ff = open('tmp.cursor', 'w') for i in range(len(xs)): x1, x2 = int(xs[i] - fwhm * 3), int(xs[i] + fwhm * 3) y1, y2 = int(ys[i] - fwhm * 3), int(ys[i] + fwhm * 3) sect = '[' + str(x1) + ':' + str(x2) + ',' + str(y1) + ':' + str(y2) + ']' try: fmax = iraf.imstat(img+'.fits[0]' + sect, fields='max', Stdout=1)[1] ########## cut saturated object ######################## if float(fmax) < _datamax: # not saturated ff.write('%10.3f %10.3f 1 m \n' % (xs[i], ys[i])) except: print sect # print 'problem here' # pass ff.close() iraf.delete('tmp.lo?,tmp.sta?,tmp.gk?', verify=False) iraf.psfmeasure(img+'[0]', imagecur='tmp.cursor', logfile='tmp.log', radius=int(fwhm), iter=3, display=False, StdoutG='tmp.gki') ff = open('tmp.log') righe = ff.readlines() xn = [float(righe[3].split()[1])] yn = [float(righe[3].split()[2])] _fw = [float(righe[3].split()[4])] for r in righe[4:-2]: if len(r) > 0: xn.append(float(r.split()[0])) yn.append(float(r.split()[1])) _fw.append(float(r.split()[3])) print 'FWHM: ', righe[-1].split()[-1] print 80 * "#" ###### ############## eliminate double object identification ########################### xns, yns, _fws = [xn[0]], [yn[0]], [_fw[0]] for i in range(1, len(xn)): if abs(xn[i] - xn[i - 1]) > .2 and abs(yn[i] - yn[i - 1]) > .2: xns.append(xn[i]) yns.append(yn[i]) _fws.append(_fw[i]) ######### write clean file for PSF ######################### fw = [] ff = open('_psf.coo', 'w') for i in range(len(xns)): ff.write('%10.3f %10.3f %7.2f \n' % (xns[i], yns[i], float(_fws[i]))) fw.append(_fws[i]) ff.close() ## End automatic selection ###################################################################################### ################### write file of object to store in fits table ############# ###################################################################################### if interactive: xs, ys, ran, decn, magbest, classstar, fluxrad, bkg = runsex(img, fwhm, threshold, scale) ff = open('_psf2.coo', 'w') for i in range(len(xs)): ff.write('%10s %10s %10s \n' % (xs[i], ys[i], fluxrad[i])) ff.close() elif _catalog: print '\n#### use catalog ' ddd=iraf.wcsctran(input=_catalog,output='STDOUT',Stdout=1,image=img,inwcs='world',outwcs='logical', units='degrees degrees',columns='1 2',formats='%10.1f %10.1f',verbose='no') ddd=[i for i in ddd if i[0]!='#'] ddd=[' '.join(i.split()[0:3]) for i in ddd] ff = open('_psf2.coo', 'w') for i in ddd: a,b,c = string.split(i) ff.write('%10s %10s %10s \n' % (a, b, c)) ff.close() print 'use catalog' else: os.system('cp _psf.coo _psf2.coo') # print '\n### use sextractor' # xs, ys, ran, decn, magbest, classstar, fluxrad, bkg = runsex(img, fwhm, threshold, scale) # ff = open('_psf2.coo', 'w') # for i in range(len(xs)): # ff.write('%10s %10s %10s \n' % (xs[i], ys[i], fluxrad[i])) # ff.close() ################################################################################### print 80 * "#" photmag, pst, fitmag = psffit(img, fwhm, psfstars, hdr, interactive, _datamax, psffun, fixaperture) photmag2, fitmag2 = psffit2(img, fwhm, psfstars, hdr, _datamax, psffun, fixaperture) radec = iraf.wcsctran(input='STDIN', output='STDOUT', Stdin=photmag, \ Stdout=1, image=img+'.fits[0]', inwcs='logical', outwcs='world', columns="1 2", \ format='%13.3H %12.2h', min_sig=9, mode='h')[3:] radec2 = iraf.wcsctran(input='STDIN', output='STDOUT', Stdin=photmag2, \ Stdout=1, image=img+'.fits[0]', inwcs='logical', outwcs='world', columns="1 2", \ format='%13.3H %12.2h', min_sig=9, mode='h')[3:] if ds9 == 0 and interactive: iraf.set(stdimage='imt1024') iraf.display(img, 1, fill=True, Stdout=1) iraf.tvmark(1, coords='STDIN', mark='circle', radii=15, label=False, Stdin=photmag) iraf.tvmark(1, coords='STDIN', mark='rectangle', length=35, label=False, Stdin=pst) iraf.tvmark(1, coords='STDIN', mark='cross', length=35, label=False, Stdin=fitmag2, color=204) idpsf = [] for i in range(len(pst)): idpsf.append(pst[i].split()[2]) dmag = [] for i in range(len(radec)): ra, dec, idph, magp2, magp3, magp4, merrp2, merrp3, merrp4 = radec[i].split() dmag.append(9.99) for j in range(len(fitmag)): raf, decf, idf, magf, magerrf = fitmag[j].split() if idph == idf and idph in idpsf and \ magp3 != 'INDEF' and magf != 'INDEF': dmag[i] = float(magp3) - float(magf) break _dmag = np.compress(np.array(dmag) < 9.99, np.array(dmag)) print '>>> Aperture correction (phot) %6.3f +/- %5.3f %3d ' % \ (np.mean(_dmag), np.std(_dmag), len(_dmag)) if len(_dmag) > 3: _dmag = np.compress(abs(_dmag - np.median(_dmag)) < 2 * np.std(_dmag), _dmag) print '>>> 2 sigma rejection) %6.3f +/- %5.3f %3d [default]' \ % (np.mean(_dmag), np.std(_dmag), len(_dmag)) print '>>> fwhm %s ' % (str(fwhm)) for i in range(len(dmag)): if dmag[i] == 9.99: dmag[i] = '' else: dmag[i] = '%6.3f' % (dmag[i]) exptime = agnkey.util.readkey3(hdr, 'exptime') object = agnkey.util.readkey3(hdr, 'object').replace(' ', '') filtro = agnkey.util.readkey3(hdr, 'filter') ####################################### rap, decp, magp2, magp3, magp4, smagf = [], [], [], [], [], [] merrp2, merrp3, merrp4, smagerrf = [], [], [], [] rap0, decp0 = [], [] for i in range(len(radec2)): aa = radec2[i].split() rap.append(aa[0]) decp.append(aa[1]) rap0.append(agnkey.agnabsphotdef.deg2HMS(ra=aa[0])) decp0.append(agnkey.agnabsphotdef.deg2HMS(dec=aa[1])) idp = aa[2] magp2.append(aa[3]) magp3.append(aa[4]) magp4.append(aa[5]) merrp2.append(aa[6]) merrp3.append(aa[7]) merrp4.append(aa[8]) _smagf, _smagerrf = 9999, 9999 for j in range(len(fitmag2)): raf, decf, idf, magf, magerrf = fitmag2[j].split() if idf == idp: _smagf = magf _smagerrf = magerrf break smagf.append(_smagf) smagerrf.append(_smagerrf) new_cols = pyfits.ColDefs([ pyfits.Column(name='ra', format='20A', array=np.array(rap)), pyfits.Column(name='dec', format='20A', array=np.array(decp)), pyfits.Column(name='ra0', format='E', array=np.array(rap0)), pyfits.Column(name='dec0', format='E', array=np.array(decp0)), pyfits.Column(name='magp2', format='E', array=np.array(np.where((np.array(magp2) != 'INDEF'), np.array(magp2), 9999), float)), pyfits.Column(name='magp3', format='E', array=np.array(np.where((np.array(magp3) != 'INDEF'), np.array(magp3), 9999), float)), pyfits.Column(name='magp4', format='E', array=np.array(np.where((np.array(magp4) != 'INDEF'), np.array(magp4), 9999), float)), pyfits.Column(name='merrp2', format='E', array=np.array(np.where((np.array(merrp2) != 'INDEF'), np.array(merrp2), 9999), float)), pyfits.Column(name='merrp3', format='E', array=np.array(np.where((np.array(merrp3) != 'INDEF'), np.array(merrp3), 9999), float)), pyfits.Column(name='merrp4', format='E', array=np.array(np.where((np.array(merrp4) != 'INDEF'), np.array(merrp4), 9999), float)), pyfits.Column(name='smagf', format='E', array=np.array(np.where((np.array(smagf) != 'INDEF'), np.array(smagf), 9999), float)), pyfits.Column(name='smagerrf', format='E', array=np.array(np.where((np.array(smagerrf) != 'INDEF'), np.array(smagerrf), 9999), float)), ]) tbhdu = pyfits.BinTableHDU.from_columns(new_cols) hdu = pyfits.PrimaryHDU(header=hdr) thdulist = pyfits.HDUList([hdu, tbhdu]) agnkey.util.delete(img + '.sn2.fits') thdulist.writeto(img + '.sn2.fits') agnkey.util.updateheader(img + '.sn2.fits', 0, {'APCO': [np.mean(_dmag), 'Aperture correction']}) agnkey.util.updateheader(img + '.sn2.fits', 0, {'APCOERR': [np.std(_dmag), 'Aperture correction error']}) agnkey.util.updateheader(img + '.sn2.fits', 0, {'XDIM': [agnkey.util.readkey3(hdr, 'naxis1'), 'x number of pixels']}) agnkey.util.updateheader(img + '.sn2.fits', 0, {'YDIM': [agnkey.util.readkey3(hdr, 'naxis2'), 'y number of pixels']}) agnkey.util.updateheader(img + '.sn2.fits', 0, {'PSF_FWHM': [fwhm * scale, 'FWHM (arcsec) - computed with daophot']}) os.chmod(img + '.sn2.fits', 0664) os.chmod(img + '.psf.fits', 0664) result = 1 except IOError as e: print e result = 0 fwhm = 0.0 traceback.print_exc() return result, fwhm * scale
def ecpsf(img, ofwhm, threshold, psfstars, distance, interactive, ds9, psffun='gauss', fixaperture=False,_catalog='',_datamax=''): try: import agnkey hdr = agnkey.util.readhdr(img + '.fits') instrument = agnkey.util.readkey3(hdr, 'instrume') print 'INSTRUMENT:', instrument if 'PIXSCALE' in hdr: pixelscale = agnkey.util.readkey3(hdr, 'PIXSCALE') elif 'CCDSCALE' in hdr: if 'CCDXBIN' in hdr: pixelscale = agnkey.util.readkey3(hdr, 'CCDSCALE') * agnkey.util.readkey3(hdr, 'CCDXBIN') elif 'CCDSUM' in hdr: pixelscale = agnkey.util.readkey3(hdr, 'CCDSCALE') * int( string.split(agnkey.util.readkey3(hdr, 'CCDSUM'))[0]) if 'kb' in instrument: scale = pixelscale if not _datamax: _datamax = 45000 elif 'fl' in instrument: scale = pixelscale if not _datamax: _datamax = 60000 elif 'fs' in instrument: scale = pixelscale if not _datamax: _datamax = 65000 try: #if 1==1: if 'WCSERR' in hdr: _wcserr = hdr['WCSERR'] elif 'WCS_ERR' in hdr: _wcserr = hdr['WCS_ERR'] print _wcserr if float(_wcserr) == 0: if 'kb' in instrument: seeing = float(agnkey.util.readkey3(hdr, 'L1FWHM')) * .75 elif 'fl' in instrument: seeing = float(agnkey.util.readkey3(hdr, 'L1FWHM')) * .75 elif 'fs' in instrument: if 'L1FWHM' in hdr: seeing = float(agnkey.util.readkey3(hdr, 'L1FWHM')) * .75 elif 'L1SEEING' in hdr: seeing = float(agnkey.util.readkey3(hdr, 'L1SEEING')) * scale else: seeing = 3 else: seeing = 3 else: seeing = float(agnkey.util.readkey3(hdr, 'PSF_FWHM')) sys.exit('astrometry not good') except ValueError: # except: sys.exit('astrometry not good') fwhm = seeing / scale print 'FWHM[header] ', fwhm, ' in pixel' if ofwhm: fwhm = float(ofwhm) print ' FWHM[input] ', fwhm, ' in pixel' xdim, ydim = iraf.hselect(img+'.fits[0]', 'i_naxis1,i_naxis2', 'yes', Stdout=1)[0].split() print img, fwhm, threshold, scale ################################################################################# ################### write file to compute psf _psf.coo ############ ################################################################################# if interactive: iraf.set(stdimage='imt1024') iraf.display(img+'.fits[0]', 1, fill=True) iraf.delete('tmp.lo?', verify=False) print '_' * 80 print '>>> Mark reference stars with "a". Then "q"' print '-' * 80 iraf.imexamine(img+'[0]', 1, wcs='logical', logfile='tmp.log', keeplog=True) xyrefer = iraf.fields('tmp.log', '1,2,6,15', Stdout=1) xns, yns, _fws = [], [], [] ############# write file for PSF ######################### ff = open('_psf.coo', 'w') for i in range(len(xyrefer)): xns.append(float(xyrefer[i].split()[0])) yns.append(float(xyrefer[i].split()[1])) _fws.append(float(xyrefer[i].split()[3])) ff.write('%10.3f %10.3f %7.2f \n' % (xns[i], yns[i], float(_fws[i]))) ff.close() fwhm = np.median(_fws) else: ############ run sextractor ##################################### xs, ys, ran, decn, magbest, classstar, fluxrad, bkg = runsex(img, fwhm, threshold, scale) _ra1,_dec1,xx11,yy11,_mag,_dist = agnkey.agnastrodef.starsfields(img+'.fits',20,19) if len(_ra1): dist,pos0,pos1 = agnkey.agnastrodef.crossmatchxy(xs,ys,xx11,yy11,10) if len(pos0): xs = xs[pos0] ys = ys[pos0] ran = ran[pos0] decn = decn[pos0] magbest = magbest[pos0] classstar = classstar[pos0] fluxrad = fluxrad[pos0] bkg = bkg[pos0] ff = open('tmp.cursor', 'w') for i in range(len(xs)): x1, x2 = int(xs[i] - fwhm * 3), int(xs[i] + fwhm * 3) y1, y2 = int(ys[i] - fwhm * 3), int(ys[i] + fwhm * 3) sect = '[' + str(x1) + ':' + str(x2) + ',' + str(y1) + ':' + str(y2) + ']' try: fmax = iraf.imstat(img+'.fits[0]' + sect, fields='max', Stdout=1)[1] ########## cut saturated object ######################## if float(fmax) < _datamax: # not saturated ff.write('%10.3f %10.3f 1 m \n' % (xs[i], ys[i])) except: print sect # print 'problem here' # pass ff.close() iraf.delete('tmp.lo?,tmp.sta?,tmp.gk?', verify=False) iraf.psfmeasure(img+'[0]', imagecur='tmp.cursor', logfile='tmp.log', radius=int(fwhm), iter=3, display=False, StdoutG='tmp.gki') ff = open('tmp.log') righe = ff.readlines() xn = [float(righe[3].split()[1])] yn = [float(righe[3].split()[2])] _fw = [float(righe[3].split()[4])] for r in righe[4:-2]: if len(r) > 0: xn.append(float(r.split()[0])) yn.append(float(r.split()[1])) _fw.append(float(r.split()[3])) print 'FWHM: ', righe[-1].split()[-1] print 80 * "#" ###### ############## eliminate double object identification ########################### xns, yns, _fws = [xn[0]], [yn[0]], [_fw[0]] for i in range(1, len(xn)): if abs(xn[i] - xn[i - 1]) > .2 and abs(yn[i] - yn[i - 1]) > .2: xns.append(xn[i]) yns.append(yn[i]) _fws.append(_fw[i]) ######### write clean file for PSF ######################### fw = [] ff = open('_psf.coo', 'w') for i in range(len(xns)): ff.write('%10.3f %10.3f %7.2f \n' % (xns[i], yns[i], float(_fws[i]))) fw.append(_fws[i]) ff.close() ## End automatic selection ###################################################################################### ################### write file of object to store in fits table ############# ###################################################################################### if interactive: xs, ys, ran, decn, magbest, classstar, fluxrad, bkg = runsex(img, fwhm, threshold, scale) ff = open('_psf2.coo', 'w') for i in range(len(xs)): ff.write('%10s %10s %10s \n' % (xs[i], ys[i], fluxrad[i])) ff.close() elif _catalog: print '\n#### use catalog ' ddd=iraf.wcsctran(input=_catalog,output='STDOUT',Stdout=1,image=img,inwcs='world',outwcs='logical', units='degrees degrees',columns='1 2',formats='%10.1f %10.1f',verbose='no') ddd=[i for i in ddd if i[0]!='#'] ddd=[' '.join(i.split()[0:3]) for i in ddd] ff = open('_psf2.coo', 'w') for i in ddd: a,b,c = string.split(i) ff.write('%10s %10s %10s \n' % (a, b, c)) ff.close() print 'use catalog' else: os.system('cp _psf.coo _psf2.coo') # print '\n### use sextractor' # xs, ys, ran, decn, magbest, classstar, fluxrad, bkg = runsex(img, fwhm, threshold, scale) # ff = open('_psf2.coo', 'w') # for i in range(len(xs)): # ff.write('%10s %10s %10s \n' % (xs[i], ys[i], fluxrad[i])) # ff.close() ################################################################################### print 80 * "#" photmag, pst, fitmag = psffit(img, fwhm, psfstars, hdr, interactive, _datamax, psffun, fixaperture) photmag2, fitmag2 = psffit2(img, fwhm, psfstars, hdr, _datamax, psffun, fixaperture) radec = iraf.wcsctran(input='STDIN', output='STDOUT', Stdin=photmag, \ Stdout=1, image=img+'.fits[0]', inwcs='logical', outwcs='world', columns="1 2", \ format='%13.3H %12.2h', min_sig=9, mode='h')[3:] radec2 = iraf.wcsctran(input='STDIN', output='STDOUT', Stdin=photmag2, \ Stdout=1, image=img+'.fits[0]', inwcs='logical', outwcs='world', columns="1 2", \ format='%13.3H %12.2h', min_sig=9, mode='h')[3:] if ds9 == 0 and interactive: iraf.set(stdimage='imt1024') iraf.display(img, 1, fill=True, Stdout=1) iraf.tvmark(1, coords='STDIN', mark='circle', radii=15, label=False, Stdin=photmag) iraf.tvmark(1, coords='STDIN', mark='rectangle', length=35, label=False, Stdin=pst) iraf.tvmark(1, coords='STDIN', mark='cross', length=35, label=False, Stdin=fitmag2, color=204) idpsf = [] for i in range(len(pst)): idpsf.append(pst[i].split()[2]) dmag = [] for i in range(len(radec)): ra, dec, idph, magp2, magp3, magp4, merrp2, merrp3, merrp4 = radec[i].split() dmag.append(9.99) for j in range(len(fitmag)): raf, decf, idf, magf, magerrf = fitmag[j].split() if idph == idf and idph in idpsf and \ magp3 != 'INDEF' and magf != 'INDEF': dmag[i] = float(magp3) - float(magf) break _dmag = np.compress(np.array(dmag) < 9.99, np.array(dmag)) print '>>> Aperture correction (phot) %6.3f +/- %5.3f %3d ' % \ (np.mean(_dmag), np.std(_dmag), len(_dmag)) if len(_dmag) > 3: _dmag = np.compress(abs(_dmag - np.median(_dmag)) < 2 * np.std(_dmag), _dmag) print '>>> 2 sigma rejection) %6.3f +/- %5.3f %3d [default]' \ % (np.mean(_dmag), np.std(_dmag), len(_dmag)) print '>>> fwhm %s ' % (str(fwhm)) for i in range(len(dmag)): if dmag[i] == 9.99: dmag[i] = '' else: dmag[i] = '%6.3f' % (dmag[i]) exptime = agnkey.util.readkey3(hdr, 'exptime') object = agnkey.util.readkey3(hdr, 'object').replace(' ', '') filtro = agnkey.util.readkey3(hdr, 'filter') ####################################### rap, decp, magp2, magp3, magp4, smagf = [], [], [], [], [], [] merrp2, merrp3, merrp4, smagerrf = [], [], [], [] rap0, decp0 = [], [] for i in range(len(radec2)): aa = radec2[i].split() rap.append(aa[0]) decp.append(aa[1]) rap0.append(agnkey.agnabsphotdef.deg2HMS(ra=aa[0])) decp0.append(agnkey.agnabsphotdef.deg2HMS(dec=aa[1])) idp = aa[2] magp2.append(aa[3]) magp3.append(aa[4]) magp4.append(aa[5]) merrp2.append(aa[6]) merrp3.append(aa[7]) merrp4.append(aa[8]) _smagf, _smagerrf = 9999, 9999 for j in range(len(fitmag2)): raf, decf, idf, magf, magerrf = fitmag2[j].split() if idf == idp: _smagf = magf _smagerrf = magerrf break smagf.append(_smagf) smagerrf.append(_smagerrf) new_cols = pyfits.ColDefs([ pyfits.Column(name='ra', format='20A', array=np.array(rap)), pyfits.Column(name='dec', format='20A', array=np.array(decp)), pyfits.Column(name='ra0', format='E', array=np.array(rap0)), pyfits.Column(name='dec0', format='E', array=np.array(decp0)), pyfits.Column(name='magp2', format='E', array=np.array(np.where((np.array(magp2) != 'INDEF'), np.array(magp2), 9999), float)), pyfits.Column(name='magp3', format='E', array=np.array(np.where((np.array(magp3) != 'INDEF'), np.array(magp3), 9999), float)), pyfits.Column(name='magp4', format='E', array=np.array(np.where((np.array(magp4) != 'INDEF'), np.array(magp4), 9999), float)), pyfits.Column(name='merrp2', format='E', array=np.array(np.where((np.array(merrp2) != 'INDEF'), np.array(merrp2), 9999), float)), pyfits.Column(name='merrp3', format='E', array=np.array(np.where((np.array(merrp3) != 'INDEF'), np.array(merrp3), 9999), float)), pyfits.Column(name='merrp4', format='E', array=np.array(np.where((np.array(merrp4) != 'INDEF'), np.array(merrp4), 9999), float)), pyfits.Column(name='smagf', format='E', array=np.array(np.where((np.array(smagf) != 'INDEF'), np.array(smagf), 9999), float)), pyfits.Column(name='smagerrf', format='E', array=np.array(np.where((np.array(smagerrf) != 'INDEF'), np.array(smagerrf), 9999), float)), ]) tbhdu = pyfits.BinTableHDU.from_columns(new_cols) hdu = pyfits.PrimaryHDU(header=hdr) thdulist = pyfits.HDUList([hdu, tbhdu]) agnkey.util.delete(img + '.sn2.fits') thdulist.writeto(img + '.sn2.fits') agnkey.util.updateheader(img + '.sn2.fits', 0, {'APCO': [np.mean(_dmag), 'Aperture correction']}) agnkey.util.updateheader(img + '.sn2.fits', 0, {'APCOERR': [np.std(_dmag), 'Aperture correction error']}) agnkey.util.updateheader(img + '.sn2.fits', 0, {'XDIM': [agnkey.util.readkey3(hdr, 'naxis1'), 'x number of pixels']}) agnkey.util.updateheader(img + '.sn2.fits', 0, {'YDIM': [agnkey.util.readkey3(hdr, 'naxis2'), 'y number of pixels']}) agnkey.util.updateheader(img + '.sn2.fits', 0, {'PSF_FWHM': [fwhm * scale, 'FWHM (arcsec) - computed with daophot']}) os.chmod(img + '.sn2.fits', 0664) os.chmod(img + '.psf.fits', 0664) result = 1 except IOError as e: print e result = 0 fwhm = 0.0 traceback.print_exc() return result, fwhm * scale
def ecpsf(img, ofwhm, threshold, interactive, ds9, fixaperture=False,_catalog=''): try: import agnkey import string hdr = agnkey.util.readhdr(img + '.fits') instrument = agnkey.util.readkey3(hdr, 'instrume') print 'INSTRUMENT:', instrument if 'PIXSCALE' in hdr: pixelscale = agnkey.util.readkey3(hdr, 'PIXSCALE') elif 'CCDSCALE' in hdr: if 'CCDXBIN' in hdr: pixelscale = agnkey.util.readkey3(hdr, 'CCDSCALE') * agnkey.util.readkey3(hdr, 'CCDXBIN') elif 'CCDSUM' in hdr: pixelscale = agnkey.util.readkey3(hdr, 'CCDSCALE') * int( string.split(agnkey.util.readkey3(hdr, 'CCDSUM'))[0]) if instrument in ['kb05', 'kb70', 'kb71', 'kb73', 'kb74', 'kb75', 'kb76', 'kb77', 'kb78', 'kb79']: scale = pixelscale _datamax = 45000 elif instrument in ['fl02', 'fl03', 'fl04']: scale = pixelscale _datamax = 120000 elif instrument in ['fs01', 'em03']: scale = pixelscale _datamax = 65000 elif instrument in ['fs02', 'fs03']: scale = pixelscale _datamax = 65000 elif instrument in ['em01']: scale = pixelscale _datamax = 65000 try: _wcserr = agnkey.util.readkey3(hdr, 'wcserr') if float(_wcserr) == 0: if instrument in ['kb05', 'kb70', 'kb71', 'kb73', 'kb74', 'kb75', 'kb76', 'kb77', 'kb78', 'kb79']: seeing = float(agnkey.util.readkey3(hdr, 'L1FWHM')) * .75 elif instrument in ['fl02', 'fl03', 'fl04']: seeing = float(agnkey.util.readkey3(hdr, 'L1FWHM')) * .75 elif instrument in ['fs01', 'fs02', 'fs03', 'em03', 'em01']: if 'L1FWHM' in hdr: seeing = float(agnkey.util.readkey3(hdr, 'L1FWHM')) * .75 elif 'L1SEEING' in hdr: seeing = float(agnkey.util.readkey3(hdr, 'L1SEEING')) * scale else: seeing = 3 else: seeing = 3 else: seeing = float(agnkey.util.readkey3(hdr, 'PSF_FWHM')) sys.exit('astrometry not good') except: sys.exit('astrometry not good') fwhm = seeing / scale print 'FWHM[header] ', fwhm, ' in pixel' if ofwhm: fwhm = float(ofwhm) print ' FWHM[input] ', fwhm, ' in pixel' if interactive: iraf.display(img, 1, fill=True) iraf.delete('tmp.lo?', verify=False) print '_' * 80 print '>>> Mark reference stars with "a". Then "q"' print '-' * 80 iraf.imexamine(img, 1, wcs='logical', logfile='tmp.log', keeplog=True) xyrefer = iraf.fields('tmp.log', '1,2,6,15', Stdout=1) xns, yns, _fws = [], [], [] ff = open('_ap.coo', 'w') for i in range(len(xyrefer)): xns.append(float(xyrefer[i].split()[0])) yns.append(float(xyrefer[i].split()[1])) _fws.append(float(xyrefer[i].split()[3])) ff.write('%10.3f %10.3f %7.2f \n' % (xns[i], yns[i], float(_fws[i]))) ff.close() elif _catalog: # cat1=agnkey.agnastrodef.readtxt(_catalog) # cat1['ra'],cat1['dec'] ddd=iraf.wcsctran(input=_catalog,output='STDOUT',Stdout=1,image=img,inwcs='world',outwcs='logical', units='degrees degrees',columns='1 2',formats='%10.1f %10.1f',verbose='no') ddd=[i for i in ddd if i[0]!='#'] ddd=[' '.join(i.split()[0:3]) for i in ddd] ff = open('_ap.coo', 'w') for i in ddd: a,b,c = string.split(i) #print a,b,c ff.write('%10s %10s %10s \n' % (a, b, c)) ff.close() print 'use catalog' else: xs, ys, ran, decn, magbest, classstar, fluxrad, bkg = runsex(img, fwhm, threshold, scale) ff = open('_ap.coo', 'w') for i in range(len(xs)): ff.write('%10.3f %10.3f %7.2f \n' % (xs[i], ys[i], float(fluxrad[i]))) ff.close() ## End automatic selection print 80 * "#" photmag = apfit(img, fwhm, hdr, interactive, _datamax, fixaperture) radec = iraf.wcsctran(input='STDIN', output='STDOUT', Stdin=photmag, \ Stdout=1, image=img, inwcs='logical', outwcs='world', columns="1 2", \ format='%13.3H %12.2h', min_sig=9, mode='h')[3:] exptime = agnkey.util.readkey3(hdr, 'exptime') object = agnkey.util.readkey3(hdr, 'object').replace(' ', '') filtro = agnkey.util.readkey3(hdr, 'filter') ####################################### rap, decp, magp2, magp3, magp4, smagf = [], [], [], [], [], [] merrp2, merrp3, merrp4, smagerrf = [], [], [], [] rap0, decp0 = [], [] for i in range(len(radec)): aa = radec[i].split() rap.append(aa[0]) decp.append(aa[1]) rap0.append(agnkey.agnabsphotdef.deg2HMS(ra=aa[0])) decp0.append(agnkey.agnabsphotdef.deg2HMS(dec=aa[1])) idp = aa[2] magp2.append(aa[3]) magp3.append(aa[4]) magp4.append(aa[5]) merrp2.append(aa[6]) merrp3.append(aa[7]) merrp4.append(aa[8]) tbhdu = pyfits.new_table(pyfits.ColDefs([ pyfits.Column(name='ra', format='20A', array=np.array(rap)), pyfits.Column(name='dec', format='20A', array=np.array(decp)), pyfits.Column(name='ra0', format='E', array=np.array(rap0)), pyfits.Column(name='dec0', format='E', array=np.array(decp0)), pyfits.Column(name='magp2', format='E', array=np.array(np.where((np.array(magp2) != 'INDEF'), np.array(magp2), 9999), float)), pyfits.Column(name='magp3', format='E', array=np.array(np.where((np.array(magp3) != 'INDEF'), np.array(magp3), 9999), float)), pyfits.Column(name='magp4', format='E', array=np.array(np.where((np.array(magp4) != 'INDEF'), np.array(magp4), 9999), float)), pyfits.Column(name='merrp2', format='E', array=np.array(np.where((np.array(merrp2) != 'INDEF'), np.array(merrp2), 9999), float)), pyfits.Column(name='merrp3', format='E', array=np.array(np.where((np.array(merrp3) != 'INDEF'), np.array(merrp3), 9999), float)), pyfits.Column(name='merrp4', format='E', array=np.array(np.where((np.array(merrp4) != 'INDEF'), np.array(merrp4), 9999), float)), pyfits.Column(name='smagf', format='E', array=np.array(np.where((np.array(magp2) != 'INDEF'), np.array(magp2), 9999), float)), pyfits.Column(name='smagerrf', format='E', array=np.array(np.where((np.array(merrp2) != 'INDEF'), np.array(merrp2), 9999), float)), ])) hdu = pyfits.PrimaryHDU(header=hdr) thdulist = pyfits.HDUList([hdu, tbhdu]) agnkey.util.delete(img + '.sn2.fits') thdulist.writeto(img + '.sn2.fits') agnkey.util.updateheader(img + '.sn2.fits', 0, {'XDIM': [agnkey.util.readkey3(hdr, 'naxis1'), 'x number of pixels']}) agnkey.util.updateheader(img + '.sn2.fits', 0, {'YDIM': [agnkey.util.readkey3(hdr, 'naxis2'), 'y number of pixels']}) agnkey.util.updateheader(img + '.sn2.fits', 0, {'PSF_FWHM': [fwhm * scale, 'FWHM (arcsec) - computed with daophot']}) os.chmod(img + '.sn2.fits', 0664) os.chmod(img + '.psf.fits', 0664) result = 1 except: result = 0 fwhm = 0.0 traceback.print_exc() return result, fwhm * scale
if not _ra and not _dec: _ra = _ra0 _dec = _dec0 else: print '\n### use coordinate from user' if _ra and _dec: os.system('rm -rf tmp.*') ff = open('tmp.tv', 'w') ff.write(str(float(_ra)) + ' ' + str(float(_dec))) ff.close() lll = [str(_ra) + ' ' + str(_dec)] iraf.wcsctran('STDIN', 'tmp.pix', img, Stdin=lll, inwcs='world', units='degrees degrees', outwcs='logical', columns='1 2', formats='%10.1f %10.1f') if _show: iraf.tvmark(1, 'tmp.pix', mark="circle", number='yes', radii=10, nxoffse=5, nyoffse=5, color=214, txsize=2) xx0, yy0 = string.split(
def writegmoscat(gmosim): iraf.imgets(image=gmosim, param='i_naxis1') t = iraf.imgets.value gxmax = (float(t)) iraf.imgets(image=gmosim, param='i_naxis2') t = iraf.imgets.value gymax = (float(t)) gxmin = 1 gymin = 1 outfile2 = prefix + '-GMOSxy.dat' #file containing x and y pixels values on gmos image gmosx = [] gmosy = [] input = open(outfile2, 'r') for line in input: t = line.split() gmosx.append(float(t[0])) gmosy.append(float(t[1])) input.close() gmosx = N.array(gmosx, 'f') gmosy = N.array(gmosy, 'f') #get gmos ra and dec positions from x,y pixels values radecfile = prefix + '-GMOSradec.dat' iraf.wcsctran(outfile2, radecfile, image=gmosim, inwcs='physical', outwcs='world', columns='1 2', verbose='no') infile = open(radecfile, 'r') gmosra = [] gmosdec = [] for line in infile: if line.find('#') > -1: continue t = line.split() gmosra.append(float(t[0])) gmosdec.append(float(t[1])) infile.close() gmosra = N.array(gmosra, 'f') gmosdec = N.array(gmosdec, 'f') s = prefix + '.reg' dsfile = open(s, 'w') s = "global color=green font='helvetica 10 normal' select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source\n" dsfile.write(s) s = "fk5 \n" dsfile.write(s) infile = '/Users/rfinn/clusters/spitzer/Mastertables/' + prefix + 'mastertable24.dat' gmoscat = prefix + 'mastertable24GMOS.dat' input = open(infile, 'r') output = open(gmoscat, 'w') i = 0 for line in input: if line.find('#') > -1: #skip lines with '#' in them output.write(line) continue if line.find('\\') > -1: #skip lines with '#' in them output.write(line) continue if line.find('|') > -1: #skip lines with '#' in them output.write(line) continue if gmosx[i] < 1.: print "bad x value: ", gmosx[i], 1, gxmax i = i + 1 continue if gmosx[i] > gxmax: print "bad x value: ", gmosx[i], 1, gxmax i = i + 1 continue if gmosy[i] < 1.: print "bad y value (too small): ", i, gmosy[i], 1, gymax i = i + 1 continue if gmosy[i] > gymax: print "bad y value: ", i, gmosy[i], 1, gymax i = i + 1 continue line = line[0:(len(line) - 1)] #get rid of \n at end of line s = " %10.3f %10.3f %13.8f %13.8f \n" % (gmosx[i], gmosy[i], gmosra[i], gmosdec[i]) outline = line + s #append gmos x and y pixels to the end of the line output.write(outline) string1 = "circle(%12.8f, %12.8f, 3\") \n" % (gmosra[i], gmosdec[i]) dsfile.write(string1) i = i + 1 input.close() dsfile.close()
def convert_xy_radec(filelist, soft='sextractor'): """ Performs pyraf transformation of x-y into RA-DEC coordinates filename is WITHOUT suffix .fits Input is the *.magfiltered file from select_good_stars() function Output is the *.magwcs file """ for filename in filelist: path, filename2 = os.path.split(filename) if path: folder = path + '/' else: folder = '' magfilewcs = filename + ".magwcs" if soft == 'iraf': from pyraf import iraf magfile = filename2 + ".magfiltered" iraf.wcsctran(input=magfile, output=magfilewcs, image=filename, inwcs="physical", outwcs="world") data1 = ascii.read( magfile, names=['Xpos', 'Ypos', 'Mag_aper', 'Mag_err_aper']) data2 = ascii.read(magfilewcs, names=['RA', 'DEC', 'Mag_aper', 'Mag_err_aper']) data = Table([ data1['Xpos'], data1['Ypos'], data2['RA'], data2['DEC'], data2['Mag_aper'], data2['Mag_err_aper'], [filename] * len(data1) ], names=[ 'Xpos', 'Ypos', 'RA', 'DEC', 'Mag_inst', 'Magerr_inst', 'filenames' ]) elif soft == 'sextractor': sources = ascii.read(folder + 'sourcesdet_%s.cat' % (filename2.split('.fits')[0]), format='sextractor') header = fits.getheader(filename) w = wcs.WCS(header) ra, dec = w.wcs_pix2world(sources['X_IMAGE'], sources['Y_IMAGE'], 1) filenames = [filename] * len(ra) data = Table([ sources['X_IMAGE'], sources['Y_IMAGE'], ra, dec, sources['MAG_AUTO'], sources['MAGERR_AUTO'], filenames ], names=[ 'Xpos', 'Ypos', 'RA', 'DEC', 'Mag_isnt', 'Magerr_inst', 'filenames' ]) data.write(magfilewcs, format='ascii.commented_header', overwrite=True) data4 = data['RA', 'DEC'] data4.write(magfilewcs + '2', format='ascii.commented_header', overwrite=True)
def register_module(img, _system, coordinatelist, interactive, logincl, _filter): from snoopy2 import src import snoopy2 import string, os # logincl=src.open_program() from pyraf import iraf iraf.astcat(_doprint=0) iraf.imcoords(_doprint=0) iraf.set(stdimage='imt1024') iraf.tv.rimexam.backgrou = 'yes' subdirectory = ['optical/', 'infrared/', 'sloan/'] iraf.delete(coordinatelist + ".tv", verify='no') iraf.delete(coordinatelist + "_templ.coo", verify='no') iraf.delete("_templ.*", verify='no') try: dir_system = subdirectory[_system] iraf.fields('home$coordinate_std/' + dir_system + coordinatelist + '.list', '2,3,1', Stdout=coordinatelist + '.tv') iraf.fields('home$coordinate_std/' + dir_system + coordinatelist + '.list', '1', Stdout='_templ.coo') iraf.wcsctran(coordinatelist + '.tv', '_templ.coo2', 'home$coordinate_std/' + dir_system + coordinatelist + '_templ.fits', inwcs='world', units='degrees degrees', outwcs='logical', columns='1 2', formats='%10.1f %10.1f') a = iraf.fields('_templ.coo', '1', Stdout=1) b = iraf.fields('_templ.coo2', '1,2', Stdout=1)[2:] ff = open(coordinatelist + '_templ.coo', 'w') for i in range(len(a)): ff.write(b[i] + '\t' + a[i] + ' \n') ff.close() if _system == 0 or _system == 2: standard = iraf.fields('home$coordinate_std/' + dir_system + coordinatelist + '.list', '1,4,5,6,7,8', Stdout=1) else: standard = iraf.fields('home$coordinate_std/' + dir_system + coordinatelist + '.list', '1,4,5,6', Stdout=1) except Exception as e: print e print "WARNING: no coordinate " + coordinatelist + " file found in " + snoopy2.__path__[ 0] + '/coordinate_std/' + dir_system + ' !!! ' src.close_program(logincl) stars = [] for i in standard: nome = string.split(i) stars.append(nome[0]) # _filter='XXX' src.delete("tmp." + img + ".coo") iraf.wcsctran(coordinatelist + '.tv', 'tmp.' + img + '.coo', img, inwcs='world', units='degrees degrees', outwcs='logical', columns='1 2', formats='%10.1f %10.1f') if interactive: print '######### Select FRAME TILE on your DS9 !!!!!' _z1, _z2, goon = src.display_image( snoopy2.__path__[0] + '/coordinate_std/' + dir_system + coordinatelist + '_templ.fits', 2, '', '', False) if not goon: src.close_program(logincl) iraf.tvmark(2, coordinatelist + '_templ.coo', mark="circle", number='no', label='yes', radii=20, nxoffse=15, nyoffse=15, color=214, txsize=4) _z1, _z2, goon = src.display_image(img, 1, '', '', False) if not goon: src.close_program(logincl) iraf.tvmark(1, 'tmp.' + img + '.coo', mark="circle", number='no', label='yes', radii=20, nxoffse=15, nyoffse=15, color=205, txsize=2) answ = raw_input( 'is the astrometry of the field good ? \n [y/n] ? [y] ') if not answ: answ = 'y' if answ == 'n': try: src.delete('tmp.' + img + '.coo') src.delete('tmp.ccdb') iraf.ccmap('_first.ccmap', 'tmp.ccdb', images=img, fitgeome='rscale', lngunit='degrees', update='yes', interact=False) iraf.wcsctran('_first_image.tv', 'tmp.' + img + '.coo', img, inwcs='world', units='degrees degrees', outwcs='logical', columns='1 2', formats='%10.1f %10.1f') iraf.tvmark(1, 'tmp.' + img + '.coo', mark="circle", number='no', label='yes', radii=20, nxoffse=15, nyoffse=15, color=206, txsize=4) answ = raw_input( 'AND NOW, is the astrometry of the field good [y/n] ? [y] ' ) if not answ: answ = 'y' except: pass while answ == 'n': _z1, _z2, goon = src.display_image(img, 1, '', '', False) if not goon: src.close_program(logincl) print '>> Identify (minimum 2, preferably 3) reference stars (mark with "a")' iraf.delete('tmp.coo', verify='no') iraf.imexamine(img, 1, logfile='tmp.coo', keeplog='yes') iraf.tvmark(1, 'tmp.coo', mark="circle", number='yes', label='no', radii=15, nxoffse=15, nyoffse=15, color=214, txsize=4) xycoo = iraf.fields('tmp.coo', '1,2,13', Stdout=1) print '>> Identify reference stars' idcat = [] for i in range(len(xycoo)): idcat.append(raw_input('Star ' + str(i + 1) + '= ? ')) ff = open(coordinatelist + '.tv', 'r') rr = ff.readlines() ff.close() gg = open('tmp.ccmap', 'w') fw = [] for i in range(len(idcat)): idpos = stars.index(idcat[i]) _rr = string.split(rr[idpos]) _x, _y, _fw = string.split(xycoo[i]) gg.write(_x + ' ' + _y + ' ' + _rr[0] + ' ' + _rr[1] + ' \n') fw.append(float(_fw)) gg.close() iraf.delete('_first_image.tv', verify='no') iraf.delete('_first.ccmap', verify='no') os.system('cp ' + coordinatelist + '.tv _first_image.tv') os.system('cp tmp.ccmap _first.ccmap') iraf.ccmap('tmp.ccmap', 'tmp.ccdb', images=img, fitgeome='rscale', lngunit='degrees', update='yes', interact=False) _z1, _z2, goon = src.display_image(img, 1, '', '', False) if not goon: src.close_program(logincl) iraf.delete('tmp.' + img + '.coo', verify='no') iraf.wcsctran(coordinatelist + '.tv', 'tmp.' + img + '.coo', img, inwcs='world', units='degrees degrees', outwcs='logical', columns='1 2', formats='%10.1f %10.1f') iraf.tvmark(1, 'tmp.' + img + '.coo', mark="circle", number='yes', label='no', radii=20, nxoffse=15, nyoffse=15, color=205, txsize=4) iraf.delete("tmp.ccmap", verify='no') iraf.delete("tmp.coo", verify='no') iraf.delete("tmp.ccdb", verify='no') answ = raw_input( 'is the astrometry of the field good [y/n] ? [y]') if not answ: answ = 'y' iraf.delete("tmp.star", verify='no') iraf.ccfind('home$coordinate_std/' + dir_system + coordinatelist + '.list', 'tmp.star', img, lngcolu=2, latcolu=3, lngunit='degrees', usewcs='yes') iraf.ccmap('tmp.star', 'tmp.ccdb', images=img, fitgeome='rscale', xcolum=9, ycolum=10, lngcolum=2, latcolumn=3, lngunit='degrees', update='yes', interact=False) iraf.delete('tmp.' + img + '.coo', verify='no') iraf.wcsctran(coordinatelist + '.tv', 'tmp.' + img + '.coo', img, inwcs='world', units='degrees degrees', outwcs='logical', columns='1 2', formats='%10.1f %10.1f') iraf.delete("tmp.ccdb", verify='no') iraf.delete("tmp.star", verify='no') iraf.delete("tmp.coo", verify='no') return stars, 'tmp.' + img + '.coo'
src.delete(coordinatelist + ".tv") src.delete(coordinatelist + "_templ.coo") src.delete("_templ.*") try: dir_system = subdirectory[_system] iraf.fields('home$coordinate_std/' + dir_system + coordinatelist + '.list', '2,3,1', Stdout=coordinatelist + '.tv') iraf.fields('home$coordinate_std/' + dir_system + coordinatelist + '.list', '1', Stdout='_templ.coo') iraf.wcsctran(coordinatelist + '.tv', '_templ.coo2', 'home$coordinate_std/' + dir_system + coordinatelist + '_templ.fits', inwcs='world', units='degrees degrees', outwcs='logical', columns='1 2', formats='%10.1f %10.1f') a = iraf.fields('_templ.coo', '1', Stdout=1) b = iraf.fields('_templ.coo2', '1,2', Stdout=1)[2:] ff = open(coordinatelist + '_templ.coo', 'w') for i in range(len(a)): ff.write(b[i] + '\t' + a[i] + ' \n') ff.close() if _system == 0 or _system == 2: standard = iraf.fields('home$coordinate_std/' + dir_system + coordinatelist + '.list', '1,4,5,6,7,8', Stdout=1)
def ecpsf(img, ofwhm, threshold, interactive, ds9, fixaperture=False, _catalog=''): try: import agnkey import string hdr = agnkey.util.readhdr(img + '.fits') instrument = agnkey.util.readkey3(hdr, 'instrume') print 'INSTRUMENT:', instrument if 'PIXSCALE' in hdr: pixelscale = agnkey.util.readkey3(hdr, 'PIXSCALE') elif 'CCDSCALE' in hdr: if 'CCDXBIN' in hdr: pixelscale = agnkey.util.readkey3( hdr, 'CCDSCALE') * agnkey.util.readkey3(hdr, 'CCDXBIN') elif 'CCDSUM' in hdr: pixelscale = agnkey.util.readkey3(hdr, 'CCDSCALE') * int( string.split(agnkey.util.readkey3(hdr, 'CCDSUM'))[0]) if instrument in [ 'kb05', 'kb70', 'kb71', 'kb73', 'kb74', 'kb75', 'kb76', 'kb77', 'kb78', 'kb79' ]: scale = pixelscale _datamax = 45000 elif instrument in ['fl02', 'fl03', 'fl04']: scale = pixelscale _datamax = 120000 elif instrument in ['fs01', 'em03']: scale = pixelscale _datamax = 65000 elif instrument in ['fs02', 'fs03']: scale = pixelscale _datamax = 65000 elif instrument in ['em01']: scale = pixelscale _datamax = 65000 try: _wcserr = agnkey.util.readkey3(hdr, 'wcserr') if float(_wcserr) == 0: if instrument in [ 'kb05', 'kb70', 'kb71', 'kb73', 'kb74', 'kb75', 'kb76', 'kb77', 'kb78', 'kb79' ]: seeing = float(agnkey.util.readkey3(hdr, 'L1FWHM')) * .75 elif instrument in ['fl02', 'fl03', 'fl04']: seeing = float(agnkey.util.readkey3(hdr, 'L1FWHM')) * .75 elif instrument in ['fs01', 'fs02', 'fs03', 'em03', 'em01']: if 'L1FWHM' in hdr: seeing = float(agnkey.util.readkey3(hdr, 'L1FWHM')) * .75 elif 'L1SEEING' in hdr: seeing = float(agnkey.util.readkey3( hdr, 'L1SEEING')) * scale else: seeing = 3 else: seeing = 3 else: seeing = float(agnkey.util.readkey3(hdr, 'PSF_FWHM')) sys.exit('astrometry not good') except: sys.exit('astrometry not good') fwhm = seeing / scale print 'FWHM[header] ', fwhm, ' in pixel' if ofwhm: fwhm = float(ofwhm) print ' FWHM[input] ', fwhm, ' in pixel' if interactive: iraf.display(img, 1, fill=True) iraf.delete('tmp.lo?', verify=False) print '_' * 80 print '>>> Mark reference stars with "a". Then "q"' print '-' * 80 iraf.imexamine(img, 1, wcs='logical', logfile='tmp.log', keeplog=True) xyrefer = iraf.fields('tmp.log', '1,2,6,15', Stdout=1) xns, yns, _fws = [], [], [] ff = open('_ap.coo', 'w') for i in range(len(xyrefer)): xns.append(float(xyrefer[i].split()[0])) yns.append(float(xyrefer[i].split()[1])) _fws.append(float(xyrefer[i].split()[3])) ff.write('%10.3f %10.3f %7.2f \n' % (xns[i], yns[i], float(_fws[i]))) ff.close() elif _catalog: # cat1=agnkey.agnastrodef.readtxt(_catalog) # cat1['ra'],cat1['dec'] ddd = iraf.wcsctran(input=_catalog, output='STDOUT', Stdout=1, image=img, inwcs='world', outwcs='logical', units='degrees degrees', columns='1 2', formats='%10.1f %10.1f', verbose='no') ddd = [i for i in ddd if i[0] != '#'] ddd = [' '.join(i.split()[0:3]) for i in ddd] ff = open('_ap.coo', 'w') for i in ddd: a, b, c = string.split(i) #print a,b,c ff.write('%10s %10s %10s \n' % (a, b, c)) ff.close() print 'use catalog' else: xs, ys, ran, decn, magbest, classstar, fluxrad, bkg = runsex( img, fwhm, threshold, scale) ff = open('_ap.coo', 'w') for i in range(len(xs)): ff.write('%10.3f %10.3f %7.2f \n' % (xs[i], ys[i], float(fluxrad[i]))) ff.close() ## End automatic selection print 80 * "#" photmag = apfit(img, fwhm, hdr, interactive, _datamax, fixaperture) radec = iraf.wcsctran(input='STDIN', output='STDOUT', Stdin=photmag, \ Stdout=1, image=img, inwcs='logical', outwcs='world', columns="1 2", \ format='%13.3H %12.2h', min_sig=9, mode='h')[3:] exptime = agnkey.util.readkey3(hdr, 'exptime') object = agnkey.util.readkey3(hdr, 'object').replace(' ', '') filtro = agnkey.util.readkey3(hdr, 'filter') ####################################### rap, decp, magp2, magp3, magp4, smagf = [], [], [], [], [], [] merrp2, merrp3, merrp4, smagerrf = [], [], [], [] rap0, decp0 = [], [] for i in range(len(radec)): aa = radec[i].split() rap.append(aa[0]) decp.append(aa[1]) rap0.append(agnkey.agnabsphotdef.deg2HMS(ra=aa[0])) decp0.append(agnkey.agnabsphotdef.deg2HMS(dec=aa[1])) idp = aa[2] magp2.append(aa[3]) magp3.append(aa[4]) magp4.append(aa[5]) merrp2.append(aa[6]) merrp3.append(aa[7]) merrp4.append(aa[8]) tbhdu = pyfits.new_table( pyfits.ColDefs([ pyfits.Column(name='ra', format='20A', array=np.array(rap)), pyfits.Column(name='dec', format='20A', array=np.array(decp)), pyfits.Column(name='ra0', format='E', array=np.array(rap0)), pyfits.Column(name='dec0', format='E', array=np.array(decp0)), pyfits.Column(name='magp2', format='E', array=np.array( np.where((np.array(magp2) != 'INDEF'), np.array(magp2), 9999), float)), pyfits.Column(name='magp3', format='E', array=np.array( np.where((np.array(magp3) != 'INDEF'), np.array(magp3), 9999), float)), pyfits.Column(name='magp4', format='E', array=np.array( np.where((np.array(magp4) != 'INDEF'), np.array(magp4), 9999), float)), pyfits.Column(name='merrp2', format='E', array=np.array( np.where((np.array(merrp2) != 'INDEF'), np.array(merrp2), 9999), float)), pyfits.Column(name='merrp3', format='E', array=np.array( np.where((np.array(merrp3) != 'INDEF'), np.array(merrp3), 9999), float)), pyfits.Column(name='merrp4', format='E', array=np.array( np.where((np.array(merrp4) != 'INDEF'), np.array(merrp4), 9999), float)), pyfits.Column(name='smagf', format='E', array=np.array( np.where((np.array(magp2) != 'INDEF'), np.array(magp2), 9999), float)), pyfits.Column(name='smagerrf', format='E', array=np.array( np.where((np.array(merrp2) != 'INDEF'), np.array(merrp2), 9999), float)), ])) hdu = pyfits.PrimaryHDU(header=hdr) thdulist = pyfits.HDUList([hdu, tbhdu]) agnkey.util.delete(img + '.sn2.fits') thdulist.writeto(img + '.sn2.fits') agnkey.util.updateheader(img + '.sn2.fits', 0, { 'XDIM': [agnkey.util.readkey3(hdr, 'naxis1'), 'x number of pixels'] }) agnkey.util.updateheader(img + '.sn2.fits', 0, { 'YDIM': [agnkey.util.readkey3(hdr, 'naxis2'), 'y number of pixels'] }) agnkey.util.updateheader(img + '.sn2.fits', 0, { 'PSF_FWHM': [fwhm * scale, 'FWHM (arcsec) - computed with daophot'] }) os.chmod(img + '.sn2.fits', 0664) os.chmod(img + '.psf.fits', 0664) result = 1 except: result = 0 fwhm = 0.0 traceback.print_exc() return result, fwhm * scale
def mscimage(input=None, output=None, format='image', pixmask=no, verbose=')_.verbose', wcssource='image', reference='', ra=INDEF, dec=INDEF, scale=INDEF, rotation=INDEF, blank=0.0, interpolant='poly5', minterpolant='linear', boundary='reflect', constant=0.0, fluxconserve=no, ntrim=8, nxblock=INDEF, nyblock=INDEF, interactive=no, nx=10, ny=20, fitgeometry='general', xxorder=4, xyorder=4, xxterms='half', yxorder=4, yyorder=4, yxterms='half', fd_in='', fd_ext='', fd_coord='', mode='ql', DOLLARnargs=0, taskObj=None): Vars = IrafParList('mscimage') Vars.addParam( makeIrafPar(input, datatype='string', name='input', mode='a', prompt='List of input mosaic exposures')) Vars.addParam( makeIrafPar(output, datatype='string', name='output', mode='a', prompt='List of output images')) Vars.addParam( makeIrafPar(format, datatype='string', name='format', enum=['image', 'mef'], mode='h', prompt='Output format (image|mef)')) Vars.addParam( makeIrafPar(pixmask, datatype='bool', name='pixmask', mode='h', prompt='Create pixel mask?')) Vars.addParam( makeIrafPar(verbose, datatype='bool', name='verbose', mode='h', prompt='Verbose output?\n\n# Output WCS parameters')) Vars.addParam( makeIrafPar(wcssource, datatype='string', name='wcssource', enum=['image', 'parameters', 'match'], mode='h', prompt='Output WCS source (image|parameters|match)')) Vars.addParam( makeIrafPar(reference, datatype='file', name='reference', mode='h', prompt='Reference image')) Vars.addParam( makeIrafPar(ra, datatype='real', name='ra', max=24.0, min=0.0, mode='h', prompt='RA of tangent point (hours)')) Vars.addParam( makeIrafPar(dec, datatype='real', name='dec', max=90.0, min=-90.0, mode='h', prompt='DEC of tangent point (degrees)')) Vars.addParam( makeIrafPar(scale, datatype='real', name='scale', mode='h', prompt='Scale (arcsec/pixel)')) Vars.addParam( makeIrafPar( rotation, datatype='real', name='rotation', max=360.0, min=-360.0, mode='h', prompt= 'Rotation of DEC from N to E (degrees)\n\n# Resampling parmeters')) Vars.addParam( makeIrafPar(blank, datatype='real', name='blank', mode='h', prompt='Blank value')) Vars.addParam( makeIrafPar(interpolant, datatype='string', name='interpolant', mode='h', prompt='Interpolant for data')) Vars.addParam( makeIrafPar(minterpolant, datatype='string', name='minterpolant', mode='h', prompt='Interpolant for mask')) Vars.addParam( makeIrafPar(boundary, datatype='string', name='boundary', enum=['nearest', 'constant', 'reflect', 'wrap'], mode='h', prompt='Boundary extension')) Vars.addParam( makeIrafPar(constant, datatype='real', name='constant', mode='h', prompt='Constant boundary extension value')) Vars.addParam( makeIrafPar(fluxconserve, datatype='bool', name='fluxconserve', mode='h', prompt='Preserve flux per unit area?')) Vars.addParam( makeIrafPar(ntrim, datatype='int', name='ntrim', min=0, mode='h', prompt='Edge trim in each extension')) Vars.addParam( makeIrafPar(nxblock, datatype='int', name='nxblock', mode='h', prompt='X dimension of working block size in pixels')) Vars.addParam( makeIrafPar( nyblock, datatype='int', name='nyblock', mode='h', prompt= 'Y dimension of working block size in pixels\n\n# Geometric mapping parameters' )) Vars.addParam( makeIrafPar(interactive, datatype='bool', name='interactive', mode='h', prompt='Fit mapping interactively?')) Vars.addParam( makeIrafPar(nx, datatype='int', name='nx', mode='h', prompt='Number of x grid points')) Vars.addParam( makeIrafPar(ny, datatype='int', name='ny', mode='h', prompt='Number of y grid points')) Vars.addParam( makeIrafPar(fitgeometry, datatype='string', name='fitgeometry', enum=[ 'shift', 'xyscale', 'rotate', 'rscale', 'rxyscale', 'general' ], mode='h', prompt='Fitting geometry')) Vars.addParam( makeIrafPar(xxorder, datatype='int', name='xxorder', min=2, mode='h', prompt='Order of x fit in x')) Vars.addParam( makeIrafPar(xyorder, datatype='int', name='xyorder', min=2, mode='h', prompt='Order of x fit in y')) Vars.addParam( makeIrafPar(xxterms, datatype='string', name='xxterms', mode='h', prompt='X fit cross terms type')) Vars.addParam( makeIrafPar(yxorder, datatype='int', name='yxorder', min=2, mode='h', prompt='Order of y fit in x')) Vars.addParam( makeIrafPar(yyorder, datatype='int', name='yyorder', min=2, mode='h', prompt='Order of y fit in y')) Vars.addParam( makeIrafPar(yxterms, datatype='string', name='yxterms', mode='h', prompt='Y fit cross terms type\n\n')) Vars.addParam( makeIrafPar(fd_in, datatype='struct', name='fd_in', list_flag=1, mode='h', prompt='')) Vars.addParam( makeIrafPar(fd_ext, datatype='struct', name='fd_ext', list_flag=1, mode='h', prompt='')) Vars.addParam( makeIrafPar(fd_coord, datatype='struct', name='fd_coord', list_flag=1, mode='h', prompt='')) Vars.addParam( makeIrafPar(mode, datatype='string', name='mode', mode='h', prompt='')) Vars.addParam( makeIrafPar(DOLLARnargs, datatype='int', name='$nargs', mode='h')) Vars.addParam(makeIrafPar(None, datatype='file', name='in', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='out', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='ref', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='pl', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='image', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='trimsec', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='outsec', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='plsec', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='inlists', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='extlist', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='pllist', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='coord', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='db', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='wcsref', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='outtemp', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='pltemp', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='nc', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='nl', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='ncref', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='nlref', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='cmin', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='cmax', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='lmin', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='lmax', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='nimage', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='nimages', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='nxblk', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='nyblk', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='x', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='y', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='rval', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='xmin', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='xmax', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='ymin', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='ymax', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='crpix1', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='crpix2', mode='u')) Vars.addParam( makeIrafPar(None, datatype='string', name='extname', mode='u')) Vars.addParam(makeIrafPar(None, datatype='string', name='str', mode='u')) iraf.cache('mscextensions', 'mscgmask') Vars.inlists = iraf.mktemp('tmp$iraf') Vars.extlist = iraf.mktemp('tmp$iraf') Vars.pllist = iraf.mktemp('tmp$iraf') Vars.coord = iraf.mktemp('tmp$iraf') Vars.db = iraf.mktemp('tmp$iraf') Vars.outtemp = iraf.mktemp('tmp') Vars.wcsref = iraf.mktemp('tmp') Vars.pltemp = iraf.mktemp('tmp') iraf.joinlists(Vars.input, Vars.output, output=Vars.inlists, delim=' ', short=yes, type='image') Vars.fd_in = Vars.inlists while (iraf.fscan(locals(), 'Vars.fd_in', 'Vars.PYin', 'Vars.out') != EOF): if (iraf.imaccess(Vars.out)): iraf.printf('Warning: Image already exists (%s)\n', Vars.out) continue if (Vars.pixmask): Vars.pl = Vars.out Vars.nc = iraf.strlen(Vars.pl) if (Vars.nc > 5 and iraf.substr(Vars.pl, Vars.nc - 4, Vars.nc) == '.fits'): Vars.pl = iraf.substr(Vars.pl, 1, Vars.nc - 5) elif (Vars.nc > 4 and iraf.substr(Vars.out, Vars.nc - 3, Vars.nc) == '.imh'): Vars.pl = iraf.substr(Vars.pl, 1, Vars.nc - 4) Vars.pl = Vars.pl + '_bpm' if (Vars.format == 'image' and iraf.imaccess(Vars.pl)): iraf.printf('Warning: Mask already exists (%s)\n', Vars.pl) continue else: Vars.pl = '' iraf.mscextensions(Vars.PYin, output='file', index='0-', extname='', extver='', lindex=no, lname=yes, lver=no, ikparams='', Stdout=Vars.extlist) Vars.nimages = int(iraf.mscextensions.nimages) Vars.nimage = 0 if (Vars.nimages < 1): iraf.printf("WARNING: No input image data found in `%s'.\ ", Vars.PYin) iraf.delete(Vars.extlist, verify=no) continue if (not iraf.imaccess(Vars.wcsref)): Vars.ref = Vars.reference if (Vars.wcssource == 'match'): Vars.wcsref = Vars.ref else: iraf.mscwtemplate('@' + Vars.extlist, Vars.wcsref, wcssource=Vars.wcssource, reference=Vars.ref, ra=Vars.ra, dec=Vars.dec, scale=Vars.scale, rotation=Vars.rotation, projection='', verbose=Vars.verbose) Vars.fd_ext = Vars.extlist while (iraf.fscan(locals(), 'Vars.fd_ext', 'Vars.image') != EOF): Vars.nimage = Vars.nimage + 1 if (Vars.nimages > 1): Pipe1 = iraf.hselect(Vars.image, 'extname', yes, Stdout=1) iraf.scan(locals(), 'Vars.extname', Stdin=Pipe1) del Pipe1 if (iraf.nscan() == 0): Vars.extname = 'im' + str(Vars.nimage) Pipe1 = iraf.printf('%s[%s,append]\n', Vars.outtemp, Vars.extname, Stdout=1) iraf.scan(locals(), 'Vars.outsec', Stdin=Pipe1) del Pipe1 Pipe1 = iraf.printf('%s%s\n', Vars.pl, Vars.extname, Stdout=1) iraf.scan(locals(), 'Vars.plsec', Stdin=Pipe1) del Pipe1 else: Vars.extname = '' Vars.outsec = Vars.outtemp Vars.plsec = Vars.pl if (Vars.pixmask and iraf.imaccess(Vars.plsec)): iraf.delete(Vars.coord, verify=no) iraf.delete(Vars.db, verify=no) iraf.printf('Warning: Mask already exists (%s)\n', Vars.plsec) continue if (Vars.verbose): iraf.printf('Resampling %s ...\n', Vars.image) Pipe1 = iraf.hselect(Vars.image, 'naxis1,naxis2', yes, Stdout=1) iraf.scan(locals(), 'Vars.nc', 'Vars.nl', Stdin=Pipe1) del Pipe1 Vars.cmin = 1 + Vars.ntrim Vars.cmax = Vars.nc - Vars.ntrim Vars.lmin = 1 + Vars.ntrim Vars.lmax = Vars.nl - Vars.ntrim Pipe1 = iraf.printf('[%d:%d,%d:%d]\n', Vars.cmin, Vars.cmax, Vars.lmin, Vars.lmax, Stdout=1) iraf.scan(locals(), 'Vars.trimsec', Stdin=Pipe1) del Pipe1 if (Vars.wcssource == 'match'): Pipe1 = iraf.hselect(Vars.ref, 'naxis1,naxis2', yes, Stdout=1) iraf.scan(locals(), 'Vars.ncref', 'Vars.nlref', Stdin=Pipe1) del Pipe1 Vars.xmin = (Vars.ncref - 1.) / (Vars.nx - 1.) Vars.ymin = (Vars.nlref - 1.) / (Vars.ny - 1.) Vars.ymax = 1 while (Vars.ymax <= Vars.nlref + 1): Vars.xmax = 1 while (Vars.xmax <= Vars.ncref + 1): iraf.clPrint(Vars.xmax, Vars.ymax, Vars.xmax, Vars.ymax, StdoutAppend=Vars.coord) Vars.xmax = Vars.xmax + Vars.xmin Vars.ymax = Vars.ymax + Vars.ymin iraf.mscctran(Vars.coord, Vars.db, Vars.ref, 'logical', 'world', columns='3 4', units='', formats='%.4H %.3h', min_sigdigit=10, verbose=no) iraf.delete(Vars.coord, verify=no) iraf.wcsctran(Vars.db, Vars.coord, Vars.image + Vars.trimsec, inwcs='world', outwcs='logical', columns='3 4', units='hours native', formats='', min_sigdigit=10, verbose=no) iraf.delete(Vars.db, verify=no) else: Vars.nc = Vars.cmax - Vars.cmin + 1 Vars.nl = Vars.lmax - Vars.lmin + 1 Vars.xmin = (Vars.nc - 1.) / (Vars.nx - 1.) Vars.ymin = (Vars.nl - 1.) / (Vars.ny - 1.) Vars.ymax = 1 while (Vars.ymax <= Vars.nl + 1): Vars.xmax = 1 while (Vars.xmax <= Vars.nc + 1): iraf.clPrint(Vars.xmax, Vars.ymax, Vars.xmax, Vars.ymax, StdoutAppend=Vars.coord) Vars.xmax = Vars.xmax + Vars.xmin Vars.ymax = Vars.ymax + Vars.ymin iraf.mscctran(Vars.coord, Vars.db, Vars.image + Vars.trimsec, 'logical', 'world', columns='1 2', units='', formats='%.4H %.3h', min_sigdigit=10, verbose=no) iraf.delete(Vars.coord, verify=no) iraf.wcsctran(Vars.db, Vars.coord, Vars.wcsref, inwcs='world', outwcs='logical', columns='1 2', units='hours native', formats='', min_sigdigit=10, verbose=no) iraf.delete(Vars.db, verify=no) Vars.xmax = 0. Vars.xmin = 1. Vars.ymax = 0. Vars.ymin = 1. Vars.fd_coord = Vars.coord while (iraf.fscan(locals(), 'Vars.fd_coord', 'Vars.x', 'Vars.y') != EOF): if (iraf.nscan() < 2): continue if (Vars.xmax < Vars.xmin): Vars.xmin = Vars.x Vars.xmax = Vars.x Vars.ymin = Vars.y Vars.ymax = Vars.y else: Vars.xmin = float(iraf.minimum(Vars.x, Vars.xmin)) Vars.xmax = float(iraf.maximum(Vars.x, Vars.xmax)) Vars.ymin = float(iraf.minimum(Vars.y, Vars.ymin)) Vars.ymax = float(iraf.maximum(Vars.y, Vars.ymax)) Vars.fd_coord = '' if (Vars.xmax <= Vars.xmin or Vars.ymax <= Vars.ymin): iraf.error(1, 'No overlap for matching reference') Vars.cmin = int(iraf.nint(Vars.xmin - 1.5)) Vars.cmax = int(iraf.nint(Vars.xmax + 1.5)) Vars.lmin = int(iraf.nint(Vars.ymin - 1.5)) Vars.lmax = int(iraf.nint(Vars.ymax + 1.5)) iraf.geomap(Vars.coord, Vars.db, Vars.cmin, Vars.cmax, Vars.lmin, Vars.lmax, transforms='', results='', fitgeometry=Vars.fitgeometry, function='chebyshev', xxorder=Vars.xxorder, xyorder=Vars.xyorder, xxterms=Vars.xxterms, yxorder=Vars.yxorder, yyorder=Vars.yyorder, yxterms=Vars.yxterms, reject=INDEF, calctype='double', verbose=no, interactive=Vars.interactive, graphics='stdgraph', cursor='') if (Vars.wcssource == 'match'): Vars.cmin = 1 Vars.lmin = 1 Vars.cmax = Vars.ncref Vars.lmax = Vars.nlref if (Vars.nxblock == INDEF): Vars.nxblk = Vars.cmax - Vars.cmin + 3 else: Vars.nxblk = Vars.nxblock if (Vars.nyblock == INDEF): Vars.nyblk = Vars.lmax - Vars.lmin + 3 else: Vars.nyblk = Vars.nyblock iraf.geotran(Vars.image + Vars.trimsec, Vars.outsec, Vars.db, Vars.coord, geometry='geometric', xin=INDEF, yin=INDEF, xshift=INDEF, yshift=INDEF, xout=INDEF, yout=INDEF, xmag=INDEF, ymag=INDEF, xrotation=INDEF, yrotation=INDEF, xmin=Vars.cmin, xmax=Vars.cmax, ymin=Vars.lmin, ymax=Vars.lmax, xsample=10., ysample=10., xscale=1., yscale=1., ncols=INDEF, nlines=INDEF, interpolant=Vars.interpolant, boundary='constant', constant=Vars.constant, fluxconserve=Vars.fluxconserve, nxblock=Vars.nxblk, nyblock=Vars.nyblk, verbose=no) iraf.wcscopy(Vars.outsec, Vars.wcsref, verbose=no) Vars.xmin = 0. Vars.ymin = 0. Pipe1 = iraf.hselect(Vars.outsec, 'crpix1,crpix2', yes, Stdout=1) iraf.scan(locals(), 'Vars.xmin', 'Vars.ymin', Stdin=Pipe1) del Pipe1 Vars.xmin = Vars.xmin - Vars.cmin + 1 Vars.ymin = Vars.ymin - Vars.lmin + 1 if (Vars.nimage == 1): Vars.crpix1 = Vars.xmin Vars.crpix2 = Vars.ymin else: Vars.crpix1 = float(iraf.maximum(Vars.crpix1, Vars.xmin)) Vars.crpix2 = float(iraf.maximum(Vars.crpix2, Vars.ymin)) iraf.hedit(Vars.outsec, 'crpix1', Vars.xmin, add=yes, verify=no, show=no, update=yes) iraf.hedit(Vars.outsec, 'crpix2', Vars.ymin, add=yes, verify=no, show=no, update=yes) if (Vars.pixmask): Pipe1 = iraf.printf('%s%s\n', Vars.pl, Vars.extname, Stdout=1) iraf.scan(locals(), 'Vars.plsec', Stdin=Pipe1) del Pipe1 iraf.mscgmask(Vars.image + Vars.trimsec, Vars.pltemp + '.pl', 'BPM', mval=10000) iraf.geotran(Vars.pltemp, Vars.plsec + '.fits', Vars.db, Vars.coord, geometry='geometric', xin=INDEF, yin=INDEF, xshift=INDEF, yshift=INDEF, xout=INDEF, yout=INDEF, xmag=INDEF, ymag=INDEF, xrotation=INDEF, yrotation=INDEF, xmin=Vars.cmin, xmax=Vars.cmax, ymin=Vars.lmin, ymax=Vars.lmax, xsample=10., ysample=10., interpolant=Vars.minterpolant, boundary='constant', constant=20000., fluxconserve=no, nxblock=Vars.nxblk, nyblock=Vars.nyblk, verbose=no) iraf.imdelete(Vars.pltemp, verify=no) iraf.mscpmask(Vars.plsec + '.fits', Vars.plsec + '.pl') iraf.imdelete(Vars.plsec + '.fits', verify=no) iraf.hedit(Vars.outsec, 'BPM', Vars.plsec + '.pl', add=yes, show=no, verify=no, update=yes) iraf.wcscopy(Vars.plsec, Vars.outsec, verbose=no) iraf.clPrint(Vars.plsec, StdoutAppend=Vars.pllist) else: iraf.hedit(Vars.outsec, 'BPM', PYdel=yes, add=no, addonly=no, show=no, verify=no, update=yes) iraf.delete(Vars.coord, verify=no) iraf.delete(Vars.db, verify=no) Vars.fd_ext = '' iraf.delete(Vars.extlist, verify=no) if (Vars.nimages > 1 and Vars.format == 'image'): if (Vars.verbose): iraf.printf('Creating image %s ...\n', Vars.out) iraf.mscextensions(Vars.outtemp, output='file', index='', extname='', extver='', lindex=no, lname=yes, lver=no, ikparams='', Stdout=Vars.extlist) if (Vars.pixmask): iraf.combine('@' + Vars.pllist, Vars.pltemp + '.pl', headers='', bpmasks=Vars.pl, rejmasks='', nrejmasks='', expmasks='', sigmas='', imcmb='', ccdtype='', amps=no, subsets=no, delete=no, combine='average', reject='none', project=no, outtype='real', outlimits='', offsets='wcs', masktype='none', maskvalue='0', blank=0., scale='none', zero='none', weight='none', statsec='', lthreshold=INDEF, hthreshold=0.99, nlow=1, nhigh=1, nkeep=1, mclip=yes, lsigma=3., hsigma=3., rdnoise='0.', gain='1.', snoise='0.', sigscale=0.1, pclip=-0.5, grow=0., Stdout='dev$null') iraf.imdelete(Vars.pltemp, verify=no) iraf.combine('@' + Vars.extlist, Vars.out, headers='', bpmasks='', rejmasks='', nrejmasks='', expmasks='', sigmas='', imcmb='', ccdtype='', amps=no, subsets=no, delete=no, combine='average', reject='none', project=no, outtype='real', outlimits='', offsets='wcs', masktype='badvalue', maskvalue='2', blank=0., scale='none', zero='none', weight='none', statsec='', lthreshold=INDEF, hthreshold=INDEF, nlow=1, nhigh=1, nkeep=1, mclip=yes, lsigma=3., hsigma=3., rdnoise='0.', gain='1.', snoise='0.', sigscale=0.1, pclip=-0.5, grow=0., Stdout='dev$null') iraf.hedit(Vars.out, 'BPM', Vars.pl, add=yes, verify=no, show=no, update=yes) iraf.hedit(Vars.pl, 'IMCMB???,PROCID??', add=no, addonly=no, PYdel=yes, update=yes, verify=no, show=no) else: iraf.combine('@' + Vars.extlist, Vars.out, headers='', bpmasks='', rejmasks='', nrejmasks='', expmasks='', sigmas='', imcmb='', ccdtype='', amps=no, subsets=no, delete=no, combine='average', reject='none', project=no, outtype='real', outlimits='', offsets='wcs', masktype='none', maskvalue='2', blank=0., scale='none', zero='none', weight='none', statsec='', lthreshold=INDEF, hthreshold=INDEF, nlow=1, nhigh=1, nkeep=1, mclip=yes, lsigma=3., hsigma=3., rdnoise='0.', gain='1.', snoise='0.', sigscale=0.1, pclip=-0.5, grow=0., Stdout='dev$null') Pipe2 = iraf.hselect('@' + Vars.extlist, 'gain', yes, Stdout=1) Pipe1 = iraf.average(data_value=0., Stdin=Pipe2, Stdout=1) del Pipe2 iraf.scan(locals(), 'Vars.rval', Stdin=Pipe1) del Pipe1 iraf.hedit(Vars.out, 'gain', Vars.rval, add=yes, PYdel=no, update=yes, verify=no, show=no) Pipe2 = iraf.hselect('@' + Vars.extlist, 'rdnoise', yes, Stdout=1) Pipe1 = iraf.average(data_value=0., Stdin=Pipe2, Stdout=1) del Pipe2 iraf.scan(locals(), 'Vars.rval', Stdin=Pipe1) del Pipe1 iraf.hedit(Vars.out, 'rdnoise', Vars.rval, add=yes, PYdel=no, update=yes, verify=no, show=no) iraf.hedit(Vars.out, 'IMCMB???,PROCID??', add=no, addonly=no, PYdel=yes, update=yes, verify=no, show=no) iraf.hedit( Vars.out, 'NEXTEND,DETSEC,CCDSEC,AMPSEC,IMAGEID,DATASEC,TRIMSEC,BIASSEC', add=no, addonly=no, PYdel=yes, update=yes, verify=no, show=no) iraf.imdelete(Vars.outtemp, verify=no) if (iraf.access(Vars.pllist)): iraf.imdelete('@' + Vars.pllist, verify=no) iraf.delete(Vars.pllist, verify=no) iraf.delete(Vars.extlist, verify=no) elif (Vars.nimages > 1): iraf.imrename(Vars.outtemp, Vars.out, verbose=no) iraf.mscextensions(Vars.out, output='file', index='', extname='', extver='', lindex=no, lname=yes, lver=no, ikparams='', Stdout=Vars.extlist) Vars.fd_ext = Vars.extlist while (iraf.fscan(locals(), 'Vars.fd_ext', 'Vars.image') != EOF): Pipe1 = iraf.hselect(Vars.image, 'naxis1,naxis2,crpix1,crpix2', yes, Stdout=1) iraf.scan(locals(), 'Vars.nc', 'Vars.nl', 'Vars.xmin', 'Vars.ymin', Stdin=Pipe1) del Pipe1 Vars.cmin = int(iraf.nint(Vars.crpix1 - Vars.xmin + 1)) Vars.lmin = int(iraf.nint(Vars.crpix2 - Vars.ymin + 1)) Vars.cmax = Vars.nc + Vars.cmin - 1 Vars.lmax = Vars.nl + Vars.lmin - 1 Pipe1 = iraf.printf('[%d:%d,%d:%d]\n', Vars.cmin, Vars.cmax, Vars.lmin, Vars.lmax, Stdout=1) iraf.scan(locals(), 'Vars.str', Stdin=Pipe1) del Pipe1 iraf.hedit(Vars.image, 'DETSEC', Vars.str, add=yes, verify=no, show=no, update=yes) iraf.hedit(Vars.image, 'DTM1_1', 1., add=yes, verify=no, show=no, update=yes) iraf.hedit(Vars.image, 'DTM2_2', 1., add=yes, verify=no, show=no, update=yes) Vars.cmin = Vars.cmin - 1 Vars.lmin = Vars.lmin - 1 iraf.hedit(Vars.image, 'DTV1', Vars.cmin, add=yes, verify=no, show=no, update=yes) iraf.hedit(Vars.image, 'DTV2', Vars.lmin, add=yes, verify=no, show=no, update=yes) iraf.hedit(Vars.image, 'CCDSUM,CCDSEC,AMPSEC,ATM1_1,ATM2_2,ATV1,ATV2', PYdel=yes, add=no, addonly=no, verify=no, show=no, update=yes) Vars.fd_ext = '' iraf.delete(Vars.extlist, verify=no) else: iraf.imrename(Vars.outsec, Vars.out, verbose=no) if (iraf.access(Vars.pllist)): iraf.delete(Vars.pllist, verify=no) Vars.fd_in = '' iraf.delete(Vars.inlists, verify=no) if (Vars.wcssource != 'match' and iraf.imaccess(Vars.wcsref)): iraf.imdelete(Vars.wcsref, verify=no)
def Main( object_names, star_radec_files, ddir_base, adir_base, dates ): """ Using the star coordinates stored in the star_radec_file, searches the input image for the corresponding pixel coordinates. In particular, the input image is typically going to be the first image in a block, to give the IRAF routine an initial starting point, from which it can take over. For this function to work, the WCS information must be stored in the headers of the image being analysed. """ # Make sure the RA-Dec files are where we're expecting them to be: adir_base = adir_base.replace( '~', os.path.expanduser('~') ) # Find paths for the analysis directories divided between dates: if dates=='all': ddirs_dates = glob.glob( '%s/2*_1' % ddir_base ) adirs_dates = [] dates = [] for i in range(len(ddirs_dates)): dates += [os.path.basename( ddirs_dates[i] )[:8]] adir_date = '%s/%s' % (adir_base, dates[i] ) adir_date = adir_date.replace( '//', '/' ) if os.path.isdir( adir_date )==False: os.makedirs( adir_date ) adirs_dates += [adir_date] else: ddirs_dates = [] adirs_dates = [] for date in dates: ddir_date = '%s/%s_1/' % ( ddir_base, date ) ddir_date = ddir_date.replace( '//', '/' ) ddirs_dates += [ ddir_date ] adir_date = '%s/%s' % (adir_base, date) adir_date = adir_date.replace('//','/') if os.path.isdir( adir_date )==False: os.makedirs( adir_date ) adirs_dates += [adir_date] # Now go through each of the nights, work out which targets were observed, and # create the xy-coordinate files: nnights = len( adirs_dates ) for i in range(nnights): ddir_i = ddirs_dates[i] adir_i = adirs_dates[i] print '\n%s' % ('='*50) print '\nDATA DIRECTORY:\n '+ddir_i # Cycle through the different objects, and if one was found to be observed on # the current night, proceed with the analysis; note that the subfolders on a # given night should have been given names taken directly from the 'OBJECT' field # in the fits headers in the script_prepare.py step: nobjects = len(object_names) for j in range(nobjects): print '\n%s' % ('='*50) print '\nTARGET = %s (%s)\n' % (object_names[j],dates[i]) radec_file_path = str( '%s/%s' % ( adir_base, star_radec_files[j] ) ).replace('//','/') if os.path.exists( radec_file_path )==False: pdb.set_trace() print ' - using RA/Dec coordinates in %s ...' % star_radec_files[j] adir_full = str('%s/%s' % (adir_i, object_names[j])).replace('//','/') coords_block = np.loadtxt(radec_file_path, dtype=str) star_names = coords_block[:,0] star_ras = coords_block[:,1] star_decs = coords_block[:,2] nstars = len(star_names) if nstars==0: pdb.set_trace() # this shouldn't happen if script_prep.py has already been run if os.path.isdir(adir_full)==True: image_list = str('%s/images_%s.list' % (adir_full,object_names[j])).replace('//','/') red_image_list = str('%s/red_images_%s.list' % (adir_full,object_names[j])).replace('//','/') try: images = np.loadtxt( image_list, dtype=str ) red_images = np.loadtxt( red_image_list, dtype=str ) except: print '\nCreate the image lists first!' pdb.set_trace() nimages = len(red_images) if nimages==0: continue # Generate a list of output file names to store the pixel coordinates for each star on # the chip for the current target: star_files = [] for star_name in star_names: star_file = str('%s/%s_coords.init' % (adir_full, star_name)).replace('//','/') star_files = star_files+[star_file] # Now that we've found the radec file, we'll go through each of the images # of the current object until we find one that has the target on the chip # (this should be the first image unless there was a pointing error): for k in range(nstars): for l in range(nimages): # Write a temporary file containing the RA/Dec coordinates of the # current star, because this is how IRAF likes it: radec_tempfile = str('%s/temp_coords.radec' % adir_full).replace('//','/') if os.path.isdir( adir_full )==False: print '\n\nGenerating directory for output:\n%s \n\n' % adir_full os.makedirs( adir_full ) tempfile = open(radec_tempfile,'w') tempfile.write('%s %s' % (star_ras[k],star_decs[k])) tempfile.close() # Now use the IRAF param to locate the pixel coordinates: setparams(radec_tempfile, red_images[l], star_files[k]) check_exists = os.path.exists( star_files[k] ) if check_exists==True: os.remove( star_files[k] ) iraf.wcsctran( mode='h', verbose=0 ) # Always remove the temporary file before the next loop: os.remove(radec_tempfile) # Check to see if the star was actually found in the image, and if it # was, break the loop to repeat the process for the next star: h = pyfits.getheader(red_images[l]) naxis1 = h['NAXIS1'] naxis2 = h['NAXIS2'] xy = np.loadtxt( star_files[k] ) star_located = False if (xy[0]>0)*(xy[0]<naxis1)*(xy[1]>0)*(xy[1]<naxis2): if check_exists: print '\n*Overwriting previous...' print ' -->Saved: %s' % (star_files[k]) star_located = True # In the case that the target star (i.e. k==0) was not located on the first image, # create a new image list and red_image list to reflects this: if (k==0)*(l>0)*(star_located==True): # Have not properly tested this block yet: print '\nDid not find target on first image, so updating image lists accordingly...' image_list_unfiltered = str('%s/images_%s_unfiltered.list' % (adir_full,object_names[j])).replace('//','/') shutil.move( image_list, image_list_unfiltered ) red_image_list_unfiltered = str('%s/red_images_%s_unfiltered.list' % (adir_full,object_names[j])).replace('//','/') shutil.move( red_image_list, red_image_list_unfiltered ) np.savetxt( image_list, images[l:] ) np.savetxt( red_image_list, red_images[l:] ) print ' UPDATED: %s' % image_list print ' UPDATED: %s\n' % red_image_list break # Otherwise, remove the output file that was just created by wcsctran, # because it will contain nonsense, and try the next image: else: os.remove(star_files[k]) if l==nimages-1: print '\n (%s not found in any images)' % (star_names[k]) print '\nFinished.\n' return None
iraf.ccmap('tmp.ccmap', 'tmp.ccdb', images=img, fitgeome='rscale', lngunit='degrees', update='yes', interact=False) _z1, _z2, goon = src.display_image(img, 1, _z1, _z2, False) if not goon: src.close_program(logincl) src.delete("tmp.pix3") iraf.wcsctran('tmp.tv', 'tmp.pix3', img, inwcs='world', units='degrees degrees', outwcs='logical', columns='1 2', formats='%10.1f %10.1f') iraf.tvmark(1, 'tmp.pix3', mark="circle", number='yes', label='no', radii=5, nxoffse=5, nyoffse=5, color=205, txsize=2) answ = raw_input(' ok ? [y/n] [y]')
def sn_coordinate(imgl, _interactive): from math import sqrt from snoopy2 import src import snoopy2 from pyraf import iraf import string import os imgl = src.replace_directory(imgl) if imgl[-5:] != '.fits': imgllong = imgl + '.fits' else: imgllong = imgl listastandard = snoopy2.__path__[ 0] + '/standard/fluxstandard/supernovaelist.txt' f = open(listastandard, 'r') liststd = f.readlines() f.close() star, ra, dec = [], [], [] for i in liststd: vector = string.split(i) star.append(vector[0]) #print vector ra.append( float(vector[1]) + ((float(vector[2]) + (float(vector[3]) / 60.)) / 60.)) if float(vector[4]) > 0: dec.append( float(vector[4]) + ((float(vector[5]) + (float(vector[6]) / 60.)) / 60.)) else: aa = -1 * ((abs(float(vector[4]))) + ((float(vector[5]) + (float(vector[6]) / 60.)) / 60.)) dec.append(aa) print ra[-1], dec[-1], star[-1] _telescope = src.telescope(imgllong) _system = src.check_system(_telescope, imgllong, Stdout=True) _header = src.read_parameter(_telescope, _system) if _telescope == 'other': print 'other' _xdimen = src.xdimen(imgllong, _telescope) _ydimen = src.ydimen(imgllong, _telescope) xcenter = int(float(_xdimen) / 2) ycenter = int(float(_ydimen) / 2) f = open('_tmp.tv', 'w') f.write(str(xcenter) + ' ' + str(ycenter) + '\n') f.close() iraf.delete('tmp.coo') iraf.wcsctran('_tmp.tv', 'tmp.coo', imgl, inwcs='logical', units='degrees degrees', outwcs='world', columns='1 2', formats='%10.8f %10.8f') sss = iraf.fields('tmp.coo', '1,2', Stdout=1) _RA, _DEC = string.split(sss[2]) _RA = float(_RA) / 15. _DEC = float(_DEC) else: _RA = src.RA(imgllong, _header, _telescope) _DEC = src.DEC(imgllong, _header, _telescope) print _RA, _DEC ra0 = '' if _RA and _DEC: for st in range(len(star)): distance = sqrt((float(_RA) - float(ra[st]))**2 + (float(_DEC) - float(dec[st]))**2) print st, distance if distance <= 0.5: print str(star[st]), str(_RA), str(_DEC), str(distance) refstar = string.split(star[st])[0] ra0, dec0 = ra[st], dec[st] if _interactive: print '' print '############################################' question = raw_input( 'Is this the right object ? [y/n] [y]') print '############################################' print '' if not question: question = 'y' if question in ['Yes', 'Y', 'y', 'YES', 'yes']: break else: ra0, dec0 = '', '' else: print '############################################' print ' object found ' + str(refstar) print '############################################' break if ra0: os.system('rm -rf tmp.*') ff = open('tmp.tv', 'w') ff.write(str(ra0 * 15.) + ' ' + str(dec0)) ff.close() iraf.wcsctran('tmp.tv', 'tmp.pix', imgl, inwcs='world', units='degrees degrees', outwcs='logical', columns='1 2', formats='%10.1f %10.1f') iraf.tvmark(1, 'tmp.pix', mark="circle", number='yes', radii=10, nxoffse=5, nyoffse=5, color=214, txsize=2) xx, yy = string.split(iraf.fields('tmp.pix', '1,2', Stdout=1)[2]) print xx, yy os.system('rm -rf tmp.*') else: xx, yy = '', '' print '### WARNING: no object in the list' return xx, yy
def ecpsf(img, ofwhm, threshold, psfstars, distance, interactive, ds9, psffun='gauss', fixaperture=False, _catalog='', _datamax=None, show=False): try: import lsc, string hdr = lsc.util.readhdr(img + '.fits') instrument = lsc.util.readkey3(hdr, 'instrume') print 'INSTRUMENT:', instrument if 'PIXSCALE' in hdr: scale = lsc.util.readkey3(hdr, 'PIXSCALE') elif 'CCDSCALE' in hdr: if 'CCDXBIN' in hdr: scale = lsc.util.readkey3(hdr, 'CCDSCALE') * lsc.util.readkey3(hdr, 'CCDXBIN') elif 'CCDSUM' in hdr: scale = lsc.util.readkey3(hdr, 'CCDSCALE') * int(string.split(lsc.util.readkey3(hdr, 'CCDSUM'))[0]) if _datamax is None and 'kb' in instrument: _datamax = 45000 elif _datamax is None: _datamax = 65000 _wcserr = lsc.util.readkey3(hdr, 'wcserr') print _wcserr if float(_wcserr) == 0: if 'L1FWHM' in hdr: seeing = float(lsc.util.readkey3(hdr, 'L1FWHM')) elif 'L1SEEING' in hdr: seeing = float(lsc.util.readkey3(hdr, 'L1SEEING')) * scale else: seeing = 3 else: seeing = 3 if 'PSF_FWHM' in hdr: seeing = float(lsc.util.readkey3(hdr, 'PSF_FWHM')) else: sys.exit('astrometry not good') #except: sys.exit('astrometry not good') fwhm = seeing / scale print 'FWHM[header] ', fwhm, ' in pixel' if ofwhm: fwhm = float(ofwhm) print ' FWHM[input] ', fwhm, ' in pixel' xdim, ydim = iraf.hselect(img+'[0]', 'i_naxis1,i_naxis2', 'yes', Stdout=1)[0].split() print img, fwhm, threshold, scale,xdim ################################################################################# ################### write file to compute psf _psf.coo ############ ################################################################################# if interactive: iraf.display(img, 1, fill=True) iraf.delete('tmp.lo?', verify=False) print '_' * 80 print '>>> Mark reference stars with "a". Then "q"' print '-' * 80 iraf.imexamine(img, 1, wcs='logical', logfile='tmp.log', keeplog=True) xyrefer = iraf.fields('tmp.log', '1,2,6,15', Stdout=1) xns, yns, _fws = [], [], [] ############# write file for PSF ######################### ff = open('_psf.coo', 'w') for i in range(len(xyrefer)): xns.append(float(xyrefer[i].split()[0])) yns.append(float(xyrefer[i].split()[1])) _fws.append(float(xyrefer[i].split()[3])) ff.write('%10.3f %10.3f %7.2f \n' % (xns[i], yns[i], float(_fws[i]))) ff.close() fwhm = np.median(_fws) elif _catalog: print '\n#### use catalog to measure the psf' ddd=iraf.wcsctran(input=_catalog,output='STDOUT',Stdout=1,image=img + '[0]',inwcs='world',outwcs='logical', units='degrees degrees',columns='1 2',formats='%10.1f %10.1f',verbose='no') ddd=[i for i in ddd if i[0]!='#'] ddd=[' '.join(i.split()[0:3]) for i in ddd] line='' for i in ddd: a,b,c = string.split(i) if float(a) < float(xdim) and float(b) < float(ydim) and float(b) > 0: line = line + '%10s %10s %10s \n' % (a, b, c) if line: ff = open('_psf.coo', 'w') ff.write(line) ff.close() else: sys.exit('error: no catalog objects are in the field') else: ############ run sextractor ##################################### xs, ys, ran, decn, magbest, classstar, fluxrad, bkg = runsex(img, fwhm, threshold, scale) tot = np.compress(abs(np.array(fluxrad) * 1.6 - fwhm) / fwhm < .5, fluxrad) if len(tot) < 5: print 'warning: fwhm from sexractor different from fwhm computed during pre-reduction' print 'try using option --fwhm xxx' ff = open('tmp.cursor', 'w') image_hdu = fits.open(img + '.fits') for i in range(len(xs)): _xs = np.delete(xs, i) _ys = np.delete(ys, i) dist2 = np.sqrt((_xs - xs[i]) ** 2 + (_ys - ys[i]) ** 2) ########### cut star, not near other object ########################## if abs(fluxrad[i] * 1.6 - fwhm) / fwhm < .5 and min(dist2) > distance * fwhm: x1, x2 = int(xs[i] - fwhm * 3), int(xs[i] + fwhm * 3) y1, y2 = int(ys[i] - fwhm * 3), int(ys[i] + fwhm * 3) if x1 < 1: x1 = 1 if y1 < 1: y1 = 1 if x2 > int(xdim): x2 = int(xdim) if y2 > int(ydim): y2 = int(ydim) fmax = np.max(image_hdu[0].data[y1-1:y2, x1-1:x2]) ########## cut saturated object ######################## if float(fmax) < _datamax: # not saturated ff.write('%10.3f %10.3f 1 m \n' % (xs[i], ys[i])) ff.close() image_hdu.close() iraf.delete('tmp.lo?,tmp.sta?,tmp.gk?', verify=False) iraf.psfmeasure(img+'[0]', imagecur='tmp.cursor', logfile='tmp.log', radius=int(fwhm), iter=3, display=False, StdoutG='tmp.gki') ff = open('tmp.log') righe = ff.readlines() xn = [float(righe[3].split()[1])] yn = [float(righe[3].split()[2])] _fw = [float(righe[3].split()[4])] for r in righe[4:-2]: if len(r) > 0: xn.append(float(r.split()[0])) yn.append(float(r.split()[1])) _fw.append(float(r.split()[3])) print 'FWHM: ', righe[-1].split()[-1] print 80 * "#" ###### ############## eliminate double object identification ########################### xns, yns, _fws = [xn[0]], [yn[0]], [_fw[0]] for i in range(1, len(xn)): if abs(xn[i] - xn[i - 1]) > .2 and abs(yn[i] - yn[i - 1]) > .2: xns.append(xn[i]) yns.append(yn[i]) _fws.append(_fw[i]) ######### write clean file for PSF ######################### fw = [] ff = open('_psf.coo', 'w') for i in range(len(xns)): if abs(_fws[i] - fwhm) / fwhm < .3: ff.write('%10.3f %10.3f %7.2f \n' % (xns[i], yns[i], float(_fws[i]))) fw.append(_fws[i]) ff.close() ## End automatic selection ###################################################################################### ################### write file of object to store in fits table ############# ###################################################################################### if interactive: xs, ys, ran, decn, magbest, classstar, fluxrad, bkg = runsex(img, fwhm, threshold, scale) ff = open('_psf2.coo', 'w') for i in range(len(xs)): ff.write('%10s %10s %10s \n' % (xs[i], ys[i], fluxrad[i])) ff.close() elif _catalog: ddd=iraf.wcsctran(input=_catalog,output='STDOUT',Stdout=1,image=img + '[0]',inwcs='world',outwcs='logical', units='degrees degrees',columns='1 2',formats='%10.1f %10.1f',verbose='no') ddd=[i for i in ddd if i[0]!='#'] ddd=[' '.join(i.split()[0:3]) for i in ddd] ff = open('_psf2.coo', 'w') for i in ddd: a,b,c = string.split(i) ff.write('%10s %10s %10s \n' % (a, b, c)) ff.close() else: os.system('cp _psf.coo _psf2.coo') # dflux = fluxrad - np.median(fluxrad) # fstar = np.compress(dflux < np.std(fluxrad), fluxrad) ################################################################################################################# print 80 * "#" photmag, pst, fitmag = psffit(img, fwhm, psfstars, hdr, interactive, _datamax, psffun, fixaperture) photmag2, fitmag2 = psffit2(img, fwhm, psfstars, hdr, _datamax, psffun, fixaperture) radec = iraf.wcsctran(input='STDIN', output='STDOUT', Stdin=photmag, Stdout=1, image=img + '[0]', inwcs='logical', outwcs='world', columns="1 2", format='%13.3H %12.2h', min_sig=9, mode='h')[3:] radec2 = iraf.wcsctran(input='STDIN', output='STDOUT', Stdin=photmag2, Stdout=1, image=img + '[0]', inwcs='logical', outwcs='world', columns="1 2", format='%13.3H %12.2h', min_sig=9, mode='h')[3:] if ds9 == 0 and (interactive or show): iraf.set(stdimage='imt1024') iraf.display(img, 1, fill=True, Stdout=1) iraf.tvmark(1, coords='STDIN', mark='circle', radii=15, label=True, Stdin=photmag, nxoffset=5, nyoffset=5, txsize=2) iraf.tvmark(1, coords='STDIN', mark='circle', radii=35, label=False, Stdin=pst, color=208) # iraf.tvmark(1, coords='STDIN', mark='cross', length=35, label=False, Stdin=fitmag2, color=204) idpsf = [] for i in range(len(pst)): idpsf.append(pst[i].split()[2]) dmag = [] for i in range(len(radec)): ra, dec, idph, magp2, magp3, magp4, merrp2, merrp3, merrp4 = radec[i].split() dmag.append(9.99) for j in range(len(fitmag)): raf, decf, idf, magf, magerrf = fitmag[j].split() if idph == idf and idph in idpsf and \ magp3 != 'INDEF' and magf != 'INDEF': dmag[i] = float(magp3) - float(magf) break _dmag = np.compress(np.array(dmag) < 9.99, np.array(dmag)) print '>>> Aperture correction (phot) %6.3f +/- %5.3f %3d ' % \ (np.mean(_dmag), np.std(_dmag), len(_dmag)) if len(_dmag) > 3: _dmag = np.compress(np.abs(_dmag - np.median(_dmag)) < 2 * np.std(_dmag), _dmag) print '>>> 2 sigma rejection) %6.3f +/- %5.3f %3d [default]' \ % (np.mean(_dmag), np.std(_dmag), len(_dmag)) print '>>> fwhm %s ' % (str(fwhm)) for i in range(len(dmag)): if dmag[i] == 9.99: dmag[i] = '' else: dmag[i] = '%6.3f' % (dmag[i]) exptime = lsc.util.readkey3(hdr, 'exptime') object = lsc.util.readkey3(hdr, 'object').replace(' ', '') filtro = lsc.util.readkey3(hdr, 'filter') ####################################### rap, decp, magp2, magp3, magp4, smagf, merrp3, smagerrf = [], [], [], [], [], [], [], [] rap0, decp0 = [], [] for i in range(len(radec2)): aa = radec2[i].split() rap.append(aa[0]) decp.append(aa[1]) rap0.append(lsc.lscabsphotdef.deg2HMS(ra=aa[0])) decp0.append(lsc.lscabsphotdef.deg2HMS(dec=aa[1])) idp = aa[2] magp2.append(aa[3]) magp3.append(aa[4]) magp4.append(aa[5]) merrp3.append(aa[7]) _smagf, _smagerrf = 9999, 9999 for j in range(len(fitmag2)): raf, decf, idf, magf, magerrf = fitmag2[j].split() if idf == idp: _smagf = magf _smagerrf = magerrf break smagf.append(_smagf) smagerrf.append(_smagerrf) tbhdu = fits.BinTableHDU.from_columns(fits.ColDefs([fits.Column(name='ra', format='20A', array=np.array(rap)), fits.Column(name='dec', format='20A', array=np.array(decp)), fits.Column(name='ra0', format='E', array=np.array(rap0)), fits.Column(name='dec0', format='E', array=np.array(decp0)), fits.Column(name='magp2', format='E', array=np.array(np.where((np.array(magp2) != 'INDEF'), np.array(magp2), 9999), float)), fits.Column(name='magp3', format='E', array=np.array(np.where((np.array(magp3) != 'INDEF'), np.array(magp3), 9999), float)), fits.Column(name='merrp3', format='E', array=np.array(np.where((np.array(merrp3) != 'INDEF'), np.array(merrp3), 9999), float)), fits.Column(name='magp4', format='E', array=np.array(np.where((np.array(magp4) != 'INDEF'), np.array(magp4), 9999), float)), fits.Column(name='smagf', format='E', array=np.array(np.where((np.array(smagf) != 'INDEF'), np.array(smagf), 9999), float)), fits.Column(name='smagerrf', format='E', array=np.array(np.where((np.array(smagerrf) != 'INDEF'), np.array(smagerrf), 9999), float)), ])) hdu = fits.PrimaryHDU(header=hdr) thdulist = fits.HDUList([hdu, tbhdu]) lsc.util.delete(img + '.sn2.fits') thdulist.writeto(img + '.sn2.fits') lsc.util.updateheader(img + '.sn2.fits', 0, {'APCO': [np.mean(_dmag), 'Aperture correction']}) lsc.util.updateheader(img + '.sn2.fits', 0, {'APCOERR': [np.std(_dmag), 'Aperture correction error']}) lsc.util.updateheader(img + '.sn2.fits', 0, {'XDIM': [lsc.util.readkey3(hdr, 'naxis1'), 'x number of pixels']}) lsc.util.updateheader(img + '.sn2.fits', 0, {'YDIM': [lsc.util.readkey3(hdr, 'naxis2'), 'y number of pixels']}) lsc.util.updateheader(img + '.sn2.fits', 0, {'PSF_FWHM': [fwhm * scale, 'FWHM (arcsec) - computed with daophot']}) os.chmod(img + '.sn2.fits', 0664) os.chmod(img + '.psf.fits', 0664) result = 1 except: result = 0 fwhm = 0.0 traceback.print_exc() return result, fwhm * scale
def mscimage(input=None, output=None, format='image', pixmask=no,verbose=')_.verbose',wcssource='image',reference='',ra=INDEF,dec=INDEF,scale=INDEF,rotation=INDEF,blank=0.0,interpolant='poly5',minterpolant='linear',boundary='reflect',constant=0.0,fluxconserve=no,ntrim=8,nxblock=INDEF,nyblock=INDEF,interactive=no,nx=10,ny=20,fitgeometry='general',xxorder=4,xyorder=4,xxterms='half',yxorder=4,yyorder=4,yxterms='half',fd_in='',fd_ext='',fd_coord='',mode='ql',DOLLARnargs=0,taskObj=None): Vars = IrafParList('mscimage') Vars.addParam(makeIrafPar(input, datatype='string', name='input', mode='a',prompt='List of input mosaic exposures')) Vars.addParam(makeIrafPar(output, datatype='string', name='output',mode='a',prompt='List of output images')) Vars.addParam(makeIrafPar(format, datatype='string', name='format',enum=['image', 'mef'],mode='h',prompt='Output format (image|mef)')) Vars.addParam(makeIrafPar(pixmask, datatype='bool', name='pixmask',mode='h',prompt='Create pixel mask?')) Vars.addParam(makeIrafPar(verbose, datatype='bool', name='verbose',mode='h',prompt='Verbose output?\n\n# Output WCS parameters')) Vars.addParam(makeIrafPar(wcssource, datatype='string', name='wcssource',enum=['image', 'parameters', 'match'],mode='h',prompt='Output WCS source (image|parameters|match)')) Vars.addParam(makeIrafPar(reference, datatype='file', name='reference',mode='h',prompt='Reference image')) Vars.addParam(makeIrafPar(ra, datatype='real', name='ra', max=24.0,min=0.0,mode='h',prompt='RA of tangent point (hours)')) Vars.addParam(makeIrafPar(dec, datatype='real', name='dec', max=90.0,min=-90.0,mode='h',prompt='DEC of tangent point (degrees)')) Vars.addParam(makeIrafPar(scale, datatype='real', name='scale', mode='h',prompt='Scale (arcsec/pixel)')) Vars.addParam(makeIrafPar(rotation, datatype='real', name='rotation',max=360.0,min=-360.0,mode='h',prompt='Rotation of DEC from N to E (degrees)\n\n# Resampling parmeters')) Vars.addParam(makeIrafPar(blank, datatype='real', name='blank', mode='h',prompt='Blank value')) Vars.addParam(makeIrafPar(interpolant, datatype='string',name='interpolant',mode='h',prompt='Interpolant for data')) Vars.addParam(makeIrafPar(minterpolant, datatype='string',name='minterpolant',mode='h',prompt='Interpolant for mask')) Vars.addParam(makeIrafPar(boundary, datatype='string', name='boundary',enum=['nearest', 'constant', 'reflect', 'wrap'],mode='h',prompt='Boundary extension')) Vars.addParam(makeIrafPar(constant, datatype='real', name='constant',mode='h',prompt='Constant boundary extension value')) Vars.addParam(makeIrafPar(fluxconserve, datatype='bool',name='fluxconserve',mode='h',prompt='Preserve flux per unit area?')) Vars.addParam(makeIrafPar(ntrim, datatype='int', name='ntrim', min=0,mode='h',prompt='Edge trim in each extension')) Vars.addParam(makeIrafPar(nxblock, datatype='int', name='nxblock',mode='h',prompt='X dimension of working block size in pixels')) Vars.addParam(makeIrafPar(nyblock, datatype='int', name='nyblock',mode='h',prompt='Y dimension of working block size in pixels\n\n# Geometric mapping parameters')) Vars.addParam(makeIrafPar(interactive, datatype='bool', name='interactive',mode='h',prompt='Fit mapping interactively?')) Vars.addParam(makeIrafPar(nx, datatype='int', name='nx', mode='h',prompt='Number of x grid points')) Vars.addParam(makeIrafPar(ny, datatype='int', name='ny', mode='h',prompt='Number of y grid points')) Vars.addParam(makeIrafPar(fitgeometry, datatype='string',name='fitgeometry',enum=['shift', 'xyscale', 'rotate', 'rscale', 'rxyscale', 'general'],mode='h',prompt='Fitting geometry')) Vars.addParam(makeIrafPar(xxorder, datatype='int', name='xxorder', min=2,mode='h',prompt='Order of x fit in x')) Vars.addParam(makeIrafPar(xyorder, datatype='int', name='xyorder', min=2,mode='h',prompt='Order of x fit in y')) Vars.addParam(makeIrafPar(xxterms, datatype='string', name='xxterms',mode='h',prompt='X fit cross terms type')) Vars.addParam(makeIrafPar(yxorder, datatype='int', name='yxorder', min=2,mode='h',prompt='Order of y fit in x')) Vars.addParam(makeIrafPar(yyorder, datatype='int', name='yyorder', min=2,mode='h',prompt='Order of y fit in y')) Vars.addParam(makeIrafPar(yxterms, datatype='string', name='yxterms',mode='h',prompt='Y fit cross terms type\n\n')) Vars.addParam(makeIrafPar(fd_in, datatype='struct', name='fd_in',list_flag=1,mode='h',prompt='')) Vars.addParam(makeIrafPar(fd_ext, datatype='struct', name='fd_ext',list_flag=1,mode='h',prompt='')) Vars.addParam(makeIrafPar(fd_coord, datatype='struct', name='fd_coord',list_flag=1,mode='h',prompt='')) Vars.addParam(makeIrafPar(mode, datatype='string', name='mode', mode='h',prompt='')) Vars.addParam(makeIrafPar(DOLLARnargs, datatype='int', name='$nargs',mode='h')) Vars.addParam(makeIrafPar(None, datatype='file', name='in', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='out', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='ref', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='pl', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='image', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='trimsec', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='outsec', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='plsec', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='inlists', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='extlist', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='pllist', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='coord', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='db', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='wcsref', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='outtemp', mode='u')) Vars.addParam(makeIrafPar(None, datatype='file', name='pltemp', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='nc', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='nl', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='ncref', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='nlref', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='cmin', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='cmax', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='lmin', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='lmax', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='nimage', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='nimages', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='nxblk', mode='u')) Vars.addParam(makeIrafPar(None, datatype='int', name='nyblk', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='x', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='y', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='rval', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='xmin', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='xmax', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='ymin', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='ymax', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='crpix1', mode='u')) Vars.addParam(makeIrafPar(None, datatype='real', name='crpix2', mode='u')) Vars.addParam(makeIrafPar(None, datatype='string', name='extname',mode='u')) Vars.addParam(makeIrafPar(None, datatype='string', name='str', mode='u')) iraf.cache('mscextensions', 'mscgmask') Vars.inlists = iraf.mktemp('tmp$iraf') Vars.extlist = iraf.mktemp('tmp$iraf') Vars.pllist = iraf.mktemp('tmp$iraf') Vars.coord = iraf.mktemp('tmp$iraf') Vars.db = iraf.mktemp('tmp$iraf') Vars.outtemp = iraf.mktemp('tmp') Vars.wcsref = iraf.mktemp('tmp') Vars.pltemp = iraf.mktemp('tmp') iraf.joinlists(Vars.input, Vars.output, output = Vars.inlists, delim = ' ',short=yes,type = 'image') Vars.fd_in = Vars.inlists while (iraf.fscan(locals(), 'Vars.fd_in', 'Vars.PYin', 'Vars.out') != EOF): if (iraf.imaccess(Vars.out)): iraf.printf('Warning: Image already exists (%s)\n', Vars.out) continue if (Vars.pixmask): Vars.pl = Vars.out Vars.nc = iraf.strlen(Vars.pl) if (Vars.nc > 5 and iraf.substr(Vars.pl, Vars.nc - 4, Vars.nc) == '.fits'): Vars.pl = iraf.substr(Vars.pl, 1, Vars.nc - 5) elif (Vars.nc > 4 and iraf.substr(Vars.out, Vars.nc - 3, Vars.nc) == '.imh'): Vars.pl = iraf.substr(Vars.pl, 1, Vars.nc - 4) Vars.pl = Vars.pl + '_bpm' if (Vars.format == 'image' and iraf.imaccess(Vars.pl)): iraf.printf('Warning: Mask already exists (%s)\n', Vars.pl) continue else: Vars.pl = '' iraf.mscextensions(Vars.PYin, output = 'file', index = '0-',extname = '',extver = '',lindex = no,lname = yes,lver = no,ikparams = '',Stdout=Vars.extlist) Vars.nimages = int(iraf.mscextensions.nimages) Vars.nimage = 0 if (Vars.nimages < 1): iraf.printf("WARNING: No input image data found in `%s'.\ ",Vars.PYin) iraf.delete(Vars.extlist, verify = no) continue if (not iraf.imaccess(Vars.wcsref)): Vars.ref = Vars.reference if (Vars.wcssource == 'match'): Vars.wcsref = Vars.ref else: iraf.mscwtemplate('@' + Vars.extlist, Vars.wcsref,wcssource = Vars.wcssource,reference = Vars.ref,ra = Vars.ra,dec = Vars.dec,scale = Vars.scale,rotation = Vars.rotation,projection = '',verbose = Vars.verbose) Vars.fd_ext = Vars.extlist while (iraf.fscan(locals(), 'Vars.fd_ext', 'Vars.image') != EOF): Vars.nimage = Vars.nimage + 1 if (Vars.nimages > 1): Pipe1 = iraf.hselect(Vars.image, 'extname', yes, Stdout=1) iraf.scan(locals(), 'Vars.extname', Stdin=Pipe1) del Pipe1 if (iraf.nscan() == 0): Vars.extname = 'im' + str(Vars.nimage) Pipe1 = iraf.printf('%s[%s,append]\n', Vars.outtemp,Vars.extname,Stdout=1) iraf.scan(locals(), 'Vars.outsec', Stdin=Pipe1) del Pipe1 Pipe1 = iraf.printf('%s%s\n', Vars.pl, Vars.extname, Stdout=1) iraf.scan(locals(), 'Vars.plsec', Stdin=Pipe1) del Pipe1 else: Vars.extname = '' Vars.outsec = Vars.outtemp Vars.plsec = Vars.pl if (Vars.pixmask and iraf.imaccess(Vars.plsec)): iraf.delete(Vars.coord, verify = no) iraf.delete(Vars.db, verify = no) iraf.printf('Warning: Mask already exists (%s)\n', Vars.plsec) continue if (Vars.verbose): iraf.printf('Resampling %s ...\n', Vars.image) Pipe1 = iraf.hselect(Vars.image, 'naxis1,naxis2', yes, Stdout=1) iraf.scan(locals(), 'Vars.nc', 'Vars.nl', Stdin=Pipe1) del Pipe1 Vars.cmin = 1 + Vars.ntrim Vars.cmax = Vars.nc - Vars.ntrim Vars.lmin = 1 + Vars.ntrim Vars.lmax = Vars.nl - Vars.ntrim Pipe1 = iraf.printf('[%d:%d,%d:%d]\n', Vars.cmin, Vars.cmax,Vars.lmin,Vars.lmax,Stdout=1) iraf.scan(locals(), 'Vars.trimsec', Stdin=Pipe1) del Pipe1 if (Vars.wcssource == 'match'): Pipe1 = iraf.hselect(Vars.ref, 'naxis1,naxis2', yes, Stdout=1) iraf.scan(locals(), 'Vars.ncref', 'Vars.nlref', Stdin=Pipe1) del Pipe1 Vars.xmin = (Vars.ncref - 1.) / (Vars.nx - 1.) Vars.ymin = (Vars.nlref - 1.) / (Vars.ny - 1.) Vars.ymax = 1 while (Vars.ymax <= Vars.nlref + 1): Vars.xmax = 1 while (Vars.xmax <= Vars.ncref + 1): iraf.clPrint(Vars.xmax, Vars.ymax, Vars.xmax,Vars.ymax,StdoutAppend=Vars.coord) Vars.xmax = Vars.xmax + Vars.xmin Vars.ymax = Vars.ymax + Vars.ymin iraf.mscctran(Vars.coord, Vars.db, Vars.ref, 'logical','world',columns = '3 4',units = '',formats = '%.4H %.3h',min_sigdigit = 10,verbose = no) iraf.delete(Vars.coord, verify=no) iraf.wcsctran(Vars.db, Vars.coord, Vars.image + Vars.trimsec,inwcs = 'world',outwcs = 'logical',columns = '3 4',units = 'hours native',formats = '',min_sigdigit = 10,verbose = no) iraf.delete(Vars.db, verify=no) else: Vars.nc = Vars.cmax - Vars.cmin + 1 Vars.nl = Vars.lmax - Vars.lmin + 1 Vars.xmin = (Vars.nc - 1.) / (Vars.nx - 1.) Vars.ymin = (Vars.nl - 1.) / (Vars.ny - 1.) Vars.ymax = 1 while (Vars.ymax <= Vars.nl + 1): Vars.xmax = 1 while (Vars.xmax <= Vars.nc + 1): iraf.clPrint(Vars.xmax, Vars.ymax, Vars.xmax,Vars.ymax,StdoutAppend=Vars.coord) Vars.xmax = Vars.xmax + Vars.xmin Vars.ymax = Vars.ymax + Vars.ymin iraf.mscctran(Vars.coord, Vars.db, Vars.image + Vars.trimsec,'logical','world',columns = '1 2',units = '',formats = '%.4H %.3h',min_sigdigit = 10,verbose = no) iraf.delete(Vars.coord, verify=no) iraf.wcsctran(Vars.db, Vars.coord, Vars.wcsref,inwcs = 'world',outwcs = 'logical',columns = '1 2',units = 'hours native',formats = '',min_sigdigit = 10,verbose = no) iraf.delete(Vars.db, verify=no) Vars.xmax = 0. Vars.xmin = 1. Vars.ymax = 0. Vars.ymin = 1. Vars.fd_coord = Vars.coord while (iraf.fscan(locals(), 'Vars.fd_coord', 'Vars.x', 'Vars.y') != EOF): if (iraf.nscan() < 2): continue if (Vars.xmax < Vars.xmin): Vars.xmin = Vars.x Vars.xmax = Vars.x Vars.ymin = Vars.y Vars.ymax = Vars.y else: Vars.xmin = float(iraf.minimum(Vars.x, Vars.xmin)) Vars.xmax = float(iraf.maximum(Vars.x, Vars.xmax)) Vars.ymin = float(iraf.minimum(Vars.y, Vars.ymin)) Vars.ymax = float(iraf.maximum(Vars.y, Vars.ymax)) Vars.fd_coord = '' if (Vars.xmax <= Vars.xmin or Vars.ymax <= Vars.ymin): iraf.error(1, 'No overlap for matching reference') Vars.cmin = int(iraf.nint(Vars.xmin - 1.5)) Vars.cmax = int(iraf.nint(Vars.xmax + 1.5)) Vars.lmin = int(iraf.nint(Vars.ymin - 1.5)) Vars.lmax = int(iraf.nint(Vars.ymax + 1.5)) iraf.geomap(Vars.coord, Vars.db, Vars.cmin, Vars.cmax, Vars.lmin,Vars.lmax,transforms = '',results = '',fitgeometry = Vars.fitgeometry,function = 'chebyshev',xxorder = Vars.xxorder,xyorder = Vars.xyorder,xxterms = Vars.xxterms,yxorder = Vars.yxorder,yyorder = Vars.yyorder,yxterms = Vars.yxterms,reject = INDEF,calctype = 'double',verbose = no,interactive = Vars.interactive,graphics = 'stdgraph',cursor = '') if (Vars.wcssource == 'match'): Vars.cmin = 1 Vars.lmin = 1 Vars.cmax = Vars.ncref Vars.lmax = Vars.nlref if (Vars.nxblock == INDEF): Vars.nxblk = Vars.cmax - Vars.cmin + 3 else: Vars.nxblk = Vars.nxblock if (Vars.nyblock == INDEF): Vars.nyblk = Vars.lmax - Vars.lmin + 3 else: Vars.nyblk = Vars.nyblock iraf.geotran(Vars.image + Vars.trimsec, Vars.outsec, Vars.db,Vars.coord,geometry = 'geometric',xin = INDEF,yin = INDEF,xshift = INDEF,yshift = INDEF,xout = INDEF,yout = INDEF,xmag = INDEF,ymag = INDEF,xrotation = INDEF,yrotation = INDEF,xmin = Vars.cmin,xmax = Vars.cmax,ymin = Vars.lmin,ymax = Vars.lmax,xsample = 10.,ysample = 10.,xscale = 1.,yscale = 1.,ncols = INDEF,nlines = INDEF,interpolant = Vars.interpolant,boundary = 'constant',constant = Vars.constant,fluxconserve = Vars.fluxconserve,nxblock = Vars.nxblk,nyblock = Vars.nyblk,verbose = no) iraf.wcscopy(Vars.outsec, Vars.wcsref, verbose=no) Vars.xmin = 0. Vars.ymin = 0. Pipe1 = iraf.hselect(Vars.outsec, 'crpix1,crpix2', yes, Stdout=1) iraf.scan(locals(), 'Vars.xmin', 'Vars.ymin', Stdin=Pipe1) del Pipe1 Vars.xmin = Vars.xmin - Vars.cmin + 1 Vars.ymin = Vars.ymin - Vars.lmin + 1 if (Vars.nimage == 1): Vars.crpix1 = Vars.xmin Vars.crpix2 = Vars.ymin else: Vars.crpix1 = float(iraf.maximum(Vars.crpix1, Vars.xmin)) Vars.crpix2 = float(iraf.maximum(Vars.crpix2, Vars.ymin)) iraf.hedit(Vars.outsec, 'crpix1', Vars.xmin, add=yes, verify=no,show=no,update=yes) iraf.hedit(Vars.outsec, 'crpix2', Vars.ymin, add=yes, verify=no,show=no,update=yes) if (Vars.pixmask): Pipe1 = iraf.printf('%s%s\n', Vars.pl, Vars.extname, Stdout=1) iraf.scan(locals(), 'Vars.plsec', Stdin=Pipe1) del Pipe1 iraf.mscgmask(Vars.image + Vars.trimsec, Vars.pltemp + '.pl','BPM',mval = 10000) iraf.geotran(Vars.pltemp, Vars.plsec + '.fits', Vars.db,Vars.coord,geometry = 'geometric',xin = INDEF,yin = INDEF,xshift = INDEF,yshift = INDEF,xout = INDEF,yout = INDEF,xmag = INDEF,ymag = INDEF,xrotation = INDEF,yrotation = INDEF,xmin = Vars.cmin,xmax = Vars.cmax,ymin = Vars.lmin,ymax = Vars.lmax,xsample = 10.,ysample = 10.,interpolant = Vars.minterpolant,boundary = 'constant',constant = 20000.,fluxconserve = no,nxblock = Vars.nxblk,nyblock = Vars.nyblk,verbose = no) iraf.imdelete(Vars.pltemp, verify=no) iraf.mscpmask(Vars.plsec + '.fits', Vars.plsec + '.pl') iraf.imdelete(Vars.plsec + '.fits', verify=no) iraf.hedit(Vars.outsec, 'BPM', Vars.plsec + '.pl', add=yes,show=no,verify=no,update=yes) iraf.wcscopy(Vars.plsec, Vars.outsec, verbose=no) iraf.clPrint(Vars.plsec, StdoutAppend=Vars.pllist) else: iraf.hedit(Vars.outsec, 'BPM', PYdel=yes, add=no, addonly=no,show=no,verify=no,update=yes) iraf.delete(Vars.coord, verify = no) iraf.delete(Vars.db, verify = no) Vars.fd_ext = '' iraf.delete(Vars.extlist, verify = no) if (Vars.nimages > 1 and Vars.format == 'image'): if (Vars.verbose): iraf.printf('Creating image %s ...\n', Vars.out) iraf.mscextensions(Vars.outtemp, output = 'file', index = '',extname = '',extver = '',lindex = no,lname = yes,lver = no,ikparams = '',Stdout=Vars.extlist) if (Vars.pixmask): iraf.combine('@' + Vars.pllist, Vars.pltemp + '.pl',headers = '',bpmasks = Vars.pl,rejmasks = '',nrejmasks = '',expmasks = '',sigmas = '',imcmb = '',ccdtype = '',amps = no,subsets = no,delete = no,combine = 'average',reject = 'none',project = no,outtype = 'real',outlimits = '',offsets = 'wcs',masktype = 'none',maskvalue = '0',blank = 0.,scale = 'none',zero = 'none',weight = 'none',statsec = '',lthreshold = INDEF,hthreshold = 0.99,nlow = 1,nhigh = 1,nkeep = 1,mclip = yes,lsigma = 3.,hsigma = 3.,rdnoise = '0.',gain = '1.',snoise = '0.',sigscale = 0.1,pclip = - 0.5,grow = 0.,Stdout='dev$null') iraf.imdelete(Vars.pltemp, verify=no) iraf.combine('@' + Vars.extlist, Vars.out, headers = '',bpmasks = '',rejmasks = '',nrejmasks = '',expmasks = '',sigmas = '',imcmb = '',ccdtype = '',amps = no,subsets = no,delete = no,combine = 'average',reject = 'none',project = no,outtype = 'real',outlimits = '',offsets = 'wcs',masktype = 'badvalue',maskvalue = '2',blank = 0.,scale = 'none',zero = 'none',weight = 'none',statsec = '',lthreshold = INDEF,hthreshold = INDEF,nlow = 1,nhigh = 1,nkeep = 1,mclip = yes,lsigma = 3.,hsigma = 3.,rdnoise = '0.',gain = '1.',snoise = '0.',sigscale = 0.1,pclip = - 0.5,grow = 0.,Stdout='dev$null') iraf.hedit(Vars.out, 'BPM', Vars.pl, add=yes, verify=no,show=no,update=yes) iraf.hedit(Vars.pl, 'IMCMB???,PROCID??', add=no, addonly=no,PYdel=yes,update=yes,verify=no,show=no) else: iraf.combine('@' + Vars.extlist, Vars.out, headers = '',bpmasks = '',rejmasks = '',nrejmasks = '',expmasks = '',sigmas = '',imcmb = '',ccdtype = '',amps = no,subsets = no,delete = no,combine = 'average',reject = 'none',project = no,outtype = 'real',outlimits = '',offsets = 'wcs',masktype = 'none',maskvalue = '2',blank = 0.,scale = 'none',zero = 'none',weight = 'none',statsec = '',lthreshold = INDEF,hthreshold = INDEF,nlow = 1,nhigh = 1,nkeep = 1,mclip = yes,lsigma = 3.,hsigma = 3.,rdnoise = '0.',gain = '1.',snoise = '0.',sigscale = 0.1,pclip = - 0.5,grow = 0.,Stdout='dev$null') Pipe2 = iraf.hselect('@' + Vars.extlist, 'gain', yes, Stdout=1) Pipe1 = iraf.average(data_value = 0., Stdin=Pipe2, Stdout=1) del Pipe2 iraf.scan(locals(), 'Vars.rval', Stdin=Pipe1) del Pipe1 iraf.hedit(Vars.out, 'gain', Vars.rval, add=yes, PYdel=no,update=yes,verify=no,show=no) Pipe2 = iraf.hselect('@' + Vars.extlist, 'rdnoise', yes, Stdout=1) Pipe1 = iraf.average(data_value = 0., Stdin=Pipe2, Stdout=1) del Pipe2 iraf.scan(locals(), 'Vars.rval', Stdin=Pipe1) del Pipe1 iraf.hedit(Vars.out, 'rdnoise', Vars.rval, add=yes, PYdel=no,update=yes,verify=no,show=no) iraf.hedit(Vars.out, 'IMCMB???,PROCID??', add=no, addonly=no,PYdel=yes,update=yes,verify=no,show=no) iraf.hedit(Vars.out,'NEXTEND,DETSEC,CCDSEC,AMPSEC,IMAGEID,DATASEC,TRIMSEC,BIASSEC',add=no,addonly=no,PYdel=yes,update=yes,verify=no,show=no) iraf.imdelete(Vars.outtemp, verify=no) if (iraf.access(Vars.pllist)): iraf.imdelete('@' + Vars.pllist, verify=no) iraf.delete(Vars.pllist, verify=no) iraf.delete(Vars.extlist, verify = no) elif (Vars.nimages > 1): iraf.imrename(Vars.outtemp, Vars.out, verbose=no) iraf.mscextensions(Vars.out, output = 'file', index = '',extname = '',extver = '',lindex = no,lname = yes,lver = no,ikparams = '',Stdout=Vars.extlist) Vars.fd_ext = Vars.extlist while (iraf.fscan(locals(), 'Vars.fd_ext', 'Vars.image') != EOF): Pipe1 = iraf.hselect(Vars.image, 'naxis1,naxis2,crpix1,crpix2',yes,Stdout=1) iraf.scan(locals(), 'Vars.nc', 'Vars.nl', 'Vars.xmin','Vars.ymin',Stdin=Pipe1) del Pipe1 Vars.cmin = int(iraf.nint(Vars.crpix1 - Vars.xmin + 1)) Vars.lmin = int(iraf.nint(Vars.crpix2 - Vars.ymin + 1)) Vars.cmax = Vars.nc + Vars.cmin - 1 Vars.lmax = Vars.nl + Vars.lmin - 1 Pipe1 = iraf.printf('[%d:%d,%d:%d]\n', Vars.cmin, Vars.cmax,Vars.lmin,Vars.lmax,Stdout=1) iraf.scan(locals(), 'Vars.str', Stdin=Pipe1) del Pipe1 iraf.hedit(Vars.image, 'DETSEC', Vars.str, add=yes, verify=no,show=no,update=yes) iraf.hedit(Vars.image, 'DTM1_1', 1., add=yes, verify=no,show=no,update=yes) iraf.hedit(Vars.image, 'DTM2_2', 1., add=yes, verify=no,show=no,update=yes) Vars.cmin = Vars.cmin - 1 Vars.lmin = Vars.lmin - 1 iraf.hedit(Vars.image, 'DTV1', Vars.cmin, add=yes, verify=no,show=no,update=yes) iraf.hedit(Vars.image, 'DTV2', Vars.lmin, add=yes, verify=no,show=no,update=yes) iraf.hedit(Vars.image,'CCDSUM,CCDSEC,AMPSEC,ATM1_1,ATM2_2,ATV1,ATV2',PYdel=yes,add=no,addonly=no,verify=no,show=no,update=yes) Vars.fd_ext = '' iraf.delete(Vars.extlist, verify=no) else: iraf.imrename(Vars.outsec, Vars.out, verbose=no) if (iraf.access(Vars.pllist)): iraf.delete(Vars.pllist, verify=no) Vars.fd_in = '' iraf.delete(Vars.inlists, verify = no) if (Vars.wcssource != 'match' and iraf.imaccess(Vars.wcsref)): iraf.imdelete(Vars.wcsref, verify=no)
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'
if len(aa) > 0: rasn = aa[0]['ra_sn'] decsn = aa[0]['dec_sn'] else: rasn = '' decsn = '' if rasn and decsn: from pyraf import iraf iraf.astcat(_doprint=0) iraf.imcoords(_doprint=0) iraf.digiphot(_doprint=0) iraf.daophot(_doprint=0) lll = [str(rasn) + ' ' + str(decsn)] sss = iraf.wcsctran('STDIN', 'STDOUT', re.sub('sn2.','',img)+'[0]', Stdin=lll, inwcs='world', units='degrees degrees', outwcs='logical', columns='1 2', formats='%10.1f %10.1f', Stdout=1) if _verbose: iraf.display(re.sub('sn2.','',img)+'[0]',fill='yes',frame=1) iraf.tvmark(1, 'STDIN', Stdin = list(sss) ,mark = "circle" , number = 'yes' ,label = 'no' , radii = 10, nxoffse = 5, nyoffse = 5, color = 204, txsize = 2) if 'diff' in img: diffimg = re.sub('diff.sn2.','',img) iraf.display(diffimg+'[0]',fill='yes',frame=2) iraf.tvmark(2, 'STDIN', Stdin = list(sss) ,mark = "circle" , number = 'yes' ,label = 'no' , radii = 10, nxoffse = 5, nyoffse = 5, color = 204, txsize = 2) _gain = agnkey.util.readkey3(hdr, 'gain') _ron = agnkey.util.readkey3(hdr, 'ron') _exptime = agnkey.util.readkey3(hdr, 'exptime') _pixelscale = agnkey.util.readkey3(hdr, 'PIXSCALE')