MakeRawVisitInfo

class lsst.obs.base.MakeRawVisitInfo(log=None)

Bases: object

Base class functor to make a VisitInfo from the FITS header of a raw image.

A subclass will be wanted for each camera. Subclasses should override:

  • setArgDict, The override can call the base implementation,
    which simply sets exposure time and date of observation
  • getDateAvg

The design philosophy is to make a best effort and log warnings of problems, rather than raising exceptions, in order to extract as much VisitInfo information as possible from a messy FITS header without the user needing to add a lot of error handling.

However, the methods that transform units are less forgiving; they assume the user provides proper data types, since type errors in arguments to those are almost certainly due to coding mistakes.

Parameters:
log : lsst.log.Log or None

Logger to use for messages. (None to use Log.getLogger("MakeRawVisitInfo")).

Methods Summary

__call__(md, exposureId) Construct a VisitInfo and strip associated data from the metadata.
altitudeFromZenithDistance(zd) Convert zenith distance to altitude (lsst.afw.geom.Angle)
centigradeFromKelvin(tempK) Convert temperature from Kelvin to Centigrade
defaultMetadata(value, defaultValue[, …]) Return the value if it is not NaN and within min/max, otherwise return defaultValue.
eraFromLstAndLongitude(lst, longitude) Return an approximate Earth Rotation Angle (afw:Angle) computed from local sidereal time and longitude (both as afw:Angle; Longitude shares the afw:Observatory covention: positive values are E of Greenwich).
getDarkTime(argDict) Get the darkTime from the DARKTIME keyword, else expTime, else NaN,
getDateAvg(md, exposureTime) Return date at the middle of the exposure.
offsetDate(date, offsetSec) Return a date offset by a specified number of seconds.
pascalFromMBar(mbar) Convert pressure from millibars to Pascals
pascalFromMmHg(mmHg) Convert pressure from mm Hg to Pascals
pascalFromTorr(torr) Convert pressure from torr to Pascals
popAngle(md, key[, units]) Pop an lsst.afw.geom.Angle, whose metadata is in the specified units, with a default of Nan
popFloat(md, key) Pop a float with a default of NaN.
popIsoDate(md, key[, timesys]) Pop a FITS ISO date as an lsst.daf.base.DateTime
popItem(md, key[, default]) Remove an item of metadata and return the value.
popMjdDate(md, key[, timesys]) Get a FITS MJD date as an lsst.daf.base.DateTime.
setArgDict(md, argDict) Fill an argument dict with arguments for VisitInfo and pop associated metadata

Methods Documentation

__call__(md, exposureId)

Construct a VisitInfo and strip associated data from the metadata.

Parameters:
md : lsst.daf.base.PropertyList or lsst.daf.base.PropertySet

Metadata to pull from. Items that are used are stripped from the metadata (except TIMESYS, because it may apply to other keywords).

exposureId : int

exposure ID

Notes

The basic implementation sets date and exposureTime using typical values found in FITS files and logs a warning if neither can be set.

static altitudeFromZenithDistance(zd)

Convert zenith distance to altitude (lsst.afw.geom.Angle)

static centigradeFromKelvin(tempK)

Convert temperature from Kelvin to Centigrade

static defaultMetadata(value, defaultValue, minimum=None, maximum=None)

Return the value if it is not NaN and within min/max, otherwise return defaultValue.

Parameters:
value : float

metadata value returned by popItem, popFloat, or popAngle

defaultValue : float`

default value to use if the metadata value is invalid

minimum : float

Minimum possible valid value, optional

maximum : float

Maximum possible valid value, optional

Returns:
`float`

The “validated” value.

static eraFromLstAndLongitude(lst, longitude)

Return an approximate Earth Rotation Angle (afw:Angle) computed from local sidereal time and longitude (both as afw:Angle; Longitude shares the afw:Observatory covention: positive values are E of Greenwich).

NOTE: if we properly compute ERA via UT1 a la DM-8053, we should remove this method.

getDarkTime(argDict)

Get the darkTime from the DARKTIME keyword, else expTime, else NaN,

If dark time is available then subclasses should call this method by putting the following in their __init__ method:

argDict['darkTime'] = self.getDarkTime(argDict)
Parameters:
argdict : dict

Dict of arguments.

Returns:
`float`

Dark time, as inferred from the metadata.

getDateAvg(md, exposureTime)

Return date at the middle of the exposure.

Parameters:
md : lsst.daf.base.PropertyList or PropertySet

Metadata to pull from. Items that are used are stripped from the metadata (except TIMESYS, because it may apply to other keywords).

exposureTime : float

Exposure time (sec)

Notes

Subclasses must override. Here is a typical implementation:

dateObs = self.popIsoDate(md, "DATE-OBS")
return self.offsetDate(dateObs, 0.5*exposureTime)
offsetDate(date, offsetSec)

Return a date offset by a specified number of seconds.

date : lsst.daf.base.DateTime
Date baseline to offset from.
offsetSec : float
Offset, in seconds.
Returns:
`lsst.daf.base.DateTime`

The offset date.

static pascalFromMBar(mbar)

Convert pressure from millibars to Pascals

static pascalFromMmHg(mmHg)

Convert pressure from mm Hg to Pascals

Notes

Could use the following, but astropy.units.cds is not fully compatible with Python 2 as of astropy 1.2.1 (see https://github.com/astropy/astropy/issues/5350#issuecomment-248612824): astropy.units.cds.mmHg.to(astropy.units.pascal, mmHg)

static pascalFromTorr(torr)

Convert pressure from torr to Pascals

popAngle(md, key, units=Unit("deg"))

Pop an lsst.afw.geom.Angle, whose metadata is in the specified units, with a default of Nan

The angle may be specified as a float or sexagesimal string with 1-3 fields.

Parameters:
md : lsst.daf.base.PropertyList or PropertySet

Metadata to pull key from and remove.

key : str

Key to read and remove from md.

Returns:
`lsst.afw.geom.Angle`

Value of the requested key as an angle; Angle(NaN) if the key is not found.

popFloat(md, key)

Pop a float with a default of NaN.

Parameters:
md : lsst.daf.base.PropertyList or PropertySet

Metadata to pull key from and remove.

key : str

Key to read and remove from md.

Returns:
`float`

Value of the requested key as a float; float(“nan”) if the key is not found.

popIsoDate(md, key, timesys=None)

Pop a FITS ISO date as an lsst.daf.base.DateTime

Parameters:
md : lsst.daf.base.PropertyList or PropertySet

Metadata to pull key from and remove.

key : str

Date key to read and remove from md.

timesys : str

Time system as a string (not case sensitive), e.g. “UTC” or None; if None then look for TIMESYS (but do NOT pop it, since it may be used for more than one date) and if not found, use UTC.

Returns:
`lsst.daf.base.DateTime`

Value of the requested date; DateTime() if the key is not found.

popItem(md, key, default=None)

Remove an item of metadata and return the value.

Log a warning if the key is not found.

Parameters:
md : lsst.daf.base.PropertyList or PropertySet

Metadata to pull key from and remove.

key : str

Metadata key to extract.

default : object

Value to return if key not found.

Returns:
`object`

The value of the specified key, using whatever type md.getScalar(key) returns.

popMjdDate(md, key, timesys=None)

Get a FITS MJD date as an lsst.daf.base.DateTime.

Parameters:
md : lsst.daf.base.PropertyList or PropertySet

Metadata to pull key from and remove.

key : str

Date key to read and remove from md.

timesys : str

Time system as a string (not case sensitive), e.g. “UTC” or None; if None then look for TIMESYS (but do NOT pop it, since it may be used for more than one date) and if not found, use UTC.

Returns:
`lsst.daf.base.DateTime`

Value of the requested date; DateTime() if the key is not found.

setArgDict(md, argDict)

Fill an argument dict with arguments for VisitInfo and pop associated metadata

Subclasses are expected to override this method, though the override may wish to call this default implementation, which:

  • sets exposureTime from “EXPTIME”
  • sets date by calling getDateAvg
Parameters:
md : lsst.daf.base.PropertyList or PropertySet

Metadata to pull from. Items that are used are stripped from the metadata (except TIMESYS, because it may apply to other keywords).

argdict : dict

dict of arguments

Notes

Subclasses should expand this or replace it.