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 

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 = "i2" 

58 self.exposureTime = 615.037 

59 self.darkTime = 615.0 

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

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

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

63 self.boresightAirmass = 1.269 

64 self.boresightRotAngle = 0*degrees 

65 self.rotType = RotType.SKY 

66 self.obs_longitude = -155.468876*degrees 

67 self.obs_latitude = 19.825252*degrees 

68 self.obs_elevation = 4215 

69 self.weath_airTemperature = 0.90 

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

71 self.weath_humidity = 39.77 

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

73 # ERA will change slightly. 

74 self.era = 4.55388*radians 

75 

76 def tearDown(self): 

77 del self.butler 

78 

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

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

81 print("ccd: ", ccd) 

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

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

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

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

86 

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

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

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

90 if checkFilter: 

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

92 

93 if display and ccd % 18 == 0: 

94 global frame 

95 frame += 1 

96 ccd = exp.getDetector() 

97 for amp in ccd: 

98 amp = amp 

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

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

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

102 

103 def getTestDataDir(self): 

104 try: 

105 datadir = getPackageDir("testdata_cfht") 

106 except pexExcept.NotFoundError as e: 

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

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

109 return datadir 

110 

111 def testRaw(self): 

112 """Test retrieval of raw image""" 

113 if display: 

114 global frame 

115 frame += 1 

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

117 

118 for ccd in range(36): 

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

120 

121 self.assertExposure(raw, ccd) 

122 

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

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

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

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

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

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

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

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

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

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

133 observatory = visitInfo.getObservatory() 

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

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

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

137 weather = visitInfo.getWeather() 

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

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

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

141 

142 def getDetrend(self, detrend): 

143 """Test retrieval of detrend image""" 

144 for ccd in range(36): 

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

146 

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

148 

149 def testFlat(self): 

150 self.getDetrend("flat") 

151 

152 def testBias(self): 

153 self.getDetrend("bias") 

154 

155 def testFringe(self): 

156 self.getDetrend("fringe") 

157 

158 def testPackageName(self): 

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

160 self.assertEqual(name, "obs_cfht") 

161 

162 

163def setup_module(module): 

164 lsst.utils.tests.init() 

165 

166 

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

168 pass 

169 

170 

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

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

173 display = True 

174 lsst.utils.tests.init() 

175 unittest.main()