Skip to content

Commit

Permalink
Run SafeClip and CompareWarp Coadds during unit testing
Browse files Browse the repository at this point in the history
* Run SafeClipAssembleCoadd and CompareWarpAssembleCoadd in mockCoadd.py
* Modify CompareWarp to handle case where a directWarp has a few non-NaN pixels
  and psfMatchedWarp has none as in mocks
  • Loading branch information
yalsayyad committed Sep 21, 2017
1 parent 54fa3e3 commit 6b5dac3
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 10 deletions.
22 changes: 17 additions & 5 deletions python/lsst/pipe/tasks/assembleCoadd.py
Original file line number Diff line number Diff line change
Expand Up @@ -1481,6 +1481,7 @@ def setDefaults(self):
self.assembleStaticSkyModel.warpType = 'psfMatched'
self.assembleStaticSkyModel.statistic = 'MEDIAN'
self.assembleStaticSkyModel.doWrite = False
self.statistic = 'MEAN'


## \addtogroup LSST_task_documentation
Expand Down Expand Up @@ -1667,6 +1668,8 @@ def findArtifacts(self, templateCoadd, tempExpRefList, imageScalerList):
epochCountImage = afwImage.ImageU(templateCoadd.getBBox())
for warpRef, imageScaler in zip(tempExpRefList, imageScalerList):
mi = self._readAndComputeWarpDiff(warpRef, imageScaler, templateCoadd)
if mi is None:
continue
chiIm = self._makeChiIm(mi)
chiOneMap = self._snrToBinaryIm(chiIm)
epochCountImage += chiOneMap
Expand All @@ -1678,11 +1681,15 @@ def findArtifacts(self, templateCoadd, tempExpRefList, imageScalerList):
maxNumEpochs = int(max(1, self.config.temporalThreshold*len(tempExpRefList)))
for warpRef, imageScaler in zip(tempExpRefList, imageScalerList):
mi = self._readAndComputeWarpDiff(warpRef, imageScaler, templateCoadd)
chiIm = self._makeChiIm(mi)
chiOneMap = self._snrToBinaryArr(chiIm.array)
outliers = afwImage.makeMaskFromArray(chiOneMap.astype(afwImage.MaskPixel))
outliers.setXY0(mi.getXY0())
spanSetList = afwGeom.SpanSet.fromMask(outliers).split()
if mi is not None:
chiIm = self._makeChiIm(mi)
chiOneMap = self._snrToBinaryArr(chiIm.array)
outliers = afwImage.makeMaskFromArray(chiOneMap.astype(afwImage.MaskPixel))
outliers.setXY0(mi.getXY0())
spanSetList = afwGeom.SpanSet.fromMask(outliers).split()
else:
chiIm = afwImage.ImageF(templateCoadd.getBBox(), numpy.nan)
spanSetList = []

# PSF-Matched warps have less available area (~the matching kernel) because the calexps
# undergo a second convolution. Pixels with data in the direct warp
Expand Down Expand Up @@ -1763,7 +1770,12 @@ def _makeChiIm(self, maskedImage):

def _readAndComputeWarpDiff(self, warpRef, imageScaler, templateCoadd):
# Warp comparison must use PSF-Matched Warps regardless of requested coadd warp type
warpName = self.getTempExpDatasetName('psfMatched')
if not warpRef.datasetExists(warpName):
self.log.warn("Could not find %s %s; skipping it", warpName, warpRef.dataId)
return None
warp = warpRef.get(self.getTempExpDatasetName('psfMatched'), immediate=True)
# direct image scaler OK for PSF-matched Warp
imageScaler.scaleMaskedImage(warp.getMaskedImage())
mi = warp.getMaskedImage()
mi -= templateCoadd.getMaskedImage()
Expand Down
17 changes: 12 additions & 5 deletions python/lsst/pipe/tasks/mocks/mockCoadd.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@
import lsst.pipe.base
from lsst.pipe.tasks.makeSkyMap import MakeSkyMapTask
from lsst.pipe.tasks.makeCoaddTempExp import MakeCoaddTempExpTask
from lsst.pipe.tasks.assembleCoadd import AssembleCoaddTask
from lsst.pipe.tasks.assembleCoadd import (AssembleCoaddTask, SafeClipAssembleCoaddTask,
CompareWarpAssembleCoaddTask)
from .mockObject import MockObjectTask
from .mockObservation import MockObservationTask
from .mockSelect import MockSelectImagesTask
Expand Down Expand Up @@ -243,10 +244,13 @@ def makeCoaddTask(self, cls, assemblePsfMatched=False):
config.warpAndPsfMatch.psfMatch.kernel['AL'].sizeCellX = 64
config.warpAndPsfMatch.psfMatch.kernel['AL'].sizeCellY = 64

elif cls == AssembleCoaddTask:
config.doMatchBackgrounds = False
elif cls in [AssembleCoaddTask, SafeClipAssembleCoaddTask, CompareWarpAssembleCoaddTask]:
if assemblePsfMatched:
config.warpType = 'psfMatched'
if cls != AssembleCoaddTask:
config.doWrite = False
if cls == CompareWarpAssembleCoaddTask:
config.assembleStaticSkyModel.select.retarget(MockSelectImagesTask)
return cls(config)

def iterPatchRefs(self, butler, tractInfo):
Expand All @@ -270,12 +274,15 @@ def buildCoadd(self, butler, skyMap=None, tract=0):
skyMap = butler.get(self.config.coaddName + "Coadd_skyMap")
tractInfo = skyMap[tract]
makeCoaddTempExpTask = self.makeCoaddTask(MakeCoaddTempExpTask)
assembleCoaddTask = self.makeCoaddTask(AssembleCoaddTask)
directCoaddTaskList = []
for coaddTask in [SafeClipAssembleCoaddTask, CompareWarpAssembleCoaddTask, AssembleCoaddTask]:
directCoaddTaskList.append(self.makeCoaddTask(coaddTask))
assemblePsfMatchedCoaddTask = self.makeCoaddTask(AssembleCoaddTask, assemblePsfMatched=True)
for patchRef in self.iterPatchRefs(butler, tractInfo):
makeCoaddTempExpTask.run(patchRef)
for patchRef in self.iterPatchRefs(butler, tractInfo):
assembleCoaddTask.run(patchRef)
for directCoaddTask in directCoaddTaskList:
directCoaddTask.run(patchRef)
assemblePsfMatchedCoaddTask.run(patchRef)

def buildMockCoadd(self, butler, truthCatalog=None, skyMap=None, tract=0):
Expand Down

0 comments on commit 6b5dac3

Please sign in to comment.