22 __all__ = [
"CameraConfig",
"DetectorConfig"]
25 import lsst.pex.config
as pexConfig
27 from .orientation
import Orientation
28 from .transformConfig
import TransformMapConfig
32 """A configuration that represents (and can be used to construct) a
35 transformDict = pexConfig.ConfigField(
36 "Dictionary of camera transforms keyed on the transform type.", TransformMapConfig)
37 name = pexConfig.Field(
"Name of detector slot", str)
38 id = pexConfig.Field(
"ID of detector slot", int)
39 bbox_x0 = pexConfig.Field(
"x0 of pixel bounding box", int)
40 bbox_y0 = pexConfig.Field(
"y0 of pixel bounding box", int)
41 bbox_x1 = pexConfig.Field(
"x1 of pixel bounding box", int)
42 bbox_y1 = pexConfig.Field(
"y1 of pixel bounding box", int)
43 detectorType = pexConfig.Field(
44 "Detector type: SCIENCE=0, FOCUS=1, GUIDER=2, WAVEFRONT=3", int)
45 physicalType = pexConfig.Field(
46 "How this specific detector is constructed; e.g. CCD, E2V, HgCdTe ", str, default=
"CCD")
47 serial = pexConfig.Field(
48 "Serial string associated with this specific detector", str)
49 offset_x = pexConfig.Field(
50 "x offset from the origin of the camera in mm in the transposed system.", float)
51 offset_y = pexConfig.Field(
52 "y offset from the origin of the camera in mm in the transposed system.", float)
53 refpos_x = pexConfig.Field(
"x position of the reference point in the detector in pixels "
54 "in transposed coordinates.", float)
55 refpos_y = pexConfig.Field(
"y position of the reference point in the detector in pixels "
56 "in transposed coordinates.", float)
57 yawDeg = pexConfig.Field(
"yaw (rotation about z) of the detector in degrees. "
58 "This includes any necessary rotation to go from "
59 "detector coordinates to camera coordinates "
60 "after optional transposition.", float)
61 pitchDeg = pexConfig.Field(
62 "pitch (rotation about y) of the detector in degrees", float)
63 rollDeg = pexConfig.Field(
64 "roll (rotation about x) of the detector in degrees", float)
65 pixelSize_x = pexConfig.Field(
"Pixel size in the x dimension in mm", float)
66 pixelSize_y = pexConfig.Field(
"Pixel size in the y dimension in mm", float)
70 transposeDetector = pexConfig.Field(
71 "Transpose the pixel grid before orienting in focal plane?", bool)
73 crosstalk = pexConfig.ListField(
75 doc=(
"Flattened crosstalk coefficient matrix; should have nAmps x nAmps entries. "
76 "Once 'reshape'-ed, ``coeffs[i][j]`` is the fraction of the j-th amp present on the i-th amp."),
82 """Return a 2-D numpy array of crosstalk coefficients of the proper shape"""
86 if numAmps != int(np.sqrt(len(self.
crosstalk))):
87 numAmps = int(np.sqrt(len(self.
crosstalk)))
89 return np.array(self.
crosstalk, dtype=np.float32).reshape((numAmps, numAmps))
90 except Exception
as e:
91 raise RuntimeError(f
"Cannot reshape 'crosstalk' coefficients to square matrix: {e}")
95 """Return the detector bounding box from the separate box endpoint
103 """Return the detector offset as a Point2D from the separate config
110 """Return the detector reference position as a Point2D from the
111 separate config values.
117 """Return the cameraGeom.Orientation() object defined by the
118 configuration values.
127 """Return the pixel size as an Extent2D from the separate values.
133 """A configuration that represents (and can be used to construct) a Camera.
135 detectorList = pexConfig.ConfigDictField(
136 "List of detector configs", keytype=int, itemtype=DetectorConfig)
137 transformDict = pexConfig.ConfigField(
138 "Dictionary of camera transforms keyed on the transform type.", TransformMapConfig)
139 name = pexConfig.Field(
"Name of this camera", str)
141 plateScale = pexConfig.Field(
142 "Plate scale of the camera in arcsec/mm", float)
145 radialCoeffs = pexConfig.ListField(
146 "Coefficients for radial distortion", float)