LSSTApplications  20.0.0
LSSTDataManagementBasePackage
Public Member Functions | Static Public Attributes | List of all members
lsst.obs.base.fitsExposureFormatter.FitsExposureFormatter Class Reference
Inheritance diagram for lsst.obs.base.fitsExposureFormatter.FitsExposureFormatter:
lsst.obs.base.fitsRawFormatterBase.FitsRawFormatterBase lsst.obs.decam.rawFormatter.DarkEnergyCameraRawFormatter lsst.obs.decam.rawFormatter.DarkEnergyCameraCPCalibFormatter

Public Member Functions

def metadata (self)
 
def readMetadata (self)
 
def stripMetadata (self)
 
def readComponent (self, component, parameters=None)
 
def readFull (self, parameters=None)
 
def read (self, component=None, parameters=None)
 
def write (self, inMemoryDataset)
 

Static Public Attributes

string extension = ".fits"
 

Detailed Description

Interface for reading and writing Exposures to and from FITS files.

Definition at line 29 of file fitsExposureFormatter.py.

Member Function Documentation

◆ metadata()

def lsst.obs.base.fitsExposureFormatter.FitsExposureFormatter.metadata (   self)
The metadata read from this file. It will be stripped as
components are extracted from it
(`lsst.daf.base.PropertyList`).

Definition at line 36 of file fitsExposureFormatter.py.

36  def metadata(self):
37  """The metadata read from this file. It will be stripped as
38  components are extracted from it
39  (`lsst.daf.base.PropertyList`).
40  """
41  if self._metadata is None:
42  self._metadata = self.readMetadata()
43  return self._metadata
44 

◆ read()

def lsst.obs.base.fitsExposureFormatter.FitsExposureFormatter.read (   self,
  component = None,
  parameters = None 
)
Read data from a file.

Parameters
----------
component : `str`, optional
    Component to read from the file. Only used if the `StorageClass`
    for reading differed from the `StorageClass` used to write the
    file.
parameters : `dict`, optional
    If specified, a dictionary of slicing parameters that
    overrides those in ``fileDescriptor``.

Returns
-------
inMemoryDataset : `object`
    The requested data as a Python object. The type of object
    is controlled by the specific formatter.

Raises
------
ValueError
    Component requested but this file does not seem to be a concrete
    composite.
KeyError
    Raised when parameters passed with fileDescriptor are not
    supported.

Definition at line 166 of file fitsExposureFormatter.py.

166  def read(self, component=None, parameters=None):
167  """Read data from a file.
168 
169  Parameters
170  ----------
171  component : `str`, optional
172  Component to read from the file. Only used if the `StorageClass`
173  for reading differed from the `StorageClass` used to write the
174  file.
175  parameters : `dict`, optional
176  If specified, a dictionary of slicing parameters that
177  overrides those in ``fileDescriptor``.
178 
179  Returns
180  -------
181  inMemoryDataset : `object`
182  The requested data as a Python object. The type of object
183  is controlled by the specific formatter.
184 
185  Raises
186  ------
187  ValueError
188  Component requested but this file does not seem to be a concrete
189  composite.
190  KeyError
191  Raised when parameters passed with fileDescriptor are not
192  supported.
193  """
194  fileDescriptor = self.fileDescriptor
195  if fileDescriptor.readStorageClass != fileDescriptor.storageClass:
196  if component == "metadata":
197  self.stripMetadata()
198  return self.metadata
199  elif component is not None:
200  return self.readComponent(component, parameters)
201  else:
202  raise ValueError("Storage class inconsistency ({} vs {}) but no"
203  " component requested".format(fileDescriptor.readStorageClass.name,
204  fileDescriptor.storageClass.name))
205  return self.readFull()
206 

◆ readComponent()

def lsst.obs.base.fitsExposureFormatter.FitsExposureFormatter.readComponent (   self,
  component,
  parameters = None 
)
Read a component held by the Exposure.

Parameters
----------
component : `str`, optional
    Component to read from the file.
parameters : `dict`, optional
    If specified, a dictionary of slicing parameters that
    overrides those in ``fileDescriptor``.

Returns
-------
obj : component-dependent
    In-memory component object.

Raises
------
KeyError
    Raised if the requested component cannot be handled.

Reimplemented in lsst.obs.base.fitsRawFormatterBase.FitsRawFormatterBase.

Definition at line 79 of file fitsExposureFormatter.py.

79  def readComponent(self, component, parameters=None):
80  """Read a component held by the Exposure.
81 
82  Parameters
83  ----------
84  component : `str`, optional
85  Component to read from the file.
86  parameters : `dict`, optional
87  If specified, a dictionary of slicing parameters that
88  overrides those in ``fileDescriptor``.
89 
90  Returns
91  -------
92  obj : component-dependent
93  In-memory component object.
94 
95  Raises
96  ------
97  KeyError
98  Raised if the requested component cannot be handled.
99  """
100  componentMap = {'wcs': ('readWcs', False),
101  'coaddInputs': ('readCoaddInputs', False),
102  'psf': ('readPsf', False),
103  'image': ('readImage', True),
104  'mask': ('readMask', True),
105  'variance': ('readVariance', True),
106  'photoCalib': ('readPhotoCalib', False),
107  'bbox': ('readBBox', True),
108  'xy0': ('readXY0', True),
109  'metadata': ('readMetadata', False),
110  'filter': ('readFilter', False),
111  'polygon': ('readValidPolygon', False),
112  'apCorrMap': ('readApCorrMap', False),
113  'visitInfo': ('readVisitInfo', False),
114  'transmissionCurve': ('readTransmissionCurve', False),
115  'detector': ('readDetector', False),
116  'extras': ('readExtraComponents', False),
117  'exposureInfo': ('readExposureInfo', False),
118  }
119  method, hasParams = componentMap.get(component, None)
120 
121  if method:
122  reader = ExposureFitsReader(self.fileDescriptor.location.path)
123  caller = getattr(reader, method, None)
124 
125  if caller:
126  if parameters is None:
127  parameters = self.fileDescriptor.parameters
128  if parameters is None:
129  parameters = {}
130  self.fileDescriptor.storageClass.validateParameters(parameters)
131 
132  if hasParams and parameters:
133  return caller(**parameters)
134  else:
135  return caller()
136  else:
137  raise KeyError(f"Unknown component requested: {component}")
138 

◆ readFull()

def lsst.obs.base.fitsExposureFormatter.FitsExposureFormatter.readFull (   self,
  parameters = None 
)
Read the full Exposure object.

Parameters
----------
parameters : `dict`, optional
    If specified a dictionary of slicing parameters that overrides
    those in ``fileDescriptor`.

Returns
-------
exposure : `~lsst.afw.image.Exposure`
    Complete in-memory exposure.

Reimplemented in lsst.obs.base.fitsRawFormatterBase.FitsRawFormatterBase.

Definition at line 139 of file fitsExposureFormatter.py.

139  def readFull(self, parameters=None):
140  """Read the full Exposure object.
141 
142  Parameters
143  ----------
144  parameters : `dict`, optional
145  If specified a dictionary of slicing parameters that overrides
146  those in ``fileDescriptor`.
147 
148  Returns
149  -------
150  exposure : `~lsst.afw.image.Exposure`
151  Complete in-memory exposure.
152  """
153  fileDescriptor = self.fileDescriptor
154  if parameters is None:
155  parameters = fileDescriptor.parameters
156  if parameters is None:
157  parameters = {}
158  fileDescriptor.storageClass.validateParameters(parameters)
159  try:
160  output = fileDescriptor.storageClass.pytype(fileDescriptor.location.path, **parameters)
161  except TypeError:
162  reader = ExposureFitsReader(fileDescriptor.location.path)
163  output = reader.read(**parameters)
164  return output
165 

◆ readMetadata()

def lsst.obs.base.fitsExposureFormatter.FitsExposureFormatter.readMetadata (   self)
Read all header metadata directly into a PropertyList.

Returns
-------
metadata : `~lsst.daf.base.PropertyList`
    Header metadata.

Reimplemented in lsst.obs.decam.rawFormatter.DarkEnergyCameraRawFormatter.

Definition at line 45 of file fitsExposureFormatter.py.

45  def readMetadata(self):
46  """Read all header metadata directly into a PropertyList.
47 
48  Returns
49  -------
50  metadata : `~lsst.daf.base.PropertyList`
51  Header metadata.
52  """
53  from lsst.afw.image import readMetadata
54  md = readMetadata(self.fileDescriptor.location.path)
55  fix_header(md)
56  return md
57 

◆ stripMetadata()

def lsst.obs.base.fitsExposureFormatter.FitsExposureFormatter.stripMetadata (   self)
Remove metadata entries that are parsed into components.

This is only called when just the metadata is requested; stripping
entries there forces code that wants other components to ask for those
components directly rather than trying to extract them from the
metadata manually, which is fragile.  This behavior is an intentional
change from Gen2.

Parameters
----------
metadata : `~lsst.daf.base.PropertyList`
    Header metadata, to be modified in-place.

Reimplemented in lsst.obs.base.fitsRawFormatterBase.FitsRawFormatterBase.

Definition at line 58 of file fitsExposureFormatter.py.

58  def stripMetadata(self):
59  """Remove metadata entries that are parsed into components.
60 
61  This is only called when just the metadata is requested; stripping
62  entries there forces code that wants other components to ask for those
63  components directly rather than trying to extract them from the
64  metadata manually, which is fragile. This behavior is an intentional
65  change from Gen2.
66 
67  Parameters
68  ----------
69  metadata : `~lsst.daf.base.PropertyList`
70  Header metadata, to be modified in-place.
71  """
72  # TODO: make sure this covers everything, by delegating to something
73  # that doesn't yet exist in afw.image.ExposureInfo.
74  from lsst.afw.image import bboxFromMetadata
75  from lsst.afw.geom import makeSkyWcs
76  bboxFromMetadata(self.metadata) # always strips
77  makeSkyWcs(self.metadata, strip=True)
78 

◆ write()

def lsst.obs.base.fitsExposureFormatter.FitsExposureFormatter.write (   self,
  inMemoryDataset 
)
Write a Python object to a file.

Parameters
----------
inMemoryDataset : `object`
    The Python object to store.

Returns
-------
path : `str`
    The `URI` where the primary file is stored.

Reimplemented in lsst.obs.base.fitsRawFormatterBase.FitsRawFormatterBase.

Definition at line 207 of file fitsExposureFormatter.py.

207  def write(self, inMemoryDataset):
208  """Write a Python object to a file.
209 
210  Parameters
211  ----------
212  inMemoryDataset : `object`
213  The Python object to store.
214 
215  Returns
216  -------
217  path : `str`
218  The `URI` where the primary file is stored.
219  """
220  # Update the location with the formatter-preferred file extension
221  self.fileDescriptor.location.updateExtension(self.extension)
222  inMemoryDataset.writeFits(self.fileDescriptor.location.path)
223  return self.fileDescriptor.location.pathInStore

Member Data Documentation

◆ extension

string lsst.obs.base.fitsExposureFormatter.FitsExposureFormatter.extension = ".fits"
static

Definition at line 32 of file fitsExposureFormatter.py.


The documentation for this class was generated from the following file:
lsst::afw::image
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects.
Definition: imageAlgorithm.dox:1
pex.config.history.format
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:174
lsst.pipe.tasks.mergeDetections.write
def write(self, patchRef, catalog)
Write the output.
Definition: mergeDetections.py:388
lsst::afw::image.readMetadata.readMetadataContinued.readMetadata
readMetadata
Definition: readMetadataContinued.py:28
lsst::afw::image::bboxFromMetadata
lsst::geom::Box2I bboxFromMetadata(daf::base::PropertySet &metadata)
Determine the image bounding box from its metadata (FITS header)
Definition: Image.cc:694
lsst::afw::geom::makeSkyWcs
std::shared_ptr< SkyWcs > makeSkyWcs(daf::base::PropertySet &metadata, bool strip=false)
Construct a SkyWcs from FITS keywords.
Definition: SkyWcs.cc:526
lsst::afw::geom
Definition: frameSetUtils.h:40