def setUp(self): order = 4 self.ellipse = ellipses.Ellipse(ellipses.Axes(1.2, 0.8, 0.3), geom.Point2D(0.12, -0.08)) self.coefficients = numpy.random.randn(shapelets.computeSize(order)) self.x = numpy.random.randn(25) self.y = numpy.random.randn(25) self.bases = [ shapelets.BasisEvaluator(order, shapelets.HERMITE), shapelets.BasisEvaluator(order, shapelets.LAGUERRE), ] self.functions = [ shapelets.ShapeletFunction(order, shapelets.HERMITE, self.coefficients), shapelets.ShapeletFunction(order, shapelets.LAGUERRE, self.coefficients), ] for function in self.functions: function.setEllipse(self.ellipse)
def run(): order = 1 sigma = 3.0 size = shapelets.computeSize(order) coeff = [10, 2, 3] dim = geom.ExtentI(15) bbox = geom.BoxI(geom.PointI(0,0), dim) center = geom.PointD(7,7) sf = shapelets.ShapeletFunction(order, shapelets.LAGUERRE, sigma, center, coeff) msf = shapelets.MultiShapeletFunction(sf) shapeletLocalPsf = detection.ShapeletLocalPsf(center, msf) fp = detection.Footprint(bbox) flatarray = numpy.zeros(bbox.getArea()) shapeletLocalPsf.evaluatePointSource(fp, flatarray) norm = numpy.sum(flatarray) flatarray /= norm flatarray.resize((dim.getY(), dim.getX())) original = image.ImageD(flatarray) imageLocalPsf = detection.ImageLocalPsf(center, original) sfFromImage = imageLocalPsf.computeShapelet(shapelets.LAGUERRE, 10, shapeletLocalPsf.computeMoments()) msfFromImage = shapelets.MultiShapeletFunction(sfFromImage) roundtripShapeletLocalPsf = detection.ShapeletLocalPsf(center, msfFromImage) flatarray = numpy.zeros(bbox.getArea()) roundtripShapeletLocalPsf.evaluatePointSource(fp, flatarray) norm = numpy.sum(flatarray) flatarray /= norm flatarray.resize((dim.getY(), dim.getX())) roundtrip = image.ImageD(flatarray) ds9.mtv(original, frame=0, title="original shapeletImage") e = shapeletLocalPsf.computeMoments() m = geom.ellipses.Quadrupole(e.getCore()) p = e.getCenter() ds9.dot("@:%f,%f,%f"%(m.getIXX(), m.getIXY(), m.getIYY()), p.getX(), p.getY(), frame=0) ds9.mtv(roundtrip, frame=1, title="roundtripped shapeletImage") e = roundtripShapeletLocalPsf.computeMoments() m = geom.ellipses.Quadrupole(e.getCore()) p = e.getCenter() ds9.dot("@:%f,%f,%f"%(m.getIXX(), m.getIXY(), m.getIYY()), p.getX(), p.getY(),frame=1)
def testMoments(self): x = numpy.linspace(-50, 50, 1001) y = x elements = [] for n in range(3): ellipse = ellipses.Ellipse( ellipses.Axes( float(numpy.random.uniform(low=1, high=2)), float(numpy.random.uniform(low=1, high=2)), float(numpy.random.uniform(low=0, high=numpy.pi)) ), geom.Point2D(0.23, -0.15) ) coefficients = numpy.random.randn(shapelets.computeSize(n)) element = shapelets.ShapeletFunction(n, shapelets.HERMITE, coefficients) element.setEllipse(ellipse) elements.append(element) function = shapelets.MultiShapeletFunction(elements) x = numpy.linspace(-10, 10, 101) y = x z = self.makeImage(function, x, y) self.measureMoments(function, x, y, z)
def makeBasisImages(basis, x, y): z = numpy.zeros((y.size, x.size, shapelets.computeSize(basis.getOrder())), dtype=float) for i, py in enumerate(y): for j, px in enumerate(x): basis.fillEvaluation(z[i,j,:], float(px), float(py)) return z
def checkIntegration(basis, x, y, z): d = (x[1:] - x[:-1]).mean() * (y[1:] - x[:-1]).mean() array1 = numpy.zeros(shapelets.computeSize(basis.getOrder()), dtype=float) basis.fillIntegration(array1) array2 = z.sum(axis=0).sum(axis=0) * d print "integration equal:", numpy.abs(array1 - array2).max() < 0.005