Skip to content

Commit

Permalink
Add unit test for diffim mask plane behavior.
Browse files Browse the repository at this point in the history
  • Loading branch information
isullivan committed May 6, 2023
1 parent 353979b commit ff935c2
Showing 1 changed file with 80 additions and 0 deletions.
80 changes: 80 additions & 0 deletions tests/test_subtractTask.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,47 @@ def test_mismatched_template(self):
with self.assertRaises(AssertionError):
task.run(template, science, sources)

def test_clear_template_mask(self):
noiseLevel = 1.
science, sources = makeTestImage(psfSize=3.0, noiseLevel=noiseLevel, noiseSeed=6)
template, _ = makeTestImage(psfSize=2.0, noiseLevel=noiseLevel, noiseSeed=7,
templateBorderSize=20, doApplyCalibration=True)
diffimEmptyMaskPlanes = ["DETECTED", "DETECTED_NEGATIVE"]
config = subtractImages.AlardLuptonSubtractTask.ConfigClass()
config.doSubtractBackground = False
config.mode = "convolveTemplate"
# Ensure that each each mask plane is set for some pixels
mask = template.mask
x0 = 50
x1 = 75
y0 = 150
y1 = 175
scienceMaskCheck = {}
for maskPlane in mask.getMaskPlaneDict().keys():
scienceMaskCheck[maskPlane] = np.sum(science.mask.array & mask.getPlaneBitMask(maskPlane) > 0)
mask.array[x0: x1, y0: y1] |= mask.getPlaneBitMask(maskPlane)
self.assertTrue(np.sum(mask.array & mask.getPlaneBitMask(maskPlane) > 0))

task = subtractImages.AlardLuptonSubtractTask(config=config)
output = task.run(template, science, sources)
# Verify that the template mask has been modified in place
for maskPlane in mask.getMaskPlaneDict().keys():
if maskPlane in diffimEmptyMaskPlanes:
self.assertTrue(np.sum(mask.array & mask.getPlaneBitMask(maskPlane) == 0))
elif maskPlane in config.preserveTemplateMask:
self.assertTrue(np.sum(mask.array & mask.getPlaneBitMask(maskPlane) > 0))
else:
self.assertTrue(np.sum(mask.array & mask.getPlaneBitMask(maskPlane) == 0))
# Mask planes set in the science image should also be set in the difference
# Except the "DETECTED" planes should have been cleared
diffimMask = output.difference.mask
for maskPlane, scienceSum in scienceMaskCheck.items():
diffimSum = np.sum(diffimMask.array & mask.getPlaneBitMask(maskPlane) > 0)
if maskPlane in diffimEmptyMaskPlanes:
self.assertEqual(diffimSum, 0)
else:
self.assertTrue(diffimSum >= scienceSum)

def test_equal_images(self):
"""Test that running with enough sources produces reasonable output,
with the same size psf in the template and science.
Expand Down Expand Up @@ -719,6 +760,45 @@ def test_equal_images(self):
statsCtrl=statsCtrl, statistic=afwMath.STDEV)
self.assertFloatsAlmostEqual(scoreStd, np.sqrt(2)*noiseLevel/np.sqrt(nea), rtol=0.1)

def test_clear_template_mask(self):
noiseLevel = 1.
science, sources = makeTestImage(psfSize=3.0, noiseLevel=noiseLevel, noiseSeed=6)
template, _ = makeTestImage(psfSize=2.0, noiseLevel=noiseLevel, noiseSeed=7,
templateBorderSize=20, doApplyCalibration=True)
diffimEmptyMaskPlanes = ["DETECTED", "DETECTED_NEGATIVE"]
config = subtractImages.AlardLuptonPreconvolveSubtractTask.ConfigClass()
config.doSubtractBackground = False # Ensure that each each mask plane is set for some pixels
mask = template.mask
x0 = 50
x1 = 75
y0 = 150
y1 = 175
scienceMaskCheck = {}
for maskPlane in mask.getMaskPlaneDict().keys():
scienceMaskCheck[maskPlane] = np.sum(science.mask.array & mask.getPlaneBitMask(maskPlane) > 0)
mask.array[x0: x1, y0: y1] |= mask.getPlaneBitMask(maskPlane)
self.assertTrue(np.sum(mask.array & mask.getPlaneBitMask(maskPlane) > 0))

task = subtractImages.AlardLuptonPreconvolveSubtractTask(config=config)
output = task.run(template, science, sources)
# Verify that the template mask has been modified in place
for maskPlane in mask.getMaskPlaneDict().keys():
if maskPlane in diffimEmptyMaskPlanes:
self.assertTrue(np.sum(mask.array & mask.getPlaneBitMask(maskPlane) == 0))
elif maskPlane in config.preserveTemplateMask:
self.assertTrue(np.sum(mask.array & mask.getPlaneBitMask(maskPlane) > 0))
else:
self.assertTrue(np.sum(mask.array & mask.getPlaneBitMask(maskPlane) == 0))
# Mask planes set in the science image should also be set in the difference
# Except the "DETECTED" planes should have been cleared
diffimMask = output.scoreExposure.mask
for maskPlane, scienceSum in scienceMaskCheck.items():
diffimSum = np.sum(diffimMask.array & mask.getPlaneBitMask(maskPlane) > 0)
if maskPlane in diffimEmptyMaskPlanes:
self.assertEqual(diffimSum, 0)
else:
self.assertTrue(diffimSum >= scienceSum)

def test_agnostic_template_psf(self):
"""Test that the Score image is the same whether the template PSF is
larger or smaller than the science image PSF.
Expand Down

0 comments on commit ff935c2

Please sign in to comment.