def test_sky_disk(): # Test the disk case (e=0) r_0 = 2 * u.deg model = DiskSpatialModel(lon_0="1 deg", lat_0="45 deg", r_0=r_0) lon = [1, 5, 359] * u.deg lat = 46 * u.deg val = model(lon, lat) assert val.unit == "sr-1" desired = [261.263956, 0, 261.263956] assert_allclose(val.value, desired) radius = model.evaluation_radius assert radius.unit == "deg" assert_allclose(radius.value, r_0.value) # test the normalization for an elongated ellipse near the Galactic Plane m_geom_1 = WcsGeom.create( binsz=0.015, width=(20, 20), skydir=(2, 2), frame="galactic", proj="AIT" ) coords = m_geom_1.get_coord() solid_angle = m_geom_1.solid_angle() lon = coords.lon lat = coords.lat r_0 = 10 * u.deg model_1 = DiskSpatialModel( lon_0=2 * u.deg, lat_0=2 * u.deg, r_0=r_0, e=0.4, phi=30 * u.deg ) vals_1 = model_1(lon, lat) assert vals_1.unit == "sr-1" assert_allclose(np.sum(vals_1 * solid_angle), 1, rtol=1.0e-3) radius = model_1.evaluation_radius assert radius.unit == "deg" assert_allclose(radius.value, r_0.value) # test rotation r_0 = 2 * u.deg semi_minor = 1 * u.deg eccentricity = np.sqrt(1 - (semi_minor / r_0) ** 2) model_rot_test = DiskSpatialModel( lon_0=0 * u.deg, lat_0=0 * u.deg, r_0=r_0, e=eccentricity, phi=90 * u.deg ) assert_allclose(model_rot_test(0 * u.deg, 1.5 * u.deg).value, 0) # test the normalization for a disk (ellipse with e=0) at the Galactic Pole m_geom_2 = WcsGeom.create( binsz=0.1, width=(6, 6), skydir=(0, 90), frame="galactic", proj="AIT" ) coords = m_geom_2.get_coord() lon = coords.lon lat = coords.lat r_0 = 5 * u.deg disk = DiskSpatialModel(lon_0=0 * u.deg, lat_0=90 * u.deg, r_0=r_0) vals_disk = disk(lon, lat) solid_angle = 2 * np.pi * (1 - np.cos(5 * u.deg)) assert_allclose(np.max(vals_disk).value * solid_angle, 1) assert isinstance(model.to_region(), EllipseSkyRegion)
) phi = Angle("30 deg") model = DiskSpatialModel( lon_0="2 deg", lat_0="2 deg", r_0="1 deg", e=0.8, phi="30 deg", frame="galactic", ) ax = model.plot(add_cbar=True) # illustrate size parameter region = model.to_region().to_pixel(ax.wcs) artist = region.as_artist(facecolor="none", edgecolor="red") ax.add_artist(artist) transform = ax.get_transform("galactic") ax.scatter(2, 2, transform=transform, s=20, edgecolor="red", facecolor="red") ax.text(1.7, 1.85, r"$(l_0, b_0)$", transform=transform, ha="center") ax.plot([2, 2 + np.sin(phi)], [2, 2 + np.cos(phi)], color="r", transform=transform) ax.vlines(x=2, color="r", linestyle="--", transform=transform, ymin=0, ymax=5) ax.text(2.15, 2.3, r"$\phi$", transform=transform) # %% # This plot illustrates the definition of the edge parameter: