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# 

2# LSST Data Management System 

3# Copyright 2012-2017 LSST Corporation. 

4# 

5# This product includes software developed by the 

6# LSST Project (http://www.lsst.org/). 

7# 

8# This program is free software: you can redistribute it and/or modify 

9# it under the terms of the GNU General Public License as published by 

10# the Free Software Foundation, either version 3 of the License, or 

11# (at your option) any later version. 

12# 

13# This program is distributed in the hope that it will be useful, 

14# but WITHOUT ANY WARRANTY; without even the implied warranty of 

15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

16# GNU General Public License for more details. 

17# 

18# You should have received a copy of the LSST License Statement and 

19# the GNU General Public License along with this program. If not, 

20# see <http://www.lsstcorp.org/LegalNotices/>. 

21# 

22 

23import os 

24import sys 

25 

26import unittest 

27import warnings 

28from lsst.utils import getPackageDir 

29import lsst.utils.tests 

30import lsst.daf.persistence as dafPersist 

31import lsst.afw.cameraGeom.utils as cameraGeomUtils 

32import lsst.pex.exceptions as pexExcept 

33from lsst.daf.base import DateTime 

34from lsst.afw.image import RotType, FilterLabel 

35from lsst.geom import degrees, radians, SpherePoint 

36 

37try: 

38 type(display) 

39except NameError: 

40 display = False 

41 

42frame = 0 

43 

44 

45class GetRawTestCase(lsst.utils.tests.TestCase): 

46 

47 """Testing butler raw image retrieval""" 

48 

49 def setUp(self): 

50 datadir = self.getTestDataDir() 

51 self.repoPath = os.path.join(datadir, "DATA") 

52 self.calibPath = os.path.join(datadir, "CALIB") 

53 self.butler = dafPersist.Butler(root=self.repoPath, 

54 calibRoot=self.calibPath) 

55 self.size = (2112, 4644) 

56 self.dataId = {'visit': 1038843} 

57 self.filter = "i" 

58 self.filterLabel = FilterLabel.fromBandPhysical("i", "i.MP9702") 

59 self.exposureTime = 615.037 

60 self.darkTime = 615.0 

61 self.dateAvg = DateTime(54771.610881712964, DateTime.MJD, DateTime.TAI) 

62 self.boresightRaDec = SpherePoint(135.40941055, -2.39999432, degrees) 

63 self.boresightAzAlt = SpherePoint(122.34, 52.02, degrees) 

64 self.boresightAirmass = 1.269 

65 self.boresightRotAngle = 0*degrees 

66 self.rotType = RotType.SKY 

67 self.obs_longitude = -155.468876*degrees 

68 self.obs_latitude = 19.825252*degrees 

69 self.obs_elevation = 4215 

70 self.weath_airTemperature = 0.90 

71 self.weath_airPressure = 617.65*100 # 100 Pascal/millibar 

72 self.weath_humidity = 39.77 

73 # NOTE: if we deal with DM-8053 and get UT1 implemented, 

74 # ERA will change slightly. 

75 self.era = 4.55388*radians 

76 

77 def tearDown(self): 

78 del self.butler 

79 

80 def assertExposure(self, exp, ccd, checkFilter=True): 

81 print("dataId: ", self.dataId) 

82 print("ccd: ", ccd) 

83 print("width: ", exp.getWidth()) 

84 print("height: ", exp.getHeight()) 

85 print("detector name: ", exp.getDetector().getName()) 

86 with warnings.catch_warnings(): 

87 # surpress Filter warnings; we already know this is deprecated 

88 warnings.simplefilter('ignore', category=FutureWarning) 

89 print("filter name: ", exp.getFilter().getCanonicalName()) 

90 print("filter label: ", exp.getFilterLabel()) 

91 

92 self.assertEqual(exp.getWidth(), self.size[0]) 

93 self.assertEqual(exp.getHeight(), self.size[1]) 

94 self.assertEqual(exp.getDetector().getName(), "ccd%02d" % ccd) 

95 

96 if checkFilter: 

97 self.assertEqual(exp.getFilterLabel(), self.filterLabel) 

98 with warnings.catch_warnings(): 

99 # suppress Filter warnings; we already know this is deprecated 

100 warnings.simplefilter('ignore', category=FutureWarning) 

101 self.assertEqual(exp.getFilter().getCanonicalName(), self.filter) 

102 

103 if display and ccd % 18 == 0: 

104 global frame 

105 frame += 1 

106 ccd = exp.getDetector() 

107 for amp in ccd: 

108 amp = amp 

109 print(ccd.getId(), amp.getId(), amp.getDataSec().toString(), 

110 amp.getBiasSec().toString(), amp.getElectronicParams().getGain()) 

111 cameraGeomUtils.showCcd(ccd, ccdImage=exp, frame=frame) 

112 

113 def getTestDataDir(self): 

114 try: 

115 datadir = getPackageDir("testdata_cfht") 

116 except pexExcept.NotFoundError as e: 

117 warnings.warn(e.args[0]) 

118 raise unittest.SkipTest("Skipping test as testdata_cfht is not setup") 

119 return datadir 

120 

121 def testRaw(self): 

122 """Test retrieval of raw image""" 

123 if display: 

124 global frame 

125 frame += 1 

126 cameraGeomUtils.showCamera(self.butler.mapper.camera, frame=frame) 

127 

128 for ccd in range(36): 

129 raw = self.butler.get("raw", self.dataId, ccd=ccd, immediate=True) 

130 

131 self.assertExposure(raw, ccd) 

132 

133 visitInfo = raw.getInfo().getVisitInfo() 

134 self.assertAlmostEqual(visitInfo.getDate().get(), self.dateAvg.get()) 

135 self.assertAnglesAlmostEqual(visitInfo.getEra(), self.era, maxDiff=0.1*degrees) 

136 self.assertAlmostEqual(visitInfo.getExposureTime(), self.exposureTime) 

137 self.assertAlmostEqual(visitInfo.getDarkTime(), self.darkTime) 

138 self.assertSpherePointsAlmostEqual(visitInfo.getBoresightRaDec(), self.boresightRaDec) 

139 self.assertSpherePointsAlmostEqual(visitInfo.getBoresightAzAlt(), self.boresightAzAlt) 

140 self.assertAlmostEqual(visitInfo.getBoresightAirmass(), self.boresightAirmass) 

141 self.assertTrue(visitInfo.getBoresightRotAngle(), self.boresightRotAngle) 

142 self.assertEqual(visitInfo.getRotType(), self.rotType) 

143 observatory = visitInfo.getObservatory() 

144 self.assertAnglesAlmostEqual(observatory.getLongitude(), self.obs_longitude) 

145 self.assertAnglesAlmostEqual(observatory.getLatitude(), self.obs_latitude) 

146 self.assertAlmostEqual(observatory.getElevation(), self.obs_elevation) 

147 weather = visitInfo.getWeather() 

148 self.assertAlmostEqual(weather.getAirTemperature(), self.weath_airTemperature) 

149 self.assertAlmostEqual(weather.getAirPressure(), self.weath_airPressure) 

150 self.assertAlmostEqual(weather.getHumidity(), self.weath_humidity) 

151 

152 def getDetrend(self, detrend): 

153 """Test retrieval of detrend image""" 

154 for ccd in range(36): 

155 flat = self.butler.get(detrend, self.dataId, ccd=ccd, immediate=True) 

156 

157 self.assertExposure(flat, ccd, checkFilter=False) 

158 

159 def testFlat(self): 

160 self.getDetrend("flat") 

161 

162 def testBias(self): 

163 self.getDetrend("bias") 

164 

165 def testFringe(self): 

166 self.getDetrend("fringe") 

167 

168 def testPackageName(self): 

169 name = dafPersist.Butler.getMapperClass(root=self.repoPath).packageName 

170 self.assertEqual(name, "obs_cfht") 

171 

172 

173def setup_module(module): 

174 lsst.utils.tests.init() 

175 

176 

177class MemoryTester(lsst.utils.tests.MemoryTestCase): 

178 pass 

179 

180 

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

182 if "--display" in sys.argv: 

183 display = True 

184 lsst.utils.tests.init() 

185 unittest.main()