Beispiel #1
0
    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 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 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)
Beispiel #7
0
    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)
Beispiel #8
0
    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)