Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# This file is part of afw. 

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__ = ["Exposure"] 

23 

24from lsst.utils.deprecated import deprecate_pybind11 

25import numpy as np 

26 

27from lsst.utils import TemplateMeta 

28 

29from ..image._slicing import supportSlicing 

30from ..image._disableArithmetic import disableImageArithmetic 

31from ..image._fitsIoWithOptions import imageReadFitsWithOptions, exposureWriteFitsWithOptions 

32from ._exposure import ExposureI, ExposureF, ExposureD, ExposureU, ExposureL 

33 

34 

35class Exposure(metaclass=TemplateMeta): 

36 

37 def _set(self, index, value, origin): 

38 """Set the pixel at the given index to a triple (value, mask, variance). 

39 

40 Parameters 

41 ---------- 

42 index : `geom.Point2I` 

43 Position of the pixel to assign to. 

44 value : `tuple` 

45 A tuple of (value, mask, variance) scalars. 

46 origin : `ImageOrigin` 

47 Coordinate system of ``index`` (`PARENT` or `LOCAL`). 

48 """ 

49 self.maskedImage._set(index, value=value, origin=origin) 

50 

51 def _get(self, index, origin): 

52 """Return a triple (value, mask, variance) at the given index. 

53 

54 Parameters 

55 ---------- 

56 index : `geom.Point2I` 

57 Position of the pixel to assign to. 

58 origin : `ImageOrigin` 

59 Coordinate system of ``index`` (`PARENT` or `LOCAL`). 

60 """ 

61 return self.maskedImage._get(index, origin=origin) 

62 

63 def __reduce__(self): 

64 from lsst.afw.fits import reduceToFits 

65 return reduceToFits(self) 

66 

67 def convertF(self): 

68 return ExposureF(self, deep=True) 

69 

70 def convertD(self): 

71 return ExposureD(self, deep=True) 

72 

73 def getImage(self): 

74 return self.maskedImage.image 

75 

76 def setImage(self, image): 

77 self.maskedImage.image = image 

78 

79 image = property(getImage, setImage) 

80 

81 def getMask(self): 

82 return self.maskedImage.mask 

83 

84 def setMask(self, mask): 

85 self.maskedImage.mask = mask 

86 

87 mask = property(getMask, setMask) 

88 

89 def getVariance(self): 

90 return self.maskedImage.variance 

91 

92 def setVariance(self, variance): 

93 self.maskedImage.variance = variance 

94 

95 variance = property(getVariance, setVariance) 

96 

97 readFitsWithOptions = classmethod(imageReadFitsWithOptions) 

98 

99 writeFitsWithOptions = exposureWriteFitsWithOptions 

100 

101 

102Exposure.register(np.int32, ExposureI) 

103Exposure.register(np.float32, ExposureF) 

104Exposure.register(np.float64, ExposureD) 

105Exposure.register(np.uint16, ExposureU) 

106Exposure.register(np.uint64, ExposureL) 

107Exposure.alias("I", ExposureI) 

108Exposure.alias("F", ExposureF) 

109Exposure.alias("D", ExposureD) 

110Exposure.alias("U", ExposureU) 

111Exposure.alias("L", ExposureL) 

112 

113for cls in set(Exposure.values()): 

114 supportSlicing(cls) 

115 disableImageArithmetic(cls) 

116 

117 cls.getFilter = deprecate_pybind11( 

118 cls.getFilter, 

119 reason="Replaced by getFilterLabel. Will be removed after v22.", 

120 version="v22.0") 

121 

122 cls.setFilter = deprecate_pybind11( 

123 cls.setFilter, 

124 reason="Replaced by setFilterLabel. Will be removed after v22.", 

125 version="v22.0")