Index: trunk/SophyaPI/PIext/nomherradapter.cc
===================================================================
--- trunk/SophyaPI/PIext/nomherradapter.cc	(revision 3124)
+++ trunk/SophyaPI/PIext/nomherradapter.cc	(revision 3125)
@@ -8,6 +8,8 @@
 #include "nomherradapter.h"
 #include "servnobjm.h"
-/*  A_FAIRE_REZA      #include "pihisterr.h" */
-/*  A_FAIRE_REZA      #include "pihist2err.h" */
+
+#include "pihisto.h"   /* Wrapper pour HistoErr */
+#include "sohiswrap.h"   /* Wrapper pour HistoErr */
+
 
 #include "objfitter.h"
@@ -100,11 +102,13 @@
 PIDrawer* NOMAdapter_HistoErr::GetDrawer(string & dopt)
 {
-  /*  A_FAIRE_REZA    -> + des options pour choisir val / err2 / nb
-if (typeid(*mHerr) == typeid(HProf))  dopt = "fcirclemarker5 " + dopt;
-else dopt = "thinline " + dopt;
-PIHistoErr * pih = new PIHistoErr(mHerr, false);
+  /*  A_FAIRE_CMV    -> + des options pour choisir val / err2 / nb
+      pour les options, il faut rajouter des arguments ou methodes a 
+      la classe HistoErrWrapper() et modifier la methode  operator()(int_4 i) Error() 
+
+      Si besoin, modifier dopt apres... dopt = "fcirclemarker5 " + dopt;
+  */
+HistoErrWrapper* hw = new HistoErrWrapper(mHerr, false); // false: le Wrapper ne delete pas l'objet mHerr
+PIHisto * pih = new PIHisto(hw, true); // true: PIHisto delete l'objet HistoErrWrapper hw
 return( pih );
-  */
-  return NULL;
 }
 
Index: trunk/SophyaPI/PIext/nomherradapter.h
===================================================================
--- trunk/SophyaPI/PIext/nomherradapter.h	(revision 3124)
+++ trunk/SophyaPI/PIext/nomherradapter.h	(revision 3125)
@@ -1,6 +1,6 @@
 // This may look like C code, but it is really -*- C++ -*-
-// Adaptateur d objets (pour NamedObjMgr) pour Histos/NTuple
-//                                    Reza 05/99
-//  LAL-IN2P3/CNRS               CEA-DAPNIA     
+// Adaptateur d objets (pour NamedObjMgr) pour HistoErr
+//             C. Magneville                    2007
+// (C) LAL-IN2P3/CNRS               CEA-DAPNIA     
  
 #ifndef NOMHERRADAPTER_H_SEEN
Index: trunk/SophyaPI/PIext/nomhistadapter.cc
===================================================================
--- trunk/SophyaPI/PIext/nomhistadapter.cc	(revision 3124)
+++ trunk/SophyaPI/PIext/nomhistadapter.cc	(revision 3125)
@@ -8,4 +8,6 @@
 #include "nomhistadapter.h"
 #include "pihisto.h"
+#include "sohiswrap.h"
+
 #include "pihisto2d.h"
 #include "pipodrw.h"
@@ -153,5 +155,6 @@
 if (typeid(*mHis) == typeid(HProf))  dopt = "fcirclemarker5 " + dopt;
 else dopt = "thinline " + dopt;
-PIHisto * pih = new PIHisto(mHis, false);
+HistoWrapper* hw = new HistoWrapper(mHis, false); // false: le Wrapper ne delete pas l'objet Histo mHis
+PIHisto * pih = new PIHisto(hw, true); // true: PIHisto delete l'objet HistoWrapper hw
 return( pih );
 }
Index: trunk/SophyaPI/PIext/pawexecut.cc
===================================================================
--- trunk/SophyaPI/PIext/pawexecut.cc	(revision 3124)
+++ trunk/SophyaPI/PIext/pawexecut.cc	(revision 3125)
@@ -475,5 +475,5 @@
               PIHisto* pih = NULL;
               if( (pih = dynamic_cast<PIHisto *>(pidwr))==NULL ) continue;
-              Histo* h = pih->Histogram();
+              P1DHistoWrapper* h = pih->HistoWrapper();
               if(h==NULL) continue;
               if(h->NBins()<1) continue;
Index: trunk/SophyaPI/PIext/phistwrapper.h
===================================================================
--- trunk/SophyaPI/PIext/phistwrapper.h	(revision 3125)
+++ trunk/SophyaPI/PIext/phistwrapper.h	(revision 3125)
@@ -0,0 +1,43 @@
+// This may look like C code, but it is really -*- C++ -*-
+// Classe d'emballage (wrapper) d'histos pour trace PI 
+//       C. Magneville / R. Ansari             2007
+// (C)     CEA-DAPNIA      LAL-IN2P3/CNRS
+
+#ifndef PHISTOWRAPPER_H
+#define PHISTOWRAPPER_H
+
+#include <string> 
+#include <vector> 
+
+
+//! Wrapper class interface for 1d-histogram like objects , used by PIHisto
+class P1DHistoWrapper 
+{
+public:
+  virtual ~P1DHistoWrapper() { }
+
+  virtual int_4 NBins() = 0; 
+  virtual r_8 XMin() = 0; 
+  virtual r_8 XMax() = 0;
+  virtual r_8 BinWidth() = 0; 
+
+  virtual r_8 BinLowEdge(int_4 i) = 0;
+  virtual r_8 BinCenter(int_4 i) = 0;
+  virtual r_8 BinHighEdge(int_4 i) = 0;
+
+  // Renvoie contenu du bin i
+  virtual r_8 operator()(int_4 i) = 0;
+  virtual r_8 Error(int_4 i) = 0;
+
+  // Methode de mise a jour du contenu 
+  // avec implementation par defaut - ne faisant rien 
+  virtual void Update() { return; }
+
+  // ajoute des lignes de texte avec les infos statistiques (dans text)
+  // renvoie le nombre de lignes ajoutees - avec implementation par defaut
+  virtual int GetStatInfoAsText(vector<string> & /* text */ ) { return 0; }
+
+};
+
+
+#endif
Index: trunk/SophyaPI/PIext/piaversion.h
===================================================================
--- trunk/SophyaPI/PIext/piaversion.h	(revision 3124)
+++ trunk/SophyaPI/PIext/piaversion.h	(revision 3125)
@@ -2,5 +2,5 @@
 #define PIAPPVERSION_H_SEEN
 
-#define PIAPP_VERSIONNUMBER  4.0
+#define PIAPP_VERSIONNUMBER  4.1
 
 #endif
Index: trunk/SophyaPI/PIext/pihisto.cc
===================================================================
--- trunk/SophyaPI/PIext/pihisto.cc	(revision 3124)
+++ 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;
+  }
                        
 }
Index: trunk/SophyaPI/PIext/pihisto.h
===================================================================
--- trunk/SophyaPI/PIext/pihisto.h	(revision 3124)
+++ trunk/SophyaPI/PIext/pihisto.h	(revision 3125)
@@ -1,14 +1,17 @@
 // This may look like C code, but it is really -*- C++ -*-
 // Classe traceur d histogramme                 96-99
+//            C. Magneville / R. Ansari       2000-2007
 // CEA-DAPNIA      LAL-IN2P3/CNRS
+
 #ifndef PIHISTO_H
 #define PIHISTO_H
 
-#include "histos.h"
 #include "pidrawer.h"
+#include "phistwrapper.h"
+
 
 class PIHisto : public PIDrawer {
 public:
-                     PIHisto(Histo* histo, bool ad=false);
+                     PIHisto(P1DHistoWrapper* histo, bool ad=true);
   virtual           ~PIHisto();
   virtual void       Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax);
@@ -21,5 +24,5 @@
   inline  void       SetError(short fg=0) {error=fg;}
   inline  void       SetFilled(bool fg=false) {filled=fg;}
-  inline  Histo*     Histogram() {return(mHisto);}
+  inline  P1DHistoWrapper*     HistoWrapper() {return(mHisto);}
 
 //   Methode de decodage des options
@@ -33,5 +36,5 @@
 protected:
   virtual void       DrawStats(PIGraphicUC* g);
-  Histo* mHisto;
+  P1DHistoWrapper*   mHisto;
   bool mAdDO;
   bool stats,filled;
Index: trunk/SophyaPI/PIext/sohiswrap.h
===================================================================
--- trunk/SophyaPI/PIext/sohiswrap.h	(revision 3125)
+++ trunk/SophyaPI/PIext/sohiswrap.h	(revision 3125)
@@ -0,0 +1,110 @@
+// This may look like C code, but it is really -*- C++ -*-
+// Classes d'emballage (wrapper) d'histos SOPHYA/HiStats
+// pour trace par PIHisto 
+//       C. Magneville / R. Ansari             2007
+// (C)     CEA-DAPNIA            LAL-IN2P3/CNRS
+
+#ifndef SOHISWRAP_H
+#define SOHISWRAP_H
+
+#include "histos.h"
+#include "hisprof.h"
+#include "histerr.h"
+
+#include "pexceptions.h"
+
+#include "phistwrapper.h"
+
+namespace SOPHYA {
+ 
+//! Wrapper class for SOPHYA::Histo  , SOPHYA::HProf
+class HistoWrapper : public P1DHistoWrapper
+{
+public:
+  HistoWrapper(Histo* h, bool ad=true) 
+  {
+    if (h == NULL) throw NullPtrError("HistoWrapper(Histo* h = NULL)");
+    mHis = h;  mAD = ad;
+  }
+  ~HistoWrapper() { if (mAD) delete mHis; }
+
+  virtual int_4 NBins() { return mHis->NBins(); }
+  virtual r_8 XMin() { return mHis->XMin() ; } 
+  virtual r_8 XMax() { return mHis->XMax() ; } 
+  virtual r_8 BinWidth() { return mHis->BinWidth() ; } 
+
+  virtual r_8 BinLowEdge(int_4 i) { return mHis->BinLowEdge(i) ; }
+  virtual r_8 BinCenter(int_4 i) { return mHis->BinCenter(i) ; }
+  virtual r_8 BinHighEdge(int_4 i) { return mHis->BinHighEdge(i) ; }
+
+  virtual r_8 operator()(int_4 i) { return (*mHis)(i) ; }
+  virtual r_8 Error(int_4 i) { return mHis->Error(i) ; }
+
+  virtual void Update() { mHis->UpdateHisto(); }
+
+  // ajoute des lignes de texte avec les infos statistiques 
+  virtual int GetStatInfoAsText(vector<string> & text) 
+  {
+    char label[64];
+    string s;
+    sprintf(label, "N= %-g",mHis->NData());
+    s = label;   text.push_back(s);
+    sprintf(label, "m= %-g",mHis->Mean());
+    s = label;   text.push_back(s);
+    sprintf(label, "s= %-g",mHis->Sigma());
+    s = label;   text.push_back(s);
+    return 3;
+  }
+
+  // pointeur sur l'objet histo
+  inline Histo* getHisto() { return mHis; }
+protected:
+  Histo* mHis;
+  bool mAD;
+};
+
+
+//! Wrapper class for SOPHYA::HistoErr  
+class HistoErrWrapper : public P1DHistoWrapper 
+{
+public:
+  HistoErrWrapper(HistoErr* h, bool ad=false) 
+  {
+    if (h == NULL) throw NullPtrError("HistoWrapper(HistoErr* h = NULL)");
+    mHis = h;  mAD = ad;
+  }
+  ~HistoErrWrapper() { if (mAD) delete mHis; }
+
+  virtual int_4 NBins() { return mHis->NBins(); }
+  virtual r_8 XMin() { return mHis->XMin() ; } 
+  virtual r_8 XMax() { return mHis->XMax() ; } 
+  virtual r_8 BinWidth() { return mHis->BinWidth() ; } 
+
+  virtual r_8 BinLowEdge(int_4 i) { return mHis->BinLowEdge(i) ; }
+  virtual r_8 BinCenter(int_4 i) { return mHis->BinCenter(i) ; }
+  virtual r_8 BinHighEdge(int_4 i) { return mHis->BinHighEdge(i) ; }
+
+  virtual r_8 operator()(int_4 i) { return (*mHis)(i) ; }
+  virtual r_8 Error(int_4 i) { return mHis->Error(i) ; }
+
+  // CMV $CHECK$  pas besoin ? virtual void Update() { }
+
+  // ajoute des lignes de texte avec les infos statistiques 
+  virtual int GetStatInfoAsText(vector<string> & text) 
+  {
+    // CMV $CHECK$  Y-a-t il qque chose a ecrire ?
+    string s = "HistoErr"; 
+    text.push_back(s);
+    return 1;
+  }
+
+  // pointeur sur l'objet histo
+  inline HistoErr* getHistoErr() { return mHis; }
+protected:
+  HistoErr* mHis;
+  bool mAD;
+};
+
+} // Fin du namespace
+
+#endif
