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
def plot_containment_radii(fraction): """Plotting script for 68% and 95% containment radii.""" psf_gc = FermiGalacticCenter.psf() gtpsf_table_gc = get_psf_table(psf_gc, 10000, 300000, 15) psf_vela = FermiVelaRegion.psf() gtpsf_table_vela = get_psf_table(psf_vela, 10000, 300000, 15) if fraction == 68: true_table_rep = load_lat_psf_performance('P7REP_SOURCE_V15_68') true_table = load_lat_psf_performance('P7SOURCEV6_68') rad = 'CONT_68' elif fraction == 95: true_table_rep = load_lat_psf_performance('P7REP_SOURCE_V15_95') true_table = load_lat_psf_performance('P7SOURCEV6_95') rad = 'CONT_95' plt.plot(gtpsf_table_gc['ENERGY'], gtpsf_table_gc[rad], color='red',label='Fermi Tools PSF @ Galactic Center') plt.plot(gtpsf_table_vela['ENERGY'], gtpsf_table_vela[rad], color='blue', label='Fermi Tools PSF @ Vela Region') plt.plot(true_table_rep['energy'], true_table_rep['containment_angle'], color='green', linestyle='--', label='P7REP_SOURCE_V15') plt.plot(true_table['energy'], true_table['containment_angle'], color='black', linestyle='--', label='P7SOURCEV6') plt.xlim([10000, 300000]) plt.legend() plt.semilogx() plt.xlabel('Energy/MeV') plt.ylabel('PSF Containment Radius/deg') return plt
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 = SpectralCube.read(background_file) exposure_cube = SpectralCube.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 = SpectralCube(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
def prepare_images(): # Read in data fermi_vela = FermiVelaRegion() background_file = FermiVelaRegion.filenames()['diffuse_model'] exposure_file = FermiVelaRegion.filenames()['exposure_cube'] counts_file = FermiVelaRegion.filenames()['counts_cube'] background_model = SkyCube.read(background_file, format='fermi-background') exposure_cube = SkyCube.read(exposure_file, format='fermi-exposure') # Re-project background cube repro_bg_cube = background_model.reproject(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, integral_resolution=5) # Convolve with Energy-dependent Fermi LAT PSF psf = EnergyDependentTablePSF.read(FermiVelaRegion.filenames()['psf']) kernels = psf.kernels(npred_cube) convolved_npred_cube = npred_cube.convolve(kernels, mode='reflect') # Counts data counts_cube = SkyCube.read(counts_file, format='fermi-counts') counts_cube = counts_cube.reproject(npred_cube) 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
def prepare_images(): # Read in data fermi_vela = FermiVelaRegion() background_file = FermiVelaRegion.filenames()['diffuse_model'] exposure_file = FermiVelaRegion.filenames()['exposure_cube'] counts_file = FermiVelaRegion.filenames()['counts_cube'] background_model = SkyCube.read(background_file, format='fermi-background') exposure_cube = SkyCube.read(exposure_file, format='fermi-exposure') # Re-project background cube repro_bg_cube = background_model.reproject(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, integral_resolution=5) # Convolve with Energy-dependent Fermi LAT PSF psf = EnergyDependentTablePSF.read(FermiVelaRegion.filenames()['psf']) kernels = psf.kernels(npred_cube) convolved_npred_cube = npred_cube.convolve(kernels, mode='reflect') # Counts data counts_cube = SkyCube.read(counts_file, format='fermi-counts') counts_cube = counts_cube.reproject(npred_cube) 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
from astropy.modeling.models import Gaussian2D from astropy.convolution.utils import discretize_model from astropy.convolution import convolve from aplpy import FITSFigure # In[2]: from gammapy.datasets import FermiVelaRegion from gammapy.morphology import Shell2D from gammapy.irf import EnergyDependentTablePSF # In[3]: # Get background model from Fermi diffuse model energy_range = Quantity([10, 500], 'GeV') fermi_diffuse = FermiVelaRegion.diffuse_model() flux_bkg = fermi_diffuse.integral_flux_image(energy_range) # Define source model vela_junior = Shell2D(amplitude=3E-6, x_0=-93.72, y_0=-1.24, r_in=1, width=0.5, normed=True) vela_x = Gaussian2D(amplitude=7.5E-7, x_mean=-96.14, y_mean=-3.09, x_stddev=0.6, y_stddev=0.6)