Changeset 1109 in Sophya for trunk/SophyaLib/HiStats/histos2.cc


Ignore:
Timestamp:
Jul 28, 2000, 6:29:55 PM (25 years ago)
Author:
ansari
Message:

on vire FitResidus/Function -> cf objfitter cmv 28/7/00

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/HiStats/histos2.cc

    r1092 r1109  
    1414
    1515#include "histos2.h"
    16 #include "generalfit.h"
    1716
    1817/*!
     
    514513  Remplissage d'un tableau avec les valeurs des abscisses.
    515514*/
    516 void Histo2D::GetXCoor(TVector<r_8> &v)
     515void Histo2D::GetXCoor(TVector<r_8> &v) const
    517516{
    518517r_8 x,y;
     
    525524  Remplissage d'un tableau avec les valeurs des ordonnees.
    526525*/
    527 void Histo2D::GetYCoor(TVector<r_8> &v)
     526void Histo2D::GetYCoor(TVector<r_8> &v) const
    528527{
    529528r_8 x,y;
     
    536535  Remplissage d'un tableau avec les valeurs du contenu.
    537536*/
    538 void Histo2D::GetValue(TMatrix<r_8> &v)
     537void Histo2D::GetValue(TMatrix<r_8> &v) const
    539538{
    540539v.Realloc(mNx,mNy);
     
    547546  Remplissage d'un tableau avec les valeurs du carre des erreurs.
    548547*/
    549 void Histo2D::GetError2(TMatrix<r_8> &v)
     548void Histo2D::GetError2(TMatrix<r_8> &v) const
    550549{
    551550int_4 i,j;
     
    560559  Remplissage d'un tableau avec les valeurs des erreurs.
    561560*/
    562 void Histo2D::GetError(TMatrix<r_8> &v)
     561void Histo2D::GetError(TMatrix<r_8> &v) const
    563562{
    564563int_4 i,j;
     
    698697  Recherche du bin du maximum dans le pave [il,ih][jl,jh].
    699698*/
    700 void Histo2D::IJMax(int_4& imax,int_4& jmax,int_4 il,int_4 ih,int_4 jl,int_4 jh)
     699void Histo2D::IJMax(int_4& imax,int_4& jmax,int_4 il,int_4 ih,int_4 jl,int_4 jh) const
    701700{
    702701if( il > ih ) { il = 0; ih = mNx-1; }
     
    719718  Recherche du bin du minimum dans le pave [il,ih][jl,jh].
    720719*/
    721 void Histo2D::IJMin(int_4& imax,int_4& jmax,int_4 il,int_4 ih,int_4 jl,int_4 jh)
     720void Histo2D::IJMin(int_4& imax,int_4& jmax,int_4 il,int_4 ih,int_4 jl,int_4 jh) const
    722721{
    723722if( il > ih ) { il = 0; ih = mNx-1; }
     
    827826*/
    828827int_4 Histo2D::EstimeMax(r_8& xm,r_8& ym,int_4 SzPav
    829                       ,int_4 il,int_4 ih,int_4 jl,int_4 jh)
     828                      ,int_4 il,int_4 ih,int_4 jl,int_4 jh) const
    830829{
    831830int_4 im,jm;
     
    846845  \endverbatim
    847846*/
    848 int_4 Histo2D::EstimeMax(int_4 im,int_4 jm,r_8& xm,r_8& ym,int_4 SzPav)
     847int_4 Histo2D::EstimeMax(int_4 im,int_4 jm,r_8& xm,r_8& ym,int_4 SzPav) const
    849848{
    850849xm = ym = 0;
     
    902901*/
    903902int_4 Histo2D::FindMax(int_4& im,int_4& jm,int_4 SzPav,r_8 Dz
    904                     ,int_4 il,int_4 ih,int_4 jl,int_4 jh)
     903                    ,int_4 il,int_4 ih,int_4 jl,int_4 jh) const
    905904{
    906905if( il > ih ) { il = 0; ih = mNx-1; }
     
    933932}
    934933
    935 //////////////////////////////////////////////////////////
    936 
    937 //////////////////////////////////////////////////////////
    938 /*!
    939   Fit de l'histogramme par ``gfit''.
    940   \verbatim
    941     typ_err = 0 :
    942        - erreur attachee au bin si elle existe
    943        - sinon 1
    944     typ_err = 1 :
    945        - erreur attachee au bin si elle existe
    946        - sinon max( sqrt(abs(bin) ,1 )
    947     typ_err = 2 :
    948        - erreur forcee a 1
    949     typ_err = 3 :
    950        - erreur forcee a max( sqrt(abs(bin) ,1 )
    951     typ_err = 4 :
    952        - erreur forcee a 1, nulle si bin a zero.
    953     typ_err = 5 :
    954        - erreur forcee a max( sqrt(abs(bin) ,1 ),
    955          nulle si bin a zero.
    956   \endverbatim
    957 */
    958 int_4  Histo2D::Fit(GeneralFit& gfit,unsigned short typ_err)
    959 {
    960 if(NBinX()*NBinY()<=0) return -1000;
    961 if(typ_err>5) typ_err=0;
    962 
    963 GeneralFitData mydata(2,NBinX()*NBinY());
    964 
    965 for(int_4 i=0;i<NBinX();i++) for(int_4 j=0;j<NBinY();j++) {
    966   r_8 x,y;
    967   BinCenter(i,j,x,y);
    968   r_8 f = (*this)(i,j);
    969   r_8 saf = sqrt(fabs(f)); if(saf<1.) saf=1.;
    970   r_8 e=0.;
    971   if(typ_err==0)      {if(HasErrors()) e=Error(i,j); else e=1.;}
    972   else if(typ_err==1) {if(HasErrors()) e=Error(i,j); else e=saf;}
    973   else if(typ_err==2) e=1.;
    974   else if(typ_err==3) e=saf;
    975   else if(typ_err==4) e=(f==0.)?0.:1.;
    976   else if(typ_err==5) e=(f==0.)?0.:saf;
    977   mydata.AddData2(x,y,f,e);
    978 }
    979 
    980 gfit.SetData(&mydata);
    981 
    982 return gfit.Fit();
    983 }
    984 
    985 /*!
    986   Retourne une classe contenant les residus du fit ``gfit''.
    987 */
    988 Histo2D Histo2D::FitResidus(GeneralFit& gfit)
    989 {
    990 if(NBinX()<=0 || NBinY()<=0)
    991   throw(SzMismatchError("Histo2D::FitResidus: size mismatch\n"));
    992 GeneralFunction* f = gfit.GetFunction();
    993 if(f==NULL)
    994   throw(NullPtrError("Histo2D::FitResidus: NULL pointer\n"));
    995 TVector<r_8> par = gfit.GetParm();
    996 Histo2D h2(*this);
    997 for(int_4 i=0;i<NBinX();i++) for(int_4 j=0;j<NBinY();j++) {
    998   r_8 xc,yc;
    999   BinCenter(i,j,xc,yc);
    1000   r_8 x[2] = {xc,yc};
    1001   h2(i,j) -= f->Value(x,par.Data());
    1002 }
    1003 return h2;
    1004 }
    1005 
    1006 /*!
    1007   Retourne une classe contenant la fonction du fit ``gfit''.
    1008 */
    1009 Histo2D Histo2D::FitFunction(GeneralFit& gfit)
    1010 {
    1011 if(NBinX()<=0 || NBinY()<=0)
    1012   throw(SzMismatchError("Histo2D::FitFunction: size mismatch\n"));
    1013 GeneralFunction* f = gfit.GetFunction();
    1014 if(f==NULL)
    1015   throw(NullPtrError("Histo2D::FitFunction: NULL pointer\n"));
    1016 TVector<r_8> par = gfit.GetParm();
    1017 Histo2D h2(*this);
    1018 for(int_4 i=0;i<NBinX();i++) for(int_4 j=0;j<NBinY();j++) {
    1019   r_8 xc,yc;
    1020   BinCenter(i,j,xc,yc);
    1021   r_8 x[2] = {xc,yc};
    1022   h2(i,j) = f->Value(x,par.Data());
    1023 }
    1024 return h2;
    1025 }
    1026 
    1027934///////////////////////////////////////////////////////////////////
    1028935/*!
    1029936  Impression des informations sur l'histogramme.
    1030937*/
    1031 void Histo2D::PrintStatus()
     938void Histo2D::PrintStatus() const
    1032939{
    1033940printf("~Histo::Print    nHist=%g nEntries=%d",nHist,nEntries);
     
    1052959*/
    1053960void Histo2D::Print(r_8 min,r_8 max
    1054                    ,int_4 il,int_4 ih,int_4 jl,int_4 jh)
     961                   ,int_4 il,int_4 ih,int_4 jl,int_4 jh) const
    1055962{
    1056963int_4 ns = 35;
     
    11701077  Informations sur les projections.
    11711078*/
    1172 void Histo2D::ShowProj()
     1079void Histo2D::ShowProj() const
    11731080{
    11741081if( mHprojx != NULL ) cout << ">>>> Projection X set : "<< mHprojx <<endl;
     
    13581265  Informations sur les bandes.
    13591266*/
    1360 void Histo2D::ShowBand(int_4 lp)
     1267void Histo2D::ShowBand(int_4 lp) const
    13611268{
    13621269  cout << ">>>> Nombre de bande X : " << mLBandx.size() << endl;
    13631270if( lp>0 && mLBandx.size()>0 ) {
    1364   list<bande_slice>::iterator i;
     1271  list<bande_slice>::const_iterator i;
    13651272  for(i = mLBandx.begin(); i != mLBandx.end(); i++) {
    13661273    cout<<"  "<<(*i).num<<" de ymin="<<(*i).min<<" a ymax="<<(*i).max;
     
    13721279cout << ">>>> Nombre de bande Y : " << mLBandy.size() << endl;
    13731280if( lp>0 && mLBandy.size()>0 ) {
    1374   list<bande_slice>::iterator i;
     1281  list<bande_slice>::const_iterator i;
    13751282  for(i = mLBandy.begin(); i != mLBandy.end(); i++) {
    13761283    cout<<"  "<<(*i).num<<" de xmin="<<(*i).min<<" a xmax="<<(*i).max;
     
    14971404  Informations sur les bandes equidistantes.
    14981405*/
    1499 void Histo2D::ShowSli(int_4 lp)
    1500 {
    1501 list<bande_slice>::iterator i;
     1406void Histo2D::ShowSli(int_4 lp) const
     1407{
     1408list<bande_slice>::const_iterator i;
    15021409cout << ">>>> Nombre de slice X : " << mLSlix.size() << endl;
    15031410if( lp>0 && mLSlix.size() > 0 )
Note: See TracChangeset for help on using the changeset viewer.