def setup_class(self): table = Table() table["RA"] = [0.0, 0.0, 0.0, 0.0, 10.0] * u.deg table["DEC"] = [0.0, 0.05, 0.9, 10.0, 10.0] * u.deg table["ENERGY"] = [1.0, 1.0, 1.5, 1.5, 10.0] * u.TeV table["OFFSET"] = [0.1, 0.1, 0.5, 1.0, 1.5] * u.deg table.meta["RA_PNT"] = 0 * u.deg table.meta["DEC_PNT"] = 0.5 * u.deg meta_obs = dict() meta_obs["RA_PNT"] = 0 * u.deg meta_obs["DEC_PNT"] = 0.5 * u.deg meta_obs["DEADC"] = 1 meta = time_ref_to_dict("2010-01-01") gti_table = Table({"START": [1], "STOP": [3]}, meta=meta) gti = GTI(gti_table) self.observation = Observation( events=EventList(table), obs_info=meta_obs, gti=gti )
def setup_class(self): self.observations = [] for sign in [-1, 1]: events = Table() events["RA"] = [0.0, 0.0, 0.0, 0.0, 10.0] * u.deg events["DEC"] = sign * ([0.0, 0.05, 0.9, 10.0, 10.0] * u.deg) events["ENERGY"] = [1.0, 1.0, 1.5, 1.5, 10.0] * u.TeV events["OFFSET"] = [0.1, 0.1, 0.5, 1.0, 1.5] * u.deg obs_info = dict( RA_PNT=0 * u.deg, DEC_PNT=sign * 0.5 * u.deg, DEADC=1, ) events.meta.update(obs_info) meta = time_ref_to_dict("2010-01-01") gti_table = Table({"START": [1], "STOP": [3]}, meta=meta) gti = GTI(gti_table) self.observations.append(Observation( events=EventList(events), obs_info=obs_info, gti=gti ))
def test_interpolate_map_dataset(): energy = MapAxis.from_energy_bounds("1 TeV", "300 TeV", nbin=5, name="energy") energy_true = MapAxis.from_nodes(np.logspace(-1, 3, 20), name="energy_true", interp="log", unit="TeV") # make dummy map IRFs geom_allsky = WcsGeom.create(npix=(5, 3), proj="CAR", binsz=60, axes=[energy], skydir=(0, 0)) geom_allsky_true = geom_allsky.drop('energy').to_cube([energy_true]) #background value = 30 bkg_map = Map.from_geom(geom_allsky, unit="") bkg_map.data = value*np.ones(bkg_map.data.shape) #effective area - with a gradient that also depends on energy aeff_map = Map.from_geom(geom_allsky_true, unit="cm2 s") ra_arr = np.arange(aeff_map.data.shape[1]) dec_arr = np.arange(aeff_map.data.shape[2]) for i in np.arange(aeff_map.data.shape[0]): aeff_map.data[i, :, :] = (i+1)*10*np.meshgrid(dec_arr, ra_arr)[0]+10*np.meshgrid(dec_arr, ra_arr)[1]+10 aeff_map.meta["TELESCOP"] = "HAWC" #psf map width = 0.2*u.deg rad_axis = MapAxis.from_nodes(np.linspace(0, 2, 50), name="rad", unit="deg") psfMap = PSFMap.from_gauss(energy_true, rad_axis, width) #edispmap edispmap = EDispKernelMap.from_gauss(energy, energy_true, sigma=0.1, bias=0.0, geom=geom_allsky) #events and gti nr_ev = 10 ev_t = Table() gti_t = Table() ev_t['EVENT_ID'] = np.arange(nr_ev) ev_t['TIME'] = nr_ev*[Time('2011-01-01 00:00:00', scale='utc', format='iso')] ev_t['RA'] = np.linspace(-1, 1, nr_ev)*u.deg ev_t['DEC'] = np.linspace(-1, 1, nr_ev)*u.deg ev_t['ENERGY'] = np.logspace(0, 2, nr_ev)*u.TeV gti_t['START'] = [Time('2010-12-31 00:00:00', scale='utc', format='iso')] gti_t['STOP'] = [Time('2011-01-02 00:00:00', scale='utc', format='iso')] events = EventList(ev_t) gti = GTI(gti_t) #define observation obs = Observation( obs_id=0, obs_info={}, gti=gti, aeff=aeff_map, edisp=edispmap, psf=psfMap, bkg=bkg_map, events=events, obs_filter=None, ) #define analysis geometry geom_target = WcsGeom.create( skydir=(0, 0), width=(10, 10), binsz=0.1*u.deg, axes=[energy] ) maker = MapDatasetMaker(selection=["exposure", "counts", "background", "edisp", "psf"]) dataset = MapDataset.create(geom=geom_target, energy_axis_true=energy_true, name="test") dataset = maker.run(dataset, obs) # test counts assert dataset.counts.data.sum() == nr_ev #test background coords_bg = { 'skycoord' : SkyCoord("0 deg", "0 deg"), 'energy' : energy.center[0] } assert_allclose( dataset.background_model.evaluate().get_by_coord(coords_bg)[0], value, atol=1e-7) #test effective area coords_aeff = { 'skycoord' : SkyCoord("0 deg", "0 deg"), 'energy_true' : energy_true.center[0] } assert_allclose( aeff_map.get_by_coord(coords_aeff)[0]/dataset.exposure.get_by_coord(coords_aeff)[0], 1, atol=1e-3) #test edispmap pdfmatrix_preinterp = edispmap.get_edisp_kernel(SkyCoord("0 deg", "0 deg")).pdf_matrix pdfmatrix_postinterp = dataset.edisp.get_edisp_kernel(SkyCoord("0 deg", "0 deg")).pdf_matrix assert_allclose(pdfmatrix_preinterp, pdfmatrix_postinterp, atol=1e-7) #test psfmap geom_psf = geom_target.drop('energy').to_cube([energy_true]) psfkernel_preinterp = psfMap.get_psf_kernel(SkyCoord("0 deg", "0 deg"), geom_psf, max_radius=2*u.deg).data psfkernel_postinterp = dataset.psf.get_psf_kernel(SkyCoord("0 deg", "0 deg"), geom_psf, max_radius=2*u.deg).data assert_allclose(psfkernel_preinterp, psfkernel_postinterp, atol=1e-4)