The Frames LSST will likely require to model our optical system and its distortions are listed below, in the same order as the optical path. To distinguish between frames that apply to a single CCD vs. all CCDs together, I preface each frame with the following notation:
1 == all CCDs
N == per-CCD
1 Sky: The spherical sky, above the atmosphere, in the ICRS coordinate system. (ra,dec radians)
1 Top of Atmosphere: A planar sky, above the atmosphere, with seeing distortions removed. Angle relative to optical axis of entrance pupil of telesope. (x,y radians)
1 Pupil: Angle relative to optical axis of entrance pupil of telesope. (x,y radians)
1 Camera: Angle relative to optical axis of entrance pupil of camera. (x,y radians)
1 Focal Plane: 2D planar approximation to the focal plane, origin on the optical axis. LSST recommends, but does not require, that the X axis is aligned along CCD rows (NOTE: the LSST camera has X on CCD columns). Currently an affine transform from Mean Pixels, but need not be. (x,y mm)
N Mean Pixels: Nominal position on entry surface of a detector, uniformly spaced rectangular pixels), chip distortions still in place. X-axis aligned along CCD rows (direction of serial register). (x,y unbinned pixels)
N Actual Pixels: Actual on-chip pixel positions. The transformation from actual pixels to mean pixels involves correcting for such effects as edge rolloff and tree ring distortion. (x,y unbinned pixels)
Separate from the above is a planar approximation frame that can be useful for comparing the effects of various other distortions.
N Tangent Pixels: Where the light would fall on the CCD with no optical distortion. An affine transformation from Atmosphere coordinates, with the center, orientation and scale matching that CCD's Mean Pixels at the center of that CCD. Transforming from Tangent Pixels to Sky results in a local tangent plane projection of the sky on this CCD. Useful for studying the effect of optical distortion. Note that a Camera Geometry provides a similar nominal Tangent Pixel Frame which is an affine transform to the Pupil. (x,y unbinned pixels)
It can be useful to define a 3D focal plane to specify the height of the chips above/below the 2D Focal Plane frame. We may want to replace the 2D Frame with this 3D Frame if it allows us more leverage in fitting for distortions or if it helps take care of a different type of distortion. Otherwise, we likely do not want this as part of our transform sequence, as it is more complicated but may not actually gain us anything.
1 3D Focal: 3D positions of the detectors at the optical focal plane, origin on the optical axis, X axis aligned along CCD rows. (x,y,z mm)
afw.CameraGeom describes our currently supported camera geometry coordinate systems, from which some of the above was derived.
I divided Pupil into two frames, Pupil and Camera, because one could have multiple cameras in the same telescope (e.g. prototype and full LSST cameras), each introducing their own distortions while the rest of the system is unchanged. We may include the camera distortions into the Pupil->Focal mapping for simplicity and because their distortions might not be numerically separable, but I could see utility in keeping those separate, particularly if the nature of the distortions from the camera and telescope are different.
For the ease of modeling the actual distortions that occur through the optical path, one could further separate Camera and Pupil into N Frames, one per optical element:
1 Camera could be 4 Frames: 3 lenses and 1 filter (x,y radians)
1 Pupil could be 3 frames: Primary, Secondary, Tertiary (x,y radians)
Whether such fine grained separation would be useful in practice remains to be seen. We should, however, be mindful of decisions that would prevent us from implementing it in the future.