1 from __future__
import absolute_import, division, print_function
2 from future.utils
import with_metaclass
29 from lsst.afw.cameraGeom
import FOCAL_PLANE, FIELD_ANGLE
31 __all__ = [
"CameraTests"]
36 Tests that the butler returns a useable Camera. 38 In the subclasses's setUp(): 39 * Call setUp_camera() to fill in required parameters. 45 first_detector_name=None,
49 Set up the necessary variables for camera tests. 57 number of detectors in this camera 58 first_detector_name : `str` 59 name of the first detector in this camera 60 plate_scale : `lsst.afw.geom.Angle` 61 plate scale at center of focal plane, as angle-on-sky/mm 63 fields = [
'camera_name',
65 'first_detector_name',
68 CameraData = collections.namedtuple(
"CameraData", fields)
70 n_detectors=n_detectors,
71 first_detector_name=first_detector_name,
72 plate_scale=plate_scale,
76 """Simplest camera test: can we get a Camera instance, and does iterating return Detectors?""" 77 camera = self.butler.get(
'camera', immediate=
True)
78 self.assertIsInstance(camera, lsst.afw.cameraGeom.Camera)
79 for detector
in camera:
80 msg =
"Failed for detector={}".format(detector)
81 self.assertIsInstance(detector, lsst.afw.cameraGeom.Detector, msg=msg)
84 """Check that the butler returns the right type of camera.""" 85 camera = self.butler.get(
'camera', immediate=
True)
86 self.assertEqual(camera.getName(), self.
camera_data.camera_name)
87 self.assertEqual(len(camera), self.
camera_data.n_detectors)
88 self.assertEqual(next(iter(camera)).getName(), self.
camera_data.first_detector_name)
91 """Check the plate scale at center of focal plane 93 Check plate_scale using the FOCAL_PLANE to FIELD_ANGLE transform 97 self.assertIsNotNone(plate_scale)
98 camera = self.butler.get(
'camera', immediate=
True)
99 focalPlaneToFieldAngle = camera.getTransformMap().getTransform(FOCAL_PLANE, FIELD_ANGLE)
100 focalPlaneRadiusMm = 0.001
101 for offsetAngleRad
in (0.0, 0.65, 1.3):
102 cosAng = math.cos(offsetAngleRad)
103 sinAng = math.sin(offsetAngleRad)
104 fieldAngleRadians = focalPlaneToFieldAngle.applyForward(
105 lsst.afw.geom.Point2D(cosAng * focalPlaneRadiusMm, sinAng * focalPlaneRadiusMm))
106 fieldAngleRadius = math.hypot(*fieldAngleRadians) * lsst.afw.geom.radians
107 measuredScale1 = fieldAngleRadius / focalPlaneRadiusMm
108 self.assertAnglesAlmostEqual(measuredScale1, plate_scale)
110 focalPlanePos = focalPlaneToFieldAngle.applyInverse(
111 lsst.afw.geom.Point2D(fieldAngleRadius.asRadians() * cosAng,
112 fieldAngleRadius.asRadians() * sinAng))
113 focalPlaneRadiusMm2 = math.hypot(*focalPlanePos)
114 measureScale2 = fieldAngleRadius / focalPlaneRadiusMm2
115 self.assertAnglesAlmostEqual(measureScale2, plate_scale)
def setUp_camera(self, camera_name=None, n_detectors=None, first_detector_name=None, plate_scale=None)
def test_plate_scale(self)
def test_camera_butler(self)