# Fitting 2D Gaussians with agpy

**Update 01/30/2014:** Adam has split his `gaussfitter`

code off into it's own GitHub repository here (*"PR's Welcome!"*). This removes some dependencies and changes the import statement but as of right now everything else is the same. I've maintained the old links to the original agpy repo in the post below but please use the above repo for the latest version.

After some initial work with fitting WFC3 UVIS PSFs with 1D Gaussians through the x and y axis I decided to look at 2d Guassian fitting as well. I was disappointed to find there wasn't already a canned procedure to do this in something like SciPy. But after some digging I decided to use Adam Ginsburg's personal agpy library. I briefly met Adam at the dotAstronomy conference last year in Boston. He's a contributor to AstroPY, AstroQuery, and AplPy so I had a hunch I could trust his code and it's worked out great.

You can clone the repo here. There are a couple of dependencies but I only satisfied the AstroPy and Numpy requirements and that was enough to run the `gaussfit`

function.

```
from agpy import gaussfitter
mpfit, psf_fit = gaussfitter.gaussfit(psf_array, returnmp=True,
returnfitimage=True)
```

Using `gaussfit`

without the `returnmp`

or `returnfitimage`

parameters just returns a list with the following model parameters (in order):

- height
- amplitude
- x
- y
- width_x
- width_y
- rotation angle.

Adding `returnfitimage=True`

will also return a NumPy array of the model with the same dimensions as the input data. Lastly, setting `returnmp=True`

will return a `mpfit`

instance, which is the class used to generate the fit. The class is defined in the `agpy.mpfit_custom`

module. The `mpfit`

instance contains two useful attributes, `mpfit.params`

which is the same list of parameters that `guassfit`

returns by default, and `mpfits.covar`

which is a 7x7 covariance matrix for the 7 model parameters.

It took me a little bit of work to figure out all these outputs but they were exactly what I needed so I followed up with Adam and submitted my *first* FOSS PR on GitHub with some documentation improvements. It's a small contribution but still a personal milestone.

Finally, I made a plot of the input data, the model, and the residual (difference) at two different scales. I'm definitely happy with this and am looking forward to digging into the covariance matrix a little more to really understand how well I'm fitting these PSFs.