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)
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)
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())
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())
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()
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)