LSST Applications 27.0.0,g0265f82a02+469cd937ee,g02d81e74bb+21ad69e7e1,g1470d8bcf6+cbe83ee85a,g2079a07aa2+e67c6346a6,g212a7c68fe+04a9158687,g2305ad1205+94392ce272,g295015adf3+81dd352a9d,g2bbee38e9b+469cd937ee,g337abbeb29+469cd937ee,g3939d97d7f+72a9f7b576,g487adcacf7+71499e7cba,g50ff169b8f+5929b3527e,g52b1c1532d+a6fc98d2e7,g591dd9f2cf+df404f777f,g5a732f18d5+be83d3ecdb,g64a986408d+21ad69e7e1,g858d7b2824+21ad69e7e1,g8a8a8dda67+a6fc98d2e7,g99cad8db69+f62e5b0af5,g9ddcbc5298+d4bad12328,ga1e77700b3+9c366c4306,ga8c6da7877+71e4819109,gb0e22166c9+25ba2f69a1,gb6a65358fc+469cd937ee,gbb8dafda3b+69d3c0e320,gc07e1c2157+a98bf949bb,gc120e1dc64+615ec43309,gc28159a63d+469cd937ee,gcf0d15dbbd+72a9f7b576,gdaeeff99f8+a38ce5ea23,ge6526c86ff+3a7c1ac5f1,ge79ae78c31+469cd937ee,gee10cc3b42+a6fc98d2e7,gf1cff7945b+21ad69e7e1,gfbcc870c63+9a11dc8c8f
LSST Data Management Base Package
Loading...
Searching...
No Matches
installGaussianPsf.py
Go to the documentation of this file.
2# LSST Data Management System
3#
4# Copyright 2008-2017 AURA/LSST.
5#
6# This product includes software developed by the
7# LSST Project (http://www.lsst.org/).
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the LSST License Statement and
20# the GNU General Public License along with this program. If not,
21# see <https://www.lsstcorp.org/LegalNotices/>.
22#
23__all__ = ["InstallGaussianPsfConfig", "InstallGaussianPsfTask"]
24
25import math
26
27import lsst.pex.config as pexConfig
28import lsst.pipe.base as pipeBase
29from lsst.meas.algorithms import SingleGaussianPsf
30
31FwhmPerSigma = 2.0*math.sqrt(2.0*math.log(2.0))
32
33
34class InstallGaussianPsfConfig(pexConfig.Config):
35 """Config for InstallGaussianPsfTask
36 """
37 fwhm = pexConfig.Field(
38 dtype=float,
39 default=1.5 * FwhmPerSigma,
40 doc="Estimated FWHM of simple Gaussian PSF model, in pixels. "
41 "Ignored if input exposure has a PSF model."
42 )
43 width = pexConfig.RangeField(
44 dtype=int,
45 doc="Width and height of PSF model, in pixels. Must be odd.",
46 default=11,
47 min=1,
48 )
49
50 def validate(self):
51 if self.width % 2 == 0:
52 raise RuntimeError("width=%s must be odd" % (self.width,))
53
54
55class InstallGaussianPsfTask(pipeBase.Task):
56 """Install a Gaussian PSF model in an exposure.
57
58 If the exposure already has a PSF model then the new model
59 has the same sigma and size (width and height in pixels) of the existing
60 model.
61 """
62 ConfigClass = InstallGaussianPsfConfig
63 _DefaultName = "installSimplePsfModel"
64
65 def run(self, exposure):
66 """Set exposure's PSF to a simple PSF model
67
68 The sigma and width of the new simple PSF model matches the sigma and
69 width of the current model, if any, else the config parameters are used.
70
71 Parameters
72 ----------
73 exposure : `lsst.afw.image.Exposure`
74 Exposure in which to replace or add the PSF model.
75 """
76 if exposure.hasPsf():
77 psfModel = exposure.getPsf()
78 psfSigma = psfModel.computeShape(psfModel.getAveragePosition()).getDeterminantRadius()
79 width, height = psfModel.computeImage(psfModel.getAveragePosition()).getDimensions()
80 else:
81 psfSigma = self.config.fwhm / FwhmPerSigma
82 width = height = self.config.width
83
84 if psfSigma <= 0:
85 raise RuntimeError("psfSigma = %s <= 0" % (psfSigma,))
86
87 self.log.debug("installing a simple Gaussian PSF model with width=%s, height=%s, FWHM=%0.3f",
88 width, height, psfSigma*FwhmPerSigma)
89 psfModel = SingleGaussianPsf(width, height, psfSigma)
90 exposure.setPsf(psfModel)
Represent a PSF as a circularly symmetrical Gaussian.