示例#1
0
    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))
示例#2
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
示例#3
0
    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()
示例#4
0
    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()
示例#5
0
    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()
示例#6
0
    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()
示例#7
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()