Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1import unittest 

2import numpy as num 

3 

4 

5import lsst.utils.tests 

6import lsst.afw.image as afwImage 

7import lsst.afw.math as afwMath 

8import lsst.geom as geom 

9import lsst.ip.diffim as ipDiffim 

10import lsst.log.utils as logUtils 

11import lsst.pex.config as pexConfig 

12 

13# Increase the number for more verbose messages; decrease for fewer messages 

14logUtils.traceSetAt("ip.diffim", 4) 

15 

16 

17class DiffimTestCases(unittest.TestCase): 

18 

19 def setUp(self): 

20 self.config = ipDiffim.ImagePsfMatchTask.ConfigClass() 

21 self.config.kernel.name = "AL" 

22 self.subconfig = self.config.kernel.active 

23 

24 self.ps = pexConfig.makePropertySet(self.subconfig) 

25 self.kList = ipDiffim.makeKernelBasisList(self.subconfig) 

26 

27 self.ksize = self.ps['kernelSize'] 

28 

29 def makeSpatialKernel(self, order): 

30 basicGaussian1 = afwMath.GaussianFunction2D(2., 2., 0.) 

31 basicKernel1 = afwMath.AnalyticKernel(self.ksize, self.ksize, basicGaussian1) 

32 

33 basicGaussian2 = afwMath.GaussianFunction2D(5., 3., 0.5 * num.pi) 

34 basicKernel2 = afwMath.AnalyticKernel(self.ksize, self.ksize, basicGaussian2) 

35 

36 basisList = [] 

37 basisList.append(basicKernel1) 

38 basisList.append(basicKernel2) 

39 basisList = ipDiffim.renormalizeKernelList(basisList) 

40 

41 spatialKernelFunction = afwMath.PolynomialFunction2D(order) 

42 spatialKernel = afwMath.LinearCombinationKernel(basisList, spatialKernelFunction) 

43 kCoeffs = [[0.0 for x in range(1, spatialKernelFunction.getNParameters()+1)], 

44 [0.01 * x for x in range(1, spatialKernelFunction.getNParameters()+1)]] 

45 kCoeffs[0][0] = 1.0 # it does not vary spatially; constant across image 

46 spatialKernel.setSpatialParameters(kCoeffs) 

47 return spatialKernel 

48 

49 def tearDown(self): 

50 del self.ps 

51 del self.kList 

52 

53 def testGood(self): 

54 ti = afwImage.MaskedImageF(geom.Extent2I(100, 100)) 

55 ti.getVariance().set(0.1) 

56 ti[50, 50, afwImage.LOCAL] = (1., 0x0, 1.) 

57 sKernel = self.makeSpatialKernel(2) 

58 si = afwImage.MaskedImageF(ti.getDimensions()) 

59 afwMath.convolve(si, ti, sKernel, True) 

60 

61 bbox = geom.Box2I(geom.Point2I(25, 25), 

62 geom.Point2I(75, 75)) 

63 si = afwImage.MaskedImageF(si, bbox, origin=afwImage.LOCAL) 

64 ti = afwImage.MaskedImageF(ti, bbox, origin=afwImage.LOCAL) 

65 kc = ipDiffim.KernelCandidateF(50., 50., ti, si, self.ps) 

66 

67 sBg = afwMath.PolynomialFunction2D(1) 

68 bgCoeffs = [0., 0., 0.] 

69 sBg.setParameters(bgCoeffs) 

70 

71 # must be initialized 

72 bskv = ipDiffim.BuildSingleKernelVisitorF(self.kList, self.ps) 

73 bskv.processCandidate(kc) 

74 self.assertEqual(kc.isInitialized(), True) 

75 

76 askv = ipDiffim.AssessSpatialKernelVisitorF(sKernel, sBg, self.ps) 

77 askv.processCandidate(kc) 

78 

79 self.assertEqual(askv.getNProcessed(), 1) 

80 self.assertEqual(askv.getNRejected(), 0) 

81 self.assertEqual(kc.getStatus(), afwMath.SpatialCellCandidate.GOOD) 

82 

83 def testBad(self): 

84 ti = afwImage.MaskedImageF(geom.Extent2I(100, 100)) 

85 ti.getVariance().set(0.1) 

86 ti[50, 50, afwImage.LOCAL] = (1., 0x0, 1.) 

87 sKernel = self.makeSpatialKernel(2) 

88 si = afwImage.MaskedImageF(ti.getDimensions()) 

89 afwMath.convolve(si, ti, sKernel, True) 

90 

91 bbox = geom.Box2I(geom.Point2I(25, 25), 

92 geom.Point2I(75, 75)) 

93 si = afwImage.MaskedImageF(si, bbox, origin=afwImage.LOCAL) 

94 ti = afwImage.MaskedImageF(ti, bbox, origin=afwImage.LOCAL) 

95 kc = ipDiffim.KernelCandidateF(50., 50., ti, si, self.ps) 

96 

97 badGaussian = afwMath.GaussianFunction2D(1., 1., 0.) 

98 badKernel = afwMath.AnalyticKernel(self.ksize, self.ksize, badGaussian) 

99 basisList = [] 

100 basisList.append(badKernel) 

101 badSpatialKernelFunction = afwMath.PolynomialFunction2D(0) 

102 badSpatialKernel = afwMath.LinearCombinationKernel(basisList, badSpatialKernelFunction) 

103 badSpatialKernel.setSpatialParameters([[1, ]]) 

104 

105 sBg = afwMath.PolynomialFunction2D(1) 

106 bgCoeffs = [10., 10., 10.] 

107 sBg.setParameters(bgCoeffs) 

108 

109 # must be initialized 

110 bskv = ipDiffim.BuildSingleKernelVisitorF(self.kList, self.ps) 

111 bskv.processCandidate(kc) 

112 self.assertEqual(kc.isInitialized(), True) 

113 

114 askv = ipDiffim.AssessSpatialKernelVisitorF(badSpatialKernel, sBg, self.ps) 

115 askv.processCandidate(kc) 

116 

117 self.assertEqual(askv.getNProcessed(), 1) 

118 self.assertEqual(askv.getNRejected(), 1) 

119 self.assertEqual(kc.getStatus(), afwMath.SpatialCellCandidate.BAD) 

120 

121 

122##### 

123 

124class TestMemory(lsst.utils.tests.MemoryTestCase): 

125 pass 

126 

127 

128def setup_module(module): 

129 lsst.utils.tests.init() 

130 

131 

132if __name__ == "__main__": 132 ↛ 133line 132 didn't jump to line 133, because the condition on line 132 was never true

133 lsst.utils.tests.init() 

134 unittest.main()