def photautocal(self,reference,reflimit=30,selflimit=30): """Find the rough WCS for this image, based on reference star_phootmetry, by cross-identifying stars by ID in DS9""" iraf.display(self.image,1) temp = iraf.pdump(self.photfile,"xcen,ycen,id","MAG<%f"%selflimit,Stdout=1) iraf.tvmark(1,"STDIN",Stdin=temp) iraf.display(reference.image,2) temp = iraf.pdump(reference.photfile,"xcen,ycen,id","MAG<%f"%reflimit,Stdout=1) iraf.tvmark(2,"STDIN",Stdin=temp) fred = open('tempautocal','w') input1=None input2=None print "Cross identify at least five stars, <q> to continue" while (input1!='q')and(input2!='q'): print input1 = raw_input("Star ID on Frame 1: ") input2 = raw_input("Matches star ID on Frame 2: ") try: star1 = self[int(input1)] star2 = reference[int(input2)] except: print "Known star integers required" continue fred.write("%f %f %f %f\n"%(star1[1],star1[2],star2[7],star2[8])) fred.close() iraf.ccmap(input='tempautocal',images=self.image,lngunits='degrees', database='database',fit='rxyscale',update='yes',inter='yes') print "Recalculating data" self.calcradec() print "If happy, now run ast_by_photometry"
def markStars(self, data, buffer): ''' Can be used to show an overlapping image on DS9 buffer. The data is taken from the a table; containing x and y coordinates. Uses a fixed size for the points. ''' I.tvmark(buffer, data, mark='point', nx=0, ny=0, points=0.5, color=204)
def draw_windows( window, dispFrame=1, label=True ): ''' ''' import pyraf from pyraf import iraf drawst = time.time() tmpFilename = 'tmpfile.tmp' index = 0 for win in window: index += 1 # The following is annoying IRAF file nonsense. tmpFile = open( tmpFilename, 'w' ) toWrite = '%s %s W%s\n' %(str(win[0]+(win[2]/2)),str(win[1]+(win[3]/2)), str(index)) tmpFile.write( toWrite ) tmpFile.close() iraf.tvmark( frame=dispFrame,coords=tmpFilename, mark='rectangle', pointsize=8, color=204, label=label, lengths=str(win[2])+' '+str(float(win[3])/float(win[2])) ) drawet = time.time() return drawet - drawst
def runsextractor(image, auto): s = "sex " + str(image) for i in range(1000): os.system(s) os.system('getxycat.pl') iraf.display(image, 1, fill='yes') iraf.display(image, 2, fill='yes') iraf.display('check.fits', 3, fill='yes') #iraf.display('background.fits',4) iraf.tvmark(2, 'testxy.cat', color=204, radii=2) #iraf.tvmark(4,'testxy.cat',color=204,radii=2) if auto > 0.: break try: flag = raw_input( "how does it look? 1=keep, 0=adjust default.sex \n") flag = float(flag) except ValueError: print "Sorry, didn't get that. Let's try one more time." flag = raw_input( "how does it look? 1=keep, 0=adjust default.sex \n") flag = float(flag) if flag > .1: break flag = raw_input("Edit default.sex. Hit any key when ready \n")
def drawText(self, xcoord, ycoord, text='', font='times 4', color='red'): ''' ''' line_space = 50 if self.pyds9_sup: current_line = 0 for line in text.split('\n'): self.draw( 'text', xcoord+20, ycoord-(line_space*current_line), color=color, text=line, font=font, delete=1) current_line += 1 else: font_size = font.split( ' ' )[1] import os tmpfile = 'tmpfile.tmp' tmpfd = open( tmpfile, 'w' ) current_line = 0 for line in text.split('\n'): tmpfd.write( '%s %s %s\n' %(str(xcoord), str(ycoord-(line_space*current_line)), line) ) current_line += 1 tmpfd.close() from pyraf import iraf iraf.tvmark( self.current_frame, tmpfile, pointsize=1, label=True, txsize=font_size, color=iraf_colors[color]) os.remove( tmpfile )
def displayresults(self): iraf.display(self.sex_image, 1, fill='yes', contrast=0.01) iraf.display(self.sex_image, 2, fill='yes', contrast=0.01) iraf.display('check.fits', 3, fill='yes', contrast=0.01) iraf.display('background.fits', 4, contrast=0.01) iraf.tvmark(2, self.prefix + '_sex_xy.txt', color=204, radii=2, mark='circle')
def display(self,extn=None): """Display SCI extensions from the Astrodata object and mark objects and reference stars found in the input file tables OBJCAT and REFCAT. DS9 must be running. """ try: from stsci.numdisplay import display as ndisplay except ImportError: from numdisplay import display as ndisplay #file = self.file #ad = AstroData(file) ad = self.adout nscext = ad.count_exts('SCI') if extn != None: si,ei = extn,extn+1 else: si,ei = 1,nscext+1 fr = 1 for xt in range(si,ei): #ff = '%s[%d]' % (file,xt) ff = ad['SCI',xt].data iraf.set (stdimage='imt47') ndisplay(ff, frame=fr) xtnad = ad['OBJCAT',xt] if xtnad: x = xtnad.data.field('x') y = xtnad.data.field('y') print 'Marking %d objects with red.' % len(x) np.savetxt('/tmp/xy.txt', zip(x,y), fmt='%.2f', delimiter=' ') tvmark(frame=fr,coords='/tmp/xy.txt',color=204) else: print "No stars found in extension %d."%xt xtnad = ad['REFCAT',xt] if xtnad: x = xtnad.data.field('x') y = xtnad.data.field('y') print 'Marking %d refstars with green.' % len(x) np.savetxt('/tmp/xy.txt', zip(x,y), fmt='%.2f', delimiter=' ') tvmark(frame=fr,coords='/tmp/xy.txt',color=205) else: print "No reference stars found in extension %d."%xt fr += 1
def markPixel(self, xcoord, ycoord, badPixel=True, color='red'): if self.pyds9_sup: self.draw( 'box', xcoord, ycoord, [1,1], crossout=badPixel, color=color, fixed=True, edit=0, select=0, move=0 ) else: # write a stupid file tmpfile = 'tmpfile.tmp' tmpfd = open( tmpfile, 'w' ) tmpfd.write( '%s %s\n' %(str(xcoord), str(ycoord)) ) tmpfd.close() from pyraf import iraf iraf.tvmark( self.current_frame, coordfile, mark='point', pointsize=1, color=iraf_colors[color]) os.remove( tmpfile )
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 aperphot( imgs, posname, aper1, aper2, aper3, ): postfix = '.obs' for i in xrange(len(imgs)): basename, exten = os.path.splitext(imgs[i]) photname = basename + postfix meanpsf = 2.0 std = 70.0 iraf.display(imgs[i], frame=1) iraf.tvmark(frame=1, coords=posname, autolog='No', mark='circle', radii=30, lengths=3, font='raster', color=204, label='No', number='Yes', txsize=3) iraf.datapars.ccdread = 'CCDRON' iraf.datapars.gain = 'CCDGAIN' iraf.datapars.scale = 1.0 iraf.datapars.fwhmpsf = meanpsf iraf.datapars.sigma = std iraf.datapars.filter = 'INSFLNAM' iraf.datapars.datamax = 1000000.0 iraf.centerpars.cbox = 8.0 iraf.centerpars.calgorithm = 'centroid' iraf.fitskypars.salgorithm = 'median' iraf.fitskypars.annulus = aper2 # ------ important ------ iraf.fitskypars.dannulus = aper3 # ------ important ------ #iraf.photpars.apertures = meanpsf # ------ important ------ iraf.photpars.apertures = aper1 # ------ important ------ iraf.phot(image=imgs[i], coords=posname, output=photname, interactive=False, verify=False)
def autoast(self,infile='asu.fit',RAfield='RAJ2000',decfield='DEJ2000',magfield='Vmag',magoff=None, markmax=30,crosses=False): """Calibrate image from file of data (2mass etc) by making initial astrometry by selecting a handful of stars, them using the other cal routines RAfield: column with RA (decimal!). decfield: column with dec (decimal!). magfield: column to calibrate magnitude by""" global xpoint,ypoint if self.image is None: print "No image to calibrate data by" return RA,dec,mag = load_data(infile,RAfield,decfield,magfield) fig = pylab.figure(figsize=(8,8)) pylab.clf() try: magoff = magoff or mag.max() pylab.scatter(RA[mag>0],dec[mag>0],s=10**(0.4*(magoff-mag[mag>0])),hold=0,alpha=0.5) except: crosses=True if crosses: pylab.plot(RA,dec,'k+') pylab.axis([RA.max(),RA.min(),dec.min(),dec.max()]) pylab.draw() cid = fig.canvas.mpl_connect('button_press_event',self._on_press) iraf.display(self.image,1) iraf.tvmark(1,"STDIN",Stdin=iraf.pdump(self.photfile,"xcen,ycen,id","MAG<%f"%markmax,Stdout=1)) print "Pick five stars with middle button, then enter their IDs in order,\n<q> to continue" ids = []; self.xpoint=[]; self.ypoint=[] select = None while not(select=='q'): select=raw_input('Star ID: ') try: ids.append(int(select)) except: pass fig.canvas.mpl_disconnect('button_press_event') fred = open('autocalcoords','w') for i in range(min(len(ids),len(self.xpoint))): try: x,y = self[ids[i]][[1,2]] locmin = ((self.xpoint[i]-RA)**2+(self.ypoint[i]-dec)**2).argmin() fred.write('%f %f %15.12e %15.12e\n'%(x,y,RA[locmin],dec[locmin])) except: print "Coord pair %i failed"%i fred.close() iraf.ccmap(input='autocalcoords',images=self.image,lngunits='degrees', database='database',fit='rxyscale',update='yes',inter='yes') print "Recalculating..." self.calcradec() print "If happy, now run ast_by_file"
def runsextractor(image): s="sex "+str(image) for i in range(1000): os.system(s) os.system('getxycat.pl') iraf.display(image,2) iraf.tvmark(2,'testxy.cat',color=207,radii=7) try: flag= raw_input("how does it look? 1=keep, 0=adjust default.sex \n") flag=float(flag) except ValueError: print "Sorry, didn't get that. Let's try one more time." flag= raw_input("how does it look? 1=keep, 0=adjust default.sex \n") flag=float(flag) if flag > .1: break flag= raw_input("Edit default.sex. Hit any key when ready \n")
def findsolution(image,alsfile,datafile,source="GSC"): stars = CMD.star_photometry(alsfile,image,False) datfile = pyfits.open(datafile) mydata=datfile[-1].data datfile.close() iraf.display(image,1) temp=iraf.pdump(alsfile,'xcen,ycen,id','yes',Stdout=1) iraf.tvmark(1,"STDIN",Stdin=temp) rafield,decfield = fields[source] ra = mydata.field(rafield) dec= mydata.field(decfield) raint = int(min(ra)) decint= int(min(dec)) print "ra offset by %i, dec by %i\n"%(raint,decint) clf() plot(ra-raint,dec-decint,'k+') print "Require 4 stars matched to make simple solution" print "Enter co-ordinates as acurately as you can:-" fred = open('ccmapfile','w') for i in range(4): idin=input("Star %i ID: "%i) mystar=stars[idin] rain=input("Star %i RA: " %i) + raint decin=input("Star %i DEC: "%i) + decint radiff = ra-rain decdiff = dec-decin radecdiff = radiff**2+decdiff**2 locmin = radecdiff.argmin() raout = ra[locmin] decout = dec[locmin] fred.write("%7.2f %7.2f %10.6f %10.6f\n"%(mystar[1],mystar[2],raout,decout)) fred.close() iraf.ccmap('ccmapfile','database',images=image,xcolumn=1,ycolumn=2,lngcolumn=3, latcolumn=4,lngunits='degrees',latunits='degrees',insystem='j2000', fitgeometry='rxyscale') findbettersolution(image,alsfile,datafile,source=source)
def kait_disp(): inlis=iraffiles('*_001.sub.fit') for image in inlis: root=image[:len(image)-12] iraf.display("%s_001.fit" % root, 1) if os.path.exists('%s.z.can' % root): iraf.tvmark(1,'%s.z.can' % root, radii=10) if os.path.exists('%s.mp.cor' % root): iraf.tvmark(1,'%s.mp.cor' % root, radii=10) iraf.display('%s.fit' % root,2) iraf.display('%s_001.sub.fit' % root, 3) if os.path.exists('%s.z.cans' % root): iraf.tvmark(3, '%s.z.cans' % root, radii=10) iraf.imexam()
def kait_disp(): inlis = iraffiles('*_001.sub.fit') for image in inlis: root = image[:len(image) - 12] iraf.display("%s_001.fit" % root, 1) if os.path.exists('%s.z.can' % root): iraf.tvmark(1, '%s.z.can' % root, radii=10) if os.path.exists('%s.mp.cor' % root): iraf.tvmark(1, '%s.mp.cor' % root, radii=10) iraf.display('%s.fit' % root, 2) iraf.display('%s_001.sub.fit' % root, 3) if os.path.exists('%s.z.cans' % root): iraf.tvmark(3, '%s.z.cans' % root, radii=10) iraf.imexam()
def draw(self, shape, xcoord, ycoord, properties=None, color='red', text='', crossout=False, fixed=False, **kargs): ''' A general marking method that will mark a given shape in ds9. @param shape: The shape to be drawn. Which shapes are capable of being drawn @param xcoord: Pixel on the x-axis. @type xcoord: float or int @param ycoord: Pixel on the y-axis. @type ycoord: float or int ''' xcoord = str( xcoord ) ycoord = str( ycoord ) # Eventually, it would be nice to check that lengths matches shapes. if type(properties) == list: prop_size = len( properties ) for i in range(prop_size): properties[i] = str( properties[i] ) if self.pyds9_sup: properties = ' '.join( properties ) else: properties = ','.join( properties ) else: properties = str( properties ) if self.pyds9_sup: if crossout: crossout = '-' else: crossout = '' if fixed: fixed = '0' else: fixed = '1' additional_args = '' for arg in kargs.keys(): tempval = kargs[arg] if type( tempval ) == str: additional_args += '%s="%s" ' %(str(arg), tempval) else: tempval = str( kargs[arg] ) additional_args += '%s=%s ' %(str(arg), tempval) command = '%(crossout)s%(shape)s %(xcoord)s %(ycoord)s %(props)s # color="%(colour)s" text="%(text)s" fixed=%(fix)s %(params)s' %{'crossout':crossout, 'shape':shape, 'xcoord':xcoord, 'ycoord':ycoord, 'props':properties, 'colour':color, 'text':text, 'fix':fixed, 'params':additional_args } self.setRegion( command ) else: # The IRAF tvmark way # write a stupid file tmpfile = 'tmpfile.tmp' tmpfd = open( tmpfile, 'w' ) tmpfd.write( '%s %s\n' %(xcoord, ycoord) ) tmpfd.close() from pyraf import iraf iraf.tvmark( self.current_frame, coordfile, mark=shape, label=True, pointsize=properties, radii=properties, lengths=properties, txsize=properties, color=iraf_colors[color]) os.remove( tmpfile )
def fitsn(img,imgpsf,coordlist,_recenter,fwhm0,original,sn,residual,_show,_interactive,dmax,dmin,z11='',z22='',midpt='',size=7,apco0=0): import lsc lsc.util.delete("apori") lsc.util.delete(img+".sn.mag") ################################# from pyraf import iraf import string iraf.imcoords(_doprint=0) iraf.digiphot(_doprint=0) iraf.daophot(_doprint=0) from iraf import digiphot from iraf import daophot from iraf import ptools a1 = int(fwhm0) a2 = int(2.*fwhm0+.5) a3 = int(3.*fwhm0+.5) a4 = int(4.*fwhm0+.5) ap = str(a1)+","+str(a2)+","+str(a3) ######################################## if _recenter: answ='yes' else: answ='no' ######################################### hdr=lsc.util.readhdr(img+'.fits') _gain=lsc.util.readkey3(hdr,'gain') _ron=lsc.util.readkey3(hdr,'ron') _exptime=lsc.util.readkey3(hdr,'exptime') iraf.noao.digiphot.daophot.photpars.zmag = 0 iraf.noao.digiphot.daophot.datapars.readnoi = _gain iraf.noao.digiphot.daophot.datapars.epadu = _ron iraf.noao.digiphot.daophot.datapars.datamin = dmin iraf.noao.digiphot.daophot.datapars.datamax = dmax iraf.noao.daophot.fitskypars.annulus=a3 iraf.noao.daophot.photpars.apertures = ap iraf.noao.digiphot.daophot.datapars.exposure = 'exptime' iraf.noao.digiphot.daophot.datapars.airmass = 'airmass' iraf.noao.digiphot.daophot.datapars.filter = 'filter2' iraf.noao.digiphot.daophot.daopars.psfrad = a4 # modify fitrad to 3 fwhm to see if works better iraf.noao.digiphot.daophot.daopars.fitrad = fwhm0 #* 3 iraf.noao.digiphot.daophot.daopars.sannulus = int(a4) iraf.noao.digiphot.daophot.daopars.recenter = answ iraf.noao.digiphot.daophot.daopars.fitsky = 'yes' # iraf.noao.digiphot.daophot.centerpars.cbox = 0 iraf.noao.digiphot.daophot.centerpars.cbox = 4 iraf.noao.digiphot.daophot.centerpars.calgori = 'gauss' # fitskypars.salgorithm = "constant" # fitskypars.skyvalue = 0 print '\n### recentering: '+str(answ) if _show: iraf.noao.digiphot.daophot.phot(original,coordlist,"apori",veri='no') iraf.noao.digiphot.daophot.phot(sn,coordlist,img+".sn.mag",veri='no') else: iraf.noao.digiphot.daophot.phot(original,coordlist,"apori",veri='no',verb='no') iraf.noao.digiphot.daophot.phot(sn,coordlist,img+".sn.mag",veri='no',verb='no') lsc.util.delete(img+".sn.als") print sn,imgpsf,img iraf.allstar(sn,img+".sn.mag",imgpsf,img+".sn.als","",residual,veri='no',verb='no') lsc.util.delete("snfit.fits") iraf.imarith(sn+'.fits',"-",residual+'.fits',"snfit.fits") lsc.util.delete("skyfit.fits") iraf.imarith(original+'.fits',"-","snfit.fits","skyfit.fits") iraf.txsort(img+".sn.als","ID") tmptbl = iraf.txdump(img+".sn.als","mag,merr,xcenter,ycenter",expr='yes', Stdout=1) magerr,fitmag,centx,centy=[],[],[],[] for i in tmptbl: try: fitmag.append(float(string.split(i)[0]))#-2.5*log10(_exptime)) except: fitmag.append(string.split(i)[0]) try: magerr.append(float(string.split(i)[1])) except: magerr.append(string.split(i)[1]) centx.append(float(string.split(i)[2])) centy.append(float(string.split(i)[3])) tmptbl=iraf.txdump("apori","mag",expr='yes', Stdout=1) apori1,apori2,apori3=[],[],[] for i in tmptbl: try: apori1.append(float(string.split(i)[0]))#-2.5*log10(_exptime)) except: apori1.append(string.split(i)[0]) try: apori2.append(float(string.split(i)[1]))#-2.5*log10(_exptime)) except: apori2.append(string.split(i)[1]) try: apori3.append(float(string.split(i)[2]))#-2.5*log10(_exptime)) except: apori3.append(string.split(i)[2]) iraf.txsort(img+".sn.mag","YCENTER") tmptbl=iraf.txdump(img+".sn.mag","mag,magerr",expr='yes', Stdout=1) if _show: print "********************************************************************" print "ID <apmag on original> <apmag on bgsubt> fitmag truemag err_fit" print " ",a1," ",a2," ",a3," ",a1," ",a2," ",a3 apmag1,apmag2,apmag3,truemag=[],[],[],[] for i in range(len(tmptbl)): try: apmag1.append(float(string.split(tmptbl[i])[0]))#-2.5*log10(_exptime)) except: apmag1.append(9999) try: apmag2.append(float(string.split(tmptbl[i])[1]))#-2.5*log10(_exptime)) except: apmag2.append(9999) try: apmag3.append(float(string.split(tmptbl[i])[2]))#-2.5*log10(_exptime)) except: apmag3.append(9999) try: truemag.append(fitmag[i]+float(apco0)) except: truemag.append('INDEF') if _show: print i,apori1[i],apori2[i],apori3[i],apmag1[i],apmag2[i],apmag3[i],fitmag[i],truemag[i],magerr[i] if _show: print "********************************************************************" if _show: print midpt,z11,z22 _tmp1,_tmp2,goon=lsc.util.display_image(original+'.fits',1, z11, z22, False, _xcen=.25, _ycen=.25, _xsize=.3, _ysize=.3) z01 = float(z11)-float(midpt) z02 = float(z22)-float(midpt) s1 = 1 s2 = -int(fwhm0) lsc.util.delete("tmptbl") ff=open('tmptbl','w') ff.write(str(s1)+' '+str(s2)+" ORIGINAL") ff.close() iraf.tvmark(1,"tmptbl",autol='no',mark="none",inter='no',label='yes',txsize=2) _tmp1,_tmp2,goon=lsc.util.display_image('snfit.fits',1, z01, z02, False, _xcen=.25, _ycen=.75, _xsize=.3, _ysize=.3, _erase='no') lsc.util.delete("tmptbl") tmptbl0=iraf.txdump(img+".sn.als","xcen,ycen",expr='yes',Stdout=1) ff=open('tmptbl','w') for i in tmptbl0: ff.write(i+'\n') ff.close() lra = int((2*float(size)*float(fwhm0))*2) iraf.tvmark(1,"tmptbl",autol='no',mark="circle", number='yes',nyoffset=lra,radi=a2,txsize=2,inter='no') s1 = 1 s2 = -1*int(fwhm0) lsc.util.delete("tmptbl") ff=open('tmptbl','w') ff.write(str(s1)+' '+str(s2)+" FITTED") ff.close() iraf.tvmark(1,"tmptbl",autol='no',mark="none",inter='no',label='yes',txsize=2) _tmp1,_tmp2,goon=lsc.util.display_image('skyfit.fits',1, z11, z22, False, _xcen=.75, _ycen=.25, _xsize=.3, _ysize=.3, _erase='no') s1 = 1 s2 = -1*int(fwhm0) lsc.util.delete("tmptbl") ff=open('tmptbl','w') ff.write(str(s1)+' '+str(s2)+" RESIDUAL") ff.close() iraf.tvmark(1,"tmptbl",autol='no',mark="none",inter='no',label='yes',txsize=2) return apori1,apori2,apori3,apmag1,apmag2,apmag3,fitmag,truemag,magerr,centx,centy
def makeillumination(lista,flatfield):#,outputfile,illum_frame): import os,glob,string,re from astropy.io import fits as pyfits import ntt from ntt.util import readhdr, readkey3, delete, display_image, defsex, name_duplicate, correctcard from numpy import compress, array, argmax, argmin, min, argsort, float32 import datetime MJDtoday = 55927 + (datetime.date.today() - datetime.date(2012, 01, 01)).days _date = readkey3(readhdr(lista[0]), 'date-night') _filter = readkey3(readhdr(lista[0]), 'filter') illum_frame = name_duplicate( lista[0], 'illum_' + _date + '_' + _filter + '_' + str(MJDtoday), '') from pyraf import iraf iraf.images(_doprint=0) iraf.imutil(_doprint=0) iraf.utilities(_doprint=0) iraf.noao(_doprint=0) iraf.imred(_doprint=0) iraf.ccdred(_doprint=0) iraf.digiphot(_doprint=0) iraf.daophot(_doprint=0) iraf.generic(_doprint=0) toforget = ['digiphot.daophot', 'imutil.imarith', 'image', 'utilities.surfit'] for t in toforget: iraf.unlearn(t) n = len(lista) # start loop to read image names from the input file lista1 = [] iraf.ccdred.verbose = 'no' ff = open('templist.lst', 'w') for i in range(0, len(lista)): ff.write('C' + lista[i] + '\n') delete('C' + lista[i]) delete('C' + re.sub('.fits', '_sub.fits', lista[i])) ntt.sofiphotredudef.crosstalk(lista[i], 'C' + lista[i]) iraf.noao.imred.ccdred.ccdproc('C' + lista[i], output='', overscan="no", trim="yes", ccdtype='', darkcor='no', fixpix='no', zerocor="no", flatcor='yes', illumco='no', trimsec='[1:1024,1:1007]', biassec='', flat=flatfield, illum='') correctcard('C' + lista[i]) lista1.append('C' + lista[i]) ff.close() print '\n### prereducing STD frames to compute illumination correction ........' lista2, skyfile = ntt.sofiphotredudef.skysub(lista1, readkey3( readhdr(lista1[0]), 'ron'), readkey3(readhdr(lista1[0]), 'gain'), True) lista2 = ntt.sofiphotredudef.sortbyJD(lista2) print '\n### use x on the star and q to continue....' display_image(lista2[0], 2, '', '', False) delete('tmpone.coo') iraf.image.tv.imexamine(lista2[0], 2, logfile='tmpone.coo', keeplog='yes', xformat='', yformat='', wcs='logical') iraf.tvmark(2, 'tmpone.coo', mark="circle", number='yes', label='no', radii=8, nxoffse=5, nyoffse=5, color=204, txsize=2) xycoo = iraf.proto.fields('tmpone.coo', '1,2', Stdout=1) x0, y0 = string.split(xycoo[0]) x0 = float(x0) y0 = float(y0) xcum0 = readkey3(readhdr(lista2[0]), 'xcum') ycum0 = readkey3(readhdr(lista2[0]), 'ycum') iraf.digiphot(_doprint=0) iraf.daophot(_doprint=0) iraf.noao.digiphot.daophot.datapars.datamin = -1000 iraf.noao.digiphot.daophot.datapars.datamax = 60000 iraf.noao.digiphot.daophot.daopars.function = 'gauss' iraf.noao.digiphot.daophot.photpars.zmag = 0 namesex = defsex('default.sex') for i in range(0, len(lista2)): j = i + 1 xcum = readkey3(readhdr(lista2[i]), 'xcum') ycum = readkey3(readhdr(lista2[i]), 'ycum') xx = x0 - xcum0 + xcum yy = y0 - ycum0 + ycum # sex objects os.system('sex ' + lista2[i] + ' -c ' + namesex + '> _logsex') delete('_logsex') xpix = iraf.proto.fields('detections.cat', fields='2', Stdout=1) ypix = iraf.proto.fields('detections.cat', fields='3', Stdout=1) cm = iraf.proto.fields('detections.cat', fields='4', Stdout=1) cm = compress((array(xpix) != ''), array(cm, float)) ypix = compress((array(xpix) != ''), array(ypix, float)) xpix = compress((array(xpix) != ''), array(xpix, float)) if len(xpix) > 300: num = 300 else: num = len(xpix) - 1 xpix = xpix[argsort(cm)][0:num] ypix = ypix[argsort(cm)][0:num] distance = (ypix - yy)**2 + (xpix - xx)**2 xx1, yy1 = xpix[argmin(distance)], ypix[argmin(distance)] f = open('tmpone.coo', 'w') f.write(str(xx1) + ' ' + str(yy1) + '\n') f.close() display_image(lista2[i], 1, '', '', False) iraf.tvmark(1, 'tmpone.coo', mark="circle", number='yes', label='no', radii=8, nxoffse=5, nyoffse=5, color=204, txsize=2) answ = 'n' while answ != 'y': answ = raw_input('selected the right one [[y]/n] ?') if not answ: answ = 'y' if answ in ['y', 'YES', 'yes', 'Y']: print lista2[i] delete('pippo.' + str(j) + '.mag') gggg = iraf.digiphot.daophot.phot( lista2[i], "tmpone.coo", output="pippo." + str(j) + ".mag", verify='no', interac='no', Stdout=1) try: float(string.split(gggg[0])[3]) answ = 'y' except: print '\n### warning' answ = 'n' else: print '\n### select the std star' display_image(lista2[i], 1, '', '', False) iraf.image.tv.imexamine(lista2[ i], 1, logfile='tmpone.coo', keeplog='yes', xformat='', yformat='', wcs='logical') xycoo = iraf.proto.fields('tmpone.coo', '1,2', Stdout=1) x2, y2 = string.split(xycoo[0]) f = open('tmpone.coo', 'w') f.write(str(x2) + ' ' + str(y2) + '\n') f.close() delete('pippo.' + str(j) + '.mag') print '###### new selection ' + str(x2), str(y2) gggg = iraf.digiphot.daophot.phot( lista2[i], "tmpone.coo", output='pippo.' + str(j) + '.mag', verify='no', interac='no', Stdout=1) try: float(string.split(gggg[0])[3]) answ = 'y' except: print '\n### warning' answ = 'n' os.system('ls pippo.*.mag > tempmag.lst') tmptbl0 = iraf.txdump(textfile="@tempmag.lst", fields="XCENTER,YCENTER,FLUX", expr='yes', Stdout=1) ff = open('magnitudini', 'w') for i in tmptbl0: ff.write(i + '\n') ff.close() # delete the temporary images and files delete("temp*.fits") delete('temp*.lst') delete(illum_frame) print '\n### fitting the illumination surface...' aaa = iraf.utilities.surfit('magnitudini', image=illum_frame, function="polynomial", xorder=2, yorder=2, xterms="full", ncols=1024, nlines=1024, Stdout=1) iraf.noao.imred.generic.normalize(illum_frame) correctcard(lista[0]) data, hdr = pyfits.getdata(illum_frame, 0, header=True) data0, hdr0 = pyfits.getdata(lista[0], 0, header=True) delete(illum_frame) pyfits.writeto(illum_frame, float32(data), hdr0) flatfield0 = string.split(flatfield, '/')[-1] ntt.util.updateheader( illum_frame, 0, {'MKILLUM': [flatfield0, 'flat field']}) display_image(illum_frame, 1, '', '', False) for i in range(0, len(lista)): # in lista: img = lista[i] delete('pippo.' + str(i) + '.mag') delete('C' + img) delete('C' + re.sub('.fits', '_sky.fits', img)) # delete('C*.fits.mag.1') # iraf.hedit(illum_frame,'MKILLUM','Illum. corr. created '+flatfield,add='yes',update='yes',verify='no') return illum_frame
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 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 pyDaoFind(filename, scidata, pixelscale, frame=1, debug=False, pymark=True, display=True, imageSigma='default', saturation=65000, qa=False): xyArray = [] if display: # Redirecting the screen prints of stdout so they don't appear when # the next couple iraf routines are used SAVEOUT = sys.stdout capture = StringIO.StringIO() sys.stdout = capture # Setting the image buffer to the size of GMOS image iraf.set(stdimage='imtgmos') # Displaying the image with iraf.display which sends the image to ds9 iraf.display(filename, frame=frame) # Return stdout to normal so prints will show on the screen sys.stdout = SAVEOUT # Mask out stars to get a good measure of background deviation for daofind if imageSigma == 'default': maskedImage = starMask(scidata) imageSigma = maskedImage.std() # Use default FWHM of 0.8 arcsec daoFWHM = 0.8/pixelscale maxObjects = 100 (fileName, exten) = paramutil.checkFileFitExtension(filename) #print "IU40:", imageSigma, daoFWHM, saturation # Start time for detecting the sources in the data frame st = time.time() if qa: # Use a grid of sub-windows for detecting the sources rather than the entire frame at once. # I will be the first to admit this is very unfriendly and kluged. # Hopefully, I will have enough time to improve it ratio = 5 currentGrid = 0 searchPattern = [12,13,11,7,17,6,8,16,18] gridSize = len(searchPattern) height, width = scidata.shape grid_width = width / ratio grid_height = height / ratio while len(xyArray) <= maxObjects and currentGrid < gridSize: grid = searchPattern[currentGrid] xoffset = (grid % ratio) * grid_width yoffset = (grid / ratio) * grid_height xyArray += detectSources.detSources( filename, sigma=imageSigma, threshold=3.0, fwhm=daoFWHM, window=[(xoffset,yoffset,grid_width,grid_height)], exts=exten ) currentGrid += 1 else: xyArray = detectSources.detSources( filename, sigma=imageSigma, threshold=2.0, fwhm=daoFWHM, exts=exten ) # End time for detecting the sources in the data frame et = time.time() if debug: print 'Time detSources took to find the sources:'+str(et-st) if pymark: ## Mark objects found with daofind with blue 'X' # Create the temporary file name tmpFileName = 'tmpCoordFile'+str(os.getpid())+'.temp' # Creating normal type file with temp name tmpFile = file(tmpFileName, 'w') # Write locations of objects found to temp file for xy in xyArray: tmpcoo2 = '%5d%6d\n'%(xy[0]+1,xy[1]+1) tmpFile.write(tmpcoo2) tmpFile.close() # Use tvmark to mark the objects listed in the temp file with a blue X iraf.tvmark(frame=frame,coords=tmpFileName, mark='cross', color=206, pointsize=6) # Delete the temp file from the system filesystem.deleteFile(tmpFileName) if debug: #print 'PYEXAM - DAOFIND outputs: '+str(xyArray) print "Number of Objects = ", len(xyArray) return xyArray
def main(): allfiles = ['mo_flatdiv_biassub_trim_gN20091027S0133.fits','N20020214S059.fits','N20020606S0141.fits', 'N20080927S0183.fits','N20091002S0219.fits','N20091027S0133.fits','rgN20031029S0132.fits', 'rgS20031031S0035.fits','S20080922S0100.fits'] files = allfiles files = ['N20091002S0219.fits']#['N20030427S0092.fits']#['mo_flatdiv_biassub_trim_gN20091027S0133.fits'] paramset = [ {'threshold':2, 'window':None, 'verbose':True, 'timing':True, 'grid':False, 'rejection':None}, ] labelStrs = pyraf.iraf.no time_dict = {} frameForDisplay = 1 dispFrame = 0 numtimes = 1 drawWindows = True display = True tmpFilename = 'tmpfile.tmp' iraf.set(stdimage='imtgmos') pydisplay = pyDisplay.getDisplay() sfilt = starFilter.starFilter() for fil in files: ext = 1 while ext < 2: indi = 0 for param in paramset: indi += 1 for i in range(numtimes): ds9 = pydisplay.getDisplayTool( 'ds9', 'myds9' ) try: print '-'*50 if display: try: iraf.display( fil+'['+str(ext)+']', frameForDisplay) except: break else: try: pf.getdata( fil, ext ) except: break if frameForDisplay > 0: dispFrame = frameForDisplay - 1 xyArray, filTime = ds.detSources( fil, dispFrame=dispFrame, drawWindows=drawWindows, exts=ext, **param ) end_time = time.time() scidata = pf.getdata( fil, ext ) xyArray = sfilt.filterStars( scidata, xyArray) key = fil +'['+str(ext)+'] P'+str(indi) if not time_dict.has_key(key): time_dict[key] = [] time_dict[key].append((filTime,len(xyArray))) #print xyArray if display: tmpFile = open( tmpFilename, 'w' ) index = 0 toWrite = '' for coords in xyArray: toWrite += '%s %s %s\n' %(str(coords[0]), str(coords[1]), str(index)) index += 1 tmpFile.write( toWrite ) tmpFile.close() iraf.tvmark( frame=dispFrame,coords=tmpFilename, mark='point', pointsize=1, color=204, label=labelStrs ) #tutorExam( ds9, scidata, xyArray, ext) except: print "'" + fil + "': Failed" raise #frameForDisplay += 1 ext += 1 timelisting = sorted(time_dict.keys()) print timelisting print 'Number of Runs:', numtimes for entry in timelisting: sum = 0 objsum = 0 for val in time_dict[entry]: sum += val[0] objsum += val[1] print "'" + entry + "': Time was (" + str( sum/numtimes ) + ")\tsecs / Objects ("+str(objsum)+")"
# ds.markText( 0, 2200, dispText ) else: # this was a kludge to mark the image with the metric # The following i)s annoying IRAF file methodology. tmpFilename = 'tmpfile.tmp' tmpFile = open( tmpFilename, 'w' ) coords = '100 2100 fwhm=%(fwhm)s\n100 2050 elli=%(ell)s\n' %{'fwhm':str(rq.fwhmMean), 'ell':str(rq.ell_mean)} tmpFile.write( coords ) tmpFile.close() #print 'r165: importing iraf again' import pyraf from pyraf import iraf iraf.tvmark( frame=dispFrame,coords=tmpFilename, pointsize=0, color=204, label=pyraf.iraf.yes ) et = time.time() #print 'RED422:', (et - st) # note: will this throw away rq's, should throw exception? review # why do this, better to assert it IS empty than empty it? coi.clear_rqs() #dump the reduction context object if coi['rtf']: results = open( "test.result", "a" ) #results.write( "\t\t\t<< CONTROL LOOP " + str(controlLoopCounter" >>\n") #print "\t\t\t<< CONTROL LOOP ", controlLoopCounter," >>\n" #print "#" * 80 #controlLoopCounter += 1 results.write( str( coi ) )
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( iraf.fields('tmp.pix', '1,2', Stdout=1)[2]) print xx0, yy0 os.system('rm -rf tmp.*') else: xx0, yy0 = '', '' else: xx0 = '' if xx0 == '' and not _interactive: skip = 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
_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 if _ra0 and _dec0: os.system('rm -rf tmp.*') lll = [str(_ra0) + ' ' + str(_dec0)]
def plot2masspos(im): infile=open('fp_2mass.fp_psc1374.tbl','r') dra=[] ddec=[] iraf.imgets(image=im,param='RA')#get RA of image t=iraf.imgets.value t1=t.split(':') for i in range(len(t1)):#convert to floats t1[i]=float(t1[i]) RAcenter=15.*(t1[0]+t1[1]/60.+t1[2]/3600.)#convert to degrees iraf.imgets(image=im,param='DEC')#get RA of image t=iraf.imgets.value t1=t.split(':') for i in range(len(t1)):#convert to floats t1[i]=float(t1[i]) DECcenter=(t1[0]+t1[1]/60.+t1[2]/3600.)#convert to degrees for line in infile: if line.find('\\') > -1: continue if line.find('=') > -1: continue if line.find('|') > -1: continue t=line.split() if (float(t[6]) >15.): continue ra=(float(t[1])-RAcenter)*N.cos(N.pi/180.*float(t[2]))#correct delta ra for cos declination dec=(DECcenter-float(t[2]))#makes east to the left ra=ra*3600.#convert to arcsec dec=dec*3600. dra.append(ra)#save offsets from center position ddec.append(dec)#save offsets from center dra=N.array(dra,'f') ddec=N.array(ddec,'f') infile.close() xcenter=512 ycenter=512 plate=0.5#arcsec/pixel #convert offsets to pixels on pisces at 90" x=dra/plate y=ddec/plate #center at (512,512) in pixel coordinates x=x+xcenter y=y+ycenter #reflect about y axis and then swap x & y to match the orientation of pisces x=imxmax-x#reflect about x yt=x#swap x & t xt=y xt=imxmax-xt dy=-26. dx=20. for i in range(1000): yt=yt+dy xt=xt+dx outfile=open('2masscoords.dat','w') for i in range(len(x)): s="%8.2f %8.2f \n"%(xt[i],yt[i]) outfile.write(s) outfile.close() iraf.display(im,2) iraf.tvmark(2,'testxy.cat',color=207,radii=5) iraf.tvmark(2,'2masscoords.dat',color=206,radii=7.) try: flag= raw_input("how does it look? 1=keep, 0=adjust positions \n") flag=float(flag) except ValueError: print "Sorry, didn't get that. Let's try one more time." flag= raw_input("how does it look? 1=keep, 0=adjust positions \n") flag=float(flag) if flag > .1: break dx=raw_input("enter new x offset for sdss coords\n") dx=float(dx) dy=raw_input("enter new y offset for sdss coords\n") dy=float(dy)
def makeillumination(lista, flatfield): #,outputfile,illum_frame): import os, glob, string, re from astropy.io import fits as pyfits import ntt from ntt.util import readhdr, readkey3, delete, display_image, defsex, name_duplicate, correctcard from numpy import compress, array, argmax, argmin, min, argsort, float32 import datetime MJDtoday = 55927 + (datetime.date.today() - datetime.date(2012, 01, 01)).days _date = readkey3(readhdr(lista[0]), 'date-night') _filter = readkey3(readhdr(lista[0]), 'filter') illum_frame = name_duplicate( lista[0], 'illum_' + _date + '_' + _filter + '_' + str(MJDtoday), '') from pyraf import iraf iraf.images(_doprint=0, Stdout=0) iraf.imutil(_doprint=0, Stdout=0) iraf.utilities(_doprint=0, Stdout=0) iraf.noao(_doprint=0, Stdout=0) iraf.imred(_doprint=0, Stdout=0) iraf.ccdred(_doprint=0, Stdout=0) iraf.digiphot(_doprint=0, Stdout=0) iraf.daophot(_doprint=0, Stdout=0) iraf.generic(_doprint=0, Stdout=0) toforget = [ 'digiphot.daophot', 'imutil.imarith', 'image', 'utilities.surfit' ] for t in toforget: iraf.unlearn(t) n = len(lista) # start loop to read image names from the input file lista1 = [] iraf.ccdred.verbose = 'no' ff = open('templist.lst', 'w') for i in range(0, len(lista)): ff.write('C' + lista[i] + '\n') delete('C' + lista[i]) delete('C' + re.sub('.fits', '_sub.fits', lista[i])) ntt.sofiphotredudef.crosstalk(lista[i], 'C' + lista[i]) iraf.noao.imred.ccdred.ccdproc('C' + lista[i], output='', overscan="no", trim="yes", ccdtype='', darkcor='no', fixpix='no', zerocor="no", flatcor='yes', illumco='no', trimsec='[1:1024,1:1007]', biassec='', flat=flatfield, illum='') correctcard('C' + lista[i]) lista1.append('C' + lista[i]) ff.close() print '\n### prereducing STD frames to compute illumination correction ........' lista2, skyfile = ntt.sofiphotredudef.skysub( lista1, readkey3(readhdr(lista1[0]), 'ron'), readkey3(readhdr(lista1[0]), 'gain'), True) lista2 = ntt.sofiphotredudef.sortbyJD(lista2) print '\n### use x on the star and q to continue....' display_image(lista2[0], 2, '', '', False) delete('tmpone.coo') iraf.image.tv.imexamine(lista2[0], 2, logfile='tmpone.coo', keeplog='yes', xformat='', yformat='', wcs='logical') iraf.tvmark(2, 'tmpone.coo', mark="circle", number='yes', label='no', radii=8, nxoffse=5, nyoffse=5, color=204, txsize=2) xycoo = iraf.proto.fields('tmpone.coo', '1,2', Stdout=1) x0, y0 = string.split(xycoo[0]) x0 = float(x0) y0 = float(y0) xcum0 = readkey3(readhdr(lista2[0]), 'xcum') ycum0 = readkey3(readhdr(lista2[0]), 'ycum') iraf.digiphot(_doprint=0, Stdout=0) iraf.daophot(_doprint=0, Stdout=0) iraf.noao.digiphot.daophot.datapars.datamin = -1000 iraf.noao.digiphot.daophot.datapars.datamax = 60000 iraf.noao.digiphot.daophot.daopars.function = 'gauss' iraf.noao.digiphot.daophot.photpars.zmag = 0 namesex = defsex('default.sex') for i in range(0, len(lista2)): j = i + 1 xcum = readkey3(readhdr(lista2[i]), 'xcum') ycum = readkey3(readhdr(lista2[i]), 'ycum') xx = x0 - xcum0 + xcum yy = y0 - ycum0 + ycum # sex objects os.system('sex ' + lista2[i] + ' -c ' + namesex + '> _logsex') delete('_logsex') xpix = iraf.proto.fields('detections.cat', fields='2', Stdout=1) ypix = iraf.proto.fields('detections.cat', fields='3', Stdout=1) cm = iraf.proto.fields('detections.cat', fields='4', Stdout=1) cm = compress((array(xpix) != ''), array(cm, float)) ypix = compress((array(xpix) != ''), array(ypix, float)) xpix = compress((array(xpix) != ''), array(xpix, float)) if len(xpix) > 300: num = 300 else: num = len(xpix) - 1 xpix = xpix[argsort(cm)][0:num] ypix = ypix[argsort(cm)][0:num] distance = (ypix - yy)**2 + (xpix - xx)**2 xx1, yy1 = xpix[argmin(distance)], ypix[argmin(distance)] f = open('tmpone.coo', 'w') f.write(str(xx1) + ' ' + str(yy1) + '\n') f.close() display_image(lista2[i], 1, '', '', False) iraf.tvmark(1, 'tmpone.coo', mark="circle", number='yes', label='no', radii=8, nxoffse=5, nyoffse=5, color=204, txsize=2) answ = 'n' while answ != 'y': answ = raw_input('selected the right one [[y]/n] ?') if not answ: answ = 'y' if answ in ['y', 'YES', 'yes', 'Y']: print lista2[i] delete('pippo.' + str(j) + '.mag') gggg = iraf.digiphot.daophot.phot(lista2[i], "tmpone.coo", output="pippo." + str(j) + ".mag", verify='no', interac='no', Stdout=1) try: float(string.split(gggg[0])[3]) answ = 'y' except: print '\n### warning' answ = 'n' else: print '\n### select the std star' display_image(lista2[i], 1, '', '', False) iraf.image.tv.imexamine(lista2[i], 1, logfile='tmpone.coo', keeplog='yes', xformat='', yformat='', wcs='logical') xycoo = iraf.proto.fields('tmpone.coo', '1,2', Stdout=1) x2, y2 = string.split(xycoo[0]) f = open('tmpone.coo', 'w') f.write(str(x2) + ' ' + str(y2) + '\n') f.close() delete('pippo.' + str(j) + '.mag') print '###### new selection ' + str(x2), str(y2) gggg = iraf.digiphot.daophot.phot(lista2[i], "tmpone.coo", output='pippo.' + str(j) + '.mag', verify='no', interac='no', Stdout=1) try: float(string.split(gggg[0])[3]) answ = 'y' except: print '\n### warning' answ = 'n' os.system('ls pippo.*.mag > tempmag.lst') tmptbl0 = iraf.txdump(textfile="@tempmag.lst", fields="XCENTER,YCENTER,FLUX", expr='yes', Stdout=1) ff = open('magnitudini', 'w') for i in tmptbl0: ff.write(i + '\n') ff.close() # delete the temporary images and files delete("temp*.fits") delete('temp*.lst') delete(illum_frame) print '\n### fitting the illumination surface...' aaa = iraf.utilities.surfit('magnitudini', image=illum_frame, function="polynomial", xorder=2, yorder=2, xterms="full", ncols=1024, nlines=1024, Stdout=1) iraf.noao.imred.generic.normalize(illum_frame) correctcard(lista[0]) data, hdr = pyfits.getdata(illum_frame, 0, header=True) data0, hdr0 = pyfits.getdata(lista[0], 0, header=True) delete(illum_frame) pyfits.writeto(illum_frame, float32(data), hdr0) flatfield0 = string.split(flatfield, '/')[-1] ntt.util.updateheader(illum_frame, 0, {'MKILLUM': [flatfield0, 'flat field']}) display_image(illum_frame, 1, '', '', False) for i in range(0, len(lista)): # in lista: img = lista[i] delete('pippo.' + str(i) + '.mag') delete('C' + img) delete('C' + re.sub('.fits', '_sky.fits', img)) # delete('C*.fits.mag.1') # iraf.hedit(illum_frame,'MKILLUM','Illum. corr. created '+flatfield,add='yes',update='yes',verify='no') return illum_frame
def manusn(img, imgpsf, dmag0, apori1, apori2, apori3, apmag1, apmag2, apmag3, fitmag, truemag, magerr, centx, centy, z11, z22, midpt, size, fwhm0, x1, y1, arterr): from pyraf import iraf import lsc import string, re, sys, os from numpy import zeros a2 = int(2. * fwhm0 + .5) fdmag = 10**(-0.4 * float(dmag0)) lsc.util.delete(",_snfit.fit?,skyfit.fit?,_snfit.ar?") if truemag[0] == 'INDEF': print 'ACTUNG' magerr[0] = 0.0 lsc.util.delete('test.fits') os.system('echo ' + str(iraf.field(img + '.sn.coo', field='1,2', Stdout=1)[0]) + ' ' + dmag0 + ' > dddd') iraf.addstar("snfit", "dddd", imgpsf, "_snfit", nstar=1, veri='no', simple='yes', verb='yes') lsc.util.delete('dddd') else: iraf.imarith("snfit.fits", "*", fdmag, "_snfit.fits") iraf.imarith("original.fits", "-", "_snfit.fits", "skyfit.fits") _tmp1, _tmp2, goon = lsc.util.display_image('original.fits', 1, z11, z22, False, _xcen=.25, _ycen=.25, _xsize=.3, _ysize=.3) print z11, z22, midpt z01 = float(z11) - float(midpt) z02 = float(z22) - float(midpt) s1 = 1 s2 = -int(fwhm0) lsc.util.delete("tmptbl") ff = open('tmptbl', 'w') ff.write(str(s1) + ' ' + str(s2) + " ORIGINAL") ff.close() iraf.tvmark(1, "tmptbl", autol='yes', mark="none", inter='no', label='yes', txsize=2) _tmp1, _tmp2, goon = lsc.util.display_image('_snfit.fits', 1, z01, z02, False, _xcen=.25, _ycen=.75, _xsize=.3, _ysize=.3, _erase='no') lsc.util.delete("tmptbl") tmptbl = iraf.txdump(img + ".sn.als", "xcen,ycen", expr='yes', Stdout=1) ff = open('tmptbl', 'w') for i in tmptbl: ff.write(i) ff.close() lra = int((2 * size * fwhm0) * 2) iraf.tvmark(1, "tmptbl", autol='no', mark="circle", number='yes', nyoffset=lra, radi=a2, txsize=2, inter='no') s1 = 1 s2 = -int(fwhm0) lsc.util.delete("tmptbl") ff = open('tmptbl', 'w') ff.write(str(s1) + ' ' + str(s2) + " FITTED") ff.close() iraf.tvmark(1, "tmptbl", autol='no', mark="none", inter='no', label='yes', txsize=2) _tmp1, _tmp2, goon = lsc.util.display_image('skyfit.fits', 1, z11, z22, False, _xcen=.75, _ycen=.25, _xsize=.3, _ysize=.3, _erase='no') s1 = 1 s2 = -int(fwhm0) lsc.util.delete("tmptbl") ff = open('tmptbl', 'w') ff.write(str(s1) + ' ' + str(s2) + " RESIDUAL") ff.close() iraf.tvmark(1, "tmptbl", autol='no', mark="none", inter='no', label='yes', txsize=2) newmag = list(zeros(len(truemag))) for i in range(0, len(truemag)): try: newmag[i] = float(truemag[i]) + float(dmag0) except: newmag[i] = float(dmag0) magerr[i] = 0.0 print truemag print newmag print "***************************************************************************" print "#id x_ori y_ori x y ap_ori ap_bgsub fit_mag err_art err_fit" for i in range(len(fitmag)): print "SN", i, str(centx[i] + x1), str(centy[i] + y1), str( centx[i]), str(centy[i]), " ", str(apori3[i]), " ", str( apmag3[i]), " ", str(newmag[i]), " ", str(arterr), " ", str( magerr[i]) print "**************************************************************************" return apori1, apori2, apori3, apmag1, apmag2, apmag3, fitmag, truemag, magerr, centx, centy, newmag
N += 1 meanmag = [] for i in range(0,len(magfiles)): meanmag.append(numpy.mean(magarray[i])) itera += 1 print len(magarray[0]),'calibration stars left after',itera,'iterations' # Write the coordinates if the calibration stars to file, display and check them f = open('calibcoords-final','w') for i in coordarray: f.write('%s' % i) f.close() iraf.display('../SCIENCE/' + image0,1) iraf.tvmark(1,'calibcoords-final',col=204, mark='circle', radii=12, number='yes') # Errors from the calibration stars norm_magarray = [] for i in range(0,len(magarray[0])): norm_magarray.append(list(magarray[:,i]-numpy.mean(magarray[:,i]))) cerr = [] norm_magarray = numpy.transpose(norm_magarray) for i in range(0,len(magfiles)): cerr.append(numpy.std(norm_magarray[i,:])) # Asteroid photometry astercoords = numpy.loadtxt('astrcoords') os.system('rm *.mag.2') for i in range(0,len(magfiles)): f = open('tmpcoords','w')
def fitsn(img, imgpsf, coordlist, _recenter, fwhm0, original, sn, residual, _show, _interactive, z11='', z22='', midpt='', size=7, apco0=0, dmax=51000, dmin=-500): import lsc lsc.util.delete("apori") lsc.util.delete(img + ".sn.mag") ################################# from pyraf import iraf import string iraf.imcoords(_doprint=0) iraf.digiphot(_doprint=0) iraf.daophot(_doprint=0) from iraf import digiphot from iraf import daophot from iraf import ptools a1 = int(fwhm0) a2 = int(2. * fwhm0 + .5) a3 = int(3. * fwhm0 + .5) a4 = int(4. * fwhm0 + .5) ap = str(a1) + "," + str(a2) + "," + str(a3) ######################################## if _recenter: answ = 'yes' else: answ = 'no' ######################################### hdr = lsc.util.readhdr(img + '.fits') _gain = lsc.util.readkey3(hdr, 'gain') _ron = lsc.util.readkey3(hdr, 'ron') _exptime = lsc.util.readkey3(hdr, 'exptime') _datamin = dmin _datamax = dmax iraf.noao.digiphot.daophot.photpars.zmag = 0 iraf.noao.digiphot.daophot.datapars.readnoi = _gain #1.4 #_ron iraf.noao.digiphot.daophot.datapars.epadu = _ron # 13 #_gain iraf.noao.digiphot.daophot.datapars.datamin = _datamin # -100 #_datamin iraf.noao.digiphot.daophot.datapars.datamax = _datamax iraf.noao.daophot.fitskypars.annulus = a3 iraf.noao.daophot.photpars.apertures = ap iraf.noao.digiphot.daophot.datapars.exposure = 'exptime' iraf.noao.digiphot.daophot.datapars.airmass = 'airmass' iraf.noao.digiphot.daophot.datapars.filter = 'filter2' iraf.noao.digiphot.daophot.daopars.psfrad = a4 # modify fitrad to 3 fwhm to see if works better iraf.noao.digiphot.daophot.daopars.fitrad = fwhm0 #* 3 iraf.noao.digiphot.daophot.daopars.sannulus = int(a4) iraf.noao.digiphot.daophot.daopars.recenter = answ iraf.noao.digiphot.daophot.daopars.fitsky = 'yes' # iraf.noao.digiphot.daophot.centerpars.cbox = 0 iraf.noao.digiphot.daophot.centerpars.cbox = 4 iraf.noao.digiphot.daophot.centerpars.calgori = 'gauss' # fitskypars.salgorithm = "constant" # fitskypars.skyvalue = 0 print '\n### recentering: ' + str(answ) if _show: iraf.noao.digiphot.daophot.phot(original, coordlist, "apori", veri='no') iraf.noao.digiphot.daophot.phot(sn, coordlist, img + ".sn.mag", veri='no') else: iraf.noao.digiphot.daophot.phot(original, coordlist, "apori", veri='no', verb='no') iraf.noao.digiphot.daophot.phot(sn, coordlist, img + ".sn.mag", veri='no', verb='no') lsc.util.delete(img + ".sn.als") print sn, imgpsf, img iraf.allstar(sn, img + ".sn.mag", imgpsf, img + ".sn.als", "", residual, veri='no', verb='no') lsc.util.delete("snfit.fits") iraf.imarith(sn + '.fits', "-", residual + '.fits', "snfit.fits") lsc.util.delete("skyfit.fits") iraf.imarith(original + '.fits', "-", "snfit.fits", "skyfit.fits") iraf.txsort(img + ".sn.als", "ID") tmptbl = iraf.txdump(img + ".sn.als", "mag,merr,xcenter,ycenter", expr='yes', Stdout=1) magerr, fitmag, centx, centy = [], [], [], [] for i in tmptbl: try: fitmag.append(float(string.split(i)[0])) #-2.5*log10(_exptime)) except: fitmag.append(string.split(i)[0]) try: magerr.append(float(string.split(i)[1])) except: magerr.append(string.split(i)[1]) centx.append(float(string.split(i)[2])) centy.append(float(string.split(i)[3])) tmptbl = iraf.txdump("apori", "mag", expr='yes', Stdout=1) apori1, apori2, apori3 = [], [], [] for i in tmptbl: try: apori1.append(float(string.split(i)[0])) #-2.5*log10(_exptime)) except: apori1.append(string.split(i)[0]) try: apori2.append(float(string.split(i)[1])) #-2.5*log10(_exptime)) except: apori2.append(string.split(i)[1]) try: apori3.append(float(string.split(i)[2])) #-2.5*log10(_exptime)) except: apori3.append(string.split(i)[2]) iraf.txsort(img + ".sn.mag", "YCENTER") tmptbl = iraf.txdump(img + ".sn.mag", "mag,magerr", expr='yes', Stdout=1) if _show: print "********************************************************************" print "ID <apmag on original> <apmag on bgsubt> fitmag truemag err_fit" print " ", a1, " ", a2, " ", a3, " ", a1, " ", a2, " ", a3 apmag1, apmag2, apmag3, truemag = [], [], [], [] for i in range(len(tmptbl)): try: apmag1.append(float(string.split( tmptbl[i])[0])) #-2.5*log10(_exptime)) except: apmag1.append(9999) try: apmag2.append(float(string.split( tmptbl[i])[1])) #-2.5*log10(_exptime)) except: apmag2.append(9999) try: apmag3.append(float(string.split( tmptbl[i])[2])) #-2.5*log10(_exptime)) except: apmag3.append(9999) try: truemag.append(fitmag[i] + float(apco0)) except: truemag.append('INDEF') if _show: print i, apori1[i], apori2[i], apori3[i], apmag1[i], apmag2[ i], apmag3[i], fitmag[i], truemag[i], magerr[i] if _show: print "********************************************************************" if _show: print midpt, z11, z22 _tmp1, _tmp2, goon = lsc.util.display_image(original + '.fits', 1, z11, z22, False, _xcen=.25, _ycen=.25, _xsize=.3, _ysize=.3) z01 = float(z11) - float(midpt) z02 = float(z22) - float(midpt) s1 = 1 s2 = -int(fwhm0) lsc.util.delete("tmptbl") ff = open('tmptbl', 'w') ff.write(str(s1) + ' ' + str(s2) + " ORIGINAL") ff.close() iraf.tvmark(1, "tmptbl", autol='no', mark="none", inter='no', label='yes', txsize=2) _tmp1, _tmp2, goon = lsc.util.display_image('snfit.fits', 1, z01, z02, False, _xcen=.25, _ycen=.75, _xsize=.3, _ysize=.3, _erase='no') lsc.util.delete("tmptbl") tmptbl0 = iraf.txdump(img + ".sn.als", "xcen,ycen", expr='yes', Stdout=1) ff = open('tmptbl', 'w') for i in tmptbl0: ff.write(i + '\n') ff.close() lra = int((2 * float(size) * float(fwhm0)) * 2) iraf.tvmark(1, "tmptbl", autol='no', mark="circle", number='yes', nyoffset=lra, radi=a2, txsize=2, inter='no') s1 = 1 s2 = -1 * int(fwhm0) lsc.util.delete("tmptbl") ff = open('tmptbl', 'w') ff.write(str(s1) + ' ' + str(s2) + " FITTED") ff.close() iraf.tvmark(1, "tmptbl", autol='no', mark="none", inter='no', label='yes', txsize=2) _tmp1, _tmp2, goon = lsc.util.display_image('skyfit.fits', 1, z11, z22, False, _xcen=.75, _ycen=.25, _xsize=.3, _ysize=.3, _erase='no') s1 = 1 s2 = -1 * int(fwhm0) lsc.util.delete("tmptbl") ff = open('tmptbl', 'w') ff.write(str(s1) + ' ' + str(s2) + " RESIDUAL") ff.close() iraf.tvmark(1, "tmptbl", autol='no', mark="none", inter='no', label='yes', txsize=2) return apori1, apori2, apori3, apmag1, apmag2, apmag3, fitmag, truemag, magerr, centx, centy
def manu(dmag0, apori1, apori2, apori3, apmag1, apmag2, apmag3, fitmag, truemag, magerr, centx, centy, z22, z11, midpt, size, fwhm0, img, x1, y1, arterr): from pyraf import iraf import string, os, sys from numpy import array a1 = int(fwhm0 + .5) a2 = int(2. * fwhm0 + .5) a3 = int(3. * fwhm0 + .5) a4 = int(4. * fwhm0 + .5) a5 = int(5. * fwhm0 + .5) ap = str(a1) + "," + str(a2) + "," + str(a3) fdmag = 10**(-0.4 * float(dmag0)) iraf.delete(",_snfit.fit?,skyfit.fit?", ve='no') iraf.imarith("snfit", "*", fdmag, "_snfit") iraf.imarith("original", "-", "_snfit", "skyfit") iraf.display("original", 1, fill='yes', xcen=.25, ycen=.25, xsize=.3, ysize=.3, zscal='no', zrang='no', z2=z22, z1=z11) z01 = z11 - midpt z02 = z22 - midpt s1 = 1 s2 = -int(fwhm0) iraf.delete("tmptbl", ve='no') ff = open('tmptbl', 'w') ff.write(str(s1) + ' ' + str(s2) + " ORIGINAL") ff.close() iraf.tvmark(1, "tmptbl", autol='yes', mark="none", inter='no', label='yes', txsize=2) iraf.display("_snfit", 1, erase='no', fill='yes', xcen=.25, ycen=.75, xsize=.3, ysize=.3, zscal='no', zrang='no', z2=z02, z1=z01) iraf.delete("tmptbl", ve='no') tmptbl = iraf.txdump(img + ".sn.als", "xcen,ycen", expr='yes', Stdout=1) ff = open('tmptbl', 'w') for i in tmptbl: ff.write(i) ff.close() lra = int((2 * size * fwhm0) * 2) iraf.tvmark(1, "tmptbl", autol='no', mark="circle", number='yes', nyoffset=lra, radi=a2, txsize=2, inter='no') s1 = 1 s2 = -int(fwhm0) iraf.delete("tmptbl", ve='no') ff = open('tmptbl', 'w') ff.write(str(s1) + ' ' + str(s2) + " FITTED") ff.close() iraf.tvmark(1, "tmptbl", autol='no', mark="none", inter='no', label='yes', txsize=2) iraf.display("skyfit", 1, erase='no', fill='yes', xcen=.75, ycen=.25, xsize=.3, ysize=.3, zscal='no', zrang='no', z2=z22, z1=z11) s1 = 1 s2 = -int(fwhm0) iraf.delete("tmptbl", ve='no') ff = open('tmptbl', 'w') ff.write(str(s1) + ' ' + str(s2) + " RESIDUAL") ff.close() iraf.tvmark(1, "tmptbl", autol='no', mark="none", inter='no', label='yes', txsize=2) # newmag=truemag # for i in range(0,len(truemag)): # try: # newmag[i]=float(truemag[i])+float(dmag0) # except: # newmag[i]=float(dmag0) newmag = list(array(truemag) + float(dmag0)) print "***************************************************************************" print "#id x_ori y_ori x y ap_ori ap_bgsub fit_mag err_art err_fit" for i in range(len(fitmag)): print "SN", i, str(centx[i] + x1), str(centy[i] + y1), str( centx[i]), str(centy[i]), " ", str(apori3[i]), " ", str( apmag3[i]), " ", str(newmag[i]), " ", str(arterr), " ", str( magerr[i]) print "**************************************************************************" return apori1, apori2, apori3, apmag1, apmag2, apmag3, fitmag, truemag, magerr, centx, centy, newmag
def transformcoords(im1, im2): checkxy = 1 infile = '/Users/rfinn/clusters/spitzer/Mastertables/' + prefix + 'mastertable24.dat' input = open(infile, 'r') i = 0 k = 0 era = [] #ediscs ra edec = [] #ediscs dec excorr = [] #ediscs x pixel position eycorr = [] #ediscs y pixel position for line in input: if line.find('#') > -1: #skip lines with '#' in them continue if line.find('\\') > -1: #skip lines with '#' in them continue if line.find('|') > -1: #skip lines with '#' in them continue t = line.split() #break up columns & save ra and dec era.append(float(t[1])) edec.append(float(t[2])) excorr.append(float(t[3])) eycorr.append(float(t[4])) input.close() era = N.array(era, 'd') edec = N.array(edec, 'd') excorr = N.array(excorr, 'd') eycorr = N.array(eycorr, 'd') output = prefix + 'radec.dat' out1 = open(output, 'w') for i in range(len(era)): s = "%14.10f %14.10f \n" % (era[i], edec[i]) out1.write(s) out1.close() output = prefix + '-ediscsxy.dat' #now contains xcorr, ycorr out1 = open(output, 'w') for i in range(len(era)): s = "%14.10f %14.10f \n" % (excorr[i], eycorr[i]) out1.write(s) out1.close() #transform ra and dec to x and y coords on ediscs image using ediscs i band image #write era and edec to a file outfile = output #outfile=prefix+'-ediscsxy.dat'#file containing x and y pixels values on ediscs iband image #iraf.wcsctran(output,outfile,image=im2,inwcs='world',outwcs='physical',columns='1 2', verbose='no') if checkxy > 0: iraf.display(im2, 1, fill='yes') iraf.tvmark(1, outfile, color=204, radii=15) #iraf.tvmark(1,output,color=204,radii=15)#plot xcorr and ycorr instead of transformed coordinates flag = raw_input("Enter 0 to terminate now or 1 to continue \n") if flag < 0.1: return dbase = prefix + '-match-geomap' outfile2 = prefix + '-GMOSxy.dat' #file containing x and y pixels values on gmos image iraf.geoxytran(outfile, output=outfile2, database=dbase, transform='gmos', direction='backward') if checkxy > 0: iraf.display(im1, 2, fill='yes') iraf.tvmark(2, outfile2, color=204, radii=15) im3 = 'g' + im2 iraf.display(im3, 3, fill='yes') iraf.tvmark(3, outfile2, color=204, radii=15) flag = raw_input("Enter anything to continue \n")
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 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 fitsn(_recenter, img, imgpsf, fwhm0, apco0, z22, z11, midpt, size, nor, _values, DM): from pyraf import iraf import string, os, sys from numpy import log10 a1 = int(fwhm0 + .5) a2 = int(2. * fwhm0 + .5) a3 = int(3. * fwhm0 + .5) a4 = int(4. * fwhm0 + .5) a5 = int(5. * fwhm0 + .5) ap = str(a1) + "," + str(a2) + "," + str(a3) iraf.digiphot(_doprint=0) iraf.daophot(_doprint=0) from iraf import digiphot from iraf import daophot from iraf import ptools zmag = 0 iraf.noao.digiphot.daophot.photpars.zmag = zmag iraf.delete("apori", verify='no') iraf.delete(img + ".sn.mag", verify='no') iraf.noao.digiphot.daophot.phot("original", img + ".sn.coo", "apori", veri='no') iraf.noao.digiphot.daophot.phot("sn", img + ".sn.coo", img + ".sn.mag", veri='no') iraf.noao.digiphot.daophot.daopars.psfrad = a4 iraf.noao.digiphot.daophot.daopars.fitrad = fwhm0 iraf.noao.digiphot.daophot.daopars.fitsky = 'no' iraf.noao.digiphot.daophot.daopars.sannulus = int(a4) if _recenter: answ = raw_input(">>> recentering for targets [yes/no] ? [yes] ") if not answ: answ = 'yes' else: answ = 'yes' iraf.noao.digiphot.daophot.daopars.recenter = answ iraf.noao.digiphot.daophot.daopars.fitsky = 'yes' iraf.delete(img + ".sn.als", verify='no') iraf.allstar("sn", img + ".sn.mag", imgpsf, img + ".sn.als", "", "residual", veri='no', verb='no') iraf.delete("snfit.fits", verify='no') iraf.imarith("sn", "-", "residual", "snfit") iraf.delete("skyfit.fits", verify='no') iraf.imarith("original", "-", "snfit", "skyfit") iraf.txsort(img + ".sn.als", "ID") tmptbl = iraf.txdump(img + ".sn.als", "mag,merr,xcenter,ycenter", expr='yes', Stdout=1) magerr, fitmag, centx, centy = [], [], [], [] for i in tmptbl: try: fitmag.append(float(string.split(i)[0])) #+2.5*log10(nor)) except: fitmag.append('INDEF') try: magerr.append(float(string.split(i)[1])) except: magerr.append('INDEF') centx.append(float(string.split(i)[2])) centy.append(float(string.split(i)[3])) tmptbl = iraf.txdump("apori", "mag", expr='yes', Stdout=1) apori1, apori2, apori3 = [], [], [] for i in tmptbl: try: apori1.append( float(string.split(i)[0]) - float(_values) - float(DM)) #+2.5*log10(nor) except: apori1.append('INDEF') try: apori2.append( float(string.split(i)[1]) - float(_values) - float(DM)) #+2.5*log10(nor) except: apori2.append('INDEF') try: apori3.append( float(string.split(i)[2]) - float(_values) - float(DM)) #+2.5*log10(nor) except: apori3.append('INDEF') iraf.txsort(img + ".sn.mag", "YCENTER") tmptbl = iraf.txdump(img + ".sn.mag", "mag,magerr", expr='yes', Stdout=1) print "********************************************************************" print "ID <apmag on original> <apmag on bgsubt> fitmag truemag err_fit" print " ", a1, " ", a2, " ", a3, " ", a1, " ", a2, " ", a3 apmag1, apmag2, apmag3, truemag = [], [], [], [] for i in range(len(tmptbl)): try: apmag1.append( float(string.split(tmptbl[i])[0]) - float(_values) - float(DM)) #+2.5*log10(nor) except: apmag1.append('INDEF') try: apmag2.append( float(string.split(tmptbl[i])[1]) - float(_values) - float(DM)) #+2.5*log10(nor) except: apmag2.append('INDEF') try: apmag3.append( float(string.split(tmptbl[i])[2]) - float(_values) - float(DM)) #+2.5*log10(no) except: apmag3.append('INDEF') try: truemag.append( float(fitmag[i]) + float(apco0) + 2.5 * log10(nor) - float(_values) - float(DM)) except: truemag.append('INDEF') print i, apori1[i], apori2[i], apori3[i], apmag1[i], apmag2[i], apmag3[ i], fitmag[i], truemag[i], magerr[i] print "********************************************************************" iraf.display("original", 1, fill='yes', xcen=.25, ycen=.25, xsize=.3, ysize=.3, zscal='no', zrang='no', z2=z22, z1=z11) z01 = z11 - midpt z02 = z22 - midpt s1 = 1 s2 = -int(fwhm0) iraf.delete("tmptbl", ve='no') ff = open('tmptbl', 'w') ff.write(str(s1) + ' ' + str(s2) + " ORIGINAL") ff.close() iraf.tvmark(1, "tmptbl", autol='no', mark="none", inter='no', label='yes', txsize=2) iraf.display("snfit", 1, erase='no', fill='yes', xcen=.25, ycen=.75, xsize=.3, ysize=.3, zscal='no', zrang='no', z2=z02, z1=z01) iraf.delete("tmptbl", ve='no') tmptbl0 = iraf.txdump(img + ".sn.als", "xcen,ycen", expr='yes', Stdout=1) ff = open('tmptbl', 'w') for i in tmptbl0: ff.write(i + '\n') ff.close() lra = int((2 * float(size) * float(fwhm0)) * 2) iraf.tvmark(1, "tmptbl", autol='no', mark="circle", number='yes', nyoffset=lra, radi=a2, txsize=2, inter='no') s1 = 1 s2 = -1 * int(fwhm0) iraf.delete("tmptbl", ve='no') ff = open('tmptbl', 'w') ff.write(str(s1) + ' ' + str(s2) + " FITTED") ff.close() iraf.tvmark(1, "tmptbl", autol='no', mark="none", inter='no', label='yes', txsize=2) iraf.display("skyfit", 1, erase='no', fill='yes', xcen=.75, ycen=.25, xsize=.3, ysize=.3, zscal='no', zrang='no', z2=z22, z1=z11) s1 = 1 s2 = -1 * int(fwhm0) iraf.delete("tmptbl", ve='no') ff = open('tmptbl', 'w') ff.write(str(s1) + ' ' + str(s2) + " RESIDUAL") ff.close() iraf.tvmark(1, "tmptbl", autol='no', mark="none", inter='no', label='yes', txsize=2) print '###' print '### magnitude scaled to target exposure time using: ' + str( 2.5 * log10(nor)) print '### fit magnitude corrected with aperture correction: ' + str( float(apco0)) print '### magnitude scaled to target using DM: ' + str(DM) print '###' return apori1, apori2, apori3, apmag1, apmag2, apmag3, fitmag, truemag, magerr, centx, centy
xpa('catalog save sb "' + userPath + '/tmp.catsel"') xpa('raise') iraf.fields('tmp.catsel', '1,2', Stdout='tmp.tv') answ = 'no' while answ != 'yes': print '>> Identify (minimum 2, preferably 3) reference stars (mark with "a") in your image' iraf.imexamine(img, 1, logfile='tmp.coo', keeplog='yes') iraf.tvmark(1, 'tmp.coo', mark="circle", number='yes', radii=10, nxoffse=10, nyoffse=10, color=214, txsize=2) xycoo = iraf.fields('tmp.coo', '1,2,13', Stdout=1) print '>> Identify reference stars' idcat = [] for i in range(len(xycoo)): idcat.append(int(raw_input('Star ' + str(i + 1) + '= ? '))) ff = open('tmp.catsel') rr = ff.readlines() ff.close() for i in range(len(rr)): if rr[i].split('\t')[0] == '_RAJ2000': istart = i
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'
def completeness():#measure completeness on final image #combinepath=bcdpath+'pbcd/Combine/output_apex_step2' combinepath=bcdpath+'pbcd/Combine/apex_1frame_step2' os.chdir(combinepath) file='mosaic_extract_final.tbl' input=open(file,'r') xgal=[]#positions of previous detections with snr > 3 ygal=[] fap4gal=[] for line in input: if line.find('#') > -1: #skip lines with '#' in them continue if line.find('\\') > -1: #skip lines with '#' in them continue if line.find('|') > -1: #skip lines with '#' in them continue t=line.split() xgal.append(float(t[8])) ygal.append(float(t[10])) fap4gal.append(float(t[28])) input.close() xgal=N.array(xgal,'f') ygal=N.array(ygal,'f') fsimall=[] matchflagsimall=[] f2all=[] f3all=[] f4all=[] deblendsimall=[] snrsimall=[] myminmag=24.75 mymaxmag=27.4 myfmin=10.**((25.-mymaxmag)/2.5)#ZP=25 myfmax=10.**((25.-myminmag)/2.5)#ZP=25 #below is loop to create image w/artificial sources, extract, and compare for k in range(100): createflag=1.#create image w/artificial sources? detectflag=1.#detect sources in image? if createflag > 0.1: xnoise=[] ynoise=[] infile=open('noisecoords.dat','r') for line in infile: t=line.split() xnoise.append(float(t[0])) ynoise.append(float(t[1])) infile.close() nstar=10 xsim=N.zeros(nstar,'d') ysim=N.zeros(nstar,'d') msim=N.zeros(nstar,'d') outfile=open('stars.coords.dat','w') for i in range(nstar): #j=int(round(1.*len(xnoise)*random.uniform(0,1))) #xsim[i]=xnoise[j] #ysim[i]=ynoise[j] j=0 for j in range(10000): xt=int(round(random.uniform(5.,125.))) yt=int(round(random.uniform(5.,140.))) d=pylab.sqrt((xt-xgal)**2+(yt-ygal)**2)#make sure sim galaxies are not near real galaxies if min(d) > -1.: d2=pylab.sqrt((xt-xsim)**2+(yt-ysim)**2)#make sure sim points are not on top of each other if min(d2) > 5.: print i,'got a good point after ',j,' tries',xt,yt break j=j+1 xsim[i]=xt ysim[i]=yt k=random.uniform(myfmin,myfmax) msim[i]=25.-2.5*pylab.log10(k) #print k,msim[i] s='%8.2f %8.2f %8.2f \n' % (xsim[i],ysim[i],msim[i]) outfile.write(s) outfile.close() #os.system('rm stars.coords.dat') #iraf.starlist('stars.coords.dat',nstars=100,spatial='uniform',xmax=130,ymax=145,luminosity='uniform',minmag=22.,maxmag=30.0,mzero=22.0,sseed='INDEF',power=0.6,alpha=0.74,lseed='INDEF') os.system('rm mosaic-completeness.fits') #iraf.mkobjects(input='mosaic_minus_median_extract.fits',output='mosaic-completeness.fits',objects='stars.coords.dat',radius=1.13,magzero=25.,background=0.,gain=5.,rdnoise=0.,poisson='no')#don't convolve w/PRF #os.system('cp ../cal/MIPS24_PRF_HD_center.fits .')#convolve star w/SSC PRF os.system('cp ../cal/mips24_prf_mosaic_2.45_4x.fits .')#convolve star w/SSC PRF iraf.mkobjects(input='mosaic_minus_median_extract.fits',output='mosaic-completeness.fits',objects='stars.coords.dat',radius=14,star='mips24_prf_mosaic_2.45_4x.fits',magzero=25.,background=0.,gain=5.,rdnoise=0.,poisson='no') #os.system('cp ../cal/PRF_estimate.fits .')#convolve gaussian w/measured PRF #iraf.mkobjects(input='mosaic_minus_median_extract.fits',output='mosaic-completeness.fits',objects='stars.coords.dat',radius=15,star='PRF_estimate.fits',magzero=25.,background=0.,gain=5.,rdnoise=0.,poisson='no') os.system('ls *.fits') os.system('pwd') iraf.display('mosaic_minus_median_extract.fits',1,contrast=0.01) iraf.display('mosaic-completeness.fits',2,contrast=0.01) iraf.tvmark(1,'stars.coords.dat') iraf.tvmark(2,'stars.coords.dat') fsim=10.**((25.-msim)/2.5)#ZP=25 if createflag < .1:#read in positions and magnitudes of artdata sources xsim=[] ysim=[] msim=[] infile=open('stars.coords.dat','r') for line in infile: if line.find('#') > -1: continue t=line.split() xsim.append(float(t[0])) ysim.append(float(t[1])) msim.append(float(t[2])) infile.close() xsim=N.array(xsim,'f') ysim=N.array(ysim,'f') msim=N.array(msim,'f') fsim=10.**((25.-msim)/2.5)#ZP=25 if detectflag > 0.1:#now run detection on mosaic-completeness.fits combinepath=bcdpath+'pbcd/Combine/' os.chdir(combinepath) print combinepath #os.system('apex_1frame.pl -n apex_1frame_MIPS24_step2.nl -i output_apex_step2/mosaic-completeness.fits') #combinepath=bcdpath+'pbcd/Combine/output_apex_step2' os.system('apex_1frame.pl -n apex_1frame_step2all.nl -i apex_1frame_step2/mosaic-completeness.fits') combinepath=bcdpath+'pbcd/Combine/apex_1frame_step2' os.chdir(combinepath) print combinepath file='mosaic-completeness_extract_raw.tbl' input=open(file,'r') ngal=0 for line in input: if line.find('Conversion') > -1: t=line.split('=') convfactor=float(t[1])#conversion from ADU to uJy #aperr=aveaperr*convfactor #convert noise in ADU to uJy using conv factor from apex print "Conversion Factor = ",convfactor #print "aveaperr = ",aveaperr #print "aperr = ",aperr continue if line.find('#') > -1: #skip lines with '#' in them continue if line.find('\\') > -1: #skip lines with '#' in them continue if line.find('|') > -1: #skip lines with '#' in them continue ngal=ngal+1 input.close() id24 = N.zeros(ngal,'f') imagex24 = N.zeros(ngal,'f') imagey24 = N.zeros(ngal,'f') ra24 = N.zeros(ngal,'f') dec24 = N.zeros(ngal,'f') f24 = N.zeros(ngal,'d')#flux errf24 = N.zeros(ngal,'d') fap1 = N.zeros(ngal,'d')#flux in aperture 1 (1,1.5,2,2.6,3,3.5,4,4.5,5.,5.5) pixels fap2 = N.zeros(ngal,'d')#flux fap3 = N.zeros(ngal,'d')#flux fap4 = N.zeros(ngal,'d')#flux in ap 4 - this is one w/ap cor of 1.67 (Calzetti et al 2007) fap5 = N.zeros(ngal,'d')#flux fap6 = N.zeros(ngal,'d')#flux fap7 = N.zeros(ngal,'d')#flux fap8 = N.zeros(ngal,'d')#flux fap9 = N.zeros(ngal,'d')#flux fap10 = N.zeros(ngal,'d')#flux snr24 = N.zeros(ngal,'d')#SNR calculated by mopex deblend = N.zeros(ngal,'f')#SNR calculated by mopex input=open(file,'r') i=0 output=open('xy24raw.dat','w') for line in input: if line.find('#') > -1: #skip lines with '#' in them continue if line.find('\\') > -1: #skip lines with '#' in them continue if line.find('|') > -1: #skip lines with '#' in them continue t=line.split() #print "length of t = ",len(t) #print (t[8]),(t[10]),(t[13]),(t[14]),(t[18]),(t[2]),(t[23]),(t[24]),(t[25]),(t[26]),(t[27]),(t[28]),(t[29]),(t[30]),(t[31]),(t[32]) (imagex24[i],imagey24[i],f24[i],errf24[i],snr24[i],deblend[i],fap1[i],fap2[i],fap3[i],fap4[i],fap5[i],fap6[i],fap7[i],fap8[i],fap9[i],fap10[i])=(float(t[8]),float(t[10]),float(t[13]),float(t[14]),float(t[18]),float(t[2]),float(t[25]),float(t[26]),float(t[27]),float(t[28]),float(t[29]),float(t[30]),float(t[31]),float(t[32]),float(t[33]),float(t[34])) s='%6.2f %6.2f \n'%(imagex24[i],imagey24[i]) output.write(s) i=i+1 input.close()#44 -> 43 output.close() iraf.tvmark(1,'xy24raw.dat',color=204,radi=2) iraf.tvmark(2,'xy24raw.dat',color=204,radi=2) delta=1.#max number of pixels for a match #get rid of objects that were detected in original image. Otherwise, matching will think any object near a sim galaxy is the sim galaxy. A faint galaxy placed on type of a pre-existing bright galaxy will be detected. newgalflag=N.ones(len(imagex24),'i') for i in range(len(imagex24)): (imatch, matchflag,nmatch)=findnearest(imagex24[i],imagey24[i],xgal,ygal,delta) if matchflag > 0.: dflux=abs(fap4gal[imatch] - fap4[i])/fap4[i] if dflux < .1:#position of real galaxy, flux difference less than 10% -> not a new galaxy newgalflag[i] = 0 #keep only galaxies that are new imagex24 = N.compress(newgalflag,imagex24) imagey24 = N.compress(newgalflag,imagey24) fap1 = N.compress(newgalflag,fap1) fap2 = N.compress(newgalflag,fap2) fap3 = N.compress(newgalflag,fap3) fap4 = N.compress(newgalflag,fap4) fap5 = N.compress(newgalflag,fap5) fap6 = N.compress(newgalflag,fap6) fap7 = N.compress(newgalflag,fap7) fap8 = N.compress(newgalflag,fap8) fap9 = N.compress(newgalflag,fap9) fap10 =N.compress(newgalflag,fap10) snr24 =N.compress(newgalflag,snr24) deblend = N.compress(newgalflag,deblend) delta=2.#max number of pixels for a match matchflagsim=N.zeros(len(xsim),'i') fmeas1=N.zeros(len(xsim),'f') fmeas2=N.zeros(len(xsim),'f') fmeas3=N.zeros(len(xsim),'f') fmeas4=N.zeros(len(xsim),'f') fmeas5=N.zeros(len(xsim),'f') fmeas6=N.zeros(len(xsim),'f') fmeas7=N.zeros(len(xsim),'f') fmeas8=N.zeros(len(xsim),'f') fmeas9=N.zeros(len(xsim),'f') fmeas10=N.zeros(len(xsim),'f') fmeas24=N.zeros(len(xsim),'f') deblendsim=N.zeros(len(xsim),'f') snrsim=N.zeros(len(xsim),'f') for i in range(len(xsim)): (imatch, matchflag,nmatch)=findnearest(xsim[i],ysim[i],imagex24,imagey24,delta) matchflagsim[i]=matchflag if matchflag > .1: fmeas1[i]=fap1[int(imatch)] fmeas2[i]=fap2[int(imatch)] fmeas3[i]=fap3[int(imatch)] fmeas4[i]=fap4[int(imatch)] fmeas5[i]=fap5[int(imatch)] fmeas6[i]=fap6[int(imatch)] fmeas7[i]=fap7[int(imatch)] fmeas8[i]=fap8[int(imatch)] fmeas9[i]=fap9[int(imatch)] fmeas10[i]=fap10[int(imatch)] fmeas24[i]=f24[int(imatch)] deblendsim[i]=deblend[int(imatch)] snrsim[i]=snr24[int(imatch)] fsimall=fsimall+list(fsim) matchflagsimall=matchflagsimall+list(matchflagsim) f2all=f2all+list(fmeas2) f3all=f3all+list(fmeas3) f4all=f4all+list(fmeas4) deblendsimall=deblendsimall+list(deblendsim) snrsimall=snrsimall+list(snrsim) fsim=N.array(fsimall,'f') matchflagsim=N.array(matchflagsimall,'f') fmeas2=N.array(f2all,'f') fmeas3=N.array(f3all,'f') fmeas4=N.array(f4all,'f') deblendsim=N.array(deblendsimall,'f') snrsim=N.array(snrsimall,'f') #make plots using all realizations pylab.cla() pylab.clf() fsim=fsim*convfactor fs=pylab.compress((matchflagsim > 0.1) & (deblendsim < 1.5),fsim) #f1=pylab.compress((matchflagsim > 0.1) & (deblendsim < 1.5),fmeas1) f2=pylab.compress((matchflagsim > 0.1) & (deblendsim < 1.5),fmeas2) f3=pylab.compress((matchflagsim > 0.1) & (deblendsim < 1.5),fmeas3) f4=pylab.compress((matchflagsim > 0.1) & (deblendsim < 1.5),fmeas4) #f242=pylab.compress((matchflagsim > 0.1) & (deblendsim < 1.5),fmeas24) r4=pylab.median(fs/f4) r3=pylab.median(fs/f3) r2=pylab.median(fs/f2) print "average ratios ap 4",pylab.average(fs/f4),r4,pylab.std((fs/f4)/pylab.average(fs/f2)) print "average ratios ap 3",pylab.average(fs/f3),pylab.median(fs/f3),pylab.std((fs/f3)/pylab.average(fs/f3)) print "average ratios ap 2",pylab.average(fs/f2),pylab.median(fs/f2),pylab.std((fs/f2)/pylab.average(fs/f2)) s='f4 w/apcor = %3.2f(%4.2f)'%(r4,pylab.average(abs(fs-f4*r4)/fs)) pylab.plot(fs,f4*r4,'b.',label=s) pylab.plot(fs,f4,'bo',label='f4') s='f3 w/apcor = %3.2f(%4.2f)'%(r3,pylab.average(abs(fs-f3*r3)/fs)) pylab.plot(fs,f3*r3,'g.',label=s) pylab.plot(fs,f3,'go',label='f3') s='f2 w/apcor = %3.2f(%4.2f)'%(r2,pylab.average(abs(fs-f2*r2)/fs)) pylab.plot(fs,f2*r2,'r.',label=s) pylab.plot(fs,f2,'ro',label='f2') #pylab.plot(fs,f1,'co',label='f1') #pylab.plot(fs,f242,'k.',label='f24') pylab.legend(loc='best') x=N.arange(0.,max(fs),10.) y=x pylab.plot(x,y,'k-') #y=2.*x #pylab.plot(x,y,'k--') #y=3.*x #pylab.plot(x,y,'k--') #y=4.*x #pylab.plot(x,y,'k--') #y=5.*x #pylab.plot(x,y,'k--') pylab.xlabel('F(24) Input') pylab.ylabel('F(24) measured') #pylab.axis([0.,50.,0.,50.]) s=str(prefix)+'fluxcomp.eps' pylab.savefig(s) pylab.cla() pylab.clf() nbins=20 fmin=10.#min(fsim) fmax=max(fsim) df=5.#(fmax-fmin)/(1.*nbins) bins=N.arange(fmin,(fmax+df),df) (xbin,ybin,ybinerr)=mystuff.completeness(bins,fsim,matchflagsim) s=str(prefix)+'FracComplvsFlux.dat' outdat=open(s,'w') print "Completeness vs Input Flux" for i in range(len(xbin)): print i, xbin[i],ybin[i],ybinerr[i] t='%8.2f %8.4f %8.4f\n'%(xbin[i],ybin[i],ybinerr[i]) outdat.write(t) outdat.close() #for i in range(len(fsim)): #if snrsim[i] > 3.: # print i, fsim[i],matchflagsim[i],deblendsim[i],abs(fsim[i]-fmeas4[i]*1.67)/fsim[i],snrsim[i] #(xbin,ybin2,ybin2err)=mystuff.scipyhist2(bins,fmeas4) #pylab.plot(xbin,ybin,'bo') #pylab.plot(xbin,ybin2,'ro') #s=str(prefix)+'NDetectvsFlux.eps' #pylab.savefig(s) pylab.cla() pylab.clf() pylab.plot(xbin,ybin,'ko') pylab.errorbar(xbin,ybin,yerr=ybinerr,fmt=None,ecolor='k') s=str(prefix)+'FracComplvsFlux.eps' pylab.axhline(y=1.0,ls='-') pylab.axhline(y=.8,ls='--') pylab.axvline(x=80.0,ls=':',color='b') pylab.xlabel('Input Flux (uJy)') pylab.ylabel('Completeness') pylab.axis([0.,max(xbin)+df,-.05,1.05]) pylab.savefig(s) os.system('cp *.eps /Users/rfinn/clusters/spitzer/completeness/.') os.system('cp *vsFlux.dat /Users/rfinn/clusters/spitzer/completeness/.')
def manusn(img,imgpsf,dmag0,apori1,apori2,apori3,apmag1,apmag2,apmag3,fitmag,truemag,magerr,centx,centy,z11,z22,midpt,size,fwhm0,x1,y1,arterr): from pyraf import iraf import lsc import string,re,sys,os from numpy import zeros a2 = int(2.*fwhm0+.5) fdmag = 10**(-0.4*float(dmag0)) lsc.util.delete(",_snfit.fit?,skyfit.fit?,_snfit.ar?") if truemag[0]=='INDEF': print 'ACTUNG' magerr[0]=0.0 lsc.util.delete('test.fits') os.system('echo '+str(iraf.field(img+'.sn.coo', field='1,2', Stdout=1)[0])+' '+dmag0+' > dddd') iraf.addstar("snfit","dddd",imgpsf,"_snfit",nstar=1,veri='no',simple='yes',verb='yes') lsc.util.delete('dddd') else: iraf.imarith("snfit.fits","*",fdmag,"_snfit.fits") iraf.imarith("original.fits","-","_snfit.fits","skyfit.fits") _tmp1,_tmp2,goon=lsc.util.display_image('original.fits',1, z11, z22, False, _xcen=.25, _ycen=.25, _xsize=.3, _ysize=.3) print z11,z22,midpt z01 = float(z11)-float(midpt) z02 = float(z22)-float(midpt) s1 = 1 s2 = -int(fwhm0) lsc.util.delete("tmptbl") ff=open('tmptbl','w') ff.write(str(s1)+' '+str(s2)+" ORIGINAL") ff.close() iraf.tvmark(1,"tmptbl",autol='yes',mark="none",inter='no',label='yes',txsize=2) _tmp1,_tmp2,goon=lsc.util.display_image('_snfit.fits',1, z01, z02, False, _xcen=.25, _ycen=.75, _xsize=.3, _ysize=.3, _erase='no') lsc.util.delete("tmptbl") tmptbl=iraf.txdump(img+".sn.als","xcen,ycen",expr='yes', Stdout=1) ff=open('tmptbl','w') for i in tmptbl: ff.write(i) ff.close() lra = int((2*size*fwhm0)*2) iraf.tvmark(1,"tmptbl",autol='no',mark="circle", number='yes',nyoffset=lra,radi=a2,txsize=2,inter='no') s1 = 1 s2 = -int(fwhm0) lsc.util.delete("tmptbl") ff=open('tmptbl','w') ff.write(str(s1)+' '+str(s2)+" FITTED") ff.close() iraf.tvmark(1,"tmptbl",autol='no',mark="none",inter='no',label='yes',txsize=2) _tmp1,_tmp2,goon=lsc.util.display_image('skyfit.fits',1, z11, z22, False, _xcen=.75, _ycen=.25, _xsize=.3, _ysize=.3, _erase='no') s1 = 1 s2 = -int(fwhm0) lsc.util.delete("tmptbl") ff=open('tmptbl','w') ff.write(str(s1)+' '+str(s2)+" RESIDUAL") ff.close() iraf.tvmark(1,"tmptbl",autol='no',mark="none",inter='no',label='yes',txsize=2) newmag=list(zeros(len(truemag))) for i in range(0,len(truemag)): try: newmag[i]=float(truemag[i])+float(dmag0) except: newmag[i]=float(dmag0) magerr[i]=0.0 print truemag print newmag print "***************************************************************************" print "#id x_ori y_ori x y ap_ori ap_bgsub fit_mag err_art err_fit" for i in range(len(fitmag)): print "SN",i,str(centx[i]+x1),str(centy[i]+y1),str(centx[i]),str(centy[i])," ",str(apori3[i])," ",str(apmag3[i])," ",str(newmag[i])," ",str(arterr)," ",str(magerr[i]) print "**************************************************************************" return apori1,apori2,apori3,apmag1,apmag2,apmag3,fitmag,truemag,magerr,centx,centy,newmag
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
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=5, nxoffse=5, nyoffse=5, color=214, txsize=4) _z1, _z2, goon = src.display_image(img, 1, '', '', False) if not goon: src.close_program(logincl) iraf.tvmark(1, 'tmp.' + _filter + '.coo', mark="circle", number='no', label='yes', radii=5, nxoffse=5,
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'
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') a1, a2, a3, a4, = float(5. / _pixelscale), float(5. / _pixelscale), float(8. / _pixelscale), float( 10. / _pixelscale) zmag= 0 #25