LSST Applications g02d81e74bb+86cf3d8bc9,g180d380827+7a4e862ed4,g2079a07aa2+86d27d4dc4,g2305ad1205+e1ca1c66fa,g29320951ab+012e1474a1,g295015adf3+341ea1ce94,g2bbee38e9b+0e5473021a,g337abbeb29+0e5473021a,g33d1c0ed96+0e5473021a,g3a166c0a6a+0e5473021a,g3ddfee87b4+c429d67c83,g48712c4677+f88676dd22,g487adcacf7+27e1e21933,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+b41db86c35,g5a732f18d5+53520f316c,g64a986408d+86cf3d8bc9,g858d7b2824+86cf3d8bc9,g8a8a8dda67+585e252eca,g99cad8db69+84912a7fdc,g9ddcbc5298+9a081db1e4,ga1e77700b3+15fc3df1f7,ga8c6da7877+a2b54eae19,gb0e22166c9+60f28cb32d,gba4ed39666+c2a2e4ac27,gbb8dafda3b+6681f309db,gc120e1dc64+f0fcc2f6d8,gc28159a63d+0e5473021a,gcf0d15dbbd+c429d67c83,gdaeeff99f8+f9a426f77a,ge6526c86ff+0433e6603d,ge79ae78c31+0e5473021a,gee10cc3b42+585e252eca,gff1a9f87cc+86cf3d8bc9,w.2024.17
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | List of all members
lsst.shapelet.tests.ShapeletTestCase Class Reference
Inheritance diagram for lsst.shapelet.tests.ShapeletTestCase:

Public Member Functions

 compareShapeletFunctions (self, a, b, rtolEllipse=1E-13, rtolCoeff=1E-13, atolEllipse=1E-14, atolCoeff=1E-14)
 
 simplifyMultiShapeletFunction (self, msf)
 
 compareMultiShapeletFunctions (self, a, b, simplify=True, rtolEllipse=1E-13, rtolCoeff=1E-13, atolEllipse=1E-14, atolCoeff=1E-14)
 
 checkMoments (self, function, x, y, z)
 
 checkConvolution (self, f1, f2)
 

Static Public Member Functions

 makeUnitVector (i, n)
 
 makeImage (function, x, y)
 
 makeRandomShapeletFunction (order=2, zeroCenter=False, ellipse=None, scale=1.0)
 
 makeRandomMultiShapeletFunction (nComponents=3, ellipse=None)
 

Detailed Description

Definition at line 38 of file tests.py.

Member Function Documentation

◆ checkConvolution()

lsst.shapelet.tests.ShapeletTestCase.checkConvolution ( self,
f1,
f2 )

Definition at line 140 of file tests.py.

140 def checkConvolution(self, f1, f2):
141 bbox = lsst.geom.Box2I(lsst.geom.Point2I(-50, -50), lsst.geom.Point2I(50, 50))
142 i1 = lsst.afw.image.ImageD(bbox)
143 f1.evaluate().addToImage(i1)
144 self.assertFloatsAlmostEqual(i1.getArray().sum(), f1.evaluate().integrate(), rtol=1E-3)
145 i2 = lsst.afw.image.ImageD(bbox)
146 f2.evaluate().addToImage(i2)
147 self.assertFloatsAlmostEqual(i2.getArray().sum(), f2.evaluate().integrate(), rtol=1E-3)
148 fc1 = f1.convolve(f2)
149 fc2 = f2.convolve(f1)
150 ic1 = lsst.afw.image.ImageD(bbox)
151 fc1.evaluate().addToImage(ic1)
152 ic2 = lsst.afw.image.ImageD(bbox)
153 fc2.evaluate().addToImage(ic2)
154 self.assertFloatsAlmostEqual(ic1.getArray(), ic2.getArray())
155 out = lsst.afw.image.ImageD(bbox)
156 if scipy is None:
157 print("Skipping convolution test; scipy could not be imported.")
158 return
159 # I'm using scipy.ndimage to convolve test images, because I can't figure
160 # out how to make afw do it (afw can convolve images with kernels, but two similarly-sized
161 # are apparently another matter; if I try to make a FixedKernel from one of the images,
162 # I can't even make the operation commutative, let alone correct.
163 scipy.ndimage.convolve(i1.getArray(), i2.getArray(), output=out.getArray(),
164 mode="constant", cval=0.0)
165 self.assertFloatsAlmostEqual(out.getArray(), ic1.getArray(), rtol=1E-4, atol=1E-5)
166 self.assertFloatsAlmostEqual(out.getArray(), ic2.getArray(), rtol=1E-4, atol=1E-5)
167 return fc1, fc2
An integer coordinate rectangle.
Definition Box.h:55

◆ checkMoments()

lsst.shapelet.tests.ShapeletTestCase.checkMoments ( self,
function,
x,
y,
z )

Definition at line 114 of file tests.py.

114 def checkMoments(self, function, x, y, z):
115 gx, gy = numpy.meshgrid(x, y)
116 m = z.sum()
117 dipole = lsst.geom.Point2D((gx * z).sum() / m, (gy * z).sum() / m)
118 gx -= dipole.getX()
119 gy -= dipole.getY()
121 (gx**2 * z).sum() / m,
122 (gy**2 * z).sum() / m,
123 (gx * gy * z).sum() / m
124 )
125 imageMoments = lsst.afw.geom.ellipses.Ellipse(quadrupole, dipole)
126 shapeletMoments = function.evaluate().computeMoments()
127 self.assertFloatsAlmostEqual(imageMoments.getCenter().getX(),
128 shapeletMoments.getCenter().getX(), rtol=1E-3)
129 self.assertFloatsAlmostEqual(imageMoments.getCenter().getY(),
130 shapeletMoments.getCenter().getY(), rtol=1E-3)
131 self.assertFloatsAlmostEqual(imageMoments.getCore().getIxx(),
132 shapeletMoments.getCore().getIxx(), rtol=1E-3)
133 self.assertFloatsAlmostEqual(imageMoments.getCore().getIyy(),
134 shapeletMoments.getCore().getIyy(), rtol=1E-3)
135 self.assertFloatsAlmostEqual(imageMoments.getCore().getIxy(),
136 shapeletMoments.getCore().getIxy(), rtol=1E-3)
137 integral = numpy.trapz(numpy.trapz(z, gx, axis=1), y, axis=0)
138 self.assertFloatsAlmostEqual(integral, function.evaluate().integrate(), rtol=1E-3)
139
An ellipse defined by an arbitrary BaseCore and a center point.
Definition Ellipse.h:51
An ellipse core with quadrupole moments as parameters.
Definition Quadrupole.h:47

◆ compareMultiShapeletFunctions()

lsst.shapelet.tests.ShapeletTestCase.compareMultiShapeletFunctions ( self,
a,
b,
simplify = True,
rtolEllipse = 1E-13,
rtolCoeff = 1E-13,
atolEllipse = 1E-14,
atolCoeff = 1E-14 )

Definition at line 104 of file tests.py.

105 atolEllipse=1E-14, atolCoeff=1E-14):
106 if simplify:
107 a = self.simplifyMultiShapeletFunction(a)
108 b = self.simplifyMultiShapeletFunction(b)
109 self.assertEqual(len(a.getComponents()), len(b.getComponents()))
110 for sa, sb in zip(a.getComponents(), b.getComponents()):
111 self.compareShapeletFunctions(sa, sb, rtolEllipse=rtolEllipse, rtolCoeff=rtolCoeff,
112 atolEllipse=atolEllipse, atolCoeff=atolCoeff)
113

◆ compareShapeletFunctions()

lsst.shapelet.tests.ShapeletTestCase.compareShapeletFunctions ( self,
a,
b,
rtolEllipse = 1E-13,
rtolCoeff = 1E-13,
atolEllipse = 1E-14,
atolCoeff = 1E-14 )

Definition at line 82 of file tests.py.

83 atolEllipse=1E-14, atolCoeff=1E-14):
84 self.assertEqual(a.getOrder(), b.getOrder())
85 self.assertEqual(a.getBasisType(), b.getBasisType())
86 self.assertFloatsAlmostEqual(a.getEllipse().getParameterVector(),
87 b.getEllipse().getParameterVector(),
88 rtol=rtolEllipse, atol=atolEllipse)
89 self.assertFloatsAlmostEqual(a.getCoefficients(), b.getCoefficients(),
90 rtol=rtolCoeff, atol=atolCoeff)
91

◆ makeImage()

lsst.shapelet.tests.ShapeletTestCase.makeImage ( function,
x,
y )
static

Definition at line 47 of file tests.py.

47 def makeImage(function, x, y):
48 z = numpy.zeros((y.size, x.size), dtype=float)
49 e = function.evaluate()
50 for i, py in enumerate(y):
51 for j, px in enumerate(x):
52 z[i, j] = e(float(px), float(py))
53 return z
54

◆ makeRandomMultiShapeletFunction()

lsst.shapelet.tests.ShapeletTestCase.makeRandomMultiShapeletFunction ( nComponents = 3,
ellipse = None )
static

Definition at line 76 of file tests.py.

76 def makeRandomMultiShapeletFunction(nComponents=3, ellipse=None):
77 components = []
78 for n in range(nComponents):
79 components.append(ShapeletTestCase.makeRandomShapeletFunction(ellipse=ellipse))
81
A multi-scale shapelet function.

◆ makeRandomShapeletFunction()

lsst.shapelet.tests.ShapeletTestCase.makeRandomShapeletFunction ( order = 2,
zeroCenter = False,
ellipse = None,
scale = 1.0 )
static

Definition at line 56 of file tests.py.

56 def makeRandomShapeletFunction(order=2, zeroCenter=False, ellipse=None, scale=1.0):
57 center = lsst.geom.Point2D()
58 if not zeroCenter:
59 center = lsst.geom.Point2D(numpy.random.randn(), numpy.random.randn())
60 if ellipse is None:
63 float(numpy.random.uniform(low=1, high=2)),
64 float(numpy.random.uniform(low=1, high=2)),
65 float(numpy.random.uniform(low=0, high=numpy.pi))
66 ),
67 center
68 )
69 coefficients = numpy.random.randn(lsst.shapelet.computeSize(order))
70 result = lsst.shapelet.ShapeletFunction(order, lsst.shapelet.HERMITE, coefficients)
71 result.setEllipse(ellipse)
72 result.getEllipse().scale(scale)
73 return result
74
An ellipse core for the semimajor/semiminor axis and position angle parametrization (a,...
Definition Axes.h:47
A 2-d function defined by an expansion onto a Gauss-Laguerre or Gauss-Hermite basis.
int computeSize(int order)
Return the size of the coefficient vector for the given order.
Definition constants.h:97

◆ makeUnitVector()

lsst.shapelet.tests.ShapeletTestCase.makeUnitVector ( i,
n )
static

Definition at line 41 of file tests.py.

41 def makeUnitVector(i, n):
42 v = numpy.zeros(n, dtype=float)
43 v[i] = 1.0
44 return v
45

◆ simplifyMultiShapeletFunction()

lsst.shapelet.tests.ShapeletTestCase.simplifyMultiShapeletFunction ( self,
msf )

Definition at line 92 of file tests.py.

92 def simplifyMultiShapeletFunction(self, msf):
93 keep = []
94 for s in msf.getComponents():
95 if not numpy.allclose(s.getCoefficients(), 0.0):
96 params = tuple(s.getEllipse().getParameterVector()) + tuple(s.getCoefficients())
97 keep.append((params, s))
99 keep.sort(key=lambda t: numpy.sum(t[0]))
100 for params, s in keep:
101 msf.addComponent(s)
102 return msf
103

The documentation for this class was generated from the following file: