def test_model(model): print(model) print(model(energy=Q(10, 'TeV'))) print(model.integral(emin=Q(1, 'TeV'), emax=Q(2, 'TeV'))) # plot # butterfly # npred reco_bins = 5 true_bins = 10 e_reco = Q(np.logspace(-1,1,reco_bins+1), 'TeV') e_true = Q(np.logspace(-1.5, 1.5, true_bins+1), 'TeV') livetime = Q(26, 'min') aeff_data = Q(np.ones(true_bins) * 1e5, 'cm2') aeff = EffectiveAreaTable(energy=e_true, data=aeff_data) edisp_data = make_perfect_resolution(e_true, e_reco) edisp = EnergyDispersion(edisp_data, EnergyBounds(e_true), EnergyBounds(e_reco)) npred = calculate_predicted_counts(model=model, livetime=livetime, aeff=aeff, edisp=edisp) print(npred.data)
def test_model(model): print(model) print(model(energy=Q(10, 'TeV'))) print(model.integral(emin=Q(1, 'TeV'), emax=Q(2, 'TeV'))) # plot # butterfly # npred reco_bins = 5 true_bins = 10 e_reco = Q(np.logspace(-1, 1, reco_bins + 1), 'TeV') e_true = Q(np.logspace(-1.5, 1.5, true_bins + 1), 'TeV') livetime = Q(26, 'min') aeff_data = Q(np.ones(true_bins) * 1e5, 'cm2') aeff = EffectiveAreaTable(energy=e_true, data=aeff_data) edisp_data = make_perfect_resolution(e_true, e_reco) edisp = EnergyDispersion(edisp_data, EnergyBounds(e_true), EnergyBounds(e_reco)) npred = calculate_predicted_counts(model=model, livetime=livetime, aeff=aeff, edisp=edisp) print(npred.data)
# EDISP edisp = EnergyDispersion.from_gauss(e_true=e_true, e_reco=e_true, sigma=0.2) # AEFF nodes = np.sqrt(e_true[:-1] * e_true[1:]) data = abramowski_effective_area(energy=nodes) aeff = EffectiveAreaTable(data=data, energy=e_true) lo_threshold = aeff.find_energy(0.1 * aeff.max_area) # MODEL model = PowerLaw(index=2.3 * u.Unit(""), amplitude=2.5 * 1e-12 * u.Unit("cm-2 s-1 TeV-1"), reference=1 * u.TeV) # COUNTS livetime = 2 * u.h npred = calculate_predicted_counts(model=model, aeff=aeff, edisp=edisp, livetime=livetime) bkg = 0.2 * npred.data alpha = 0.1 counts_kwargs = dict( energy=npred.energy, exposure=livetime, obs_id=31415, creator="Simulation", hi_threshold=50 * u.TeV, lo_threshold=lo_threshold, ) rand = get_random_state(42) on_counts = rand.poisson(npred.data) + rand.poisson(bkg)
# AEFF nodes = np.sqrt(e_true[:-1] * e_true[1:]) data = abramowski_effective_area(energy=nodes) aeff = EffectiveAreaTable(data=data, energy=e_true) lo_threshold = aeff.find_energy(0.1 * aeff.max_area) # MODEL model = PowerLaw(index=2.3 * u.Unit(''), amplitude=2.5 * 1e-12 * u.Unit('cm-2 s-1 TeV-1'), reference=1 * u.TeV) # COUNTS livetime = 2 * u.h npred = calculate_predicted_counts(model=model, aeff=aeff, edisp=edisp, livetime=livetime) bkg = 0.2 * npred.data alpha = 0.1 counts_kwargs = dict(energy=npred.energy, exposure=livetime, obs_id=31415, creator='Simulation', hi_threshold=50 * u.TeV, lo_threshold=lo_threshold) rand = get_random_state(42) on_counts = rand.poisson(npred.data) + rand.poisson(bkg) on_vector = PHACountsSpectrum(data=on_counts, backscal=1, **counts_kwargs)