lsst.meas.algorithms
g4a7591d645+fa9daf83c6
Toggle main menu visibility
Loading...
Searching...
No Matches
python
lsst
meas
algorithms
reinterpolate_pixels.py
Go to the documentation of this file.
1
# This file is part of meas_algorithms.
2
#
3
# Developed for the LSST Data Management System.
4
# This product includes software developed by the LSST Project
5
# (https://www.lsst.org).
6
# See the COPYRIGHT file at the top-level directory of this distribution
7
# for details of code ownership.
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 GNU General Public License
20
# along with this program. If not, see <https://www.gnu.org/licenses/>.
21
22
__all__ = (
"ReinterpolatePixelsConfig"
,
"ReinterpolatePixelsTask"
)
23
24
import
itertools
25
26
import
lsst.afw.detection
as
afwDetection
27
import
lsst.afw.math
as
afwMath
28
import
lsst.pex.config
as
pexConfig
29
import
lsst.pipe.base
as
pipeBase
30
from
.
import
Defect, interpolateOverDefects
31
32
33
class
ReinterpolatePixelsConfig
(pexConfig.Config):
34
"""Config for ReinterpolatePixelsTask"""
35
36
maskNameList = pexConfig.ListField[str](
37
doc=
"Names of mask planes whose image-plane values should be interpolated."
,
38
default=[
"SAT"
],
39
)
40
41
fallbackValue = pexConfig.Field[float](
42
doc=
"Value of last resort for interpolation. If not provided (or set to None), it is assigned the "
43
"clipped mean value of the exposure image."
,
44
default=
None
,
45
optional=
True
,
46
)
47
48
49
class
ReinterpolatePixelsTask
(pipeBase.Task):
50
"""Task to reinterpolate pixels"""
51
52
ConfigClass = ReinterpolatePixelsConfig
53
_DefaultName =
"reinterpolatePixels"
54
55
def
run
(self, exposure):
56
"""Reinterpolate pixels over ``exposure``.
57
58
Parameters
59
----------
60
exposure : `lsst.afw.image.Exposure`
61
Exposure to interpolate over.
62
63
Notes
64
-----
65
``exposure`` is modified in place and will become the reinterpolated exposure.
66
"""
67
mask = exposure.mask
68
69
thresh = afwDetection.Threshold(
70
mask.getPlaneBitMask(self.config.maskNameList), afwDetection.Threshold.BITMASK
71
)
72
fpSet = afwDetection.FootprintSet(mask, thresh)
73
defectList = self.
_fromFootprintList
(fpSet.getFootprints())
74
self.
_interpolateDefectList
(exposure, defectList)
75
76
def
_fromFootprintList
(self, fpList):
77
"""Compute a defect list from a footprint list.
78
79
Parameters
80
----------
81
fpList : `list` of `lsst.afw.detection.Footprint`
82
Footprint list to process.
83
84
Returns
85
-------
86
defects : `list` of `lsst.meas.algorithms.Defect`
87
List of defects.
88
89
Notes
90
-----
91
By using `itertools.chain.from_iterable()`, the nested iterables are merged into a flat iterable,
92
allowing convenient iteration over all `lsst.meas.algorithms.Defect` objects.
93
"""
94
return
list(
95
itertools.chain.from_iterable(map(Defect, afwDetection.footprintToBBoxList(fp))
for
fp
in
fpList)
96
)
97
98
def
_interpolateDefectList
(self, exposure, defectList):
99
"""Interpolate over defects specified in a defect list.
100
101
Parameters
102
----------
103
exposure : `lsst.afw.image.Exposure`
104
Exposure to process.
105
defectList : `list` of `lsst.meas.algorithms.Defect`
106
List of defects to interpolate over.
107
108
Notes
109
-----
110
``exposure`` is modified in place and will become the reinterpolated exposure.
111
When reinterpolating following the interpolation in ip_isr, be aware that the masks are intentionally
112
left grown as a side-effect of that interpolation.
113
"""
114
115
# Although `interpolateOverDefects` requires the
116
# `lsst.afw.detection.Psf` argument to be passed, it does not actually
117
# utilize it. A dummy `lsst.afw.detection.Psf` object must still be
118
# provided to prevent a TypeError.
119
dummyPsf = afwDetection.Psf()
120
if
self.config.fallbackValue
is
None
:
121
fallbackValue = afwMath.makeStatistics(exposure.image, afwMath.MEANCLIP).getValue()
122
else
:
123
fallbackValue = self.config.fallbackValue
124
if
"INTRP"
not
in
exposure.mask.getMaskPlaneDict():
125
exposure.mask.addMaskPlane(
"INTRP"
)
126
interpolateOverDefects
(exposure.maskedImage, dummyPsf, defectList, fallbackValue,
True
)
lsst::meas::algorithms.reinterpolate_pixels.ReinterpolatePixelsConfig
Definition
reinterpolate_pixels.py:33
lsst::meas::algorithms.reinterpolate_pixels.ReinterpolatePixelsTask
Definition
reinterpolate_pixels.py:49
lsst::meas::algorithms.reinterpolate_pixels.ReinterpolatePixelsTask._interpolateDefectList
_interpolateDefectList(self, exposure, defectList)
Definition
reinterpolate_pixels.py:98
lsst::meas::algorithms.reinterpolate_pixels.ReinterpolatePixelsTask._fromFootprintList
_fromFootprintList(self, fpList)
Definition
reinterpolate_pixels.py:76
lsst::meas::algorithms.reinterpolate_pixels.ReinterpolatePixelsTask.run
run(self, exposure)
Definition
reinterpolate_pixels.py:55
lsst::afw::detection
lsst::afw::math
lsst::meas::algorithms::interpolateOverDefects
void interpolateOverDefects(MaskedImageT &image, afw::detection::Psf const &psf, std::vector< Defect::Ptr > &badList, double fallbackValue=0.0, bool useFallbackValueAtEdge=false)
Process a set of known bad pixels in an image.
Definition
Interp.cc:2047
lsst::pex::config
lsst.pipe.base
Generated on
for lsst.meas.algorithms by
1.17.0