def doReject(self, clipping, kSums=[1., 1., 1., 1., 2., 3., 4., 50.]): self.ps["kernelSumClipping"] = clipping ksv = ipDiffim.KernelSumVisitorF(self.ps) ksv.setMode(ipDiffim.KernelSumVisitorF.AGGREGATE) kcList = [] for kSum in kSums: kc = self.makeCandidate(kSum, 0., 0.) kc.build(self.kList) kc.setStatus(afwMath.SpatialCellCandidate.GOOD) self.assertAlmostEqual( kSum, kc.getKsum(ipDiffim.KernelCandidateF.RECENT)) ksv.processCandidate(kc) kcList.append(kc) ksv.processKsumDistribution() ksv.setMode(ipDiffim.KernelSumVisitorF.REJECT) for kc in kcList: ksv.processCandidate(kc) if clipping and kc == kcList[-1]: self.assertEqual(kc.getStatus(), afwMath.SpatialCellCandidate.BAD) else: self.assertEqual(kc.getStatus(), afwMath.SpatialCellCandidate.GOOD) if clipping: self.assertEqual(ksv.getNRejected(), 1) else: self.assertEqual(ksv.getNRejected(), 0)
def testAggregate(self, kSums=[1., 1., 1., 1., 2., 3., 4.]): ksv = ipDiffim.KernelSumVisitorF(self.ps) ksv.setMode(ipDiffim.KernelSumVisitorF.AGGREGATE) # should fail, kernel not initialized kc = self.makeCandidate(1, 0.0, 0.0) try: ksv.processCandidate(kc) except Exception: pass else: self.fail() for kSum in kSums: kc = self.makeCandidate(kSum, 0., 0.) kc.build(self.kList) self.assertAlmostEqual( kSum, kc.getKsum(ipDiffim.KernelCandidateF.RECENT)) ksv.processCandidate(kc) for method in (ksv.getNRejected, ksv.getkSumMean, ksv.getkSumStd, ksv.getdkSumMax, ksv.getkSumNpts): self.assertEqual(method(), 0.0) ksv.processKsumDistribution() self.assertEqual(ksv.getNRejected(), 0) self.assertAlmostEqual( ksv.getkSumMean(), afwMath.makeStatistics(kSums, afwMath.MEANCLIP).getValue( afwMath.MEANCLIP)) self.assertAlmostEqual( ksv.getkSumStd(), afwMath.makeStatistics(kSums, afwMath.STDEVCLIP).getValue( afwMath.STDEVCLIP)) self.assertEqual(ksv.getdkSumMax(), self.ps["maxKsumSigma"] * ksv.getkSumStd()) self.assertEqual(ksv.getkSumNpts(), len(kSums))