예제 #1
0
    def test_ex2d_subimage(self):
        specrange = (0, self.nspec)
        waverange = self.ww[0], self.ww[-1]
        flux, fluxivar, R = ex2d_patch(self.image, self.ivar, self.psf, 0, self.nspec, self.ww)

        border = 0
        xmin, xmax, ymin, ymax = self.psf.xyrange(specrange, waverange)
        xmin = max(0, xmin-border)
        xmax = min(self.psf.npix_x, xmax+border)
        ymin = max(0, ymin-border)
        ymax = min(self.psf.npix_y, ymax+border)
        xyrange = (xmin, xmax, ymin, ymax)

        subimg = self.image[ymin:ymax, xmin:xmax]
        subivar = self.ivar[ymin:ymax, xmin:xmax]
        subflux, subfluxivar, subR = ex2d_patch(subimg, subivar, self.psf, \
            0, self.nspec, self.ww, xyrange=xyrange)

        #- First test for allclose as a hint in case the later
        #- bitwise match test fails
        self.assertTrue( np.allclose(subflux, flux) )
        self.assertTrue( np.allclose(subfluxivar, fluxivar) )
        self.assertTrue( np.allclose(subR, R) )

        self.assertTrue( np.all(subflux == flux) )
        self.assertTrue( np.all(subfluxivar == fluxivar) )
        self.assertTrue( np.all(subR == R) )
예제 #2
0
    def test_noiseless_ex2d_sigdecorr(self):
        specrange = (0, self.nspec)
        ivar = np.ones(self.ivar.shape)
        d = ex2d_patch(self.image_orig,
                       ivar,
                       self.psf,
                       0,
                       self.nspec,
                       self.ww,
                       full_output=True)

        R = d['R']
        flux = d['flux']  #- resolution convolved extracted flux
        xflux = d['xflux']  #- original extracted flux

        #- Resolution convolved input photons (flux)
        rphot = R.dot(self.phot.ravel()).reshape(flux.shape)

        #- extracted flux projected back to image
        ximg = self.psf.project(self.ww, xflux, verbose=False)

        #- Compare inputs to outputs
        bias = (flux - rphot) / rphot
        dximg = ximg - self.image_orig

        self.assertTrue(np.max(np.abs(bias)) < 1e-9)
        self.assertTrue(np.max(np.abs(dximg)) < 1e-6)
예제 #3
0
    def test_ex2d_patch(self):
        d = ex2d_patch(self.image, self.ivar, self.psf, 0, self.nspec, self.ww, full_output=True)

        self.assertEqual(d['flux'].shape, (self.nspec, len(self.ww)))
        self.assertEqual(d['ivar'].shape, (self.nspec, len(self.ww)))

        ntot = len(self.ww) * self.nspec
        self.assertEqual(d['R'].shape, (ntot, ntot))
예제 #4
0
    def test_ex2d_patch(self):
        d = ex2d_patch(self.image, self.ivar, self.psf, 0, self.nspec, self.ww, full_output=True)

        self.assertEqual(d['flux'].shape, (self.nspec, len(self.ww)))
        self.assertEqual(d['ivar'].shape, (self.nspec, len(self.ww)))

        ntot = len(self.ww) * self.nspec
        self.assertEqual(d['R'].shape, (ntot, ntot))
예제 #5
0
    def test_wave_off_image(self):
        ww = self.psf.wmin - 5 + np.arange(10)
        nspec = 2
        specrange = [0,nspec]
        xyrange = self.psf.xyrange(specrange, ww)

        phot = np.ones([nspec,len(ww)])

        img = self.psf.project(ww, phot, xyrange=xyrange)
        ivar = np.ones(img.shape)

        flux, fluxivar, R = ex2d_patch(img, ivar, self.psf, 0, self.nspec, ww, xyrange=xyrange)
        
        self.assertTrue( np.all(flux == flux) )
예제 #6
0
    def test_ex2d_subimage(self):
        specrange = (0, self.nspec)
        waverange = self.ww[0], self.ww[-1]
        flux, fluxivar, R = ex2d_patch(self.image, self.ivar, self.psf, 0, self.nspec, self.ww)

        border = 0
        xmin, xmax, ymin, ymax = self.psf.xyrange(specrange, waverange)
        xmin = max(0, xmin-border)
        xmax = min(self.psf.npix_x, xmax+border)
        ymin = max(0, ymin-border)
        ymax = min(self.psf.npix_y, ymax+border)
        xyrange = (xmin, xmax, ymin, ymax)
        
        subimg = self.image[ymin:ymax, xmin:xmax]
        subivar = self.ivar[ymin:ymax, xmin:xmax]
        subflux, subfluxivar, subR = ex2d_patch(subimg, subivar, self.psf, \
            0, self.nspec, self.ww, xyrange=xyrange)

        #- These arrays pass np.allclose, but sometimes fail np.all on edison.
        #- They should be absolutely identical.  Leaving this as failing.
        self.assertTrue( np.all(subflux == flux) )
        self.assertTrue( np.all(subfluxivar == fluxivar) )
        self.assertTrue( np.all(subR == R) )
예제 #7
0
    def test_wave_off_image(self):
        ww = self.psf.wmin - 5 + np.arange(10)
        nspec = 2
        specrange = [0,nspec]
        xyrange = self.psf.xyrange(specrange, ww)

        phot = np.ones([nspec,len(ww)])

        img = self.psf.project(ww, phot, xyrange=xyrange)
        ivar = np.ones(img.shape)

        flux, fluxivar, R = ex2d_patch(img, ivar, self.psf, 0, self.nspec, ww, xyrange=xyrange)

        self.assertTrue( np.all(flux == flux) )
예제 #8
0
 def test_ex2d_chi2(self):
     from time import time
     specrange = (0, self.nspec)
     waverange = (self.ww[0], self.ww[-1])
     imgvar = 1/self.ivar
     xmin, xmax, ymin, ymax = xyrange = self.psf.xyrange(specrange, waverange)
     
     for i in range(3):
         pix = self.image_orig + np.random.normal(scale=np.sqrt(imgvar))
         d = ex2d_patch(pix, self.ivar, self.psf, 0, self.nspec, self.ww, full_output=True)
         flux, ivar, R = d['flux'], d['ivar'], d['R']
         rflux = R.dot(self.phot.ravel()).reshape(flux.shape)
         chi = (flux - rflux) * np.sqrt(ivar)
         #- loose test, just checking for catastrophic failures
         self.assertLess(abs(1-np.std(chi)), 0.10)
예제 #9
0
    def test_ex2d_subimage(self):
        specrange = (0, self.nspec)
        waverange = self.ww[0], self.ww[-1]
        flux, fluxivar, R = ex2d_patch(self.image, self.ivar, self.psf, 0,
                                       self.nspec, self.ww)

        border = 0
        xmin, xmax, ymin, ymax = self.psf.xyrange(specrange, waverange)
        xmin = max(0, xmin - border)
        xmax = min(self.psf.npix_x, xmax + border)
        ymin = max(0, ymin - border)
        ymax = min(self.psf.npix_y, ymax + border)
        xyrange = (xmin, xmax, ymin, ymax)

        subimg = self.image[ymin:ymax, xmin:xmax]
        subivar = self.ivar[ymin:ymax, xmin:xmax]
        subflux, subfluxivar, subR = ex2d_patch(subimg, subivar, self.psf, \
            0, self.nspec, self.ww, xyrange=xyrange)

        #- These arrays pass np.allclose, but sometimes fail np.all on edison.
        #- They should be absolutely identical.  Leaving this as failing.
        self.assertTrue(np.all(subflux == flux))
        self.assertTrue(np.all(subfluxivar == fluxivar))
        self.assertTrue(np.all(subR == R))
예제 #10
0
    def test_ex2d_chi2(self):
        from time import time
        specrange = (0, self.nspec)
        waverange = (self.ww[0], self.ww[-1])
        imgvar = 1/self.ivar
        xmin, xmax, ymin, ymax = xyrange = self.psf.xyrange(specrange, waverange)

        for i in range(3):
            pix = self.image_orig + np.random.normal(scale=np.sqrt(imgvar))
            d = ex2d_patch(pix, self.ivar, self.psf, 0, self.nspec, self.ww, full_output=True)
            flux, ivar, R = d['flux'], d['ivar'], d['R']
            rflux = R.dot(self.phot.ravel()).reshape(flux.shape)
            chi = (flux - rflux) * np.sqrt(ivar)
            #- loose test, just checking for catastrophic failures
            self.assertLess(abs(1-np.std(chi)), 0.10)
예제 #11
0
    def test_noiseless_ex2d_sigdecorr(self):
        specrange = (0, self.nspec)
        ivar = np.ones(self.ivar.shape)
        d = ex2d_patch(self.image_orig, ivar, self.psf, 0, self.nspec, self.ww, full_output=True)

        R = d['R']
        flux = d['flux']     #- resolution convolved extracted flux
        xflux = d['xflux']   #- original extracted flux
        
        #- Resolution convolved input photons (flux)
        rphot = R.dot(self.phot.ravel()).reshape(flux.shape)
        
        #- extracted flux projected back to image
        ximg = self.psf.project(self.ww, xflux, verbose=False)
        
        #- Compare inputs to outputs
        bias = (flux - rphot)/rphot
        dximg = ximg - self.image_orig

        self.assertTrue( np.max(np.abs(bias)) < 1e-9 )
        self.assertTrue( np.max(np.abs(dximg)) < 1e-6 )