def residual_image(coadd, coadd_col_n, label='all'): res = (coadd - coadd_col_n)/(coadd_col_n + 1) # the constant should fade noise for i, band in enumerate(bands): pyfits.writeto('stackres_%s_%s.fits'%(label, band), res[i], clobber=True) res *= 3.0 res += 0.5 colimg = RGBImage(res[0], res[1], res[2], beta=0.0001) colimg.save_as('stackres_%s.png'%label) colimg = numpy.asarray(colimg.img) for i, band in enumerate(bands): pyfits.writeto('stackrescol_%s_%s.fits'%(label, band), colimg[:,:,i], clobber=True) return res
def stack_galfit_images(infns, label='all', par='n', debug=False): #fns = random.sample(infns, min(len(infns),maxstack)) fns = infns[:min(len(infns),maxstack)] #for j in range(len(fns)): # fns[j] = fns[j].replace('/home/boris/gama/galapagos/galapagos_2.0.3_galfit_0.1.2.1_GAMA_9', '/Users/spb/gala9') bandscales = numpy.array([0.06, 0.1, 0.4])/10.0 beta=2.0 outsize = size n = len(fns) if n == 0: return None if maxstack > 5 and n < 5: return None print label, len(infns), n if n < 5: print fns nbands = len(bands) coadd = [] modelcoadd = [] for i, band in enumerate(bands): valueoffsets = [] valuescales = [] xcentres = [] ycentres = [] radii = [] angles = [] axisratios = [] for j, fn in enumerate(fns): p = pyfits.open(fn) results = p['final_band'].data # the following scales to the largest image # not suitable when building residual images (need same shape for all stacked images) #outsize = max(outsize, max(p[0].shape)) # index to scale according to the parameters in this band bandidx = (results.field('BAND')==band).nonzero()[0][0] # index to scale according to r-band parameters rbandidx = (results.field('BAND')=='r').nonzero()[0][0] valueoffsets.append(-results.field('COMP1_SKY')[bandidx]) valuescales.append(10**(0.4*(results.field('COMP2_MAG')[rbandidx]-18))) xcentres.append(results.field('COMP2_YC')[rbandidx]) ycentres.append(results.field('COMP2_XC')[rbandidx]) if par == 're': radii.append(results.field('COMP2_RE')[rbandidx]) elif par == 'n': radii.append(results.field('COMP2_RE')[bandidx]) angles.append(results.field('COMP2_PA')[rbandidx]) axisratios.append(results.field('COMP2_AR')[rbandidx]) axisratios = 1.0 coaddi, stacki = stack_images(fns, outsize, 'input_%s'%band, valueoffsets, valuescales, xcentres, ycentres, scales, angles, axisratios, clip=3.0) coadd.append(coaddi) pyfits.writeto('stack_%s_%s.fits'%(label, band), coaddi, clobber=True) for si in stacki: pyfits.append('stackall_%s_%s.fits'%(label, band), si) # stack the models to verify coaddi, stacki = stack_images(fns, outsize, 'model_%s'%band, valueoffsets, valuescales, xcentres, ycentres, scales, angles, axisratios, clip=3.0) modelcoadd.append(coaddi) pyfits.writeto('stackmodel_%s_%s.fits'%(label, band), coaddi, clobber=True) for si in stacki: pyfits.append('stackmodelall_%s_%s.fits'%(label, band), si) coadd = numpy.array(coadd) for i, b in enumerate(bandscales): coadd[i] *= b colimg = RGBImage(coadd[0], coadd[1], coadd[2], beta=beta) colimg.save_as('stack_%s.png'%label) coadd = numpy.array(modelcoadd) for i, b in enumerate(bandscales): coadd[i] *= b colimg = RGBImage(coadd[0], coadd[1], coadd[2], beta=beta) colimg.save_as('stackmodel_%s.png'%label) return coadd