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)])
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)
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)
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)])
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)])
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)
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)
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
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