def simulate_spectrum_dataset(model, random_state=0): energy = np.logspace(-0.5, 1.5, 21) * u.TeV aeff = EffectiveAreaTable.from_parametrization(energy=energy) bkg_model = PowerLawSpectralModel(index=2.5, amplitude="1e-12 cm-2 s-1 TeV-1") dataset = SpectrumDatasetOnOff( aeff=aeff, model=model, livetime=100 * u.h, acceptance=1, acceptance_off=5 ) eval = SpectrumEvaluator(model=bkg_model, aeff=aeff, livetime=100 * u.h) bkg_model = eval.compute_npred() dataset.fake(random_state=random_state, background_model=bkg_model) return dataset
def test_counts_predictor(case): opts = case.copy() del opts["npred"] predictor = SpectrumEvaluator(**opts) actual = predictor.compute_npred().total_counts assert_allclose(actual, case["npred"])
from gammapy.irf import EnergyDispersion, EffectiveAreaTable from gammapy.spectrum import models, SpectrumEvaluator import numpy as np import astropy.units as u import matplotlib.pyplot as plt e_true = np.logspace(-2, 2.5, 109) * u.TeV e_reco = np.logspace(-2, 2, 73) * u.TeV aeff = EffectiveAreaTable.from_parametrization(energy=e_true) edisp = EnergyDispersion.from_gauss(e_true=e_true, e_reco=e_reco, sigma=0.3, bias=0) model = models.PowerLaw(index=2.3, amplitude="2.5e-12 cm-2 s-1 TeV-1", reference="1 TeV") livetime = 1 * u.h predictor = SpectrumEvaluator(model=model, aeff=aeff, edisp=edisp, livetime=livetime) predictor.compute_npred().plot_hist() plt.show()
# Take a quick look at the simulated counts dataset.counts.plot() # ## Include Background # # In this section we will include a background component. Furthermore, we will also simulate more than one observation and fit each one individually in order to get average fit results. # In[ ]: # We assume a PowerLaw shape of the background as well bkg_model = PowerLaw(index=2.5, amplitude=1e-11 * u.Unit("cm-2 s-1 TeV-1"), reference=1 * u.TeV) evaluator = SpectrumEvaluator(model=bkg_model, aeff=aeff, livetime=livetime) npred_bkg = evaluator.compute_npred() # In[ ]: dataset = SpectrumDatasetOnOff( aeff=aeff, edisp=edisp, model=model_ref, livetime=livetime, acceptance=1, acceptance_off=5, ) # In[ ]: