Index: trunk/SophyaLib/HiStats/hisprof.cc
===================================================================
--- trunk/SophyaLib/HiStats/hisprof.cc	(revision 1057)
+++ trunk/SophyaLib/HiStats/hisprof.cc	(revision 1058)
@@ -234,4 +234,56 @@
 }
 
+/********* Methode *********/
+/*!
+  Pour rebinner l'histogramme de profile sur nbinew bins
+*/
+void HProf::HRebin(int nbinew)
+{
+  if( bins <= 0 ) return; // createur par default
+  if( nbinew <= 0 ) return;
+
+  // memorisation de l'HProf original
+  HProf H(*this);
+
+  // Rebin de la partie Histo
+  int binold = bins;
+  Histo::HRebin(nbinew);
+
+  // Le nombre de bins est il plus grand ??
+  if( bins > binold ) {
+    delete [] SumY;  SumY  = new double[nbinew]; memset(SumY, 0,bins*sizeof(double));
+    delete [] SumY2; SumY2 = new double[nbinew]; memset(SumY2,0,bins*sizeof(double));
+    delete [] SumW;  SumW  = new double[nbinew]; memset(SumW, 0,bins*sizeof(double));
+  }
+
+  // Remplissage des parties propres au HPprof
+  for(int i=0;i<bins;i++) {
+    float xmi = BinLowEdge(i);
+    float xma = BinHighEdge(i);
+    int imi =  H.FindBin(xmi);
+    if( imi < 0 ) imi = 0;
+    int ima =  H.FindBin(xma);
+    if( ima >= H.bins ) ima = H.bins-1;
+    double wY = 0., wY2 = 0., wW = 0.;
+    if( ima == imi ) {
+      wY  = H.SumY[imi]  * binWidth/H.binWidth;
+      wY2 = H.SumY2[imi] * binWidth/H.binWidth;
+      wW  = H.SumW[imi]  * binWidth/H.binWidth;
+    } else {
+      wY  += H.SumY[imi]  * (H.BinHighEdge(imi)-xmi)/H.binWidth;
+      wY  += H.SumY[ima]  * (xma -H.BinLowEdge(ima))/H.binWidth;
+      wY2 += H.SumY2[imi] * (H.BinHighEdge(imi)-xmi)/H.binWidth;
+      wY2 += H.SumY2[ima] * (xma -H.BinLowEdge(ima))/H.binWidth;
+      wW  += H.SumW[imi]  * (H.BinHighEdge(imi)-xmi)/H.binWidth;
+      wW  += H.SumW[ima]  * (xma -H.BinLowEdge(ima))/H.binWidth;
+      if(ima>imi+1) for(int ii=imi+1;ii<ima;ii++)
+	{wY += H.SumY[ii]; wY2 += H.SumY2[ii]; wW += H.SumW[ii];}
+    }
+    SumY[i] += wY; SumY2[i] += wY2; SumW[i] += wW;
+  }
+  // On synchronise les tableaux Sum?? et l'Histogramme
+  UpdateHisto();
+}
+
 ///////////////////////////////////////////////////////////
 // --------------------------------------------------------
Index: trunk/SophyaLib/HiStats/hisprof.h
===================================================================
--- trunk/SophyaLib/HiStats/hisprof.h	(revision 1057)
+++ trunk/SophyaLib/HiStats/hisprof.h	(revision 1058)
@@ -57,4 +57,7 @@
   HProf& operator = (const HProf& h);
   HProf& operator += (const HProf& a);
+
+  // Info, statistique et calculs sur les histogrammes
+  virtual void HRebin(int nbinew);
 
   // Fit
Index: trunk/SophyaLib/HiStats/histos.cc
===================================================================
--- trunk/SophyaLib/HiStats/histos.cc	(revision 1057)
+++ trunk/SophyaLib/HiStats/histos.cc	(revision 1058)
@@ -1,4 +1,4 @@
 //
-// $Id: histos.cc,v 1.7 2000-07-07 08:41:11 ansari Exp $
+// $Id: histos.cc,v 1.8 2000-07-07 09:44:15 ansari Exp $
 //
 
@@ -783,4 +783,5 @@
 void Histo::HInteg(float norm)
 {
+if( bins <= 0 ) return; // createur par default
 if(bins>1)
   for(int i=1; i<bins; i++) {
@@ -802,4 +803,5 @@
 void Histo::HDeriv()
 {
+if( bins <= 0 ) return; // createur par default
 if( bins <= 1 ) return;
 float *temp = new float[bins];
@@ -819,4 +821,5 @@
 void Histo::HRebin(int nbinew)
 {
+  if( bins <= 0 ) return; // createur par default
   if( nbinew <= 0 ) return;
 
Index: trunk/SophyaLib/HiStats/histos.h
===================================================================
--- trunk/SophyaLib/HiStats/histos.h	(revision 1057)
+++ trunk/SophyaLib/HiStats/histos.h	(revision 1058)
@@ -1,5 +1,5 @@
 // This may look like C code, but it is really -*- C++ -*-
 //
-// $Id: histos.h,v 1.8 2000-07-07 08:41:11 ansari Exp $
+// $Id: histos.h,v 1.9 2000-07-07 09:44:16 ansari Exp $
 //
 
@@ -42,5 +42,5 @@
   void SetErr2(int numBin, double e2);
   void SetErr(float x, float e);
-  void   SetErr(int numBin, float e);
+  void SetErr(int numBin, float e);
 
   // Operators
@@ -132,5 +132,5 @@
   void      HInteg(float norm = 0.);
   void      HDeriv();
-  void      HRebin(int nbinew);
+  virtual void HRebin(int nbinew);
 
   int       MaxiLocal(float& maxi,int& imax,float& maxn,int& imaxn);
