Index: trunk/SophyaLib/HiStats/hisprof.cc
===================================================================
--- trunk/SophyaLib/HiStats/hisprof.cc	(revision 1064)
+++ trunk/SophyaLib/HiStats/hisprof.cc	(revision 1089)
@@ -57,4 +57,5 @@
     memcpy(SumW,  H.SumW,  bins*sizeof(double));
   }
+  UpdateHisto();
   END_CONSTRUCTOR
 }
@@ -127,9 +128,8 @@
   et dispersion/erreur sur la moyenne).
 */
-void HProf::UpdateHisto() const
+void HProf::updatehisto() const
 {
 float m,e2;
-if(bins<=0) return;
-for(int i=0;i<bins;i++) {
+if(bins>0) for(int i=0;i<bins;i++) {
   if(SumW[i]<=0.) {
     m = e2 = 0.;
@@ -142,5 +142,6 @@
   err2[i] = e2;
 }
-// Attention, a cause de "WriteSelf const" UpdateHisto doit etre "const".
+Ok = true;
+// Attention, a cause de "WriteSelf const" updatehisto doit etre "const".
 // Comme on veut modifier Ok, on est oblige de faire cette entourloupe:
 HProf *buff = (HProf *) this;
@@ -224,10 +225,10 @@
 Histo *hthis = (Histo *) this;
 *hthis += (Histo) a;
-for(int i=0;i<bins;i++) {
+if(bins>0) for(int i=0;i<bins;i++) {
   SumY[i]  += a.SumY[i];
   SumY2[i] += a.SumY2[i];
   SumW[i]  += a.SumW[i];
 }
-Ok = false;
+updatehisto();
 
 return *this;
@@ -283,5 +284,5 @@
   }
   // On synchronise les tableaux Sum?? et l'Histogramme
-  UpdateHisto();
+  updatehisto();
 }
 
@@ -303,5 +304,5 @@
 is.GetLine(strg,255);
 
-// Ecriture des valeurs
+// Lecture des valeurs
 is.Get(dobj->bins);
 is.Get(dobj->YMin);
@@ -310,5 +311,5 @@
 dobj->Ok = true;
 
-// Ecriture des donnees propres a l'histogramme de profil.
+// Lecture des donnees propres a l'histogramme de profil.
 is.GetLine(strg,255);
 dobj->SumY  = new double[dobj->bins];
@@ -319,5 +320,5 @@
 is.Get(dobj->SumW,  dobj->bins);
 
-// Ecriture de l'histogramme
+// Lecture de l'histogramme
 is >> (Histo&)(*dobj);
 return;
@@ -329,5 +330,5 @@
 char strg[256];
 
-if(!(dobj->IsOk())) dobj->UpdateHisto();
+dobj->UpdateHisto();
 
 // Ecriture entete pour identifier facilement
Index: trunk/SophyaLib/HiStats/hisprof.h
===================================================================
--- trunk/SophyaLib/HiStats/hisprof.h	(revision 1064)
+++ trunk/SophyaLib/HiStats/hisprof.h	(revision 1089)
@@ -22,5 +22,7 @@
 
   // UPDATING or SETTING
-  void UpdateHisto() const;
+  //! Calcul la partie histogramme du profile si elle n'est pas a jour.
+  virtual inline void UpdateHisto(bool force=false) const
+                        {if(!Ok || force) updatehisto();}
   void SetErrOpt(bool spread = true);
   void Zero();
@@ -29,28 +31,26 @@
   
   // Acces a l information
-  //! Retourne true si l'histogramme est a jours, false sinon.
-  inline bool IsOk() const {return Ok;}
   //! Retourne l'histogramme de profil.
   inline Histo GetHisto()
-               {if(!Ok) UpdateHisto(); return (Histo) *this;}
+               {UpdateHisto(); return (Histo) *this;}
   //! Retourne le contenu de la moyenne dans le vecteur v
   inline void GetValue(TVector<r_8>& v)
-              {if(!Ok) UpdateHisto(); Histo::GetValue(v);}
+              {UpdateHisto(); Histo::GetValue(v);}
   //! Retourne le contenu au carre de la dispersion/erreur dans le vecteur v
   inline void GetError2(TVector<r_8>& v)
-              {if(!Ok) UpdateHisto(); Histo::GetError2(v);}
+              {UpdateHisto(); Histo::GetError2(v);}
   //! Retourne le contenu au carre de la dispersion/erreur dans le vecteur v
   inline void GetError(TVector<r_8>& v)
-              {if(!Ok) UpdateHisto(); Histo::GetError(v);}
+              {UpdateHisto(); Histo::GetError(v);}
   //! Retourne le contenu du bin i
   inline float operator()(int i) const
-               {if(!Ok) UpdateHisto(); return data[i];}
+               {UpdateHisto(); return data[i];}
   //! Retourne le carre de la dispersion/erreur du bin i
   inline double Error2(int i) const
-         {if(!Ok) UpdateHisto(); return (float) err2[i];}
+                {UpdateHisto(); return (float) err2[i];}
   //! Retourne la dispersion/erreur du bin i
   inline float Error(int i) const
-         {if(!Ok) UpdateHisto();
-          return (err2[i]>0.) ? (float) sqrt(err2[i]) : 0.f;}
+               {UpdateHisto();
+                return (err2[i]>0.) ? (float) sqrt(err2[i]) : 0.f;}
 
   // Operators
@@ -64,11 +64,11 @@
   //! Fit du profile par ``gfit''.
   inline int Fit(GeneralFit& gfit)
-         {if(!Ok) UpdateHisto(); return Histo::Fit(gfit,0);}
+         {UpdateHisto(); return Histo::Fit(gfit,0);}
   //! Retourne l'Histogramme des residus par ``gfit''.
   inline Histo FitResidus(GeneralFit& gfit)
-         {if(!Ok) UpdateHisto(); return Histo::FitResidus(gfit);}
+         {UpdateHisto(); return Histo::FitResidus(gfit);}
   //! Retourne l'Histogramme de la fonction fittee par ``gfit''.
   inline Histo FitFunction(GeneralFit& gfit)
-         {if(!Ok) UpdateHisto(); return Histo::FitFunction(gfit);}
+         {UpdateHisto(); return Histo::FitFunction(gfit);}
 
   // Print
@@ -76,17 +76,18 @@
   inline void Print(int dyn=100,float hmin=1.,float hmax=-1.
                    ,int pflag=0,int il=1,int ih=-1)
-         {if(!Ok) UpdateHisto(); Histo::Print(dyn,hmin,hmax,pflag,il,ih);}
+         {UpdateHisto(); Histo::Print(dyn,hmin,hmax,pflag,il,ih);}
   //! PrintF, voir detail dans Histo::PrintF
   inline void PrintF(FILE * fp,int dyn=100,float hmin=1.,float hmax=-1.
                     ,int pflag=0,int il=1,int ih=-1)
-         {if(!Ok) UpdateHisto(); Histo::PrintF(fp,dyn,hmin,hmax,pflag,il,ih);}
+         {UpdateHisto(); Histo::PrintF(fp,dyn,hmin,hmax,pflag,il,ih);}
 
 protected:
   void Delete();
+  void updatehisto() const;
 
   double*        SumY;  //!< somme
   double*        SumY2; //!< somme des carres
   double*        SumW;  //!< somme des poids
-  bool           Ok;    //!< true if update fait
+  mutable bool   Ok;    //!< true if update fait
   float          YMin;  //!< limite minimum Y pour somme
   float          YMax;  //!< limite maximum Y pour somme
Index: trunk/SophyaLib/HiStats/histos.h
===================================================================
--- trunk/SophyaLib/HiStats/histos.h	(revision 1064)
+++ trunk/SophyaLib/HiStats/histos.h	(revision 1089)
@@ -1,5 +1,5 @@
 // This may look like C code, but it is really -*- C++ -*-
 //
-// $Id: histos.h,v 1.9 2000-07-07 09:44:16 ansari Exp $
+// $Id: histos.h,v 1.10 2000-07-25 10:20:43 ansari Exp $
 //
 
@@ -43,4 +43,5 @@
   void SetErr(float x, float e);
   void SetErr(int numBin, float e);
+  virtual inline void UpdateHisto() const { return;}
 
   // Operators
