def plant(image,psf,outfile,list,dtime): import pyfits,os import numarray as N psf_f=pyfits.open(psf) psf_flux=psf_f[0].data.sum() psf_x_size=psf_f[0].header.get('NAXIS1',0) psf_y_size=psf_f[0].header.get('NAXIS2',0) psf_x=psf_f[0].header.get('PSF_X',0) psf_y=psf_f[0].header.get('PSF_Y',0) psf_mag=psf_f[0].header.get('PSFMAG',26.0) image_f=pyfits.open(image) xmax=image_f[0].header.get('NAXIS1',0) ymax=image_f[0].header.get('NAXIS2',0) exptime=image_f[0].header.get('EXPTIME',1) zeropoint=image_f[0].header.get('PHOT_C',26.5) import mop_files ahdu=mop_files.read(list) import string,math,re from numarray.nd_image.interpolation import shift as shift from string import atof for i in range(len(ahdu['data']['x'])): x=float(ahdu['data']['x'][i]) y=float(ahdu['data']['y'][i]) mag=float(ahdu['data']['mag'][i]) rate=float(ahdu['data']['pix_rate'][i])/3600.0 angle=float(ahdu['data']['angle'][i]) x_shift_rate=rate*math.cos(angle/57.3) y_shift_rate=rate*math.sin(angle/57.3) #flux=exptime*10**((zeropoint-mag)/2.5) #scale=flux/psf_flux scale=10**((psf_mag-mag)/2.5)*exptime #print scale niter=int(rate*exptime)+1 scale=scale/niter dt = exptime/niter #print x,y,mag,niter for i in range(niter): curtime = dtime+dt*i x=x+x_shift_rate*curtime y=y+y_shift_rate*curtime x1=int(max(0,x-psf_x)) x2=int(min(xmax,x+psf_x_size-psf_x)) y1=int(max(0,y-psf_y)) y2=int(min(ymax,y+psf_y_size-psf_y)) #print x2,x1,y2,y1 px1=int((psf_x-(x-x1))) px2=int(px1+(x2-x1)) py1=int(psf_y-(y-y1)) py2=int(py1+(y2-y1)) sec = psf_f[0].data[py1:py2,px1:px2].copy() sec = shift(sec,(y-int(y),x-int(x)),order=3) #print sec.shape,y2-y1,x2-x1 #print "Adding @ ",x,y,mag,scale," data=> ",y1,y2,x1,x2," PSF=> ",py1,py2,px1,px2 image_f[0].data[y1:y2,x1:x2]+=scale*sec image_f.writeto(outfile) image_f.close()
def plant(image, psf, outfile, list, dtime): import pyfits, os import numarray as N psf_f = pyfits.open(psf) psf_flux = psf_f[0].data.sum() psf_x_size = psf_f[0].header.get('NAXIS1', 0) psf_y_size = psf_f[0].header.get('NAXIS2', 0) psf_x = psf_f[0].header.get('PSF_X', 0) psf_y = psf_f[0].header.get('PSF_Y', 0) psf_mag = psf_f[0].header.get('PSFMAG', 26.0) image_f = pyfits.open(image) xmax = image_f[0].header.get('NAXIS1', 0) ymax = image_f[0].header.get('NAXIS2', 0) exptime = image_f[0].header.get('EXPTIME', 1) zeropoint = image_f[0].header.get('PHOT_C', 26.5) import mop_files ahdu = mop_files.read(list) import string, math, re from numarray.nd_image.interpolation import shift as shift from string import atof for i in range(len(ahdu['data']['x'])): x = float(ahdu['data']['x'][i]) y = float(ahdu['data']['y'][i]) mag = float(ahdu['data']['mag'][i]) rate = float(ahdu['data']['pix_rate'][i]) / 3600.0 angle = float(ahdu['data']['angle'][i]) x_shift_rate = rate * math.cos(angle / 57.3) y_shift_rate = rate * math.sin(angle / 57.3) #flux=exptime*10**((zeropoint-mag)/2.5) #scale=flux/psf_flux scale = 10**((psf_mag - mag) / 2.5) * exptime #print scale niter = int(rate * exptime) + 1 scale = scale / niter dt = exptime / niter #print x,y,mag,niter for i in range(niter): curtime = dtime + dt * i x = x + x_shift_rate * curtime y = y + y_shift_rate * curtime x1 = int(max(0, x - psf_x)) x2 = int(min(xmax, x + psf_x_size - psf_x)) y1 = int(max(0, y - psf_y)) y2 = int(min(ymax, y + psf_y_size - psf_y)) #print x2,x1,y2,y1 px1 = int((psf_x - (x - x1))) px2 = int(px1 + (x2 - x1)) py1 = int(psf_y - (y - y1)) py2 = int(py1 + (y2 - y1)) sec = psf_f[0].data[py1:py2, px1:px2].copy() sec = shift(sec, (y - int(y), x - int(x)), order=3) #print sec.shape,y2-y1,x2-x1 #print "Adding @ ",x,y,mag,scale," data=> ",y1,y2,x1,x2," PSF=> ",py1,py2,px1,px2 image_f[0].data[y1:y2, x1:x2] += scale * sec image_f.writeto(outfile) image_f.close()
ybox=opt.ybox flux=[] slices=[] for index in range(len(psf_stars['data']['X'])): x=float(psf_stars['data']['X'][index]) y=float(psf_stars['data']['Y'][index]) if x+xbox > data.getshape()[1] or x-xbox < 0 or y+ybox > data.getshape()[0] or y-ybox < 0: continue l=int(x-xbox) r=int(x+xbox) t=int(y-ybox) b=int(y+ybox) sec = data[t:b,l:r].copy() sec = shift(sec,(x-int(x),y-int(y)),order=3) obj = N.where(sec > 2.0*average(average(sec)),1,0) sky2 = N.where(sec < 2.0*average(average(sec)),1,0) sky2 = N.sum(N.sum(sky2*sec))/N.sum(N.sum(sky2)) (lab, nobj) = label(obj,structure=s) f = N.nd_image.find_objects(lab) skip=0 msec = masked_outside(sec,sky2-5.0*sqrt(sky2),40000.) for i in range(1,nobj+1): (a,b)=shape(obj[f[i-1]]) a*=1. b*=1. if a*b < 10: continue