def testEdge(self): """Test that we can interpolate to the edge""" mi = afwImage.MaskedImageF(80, 30) ima = mi.getImage().getArray() # # Loop over number of bad columns at left or right edge of image # for nBadCol in range(0, 20): mi.set((0, 0x0, 0)) np.random.seed(666) ima[:] = np.random.uniform(-1, 1, ima.shape) defects = [] if nBadCol > 0: # # Bad left edge # ima[:, 0:nBadCol] = 10 defects.append(afwGeom.BoxI(afwGeom.PointI(0, 0), afwGeom.ExtentI(nBadCol, mi.getHeight()))) # # With another bad set of columns next to bad left edge # ima[:, -nBadCol:] = 10 defects.append(afwGeom.BoxI(afwGeom.PointI(mi.getWidth() - nBadCol, 0), afwGeom.ExtentI(nBadCol, mi.getHeight()))) # # Bad right edge # ima[0:10, nBadCol+1:nBadCol+4] = 100 defects.append(afwGeom.BoxI(afwGeom.PointI(nBadCol+1, 0), afwGeom.ExtentI(3, 10))) # # With another bad set of columns next to bad right edge # ima[0:10, -nBadCol-4:-nBadCol-1] = 100 defects.append((afwGeom.BoxI(afwGeom.PointI(mi.getWidth() - nBadCol - 4, 0), afwGeom.ExtentI(3, 10)))) # # Test cases that left and right bad patches nearly (or do) coalesce # ima[-3:, 0:mi.getWidth()//2-1] = 100 defects.append(afwGeom.BoxI(afwGeom.PointI(0, mi.getHeight() - 3), afwGeom.ExtentI(mi.getWidth()//2-1, 1))) ima[-3:, mi.getWidth()//2+1:] = 100 defects.append(afwGeom.BoxI(afwGeom.PointI(mi.getWidth()//2 + 1, mi.getHeight() - 3), afwGeom.ExtentI(mi.getWidth()//2 - 1, 1))) ima[-2:, 0:mi.getWidth()//2] = 100 defects.append(afwGeom.BoxI(afwGeom.PointI(0, mi.getHeight() - 2), afwGeom.ExtentI(mi.getWidth()//2, 1))) ima[-2:, mi.getWidth()//2+1:] = 100 defects.append(afwGeom.BoxI(afwGeom.PointI(mi.getWidth()//2 + 1, mi.getHeight() - 2), afwGeom.ExtentI(mi.getWidth()//2 - 1, 1))) ima[-1:, :] = 100 defects.append(afwGeom.BoxI(afwGeom.PointI(0, mi.getHeight() - 1), afwGeom.ExtentI(mi.getWidth(), 1))) # Test fix for HSC-978: long defect stops one pixel shy of the edge (when nBadCol == 0) ima[13, :-1] = 100 defects.append(afwGeom.BoxI(afwGeom.PointI(0, 13), afwGeom.ExtentI(mi.getWidth() - 1, 1))) ima[14, 1:] = 100 defects.append(afwGeom.BoxI(afwGeom.PointI(1, 14), afwGeom.ExtentI(mi.getWidth() - 1, 1))) # # Build list of defects to interpolate over # defectList = [] for bbox in defects: defectList.append(algorithms.Defect(bbox)) # # Guess a PSF and do the work # if display: ds9.mtv(mi, frame=0) psf = algorithms.DoubleGaussianPsf(15, 15, 1./(2*math.sqrt(2*math.log(2)))) algorithms.interpolateOverDefects(mi, psf, defectList, 0, True) if display: ds9.mtv(mi, frame=1) self.assertGreater(np.min(ima), -2) self.assertGreater(2, np.max(ima))
def testEdge(self): """Test that we can interpolate to the edge""" mi = afwImage.MaskedImageF(80, 30) ima = mi.getImage().getArray() # # Loop over number of bad columns at left or right edge of image # for nBadCol in range(0, 20): mi.set((0, 0x0, 0)) np.random.seed(666) ima[:] = np.random.uniform(-1, 1, ima.shape) defects = [] if nBadCol > 0: # # Bad left edge # ima[:, 0:nBadCol] = 10 defects.append(lsst.geom.BoxI(lsst.geom.PointI(0, 0), lsst.geom.ExtentI(nBadCol, mi.getHeight()))) # # With another bad set of columns next to bad left edge # ima[:, -nBadCol:] = 10 defects.append(lsst.geom.BoxI(lsst.geom.PointI(mi.getWidth() - nBadCol, 0), lsst.geom.ExtentI(nBadCol, mi.getHeight()))) # # Bad right edge # ima[0:10, nBadCol+1:nBadCol+4] = 100 defects.append(lsst.geom.BoxI(lsst.geom.PointI(nBadCol+1, 0), lsst.geom.ExtentI(3, 10))) # # With another bad set of columns next to bad right edge # ima[0:10, -nBadCol-4:-nBadCol-1] = 100 defects.append((lsst.geom.BoxI(lsst.geom.PointI(mi.getWidth() - nBadCol - 4, 0), lsst.geom.ExtentI(3, 10)))) # # Test cases that left and right bad patches nearly (or do) coalesce # ima[-3:, 0:mi.getWidth()//2-1] = 100 defects.append(lsst.geom.BoxI(lsst.geom.PointI(0, mi.getHeight() - 3), lsst.geom.ExtentI(mi.getWidth()//2-1, 1))) ima[-3:, mi.getWidth()//2+1:] = 100 defects.append(lsst.geom.BoxI(lsst.geom.PointI(mi.getWidth()//2 + 1, mi.getHeight() - 3), lsst.geom.ExtentI(mi.getWidth()//2 - 1, 1))) ima[-2:, 0:mi.getWidth()//2] = 100 defects.append(lsst.geom.BoxI(lsst.geom.PointI(0, mi.getHeight() - 2), lsst.geom.ExtentI(mi.getWidth()//2, 1))) ima[-2:, mi.getWidth()//2+1:] = 100 defects.append(lsst.geom.BoxI(lsst.geom.PointI(mi.getWidth()//2 + 1, mi.getHeight() - 2), lsst.geom.ExtentI(mi.getWidth()//2 - 1, 1))) ima[-1:, :] = 100 defects.append(lsst.geom.BoxI(lsst.geom.PointI(0, mi.getHeight() - 1), lsst.geom.ExtentI(mi.getWidth(), 1))) # Test fix for HSC-978: long defect stops one pixel shy of the edge (when nBadCol == 0) ima[13, :-1] = 100 defects.append(lsst.geom.BoxI(lsst.geom.PointI(0, 13), lsst.geom.ExtentI(mi.getWidth() - 1, 1))) ima[14, 1:] = 100 defects.append(lsst.geom.BoxI(lsst.geom.PointI(1, 14), lsst.geom.ExtentI(mi.getWidth() - 1, 1))) # # Build list of defects to interpolate over # defectList = algorithms.Defects() for bbox in defects: defectList.append(algorithms.Defect(bbox)) # # Guess a PSF and do the work # if display: afwDisplay.Display(frame=2).mtv(mi, title=self._testMethodName + ": image") psf = algorithms.DoubleGaussianPsf(15, 15, 1./(2*math.sqrt(2*math.log(2)))) algorithms.interpolateOverDefects(mi, psf, defectList, 0, True) if display: afwDisplay.Display(frame=3).mtv(mi, title=self._testMethodName + ": image") self.assertGreater(np.min(ima), -2) self.assertGreater(2, np.max(ima))
def test_defects(self): defects = algorithms.Defects() defects.append(algorithms.Defect(lsst.geom.Box2I(lsst.geom.Point2I(5, 6), lsst.geom.Point2I(41, 50)))) defects.append(lsst.geom.Box2I(lsst.geom.Point2I(0, 0), lsst.geom.Point2I(4, 5))) defects.append(lsst.geom.Point2I(10, 12)) defects.append(afwImage.DefectBase(lsst.geom.Box2I(lsst.geom.Point2I(100, 200), lsst.geom.Extent2I(5, 5)))) self.assertEqual(len(defects), 4) for d in defects: self.assertIsInstance(d, algorithms.Defect) # Transposition transposed = defects.transpose() self.assertEqual(len(transposed), len(defects)) self.assertEqual(transposed[0].getBBox(), lsst.geom.Box2I(lsst.geom.Point2I(6, 5), lsst.geom.Extent2I(45, 37))) # Serialization round trip meta = PropertyList() meta["TESTHDR"] = "testing" defects.setMetadata(meta) table = defects.toFitsRegionTable() defects2 = algorithms.Defects.fromTable(table) self.assertEqual(defects2, defects) # via FITS with lsst.utils.tests.getTempFilePath(".fits") as tmpFile: defects.writeFits(tmpFile) defects2 = algorithms.Defects.readFits(tmpFile) # Equality tests the bounding boxes so metadata is tested separately. self.assertEqual(defects2, defects) self.assertMetadata(defects2, defects) # via text file with lsst.utils.tests.getTempFilePath(".ecsv") as tmpFile: defects.writeText(tmpFile) defects2 = algorithms.Defects.readText(tmpFile) # Equality tests the bounding boxes so metadata is tested separately. self.assertEqual(defects2, defects) self.assertMetadata(defects2, defects) # Check bad values with self.assertRaises(ValueError): defects.append(lsst.geom.Box2D(lsst.geom.Point2D(0., 0.), lsst.geom.Point2D(3.1, 3.1))) with self.assertRaises(ValueError): defects.append("defect")
def test_defects(self): defects = algorithms.Defects() defects.append( algorithms.Defect( lsst.geom.Box2I(lsst.geom.Point2I(5, 6), lsst.geom.Point2I(41, 50)))) defects.append( lsst.geom.Box2I(lsst.geom.Point2I(0, 0), lsst.geom.Point2I(4, 5))) defects.append(lsst.geom.Point2I(10, 12)) defects.append( afwImage.DefectBase( lsst.geom.Box2I(lsst.geom.Point2I(100, 200), lsst.geom.Extent2I(5, 5)))) self.assertEqual(len(defects), 4) for d in defects: self.assertIsInstance(d, algorithms.Defect) # Transposition transposed = defects.transpose() self.assertEqual(len(transposed), len(defects)) self.assertEqual( transposed[0].getBBox(), lsst.geom.Box2I(lsst.geom.Point2I(6, 5), lsst.geom.Extent2I(45, 37))) # Serialization round trip meta = PropertyList() meta["TESTHDR"] = "testing" defects.setMetadata(meta) table = defects.toFitsRegionTable() defects2 = algorithms.Defects.fromTable(table) self.assertEqual(defects2, defects) # via FITS with lsst.utils.tests.getTempFilePath(".fits") as tmpFile: defects.writeFits(tmpFile) defects2 = algorithms.Defects.readFits(tmpFile) # Equality tests the bounding boxes so metadata is tested separately. self.assertEqual(defects2, defects) self.assertMetadata(defects2, defects) # via text file with lsst.utils.tests.getTempFilePath(".ecsv") as tmpFile: defects.writeText(tmpFile) defects2 = algorithms.Defects.readText(tmpFile) # Equality tests the bounding boxes so metadata is tested separately. self.assertEqual(defects2, defects) self.assertMetadata(defects2, defects) # Check bad values with self.assertRaises(ValueError): defects.append( lsst.geom.Box2D(lsst.geom.Point2D(0., 0.), lsst.geom.Point2D(3.1, 3.1))) with self.assertRaises(ValueError): defects.append("defect")