DM-5503 introduces new unified metadata for exposures. The data is obtained using exposure.getInfo().getVisitInfo(). This returns an lsst.afw.image.VisitInfo, which contains the following data (though not all data is available for all cameras):
- exposure ID
- exposure duration (shutter open time)
- dark time: time from CCD flush to readout, including shutter open time
- date of exposure
- universal time (unknown for most cameras)
- earth rotation angle (unknown for most cameras)
- boresight RA/Dec
- boresight AzAlt
- boresight airmass
- boresight rotation angle (not yet set for most cameras)
- rotation type
- observatory longitude, latitude and altitude
- basic weather information
Visit info obtained from an exposure using exposure.getInfo().getVisitInfo().
To make this work, the camera mapper in every obs_ package has a subclass of lsst.obs.base.MakeRawVisitInfo which generates a VisitInfo from the FITS header of a raw image. This is used by the data butler when reading raw images, in order to provide suitable VisitInfo. I adapted all obs_ packages that I knew of, except obs_monocam. However, in most cases I was unable to figure out how the rotator angle (some cameras provide such a value, but it is not sufficiently well documented), so more work can be done here. As far as I can tell no cameras provide a UT1 date or earth rotation angle.
In theory all CCDs in a visit should have the same visit info, but this is not enforced and will not be true if the raw header data used to create the visit info varies from CCD to CCD.
For the most part this change is backwards compatible. However, moving exposure time and date from Calib has been somewhat disruptive:
- When you read old coadds, the exposure time and date are no longer available for each of the exposures that went into the
ExposureTable. They cannot be put into the newCalibobject, and there was no straightforward way to generate aVisitInfofor this case. - Much old code set the exposure time by updating the
Calibin an existing exposure. That no longer works becauseVisitInfois immutable. The existing code was modified to set the exposure time a bit earlier.