def testMetadata(self): """Test more advanced metadata handling """ config = SnapCombineTask.ConfigClass() config.doRepair = False config.doDiffIm = False # the MISS<N> keys are missing from metadata<N> # and so cannot be summed or averaged # MISS0 keys will be copied without alterate # MISS1 keys will be missing from the result config.averageKeys = ("AVG0", "AVG1", "MISS0AVG", "MISS1AVG") config.sumKeys = ("SUM0", "SUM1", "MISS0SUM", "MISS1SUM") task = SnapCombineTask(config=config) snap0 = makeRandomExposure(5, 5, 10000, 5000, 0) snap1 = makeRandomExposure(5, 5, 10000, 5000, 0) metadata0 = snap0.getMetadata() metadata1 = snap1.getMetadata() metadata0.set("NUM0", 45.2) metadata0.set("ASTR", "this is a string") metadata0.set("AVG0", 10.5) metadata1.set("AVG0", 9.5) metadata0.set("AVG1", -0.7) metadata1.set("AVG1", 0.2) metadata0.set("MISS0AVG", 2.3523) metadata1.set("MISS1AVG", 8.23) metadata0.set("SUM0", 1.23) metadata1.set("SUM0", 4.56) metadata0.set("SUM1", 9814) metadata1.set("SUM1", 3) metadata0.set("MISS0SUM", 75.4) metadata1.set("MISS1SUM", -234.3) allKeys = set(metadata0.names()) | set(metadata1.names()) miss0Keys = set(key for key in allKeys if key.startswith("MISS0")) miss1Keys = set(key for key in allKeys if key.startswith("MISS1")) missKeys = miss0Keys | miss1Keys avgKeys = set( config.averageKeys) - missKeys # keys that will be averaged sumKeys = set(config.sumKeys) - missKeys # keys that will be summed sameKeys = allKeys - (avgKeys | sumKeys | miss1Keys ) # keys that will be the same resExp = task.run(snap0, snap1).exposure resMetadata = resExp.getMetadata() for key in sameKeys: self.assertEqual(resMetadata.getScalar(key), metadata0.getScalar(key)) for key in avgKeys: self.assertAlmostEqual( resMetadata.getScalar(key), (metadata0.getScalar(key) + metadata1.getScalar(key)) / 2.0) for key in sumKeys: self.assertAlmostEqual( resMetadata.getScalar(key), metadata0.getScalar(key) + metadata1.getScalar(key)) for key in miss1Keys: self.assertFalse(resMetadata.exists(key))
def testMetadata(self): """Test more advanced metadata handling """ config = SnapCombineTask.ConfigClass() config.doRepair = False config.doDiffIm = False # the MISS<N> keys are missing from metadata<N> # and so cannot be summed or averaged # MISS0 keys will be copied without alterate # MISS1 keys will be missing from the result config.averageKeys = ("AVG0", "AVG1", "MISS0AVG", "MISS1AVG") config.sumKeys = ("SUM0", "SUM1", "MISS0SUM", "MISS1SUM") task = SnapCombineTask(config=config) snap0 = makeRandomExposure(5, 5, 10000, 5000, 0) snap1 = makeRandomExposure(5, 5, 10000, 5000, 0) metadata0 = snap0.getMetadata() metadata1 = snap1.getMetadata() metadata0.set("NUM0", 45.2) metadata0.set("ASTR", "this is a string") metadata0.set("AVG0", 10.5) metadata1.set("AVG0", 9.5) metadata0.set("AVG1", -0.7) metadata1.set("AVG1", 0.2) metadata0.set("MISS0AVG", 2.3523) metadata1.set("MISS1AVG", 8.23) metadata0.set("SUM0", 1.23) metadata1.set("SUM0", 4.56) metadata0.set("SUM1", 9814) metadata1.set("SUM1", 3) metadata0.set("MISS0SUM", 75.4) metadata1.set("MISS1SUM", -234.3) allKeys = set(metadata0.names()) | set(metadata1.names()) miss0Keys = set(key for key in allKeys if key.startswith("MISS0")) miss1Keys = set(key for key in allKeys if key.startswith("MISS1")) missKeys = miss0Keys | miss1Keys avgKeys = set(config.averageKeys) - missKeys # keys that will be averaged sumKeys = set(config.sumKeys) - missKeys # keys that will be summed sameKeys = allKeys - (avgKeys | sumKeys | miss1Keys) # keys that will be the same resExp = task.run(snap0, snap1).exposure resMetadata = resExp.getMetadata() for key in sameKeys: self.assertEqual(resMetadata.getScalar(key), metadata0.getScalar(key)) for key in avgKeys: self.assertAlmostEqual(resMetadata.getScalar(key), (metadata0.getScalar(key) + metadata1.getScalar(key)) / 2.0) for key in sumKeys: self.assertAlmostEqual(resMetadata.getScalar(key), metadata0.getScalar(key) + metadata1.getScalar(key)) for key in miss1Keys: self.assertFalse(resMetadata.exists(key))
def testAdditionAllGood(self): """Test the case where all pixels are valid """ config = SnapCombineTask.ConfigClass() config.doRepair = False config.doDiffIm = False task = SnapCombineTask(config=config) snap0 = makeRandomExposure(25, 25, 10000, 5000, 0) snap1 = makeRandomExposure(25, 25, 10000, 5000, 0) resExp = task.run(snap0, snap1).exposure resMi = resExp.getMaskedImage() predMi = snap0.getMaskedImage().Factory(snap0.getMaskedImage(), True) predMi += snap1.getMaskedImage() self.assertMaskedImagesNearlyEqual(resMi, predMi)
def testAddition(self): """Test addition with bad pixels """ config = SnapCombineTask.ConfigClass() config.doRepair = False config.doDiffIm = False config.badMaskPlanes = ("BAD", "SAT", "NO_DATA", "CR") badPixelMask = afwImage.MaskU.getPlaneBitMask(config.badMaskPlanes) task = SnapCombineTask(config=config) snap0 = makeRandomExposure(25, 25, 10000, 5000, badPixelMask) snap1 = makeRandomExposure(25, 25, 10000, 5000, badPixelMask) resExp = task.run(snap0, snap1).exposure resMi = resExp.getMaskedImage() predExp = simpleAdd(snap0, snap1, badPixelMask) predMi = predExp.getMaskedImage() self.assertMaskedImagesNearlyEqual(resMi, predMi)
def testAdditionAllGood(self): """Test the case where all pixels are valid """ config = SnapCombineTask.ConfigClass() config.doRepair = False config.doDiffIm = False task = SnapCombineTask(config=config) snap0 = makeRandomExposure(25, 25, 10000, 5000, 0) snap1 = makeRandomExposure(25, 25, 10000, 5000, 0) resExp = task.run(snap0, snap1).exposure resMi = resExp.getMaskedImage() predMi = snap0.getMaskedImage().Factory(snap0.getMaskedImage(), True) predMi += snap1.getMaskedImage() errMsg = afwTestUtils.maskedImagesDiffer(resMi.getArrays(), predMi.getArrays()) if errMsg: self.fail(errMsg)
def testAddition(self): """Test addition with bad pixels """ config = SnapCombineTask.ConfigClass() config.doRepair = False config.doDiffIm = False config.badMaskPlanes = ("BAD", "SAT", "NO_DATA", "CR") badPixelMask = afwImage.MaskU.getPlaneBitMask(config.badMaskPlanes) task = SnapCombineTask(config=config) snap0 = makeRandomExposure(25, 25, 10000, 5000, badPixelMask) snap1 = makeRandomExposure(25, 25, 10000, 5000, badPixelMask) resExp = task.run(snap0, snap1).exposure resMi = resExp.getMaskedImage() predExp = simpleAdd(snap0, snap1, badPixelMask) predMi = predExp.getMaskedImage() errMsg = afwTestUtils.maskedImagesDiffer(resMi.getArrays(), predMi.getArrays()) if errMsg: self.fail(errMsg)