Changeset 1089 in Sophya


Ignore:
Timestamp:
Jul 25, 2000, 12:20:43 PM (25 years ago)
Author:
ansari
Message:

updatehisto formalisation cmv 25/7/00

Location:
trunk/SophyaLib/HiStats
Files:
3 edited

Legend:

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

    r1058 r1089  
    5757    memcpy(SumW,  H.SumW,  bins*sizeof(double));
    5858  }
     59  UpdateHisto();
    5960  END_CONSTRUCTOR
    6061}
     
    127128  et dispersion/erreur sur la moyenne).
    128129*/
    129 void HProf::UpdateHisto() const
     130void HProf::updatehisto() const
    130131{
    131132float m,e2;
    132 if(bins<=0) return;
    133 for(int i=0;i<bins;i++) {
     133if(bins>0) for(int i=0;i<bins;i++) {
    134134  if(SumW[i]<=0.) {
    135135    m = e2 = 0.;
     
    142142  err2[i] = e2;
    143143}
    144 // Attention, a cause de "WriteSelf const" UpdateHisto doit etre "const".
     144Ok = true;
     145// Attention, a cause de "WriteSelf const" updatehisto doit etre "const".
    145146// Comme on veut modifier Ok, on est oblige de faire cette entourloupe:
    146147HProf *buff = (HProf *) this;
     
    224225Histo *hthis = (Histo *) this;
    225226*hthis += (Histo) a;
    226 for(int i=0;i<bins;i++) {
     227if(bins>0) for(int i=0;i<bins;i++) {
    227228  SumY[i]  += a.SumY[i];
    228229  SumY2[i] += a.SumY2[i];
    229230  SumW[i]  += a.SumW[i];
    230231}
    231 Ok = false;
     232updatehisto();
    232233
    233234return *this;
     
    283284  }
    284285  // On synchronise les tableaux Sum?? et l'Histogramme
    285   UpdateHisto();
     286  updatehisto();
    286287}
    287288
     
    303304is.GetLine(strg,255);
    304305
    305 // Ecriture des valeurs
     306// Lecture des valeurs
    306307is.Get(dobj->bins);
    307308is.Get(dobj->YMin);
     
    310311dobj->Ok = true;
    311312
    312 // Ecriture des donnees propres a l'histogramme de profil.
     313// Lecture des donnees propres a l'histogramme de profil.
    313314is.GetLine(strg,255);
    314315dobj->SumY  = new double[dobj->bins];
     
    319320is.Get(dobj->SumW,  dobj->bins);
    320321
    321 // Ecriture de l'histogramme
     322// Lecture de l'histogramme
    322323is >> (Histo&)(*dobj);
    323324return;
     
    329330char strg[256];
    330331
    331 if(!(dobj->IsOk())) dobj->UpdateHisto();
     332dobj->UpdateHisto();
    332333
    333334// Ecriture entete pour identifier facilement
  • trunk/SophyaLib/HiStats/hisprof.h

    r1058 r1089  
    2222
    2323  // UPDATING or SETTING
    24   void UpdateHisto() const;
     24  //! Calcul la partie histogramme du profile si elle n'est pas a jour.
     25  virtual inline void UpdateHisto(bool force=false) const
     26                        {if(!Ok || force) updatehisto();}
    2527  void SetErrOpt(bool spread = true);
    2628  void Zero();
     
    2931 
    3032  // Acces a l information
    31   //! Retourne true si l'histogramme est a jours, false sinon.
    32   inline bool IsOk() const {return Ok;}
    3333  //! Retourne l'histogramme de profil.
    3434  inline Histo GetHisto()
    35                {if(!Ok) UpdateHisto(); return (Histo) *this;}
     35               {UpdateHisto(); return (Histo) *this;}
    3636  //! Retourne le contenu de la moyenne dans le vecteur v
    3737  inline void GetValue(TVector<r_8>& v)
    38               {if(!Ok) UpdateHisto(); Histo::GetValue(v);}
     38              {UpdateHisto(); Histo::GetValue(v);}
    3939  //! Retourne le contenu au carre de la dispersion/erreur dans le vecteur v
    4040  inline void GetError2(TVector<r_8>& v)
    41               {if(!Ok) UpdateHisto(); Histo::GetError2(v);}
     41              {UpdateHisto(); Histo::GetError2(v);}
    4242  //! Retourne le contenu au carre de la dispersion/erreur dans le vecteur v
    4343  inline void GetError(TVector<r_8>& v)
    44               {if(!Ok) UpdateHisto(); Histo::GetError(v);}
     44              {UpdateHisto(); Histo::GetError(v);}
    4545  //! Retourne le contenu du bin i
    4646  inline float operator()(int i) const
    47                {if(!Ok) UpdateHisto(); return data[i];}
     47               {UpdateHisto(); return data[i];}
    4848  //! Retourne le carre de la dispersion/erreur du bin i
    4949  inline double Error2(int i) const
    50          {if(!Ok) UpdateHisto(); return (float) err2[i];}
     50                {UpdateHisto(); return (float) err2[i];}
    5151  //! Retourne la dispersion/erreur du bin i
    5252  inline float Error(int i) const
    53          {if(!Ok) UpdateHisto();
    54           return (err2[i]>0.) ? (float) sqrt(err2[i]) : 0.f;}
     53               {UpdateHisto();
     54                return (err2[i]>0.) ? (float) sqrt(err2[i]) : 0.f;}
    5555
    5656  // Operators
     
    6464  //! Fit du profile par ``gfit''.
    6565  inline int Fit(GeneralFit& gfit)
    66          {if(!Ok) UpdateHisto(); return Histo::Fit(gfit,0);}
     66         {UpdateHisto(); return Histo::Fit(gfit,0);}
    6767  //! Retourne l'Histogramme des residus par ``gfit''.
    6868  inline Histo FitResidus(GeneralFit& gfit)
    69          {if(!Ok) UpdateHisto(); return Histo::FitResidus(gfit);}
     69         {UpdateHisto(); return Histo::FitResidus(gfit);}
    7070  //! Retourne l'Histogramme de la fonction fittee par ``gfit''.
    7171  inline Histo FitFunction(GeneralFit& gfit)
    72          {if(!Ok) UpdateHisto(); return Histo::FitFunction(gfit);}
     72         {UpdateHisto(); return Histo::FitFunction(gfit);}
    7373
    7474  // Print
     
    7676  inline void Print(int dyn=100,float hmin=1.,float hmax=-1.
    7777                   ,int pflag=0,int il=1,int ih=-1)
    78          {if(!Ok) UpdateHisto(); Histo::Print(dyn,hmin,hmax,pflag,il,ih);}
     78         {UpdateHisto(); Histo::Print(dyn,hmin,hmax,pflag,il,ih);}
    7979  //! PrintF, voir detail dans Histo::PrintF
    8080  inline void PrintF(FILE * fp,int dyn=100,float hmin=1.,float hmax=-1.
    8181                    ,int pflag=0,int il=1,int ih=-1)
    82          {if(!Ok) UpdateHisto(); Histo::PrintF(fp,dyn,hmin,hmax,pflag,il,ih);}
     82         {UpdateHisto(); Histo::PrintF(fp,dyn,hmin,hmax,pflag,il,ih);}
    8383
    8484protected:
    8585  void Delete();
     86  void updatehisto() const;
    8687
    8788  double*        SumY;  //!< somme
    8889  double*        SumY2; //!< somme des carres
    8990  double*        SumW;  //!< somme des poids
    90   bool           Ok;    //!< true if update fait
     91  mutable bool   Ok;    //!< true if update fait
    9192  float          YMin;  //!< limite minimum Y pour somme
    9293  float          YMax;  //!< limite maximum Y pour somme
  • trunk/SophyaLib/HiStats/histos.h

    r1058 r1089  
    11// This may look like C code, but it is really -*- C++ -*-
    22//
    3 // $Id: histos.h,v 1.9 2000-07-07 09:44:16 ansari Exp $
     3// $Id: histos.h,v 1.10 2000-07-25 10:20:43 ansari Exp $
    44//
    55
     
    4343  void SetErr(float x, float e);
    4444  void SetErr(int numBin, float e);
     45  virtual inline void UpdateHisto() const { return;}
    4546
    4647  // Operators
Note: See TracChangeset for help on using the changeset viewer.