import matplotlib.pyplot as plt
import numpy as np
from spectractor.tools import multigauss_and_bgd, fit_multigauss_and_bgd
x = np.arange(600.,800.,1)
x_norm = rescale_x_to_legendre(x)
p = [20, 0, 0, 0, 20, 650, 3, 40, 750, 5]
y = multigauss_and_bgd(np.array([x_norm, x]), *p)
err = 0.1 * np.sqrt(y)
guess = (10,0,0,0.1,10,640,2,20,750,7)
bounds = ((-np.inf,-np.inf,-np.inf,-np.inf,1,600,1,1,600,1),(np.inf,np.inf,np.inf,np.inf,100,800,100,100,800,100))
popt, pcov = fit_multigauss_and_bgd(x, y, guess=guess, bounds=bounds, sigma=err)
fit = multigauss_and_bgd(np.array([x_norm, x]), *popt)
fig = plt.figure()
plt.errorbar(x,y,yerr=err,linestyle='None',label="data")
plt.plot(x,fit,'r-',label="best fit")
plt.plot(x,multigauss_and_bgd(np.array([x_norm, x]), *guess),'k--',label="guess")
plt.legend()
plt.show()