# Differences between fitting a sincgauss model and two sinc lines¶

When fitting an unresolved expanding shell both model can be used but we will show that it is generally better to fit the real model : i.e. a model with two sinc lines.

- The broadening measured with a sincgauss line is overestimated by more than 10% when the it is larger than 0.3 times the fwhm (i.e. the resolution)
- The sincgauss model is slow to compute (around 10 times slower than a sinc model, i.e. 5 times slower than a model based on two sinc lines)

```
[1]:
```

```
%matplotlib inline
import orb.utils.spectrum
import pylab as pl
import orb.fit
import numpy as np
```

## Difference wrt to sigma/fwhm ratio¶

The `fwhm`

is fixed by the resolution. `sigma`

is the expansion velocity. The ratio `sigma/fwhm`

is the ratio of the broadening wrt the resolution. We will show that, at small ratios (`sigma < 0.3 * fwhm`

), it is equal to the broadening of the `sincgauss`

model = the width of the `gaussian`

which is convolved to the `sinc`

. But when the expansion velocity is too high it becomes different.

The following toy model `sinc1d_2`

is constructed with two `sinc`

lines of equal amplitude.

```
[2]:
```

```
def sinc1d_2(x, h, a, dx, fwhm, sigma):
return (orb.utils.spectrum.sinc1d(x, h, a/2., dx + sigma, fwhm)
+ orb.utils.spectrum.sinc1d(x, h, a/2., dx - sigma, fwhm))
```

```
[3]:
```

```
# model parameters
x = np.arange(1000)
h = 0
a = 1
dx = np.size(x) / 2
fwhm = 60
sigma = 0.1 * fwhm
```

We will now model our unresolved emission lines with the toy model and fit a `sincgauss`

model over it. The title of each graph gives the real `sigma/fwhm`

ratio (in terms of channels size remember that the FWHM is around 1.5 channels with SITELLE).

```
[4]:
```

```
for isig in np.linspace(0.01, 0.5, 10):
sd = sinc1d_2(x, h, a, dx, fwhm, isig * fwhm)
fit = orb.fit.fit_lines_in_vector(sd, [dx], fwhm, fmodel='sincgauss',
sigma_guess=isig*fwhm)
pl.figure(figsize=(15,3))
pl.plot(sd, label='two sinc lines')
pl.plot(fit['fitted_vector'], label='fitted sincgauss model')
pl.legend()
pl.title('{} / {}'.format(isig, fit['lines_params_gvar'][0,-1]/ fwhm))
```

```
/home/thomas/Astro/Python/ORB/Orb/orb/fit.py:142: UserWarning: No SNR guess given. Fit mode is classic.
warnings.warn('No SNR guess given. Fit mode is classic.')
```

```
[6]:
```

```
real_ratios = list()
fitted_ratios = list()
for isig in np.linspace(0.01, 0.5, 10):
sd = sinc1d_2(x, h, a, dx, fwhm, isig * fwhm)
fit = orb.fit.fit_lines_in_vector(sd, [dx], fwhm, fmodel='sincgauss',
sigma_guess=isig*fwhm)
real_ratios.append(isig)
fitted_ratios.append(fit['lines_params'][0,-1]/ fwhm)
real_ratios = np.array(real_ratios)
fitted_ratios = np.array(fitted_ratios)
pl.figure(figsize=(15,7))
pl.plot(real_ratios, fitted_ratios)
pl.plot(real_ratios, real_ratios, c='0.', ls=':', label='one-to-one line')
pl.xlabel('real broadening ratio')
pl.ylabel('fitted broadening with a sincgauss model')
pl.legend()
pl.grid()
pl.figure(figsize=(15,7))
pl.plot(real_ratios, (fitted_ratios-real_ratios)/real_ratios * 100)
pl.xlabel('real broadening ratio')
pl.ylabel('error in % of the measured broadening with a sincgauss model')
pl.grid()
```

```
[ ]:
```

```
```