def testPersistence(self): for pgp in self.pgps: assert cppLib.isPersistable(pgp) im = ExposureF(10, 10) im.setPsf(pgp) self.assertEqual(im.getPsf(), pgp) with lsst.utils.tests.getTempFilePath(".fits") as tmpFile: im.writeFits(tmpFile) newIm = ExposureF(tmpFile) self.assertEqual(newIm.getPsf(), im.getPsf())
def testNoPsf(self): """Test InstallGaussianPsfTask when the input exposure has no PSF.""" for width in (21, 25): for fwhm in (2.8, 7.1): config = InstallGaussianPsfTask.ConfigClass() config.width = width config.fwhm = fwhm task = InstallGaussianPsfTask(config=config) exposure = ExposureF(100, 100) task.run(exposure=exposure) self.assertTrue(exposure.hasPsf()) psf = exposure.getPsf() psfIm = psf.computeImage() self.assertEqual(psfIm.getWidth(), width) self.assertEqual(psfIm.getHeight(), width) measFwhm = psf.computeShape().getDeterminantRadius()*FwhmPerSigma self.assertAlmostEqual(measFwhm, fwhm, delta=1e-3)
def testNoPsf(self): """Test InstallGaussianPsfTask when the input exposure has no PSF.""" for width in (21, 25): for fwhm in (2.8, 7.1): config = InstallGaussianPsfTask.ConfigClass() config.width = width config.fwhm = fwhm task = InstallGaussianPsfTask(config=config) exposure = ExposureF(100, 100) task.run(exposure=exposure) self.assertTrue(exposure.hasPsf()) psf = exposure.getPsf() psfIm = psf.computeImage() self.assertEqual(psfIm.getWidth(), width) self.assertEqual(psfIm.getHeight(), width) measFwhm = psf.computeShape().getDeterminantRadius( ) * FwhmPerSigma self.assertAlmostEqual(measFwhm, fwhm, delta=1e-3)
def testMatchSingleGaussianPsf(self): """Test InstallGaussianPsfTask when the input exposure has a single Gaussian PSF.""" config = InstallGaussianPsfTask.ConfigClass() task = InstallGaussianPsfTask(config=config) for desWidth, desHeight, desSigma in ( (21, 23, 1.2), (23, 25, 3.5), ): exposure = ExposureF(100, 100) inPsf = SingleGaussianPsf(desWidth, desHeight, desSigma) exposure.setPsf(inPsf) task.run(exposure=exposure) self.assertTrue(exposure.hasPsf()) psf = exposure.getPsf() psfIm = psf.computeImage() self.assertEqual(psfIm.getWidth(), desWidth) self.assertEqual(psfIm.getHeight(), desHeight) self.assertAlmostEqual(psf.computeShape().getDeterminantRadius(), desSigma, delta=1e-3)
def testMatchSingleGaussianPsf(self): """Test InstallGaussianPsfTask when the input exposure has a single Gaussian PSF """ config = InstallGaussianPsfTask.ConfigClass() task = InstallGaussianPsfTask(config=config) for desWidth, desHeight, desSigma in ( (21, 23, 1.2), (23, 25, 3.5), ): exposure = ExposureF(100, 100) inPsf = SingleGaussianPsf(desWidth, desHeight, desSigma) exposure.setPsf(inPsf) task.run(exposure=exposure) self.assertTrue(exposure.hasPsf()) psf = exposure.getPsf() psfIm = psf.computeImage() self.assertEqual(psfIm.getWidth(), desWidth) self.assertEqual(psfIm.getHeight(), desHeight) self.assertAlmostEqual(psf.computeShape().getDeterminantRadius(), desSigma, delta=1e-3)
def testMatchDoubleGaussianPsf(self): """Test InstallGaussianPsfTask when the input exposure has a DoubleGaussian PSF.""" config = InstallGaussianPsfTask.ConfigClass() task = InstallGaussianPsfTask(config=config) for doubleGaussParms in ( # width, height, inner sigma, outer sigma, outer/inner peak amplitude (21, 23, 1.2, 3.5, 0.02), (23, 25, 3.5, 9.0, 0.02), ): exposure = ExposureF(100, 100) inPsf = DoubleGaussianPsf(*doubleGaussParms) exposure.setPsf(inPsf) desWidth, desHeight, innerSigma = doubleGaussParms[0:3] task.run(exposure=exposure) self.assertTrue(exposure.hasPsf()) psf = exposure.getPsf() psfIm = psf.computeImage() self.assertEqual(psfIm.getWidth(), desWidth) self.assertEqual(psfIm.getHeight(), desHeight) self.assertAlmostEqual(psf.computeShape().getDeterminantRadius(), innerSigma, delta=0.1)
def testMatchDoubleGaussianPsf(self): """Test InstallGaussianPsfTask when the input exposure has a DoubleGaussian PSF """ config = InstallGaussianPsfTask.ConfigClass() task = InstallGaussianPsfTask(config=config) for doubleGaussParms in ( # width, height, inner sigma, outer sigma, outer/inner peak amplitude (21, 23, 1.2, 3.5, 0.02), (23, 25, 3.5, 9.0, 0.02), ): exposure = ExposureF(100, 100) inPsf = DoubleGaussianPsf(*doubleGaussParms) exposure.setPsf(inPsf) desWidth, desHeight, innerSigma = doubleGaussParms[0:3] task.run(exposure=exposure) self.assertTrue(exposure.hasPsf()) psf = exposure.getPsf() psfIm = psf.computeImage() self.assertEqual(psfIm.getWidth(), desWidth) self.assertEqual(psfIm.getHeight(), desHeight) self.assertAlmostEqual(psf.computeShape().getDeterminantRadius(), innerSigma, delta=0.1)
from lsst.afw.image import ExposureF from lsst.meas.algorithms.installGaussianPsf import InstallGaussianPsfTask, FwhmPerSigma exposure = ExposureF(100, 100) task = InstallGaussianPsfTask() task.run(exposure=exposure) # This particular exposure had no PSF model to begin with, so the new PSF model # uses the config's FWHM. However, measured FWHM is based on the truncated # PSF image, so it does not exactly match the input measFwhm = exposure.getPsf().computeShape().getDeterminantRadius() * FwhmPerSigma assert abs(measFwhm - task.config.fwhm) < 1e-3