112 def run(self, snap0, snap1, defects=None):
115 @param[in] snap0: snapshot exposure 0
116 @param[in] snap1: snapshot exposure 1
117 @defects[in] defect list (for repair task)
118 @return a pipe_base Struct with fields:
119 - exposure: snap-combined exposure
120 - sources: detected sources, or None if detection not performed
125 if self.config.doRepair:
126 self.log.info(
"snapCombine repair")
127 psf = self.
makeInitialPsf(snap0, fwhmPix=self.config.repairPsfFwhm)
130 self.repair.run(snap0, defects=defects, keepCRs=
False)
131 self.repair.run(snap1, defects=defects, keepCRs=
False)
132 self.display(
'repair0', exposure=snap0)
133 self.display(
'repair1', exposure=snap1)
135 if self.config.doDiffIm:
136 if self.config.doPsfMatch:
137 self.log.info(
"snapCombine psfMatch")
138 diffRet = self.diffim.run(snap0, snap1,
"subtractExposures")
139 diffExp = diffRet.subtractedImage
143 diffKern = diffRet.psfMatchingKernel
144 width, height = diffKern.getDimensions()
149 diffExp = afwImage.ExposureF(snap0,
True)
150 diffMi = diffExp.getMaskedImage()
151 diffMi -= snap1.getMaskedImage()
155 table = afwTable.SourceTable.make(self.
schema)
157 detRet = self.detection.makeSourceCatalog(table, diffExp)
158 sources = detRet.sources
159 fpSets = detRet.fpSets
160 if self.config.doMeasurement:
161 self.measurement.measure(diffExp, sources)
163 mask0 = snap0.getMaskedImage().getMask()
164 mask1 = snap1.getMaskedImage().getMask()
165 fpSets.positive.setMask(mask0,
"DETECTED")
166 fpSets.negative.setMask(mask1,
"DETECTED")
168 maskD = diffExp.getMaskedImage().getMask()
169 fpSets.positive.setMask(maskD,
"DETECTED")
170 fpSets.negative.setMask(maskD,
"DETECTED_NEGATIVE")
172 combinedExp = self.
addSnaps(snap0, snap1)
174 return pipeBase.Struct(
175 exposure = combinedExp,