Index: /trunk/SophyaPI/PIext/pihisto.cc
===================================================================
--- /trunk/SophyaPI/PIext/pihisto.cc	(revision 2228)
+++ /trunk/SophyaPI/PIext/pihisto.cc	(revision 2229)
@@ -38,4 +38,5 @@
   mAdDO = ad;     // Flag pour suppression automatique de mHisto
   SetStats(true);
+  SetError(0);
   SetName("HistoDrw");
 }
@@ -43,5 +44,5 @@
 PIHisto::~PIHisto()
 {
-  if (mAdDO) delete mHisto;
+  if(mAdDO) delete mHisto;
 }
 
@@ -64,7 +65,6 @@
     hmin -= v1;   hmax += v1;
   }
-  if(hmax<=hmin) hmax += 1.;
+  if(hmax<=hmin) hmax = hmin+1.;
   SetLimits(mHisto->XMin(), mHisto->XMax(), hmin, hmax);
-//  SetAxesFlags(kBoxAxes | kExtTicks | kLabels);   NE PAS faire Reza 11/99
 }
 
@@ -74,13 +74,34 @@
   if (axesFlags != kAxesNone) DrawAxes(g);
 
-  bool oktrace = false;
-  if (!mHisto)  return;  
-
-  if((GetGraphicAtt().GetMarker() != PI_NotDefMarker) ||  
-     (typeid(*mHisto) == typeid(HProf)) ) {
-    // Marqeurs definis OU HProf => marqueurs+Erreurs si il y en a
-    mHisto->UpdateHisto(); // pour le cas ou c'est un HProf
-    if(GetGraphicAtt().GetLineAtt() == PI_NotDefLineAtt) g->SelLine(PI_ThinLine);
-    double x1,y1, x2,y2;
+  if (!mHisto)  return;
+ 
+  if( typeid(*mHisto)==typeid(HProf) ) mHisto->UpdateHisto();
+
+  bool drawmarker=false, drawerr=false, oktrace=false;
+  // Tracer les marqueurs si demande ou si HProf
+  if( (GetGraphicAtt().GetMarker() != PI_NotDefMarker) ||  
+      (typeid(*mHisto) == typeid(HProf)) ) drawmarker = true;
+  if(error==0) {  // Gestion automatique des erreurs
+    // Tracer les erreurs si HProf
+    if( typeid(*mHisto)==typeid(HProf) ) drawerr=true;
+    // Trace les erreurs si marqueurs demandes
+    if(drawmarker) drawerr=true;
+  } else if(error>0) drawerr=true;
+
+  // Trace des marqeurs
+  if(drawmarker) {
+    double x1,y1; oktrace = true;
+    for(int i=0; i<mHisto->NBins(); i++) {
+      x1 = mHisto->BinCenter(i);
+      y1 = (*mHisto)(i);
+      g->DrawMarker(x1,y1);
+    }
+  }
+
+  // Trace des erreurs
+  // Si Marqeurs definis OU HProf => marqueurs+Erreurs si il y en a
+  if(drawerr) {
+    if(GetGraphicAtt().GetLineAtt()==PI_NotDefLineAtt) g->SelLine(PI_ThinLine);
+    double x1,x2,y1,y2;  oktrace = true;
     double bw = mHisto->BinWidth();
     for(int i=0; i<mHisto->NBins(); i++) {
@@ -96,13 +117,10 @@
         g->DrawLine(x1,y2, x2, y2);
       }
-      // le marqueur
-      x1 = mHisto->BinCenter(i);
-      y1 = (*mHisto)(i);
-      g->DrawMarker(x1,y1);
-    }
-    oktrace = true;
-  }
+    }
+  }
+
+  // Trace de la ligne continue
   if(GetGraphicAtt().GetLineAtt() != PI_NotDefLineAtt) {
-    double x1,y1, x2, y2;
+    double x1,y1, x2, y2; oktrace = true;
     x1 = mHisto->BinLowEdge(0);
     y1 = 0;
@@ -117,6 +135,7 @@
     }
     y2 = 0; g->DrawLine(x1,y1, x2, y2);
-    oktrace = true;
-  }
+  }
+
+  // Si rien n'a ete trace
   if( !oktrace ) {
     for(int i=0; i<mHisto->NBins(); i++) {
@@ -126,7 +145,9 @@
       double height = (*mHisto)(i);
       g->DrawFBox(left,bottom,width,height);
-      g->DrawLine(left, bottom, left, bottom + height); // Au moins une ligne...
-    }
-  }
+      g->DrawLine(left, bottom, left, bottom+height); // Au moins une ligne...
+    }
+  }
+
+  // Trace/Ecriture des statistiques
   // A faire a la fin - DrawStats change l'attribut de ligne 
   if(stats) DrawStats(g);
@@ -136,7 +157,8 @@
 PIHisto::DecodeOptionString(vector<string> & opt, bool rmdecopt)
 {
-  if (opt.size() < 1)  return(0);  
+  int optsz1 = opt.size();
+  if(optsz1<1) return(0); 
   int ndec1 = PIDrawer::DecodeOptionString(opt, rmdecopt);
-  if ((opt.size() - ndec1) < 1) return(ndec1);  // si tout a ete decode
+  if(optsz1-ndec1<1) return(ndec1);  // si tout a ete decode
 
   vector<string> udopt;  // On gardera ici les options non decodees
@@ -145,6 +167,10 @@
   for( k=0; k<opt.size(); k++ ) {
     string opts = opt[k];
-    if (opts == "stat")  SetStats(true);
-    else if (opts == "nostat")  SetStats(false);
+    if(opts=="sta" || opts=="stat" || opts=="stats") SetStats(true);
+    else if(  opts=="nsta"   || opts=="nstat"
+           || opts=="nostat" || opts=="nostats") SetStats(false);
+    else if(opts=="err")      SetError(1);
+    else if(opts=="noerr")    SetError(-1);
+    else if(opts=="autoerr")  SetError(0);
     else {
       ndec--;
@@ -152,9 +178,22 @@
       if (rmdecopt)  udopt.push_back(opts);
     }
-  }  
+  }
   // S'il faut supprimer les options decodees, on remplace l'argument opt
   // par le vecteur des options non decodees.
   if (rmdecopt)  opt = udopt;
-  return(ndec+ndec1);  
+  return(ndec+ndec1);
+}
+
+void
+PIHisto::GetOptionsHelpInfo(string& info)
+{
+// On recupere d'abord la chaine info de la classe de base
+PIDrawer::GetOptionsHelpInfo(info);
+info += " ---- PIHisto options help info : \n" ;
+info += "- sta,stat,stats:            activate   statistic display\n";
+info += "  nsta,nstat,nostat,nostats: deactivate statistic display\n";
+info += "- err / nerr : draw, do not draw error bars\n";
+info += "  autoerr : draw error bars if Marker drawing requested OR Profile histo\n";
+return;
 }
 
Index: /trunk/SophyaPI/PIext/pihisto.h
===================================================================
--- /trunk/SophyaPI/PIext/pihisto.h	(revision 2228)
+++ /trunk/SophyaPI/PIext/pihisto.h	(revision 2229)
@@ -14,9 +14,13 @@
   virtual void       Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax);
   virtual void       UpdateLimits();
-  inline  void       SetStats(bool fg=true) { stats = fg; }
-  inline  Histo*     Histogram() { return(mHisto); }
+  inline  void       SetStats(bool fg=true) {stats=fg;}
+  // fg=-1 pas de barre d'erreur, 1=barres d'erreurs,
+  // 0=barres d'erreurs automatiques: trace si HProf ou markeur demande
+  inline  void       SetError(unsigned short fg=0) {error=fg;}
+  inline  Histo*     Histogram() {return(mHisto);}
 
 //   Methode de decodage des options
   virtual int        DecodeOptionString(vector<string> & opt, bool rmdecopt=true);
+  virtual void       GetOptionsHelpInfo(string& info);
 
 protected:
@@ -24,5 +28,5 @@
   Histo* mHisto;
   bool mAdDO;
-  bool stats;        // true -> indication des stats d'histo
+  bool stats,error;
 };
 
Index: /trunk/SophyaPI/PIext/pintuple.cc
===================================================================
--- /trunk/SophyaPI/PIext/pintuple.cc	(revision 2228)
+++ /trunk/SophyaPI/PIext/pintuple.cc	(revision 2229)
@@ -270,10 +270,11 @@
 int PINTuple::DecodeOptionString(vector<string> & opt, bool rmdecopt)
 {
-  if (opt.size() < 1)  return(0);  
+  int optsz1 = opt.size();
+  if(optsz1<1)  return(0);  
   // On appelle d'abord le decodage de la classe PIDrawer de laquelle
   // on herite. (Pas obligatoire) on decode donc ici les attributs de
   // couleur, fontes ...
   int ndec1 = PIDrawer::DecodeOptionString(opt, rmdecopt);
-  if ((opt.size() - ndec1) < 1) return(ndec1);  // si tout a ete decode
+  if(optsz1-ndec1<1) return(ndec1);  // si tout a ete decode
 
   vector<string> udopt;  // On gardera ici les options non decodees
@@ -282,6 +283,7 @@
   for( k=0; k<opt.size(); k++ ) {
     string opts = opt[k];
-    if (opts == "stat")  SetStats(true);
-    else if (opts == "nostat")  SetStats(false);
+    if(opts=="sta" || opts=="stat" || opts=="stats") SetStats(true);
+    else if(  opts=="nsta"   || opts=="nstat"
+           || opts=="nostat" || opts=="nostats") SetStats(false);
     else {
       // Si option non decode
@@ -306,8 +308,9 @@
 void PINTuple::GetOptionsHelpInfo(string& info)
 {
-  // On recupere d'abord la chaine info de la classe de base
-  PIDrawer::GetOptionsHelpInfo(info);
-  info += " ---- PINTuple options help info : \n" ;
-  info += "    stat / nostat : activate/deactivate statistic information display \n";
-  return;
-}
+// On recupere d'abord la chaine info de la classe de base
+PIDrawer::GetOptionsHelpInfo(info);
+info += " ---- PINTuple options help info : \n" ;
+info += "- sta,stat,stats:            activate   statistic display\n";
+info += "  nsta,nstat,nostat,nostats: deactivate statistic display\n";
+return;
+}
