MakeRawVisitInfo

class lsst.obs.base.MakeRawVisitInfo(log=None, doStripHeader=False)

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:
loglogging.Logger or None

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

doStripHeaderbool, optional

Strip header keywords from the metadata as they are used?

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])

Return an item of metadata.

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:
mdlsst.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) if doStripHeader.

exposureIdint

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:
valuefloat

metadata value returned by popItem, popFloat, or popAngle

defaultValuefloat`

default value to use if the metadata value is invalid

minimumfloat

Minimum possible valid value, optional

maximumfloat

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:
argdictdict

Dict of arguments.

Returns:
float

Dark time, as inferred from the metadata.

getDateAvg(md, exposureTime)

Return date at the middle of the exposure.

Parameters:
mdlsst.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).

exposureTimefloat

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.

datelsst.daf.base.DateTime

Date baseline to offset from.

offsetSecfloat

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:
mdlsst.daf.base.PropertyList or PropertySet

Metadata to pull key from.

keystr

Key to read 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:
mdlsst.daf.base.PropertyList or PropertySet

Metadata to pull key from.

keystr

Key to read.

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:
mdlsst.daf.base.PropertyList or PropertySet

Metadata to pull key from.

keystr

Date key to read from md.

timesysstr

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)

Return an item of metadata.

The item is removed if doStripHeader is True.

Log a warning if the key is not found.

Parameters:
mdlsst.daf.base.PropertyList or PropertySet

Metadata to pull key from and (optionally) remove.

keystr

Metadata key to extract.

defaultobject

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:
mdlsst.daf.base.PropertyList or PropertySet

Metadata to pull key from.

keystr

Date key to read from md.

timesysstr

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:
mdlsst.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).

argdictdict

dict of arguments

Notes

Subclasses should expand this or replace it.