def _check_unit(self): from gammapy.data.gti import GTI # evaluate over a test geom to check output unit # TODO simpler way to test this ? axis = MapAxis.from_energy_bounds("0.1 TeV", "10 TeV", nbin=1, name="energy_true") geom = WcsGeom.create(skydir=self.position, npix=(2, 2), axes=[axis]) gti = GTI.create(1 * u.day, 2 * u.day) value = self.evaluate_geom(geom, gti) if self.apply_irf["exposure"]: ref_unit = u.Unit("cm-2 s-1 MeV-1 sr-1") else: ref_unit = u.Unit("sr-1") if self.spatial_model is None: ref_unit = ref_unit / u.Unit("sr-1") if not value.unit.is_equivalent(ref_unit): raise ValueError( f"SkyModel unit {value.unit} is not equivalent to {ref_unit}")
def test_constant_temporal_model_integral(): temporal_model = ConstantTemporalModel() start = [1, 3, 5] * u.day stop = [2, 3.5, 6] * u.day gti = GTI.create(start, stop) val = temporal_model.integral(gti.time_start, gti.time_stop) assert len(val) == 3 assert_allclose(np.sum(val), 1.0, rtol=1e-5)
def test_generalized_gaussian_temporal_model_integral(): temporal_model = GeneralizedGaussianTemporalModel(t_ref=50003 * u.d, t_rise="2.0 day", t_decay="2.0 day", eta=1/2) start = 1 * u.day stop = 2 * u.day t_ref = Time(50000, format="mjd") gti = GTI.create(start, stop, reference_time=t_ref) val = temporal_model.integral(gti.time_start, gti.time_stop) assert_allclose(val, 0.751594, rtol=1e-5)
def test_gaussian_temporal_model_integral(): temporal_model = GaussianTemporalModel(t_ref=50003 * u.d, sigma="2.0 day") start = [1, 3, 5] * u.day stop = [2, 3.5, 6] * u.day t_ref = Time(50000, format="mjd") gti = GTI.create(start, stop, reference_time=t_ref) val = temporal_model.integral(gti.time_start, gti.time_stop) assert len(val) == 3 assert_allclose(np.sum(val), 0.682679, rtol=1e-5)
def test_powerlaw_temporal_model_integral(): t_ref = Time(55555, format="mjd") temporal_model = PowerLawTemporalModel(alpha=-2.0, t_ref=t_ref.mjd * u.d) start = 1 * u.day stop = 4 * u.day gti = GTI.create(start, stop, reference_time=t_ref) val = temporal_model.integral(gti.time_start, gti.time_stop) assert len(val) == 1 assert_allclose(np.sum(val), 0.25, rtol=1e-5) temporal_model.parameters["alpha"].value = -1 start = [1, 3, 5] * u.day stop = [2, 3.5, 6] * u.day gti = GTI.create(start, stop, reference_time=t_ref) val = temporal_model.integral(gti.time_start, gti.time_stop) print(np.sum(val)) assert len(val) == 3 assert_allclose(np.sum(val), 0.411847, rtol=1e-5)
def test_exponential_temporal_model_integral(): temporal_model = ExpDecayTemporalModel() start = [1, 3, 5] * u.day stop = [2, 3.5, 6] * u.day t_ref = Time(55555, format="mjd") gti = GTI.create(start, stop, reference_time=t_ref) val = temporal_model.integral(gti.time_start, gti.time_stop) assert len(val) == 3 assert_allclose(np.sum(val), 0.1024784, rtol=1e-5)
def test_sine_temporal_model_integral(): t_ref = Time(55555, format="mjd") omega = np.pi / 4.0 * u.rad / u.day temporal_model = SineTemporalModel(amp=0.5, omega=omega, t_ref=t_ref.mjd * u.d) start = [1, 3, 5] * u.day stop = [2, 3.5, 6] * u.day gti = GTI.create(start, stop, reference_time=t_ref) val = temporal_model.integral(gti.time_start, gti.time_stop) assert len(val) == 3 assert_allclose(np.sum(val), 1.08261, rtol=1e-5)
def test_linear_temporal_model_integral(): t_ref = Time(55555, format="mjd") temporal_model = LinearTemporalModel(alpha=1.0, beta=0.1 / u.day, t_ref=t_ref.mjd * u.d) start = [1, 3, 5] * u.day stop = [2, 3.5, 6] * u.day gti = GTI.create(start, stop, reference_time=t_ref) val = temporal_model.integral(gti.time_start, gti.time_stop) assert len(val) == 3 assert_allclose(np.sum(val), 1.345, rtol=1e-5)
def test_lightcurve_temporal_model_integral(): time = np.arange(0, 10, 0.06) * u.hour table = Table() table["TIME"] = time table["NORM"] = np.ones(len(time)) table.meta = dict(MJDREFI=55197.0, MJDREFF=0, TIMEUNIT="hour") temporal_model = LightCurveTemplateTemporalModel(table) start = [1, 3, 5] * u.hour stop = [2, 3.5, 6] * u.hour gti = GTI.create(start, stop, reference_time=Time("2010-01-01T00:00:00")) val = temporal_model.integral(gti.time_start, gti.time_stop) assert len(val) == 3 assert_allclose(np.sum(val), 1.0, rtol=1e-5)
def _check_unit(self): from astropy.time import Time from gammapy.data.gti import GTI # evaluate over a test geom to check output unit # TODO simpler way to test this ? axis = MapAxis.from_edges(np.logspace(-1, 1, 3), unit=u.TeV, name="energy_true") geom = WcsGeom.create(skydir=(0, 0), npix=(2, 2), frame="galactic", axes=[axis]) t_ref = Time(55555, format="mjd") gti = GTI.create([1, 5] * u.day, [2, 6] * u.day, reference_time=t_ref) value = self.evaluate_geom(geom, gti) if self.spatial_model is not None: ref_unit = "cm-2 s-1 MeV-1 sr-1" else: ref_unit = "cm-2 s-1 MeV-1" if not value.unit.is_equivalent(ref_unit): raise ValueError( f"SkyModel unit {value.unit} is not equivalent to {ref_unit}" )
def gti(): start = [1, 3, 5] * u.day stop = [2, 3.5, 6] * u.day t_ref = Time(55555, format="mjd") gti = GTI.create(start, stop, reference_time=t_ref) return gti