Skip to content

Commit

Permalink
Extend ExposureFitsReader to subcomponents.
Browse files Browse the repository at this point in the history
  • Loading branch information
czwa committed Apr 1, 2020
1 parent a36a3b6 commit ca274d2
Showing 1 changed file with 17 additions and 32 deletions.
49 changes: 17 additions & 32 deletions python/lsst/daf/butler/formatters/fitsExposureFormatter.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,27 +42,6 @@ def metadata(self):
self._metadata = self.readMetadata()
return self._metadata

def readImageComponent(self, component):
"""Read the image, mask, or variance component of an Exposure.
Parameters
----------
fileDescriptor : `FileDescriptor`
Identifies the file to read and parameters to be used for reading.
component : `str`, optional
Component to read from the file. Always one of "image",
"variance", or "mask".
Returns
-------
image : `~lsst.afw.image.Image` or `~lsst.afw.image.Mask`
In-memory image, variance, or mask component.
"""
# TODO: could be made more efficient *if* Exposure type objects
# held the class objects of their components.
full = self.readFull()
return self.fileDescriptor.storageClass.assembler().getComponent(full, component)

def readMetadata(self):
"""Read all header metadata directly into a PropertyList.
Expand Down Expand Up @@ -97,8 +76,8 @@ def stripMetadata(self):
bboxFromMetadata(self.metadata) # always strips
makeSkyWcs(self.metadata, strip=True)

def readInfoComponent(self, component):
"""Read a component held by ExposureInfo.
def readComponent(self, component):
"""Read a component held by the Exposure.
Parameters
----------
Expand All @@ -110,11 +89,19 @@ def readInfoComponent(self, component):
obj : component-dependent
In-memory component object.
"""
from lsst.afw.image import LOCAL
from lsst.geom import Box2I, Point2I
parameters = dict(bbox=Box2I(minimum=Point2I(0, 0), maximum=Point2I(0, 0)), origin=LOCAL)
tiny = self.readFull(parameters)
return self.fileDescriptor.storageClass.assembler().getComponent(tiny, component)
reader = ExposureFitsReader(self.fileDescriptor.location.path)
componentMap = {'wcs': 'readWcs',
'coaddInputs': 'readCoaddInputs',
'psf': 'readPsf',
'image': 'readImage',
'mask': 'readMask',
'variance': 'readVariance',
}
method = componentMap.get(component, None)
if method:
caller = getattr(reader, method, None)
if caller:
return caller()

def readFull(self, parameters=None):
"""Read the full Exposure object.
Expand All @@ -140,7 +127,7 @@ def readFull(self, parameters=None):
output = fileDescriptor.storageClass.pytype(fileDescriptor.location.path, **parameters)
except TypeError:
reader = ExposureFitsReader(fileDescriptor.location.path)
output = reader.read()
output = reader.read(parameters)
return output

def read(self, component=None):
Expand Down Expand Up @@ -173,10 +160,8 @@ def read(self, component=None):
if component == "metadata":
self.stripMetadata()
return self.metadata
elif component in ("image", "variance", "mask"):
return self.readImageComponent(component)
elif component is not None:
return self.readInfoComponent(component)
return self.readComponent(component)
else:
raise ValueError("Storage class inconsistency ({} vs {}) but no"
" component requested".format(fileDescriptor.readStorageClass.name,
Expand Down

0 comments on commit ca274d2

Please sign in to comment.