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 obs_decam. 

2# 

3# Developed for the LSST Data Management System. 

4# This product includes software developed by the LSST Project 

5# (http://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 <http://www.gnu.org/licenses/>. 

21 

22"""Unit tests for gen3 DECam raw data ingest. 

23""" 

24 

25import unittest 

26import os 

27import lsst.utils.tests 

28 

29from lsst.daf.butler import Butler, DataCoordinate 

30from lsst.obs.base.ingest_tests import IngestTestBase 

31import lsst.obs.decam 

32 

33testDataPackage = "testdata_decam" 

34try: 

35 testDataDirectory = lsst.utils.getPackageDir(testDataPackage) 

36except LookupError: 

37 testDataDirectory = None 

38 

39 

40class DecamTestBase(IngestTestBase): 

41 

42 ingestDir = os.path.dirname(__file__) 

43 instrumentClassName = "lsst.obs.decam.DarkEnergyCamera" 

44 rawIngestTask = "lsst.obs.decam.DecamRawIngestTask" 

45 

46 

47@unittest.skipIf(testDataDirectory is None, "testdata_decam must be set up") 

48class DecamIngestTestCase(DecamTestBase, lsst.utils.tests.TestCase): 

49 

50 curatedCalibrationDatasetTypes = ("camera", "defects") 

51 

52 # DecamRawIngestTask ingests every detector in each raw file, so we 

53 # only have to specify one file here, but should get two dataIds 

54 # in the output repo. 

55 @property 

56 def file(self): 

57 return os.path.join(testDataDirectory, "rawData", "raw", "raw.fits") 

58 

59 dataIds = [dict(instrument="DECam", exposure=229388, detector=25), 

60 dict(instrument="DECam", exposure=229388, detector=1)] 

61 filterLabel = lsst.afw.image.FilterLabel(physical="z DECam SDSS c0004 9260.0 1520.0", band="z") 

62 

63 @property 

64 def visits(self): 

65 butler = Butler(self.root, collections=[self.outputRun]) 

66 return { 

67 DataCoordinate.standardize( 

68 instrument="DECam", 

69 visit=229388, 

70 universe=butler.registry.dimensions 

71 ): [ 

72 DataCoordinate.standardize( 

73 instrument="DECam", 

74 exposure=229388, 

75 universe=butler.registry.dimensions 

76 ) 

77 ] 

78 } 

79 

80 

81@unittest.skipIf(testDataDirectory is None, "testdata_decam must be set up") 

82class DecamIngestFullFileTestCase(DecamTestBase, lsst.utils.tests.TestCase): 

83 """Test ingesting a file that contains all "normal" DECam HDUs. 

84 """ 

85 

86 # No need to test writeCuratedCalibrations again 

87 curatedCalibrationDatasetTypes = None 

88 

89 # DecamRawIngestTask ingests every detector in each raw file, so we 

90 # only have to specify one file here, but should get many dataIds 

91 # in the output repo. 

92 @property 

93 def file(self): 

94 return os.path.join(testDataDirectory, "rawData", "raw", "c4d_150227_012718_ori-stripped.fits.fz") 

95 

96 dataIds = [{"instrument": "DECam", "exposure": 415282, "detector": i} for i in range(1, 63)] 

97 filterLabel = lsst.afw.image.FilterLabel(physical="r DECam SDSS c0002 6415.0 1480.0", band="r") 

98 

99 @property 

100 def visits(self): 

101 butler = Butler(self.root, collections=[self.outputRun]) 

102 return { 

103 DataCoordinate.standardize( 

104 instrument="DECam", 

105 visit=415282, 

106 universe=butler.registry.dimensions 

107 ): [ 

108 DataCoordinate.standardize( 

109 instrument="DECam", 

110 exposure=415282, 

111 universe=butler.registry.dimensions 

112 ) 

113 ] 

114 } 

115 

116 

117@unittest.skipIf(testDataDirectory is None, "testdata_decam must be set up") 

118class DecamIngestShuffledFullFileTestCase(DecamTestBase, lsst.utils.tests.TestCase): 

119 """Test ingesting a file that contains all detectors in a random order. 

120 """ 

121 

122 # No need to test writeCuratedCalibrations again 

123 curatedCalibrationDatasetTypes = None 

124 

125 # DecamRawIngestTask ingests every detector in each raw file, so we 

126 # only have to specify one file here, but should get many dataIds 

127 # in the output repo. 

128 @property 

129 def file(self): 

130 return os.path.join(testDataDirectory, "rawData", "raw", 

131 "c4d_150227_012718_ori-stripped-shuffled.fits.fz") 

132 

133 dataIds = [{"instrument": "DECam", "exposure": 415282, "detector": i} for i in range(1, 63)] 

134 filterLabel = lsst.afw.image.FilterLabel(physical="r DECam SDSS c0002 6415.0 1480.0", band="r") 

135 

136 @property 

137 def visits(self): 

138 butler = Butler(self.root, collections=[self.outputRun]) 

139 return { 

140 DataCoordinate.standardize( 

141 instrument="DECam", 

142 visit=415282, 

143 universe=butler.registry.dimensions 

144 ): [ 

145 DataCoordinate.standardize( 

146 instrument="DECam", 

147 exposure=415282, 

148 universe=butler.registry.dimensions 

149 ) 

150 ] 

151 } 

152 

153 

154def setup_module(module): 

155 lsst.utils.tests.init() 

156 

157 

158if __name__ == "__main__": 158 ↛ 159line 158 didn't jump to line 159, because the condition on line 158 was never true

159 lsst.utils.tests.init() 

160 unittest.main()