def test_multiFringes(self): """Test that multi-fringe results are handled correctly by the task. """ self.config.large = 16 task = FringeTask(name="multiFringeMock", config=self.config) config = isrMock.IsrMockConfig() config.fringeScale = [750.0, 240.0, 220.0] config.fringeX0 = [100.0, 150.0, 200.0] config.fringeY0 = [0.0, 200.0, 0.0] dataRef = isrMock.FringeDataRefMock(config=config) exp = dataRef.get("raw") exp.setFilter(afwImage.FilterLabel(physical='FILTER')) medianBefore = np.nanmedian(exp.getImage().getArray()) fringes = task.readFringes(dataRef, assembler=None) solution, rms = task.run(exp, **fringes.getDict()) medianAfter = np.nanmedian(exp.getImage().getArray()) stdAfter = np.nanstd(exp.getImage().getArray()) self.assertLess(medianAfter, medianBefore) self.assertFloatsAlmostEqual(medianAfter, 3000.925, atol=1e-4) self.assertFloatsAlmostEqual(stdAfter, 3549.9885, atol=1e-4) deviation = np.abs(solution - config.fringeScale) self.assertTrue(np.all(deviation / rms < 1.0))
def setup_measureCrosstalk(self, isTrimmed=False, nSources=8): """Generate a simulated set of exposures and test the measured crosstalk matrix. Parameters ---------- isTrimmed : `bool`, optional Should the simulation use trimmed or untrimmed raw exposures? nSources : `int`, optional Number of random simulated sources to generate in the simulated exposures. Returns ------- coeffErr : `np.ndarray` Array of booleans indicating if the measured and expected crosstalk ratios are smaller than the measured uncertainty in the crosstalk ratio. """ config = isrMock.IsrMockConfig() config.rngSeed = 12345 config.doAddCrosstalk = True config.doAddSky = True config.doAddSource = True config.skyLevel = 0.0 config.readNoise = 0.0 mcConfig = MeasureCrosstalkConfig() mcConfig.threshold = 4000 mct = MeasureCrosstalkTask(config=mcConfig) fullResult = [] config.isTrimmed = isTrimmed # Generate simulated set of exposures. for idx in range(0, 10): config.rngSeed = 12345 + idx * 1000 # Allow each simulated exposure to have nSources random # bright sources. config.sourceAmp = (np.random.randint(8, size=nSources)).tolist() config.sourceFlux = ((np.random.random(size=nSources) * 25000.0 + 20000.0).tolist()) config.sourceX = ((np.random.random(size=nSources) * 100.0).tolist()) config.sourceY = ((np.random.random(size=nSources) * 50.0).tolist()) exposure = isrMock.CalibratedRawMock(config=config).run() result = mct.run(exposure, dataId=None) fullResult.append(result) # Generate the final measured CT ratios, uncertainties, pixel counts. coeff, coeffSig, coeffNum = mct.reduce(fullResult) # Needed because measureCrosstalk cannot find coefficients equal to 0.0 coeff = np.nan_to_num(coeff) coeffSig = np.nan_to_num(coeffSig) # Compare result against expectation used to create the simulation. expectation = isrMock.CrosstalkCoeffMock().run() coeffErr = abs(coeff - expectation) <= coeffSig return coeffErr
def setUp(self): """Generate a mock exposure/camera to test.""" config = isrMock.IsrMockConfig() config.isTrimmed = True config.doGenerateImage = True config.doAddFringe = False config.doAddSource = False config.doAddSky = True config.doAddOverscan = False config.doAddCrosstalk = False config.doAddBias = False config.doAddDark = False config.doAddFlat = False config.doAddFringe = False config.skyLevel = 1000 config.rngSeed = 12345 self.inputExp = isrMock.IsrMock(config=config).run() # These are simulated defects self.inputExp.getImage().getArray()[0, 0] = -1.0 * self.defectFlux self.inputExp.getImage().getArray()[40, 50] = self.defectFlux self.inputExp.getImage().getArray()[75, 50] = np.nan updateMockExp(self.inputExp, addCR=False) self.inputExp.getMask().getArray()[0, 0] = 1 self.inputExp.getMask().getArray()[40, 50] = 1 self.inputExp.getMask().getArray()[75, 50] = 1 self.camera = isrMock.IsrMock().getCamera()
def test_edgeCases(self): """Test that improperly specified configurations do not return data. """ config = isrMock.IsrMockConfig() self.assertIsNone(isrMock.IsrMock(config=config).run()) with self.assertRaises(RuntimeError): config.doGenerateData = True isrMock.IsrMock(config=config).run()
def setUp(self): self.config = IsrTaskConfig() self.config.qa = IsrQaConfig() self.task = IsrTask(config=self.config) self.mockConfig = isrMock.IsrMockConfig() self.mockConfig.isTrimmed = False self.doGenerateImage = True self.dataRef = isrMock.DataRefMock(config=self.mockConfig) self.camera = isrMock.IsrMock(config=self.mockConfig).getCamera() self.inputExp = isrMock.RawMock(config=self.mockConfig).run() self.amp = self.inputExp.getDetector()[0] self.mi = self.inputExp.getMaskedImage()
def setUp(self): """Generate a mock exposure/camera to test.""" config = isrMock.IsrMockConfig() config.isTrimmed = True config.rngSeed = 12345 biasExposure = isrMock.BiasMock(config=config).run() config.rngSeed = 54321 fakeBias = isrMock.BiasMock(config=config).run() self.inputExp = biasExposure.clone() mi = self.inputExp.getMaskedImage() mi.scaledMinus(1.0, fakeBias.getMaskedImage()) updateMockExp(self.inputExp) self.camera = isrMock.IsrMock().getCamera()
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()