Beispiel #1
0
    def test_turbo_with_image(self):
        """
        Test do_driz turbo kernel
        """
        input = os.path.basename(self.get_input_file('input', 'j8bt06nyq_unit.fits'))
        output = 'output_turbo_image.fits'
        output_template = os.path.basename(self.get_data('truth',
                                           'reference_turbo_image.fits'))

        insci = self.read_image(input)
        input_wcs = self.read_wcs(input)
        inwht = np.ones(insci.shape,dtype=insci.dtype)

        output_wcs = self.read_wcs(output_template)
        naxis1 = output_wcs._naxis1
        naxis2 = output_wcs._naxis2
        outsci = np.zeros((naxis2, naxis1), dtype='float32')
        outwht = np.zeros((naxis2, naxis1), dtype='float32')
        outcon = np.zeros((1, naxis2, naxis1), dtype='i4')

        expin = 1.0
        wt_scl = expin
        in_units = 'cps'
        wcslin = distortion.utils.output_wcs([input_wcs],undistort=False)

        adrizzle.do_driz(insci, input_wcs, inwht, output_wcs, outsci,
                         outwht, outcon, expin, in_units, wt_scl,
                         kernel='turbo', wcslin_pscale=wcslin.pscale)

        self.write_image(output, output_wcs, outsci, outwht, outcon[0])

        template_data = self.read_image(output_template)

        self.ignore_keywords += ['rootname']
        self.compare_outputs([(output, output_template)])
Beispiel #2
0
    def test_square_with_point(self):
        """
        Test do_driz square kernel with point
        """
        input = os.path.basename(
            self.get_input_file('input', 'j8bt06nyq_flt.fits'))
        output = 'output_square_point.fits'
        output_difference = os.path.basename(
            self.get_data('truth', 'difference_square_point.txt'))
        output_template = os.path.basename(
            self.get_data('truth', 'reference_square_point.fits'))

        insci = self.read_image(input)
        input_wcs = self.read_wcs(input)
        insci = self.make_point_image(insci, (500, 200), 100.0)
        inwht = np.ones(insci.shape, dtype=insci.dtype)
        output_wcs = self.read_wcs(output_template)

        naxis1 = output_wcs._naxis1
        naxis2 = output_wcs._naxis2
        outsci = np.zeros((naxis2, naxis1), dtype='float32')
        outwht = np.zeros((naxis2, naxis1), dtype='float32')
        outcon = np.zeros((1, naxis2, naxis1), dtype='i4')

        expin = 1.0
        wt_scl = expin
        in_units = 'cps'
        wcslin = distortion.utils.output_wcs([input_wcs], undistort=False)

        adrizzle.do_driz(insci,
                         input_wcs,
                         inwht,
                         output_wcs,
                         outsci,
                         outwht,
                         outcon,
                         expin,
                         in_units,
                         wt_scl,
                         wcslin_pscale=wcslin.pscale)

        output_bounds = self.bound_image(outsci)
        self.write_image(output, output_wcs, outsci, outwht, outcon[0])

        template_data = self.read_image(output_template)
        template_bounds = self.bound_image(template_data)

        (min_diff, med_diff,
         max_diff) = self.centroid_statistics("square with point",
                                              output_difference, outsci,
                                              template_data, 20.0, 8)

        assert (med_diff < 1.0e-6)
        assert (max_diff < 1.0e-5)
Beispiel #3
0
    def test_tophat_with_grid(self):
        """
        Test do_driz tophat kernel with grid
        """
        input = os.path.basename(
            self.get_input_file('input', 'j8bt06nyq_unit.fits'))
        output = 'output_tophat_grid.fits'
        output_difference = os.path.basename(
            self.get_data('truth', 'difference_tophat_grid.txt'))
        output_template = os.path.basename(
            self.get_data('truth', 'reference_tophat_grid.fits'))

        insci = self.read_image(input)
        input_wcs = self.read_wcs(input)
        insci = self.make_grid_image(insci, 64, 100.0)
        inwht = np.ones(insci.shape, dtype=insci.dtype)
        output_wcs = self.read_wcs(output_template)

        naxis1, naxis2 = output_wcs.pixel_shape
        outsci = np.zeros((naxis2, naxis1), dtype='float32')
        outwht = np.zeros((naxis2, naxis1), dtype='float32')
        outcon = np.zeros((1, naxis2, naxis1), dtype='i4')

        expin = 1.0
        wt_scl = expin
        in_units = 'cps'
        wcslin = distortion.utils.output_wcs([input_wcs], undistort=False)

        adrizzle.do_driz(insci,
                         input_wcs,
                         inwht,
                         output_wcs,
                         outsci,
                         outwht,
                         outcon,
                         expin,
                         in_units,
                         wt_scl,
                         kernel='tophat',
                         wcslin_pscale=wcslin.pscale)

        self.write_image(output, output_wcs, outsci, outwht, outcon[0])

        template_data = self.read_image(output_template)

        (min_diff, med_diff,
         max_diff) = self.centroid_statistics("tophat with grid",
                                              output_difference, outsci,
                                              template_data, 20.0, 8)

        assert (med_diff < 1.0e-6)
        assert (max_diff < 1.0e-5)
Beispiel #4
0
    def not_test_turbo_with_image(self):
        """
        Test do_driz turbo kernel
        """
        input = os.path.basename(
            self.get_input_file('input', 'j8bt06nyq_flt.fits'))
        output = 'output_turbo_image.fits'
        output_difference = os.path.basename(
            self.get_data('truth', 'difference_turbo_image.txt'))
        output_template = os.path.basename(
            self.get_data('truth', 'reference_turbo_image.fits'))

        insci = self.read_image(input)
        input_wcs = self.read_wcs(input)
        inwht = np.ones(insci.shape, dtype=insci.dtype)

        output_wcs = self.read_wcs(output_template)
        naxis1 = output_wcs._naxis1
        naxis2 = output_wcs._naxis2
        outsci = np.zeros((naxis2, naxis1), dtype='float32')
        outwht = np.zeros((naxis2, naxis1), dtype='float32')
        outcon = np.zeros((1, naxis2, naxis1), dtype='i4')

        expin = 1.0
        wt_scl = expin
        in_units = 'cps'
        wcslin = distortion.utils.output_wcs([input_wcs], undistort=False)

        adrizzle.do_driz(insci,
                         input_wcs,
                         inwht,
                         output_wcs,
                         outsci,
                         outwht,
                         outcon,
                         expin,
                         in_units,
                         wt_scl,
                         kernel='turbo',
                         wcslin_pscale=wcslin.pscale)

        self.write_image(output, output_wcs, outsci, outwht, outcon[0])

        template_data = self.read_image(output_template)
        self.compare_outputs([(output, output_template)])
Beispiel #5
0
    def test_square_with_image(self):
        """
        Test do_driz square kernel
        """
        input = os.path.basename(
            self.get_input_file('input', 'j8bt06nyq_unit.fits'))
        output = 'output_square_image.fits'
        output_template = os.path.basename(
            self.get_data('truth', 'reference_square_image.fits'))

        insci = self.read_image(input)
        input_wcs = self.read_wcs(input)
        inwht = np.ones(insci.shape, dtype=insci.dtype)

        output_wcs = self.read_wcs(output_template)
        naxis1, naxis2 = output_wcs.pixel_shape
        outsci = np.zeros((naxis2, naxis1), dtype='float32')
        outwht = np.zeros((naxis2, naxis1), dtype='float32')
        outcon = np.zeros((1, naxis2, naxis1), dtype='i4')

        expin = 1.0
        wt_scl = expin
        in_units = 'cps'
        wcslin = distortion.utils.output_wcs([input_wcs], undistort=False)

        adrizzle.do_driz(insci,
                         input_wcs,
                         inwht,
                         output_wcs,
                         outsci,
                         outwht,
                         outcon,
                         expin,
                         in_units,
                         wt_scl,
                         wcslin_pscale=wcslin.pscale)

        self.write_image(output, output_wcs, outsci, outwht, outcon[0])

        template_data = self.read_image(output_template)

        self.ignore_keywords += ['rootname']
        self.compare_outputs([(output, output_template)])
Beispiel #6
0
    def test_turbo_with_grid(self):
        """
        Test do_driz turbo kernel with grid
        """
        input = os.path.basename(self.get_input_file('input','j8bt06nyq_unit.fits'))
        output = 'output_turbo_grid.fits'
        output_difference = os.path.basename(self.get_data('truth',
                                             'difference_turbo_grid.txt'))
        output_template = os.path.basename(self.get_data('truth',
                                           'reference_turbo_grid.fits'))

        insci = self.read_image(input)
        input_wcs = self.read_wcs(input)
        insci = self.make_grid_image(insci, 64, 100.0)
        inwht = np.ones(insci.shape,dtype=insci.dtype)
        output_wcs = self.read_wcs(output_template)

        naxis1 = output_wcs._naxis1
        naxis2 = output_wcs._naxis2
        outsci = np.zeros((naxis2, naxis1), dtype='float32')
        outwht = np.zeros((naxis2, naxis1), dtype='float32')
        outcon = np.zeros((1, naxis2, naxis1), dtype='i4')

        expin = 1.0
        wt_scl = expin
        in_units = 'cps'
        wcslin = distortion.utils.output_wcs([input_wcs],undistort=False)

        adrizzle.do_driz(insci, input_wcs, inwht,
                         output_wcs, outsci, outwht, outcon,
                         expin, in_units, wt_scl,
                         kernel='turbo', wcslin_pscale=wcslin.pscale)

        self.write_image(output, output_wcs, outsci, outwht, outcon[0])

        template_data = self.read_image(output_template)

        (min_diff, med_diff, max_diff) = self.centroid_statistics("turbo with grid", output_difference,
                                                                  outsci, template_data, 20.0, 8)

        assert(med_diff < 1.0e-6)
        assert(max_diff < 1.0e-5)
Beispiel #7
0
    def test_square_with_point(self):
        """
        Test do_driz square kernel with point
        """
        input = os.path.basename(self.get_input_file('input','j8bt06nyq_unit.fits'))
        output = 'output_square_point.fits'
        output_difference = 'difference_square_point.txt'
        output_template = os.path.basename(self.get_data('truth',
                                           'reference_square_point.fits'))

        insci = self.read_image(input)
        input_wcs = self.read_wcs(input)
        insci = self.make_point_image(insci, (500, 200), 100.0)
        inwht = np.ones(insci.shape,dtype=insci.dtype)
        output_wcs = self.read_wcs(output_template)

        naxis1, naxis2 = output_wcs.pixel_shape
        outsci = np.zeros((naxis2, naxis1), dtype='float32')
        outwht = np.zeros((naxis2, naxis1), dtype='float32')
        outcon = np.zeros((1, naxis2, naxis1), dtype='i4')

        expin = 1.0
        wt_scl = expin
        in_units = 'cps'
        wcslin = distortion.utils.output_wcs([input_wcs],undistort=False)

        adrizzle.do_driz(insci, input_wcs, inwht,
                         output_wcs, outsci, outwht, outcon,
                         expin, in_units, wt_scl, wcslin_pscale=wcslin.pscale)

        output_bounds = self.bound_image(outsci)
        self.write_image(output, output_wcs, outsci, outwht, outcon[0])

        template_data = self.read_image(output_template)
        template_bounds = self.bound_image(template_data)

        (min_diff, med_diff, max_diff) = self.centroid_statistics("square with point", output_difference,
                                                                  outsci, template_data, 20.0, 8)

        assert(med_diff < 1.0e-6)
        assert(max_diff < 1.0e-5)
Beispiel #8
0
    def get_psf(self,
                ra=53.06967306,
                dec=-27.72333015,
                filter='F140W',
                pixfrac=0.1,
                kernel='point',
                verbose=True,
                wcs_slice=None,
                get_extended=True,
                get_weight=False):
        from drizzlepac import adrizzle
        from shapely.geometry import Polygon, Point

        pix = np.arange(-13, 14)

        #wcs_slice = self.get_driz_cutout(ra=ra, dec=dec)
        if wcs_slice is None:
            wcs_slice = self.driz_wcs.copy()

        outsci, outwht, outctx = self._get_empty_driz(wcs_slice)

        count = 1
        for key in self.flt_keys:
            if self.footprint[key].contains(Point(ra, dec)):
                file, ext = key
                if verbose:
                    print('{0}[SCI,{1}]'.format(file, ext))

                xy = self.wcs[key].all_world2pix(np.array([[ra, dec]]), 0)[0]
                xyp = np.cast[int](xy)  # +1
                dx = xy[0] - int(xy[0])
                dy = xy[1] - int(xy[1])

                if ext == 2:
                    # UVIS
                    # print('UVIS1!')
                    chip_offset = 2051
                else:
                    chip_offset = 0

                psf_xy = self.ePSF.get_at_position(xy[0],
                                                   xy[1] + chip_offset,
                                                   filter=filter)
                yp, xp = np.meshgrid(pix - dy,
                                     pix - dx,
                                     sparse=False,
                                     indexing='ij')
                if get_extended:
                    extended_data = self.ePSF.extended_epsf[filter]
                else:
                    extended_data = None

                psf = self.ePSF.eval_ePSF(psf_xy,
                                          xp,
                                          yp,
                                          extended_data=extended_data)

                # if get_weight:
                #     fltim = pyfits.open(file)
                #     flt_weight = fltim[0].header['EXPTIME']
                # else:
                #     flt_weight = 1
                flt_weight = self.wcs[key].expweight

                N = 13
                psf_wcs = model.ImageData.get_slice_wcs(
                    self.wcs[key], slice(xyp[0] - N, xyp[0] + N + 1),
                    slice(xyp[1] - N, xyp[1] + N + 1))

                psf_wcs.pscale = utils.get_wcs_pscale(self.wcs[key])

                try:
                    adrizzle.do_driz(psf,
                                     psf_wcs,
                                     psf * 0 + flt_weight,
                                     wcs_slice,
                                     outsci,
                                     outwht,
                                     outctx,
                                     1.,
                                     'cps',
                                     1,
                                     wcslin_pscale=1.,
                                     uniqid=1,
                                     pixfrac=pixfrac,
                                     kernel=kernel,
                                     fillval=0,
                                     stepsize=10,
                                     wcsmap=None)
                except:
                    psf_wcs._naxis1, psf_wcs._naxis2 = psf_wcs._naxis

                    adrizzle.do_driz(psf,
                                     psf_wcs,
                                     psf * 0 + flt_weight,
                                     wcs_slice,
                                     outsci,
                                     outwht,
                                     outctx,
                                     1.,
                                     'cps',
                                     1,
                                     wcslin_pscale=1.,
                                     uniqid=1,
                                     pixfrac=pixfrac,
                                     kernel=kernel,
                                     fillval=0,
                                     stepsize=10,
                                     wcsmap=None)

                if False:
                    count += 1
                    hdu = pyfits.HDUList([
                        pyfits.PrimaryHDU(),
                        pyfits.ImageHDU(data=psf * 100,
                                        header=utils.to_header(psf_wcs))
                    ])
                    ds9.set('frame {0}'.format(count + 1))
                    ds9.set_pyfits(hdu)

        #ss = 1000000/2
        ss = 1. / outsci.sum()
        hdu = pyfits.HDUList([
            pyfits.PrimaryHDU(),
            pyfits.ImageHDU(data=outsci * ss,
                            header=utils.to_header(wcs_slice))
        ])
        if False:
            ds9.set('frame 2')
            ds9.set_pyfits(hdu)

        return hdu
Beispiel #9
0
 def get_psf(self, ra=53.06967306, dec=-27.72333015, filter='F140W', pixfrac=0.1, kernel='point', verbose=True, wcs_slice=None, get_extended=True, get_weight=False):
     from drizzlepac import adrizzle
     from shapely.geometry import Polygon, Point
     
     pix = np.arange(-13,14)
     
     #wcs_slice = self.get_driz_cutout(ra=ra, dec=dec)
     outsci, outwht, outctx = self._get_empty_driz(wcs_slice)
     
     count = 1
     for key in self.flt_keys:
         if self.footprint[key].contains(Point(ra, dec)):
             file, ext = key
             if verbose:
                 print('{0}[SCI,{1}]'.format(file, ext))
             
             xy = self.wcs[key].all_world2pix(np.array([[ra,dec]]), 0)[0]
             xyp = np.cast[int](xy)#+1
             dx = xy[0]-int(xy[0])
             dy = xy[1]-int(xy[1])
             
             if ext == 2:
                 # UVIS
                 #print('UVIS1!')
                 chip_offset = 2051
             else:
                 chip_offset = 0
                 
             psf_xy = self.ePSF.get_at_position(xy[0], xy[1]+chip_offset, filter=filter)
             yp, xp = np.meshgrid(pix-dy, pix-dx, sparse=False, indexing='ij')
             if get_extended:
                 extended_data = self.ePSF.extended_epsf[filter]
             else:
                 extended_data = None
                 
             psf = self.ePSF.eval_ePSF(psf_xy, xp, yp, extended_data=extended_data)
             
             if get_weight:
                 fltim = pyfits.open(file)
                 flt_weight = fltim[0].header['EXPTIME']
             else:
                 flt_weight = 1
                 
             N = 13
             psf_wcs = model.ImageData.get_slice_wcs(self.wcs[key], slice(xyp[0]-N, xyp[0]+N+1), slice(xyp[1]-N, xyp[1]+N+1))
             psf_wcs.pscale = utils.get_wcs_pscale(self.wcs[key])
             
             adrizzle.do_driz(psf, psf_wcs, psf*0+flt_weight, wcs_slice, 
                              outsci, outwht, outctx, 1., 'cps', 1,
                              wcslin_pscale=1., uniqid=1, 
                              pixfrac=pixfrac, kernel=kernel, fillval=0, 
                              stepsize=10, wcsmap=None)
             
             if False:
                 count += 1
                 hdu = pyfits.HDUList([pyfits.PrimaryHDU(), pyfits.ImageHDU(data=psf*100, header=utils.to_header(psf_wcs))])                 
                 ds9.set('frame {0}'.format(count+1))
                 ds9.set_pyfits(hdu)
             
     #ss = 1000000/2
     ss = 1./outsci.sum()
     hdu = pyfits.HDUList([pyfits.PrimaryHDU(), pyfits.ImageHDU(data=outsci*ss, header=utils.to_header(wcs_slice))])
     if False:
         ds9.set('frame 2')
         ds9.set_pyfits(hdu)
     
     return hdu