Ignore:
Timestamp:
Sep 29, 2000, 12:15:55 AM (25 years ago)
Author:
ansari
Message:

pour les adaptateurs de fit cmv 29/9/00

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/NTools/generaldata.cc

    r1110 r1204  
    704704/*!
    705705  Pour fiter un polynome de degre ``degre''. On fite
    706   Y=f(X) ou Y=Val et X=Absc(varx). Si ``ey'' est ``true''
     706  Y=f(X-xc) ou Y=Val et X=Absc(varx). Si ``ey'' est ``true''
    707707  le fit prend en compte les erreurs stoquees dans EVal,
    708708  sinon fit sans erreurs. Le resultat du fit est retourne
    709   dans le polynome ``pol''.
     709  dans le polynome ``pol''. On re-centre les abscisses X de ``xc''.
    710710  \verbatim
    711711  Return:
     
    714714     -   -2 si probleme sur numero de variable X
    715715     -   -4 si NDataGood<0
    716      -   -5 si nombre de data trouves different de NDataGood
     716     -   -5 si nombre de data trouves differents de NDataGood
    717717  \endverbatim
    718718*/
    719 double GeneralFitData::PolFit(int varx,Poly& pol,int degre,bool ey) const
     719double GeneralFitData::PolFit(int varx,Poly& pol,int degre,bool ey,double xc) const
    720720{
    721721if(degre<0) return -1.;
     
    730730  if( ! IsValid(i) ) continue;
    731731  if(ntest>=mNDataGood) return -5.;
    732   x(ntest) = Absc(varx,i);
     732  x(ntest) = Absc(varx,i) - xc;
    733733  y(ntest) = Val(i);
    734734  if(ey) ey2(ntest) = EVal(i)*EVal(i);
     
    747747/*!
    748748  Pour fiter un polynome de degre ``degre1''. On fite
    749   Z=f(X,Y) ou Z=Val et X=Absc(varx) et Y=Absc(vary).
     749  Z=f(X-xc,Y-yc) ou Z=Val et X=Absc(varx) et Y=Absc(vary).
    750750  Si ``ey'' est ``true'' le fit prend en compte les erreurs
    751751  stoquees dans EVal, sinon fit sans erreurs. Si ``degre2''
     
    754754  demande un fit de ``degre1'' pour la variable X et de degre
    755755  ``degre2'' sur la variable Y. Le resultat du fit est retourne
    756   dans le polynome ``pol''.
     756  dans le polynome ``pol''. On re-centre les abscisses X de ``xc''
     757  et Y de ``yc''.
    757758  \verbatim
    758759    Return:
     
    765766  \endverbatim
    766767*/
    767 double GeneralFitData::PolFit(int varx,int vary,Poly2& pol,int degre1,int degre2,bool ez) const
     768double GeneralFitData::PolFit(int varx,int vary,Poly2& pol,int degre1,int degre2,bool ez
     769                             ,double xc,double yc) const
    768770{
    769771if(degre1<0) return -1.;
     
    780782  if( ! IsValid(i) ) continue;
    781783  if(ntest>=mNDataGood) return -5.;
    782   x(ntest) = Absc(varx,i);
    783   y(ntest) = Absc(vary,i);
     784  x(ntest) = Absc(varx,i) - xc;
     785  y(ntest) = Absc(vary,i) - yc;
    784786  z(ntest) = Val(i);
    785787  if(ez) ez2(ntest) = EVal(i)*EVal(i);
     
    993995
    994996return(rets);
     997}
     998
     999
     1000//! Compute errors according to specifications
     1001/*!
     1002  \param val : value of the function
     1003  \param err : value of the default error
     1004  \param errtype : type of error according to enum FitErrType (def=DefaultError)
     1005  \param errscale : scaling (or value) of the error (def=1.)
     1006  \param errmin : minimum value of the error (def=0.)
     1007  \param nozero : if true, do not return negative errors but
     1008                  set them to zero (def=false)
     1009  \return : return the error computed according to specifications
     1010  \verbatim
     1011  - val is the value to be fitted ex: val = f(x,y,...)
     1012  - err is the error by default we want to set.
     1013  - errtype = DefaultError  : errtmp = errscale*err
     1014    errtype = ConstantError : errtmp = errscale
     1015    errtype = SqrtError     : errtmp = errscale*sqrt(|val|)
     1016    errtype = ProporError   : errtmp = errscale*|val|
     1017  - errscale <=0 then errscale=1
     1018  - errmin >=0 if errtmp>0  return max(errtmp,errmin)
     1019               if errtmp<=0 return errtmp
     1020    errmin <0  if errtmp>0  return max(errtmp,|errmin|)
     1021               if errtmp<=0 return |errmin|
     1022  \endverbatim
     1023 */
     1024double GeneralFitData::ComputeError(double val,double err,FitErrType errtype
     1025                                   ,double errscale,double errmin,bool nozero)
     1026{
     1027 bool errminneg=false;
     1028 if(errmin<0.) {errminneg=true; errmin*=-1.;}
     1029 if(errscale<0.) errscale=1.;
     1030
     1031 // Choix du type d'erreur
     1032 if(errtype==ConstantError)    err = errscale;
     1033 else if(errtype==SqrtError)   err = errscale*sqrt(fabs(val));
     1034 else if(errtype==ProporError) err = errscale*fabs(val);
     1035
     1036 // Gestion du minimum a partir de la valeur calculee precedemment "err"
     1037 // Ex1: errmin=1.,  err=10.     ==> 10.
     1038 //                  err=0.5     ==> 1.
     1039 //                  err=0.      ==> 0.
     1040 //                  err=-2.     ==> -2.
     1041 // Ex2: errmin=-1., err=10.     ==> 10.
     1042 //                  err=0.5     ==> 1.
     1043 //                  err=0.      ==> 1.
     1044 //                  err=-2.     ==> 11.
     1045 if(err>0.) err = (err>errmin) ? err: errmin;
     1046 else if(errminneg) err = errmin;
     1047
     1048 // ne pas retourner d'erreurs negatives si demande
     1049 if(nozero && err<0.) err=0.;
     1050
     1051 return err;
    9951052}
    9961053
Note: See TracChangeset for help on using the changeset viewer.