def test_wcs_bbox_from_shape_3d(): model = datamodels.CubeModel((3, 32, 2048)) bb = wcs_bbox_from_shape(model.data.shape) assert bb == ((-0.5, 2047.5), (-0.5, 31.5)) model = datamodels.IFUCubeModel((750, 45, 50)) bb = wcs_bbox_from_shape(model.data.shape) assert bb == ((-0.5, 49.5), (-0.5, 44.5))
def make_ifu_cube(data_shape, source=None, background=None, x_center=None, y_center=None, radius=None, inner_bkg=None, outer_bkg=None): """Create "science" data for testing. Returns ------- input_model : `~jwst.datamodels.ifucube.IFUCubeModel` """ data = np.zeros(data_shape, dtype=np.float32) r_2 = radius**2 if inner_bkg is not None and outer_bkg is not None: create_background = True bkg = background inner_2 = inner_bkg**2 outer_2 = outer_bkg**2 elif inner_bkg is not None or outer_bkg is not None: raise RuntimeError("Specify both inner_bkg and outer_bkg or neither.") else: create_background = False bkg = 0. for j in range(data_shape[-2]): for i in range(data_shape[-1]): dist_2 = (float(i) - x_center)**2 + (float(j) - y_center)**2 if dist_2 <= r_2: data[:, j, i] = source + bkg if create_background: if dist_2 > inner_2 and dist_2 <= outer_2: data[:, j, i] = bkg dq = np.zeros(data_shape, dtype=np.uint32) input_model = datamodels.IFUCubeModel(data=data, dq=dq) # Populate the BUNIT keyword so that in ifu.py the net will be moved # to the flux column. input_model.meta.bunit_data = 'mJy/arcsec^2' def mock_wcs(x, y, z): """Fake wcs method.""" wavelength = np.linspace(0.5975, 5.2975, 941, endpoint=True, retstep=False, dtype=np.float64) if hasattr(z, 'dtype'): iz = np.around(z).astype(np.int64) else: iz = round(z) wl = wavelength[iz] ra = wl.copy() # dummy values dec = wl.copy() # dummy values return (ra, dec, wl) input_model.meta.wcs = mock_wcs return input_model
def file_case(request, tmp_path): """Generate files with different model states""" case, allow = request.param if case == 'good_model': # Make a model that will always succeed model = datamodels.Level1bModel((10, 10, 10, 10)) path = tmp_path / 'level1bmodel.fits' model.save(path) elif case == 'bad_model': # Make a model that will fail if not allowed model = datamodels.IFUCubeModel((10, 10, 10)) path = tmp_path / 'image.fits' model.save(path) elif case == 'fits_nomodel': # Create just a plain anything FITS hdu = fits.PrimaryHDU() hdul = fits.HDUList([hdu]) path = tmp_path / 'empty.fits' hdul.writeto(path) else: assert False, f'Cannot produce a file for {case}' return path, allow