def make_psf_map_obs(geom, obs): exposure_map = make_map_exposure_true_energy( geom=geom.squash(axis="theta"), pointing=obs.pointing_radec, aeff=obs.aeff, livetime=obs.observation_live_time_duration, ) psf_map = make_psf_map( geom=geom, psf=obs.psf, pointing=obs.pointing_radec, exposure_map=exposure_map ) return psf_map
def test_containment_radius_map(): psf = fake_psf3d(0.15 * u.deg) pointing = SkyCoord(0, 0, unit="deg") energy_axis = MapAxis(nodes=[0.2, 1, 2], unit="TeV", name="energy_true") psf_theta_axis = MapAxis(nodes=np.linspace(0.0, 0.6, 30), unit="deg", name="theta") geom = WcsGeom.create( skydir=pointing, binsz=0.5, width=(4, 3), axes=[psf_theta_axis, energy_axis] ) psfmap = make_psf_map(psf=psf, pointing=pointing, geom=geom) m = psfmap.containment_radius_map(1 * u.TeV) coord = SkyCoord(0.3, 0, unit="deg") val = m.interp_by_coord(coord) assert_allclose(val, 0.226477, rtol=1e-3)
def test_make_psf_map(): psf = fake_psf3d(0.3 * u.deg) pointing = SkyCoord(0, 0, unit="deg") energy_axis = MapAxis( nodes=[0.2, 0.7, 1.5, 2.0, 10.0], unit="TeV", name="energy_true" ) rad_axis = MapAxis(nodes=np.linspace(0.0, 1.0, 51), unit="deg", name="theta") geom = WcsGeom.create( skydir=pointing, binsz=0.2, width=5, axes=[rad_axis, energy_axis] ) psfmap = make_psf_map(psf, pointing, geom) assert psfmap.psf_map.geom.axes[0] == rad_axis assert psfmap.psf_map.geom.axes[1] == energy_axis assert psfmap.psf_map.unit == Unit("sr-1") assert psfmap.psf_map.data.shape == (4, 50, 25, 25)
def get_psf(): filename = ( "$GAMMAPY_DATA/cta-1dc/caldb/data/cta/1dc/bcf/South_z20_50h/irf_file.fits" ) psf = EnergyDependentMultiGaussPSF.read(filename, hdu="POINT SPREAD FUNCTION") geom = WcsGeom.create( skydir=(0, 0), frame="galactic", binsz=2, width=(2, 2), axes=[RAD_AXIS_DEFAULT, psf.axes["energy_true"]] ) return make_psf_map( psf=psf, pointing=SkyCoord(0, 0.5, unit="deg", frame="galactic"), geom=geom, exposure_map=Map.from_geom(geom.squash("rad"), unit="cm2 s") )
def make_test_psfmap(size, shape="gauss"): psf = fake_psf3d(size, shape) aeff2d = fake_aeff2d() pointing = SkyCoord(0, 0, unit="deg") energy_axis = MapAxis( nodes=[0.2, 0.7, 1.5, 2.0, 10.0], unit="TeV", name="energy_true" ) rad_axis = MapAxis.from_nodes( nodes=np.linspace(0.0, 0.6, 50), unit="deg", name="theta" ) geom = WcsGeom.create( skydir=pointing, binsz=0.2, width=5, axes=[rad_axis, energy_axis] ) exposure_geom = geom.squash(axis="theta") exposure_map = make_map_exposure_true_energy(pointing, "1 h", aeff2d, exposure_geom) return make_psf_map(psf, pointing, geom, exposure_map)