Index: trunk/SophyaLib/NTools/Makefile
===================================================================
--- trunk/SophyaLib/NTools/Makefile	(revision 3075)
+++ trunk/SophyaLib/NTools/Makefile	(revision 3083)
@@ -4,8 +4,8 @@
  
 clean:
-	 rm -f $(SOPHYAOBJP)cimage.o $(SOPHYAOBJP)cspline.o $(SOPHYAOBJP)datatypes.o $(SOPHYAOBJP)dates.o $(SOPHYAOBJP)difeq.o $(SOPHYAOBJP)dynccd.o $(SOPHYAOBJP)fct1dfit.o $(SOPHYAOBJP)fct2dfit.o $(SOPHYAOBJP)fftmserver.o $(SOPHYAOBJP)fftpserver.o $(SOPHYAOBJP)fftservintf.o $(SOPHYAOBJP)FSAppIrrSmpl.o $(SOPHYAOBJP)functab.o $(SOPHYAOBJP)generaldata.o $(SOPHYAOBJP)generalfit.o $(SOPHYAOBJP)imageop.o $(SOPHYAOBJP)integ.o $(SOPHYAOBJP)median.o $(SOPHYAOBJP)ntoolsinit.o $(SOPHYAOBJP)objfitter.o $(SOPHYAOBJP)perandom.o $(SOPHYAOBJP)poly.o $(SOPHYAOBJP)rk4cdifeq.o $(SOPHYAOBJP)simplesort.o $(SOPHYAOBJP)simplex.o $(SOPHYAOBJP)tabmath.o $(SOPHYAOBJP)toeplitzMatrix.o $(SOPHYAOBJP)datime.o $(SOPHYAOBJP)fftmayer_r4.o $(SOPHYAOBJP)fftmayer_r8.o $(SOPHYAOBJP)fftpackc.o $(SOPHYAOBJP)matxop.o $(SOPHYAOBJP)nbmath.o $(SOPHYAOBJP)nbtri.o
+	 rm -f $(SOPHYAOBJP)cimage.o $(SOPHYAOBJP)cspline.o $(SOPHYAOBJP)datatypes.o $(SOPHYAOBJP)dates.o $(SOPHYAOBJP)difeq.o $(SOPHYAOBJP)dynccd.o $(SOPHYAOBJP)fct1dfit.o $(SOPHYAOBJP)fct2dfit.o $(SOPHYAOBJP)fftmserver.o $(SOPHYAOBJP)fftpserver.o $(SOPHYAOBJP)fftservintf.o $(SOPHYAOBJP)FSAppIrrSmpl.o $(SOPHYAOBJP)functab.o $(SOPHYAOBJP)generaldata.o $(SOPHYAOBJP)generalfit.o $(SOPHYAOBJP)generalfunc.o $(SOPHYAOBJP)imageop.o $(SOPHYAOBJP)integ.o $(SOPHYAOBJP)median.o $(SOPHYAOBJP)ntoolsinit.o $(SOPHYAOBJP)objfitter.o $(SOPHYAOBJP)perandom.o $(SOPHYAOBJP)poly.o $(SOPHYAOBJP)rk4cdifeq.o $(SOPHYAOBJP)simplesort.o $(SOPHYAOBJP)simplex.o $(SOPHYAOBJP)tabmath.o $(SOPHYAOBJP)toeplitzMatrix.o $(SOPHYAOBJP)datime.o $(SOPHYAOBJP)fftmayer_r4.o $(SOPHYAOBJP)fftmayer_r8.o $(SOPHYAOBJP)fftpackc.o $(SOPHYAOBJP)matxop.o $(SOPHYAOBJP)nbmath.o $(SOPHYAOBJP)nbtri.o
 	rm -f $(SOPHYALIBP)libNTools.a
  
-$(SOPHYALIBP)libNTools.a : $(SOPHYAOBJP)cimage.o $(SOPHYAOBJP)cspline.o $(SOPHYAOBJP)datatypes.o $(SOPHYAOBJP)dates.o $(SOPHYAOBJP)datime.o $(SOPHYAOBJP)difeq.o $(SOPHYAOBJP)dynccd.o $(SOPHYAOBJP)fct1dfit.o $(SOPHYAOBJP)fct2dfit.o $(SOPHYAOBJP)fftmayer_r4.o $(SOPHYAOBJP)fftmayer_r8.o $(SOPHYAOBJP)fftmserver.o $(SOPHYAOBJP)fftpackc.o $(SOPHYAOBJP)fftpserver.o $(SOPHYAOBJP)fftservintf.o $(SOPHYAOBJP)FSAppIrrSmpl.o $(SOPHYAOBJP)functab.o $(SOPHYAOBJP)generaldata.o $(SOPHYAOBJP)generalfit.o $(SOPHYAOBJP)integ.o $(SOPHYAOBJP)matxop.o $(SOPHYAOBJP)median.o $(SOPHYAOBJP)nbmath.o $(SOPHYAOBJP)nbtri.o $(SOPHYAOBJP)ntoolsinit.o $(SOPHYAOBJP)objfitter.o $(SOPHYAOBJP)perandom.o $(SOPHYAOBJP)poly.o $(SOPHYAOBJP)rk4cdifeq.o $(SOPHYAOBJP)simplesort.o $(SOPHYAOBJP)simplex.o $(SOPHYAOBJP)tabmath.o $(SOPHYAOBJP)toeplitzMatrix.o
+$(SOPHYALIBP)libNTools.a : $(SOPHYAOBJP)cimage.o $(SOPHYAOBJP)cspline.o $(SOPHYAOBJP)datatypes.o $(SOPHYAOBJP)dates.o $(SOPHYAOBJP)datime.o $(SOPHYAOBJP)difeq.o $(SOPHYAOBJP)dynccd.o $(SOPHYAOBJP)fct1dfit.o $(SOPHYAOBJP)fct2dfit.o $(SOPHYAOBJP)fftmayer_r4.o $(SOPHYAOBJP)fftmayer_r8.o $(SOPHYAOBJP)fftmserver.o $(SOPHYAOBJP)fftpackc.o $(SOPHYAOBJP)fftpserver.o $(SOPHYAOBJP)fftservintf.o $(SOPHYAOBJP)FSAppIrrSmpl.o $(SOPHYAOBJP)functab.o $(SOPHYAOBJP)generaldata.o $(SOPHYAOBJP)generalfit.o $(SOPHYAOBJP)generalfunc.o $(SOPHYAOBJP)integ.o $(SOPHYAOBJP)matxop.o $(SOPHYAOBJP)median.o $(SOPHYAOBJP)nbmath.o $(SOPHYAOBJP)nbtri.o $(SOPHYAOBJP)ntoolsinit.o $(SOPHYAOBJP)objfitter.o $(SOPHYAOBJP)perandom.o $(SOPHYAOBJP)poly.o $(SOPHYAOBJP)rk4cdifeq.o $(SOPHYAOBJP)simplesort.o $(SOPHYAOBJP)simplex.o $(SOPHYAOBJP)tabmath.o $(SOPHYAOBJP)toeplitzMatrix.o
 	$(AR) $(ARFLAGS) $@ $? 
 	touch $(SOPHYAINCP)/SophyaConfInfo/libsophya.objlist
@@ -141,5 +141,5 @@
   peida.h $(SOPHYAINCP)utils.h \
   $(SOPHYAINCP)perrors.h fmath.h \
-  nbconst.h tabmath.h
+  generalfunc.h nbconst.h tabmath.h
 	$(CXXCOMPILE) $(CXXTEMPFLG) -o $@  fct1dfit.cc
  
@@ -171,5 +171,5 @@
   peida.h $(SOPHYAINCP)utils.h \
   $(SOPHYAINCP)perrors.h fmath.h \
-  nbconst.h tabmath.h simps2d.h
+  generalfunc.h nbconst.h tabmath.h simps2d.h
 	$(CXXCOMPILE) $(CXXTEMPFLG) -o $@  fct2dfit.cc
  
@@ -334,5 +334,6 @@
   $(SOPHYAINCP)ntupintf.h poly.h \
   peida.h $(SOPHYAINCP)utils.h \
-  $(SOPHYAINCP)perrors.h fmath.h
+  $(SOPHYAINCP)perrors.h fmath.h \
+  generalfunc.h
 	$(CXXCOMPILE) $(CXXTEMPFLG) -o $@  generaldata.cc
  
@@ -364,7 +365,14 @@
   peida.h $(SOPHYAINCP)utils.h \
   $(SOPHYAINCP)perrors.h fmath.h \
+  generalfunc.h \
   $(SOPHYAINCP)sopemtx.h
 	$(CXXCOMPILE) $(CXXTEMPFLG) -o $@  generalfit.cc
  
+$(SOPHYAOBJP)generalfunc.o: generalfunc.cc generalfunc.h \
+  $(SOPHYAINCP)sopnamsp.h \
+  $(SOPHYAINCP)machdefs.h \
+  $(SOPHYAINCP)pexceptions.h
+	$(CXXCOMPILE) $(CXXTEMPFLG) -o $@  generalfunc.cc
+ 
 $(SOPHYAOBJP)integ.o: integ.cc \
   $(SOPHYAINCP)sopnamsp.h integ.h \
@@ -393,5 +401,6 @@
   $(SOPHYAINCP)ntupintf.h poly.h \
   peida.h $(SOPHYAINCP)utils.h \
-  $(SOPHYAINCP)perrors.h fmath.h
+  $(SOPHYAINCP)perrors.h fmath.h \
+  generalfunc.h
 	$(CXXCOMPILE) $(CXXTEMPFLG) -o $@  integ.cc
  
@@ -465,5 +474,5 @@
   generalfit.h generaldata.h \
   $(SOPHYAINCP)ntupintf.h poly.h \
-  peida.h
+  peida.h generalfunc.h
 	$(CXXCOMPILE) $(CXXTEMPFLG) -o $@  objfitter.cc
  
@@ -589,4 +598,5 @@
   peida.h $(SOPHYAINCP)utils.h \
   $(SOPHYAINCP)perrors.h fmath.h \
+  generalfunc.h \
   $(SOPHYAINCP)ntuple.h \
   $(SOPHYAINCP)timing.h
Index: trunk/SophyaLib/NTools/generalfit.cc
===================================================================
--- trunk/SophyaLib/NTools/generalfit.cc	(revision 3075)
+++ trunk/SophyaLib/NTools/generalfit.cc	(revision 3083)
@@ -6,5 +6,5 @@
 #include <math.h>
 #ifdef __MWERKS__
-   #include "mwerksmath.h" // Portage mac D. Y.
+#include "mwerksmath.h" // Portage mac D. Y.
 #include "unixmac.h"
 #endif
@@ -17,161 +17,4 @@
 
 #define EPS_FIT_MIN 1.e-8
-
-//================================================================
-// GeneralFunction
-//================================================================
-
-/*!
-  \class SOPHYA::GeneralFunction
-  \ingroup NTools
-   Classe de fonctions parametrees a plusieurs variables:
-  \f$ F[x1,x2,x3,...:a1,a2,a3,...] \f$
-*/
-
-//////////////////////////////////////////////////////////////////////
-/*!
- Creation d'une fonction de `nVar' variables et `nPar' parametres:
- \f$ F[x(1),x(2),x(3),...x(nVar) : a(1),a(2),a(3),...,a(nPar)] \f$
-*/
-GeneralFunction::GeneralFunction(unsigned int nVar, unsigned int nPar)
-  : mNVar(nVar), mNPar(nPar)
-{
- ASSERT( nVar > 0 && nPar > 0 );
- deltaParm = new double[nPar];
- tmpParm   = new double[nPar];
-}
-
-GeneralFunction::~GeneralFunction()
-{
- delete[] deltaParm;
- delete[] tmpParm;
-}
-
-//////////////////////////////////////////////////////////////////////
-/*!
-  Valeur et Derivees de la fonction (fct virtuelle par defaut).
-*/
-double GeneralFunction::Val_Der(double const xp[], double const* parm
-                               , double *DgDpar)
-{
- for(int i=0;i<mNPar;i++) tmpParm[i] = parm[i];
- {for(int i=0;i<mNPar;i++) {
-   double d = deltaParm[i];
-   if(d==0.) { DgDpar[i] = 0.; continue;}
-   tmpParm[i] -= d/2.;
-   double vg = Value(xp,tmpParm);
-   tmpParm[i] += d;
-   double vd = Value(xp,tmpParm);
-   DgDpar[i] = (vd - vg)/d;
-   tmpParm[i] = parm[i];
- }}
- return Value(xp, parm);
-}
-
-//////////////////////////////////////////////////////////////////////
-/*!
-  Definition de la variation du parametre numPar
-  pour calculer la derivee automatiquement.
-*/
-void GeneralFunction::SetDeltaParm(int numPar, double d)
-{
- ASSERT(numPar >= 0 && numPar < mNPar);
- deltaParm[numPar] = d;
-}
-
-
-/*!
-  Idem precedente fonction mais pour tous les parametres
-*/
-void GeneralFunction::SetDeltaParm(double const* dparam)
-{
- for(int i=0;i<mNPar;i++) deltaParm[i] = dparam[i];
-}
-
-//================================================================
-// GeneralFunc
-//================================================================
-
-/*!
-  \class SOPHYA::GeneralFunc
-  \ingroup NTools
-  Classe de fonctions parametrees a plusieurs variables
-  derivant de ``GeneralFunction''. Permet de definir
-  une fonction a fiter sans passer par une classe derivee
-  en utilisant l'ecriture courante du C. La fonction
-  retournant les derivees par rapport aux parametres du fit
-  peut etre egalement fournie (optionnel).
-*/
-
-/////////////////////////////////////////////////////////////////
-/*!
-  Createur, on passe le nom ``fun'' de la fonction a la mode C.
-  On peut optionellement egalement passer le nom de la fonction
-  ``funder'' qui retourne les valeurs des derivees par rapport
-  aux parametres du fit.
-  \verbatim
-    ----------------------
-    Exemple d'utilisation:
-    ----------------------
-    include "generalfit.h"
-    ...
-    double   gaussc(double const* x,double const* p);
-    double d_gaussc(double const* x,double const* p,double* dp);
-    ...
-    main {
-     ...
-     // Fit SANS calcul automatique des derivees
-     GeneralFunc      myfunc(2,7,gaussc);
-     GeneralFit       myfit(&myfunc);
-     ...
-     myfit.Fit();
-     ...
-     // Fit AVEC calcul automatique des derivees
-     GeneralFunc      myfunc(2,7,gaussc,d_gaussc);
-     GeneralFit       myfit(&myfunc);
-     ...
-     myfit.Fit();
-    }
-    // Definition de la fonction a fitter a la mode C
-    double gaussc(double const* x,double const* p)
-    // Fonction: X=(x[0]-p[1])/p[3], Y=(x[1]-p[2])/p[4],
-    //  f = p[0]*exp{-0.5*[X^2+Y^2-2*p[5]*X*Y]} + p[6]
-    {
-     double X = (x[0]-p[1])/p[3];
-     double Y = (x[1]-p[2])/p[4];
-     return p[0]*exp(-(X*X+Y*Y-2*p[5]*X*Y)/2)+p[6];
-    }
-    // Definition de la fonction des derivees / parametres
-    // Cette fonction retourne aussi la valeur de la fonction a fitter.
-    double d_gaussc(double const* x,double const* p,double* dp)
-    {
-     dp[0] = derivee de gaussc par rapport au parametre p[0]
-     ...
-     dp[6] = derivee de gaussc par rapport au parametre p[6]
-     return gaussc(x,p);
-    }
-  \endverbatim
-*/
-GeneralFunc::GeneralFunc(unsigned int nvar, unsigned int npar
-             , double (*fun) (double const*, double const*)
-             , double (*funder) (double const*, double const*, double*) )
-: GeneralFunction(nvar,npar), tmpFun(fun), tmpFunDer(funder)
-{
-}
-
-GeneralFunc::~GeneralFunc()
-{
-}
-
-double GeneralFunc::Value(double const xp[], double const* Par)
-{
-return tmpFun(xp,Par);
-}
-
-double GeneralFunc::Val_Der(double const xp[],double const* parm, double* DgDpar)
-{
-if(tmpFunDer) return tmpFunDer(xp,parm,DgDpar);
-  else        return GeneralFunction::Val_Der(xp,parm,DgDpar);
-}
 
 //================================================================
Index: trunk/SophyaLib/NTools/generalfit.h
===================================================================
--- trunk/SophyaLib/NTools/generalfit.h	(revision 3075)
+++ trunk/SophyaLib/NTools/generalfit.h	(revision 3083)
@@ -6,65 +6,11 @@
 #include "tvector.h"
 #include "generaldata.h"
+#include "generalfunc.h"
 
 namespace SOPHYA {
 
 //================================================================
-// GeneralFunction
-//================================================================
-
-//! Classe de fonctions parametrees a plusieurs variables
-class GeneralFunction {
-public:
-  GeneralFunction(unsigned int nVar, unsigned int nPar);
-  virtual ~GeneralFunction();
-
-  //! Valeur de la fonction a definir par l'utilisateur (fct virtuelle pure)
-  virtual double Value(double const xp[], double const* parm)=0;
-  //! Valeur de la fonction derivee selon les parametres pouvant etre redefinie
-  virtual double Val_Der(double const xp[], double const* parm
-                        , double* DgDpar);
-
-  void SetDeltaParm(int numPar, double delta=0.);
-  void SetDeltaParm(double const* dparam);
-
-  //! Retourne le nombre de variables Xi
-  inline int     NVar() const {return mNVar;}
-  //! Retourne le nombre de parametres Ai
-  inline int     NPar() const {return mNPar;}
-
-protected:
-  const int mNVar;  //!< nombre de variables f(x,y,z,...)
-  const int mNPar;  //!< nombre de parametres
-
-  double *deltaParm;
-  double *tmpParm;
-};
-
-//================================================================
-// GeneralFunc
-//================================================================
-
-//! Classe de fonctions parametrees a plusieurs variables type C
-class GeneralFunc : public GeneralFunction {
-public:
-  GeneralFunc(unsigned int nvar, unsigned int npar
-        ,double (*fun)(double const*,double const*) 
-        ,double (*funder)(double const*, double const*, double*)=NULL);
-  virtual ~GeneralFunc();
-
-  virtual double Value(double const xp[], double const* Par);
-  virtual double Val_Der(double const xp[],double const* parm
-                        , double* DgDpar);
-
-protected:
-  double (*tmpFun)   (double const*, double const*);
-  double (*tmpFunDer)(double const*, double const*, double*);
-};
-
-//================================================================
 // GeneralXi2
 //================================================================
-
-class GeneralFitData;
 
 //! Classe de Xi2 a plusieurs parametres
Index: trunk/SophyaLib/NTools/generalfunc.cc
===================================================================
--- trunk/SophyaLib/NTools/generalfunc.cc	(revision 3083)
+++ trunk/SophyaLib/NTools/generalfunc.cc	(revision 3083)
@@ -0,0 +1,175 @@
+#include "sopnamsp.h"
+#include "machdefs.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <iostream>
+#include <math.h>
+#ifdef __MWERKS__
+#include "mwerksmath.h" // Portage mac D. Y.
+#include "unixmac.h"
+#endif
+#include <string.h>
+#include <string>
+
+#include "pexceptions.h"
+#include "generalfunc.h"
+
+//================================================================
+// GeneralFunction
+//================================================================
+
+/*!
+  \class SOPHYA::GeneralFunction
+  \ingroup NTools
+   Classe de fonctions parametrees a plusieurs variables:
+  \f$ F[x1,x2,x3,...:a1,a2,a3,...] \f$
+*/
+
+//////////////////////////////////////////////////////////////////////
+/*!
+ Creation d'une fonction de `nVar' variables et `nPar' parametres:
+ \f$ F[x(1),x(2),x(3),...x(nVar) : a(1),a(2),a(3),...,a(nPar)] \f$
+*/
+GeneralFunction::GeneralFunction(unsigned int nVar, unsigned int nPar)
+  : mNVar(nVar), mNPar(nPar)
+{
+ if(nVar==0 || nPar==0)
+   throw SzMismatchError("GeneralFunction::GeneralFunction_Error: nVar==0 || nPar==0 !");
+ deltaParm = new double[nPar];
+ tmpParm   = new double[nPar];
+}
+
+GeneralFunction::~GeneralFunction()
+{
+ if(deltaParm != NULL) delete[] deltaParm;
+ if(tmpParm != NULL) delete[] tmpParm;
+}
+
+//////////////////////////////////////////////////////////////////////
+/*!
+  Valeur et Derivees de la fonction (fct virtuelle par defaut).
+*/
+double GeneralFunction::Val_Der(double const xp[], double const* parm
+                               , double *DgDpar)
+{
+ for(int i=0;i<mNPar;i++) tmpParm[i] = parm[i];
+ {for(int i=0;i<mNPar;i++) {
+   double d = deltaParm[i];
+   if(d==0.) { DgDpar[i] = 0.; continue;}
+   tmpParm[i] -= d/2.;
+   double vg = Value(xp,tmpParm);
+   tmpParm[i] += d;
+   double vd = Value(xp,tmpParm);
+   DgDpar[i] = (vd - vg)/d;
+   tmpParm[i] = parm[i];
+ }}
+ return Value(xp, parm);
+}
+
+//////////////////////////////////////////////////////////////////////
+/*!
+  Definition de la variation du parametre numPar
+  pour calculer la derivee automatiquement.
+*/
+void GeneralFunction::SetDeltaParm(int numPar, double d)
+{
+ if(numPar<0 || numPar >= mNPar)
+   throw SzMismatchError("GeneralFunction::SetDeltaParm_Error: numPar<0 || numPar>=mNPar !");
+ deltaParm[numPar] = d;
+}
+
+
+/*!
+  Idem precedente fonction mais pour tous les parametres
+*/
+void GeneralFunction::SetDeltaParm(double const* dparam)
+{
+ for(int i=0;i<mNPar;i++) deltaParm[i] = dparam[i];
+}
+
+//================================================================
+// GeneralFunc
+//================================================================
+
+/*!
+  \class SOPHYA::GeneralFunc
+  \ingroup NTools
+  Classe de fonctions parametrees a plusieurs variables
+  derivant de ``GeneralFunction''. Permet de definir
+  une fonction a fiter sans passer par une classe derivee
+  en utilisant l'ecriture courante du C. La fonction
+  retournant les derivees par rapport aux parametres du fit
+  peut etre egalement fournie (optionnel).
+*/
+
+/////////////////////////////////////////////////////////////////
+/*!
+  Createur, on passe le nom ``fun'' de la fonction a la mode C.
+  On peut optionellement egalement passer le nom de la fonction
+  ``funder'' qui retourne les valeurs des derivees par rapport
+  aux parametres du fit.
+  \verbatim
+    ----------------------
+    Exemple d'utilisation:
+    ----------------------
+    include "generalfit.h"
+    ...
+    double   gaussc(double const* x,double const* p);
+    double d_gaussc(double const* x,double const* p,double* dp);
+    ...
+    main {
+     ...
+     // Fit SANS calcul automatique des derivees
+     GeneralFunc      myfunc(2,7,gaussc);
+     GeneralFit       myfit(&myfunc);
+     ...
+     myfit.Fit();
+     ...
+     // Fit AVEC calcul automatique des derivees
+     GeneralFunc      myfunc(2,7,gaussc,d_gaussc);
+     GeneralFit       myfit(&myfunc);
+     ...
+     myfit.Fit();
+    }
+    // Definition de la fonction a fitter a la mode C
+    double gaussc(double const* x,double const* p)
+    // Fonction: X=(x[0]-p[1])/p[3], Y=(x[1]-p[2])/p[4],
+    //  f = p[0]*exp{-0.5*[X^2+Y^2-2*p[5]*X*Y]} + p[6]
+    {
+     double X = (x[0]-p[1])/p[3];
+     double Y = (x[1]-p[2])/p[4];
+     return p[0]*exp(-(X*X+Y*Y-2*p[5]*X*Y)/2)+p[6];
+    }
+    // Definition de la fonction des derivees / parametres
+    // Cette fonction retourne aussi la valeur de la fonction a fitter.
+    double d_gaussc(double const* x,double const* p,double* dp)
+    {
+     dp[0] = derivee de gaussc par rapport au parametre p[0]
+     ...
+     dp[6] = derivee de gaussc par rapport au parametre p[6]
+     return gaussc(x,p);
+    }
+  \endverbatim
+*/
+GeneralFunc::GeneralFunc(unsigned int nvar, unsigned int npar
+             , double (*fun) (double const*, double const*)
+             , double (*funder) (double const*, double const*, double*) )
+: GeneralFunction(nvar,npar), tmpFun(fun), tmpFunDer(funder)
+{
+}
+
+GeneralFunc::~GeneralFunc()
+{
+}
+
+double GeneralFunc::Value(double const xp[], double const* Par)
+{
+return tmpFun(xp,Par);
+}
+
+double GeneralFunc::Val_Der(double const xp[],double const* parm, double* DgDpar)
+{
+if(tmpFunDer) return tmpFunDer(xp,parm,DgDpar);
+  else        return GeneralFunction::Val_Der(xp,parm,DgDpar);
+}
+
Index: trunk/SophyaLib/NTools/generalfunc.h
===================================================================
--- trunk/SophyaLib/NTools/generalfunc.h	(revision 3083)
+++ trunk/SophyaLib/NTools/generalfunc.h	(revision 3083)
@@ -0,0 +1,62 @@
+// This may look like C code, but it is really -*- C++ -*-
+#ifndef GENERALFUNC_SEEN
+#define GENERALFUNC_SEEN
+
+namespace SOPHYA {
+
+//================================================================
+// GeneralFunction
+//================================================================
+
+//! Classe de fonctions parametrees a plusieurs variables
+class GeneralFunction {
+public:
+  GeneralFunction(unsigned int nVar, unsigned int nPar);
+  virtual ~GeneralFunction();
+
+  //! Valeur de la fonction a definir par l'utilisateur (fct virtuelle pure)
+  virtual double Value(double const xp[], double const* parm)=0;
+  //! Valeur de la fonction derivee selon les parametres pouvant etre redefinie
+  virtual double Val_Der(double const xp[], double const* parm
+                        , double* DgDpar);
+
+  void SetDeltaParm(int numPar, double delta=0.);
+  void SetDeltaParm(double const* dparam);
+
+  //! Retourne le nombre de variables Xi
+  inline int     NVar() const {return mNVar;}
+  //! Retourne le nombre de parametres Ai
+  inline int     NPar() const {return mNPar;}
+
+protected:
+  const int mNVar;  //!< nombre de variables f(x,y,z,...)
+  const int mNPar;  //!< nombre de parametres
+
+  double *deltaParm;
+  double *tmpParm;
+};
+
+//================================================================
+// GeneralFunc
+//================================================================
+
+//! Classe de fonctions parametrees a plusieurs variables type C
+class GeneralFunc : public GeneralFunction {
+public:
+  GeneralFunc(unsigned int nvar, unsigned int npar
+        ,double (*fun)(double const*,double const*) 
+        ,double (*funder)(double const*, double const*, double*)=NULL);
+  virtual ~GeneralFunc();
+
+  virtual double Value(double const xp[], double const* Par);
+  virtual double Val_Der(double const xp[],double const* parm
+                        , double* DgDpar);
+
+protected:
+  double (*tmpFun)   (double const*, double const*);
+  double (*tmpFunDer)(double const*, double const*, double*);
+};
+
+} // Fin du namespace
+
+#endif
Index: trunk/SophyaLib/NTools/objlist.list
===================================================================
--- trunk/SophyaLib/NTools/objlist.list	(revision 3075)
+++ trunk/SophyaLib/NTools/objlist.list	(revision 3083)
@@ -18,4 +18,5 @@
 generaldata.o
 generalfit.o
+generalfunc.o
 integ.o
 matxop.o
Index: trunk/SophyaLib/NTools/smakefile
===================================================================
--- trunk/SophyaLib/NTools/smakefile	(revision 3075)
+++ trunk/SophyaLib/NTools/smakefile	(revision 3083)
@@ -4,8 +4,8 @@
  
 clean:
-	 rm -f $(SOPHYAOBJP)cimage.o $(SOPHYAOBJP)cspline.o $(SOPHYAOBJP)datatypes.o $(SOPHYAOBJP)dates.o $(SOPHYAOBJP)difeq.o $(SOPHYAOBJP)dynccd.o $(SOPHYAOBJP)fct1dfit.o $(SOPHYAOBJP)fct2dfit.o $(SOPHYAOBJP)fftmserver.o $(SOPHYAOBJP)fftpserver.o $(SOPHYAOBJP)fftservintf.o $(SOPHYAOBJP)FSAppIrrSmpl.o $(SOPHYAOBJP)functab.o $(SOPHYAOBJP)generaldata.o $(SOPHYAOBJP)generalfit.o $(SOPHYAOBJP)imageop.o $(SOPHYAOBJP)integ.o $(SOPHYAOBJP)median.o $(SOPHYAOBJP)ntoolsinit.o $(SOPHYAOBJP)objfitter.o $(SOPHYAOBJP)perandom.o $(SOPHYAOBJP)poly.o $(SOPHYAOBJP)rk4cdifeq.o $(SOPHYAOBJP)simplesort.o $(SOPHYAOBJP)simplex.o $(SOPHYAOBJP)tabmath.o $(SOPHYAOBJP)toeplitzMatrix.o $(SOPHYAOBJP)datime.o $(SOPHYAOBJP)fftmayer_r4.o $(SOPHYAOBJP)fftmayer_r8.o $(SOPHYAOBJP)fftpackc.o $(SOPHYAOBJP)matxop.o $(SOPHYAOBJP)nbmath.o $(SOPHYAOBJP)nbtri.o
+	 rm -f $(SOPHYAOBJP)cimage.o $(SOPHYAOBJP)cspline.o $(SOPHYAOBJP)datatypes.o $(SOPHYAOBJP)dates.o $(SOPHYAOBJP)difeq.o $(SOPHYAOBJP)dynccd.o $(SOPHYAOBJP)fct1dfit.o $(SOPHYAOBJP)fct2dfit.o $(SOPHYAOBJP)fftmserver.o $(SOPHYAOBJP)fftpserver.o $(SOPHYAOBJP)fftservintf.o $(SOPHYAOBJP)FSAppIrrSmpl.o $(SOPHYAOBJP)functab.o $(SOPHYAOBJP)generaldata.o $(SOPHYAOBJP)generalfit.o $(SOPHYAOBJP)generalfunc.o $(SOPHYAOBJP)imageop.o $(SOPHYAOBJP)integ.o $(SOPHYAOBJP)median.o $(SOPHYAOBJP)ntoolsinit.o $(SOPHYAOBJP)objfitter.o $(SOPHYAOBJP)perandom.o $(SOPHYAOBJP)poly.o $(SOPHYAOBJP)rk4cdifeq.o $(SOPHYAOBJP)simplesort.o $(SOPHYAOBJP)simplex.o $(SOPHYAOBJP)tabmath.o $(SOPHYAOBJP)toeplitzMatrix.o $(SOPHYAOBJP)datime.o $(SOPHYAOBJP)fftmayer_r4.o $(SOPHYAOBJP)fftmayer_r8.o $(SOPHYAOBJP)fftpackc.o $(SOPHYAOBJP)matxop.o $(SOPHYAOBJP)nbmath.o $(SOPHYAOBJP)nbtri.o
 	rm -f $(SOPHYALIBP)libNTools.a
  
-$(SOPHYALIBP)libNTools.a : $(SOPHYAOBJP)cimage.o $(SOPHYAOBJP)cspline.o $(SOPHYAOBJP)datatypes.o $(SOPHYAOBJP)dates.o $(SOPHYAOBJP)datime.o $(SOPHYAOBJP)difeq.o $(SOPHYAOBJP)dynccd.o $(SOPHYAOBJP)fct1dfit.o $(SOPHYAOBJP)fct2dfit.o $(SOPHYAOBJP)fftmayer_r4.o $(SOPHYAOBJP)fftmayer_r8.o $(SOPHYAOBJP)fftmserver.o $(SOPHYAOBJP)fftpackc.o $(SOPHYAOBJP)fftpserver.o $(SOPHYAOBJP)fftservintf.o $(SOPHYAOBJP)FSAppIrrSmpl.o $(SOPHYAOBJP)functab.o $(SOPHYAOBJP)generaldata.o $(SOPHYAOBJP)generalfit.o $(SOPHYAOBJP)integ.o $(SOPHYAOBJP)matxop.o $(SOPHYAOBJP)median.o $(SOPHYAOBJP)nbmath.o $(SOPHYAOBJP)nbtri.o $(SOPHYAOBJP)ntoolsinit.o $(SOPHYAOBJP)objfitter.o $(SOPHYAOBJP)perandom.o $(SOPHYAOBJP)poly.o $(SOPHYAOBJP)rk4cdifeq.o $(SOPHYAOBJP)simplesort.o $(SOPHYAOBJP)simplex.o $(SOPHYAOBJP)tabmath.o $(SOPHYAOBJP)toeplitzMatrix.o
+$(SOPHYALIBP)libNTools.a : $(SOPHYAOBJP)cimage.o $(SOPHYAOBJP)cspline.o $(SOPHYAOBJP)datatypes.o $(SOPHYAOBJP)dates.o $(SOPHYAOBJP)datime.o $(SOPHYAOBJP)difeq.o $(SOPHYAOBJP)dynccd.o $(SOPHYAOBJP)fct1dfit.o $(SOPHYAOBJP)fct2dfit.o $(SOPHYAOBJP)fftmayer_r4.o $(SOPHYAOBJP)fftmayer_r8.o $(SOPHYAOBJP)fftmserver.o $(SOPHYAOBJP)fftpackc.o $(SOPHYAOBJP)fftpserver.o $(SOPHYAOBJP)fftservintf.o $(SOPHYAOBJP)FSAppIrrSmpl.o $(SOPHYAOBJP)functab.o $(SOPHYAOBJP)generaldata.o $(SOPHYAOBJP)generalfit.o $(SOPHYAOBJP)generalfunc.o $(SOPHYAOBJP)integ.o $(SOPHYAOBJP)matxop.o $(SOPHYAOBJP)median.o $(SOPHYAOBJP)nbmath.o $(SOPHYAOBJP)nbtri.o $(SOPHYAOBJP)ntoolsinit.o $(SOPHYAOBJP)objfitter.o $(SOPHYAOBJP)perandom.o $(SOPHYAOBJP)poly.o $(SOPHYAOBJP)rk4cdifeq.o $(SOPHYAOBJP)simplesort.o $(SOPHYAOBJP)simplex.o $(SOPHYAOBJP)tabmath.o $(SOPHYAOBJP)toeplitzMatrix.o
 	$(AR) $(ARFLAGS) $@ $? 
 	touch $(SOPHYAINCP)/SophyaConfInfo/libsophya.objlist
@@ -141,5 +141,5 @@
   peida.h $(SOPHYAINCP)utils.h \
   $(SOPHYAINCP)perrors.h fmath.h \
-  nbconst.h tabmath.h
+  generalfunc.h nbconst.h tabmath.h
 	$(CXXCOMPILE) $(CXXTEMPFLG) -o $@  fct1dfit.cc
  
@@ -171,5 +171,5 @@
   peida.h $(SOPHYAINCP)utils.h \
   $(SOPHYAINCP)perrors.h fmath.h \
-  nbconst.h tabmath.h simps2d.h
+  generalfunc.h nbconst.h tabmath.h simps2d.h
 	$(CXXCOMPILE) $(CXXTEMPFLG) -o $@  fct2dfit.cc
  
@@ -334,5 +334,6 @@
   $(SOPHYAINCP)ntupintf.h poly.h \
   peida.h $(SOPHYAINCP)utils.h \
-  $(SOPHYAINCP)perrors.h fmath.h
+  $(SOPHYAINCP)perrors.h fmath.h \
+  generalfunc.h
 	$(CXXCOMPILE) $(CXXTEMPFLG) -o $@  generaldata.cc
  
@@ -364,7 +365,14 @@
   peida.h $(SOPHYAINCP)utils.h \
   $(SOPHYAINCP)perrors.h fmath.h \
+  generalfunc.h \
   $(SOPHYAINCP)sopemtx.h
 	$(CXXCOMPILE) $(CXXTEMPFLG) -o $@  generalfit.cc
  
+$(SOPHYAOBJP)generalfunc.o: generalfunc.cc generalfunc.h \
+  $(SOPHYAINCP)sopnamsp.h \
+  $(SOPHYAINCP)machdefs.h \
+  $(SOPHYAINCP)pexceptions.h
+	$(CXXCOMPILE) $(CXXTEMPFLG) -o $@  generalfunc.cc
+ 
 $(SOPHYAOBJP)integ.o: integ.cc \
   $(SOPHYAINCP)sopnamsp.h integ.h \
@@ -393,5 +401,6 @@
   $(SOPHYAINCP)ntupintf.h poly.h \
   peida.h $(SOPHYAINCP)utils.h \
-  $(SOPHYAINCP)perrors.h fmath.h
+  $(SOPHYAINCP)perrors.h fmath.h \
+  generalfunc.h
 	$(CXXCOMPILE) $(CXXTEMPFLG) -o $@  integ.cc
  
@@ -465,5 +474,5 @@
   generalfit.h generaldata.h \
   $(SOPHYAINCP)ntupintf.h poly.h \
-  peida.h
+  peida.h generalfunc.h
 	$(CXXCOMPILE) $(CXXTEMPFLG) -o $@  objfitter.cc
  
@@ -589,4 +598,5 @@
   peida.h $(SOPHYAINCP)utils.h \
   $(SOPHYAINCP)perrors.h fmath.h \
+  generalfunc.h \
   $(SOPHYAINCP)ntuple.h \
   $(SOPHYAINCP)timing.h
