def test_sky_gaussian(): # Test symmetric model sigma = 1 * u.deg model = GaussianSpatialModel(lon_0="5 deg", lat_0="15 deg", sigma=sigma) assert model.parameters["sigma"].min == 0 val_0 = model(5 * u.deg, 15 * u.deg) val_sigma = model(5 * u.deg, 16 * u.deg) assert val_0.unit == "sr-1" ratio = val_0 / val_sigma assert_allclose(ratio, np.exp(0.5)) radius = model.evaluation_radius assert radius.unit == "deg" assert_allclose(radius.value, 5 * sigma.value) # test the normalization for an elongated Gaussian near the Galactic Plane m_geom_1 = WcsGeom.create( binsz=0.05, 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 sigma = 3 * u.deg model_1 = GaussianSpatialModel( lon_0=2 * u.deg, lat_0=2 * u.deg, sigma=sigma, e=0.8, 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, 5 * sigma.value) # check the ratio between the value at the peak and on the 1-sigma isocontour sigma = 4 * u.deg semi_minor = 2 * u.deg e = np.sqrt(1 - (semi_minor / sigma) ** 2) model_2 = GaussianSpatialModel( lon_0=0 * u.deg, lat_0=0 * u.deg, sigma=sigma, e=e, phi=0 * u.deg ) val_0 = model_2(0 * u.deg, 0 * u.deg) val_major = model_2(0 * u.deg, 4 * u.deg) val_minor = model_2(2 * u.deg, 0 * u.deg) assert val_0.unit == "sr-1" ratio_major = val_0 / val_major ratio_minor = val_0 / val_minor assert_allclose(ratio_major, np.exp(0.5)) assert_allclose(ratio_minor, np.exp(0.5)) # check the rotation model_3 = GaussianSpatialModel( lon_0=0 * u.deg, lat_0=0 * u.deg, sigma=sigma, e=e, phi=90 * u.deg ) val_minor_rotated = model_3(0 * u.deg, 2 * u.deg) ratio_minor_rotated = val_0 / val_minor_rotated assert_allclose(ratio_minor_rotated, np.exp(0.5)) assert isinstance(model.to_region(), EllipseSkyRegion)
lon_0="2 deg", lat_0="2 deg", sigma="1 deg", e=0.7, phi=phi, frame="galactic", ) geom = WcsGeom.create(skydir=model.position, frame=model.frame, width=(4, 4), binsz=0.02) ax = model.plot(geom=geom, 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.5, 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=-5, ymax=5) ax.text(2.25, 2.45, r"$\phi$", transform=transform) # %% # YAML representation # -------------------