same as before with detailled description

- Je suis revenu à un fit avec scipy.optimize.leastsq (j'ai laissé les
vieilles fonctions avec _old pour qu'on puisse facilement revenir en
arrière). Il me semble vraiment que la méthode qui est implémentée dans
leastsq (Levenberg-Marquardt je pense) marche beaucoup mieux que le BFGS
que tu utilises dans minimize. Je ne sais pas bien la raison, mais en
expérimentant un peu, je me suis par exemple aperçu que BFGS  appelait
d'abord la fonction en x0, x0 + dx_i, pour tous les paramètres, pour
obtenir une estimation du gradient en x0, et ensuite, l'appelait en x0 -
grad(x0), ou quelquechose comme ca, malheureusement, si on multiplie par
N la valeur de la fonction d'erreur, tu vois tout de suite que le
deuxième point d'évaluation va être différent car grad(x0) dépend de N.
Je n'ai pas cherché à trop comprendre dans le détail, mais vraiment,
j'ai vu que la méthode leastsq se comportait mieux dans beaucoup de cas
en utilisant la GUI de manual_fit (tu peux choisir la méthode de
minimisation de façon interactive). Maintenant, même les fits à 5
paramètres convergent tout seuls sans problème (comme ils le faisaient
jusqu'ici uniquement dans manual_fit). Je n'ai pas encore implémenter la
version "weighted" du fit, mais ce n'est pas grand chose à faire.

- J'ai ajouté des fonctions de guess sympathiques pour lorentzSB et
doubleLorentz...

-J'ai ajouté un 'tool' cut_signal, qui apparaît quand on clique droit
sur le plot.

- J'ai complètement refondu la façon dont le list_curve_widget est
rafraîchi: avant, j'enlevais tout les éléments puis les rajoutais tous,
mais cela avait l’inconvénient d'oublier à chaque refresh les courbes
sélectionnées et les items collapsés et expandés. Maintenant, la
fonction refresh ne fait qu'updater les items existants. C'est aussi
plus économique quand on ajoute un enfant, je ne fais pas refresh(),
mais seulement refresh_one_id(), lorsqu'on fait un fit par exemple.