Fermi-LAT PSF StudyΒΆ
This study compares the results of the Fermi Science Tool gtpsf - which gives
information about the size of the Fermi-LAT PSF with energy - for the Galactic
center FermiGalacticCenter
and in the region of the
Vela Pulsar FermiVelaRegion
. The plots below compare
the PSF calculated using the Science Tools in these locations, and compare
to the published LAT PSF data for Pass 7 P7SOURCEV6
and reprocessed
Pass 7 P7REP_SOURCE_V15
IRFs at energies between 10 and 300 GeV (the range
of energies for which the calculated and published PSF results are all
available). 68% and 95% PSF containment radii are considered.
"""Produces table to study the size of the Fermi-LAT PSF with Energy.
"""
import matplotlib.pyplot as plt
from astropy.table import Table
from gammapy.utils.energy import EnergyBounds
from gammapy.datasets import FermiGalacticCenter, FermiVelaRegion
from gammapy.datasets import load_lat_psf_performance
__all__ = ['get_psf_table', 'plot_containment_radii']
def get_psf_table(psf, emin, emax, bins):
"""Returns a table of energy and containment radius
from an EnergyDependentTablePSF object."""
# Container for data
data = []
# Loop over energies and determine PSF containment radius
ebounds = EnergyBounds.equal_log_spacing(emin, emax, bins, 'MeV')
for energy in ebounds:
energy_psf = psf.table_psf_at_energy(energy)
containment_68 = energy_psf.containment_radius(0.68)
containment_95 = energy_psf.containment_radius(0.95)
row = dict(ENERGY=energy.value,
CONT_68=containment_68.value,
CONT_95=containment_95.value)
data.append(row)
# Construct table and add correct units to columns
table = Table(data)
table['ENERGY'].units = energy.unit
table['CONT_68'].units = containment_68.unit
table['CONT_95'].units = containment_95.unit
return table
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],
label='Fermi Tools PSF @ Galactic Center')
plt.plot(gtpsf_table_vela['ENERGY'], gtpsf_table_vela[rad],
label='Fermi Tools PSF @ Vela Region')
plt.plot(true_table_rep['energy'], true_table_rep['containment_angle'],
linestyle='--', label='P7REP_SOURCE_V15')
plt.plot(true_table['energy'], true_table['containment_angle'],
linestyle='--', label='P7SOURCEV6')
plt.xlim([10000, 300000])
plt.legend()
plt.semilogx()
plt.xlabel('Energy/MeV')
plt.ylabel('PSF Containment Radius/deg')
return plt
Note that for the P7SOURCEV6
and P7REP_SOURCE_V15
lines, the data was
extracted by hand and so a 10% error should be assumed
(Source code, png, hires.png, pdf)
(Source code, png, hires.png, pdf)
The plot for P7REP_SOURCE_V15
is not available online, but P7REP_CLEAN_V15
is very similar to P7REP_SOURCE_V15
which is used for this study.
The plots indicate that P7REP_CLEAN_V15
cuts (which are very similar to
P7REP_SOURCE_V15
cuts) were used for the Vela Region data. However, for
the Galactic Center region, P7SOURCEV6
cuts are consistent with the PSF
data, and P7REP_CLEAN_V15
could not have been used here.
The published LAT PSF data may be found at: