gaussian_sum_moments¶
-
gammapy.image.models.
gaussian_sum_moments
(F, sigma, x, y, cov_matrix, shift=0.5)[source]¶ Compute image moments with uncertainties for sum of Gaussians.
The moments are computed analytically, the formulae are documented below.
Calls
uncertainties.correlated_values
to propagate the errors.Parameters: F : array
Integral norms of the Gaussian components.
sigmas : array
Widths of the Gaussian components.
x : array
x positions of the Gaussian components.
y : array
y positions of the Gaussian components.
cov_matrix : array
Covariance matrix of the parameters. The columns have to follow the order: [sigma_1, x_1, y_1, F_1, sigma_2, x_2, y_2, F_2, …, sigma_N, x_N, y_N, F_N]
shift : float (default = 0.5)
Depending on where the image values are given, the grid has to be shifted. If the values are given at the center of the pixel shift = 0.5.
Returns: nominal_values : list
List of image moment nominal values: [F_sum, x_sum, y_sum, x_sigma, y_sigma, sqrt(x_sigma * y_sigma)]
All values are given in pixel coordinates.
std_devs : list
List of image moment standard deviations.
Notes
The 0th moment (total flux) is given by:
\[F_{\Sigma} = \int_{-\infty}^{\infty}f_{\Sigma}(x, y)dx dy = \sum_i^N F_i\]The 1st moments (position) are given by:
\[ \begin{align}\begin{aligned}x_{\Sigma} = \frac{1}{F_{\Sigma}} \int_{-\infty}^{\infty}x f_{\Sigma}(x, y)dx dy = \frac{1}{F_{\Sigma}}\sum_i^N x_iF_i\\y_{\Sigma} = \frac{1}{F_{\Sigma}} \int_{-\infty}^{\infty}y f_{\Sigma}(x, y)dx dy = \frac{1}{F_{\Sigma}}\sum_i^N y_iF_i\end{aligned}\end{align} \]The 2nd moments (extension) are given by:
\[ \begin{align}\begin{aligned}\sigma_{\Sigma_x}^2 = \frac{1}{F_{\Sigma}} \sum_i^N F_i \cdot (\sigma_i^2 + x_i^2) - x_{\Sigma}^2\\\sigma_{\Sigma_y}^2 = \frac{1}{F_{\Sigma}} \sum_i^N F_i \cdot (\sigma_i^2 + y_i^2) - y_{\Sigma}^2\end{aligned}\end{align} \]Examples
A simple example for an image consisting of three Gaussians with zero covariance matrix:
>>> import numpy as np >>> from gammapy.image.models.gauss import gaussian_sum_moments >>> cov_matrix = np.zeros((12, 12)) >>> F = [100, 200, 300] >>> sigma = [15, 10, 5] >>> x = [100, 120, 70] >>> y = [100, 90, 120] >>> nominal_values, std_devs = gaussian_sum_moments(F, sigma, x, y, cov_matrix)