コード例 #1
0
ファイル: shapelets.py プロジェクト: RayPlante/DMS.afw
 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)
コード例 #2
0
ファイル: localPsf.py プロジェクト: RayPlante/DMS.afw
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)
コード例 #3
0
ファイル: shapelets.py プロジェクト: RayPlante/DMS.afw
 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)
コード例 #4
0
ファイル: shapelets.py プロジェクト: RayPlante/DMS.afw
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
コード例 #5
0
ファイル: shapelets.py プロジェクト: RayPlante/DMS.afw
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