Skip to content

Commit

Permalink
Add a unit test reading MaskedImage from a butler
Browse files Browse the repository at this point in the history
  • Loading branch information
arunkannawadi committed Dec 6, 2023
1 parent 8e6941a commit e9dafab
Showing 1 changed file with 49 additions and 1 deletion.
50 changes: 49 additions & 1 deletion tests/test_butlerFits.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
import lsst.pex.config
import lsst.utils.tests
from lsst.afw.fits import readMetadata
from lsst.afw.image import LOCAL, ExposureFitsReader
from lsst.afw.image import LOCAL, ExposureFitsReader, MaskedImageFitsReader
from lsst.afw.math import flipImage
from lsst.daf.base import PropertyList, PropertySet
from lsst.daf.butler import Config, DatasetType, StorageClassFactory
Expand Down Expand Up @@ -125,6 +125,7 @@ def setUpClass(cls):
# Create dataset types used by the tests
for datasetTypeName, storageClassName in (
("calexp", "ExposureF"),
("noise", "MaskedImageF"),
("unknown", "ExposureCompositeF"),
("testCatalog", "SourceCatalog"),
("lossless", "ExposureF"),
Expand Down Expand Up @@ -431,6 +432,53 @@ def testExposureFormatterAmpParameter(self):
self.assertImagesEqual(test_t3_untrimmed.image, untrimmed_full[amp.getRawBBox()].image)
self.assertAmplifiersEqual(test_t3_trimmed.getDetector()[0], amp_t3)

def testMaskedImageFormatter(self):
"""Test that a MaskedImage can be persisted and read from a Butler."""
# Read in an Exposure as MaskedImage using MaskedImageFitsReader.
reader = MaskedImageFitsReader(os.path.join(TESTDIR, "data", "calexp.fits"))
mi = reader.read()

# Put the MaskedImage into the Butler and get a reference to it.
dataId = {"visit": 42, "instrument": "DummyCam", "physical_filter": "d-r"}
ref = self.butler.put(mi, "noise", dataId)

# Check that the MaskedImage can be retrieved from the butler.
maskedImage = self.butler.get(ref)
self.assertImagesEqual(maskedImage.image, mi.image)
self.assertImagesEqual(maskedImage.mask, mi.mask)
self.assertImagesEqual(maskedImage.variance, mi.variance)

# Get a DeferredDatasetHandle to load parts of the MaskedImage.
handle = self.butler.getDeferred(ref)

for parameters in (
{},
{"bbox": reader.readBBox()},
{"bbox": Box2I(minimum=Point2I(3, 3), maximum=Point2I(21, 16))},
{"bbox": Box2I(minimum=Point2I(3, 3), maximum=Point2I(21, 16)), "origin": LOCAL},
):
bbox = parameters.get("bbox", reader.readBBox())
with self.subTest(parameters=parameters):
# Check that the reader supports reading sub-regions.
subMaskedImage = reader.read(**parameters)
self.assertImagesEqual(subMaskedImage.image, mi.image[bbox])
self.assertImagesEqual(subMaskedImage.mask, mi.mask[bbox])
self.assertImagesEqual(subMaskedImage.variance, mi.variance[bbox])

# Get a maskedImage within a bounding box from the butler.
subMaskedImage = handle.get(parameters=parameters)
self.assertImagesEqual(subMaskedImage.image, mi.image[bbox])
self.assertImagesEqual(subMaskedImage.mask, mi.mask[bbox])
self.assertImagesEqual(subMaskedImage.variance, mi.variance[bbox])

# Get one component at a time from the butler.
subImage = handle.get(parameters=parameters, component="image")
subMask = handle.get(parameters=parameters, component="mask")
subVariance = handle.get(parameters=parameters, component="variance")
self.assertImagesEqual(subImage, mi.image[bbox])
self.assertImagesEqual(subMask, mi.mask[bbox])
self.assertImagesEqual(subVariance, mi.variance[bbox])


if __name__ == "__main__":
unittest.main()

0 comments on commit e9dafab

Please sign in to comment.