Index: trunk/SophyaPI/PIext/pihisto.cc
===================================================================
--- trunk/SophyaPI/PIext/pihisto.cc	(revision 3055)
+++ trunk/SophyaPI/PIext/pihisto.cc	(revision 3125)
@@ -1,4 +1,5 @@
 // Classe traceur d histogramme                 96-99
-// CEA-DAPNIA      LAL-IN2P3/CNRS
+//  C. Magneville , R. Ansari               2000-2007
+// (C)  CEA-DAPNIA          LAL-IN2P3/CNRS
 
 #include <stdio.h>
@@ -8,7 +9,6 @@
 #include <typeinfo>
 
-#include "sopnamsp.h"
+//RZDEL #include "sopnamsp.h"
 #include "pihisto.h"
-#include "hisprof.h"
 
 //++
@@ -17,5 +17,5 @@
 // include	pihisto.h
 //
-//	Classe traceur d'objet histogramme (classe *Histo*)
+//	Classe traceur d'objet histogramme (classe *P1DHistoWrapper*)
 //--
 //++
@@ -27,5 +27,5 @@
 //--
 //++
-// PIHisto(Histo* histo, bool ad=false)
+// PIHisto(P1DHistoWrapper* histo, bool ad=false)
 //	Constructeur. Si "ad == true", l'objet "histo" est détruit par 
 //	le destructeur de l'objet "PIHisto"
@@ -37,5 +37,5 @@
 
 
-PIHisto::PIHisto(Histo* histo, bool ad)
+PIHisto::PIHisto(P1DHistoWrapper* histo, bool ad)
 : PIDrawer(), mHisto(histo)
 {
@@ -57,18 +57,17 @@
 {
   if (!mHisto)  return;
-  float hmin = mHisto->VMin();
-  float hmax = mHisto->VMax()+0.2*(mHisto->VMax()-mHisto->VMin());
-  // si HBProf min,max calcules en tenant compte des erreurs
-  if( typeid(*mHisto) == typeid(HProf) ) {
-    float v1,v2;
-    for (int i=1; i<mHisto->NBins(); i++) {
-      v1 = (*mHisto)(i) - mHisto->Error(i);
-      v2 = (*mHisto)(i) + mHisto->Error(i);
-      if(v1<hmin) hmin = v1;
-      if(v2>hmax) hmax = v2;
-    }
-    v1 = 0.1*(hmax-hmin);
-    hmin -= v1;   hmax += v1;
-  }
+  double v1,v2,hmin,hmax;
+  hmin = 9.e39;
+  hmax = -9.e39;
+  for (int i=1; i<mHisto->NBins(); i++) {
+    v1 = (*mHisto)(i); //DEL  - mHisto->Error(i);
+    v2 = (*mHisto)(i); //DEL  + mHisto->Error(i);
+    if(v1<hmin) hmin = v1;
+    if(v2>hmax) hmax = v2;
+  }
+  // REZA$CHECK : Modifier pour tenir compte si axe (Y) en log
+  v1 = 0.1*(hmax-hmin);
+  hmin -= v1;   hmax += v1;
+
   if(hmax<=hmin) hmax = hmin+1.;
   SetLimits(mHisto->XMin(), mHisto->XMax(), hmin, hmax);
@@ -83,5 +82,5 @@
   if (mHisto->NBins()<=0) return;
  
-  if( typeid(*mHisto)==typeid(HProf) ) mHisto->UpdateHisto();
+  mHisto->Update();
 
   bool oktrace=false;
@@ -91,11 +90,11 @@
   // Tracer des marqueurs si demande ou si HProf
   bool drawmarker=false;
-  if( (GetGraphicAtt().GetMarker() != PI_NotDefMarker) ||  
-      (typeid(*mHisto) == typeid(HProf)) ) drawmarker = true;
+  if (GetGraphicAtt().GetMarker() != PI_NotDefMarker) drawmarker = true;
+//RZDEL   ||  (typeid(*mHisto) == typeid(HProf)) ) drawmarker = true;
   // Tracer des erreurs ?
   bool drawerr=false;
   if(error==0) {  // Gestion automatique des erreurs
-    // Tracer les erreurs si HProf
-    if( typeid(*mHisto)==typeid(HProf) ) drawerr=true;
+    //RZDEL  Tracer les erreurs si HProf
+//RZDEL    if( typeid(*mHisto)==typeid(HProf) ) drawerr=true;
     // Trace les erreurs si marqueurs demandes
     if(drawmarker) drawerr=true;
@@ -263,15 +262,18 @@
   PIGrCoord a, d;
   double cH = (double)g->GetFontHeight(a,d);
-  double cellHeight = 3.6 * cH;
-
-  // Les labels et leurs longueurs -> largeur de la cellule
-  char *label, label1[64], label2[64], label3[64];
-  sprintf(label1, "N= %-g",mHisto->NData());
-  sprintf(label2, "m= %-g",mHisto->Mean());
-  sprintf(label3, "s= %-g",mHisto->Sigma());
-  label = label1;
-  if(strlen(label)<strlen(label2)) label = label2;
-  if(strlen(label)<strlen(label3)) label = label3;
-  double cellWidth =  1.1 * (double)g->CalcStringWidth(label);
+  vector<string> lines;
+  int nlig = mHisto->GetStatInfoAsText(lines);
+  if (nlig < 1) return;
+
+  double cellHeight = (nlig+0.6) * cH;
+
+  int idxll = 0;
+  
+  int kl;
+  // on recherche la ligne la plus longue
+  for(kl=1; kl<nlig; kl++)
+    if ( lines[kl].length() > lines[idxll].length() )  idxll = kl;
+
+  double cellWidth =  1.1 * (double)g->CalcStringWidth(lines[idxll].c_str());
 
   double ofpx = spoX*(XMax()-XMin());
@@ -294,11 +296,10 @@
   yu = g->DeltaUCY(YMax(),cw);
   xu += ofpx;  yu += ofpy;
-  g->DrawString(xu, yu,label1);
-  cw +=  -1.15*cH;
-  yu = g->DeltaUCY(YMax(),cw);  yu += ofpy;
-  g->DrawString(xu, yu,label2);
-  cw +=  -1.15*cH;
-  yu = g->DeltaUCY(YMax(),cw);  yu += ofpy;
-  g->DrawString(xu, yu,label3);
+
+  for(kl=0; kl<nlig; kl++) {
+    g->DrawString(xu, yu, lines[kl].c_str() );
+    cw +=  -1.15*cH;
+    yu = g->DeltaUCY(YMax(),cw);  yu += ofpy;
+  }
                        
 }
