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 ..slicing import supportSlicing 

30from ..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")