def runConvolveAndSubtract1(self, bgVal=0, xloc=408, yloc=580): imsize = int(5 * self.kSize) p0 = geom.Point2I(xloc - imsize // 2, yloc - imsize // 2) p1 = geom.Point2I(xloc + imsize // 2, yloc + imsize // 2) bbox = geom.Box2I(p0, p1) tmi = afwImage.MaskedImageF(self.templateImage, bbox, origin=afwImage.LOCAL) smi = afwImage.MaskedImageF(self.scienceImage, bbox, origin=afwImage.LOCAL) diffIm = ipDiffim.convolveAndSubtract(tmi, smi, self.gaussKernel, bgVal) bbox = self.gaussKernel.shrinkBBox( diffIm.getBBox(origin=afwImage.LOCAL)) diffIm2 = afwImage.MaskedImageF(diffIm, bbox, origin=afwImage.LOCAL) # image is empty (or the additional background you subtracted off) for j in range(diffIm2.getHeight()): for i in range(diffIm2.getWidth()): self.assertAlmostEqual(diffIm2.image[i, j, afwImage.LOCAL], -1. * bgVal, 3)
def runConvolveAndSubtract2(self, bgOrder=0, xloc=408, yloc=580): imsize = int(5 * self.kSize) p0 = geom.Point2I(xloc - imsize // 2, yloc - imsize // 2) p1 = geom.Point2I(xloc + imsize // 2, yloc + imsize // 2) bbox = geom.Box2I(p0, p1) tmi = afwImage.MaskedImageF(self.templateImage, bbox, origin=afwImage.LOCAL) smi = afwImage.MaskedImageF(self.scienceImage, bbox, origin=afwImage.LOCAL) bgFunc = afwMath.PolynomialFunction2D( bgOrder) # coeffs are 0. by default diffIm = ipDiffim.convolveAndSubtract(tmi, smi, self.gaussKernel, bgFunc) bbox = self.gaussKernel.shrinkBBox( diffIm.getBBox(origin=afwImage.LOCAL)) diffIm2 = afwImage.MaskedImageF(diffIm, bbox, origin=afwImage.LOCAL) for j in range(diffIm2.getHeight()): for i in range(diffIm2.getWidth()): self.assertAlmostEqual(diffIm2.image[i, j, afwImage.LOCAL], 0., 4)
def assess(self, cand, kFn1, bgFn1, kFn2, bgFn2, frame0): tmi = cand.getTemplateMaskedImage() smi = cand.getScienceMaskedImage() im1 = afwImage.ImageD(kFn1.getDimensions()) kFn1.computeImage(im1, False, afwImage.indexToPosition(int(cand.getXCenter())), afwImage.indexToPosition(int(cand.getYCenter()))) fk1 = afwMath.FixedKernel(im1) bg1 = bgFn1(afwImage.indexToPosition(int(cand.getXCenter())), afwImage.indexToPosition(int(cand.getYCenter()))) d1 = ipDiffim.convolveAndSubtract(tmi, smi, fk1, bg1) #### im2 = afwImage.ImageD(kFn2.getDimensions()) kFn2.computeImage(im2, False, afwImage.indexToPosition(int(cand.getXCenter())), afwImage.indexToPosition(int(cand.getYCenter()))) fk2 = afwMath.FixedKernel(im2) bg2 = bgFn2(afwImage.indexToPosition(int(cand.getXCenter())), afwImage.indexToPosition(int(cand.getYCenter()))) d2 = ipDiffim.convolveAndSubtract(tmi, smi, fk2, bg2) if display: disp = afwDisplay.Display(frame=frame0) disp.mtv(tmi, title="Template Masked Image") disp.dot("Cand %d" % (cand.getId()), 0, 0) afwDisplay.Display(frame=frame0 + 1).mtv( smi, title="Science Masked Image") afwDisplay.Display(frame=frame0 + 2).mtv(im1, title="Masked Image: 1") afwDisplay.Display(frame=frame0 + 3).mtv( d1, title="Difference Image: 1") afwDisplay.Display(frame=frame0 + 4).mtv(im2, title="Masked Image: 2") afwDisplay.Display(frame=frame0 + 5).mtv( d2, title="Difference Image: 2") logger.debug("Full Spatial Model") self.stats(cand.getId(), d1) logger.debug("N-1 Spatial Model") self.stats(cand.getId(), d2)
def assess(self, cand, kFn1, bgFn1, kFn2, bgFn2, frame0): tmi = cand.getTemplateMaskedImage() smi = cand.getScienceMaskedImage() im1 = afwImage.ImageD(kFn1.getDimensions()) kFn1.computeImage(im1, False, afwImage.indexToPosition(int(cand.getXCenter())), afwImage.indexToPosition(int(cand.getYCenter()))) fk1 = afwMath.FixedKernel(im1) bg1 = bgFn1(afwImage.indexToPosition(int(cand.getXCenter())), afwImage.indexToPosition(int(cand.getYCenter()))) d1 = ipDiffim.convolveAndSubtract(tmi, smi, fk1, bg1) #### im2 = afwImage.ImageD(kFn2.getDimensions()) kFn2.computeImage(im2, False, afwImage.indexToPosition(int(cand.getXCenter())), afwImage.indexToPosition(int(cand.getYCenter()))) fk2 = afwMath.FixedKernel(im2) bg2 = bgFn2(afwImage.indexToPosition(int(cand.getXCenter())), afwImage.indexToPosition(int(cand.getYCenter()))) d2 = ipDiffim.convolveAndSubtract(tmi, smi, fk2, bg2) if display: ds9.mtv(tmi, frame=frame0+0) ds9.dot("Cand %d" % (cand.getId()), 0, 0, frame=frame0+0) ds9.mtv(smi, frame=frame0+1) ds9.mtv(im1, frame=frame0+2) ds9.mtv(d1, frame=frame0+3) ds9.mtv(im2, frame=frame0+4) ds9.mtv(d2, frame=frame0+5) pexLog.Trace("lsst.ip.diffim.JackknifeResampleKernel", 1, "Full Spatial Model") self.stats(cand.getId(), d1) pexLog.Trace("lsst.ip.diffim.JackknifeResampleKernel", 1, "N-1 Spatial Model") self.stats(cand.getId(), d2)
def assess(self, cand, kFn1, bgFn1, kFn2, bgFn2, frame0): tmi = cand.getTemplateMaskedImage() smi = cand.getScienceMaskedImage() im1 = afwImage.ImageD(kFn1.getDimensions()) kFn1.computeImage(im1, False, afwImage.indexToPosition(int(cand.getXCenter())), afwImage.indexToPosition(int(cand.getYCenter()))) fk1 = afwMath.FixedKernel(im1) bg1 = bgFn1(afwImage.indexToPosition(int(cand.getXCenter())), afwImage.indexToPosition(int(cand.getYCenter()))) d1 = ipDiffim.convolveAndSubtract(tmi, smi, fk1, bg1) #### im2 = afwImage.ImageD(kFn2.getDimensions()) kFn2.computeImage(im2, False, afwImage.indexToPosition(int(cand.getXCenter())), afwImage.indexToPosition(int(cand.getYCenter()))) fk2 = afwMath.FixedKernel(im2) bg2 = bgFn2(afwImage.indexToPosition(int(cand.getXCenter())), afwImage.indexToPosition(int(cand.getYCenter()))) d2 = ipDiffim.convolveAndSubtract(tmi, smi, fk2, bg2) if display: disp = afwDisplay.Display(frame=frame0) disp.mtv(tmi, title="Template Masked Image") disp.dot("Cand %d" % (cand.getId()), 0, 0) afwDisplay.Display(frame=frame0 + 1).mtv(smi, title="Science Masked Image") afwDisplay.Display(frame=frame0 + 2).mtv(im1, title="Masked Image: 1") afwDisplay.Display(frame=frame0 + 3).mtv(d1, title="Difference Image: 1") afwDisplay.Display(frame=frame0 + 4).mtv(im2, title="Masked Image: 2") afwDisplay.Display(frame=frame0 + 5).mtv(d2, title="Difference Image: 2") logger.debug("Full Spatial Model") self.stats(cand.getId(), d1) logger.debug("N-1 Spatial Model") self.stats(cand.getId(), d2)
def runConvolveAndSubtract2(self, bgOrder=0, xloc = 408, yloc = 580): imsize = int(5 * self.kSize) p0 = afwGeom.Point2I(xloc - imsize/2, yloc - imsize/2) p1 = afwGeom.Point2I(xloc + imsize/2, yloc + imsize/2) bbox = afwGeom.Box2I(p0, p1) tmi = afwImage.MaskedImageF(self.templateImage, bbox, afwImage.LOCAL) smi = afwImage.MaskedImageF(self.scienceImage, bbox, afwImage.LOCAL) bgFunc = afwMath.PolynomialFunction2D(bgOrder) # coeffs are 0. by default diffIm = ipDiffim.convolveAndSubtract(tmi, smi, self.gaussKernel, bgFunc) bbox = self.gaussKernel.shrinkBBox(diffIm.getBBox(afwImage.LOCAL)) diffIm2 = afwImage.MaskedImageF(diffIm, bbox, afwImage.LOCAL) for j in range(diffIm2.getHeight()): for i in range(diffIm2.getWidth()): self.assertAlmostEqual(diffIm2.getImage().get(i, j), 0., 4)
def runConvolveAndSubtract1(self, bgVal = 0, xloc = 408, yloc = 580): imsize = int(5 * self.kSize) p0 = afwGeom.Point2I(xloc - imsize/2, yloc - imsize/2) p1 = afwGeom.Point2I(xloc + imsize/2, yloc + imsize/2) bbox = afwGeom.Box2I(p0, p1) tmi = afwImage.MaskedImageF(self.templateImage, bbox, afwImage.LOCAL) smi = afwImage.MaskedImageF(self.scienceImage, bbox, afwImage.LOCAL) diffIm = ipDiffim.convolveAndSubtract(tmi, smi, self.gaussKernel, bgVal) bbox = self.gaussKernel.shrinkBBox(diffIm.getBBox(afwImage.LOCAL)) diffIm2 = afwImage.MaskedImageF(diffIm, bbox, afwImage.LOCAL) # image is empty (or the additional background you subtracted off) for j in range(diffIm2.getHeight()): for i in range(diffIm2.getWidth()): self.assertAlmostEqual(diffIm2.getImage().get(i, j), -1.*bgVal, 3)
for x in (0, width // 2, width): for y in (0, height // 2, height): im = afwImage.ImageD(spatialKernel.getDimensions()) ksum = spatialKernel.computeImage(im, False, afwImage.indexToPosition(x), afwImage.indexToPosition(y)) mos.append(im, "x=%d y=%d kSum=%.2f" % (x, y, ksum)) mosaic = mos.makeMosaic() frame += 1 ds9.mtv(mosaic, frame=frame, title="Spatial Kernels") mos.drawLabels(frame=frame) # Background backgroundIm = afwImage.ImageF( afwGeom.Extent2I(templateExposure.getWidth(), templateExposure.getHeight()), 0) backgroundIm += spatialBg frame += 1 ds9.mtv(backgroundIm, frame=frame, title="Background model") # Diffim! diffIm = ipDiffim.convolveAndSubtract(templateExposure.getMaskedImage(), scienceExposure.getMaskedImage(), spatialKernel, spatialBg) frame += 1 ds9.mtv(diffIm, frame=frame, title="Diffim") # examples/runSpatialModel.py $AFWDATA_DIR/DC3a-Sim/sci/v5-e0/v5-e0-c011-a00.sci # ... $AFWDATA_DIR/DC3a-Sim/sci/v26-e0/v26-e0-c011-a00.sci
im = afwImage.ImageD(spatialKernel.getDimensions()) ksum = spatialKernel.computeImage(im, False, afwImage.indexToPosition(x), afwImage.indexToPosition(y)) mos.append(im, "x=%d y=%d kSum=%.2f" % (x, y, ksum)) mosaic = mos.makeMosaic() frame += 1 ds9.mtv(mosaic, frame=frame, title = "Spatial Kernels") mos.drawLabels(frame=frame) # Background backgroundIm = afwImage.ImageF(afwGeom.Extent2I(templateExposure.getWidth(), templateExposure.getHeight()), 0) backgroundIm += spatialBg frame += 1 ds9.mtv(backgroundIm, frame=frame, title = "Background model") # Diffim! diffIm = ipDiffim.convolveAndSubtract(templateExposure.getMaskedImage(), scienceExposure.getMaskedImage(), spatialKernel, spatialBg) frame += 1 ds9.mtv(diffIm, frame=frame, title = "Diffim") # examples/runSpatialModel.py $AFWDATA_DIR/DC3a-Sim/sci/v5-e0/v5-e0-c011-a00.sci # ... $AFWDATA_DIR/DC3a-Sim/sci/v26-e0/v26-e0-c011-a00.sci