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 newCalib
object, and there was no straightforward way to generate aVisitInfo
for this case. - Much old code set the exposure time by updating the
Calib
in an existing exposure. That no longer works becauseVisitInfo
is immutable. The existing code was modified to set the exposure time a bit earlier.