Coverage for tests/test_butler.py : 25%

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#
23import os
24import sys
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
37try:
38 type(display)
39except NameError:
40 display = False
42frame = 0
45class GetRawTestCase(lsst.utils.tests.TestCase):
47 """Testing butler raw image retrieval"""
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, ERA will change slightly.
73 self.era = 4.55388*radians
75 def tearDown(self):
76 del self.butler
78 def assertExposure(self, exp, ccd, checkFilter=True):
79 print("dataId: ", self.dataId)
80 print("ccd: ", ccd)
81 print("width: ", exp.getWidth())
82 print("height: ", exp.getHeight())
83 print("detector name: ", exp.getDetector().getName())
84 print("filter name: ", exp.getFilter().getFilterProperty().getName())
86 self.assertEqual(exp.getWidth(), self.size[0])
87 self.assertEqual(exp.getHeight(), self.size[1])
88 self.assertEqual(exp.getDetector().getName(), "ccd%02d" % ccd)
89 if checkFilter:
90 self.assertEqual(exp.getFilter().getFilterProperty().getName(), self.filter)
92 if display and ccd % 18 == 0:
93 global frame
94 frame += 1
95 ccd = exp.getDetector()
96 for amp in ccd:
97 amp = amp
98 print(ccd.getId(), amp.getId(), amp.getDataSec().toString(),
99 amp.getBiasSec().toString(), amp.getElectronicParams().getGain())
100 cameraGeomUtils.showCcd(ccd, ccdImage=exp, frame=frame)
102 def getTestDataDir(self):
103 try:
104 datadir = getPackageDir("testdata_cfht")
105 except pexExcept.NotFoundError as e:
106 warnings.warn(e.args[0])
107 raise unittest.SkipTest("Skipping test as testdata_cfht is not setup")
108 return datadir
110 def testRaw(self):
111 """Test retrieval of raw image"""
112 if display:
113 global frame
114 frame += 1
115 cameraGeomUtils.showCamera(self.butler.mapper.camera, frame=frame)
117 for ccd in range(36):
118 raw = self.butler.get("raw", self.dataId, ccd=ccd, immediate=True)
120 self.assertExposure(raw, ccd)
122 visitInfo = raw.getInfo().getVisitInfo()
123 self.assertAlmostEqual(visitInfo.getDate().get(), self.dateAvg.get())
124 self.assertAnglesAlmostEqual(visitInfo.getEra(), self.era, maxDiff=0.1*degrees)
125 self.assertAlmostEqual(visitInfo.getExposureTime(), self.exposureTime)
126 self.assertAlmostEqual(visitInfo.getDarkTime(), self.darkTime)
127 self.assertSpherePointsAlmostEqual(visitInfo.getBoresightRaDec(), self.boresightRaDec)
128 self.assertSpherePointsAlmostEqual(visitInfo.getBoresightAzAlt(), self.boresightAzAlt)
129 self.assertAlmostEqual(visitInfo.getBoresightAirmass(), self.boresightAirmass)
130 self.assertTrue(visitInfo.getBoresightRotAngle(), self.boresightRotAngle)
131 self.assertEqual(visitInfo.getRotType(), self.rotType)
132 observatory = visitInfo.getObservatory()
133 self.assertAnglesAlmostEqual(observatory.getLongitude(), self.obs_longitude)
134 self.assertAnglesAlmostEqual(observatory.getLatitude(), self.obs_latitude)
135 self.assertAlmostEqual(observatory.getElevation(), self.obs_elevation)
136 weather = visitInfo.getWeather()
137 self.assertAlmostEqual(weather.getAirTemperature(), self.weath_airTemperature)
138 self.assertAlmostEqual(weather.getAirPressure(), self.weath_airPressure)
139 self.assertAlmostEqual(weather.getHumidity(), self.weath_humidity)
141 def getDetrend(self, detrend):
142 """Test retrieval of detrend image"""
143 for ccd in range(36):
144 flat = self.butler.get(detrend, self.dataId, ccd=ccd, immediate=True)
146 self.assertExposure(flat, ccd, checkFilter=False)
148 def testFlat(self):
149 self.getDetrend("flat")
151 def testBias(self):
152 self.getDetrend("bias")
154 def testFringe(self):
155 self.getDetrend("fringe")
157 def testPackageName(self):
158 name = dafPersist.Butler.getMapperClass(root=self.repoPath).packageName
159 self.assertEqual(name, "obs_cfht")
162def setup_module(module):
163 lsst.utils.tests.init()
166class MemoryTester(lsst.utils.tests.MemoryTestCase):
167 pass
170if __name__ == "__main__": 170 ↛ 171line 170 didn't jump to line 171, because the condition on line 170 was never true
171 if "--display" in sys.argv:
172 display = True
173 lsst.utils.tests.init()
174 unittest.main()