Coverage for python/lsst/afw/image/_photoCalibContinued.py: 41%

23 statements  

« prev     ^ index     » next       coverage.py v6.4.2, created at 2022-08-01 01:19 -0700

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

23 

24import numpy as np 

25from astropy import units 

26 

27from lsst.utils import continueClass 

28 

29from ._imageLib import PhotoCalib 

30 

31 

32@continueClass 

33class PhotoCalib: # noqa: F811 

34 def getLocalCalibrationArray(self, x, y): 

35 """Get the local calibration values (nJy/counts) for numpy arrays (pixels). 

36 

37 Parameters 

38 ---------- 

39 x : `np.ndarray` (N,) 

40 Array of x values (pixels). 

41 y : `np.ndarray` (N,) 

42 Array of y values (pixels). 

43 

44 Returns 

45 ------- 

46 localCalibration : `np.ndarray` (N,) 

47 Array of local calibration values (nJy/counts). 

48 """ 

49 if self._isConstant: 

50 return np.full(len(x), self.getCalibrationMean()) 

51 else: 

52 bf = self.computeScaledCalibration() 

53 return self.getCalibrationMean()*bf.evaluate(x, y) 

54 

55 def instFluxToMagnitudeArray(self, instFluxes, x, y): 

56 """Convert instFlux (counts) to magnitudes for numpy arrays (pixels). 

57 

58 Parameters 

59 ---------- 

60 instFluxes : `np.ndarray` (N,) 

61 Array of instFluxes to convert (counts). 

62 x : `np.ndarray` (N,) 

63 Array of x values (pixels). 

64 y : `np.ndarray` (N,) 

65 Array of y values (pixels). 

66 

67 Returns 

68 ------- 

69 magnitudes : `astropy.units.Magnitude` (N,) 

70 Array of AB magnitudes. 

71 """ 

72 scale = self.getLocalCalibrationArray(x, y) 

73 nanoJansky = (instFluxes*scale)*units.nJy 

74 

75 return nanoJansky.to(units.ABmag) 

76 

77 def magnitudeToInstFluxArray(self, magnitudes, x, y): 

78 """Convert magnitudes to instFlux (counts) for numpy arrays (pixels). 

79 

80 Parameters 

81 ---------- 

82 magnitudes : `np.ndarray` or `astropy.units.Magnitude` (N,) 

83 Array of AB magnitudes. 

84 x : `np.ndarray` (N,) 

85 Array of x values (pixels). 

86 y : `np.ndarray` (N,) 

87 Array of y values (pixels). 

88 

89 Returns 

90 ------- 

91 instFluxes : `np.ndarray` (N,) 

92 Array of instFluxes (counts). 

93 """ 

94 scale = self.getLocalCalibrationArray(x, y) 

95 

96 if not isinstance(magnitudes, units.Magnitude): 

97 _magnitudes = magnitudes*units.ABmag 

98 else: 

99 _magnitudes = magnitudes 

100 

101 nanoJansky = _magnitudes.to(units.nJy).value 

102 

103 return nanoJansky/scale