Exemplo n.º 1
0
    def test_simple(self):
        """Chain raw and calibration mock data.

        This test should confirm the raw data is generated as expected.
        """

        initialMean = np.median(self.mi.getImage().getArray()[:])
        initialStd = np.std(self.mi.getImage().getArray()[:])

        bias = isrMock.BiasMock().run()
        self.mi.getImage().getArray()[:] = (
            self.mi.getImage().getArray()[:] -
            bias.getMaskedImage().getImage().getArray()[:])
        newMean = np.median(self.mi.getImage().getArray()[:])
        newStd = np.std(self.mi.getImage().getArray()[:])

        self.assertLess(newMean, initialMean)

        initialMean = newMean
        initialStd = newStd

        dark = isrMock.DarkMock().run()
        self.mi.getImage().getArray()[:] = (
            self.mi.getImage().getArray()[:] -
            dark.getMaskedImage().getImage().getArray()[:])
        newMean = np.median(self.mi.getImage().getArray()[:])
        newStd = np.std(self.mi.getImage().getArray()[:])

        self.assertLess(newMean, initialMean)

        initialMean = newMean
        initialStd = newStd

        flat = isrMock.FlatMock().run()
        self.mi.getImage().getArray()[:] = (
            self.mi.getImage().getArray()[:] -
            flat.getMaskedImage().getImage().getArray()[:])
        newMean = np.median(self.mi.getImage().getArray()[:])
        newStd = np.std(self.mi.getImage().getArray()[:])

        self.assertAlmostEqual(newMean, initialMean, -2)
        self.assertLess(newStd, initialStd)

        initialMean = newMean
        initialStd = newStd

        fringe = isrMock.FringeMock().run()
        self.mi.getImage().getArray()[:] = (
            self.mi.getImage().getArray()[:] -
            fringe.getMaskedImage().getImage().getArray()[:])
        newMean = np.median(self.mi.getImage().getArray()[:])
        newStd = np.std(self.mi.getImage().getArray()[:])

        self.assertLess(newMean, initialMean)
Exemplo n.º 2
0
    def test_darkCorrection(self):
        """Expect the median image value should decrease after this operation.
        """
        darkIm = isrMock.DarkMock().run()

        statBefore = computeImageMedianAndStd(self.inputExp.image[self.amp.getBBox()])
        self.task.darkCorrection(self.inputExp, darkIm)
        statAfter = computeImageMedianAndStd(self.inputExp.image[self.amp.getBBox()])
        self.assertLess(statAfter[0], statBefore[0])
        self.assertFloatsAlmostEqual(statBefore[0], 8070.0195, atol=1e-2)
        self.assertFloatsAlmostEqual(statAfter[0], 8045.7773, atol=1e-2)
Exemplo n.º 3
0
    def test_trimToMatchCalibBBox(self):
        """Expect bounding boxes to match.
        """
        darkExp = isrMock.DarkMock().run()
        darkMi = darkExp.getMaskedImage()

        nEdge = 2
        darkMi = darkMi[nEdge:-nEdge, nEdge:-nEdge, afwImage.LOCAL]
        newInput = ipIsr.trimToMatchCalibBBox(self.mi, darkMi)

        self.assertEqual(newInput.getImage().getBBox(),
                         darkMi.getImage().getBBox())
Exemplo n.º 4
0
    def test_flatContext(self):
        """Expect the flat context manager runs successfully (applying both
        flat and dark within the context), and results in the same
        image data after completion.
        """
        darkExp = isrMock.DarkMock().run()
        flatExp = isrMock.FlatMock().run()

        mi = self.inputExp.getMaskedImage().clone()
        with self.task.flatContext(self.inputExp, flatExp, darkExp):
            contextStat = computeImageMedianAndStd(self.inputExp.getMaskedImage().getImage())
            self.assertFloatsAlmostEqual(contextStat[0], 37165.594, atol=1e-2)

        self.assertMaskedImagesAlmostEqual(mi, self.inputExp.getMaskedImage())
Exemplo n.º 5
0
    def setUp(self):
        """Generate a mock exposure/camera to test."""
        config = isrMock.IsrMockConfig()
        config.isTrimmed = True
        config.rngSeed = 12345
        darkExposure = isrMock.DarkMock(config=config).run()

        config.rngSeed = 54321
        fakeDark = isrMock.DarkMock(config=config).run()

        self.inputExp = darkExposure.clone()
        mi = self.inputExp.getMaskedImage()
        mi.scaledMinus(1.0, fakeDark.getMaskedImage())
        updateMockExp(self.inputExp)

        # Use this to test the metadataStats code, as this is the case
        # it's designed to fix.
        metadataContents = TaskMetadata()
        metadataContents["RESIDUAL STDEV C:0,0"] = 12.0
        metadataContents["RESIDUAL STDEV"] = 24.0
        self.metadata = TaskMetadata()
        self.metadata["subGroup"] = metadataContents

        self.camera = isrMock.IsrMock().getCamera()
Exemplo n.º 6
0
    def test_darkCorrection(self):
        """Expect round-trip application to be equal.
        Expect RuntimeError if sizes are different.
        """
        darkExp = isrMock.DarkMock().run()
        darkMi = darkExp.getMaskedImage()

        mi = self.mi.clone()

        # The `invert` parameter controls the direction of the
        # application.  This will apply, and un-apply the dark.
        ipIsr.darkCorrection(self.mi, darkMi, 1.0, 1.0, trimToFit=True)
        ipIsr.darkCorrection(self.mi,
                             darkMi,
                             1.0,
                             1.0,
                             trimToFit=True,
                             invert=True)

        self.assertMaskedImagesAlmostEqual(self.mi, mi, atol=1e-3)

        darkMi = darkMi[1:-1, 1:-1, afwImage.LOCAL]
        with self.assertRaises(RuntimeError):
            ipIsr.darkCorrection(self.mi, darkMi, 1.0, 1.0, trimToFit=False)