This is a fixed-text formatted version of a Jupyter notebook.
- Try online
- You can contribute with your own notebooks in this GitHub repository.
- Source files: cta_sensitivity.ipynb | cta_sensitivity.py
Computation of the CTA sensitivity¶
Introduction¶
This notebook explains how to derive the CTA sensitivity for a point-like IRF at a fixed zenith angle and fixed offset. The significativity is computed for the 1D analysis (On-OFF regions) and the LiMa formula.
We will be using the following Gammapy classes:
- gammapy.irf.CTAIrf
- gammapy.spectrum.SensitivityEstimator
Setup¶
As usual, we’ll start with some setup …
In [1]:
%matplotlib inline
import matplotlib.pyplot as plt
In [2]:
from gammapy.irf import CTAPerf
from gammapy.spectrum import SensitivityEstimator
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-2-b9f53885d5c3> in <module>
----> 1 from gammapy.irf import CTAPerf
2 from gammapy.spectrum import SensitivityEstimator
ImportError: cannot import name 'CTAPerf' from 'gammapy.irf' (/Users/deil/work/code/gammapy-docs/build/dev/gammapy/gammapy/irf/__init__.py)
Load IRFs¶
First load the CTA IRFs.
In [3]:
filename = "$GAMMAPY_EXTRA/datasets/cta/perf_prod2/point_like_non_smoothed/South_5h.fits.gz"
irf = CTAPerf.read(filename)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-3-b41a41c65272> in <module>
1 filename = "$GAMMAPY_EXTRA/datasets/cta/perf_prod2/point_like_non_smoothed/South_5h.fits.gz"
----> 2 irf = CTAPerf.read(filename)
NameError: name 'CTAPerf' is not defined
Compute sensitivity¶
Choose a few parameters, then run the sentitivity computation.
In [4]:
sensitivity_estimator = SensitivityEstimator(irf=irf, livetime="5h")
sensitivity_estimator.run()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-4-6e82811d30c1> in <module>
----> 1 sensitivity_estimator = SensitivityEstimator(irf=irf, livetime="5h")
2 sensitivity_estimator.run()
NameError: name 'SensitivityEstimator' is not defined
Results¶
The results are given as an Astropy table.
In [5]:
# Show the results table
sensitivity_estimator.results_table
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-5-4efcdd92d4bb> in <module>
1 # Show the results table
----> 2 sensitivity_estimator.results_table
NameError: name 'sensitivity_estimator' is not defined
In [6]:
# Save it to file (could use e.g. format of CSV or ECSV or FITS)
# sensitivity_estimator.results_table.write('sensitivity.ecsv', format='ascii.ecsv')
In [7]:
# Plot the sensitivity curve
t = sensitivity_estimator.results_table
is_s = t["criterion"] == "significance"
plt.plot(
t["energy"][is_s],
t["e2dnde"][is_s],
"s-",
color="red",
label="significance",
)
is_g = t["criterion"] == "gamma"
plt.plot(
t["energy"][is_g], t["e2dnde"][is_g], "*-", color="blue", label="gamma"
)
plt.loglog()
plt.xlabel("Energy ({})".format(t["energy"].unit))
plt.ylabel("Sensitivity ({})".format(t["e2dnde"].unit))
plt.legend();
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-7-1c25fd00268d> in <module>
1 # Plot the sensitivity curve
----> 2 t = sensitivity_estimator.results_table
3
4 is_s = t["criterion"] == "significance"
5 plt.plot(
NameError: name 'sensitivity_estimator' is not defined
Exercises¶
- Also compute the sensitivity for a 20 hour observation
- Compare how the sensitivity differs between 5 and 20 hours by plotting the ratio as a function of energy.
In [8]: