def _get_ref_cube(self, enumbins=11): p = self.parameters wcs = self.reference.wcs.deepcopy() shape = (enumbins, ) + self.reference.data.shape data = np.zeros(shape) energy = Energy.equal_log_spacing(p['emin'], p['emax'], enumbins, 'TeV') energy_axis = LogEnergyAxis(energy, mode='center') return SkyCube(data=data, wcs=wcs, energy_axis=energy_axis)
def prepare_images(): # Read in data background_file = FermiVelaRegion.filenames()['diffuse_model'] exposure_file = FermiVelaRegion.filenames()['exposure_cube'] counts_file = FermiVelaRegion.filenames()['counts_cube'] background_model = SkyCube.read(background_file) exposure_cube = SkyCube.read(exposure_file) # Add correct units exposure_cube.data = Quantity(exposure_cube.data.value, 'cm2 s') # Re-project background cube repro_bg_cube = background_model.reproject_to(exposure_cube) # Define energy band required for output energies = EnergyBounds([10, 500], 'GeV') # Compute the predicted counts cube npred_cube = compute_npred_cube(repro_bg_cube, exposure_cube, energies) # Convolve with Energy-dependent Fermi LAT PSF psf = EnergyDependentTablePSF.read(FermiVelaRegion.filenames()['psf']) convolved_npred_cube = convolve_cube(npred_cube, psf, offset_max=Angle(3, 'deg')) # Counts data counts_data = fits.open(counts_file)[0].data counts_wcs = WCS(fits.open(counts_file)[0].header) counts_cube = SkyCube(data=Quantity(counts_data, ''), wcs=counts_wcs, energy=energies) counts_cube = counts_cube.reproject_to(npred_cube, projection_type='nearest-neighbor') counts = counts_cube.data[0] model = convolved_npred_cube.data[0] # Load Fermi tools gtmodel background-only result gtmodel = fits.open( FermiVelaRegion.filenames()['background_image'])[0].data.astype(float) # Ratio for the two background images ratio = np.nan_to_num(model / gtmodel) # Header is required for plotting, so returned here wcs = npred_cube.wcs header = wcs.to_header() return model, gtmodel, ratio, counts, header
"_TeV.fits")["exposure"].data * 1e4 #exposure_data[i_E,:,:] = SkyImageList.read(outdir_data + "/fov_bg_maps" + str(E1) + "_" + str(E2) + "_TeV.fits")["exposure"].data bkg_data[i_E, :, :] = SkyImageList.read(outdir_data + "/fov_bg_maps" + str(E1) + "_" + str(E2) + "_TeV.fits")["bkg"].data psf_file = Table.read(outdir_data + "/psf_table_" + source_name + "_" + str(E1) + "_" + str(E2) + ".fits") header = on.to_image_hdu().header psf_data[i_E, :, :] = fill_acceptance_image( header, on.center, psf_file["theta"].to("deg"), psf_file["psf_value"].data, psf_file["theta"].to("deg")[-1]).data #logenergy_axis=LogEnergyAxis(energy_bins[0:imax+1],mode='edges') logenergy_axis = LogEnergyAxis(energy_bins, mode='edges') counts_3D = SkyCube(name="counts3D", data=Quantity(counts, " "), wcs=on.wcs, energy_axis=logenergy_axis) cube = counts_3D.to_sherpa_data3d(dstype='Data3DInt') logenergy_axis = LogEnergyAxis(energy_bins[0:imax + 1], mode='edges') psf_image_3D = SkyCube(name="counts3D", data=Quantity(psf_data, " "), wcs=on.wcs, energy_axis=logenergy_axis) exposure_image_3D = SkyCube(name="counts3D", data=Quantity(exposure_data, "m2 s "), wcs=on.wcs, energy_axis=logenergy_axis) spatial_model = NormGauss2DInt('spatial-model') spectral_model = PowLaw1D('spectral-model') #spectral_model = MyPLExpCutoff('spectral-model')