Index: trunk/SophyaPI/PIext/piafitting.cc
===================================================================
--- trunk/SophyaPI/PIext/piafitting.cc	(revision 392)
+++ trunk/SophyaPI/PIext/piafitting.cc	(revision 466)
@@ -54,11 +54,17 @@
 
 ////////////////////////////////////////////////////////////////////////
+// --- Generation automatique du "usage" pour helpfit:
+// 1-/ copier le texte ci-dessous de piafitting.cc dans toto
+// 2-/ cat toto | sed 's?^//?usage+="\\n?' | sed 's?$?    ";?'
+// NE PAS EFFACER LA SUITE: c'est elle qui doit etre modifiee,
+// le usage du helpfit sera regenere a l'aide des commandes ci-dessus.
+////////////////////////////////////////////////////////////////////////
 //| --------------- Fit Lineaire a 1 et 2 dimensions ---------------
 //| Syntaxe:
 //| fitlin nom pnn [o:.aa,bb,cc, o;dd,ee,ff o:gg,hh,jj,kk etc...]
 //| avec:
-//| nom  : cf commentaire ordre "fit"
+//| nom  : cf commentaire ordre ''fit''
 //| pnn  : fit polynome degre nn avec classe Poly (lineaire) 1D ou 2D
-//| o:aa,...,bb : cf commentaires ordre "fit"
+//| o:aa,...,bb : cf commentaires ordre ''fit''
 //|
 ////////////////////////////////////////////////////////////////////////
@@ -69,5 +75,5 @@
 //|     [p:p1,p2,...,pn s:s1,s2,...,sn m:m1,m2,...,mn M:M1,mM2,...,Mn f:f1,...,fn]
 //|     [o:.aa,bb,cc, o;dd,ee,ff o:gg,hh,jj,kk etc...]
-//| cf commentaire ordre "fit"
+//| cf commentaire ordre ''fit''
 //|
 ////////////////////////////////////////////////////////////////////////
@@ -109,16 +115,16 @@
 //|
 //|----- OPTIONS -----
-//| o    : options "o:Eaa.b,eaa.b,f,r,caa.b,Xaa.b"
+//| o    : options ''o:Eaa.b,eaa.b,f,r,caa.b,Xaa.b''
 //|      F : initialisation a partir des resultats et de l'etat du fit precedent
 //|          (option non prioritaire sur les definitions p:,s:,m:,M:,f:o:)
 //|      a : initialisation automatique des parametres du fit (si disponible)
 //|          (option non prioritaire sur les definitions p:,s:,m:,M:,f:o:
-//|           et sur l'initialisation pa l'option "F")
+//|           et sur l'initialisation pa l'option ''F'')
 //|      f : generation d'un Objet identique contenant la fonction fittee
 //|      r : generation d'un Objet identique contenant les residus
 //|      Xaa.b : aa.b valeur du DXi2 d'arret (def=1.e-3)
 //|      Naa : aa nombre maximum d'iterations (def=100)
-//|      la : niveau "a" de print: a=niveau de print Fit1/2D
-//|      da : niveau "a" de debug: a=niveau de GeneralFit
+//|      la : niveau ''a'' de print: a=niveau de print Fit1/2D
+//|      da : niveau ''a'' de debug: a=niveau de GeneralFit
 //|      Ii1/i2 : numeros des bins X de l'histos utilises pour le fit [i1,i2]
 //|2D    Jj1/j2 : numeros des bins Y de l'histos utilises pour le fit [j1,j2]
@@ -137,5 +143,5 @@
 //|          Actif pour  exp+poly 1D, poly 1D
 //|          Pour gauss+poly 1D, xc est le centre de la gaussienne.
-//|2D    yaa.b et y : idem "xaa.b et x" mais pour y
+//|2D    yaa.b et y : idem ''xaa.b et x'' mais pour y
 //|
 ////////////////////////////////////////////////////////////////////////
@@ -156,8 +162,8 @@
 //|            double gauss2_der(double const* x,double const* p,double* dp)
 //|     ou dp[i] = dF(x[];p[])/dp[i]
-//|     Par convention, cette fonction a le meme nom suivi de "_der"
+//|     Par convention, cette fonction a le meme nom suivi de ''_der''
 //| > crfitfun nom_fichier nom_fonction nvar npar
-//|     Permet de compiler le fichier "nom_fichier" et de linker
-//|     la fonction "nom_fonction"
+//|     Permet de compiler le fichier ''nom_fichier'' et de linker
+//|     la fonction ''nom_fonction''
 //|   - Un meme fichier peut contenir plusieurs fonctions a fitter
 //|
@@ -184,5 +190,119 @@
 
 // enregistrement des ordres de fit
-string kw, usage;
+string kw, usage, grp = "Fitting";
+
+kw = "helpfit";
+usage="";
+usage+="\n//////////////////////////////////////////////////////////////////////    ";
+usage+="\n| --------------- Fit Lineaire a 1 et 2 dimensions ---------------    ";
+usage+="\n| Syntaxe:    ";
+usage+="\n| fitlin nom pnn [o:.aa,bb,cc, o;dd,ee,ff o:gg,hh,jj,kk etc...]    ";
+usage+="\n| avec:    ";
+usage+="\n| nom  : cf commentaire ordre ''fit''    ";
+usage+="\n| pnn  : fit polynome degre nn avec classe Poly (lineaire) 1D ou 2D    ";
+usage+="\n| o:aa,...,bb : cf commentaires ordre ''fit''    ";
+usage+="\n|    ";
+usage+="\n//////////////////////////////////////////////////////////////////////    ";
+usage+="\n| --------------- Fit d'objets a 1 et 2 dimensions ---------------    ";
+usage+="\n|                 avec interface d'aide graphique    ";
+usage+="\n| Syntaxe:    ";
+usage+="\n| fitw nom func    ";
+usage+="\n|     [p:p1,p2,...,pn s:s1,s2,...,sn m:m1,m2,...,mn M:M1,mM2,...,Mn f:f1,...,fn]    ";
+usage+="\n|     [o:.aa,bb,cc, o;dd,ee,ff o:gg,hh,jj,kk etc...]    ";
+usage+="\n| cf commentaire ordre ''fit''    ";
+usage+="\n|    ";
+usage+="\n//////////////////////////////////////////////////////////////////////    ";
+usage+="\n| --------------- Fit d'objets a 1 et 2 dimensions ---------------    ";
+usage+="\n| Syntaxe:    ";
+usage+="\n| fit nom func    ";
+usage+="\n|     [p:p1,p2,...,pn s:s1,s2,...,sn m:m1,m2,...,mn M:M1,mM2,...,Mn f:f1,...,fn]    ";
+usage+="\n|     [o:.aa,bb,cc, o;dd,ee,ff o:gg,hh,jj,kk etc...]    ";
+usage+="\n|----- OBJET -----    ";
+usage+="\n| nom  : nom de l'objet qui peut etre:    ";
+usage+="\n|        fit-1D:  Vector,Histo1D,HProf ou GeneraFitData(1D)    ";
+usage+="\n|        fit-2D:  Matrix,Histo2D,Image<T> ou GeneraFitData(2D)    ";
+usage+="\n|    ";
+usage+="\n|----- FUNCTION -----    ";
+usage+="\n| func : pnn : fit polynome degre nn avec GeneralFit (non-lineaire) 1D ou 2D    ";
+usage+="\n|      : gnn : fit gaussienne (hauteur) + polynome de degre nn 1D    ";
+usage+="\n|      : g   : fit gaussienne (hauteur) 1D    ";
+usage+="\n|      : enn : fit exponentielle + polynome de degre nn 1D    ";
+usage+="\n|      : e   : fit exponentielle 1D    ";
+usage+="\n|      : Gnn : fit gaussienne (volume) + polynome de degre nn 1D    ";
+usage+="\n|      : G   : fit gaussienne (volume) 1D    ";
+usage+="\n|      :     : fit gaussienne+fond (volume) 2D    ";
+usage+="\n|      : Gi  : fit gaussienne+fond integree (volume) 2D    ";
+usage+="\n|      : d   : fit DL de gaussienne+fond (volume) 2D    ";
+usage+="\n|      : di  : fit DL de gaussienne+fond integree (volume) 2D    ";
+usage+="\n|      : D   : fit DL de gaussienne+fond avec coeff variable p6 (volume) 2D    ";
+usage+="\n|      : Di  : fit DL de gaussienne+fond integree avec coeff variable p6 (volume) 2D    ";
+usage+="\n|      : M   : fit Moffat+fond (expos=p6) (volume) 2D    ";
+usage+="\n|      : Mi  : fit Moffat+fond integree (expos=p6) (volume) 2D    ";
+usage+="\n|      : Autre : fonction definie par l'utilisateur (cf commentaires ci apres)    ";
+usage+="\n|    ";
+usage+="\n|----- INIT PARAMETRES ET ETAT DU FIT -----    ";
+usage+="\n| p    : p1,...,pn : valeur d'initialisation des parametres (def=0)    ";
+usage+="\n| s    : s1,...,sn : valeur des steps de depart (def=1)    ";
+usage+="\n| m    : m1,...,mn : valeur des minima (def=1)    ";
+usage+="\n| M    : M1,...,Mn : valeur des maxima (def=-1) (max<=min : pas de limite)    ";
+usage+="\n| f    : f1,...,fn : si >=1 parametre fixe sinon libre (def=0)    ";
+usage+="\n| - Remarque: si pi,si,mi ou Mi = '!' la valeur correspondante n'est pas changee    ";
+usage+="\n|    ";
+usage+="\n|----- OPTIONS -----    ";
+usage+="\n| o    : options ''o:Eaa.b,eaa.b,f,r,caa.b,Xaa.b''    ";
+usage+="\n|      F : initialisation a partir des resultats et de l'etat du fit precedent    ";
+usage+="\n|          (option non prioritaire sur les definitions p:,s:,m:,M:,f:o:)    ";
+usage+="\n|      a : initialisation automatique des parametres du fit (si disponible)    ";
+usage+="\n|          (option non prioritaire sur les definitions p:,s:,m:,M:,f:o:    ";
+usage+="\n|           et sur l'initialisation pa l'option ''F'')    ";
+usage+="\n|      f : generation d'un Objet identique contenant la fonction fittee    ";
+usage+="\n|      r : generation d'un Objet identique contenant les residus    ";
+usage+="\n|      Xaa.b : aa.b valeur du DXi2 d'arret (def=1.e-3)    ";
+usage+="\n|      Naa : aa nombre maximum d'iterations (def=100)    ";
+usage+="\n|      la : niveau ''a'' de print: a=niveau de print Fit1/2D    ";
+usage+="\n|      da : niveau ''a'' de debug: a=niveau de GeneralFit    ";
+usage+="\n|      Ii1/i2 : numeros des bins X de l'histos utilises pour le fit [i1,i2]    ";
+usage+="\n|2D    Jj1/j2 : numeros des bins Y de l'histos utilises pour le fit [j1,j2]    ";
+usage+="\n|    - L'erreur est celle associee a l'objet (si elle existe),    ";
+usage+="\n|      elle est mise a 1 sinon, sauf si E... ou e... est precise:    ";
+usage+="\n|      Eaa.b : si |val|>=1 erreur = aa.b*sqrt(|val|)    ";
+usage+="\n|              si |val|<1  erreur = aa.b    ";
+usage+="\n|              si aa.b <=0 alors aa.b=1.0    ";
+usage+="\n|              E seul est equivalent a E1.0    ";
+usage+="\n|      eaa.b : erreur = aa.b    ";
+usage+="\n|              si aa.b <=0 alors aa.b=1.0    ";
+usage+="\n|              e seul est equivalent a e1.0    ";
+usage+="\n|      xaa.b : demande de centrage: on fit x-aa.b au lieu de x)    ";
+usage+="\n|      x : demande de centrage: on fit x-xc au lieu de x    ";
+usage+="\n|          avec xc=abscisse du milieu de l'histogramme    ";
+usage+="\n|          Actif pour  exp+poly 1D, poly 1D    ";
+usage+="\n|          Pour gauss+poly 1D, xc est le centre de la gaussienne.    ";
+usage+="\n|2D    yaa.b et y : idem ''xaa.b et x'' mais pour y    ";
+usage+="\n|    ";
+usage+="\n//////////////////////////////////////////////////////////////////////    ";
+usage+="\n| --------------- Def des fcts de fit par l'utilisateur ---------------    ";
+usage+="\n| Pour definir une fonction parametree utilisateur:    ";
+usage+="\n| Un exemple de fichier contenant des fonctions a fitter: PIext/userfitfunex.c    ";
+usage+="\n| > crfitfil nom_fichier nom_fonction nvar npar    ";
+usage+="\n|     pour creer un squelette de fichier C contenant la fonction a fitter    ";
+usage+="\n|            nom_fichier : nom du fichier ou est le code de la fonction    ";
+usage+="\n|                          c'est un fichier C de nom blabla.c    ";
+usage+="\n|            nom_fonction : nom de la fonction ex: gauss2    ";
+usage+="\n|            nvar : nombre de variables x[] (1D=1, 2D=2, etc...)    ";
+usage+="\n|            npar : nombre de parametre p[]    ";
+usage+="\n|   - La fonction est donc F(x[];p[]), soit par ex:    ";
+usage+="\n|            double gauss2(double const* x,double const* p)    ";
+usage+="\n|   - L'utilisateur a la possibilite de donner egalement la fonction    ";
+usage+="\n|     retournant les derivees de la fonction par rapport aux parametres    ";
+usage+="\n|            double gauss2_der(double const* x,double const* p,double* dp)    ";
+usage+="\n|     ou dp[i] = dF(x[];p[])/dp[i]    ";
+usage+="\n|     Par convention, cette fonction a le meme nom suivi de ''_der''    ";
+usage+="\n| > crfitfun nom_fichier nom_fonction nvar npar    ";
+usage+="\n|     Permet de compiler le fichier ''nom_fichier'' et de linker    ";
+usage+="\n|     la fonction ''nom_fonction''    ";
+usage+="\n|   - Un meme fichier peut contenir plusieurs fonctions a fitter    ";
+usage+="\n|    ";
+usage+="\n//////////////////////////////////////////////////////////////////////    ";
+piac->RegisterHelp(kw,usage,grp);
 
 kw = "fit";
@@ -190,5 +310,6 @@
 usage += "\n Usage: fit nomobj func [Options]";
 usage += "\n [p:p1,...,pn s:s1,...,sn m:m1,...,mn M:M1,...,Mn o:... o:...]";
-piac->RegisterCommand(kw,usage,this,"Fitting");
+usage += "\n  Related commands: fitw fitlin crfitfun crfitfil";  
+piac->RegisterCommand(kw,usage,this,grp);
 
 kw = "fitw";
@@ -196,20 +317,24 @@
 usage += "\n Usage: fitw nomobj func [Options]";
 usage += "\n [p:p1,...,pn s:s1,...,sn m:m1,...,mn M:M1,...,Mn o:... o:...]";
-piac->RegisterCommand(kw,usage,this,"Fitting");
+usage += "\n  Related commands: fit fitlin crfitfun crfitfil";  
+piac->RegisterCommand(kw,usage,this,grp);
 
 kw = "fitlin";
 usage = "Linear Fitting of Polynoms to DataObjects";
 usage += "\n Usage: fitlin nomobj func [o:... o:...]";
-piac->RegisterCommand(kw,usage,this,"Fitting");
+usage += "\n  Related commands: fit fitw crfitfun crfitfil";  
+piac->RegisterCommand(kw,usage,this,grp);
 
 kw = "crfitfun";
 usage = "Creation et link de function utilisateur pour le fit";
 usage += "\n Usage: crfitfun file func nvar npar";
-piac->RegisterCommand(kw,usage,this,"Fitting");
+usage += "\n  Related commands: fit fitw fitlin crfitfil";  
+piac->RegisterCommand(kw,usage,this,grp);
 
 kw = "crfitfil";
 usage = "Creation de fichier C pour function utilisateur du fit";
 usage += "\n Usage: crfitfil file func nvar npar";
-piac->RegisterCommand(kw,usage,this,"Fitting");
+usage += "\n  Related commands: fit fitw fitlin crfitfun";  
+piac->RegisterCommand(kw,usage,this,grp);
 }
 
