# 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. 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)