// @(#)root/graf:$Id$
// Author: Rene Brun   15/03/99

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#include "Riostream.h"
#include "TROOT.h"
#include "TPaveStats.h"
#include "TPaveLabel.h"
#include "TVirtualPad.h"
#include "TStyle.h"
#include "TClass.h"
#include "TLatex.h"

ClassImp(TPaveStats)


//______________________________________________________________________________
/* Begin_Html
<center><h2>The histogram statistics painter class</h2></center>
A PaveStats is a PaveText to draw histogram statistics and fit parameters.
<ul>
<li><a href="#PS01">Statistics Display</a>
<li><a href="#PS02">Fit Statistics</a>
<li><a href="#PS03">Statistics box editing</a>
</ul>

<a name="PS01"></a><h3>Statistics Display</h3>

The type of information shown in the histogram statistics box can be selected
with:
<pre>
      gStyle->SetOptStat(mode);
</pre>

<p>The "<tt>mode</tt>" has up to nine digits that can be set to on (1 or 2), off (0).
<pre>
      mode = ksiourmen  (default = 000001111)
      k = 1;  kurtosis printed
      k = 2;  kurtosis and kurtosis error printed
      s = 1;  skewness printed
      s = 2;  skewness and skewness error printed
      i = 1;  integral of bins printed
      o = 1;  number of overflows printed
      u = 1;  number of underflows printed
      r = 1;  rms printed
      r = 2;  rms and rms error printed
      m = 1;  mean value printed
      m = 2;  mean and mean error values printed
      e = 1;  number of entries printed
      n = 1;  name of histogram is printed
</pre>

<p>For example:
<pre>
      gStyle->SetOptStat(11);
</pre>
displays only the name of histogram and the number of entries, whereas:
<pre>
      gStyle->SetOptStat(1101);
</pre>
displays the name of histogram, mean value and RMS.

<p><b>WARNING 1:</b> never do:
<pre>
      <s>gStyle->SetOptStat(0001111);</s>
</pre>
but instead do:
<pre>
      gStyle->SetOptStat(1111);
</pre>
because <tt>0001111</tt> will be taken as an octal number!

<p><b>WARNING 2:</b> for backward compatibility with older versions
<pre>
      gStyle->SetOptStat(1);
</pre>
is taken as:
<pre>
      gStyle->SetOptStat(1111)
</pre>
To print only the name of the histogram do:
<pre>
      gStyle->SetOptStat(1000000001);
</pre>

<p><b>NOTE</b> that in case of 2D histograms, when selecting only underflow
(10000) or overflow (100000), the statistics box will show all combinations
of underflow/overflows and not just one single number.

<p>The parameter mode can be any combination of the letters <tt>kKsSiourRmMen</tt>
<pre>
      k :  kurtosis printed
      K :  kurtosis and kurtosis error printed
      s :  skewness printed
      S :  skewness and skewness error printed
      i :  integral of bins printed
      o :  number of overflows printed
      u :  number of underflows printed
      r :  rms printed
      R :  rms and rms error printed
      m :  mean value printed
      M :  mean value mean error values printed
      e :  number of entries printed
      n :  name of histogram is printed
</pre>

<p>For example, to print only name of histogram and number of entries do:
<pre>
      gStyle->SetOptStat("ne");
</pre>

<p>To print only the name of the histogram do:
<pre>
      gStyle->SetOptStat("n");
</pre>

<p>The default value is:
<pre>
      gStyle->SetOptStat("nemr");
</pre>

<p>When a histogram is painted, a <tt>TPaveStats</tt> object is created and added
to the list of functions of the histogram. If a <tt>TPaveStats</tt> object
already exists in the histogram list of functions, the existing object is just
updated with the current histogram parameters.

<p>Once a histogram is painted, the statistics box can be accessed using
<tt>h->FindObject("stats")</tt>. In the command line it is enough to do:
<pre>
      Root > h->Draw()
      Root > TPaveStats *st = (TPaveStats*)h->FindObject("stats")
</pre>

<p>because after <tt>h->Draw()</tt> the histogram is automatically painted. But
in a script file the painting should be forced using <tt>gPad->Update()</tt>
in order to make sure the statistics box is created:
<pre>
      h->Draw();
      gPad->Update();
      TPaveStats *st = (TPaveStats*)h->FindObject("stats");
</pre>

<p>Without <tt>gPad->Update()</tt> the line <tt>h->FindObject("stats")</tt>
returns a null pointer.

<p>When a histogram is drawn with the option "<tt>SAME</tt>", the statistics box
is not drawn. To force the statistics box drawing with the option
"<tt>SAME</tt>", the option "<tt>SAMES</tt>" must be used.
If the new statistics box hides the previous statistics box, one can change
its position with these lines ("<tt>h</tt>" being the pointer to the histogram):
<pre>
      Root > TPaveStats *st = (TPaveStats*)h->FindObject("stats")
      Root > st->SetX1NDC(newx1); //new x start position
      Root > st->SetX2NDC(newx2); //new x end position
</pre>

<p>To change the type of information for an histogram with an existing
<tt>TPaveStats</tt> one should do:
<pre>
      st->SetOptStat(mode);
</pre>
Where "<tt>mode</tt>" has the same meaning than when calling
<tt>gStyle->SetOptStat(mode)</tt> (see above).

<p>One can delete the statistics box for a histogram <tt>TH1* h</tt> with:
<pre>
      h->SetStats(0)
</pre>

<p>and activate it again with:
<pre>
      h->SetStats(1).
</pre>


<a name="PS02"></a><h3>Fit Statistics</h3>


The type of information about fit parameters printed in the histogram statistics
box can be selected via the parameter mode. The parameter mode can be
<tt>= pcev</tt>  (default <tt>= 0111</tt>)
<pre>
      p = 1;  print Probability
      c = 1;  print Chisquare/Number of degrees of freedom
      e = 1;  print errors (if e=1, v must be 1)
      v = 1;  print name/values of parameters
</pre>
Example:
<pre>
      gStyle->SetOptFit(1011);
</pre>
print fit probability, parameter names/values and errors.
<ol>
<li> When <tt>"v" = 1</tt> is specified, only the non-fixed parameters are
     shown.
<li> When <tt>"v" = 2</tt> all parameters are shown.
</ol>
Note: <tt>gStyle->SetOptFit(1)</tt> means "default value", so it is equivalent
to <tt>gStyle->SetOptFit(111)</tt>


<a name="PS03"></a><h3>Statistics box editing</h3>

The following example show how to remove and add a line in a statistics box.
End_Html
Begin_Macro(source)
../../../tutorials/hist/statsEditing.C
End_Macro */


const UInt_t kTakeStyle = BIT(17); //see TStyle::SetOptFit/Stat


//______________________________________________________________________________
TPaveStats::TPaveStats(): TPaveText()
{
   /* Begin_Html
   TPaveStats default constructor.
   End_Html */

   fParent  = 0;
   fOptFit  = gStyle->GetOptFit();
   fOptStat = gStyle->GetOptStat();
}


//______________________________________________________________________________
TPaveStats::TPaveStats(Double_t x1, Double_t y1,Double_t x2, Double_t  y2, Option_t *option)
           :TPaveText(x1,y1,x2,y2,option)
{
   /* Begin_Html
   TPaveStats normal constructor.
   End_Html */

   fParent = 0;
   fOptFit  = gStyle->GetOptFit();
   fOptStat = gStyle->GetOptStat();
   SetFitFormat(gStyle->GetFitFormat());
   SetStatFormat(gStyle->GetStatFormat());
}


//______________________________________________________________________________
TPaveStats::~TPaveStats()
{
   /* Begin_Html
   TPaveStats default destructor.
   End_Html */

   if ( fParent && !fParent->TestBit(kInvalidObject)) fParent->RecursiveRemove(this);
}


//______________________________________________________________________________
Int_t TPaveStats::GetOptFit() const
{
   /* Begin_Html
   Return the fit option.
   End_Html */

   if (TestBit(kTakeStyle)) return gStyle->GetOptFit();
   return fOptFit;
}


//______________________________________________________________________________
Int_t TPaveStats::GetOptStat() const
{
   /* Begin_Html
   Return the stat option.
   End_Html */

   if (TestBit(kTakeStyle)) return gStyle->GetOptStat();
   return fOptStat;
}


//______________________________________________________________________________
void TPaveStats::SaveStyle()
{
   /* Begin_Html
   Save This TPaveStats options in current style.
   End_Html */

   gStyle->SetOptFit(fOptFit);
   gStyle->SetOptStat(fOptStat);
   gStyle->SetFitFormat(fFitFormat.Data());
   gStyle->SetStatFormat(fStatFormat.Data());
}


//______________________________________________________________________________
void TPaveStats::SetFitFormat(const char *form)
{
   /* Begin_Html
   Change (i.e. set) the format for printing fit parameters in statistics box.
   End_Html */

   fFitFormat = form;
}


//______________________________________________________________________________
void TPaveStats::SetOptFit(Int_t fit)
{
   /* Begin_Html
   Set the fit option.
   End_Html */

   fOptFit = fit;
   ResetBit(kTakeStyle);
}


//______________________________________________________________________________
void TPaveStats::SetOptStat(Int_t stat)
{
   /* Begin_Html
   Set the stat option.
   End_Html */

   fOptStat = stat;
   ResetBit(kTakeStyle);
}


//______________________________________________________________________________
void TPaveStats::SetStatFormat(const char *form)
{
   /* Begin_Html
   Change (i.e. set) the format for printing statistics.
   End_Html */

   fStatFormat = form;
}


//______________________________________________________________________________
void TPaveStats::Paint(Option_t *option)
{
   /* Begin_Html
   Paint the pave stat.
   End_Html */

   TPave::ConvertNDCtoPad();
   TPave::PaintPave(fX1,fY1,fX2,fY2,GetBorderSize(),option);

   if (!fLines) return;
   TString typolabel;
   Double_t y2ref = TMath::Max(fY1,fY2);
   Double_t x1ref = TMath::Min(fX1,fX2);
   Double_t x2ref = TMath::Max(fX1,fX2);
   Double_t dx    = TMath::Abs(fX2 - fX1);
   Double_t dy    = TMath::Abs(fY2 - fY1);
   Double_t titlesize=0;
   Double_t textsize = GetTextSize();
   Int_t nlines = GetSize();
   if (nlines == 0) nlines = 5;
   Int_t print_name = fOptStat%10;

   // Evaluate text size as a function of the number of lines
   Double_t y1       = gPad->GetY1();
   Double_t y2       = gPad->GetY2();
   Float_t margin    = fMargin*dx;
   Double_t yspace   = dy/Double_t(nlines);
   Double_t textsave = textsize;
   TObject *line;
   TLatex *latex, *latex_tok;
   TIter next(fLines);
   Double_t longest = 0, titlelength = 0;
   Double_t w, wtok[2];
   char *st, *sl=0;
   if (textsize == 0)  {
      textsize = 0.92*yspace/(y2 - y1);
      titlesize = textsize;
      wtok[0] = 0; wtok[1] = 0;
      while ((line = (TObject*) next())) {
         if (line->IsA() == TLatex::Class()) {
            latex = (TLatex*)line;
            Int_t nchs = strlen(latex->GetTitle());
            sl = new char[nchs+1];
            strlcpy(sl, latex->GetTitle(),nchs+1);
            if (strpbrk(sl, "=") !=0 && print_name == 0) {
               st = strtok(sl, "=");
               Int_t itok = 0;
               while ( st !=0 ) {
                  latex_tok = new TLatex(0.,0.,st);
                  Style_t tfont = latex->GetTextFont();
                  if (tfont == 0) tfont = GetTextFont();
                  latex_tok->SetTextFont(tfont);
                  latex_tok->SetTextSize(textsize);
                  w = latex_tok->GetXsize();
                  if (w > wtok[itok]) wtok[itok] = w;
                  st = strtok(0, "=");
                  ++itok;
                  delete latex_tok;
               }
            } else if (strpbrk(sl, "|") !=0) {
            } else {
               print_name = 0;
               Style_t tfont = latex->GetTextFont();
               if (tfont == 0) latex->SetTextFont(GetTextFont());
               latex->SetTextSize(titlesize);
               titlelength = latex->GetXsize()+2.*margin;
               if (titlelength > 0.98*dx) titlesize *= 0.98*dx/titlelength;
               latex->SetTextFont(tfont);
            }
            delete [] sl; sl = 0;
         }
      }
      longest = wtok[0]+wtok[1]+2.*margin;
      if (longest > 0.98*dx) textsize *= 0.98*dx/longest;
      SetTextSize(textsize);
   } else {
      titlesize = textsize;
   }
   Double_t ytext = y2ref + 0.5*yspace;
   Double_t xtext = 0;
   print_name = fOptStat%10;

   // Iterate over all lines
   // Copy pavetext attributes to line attributes if line attributes not set
   next.Reset();
   while ((line = (TObject*) next())) {
      if (line->IsA() == TLatex::Class()) {
         latex = (TLatex*)line;
         ytext -= yspace;
         Double_t xl    = latex->GetX();
         Double_t yl    = latex->GetY();
         Short_t talign = latex->GetTextAlign();
         Color_t tcolor = latex->GetTextColor();
         Style_t tfont  = latex->GetTextFont();
         Size_t  tsize  = latex->GetTextSize();
         if (tcolor == 0) latex->SetTextColor(GetTextColor());
         if (tfont  == 0) latex->SetTextFont(GetTextFont());
         if (tsize  == 0) latex->SetTextSize(GetTextSize());

         Int_t nchs = strlen(latex->GetTitle());
         sl = new char[nchs+1];
         strlcpy(sl, latex->GetTitle(),nchs+1);
         // Draw all the histogram stats except the 2D under/overflow
         if (strpbrk(sl, "=") !=0 && print_name == 0) {
            st = strtok(sl, "=");
            Int_t halign = 12;
            while ( st !=0 ) {
               typolabel = st;
               latex->SetTextAlign(halign);
               if (halign == 12) xtext = x1ref + margin;
               if (halign == 32) {
                  xtext = x2ref - margin;
                  typolabel = typolabel.Strip();
                  typolabel.ReplaceAll("-","#minus");
               }
               latex->PaintLatex(xtext,ytext,latex->GetTextAngle(),
                                             latex->GetTextSize(),
                                             typolabel.Data());
               st = strtok(0, "=");
               halign = 32;
            }
         // Draw the 2D under/overflow
         } else if (strpbrk(sl, "|") !=0) {
            Double_t yline1 = ytext+yspace/2.;
            Double_t yline2 = ytext-yspace/2.;
            Double_t xline1 = dx/3+x1ref;
            Double_t xline2 = 2*dx/3+x1ref;
            gPad->PaintLine(x1ref,yline1,x2ref,yline1);
            gPad->PaintLine(xline1,yline1,xline1,yline2);
            gPad->PaintLine(xline2,yline1,xline2,yline2);
            st = strtok(sl, "|");
            Int_t theIndex = 0;
            while ( st !=0 ) {
               latex->SetTextAlign(22);
               if (theIndex == 0) xtext = 0.5*(x1ref+xline1);
               if (theIndex == 1) xtext = 0.5*(x1ref+x2ref);
               if (theIndex == 2) xtext = 0.5*(xline2+x2ref);
               typolabel = st;
               typolabel.ReplaceAll("-", "#minus");
               latex->PaintLatex(xtext,ytext,latex->GetTextAngle(),
                                             latex->GetTextSize(),
                                             typolabel.Data());
               theIndex++;
               st = strtok(0, "|");
            }
         // Draw the histogram identifier
         } else {
            print_name = 0;
            latex->SetTextAlign(22);
            xtext = 0.5*(x1ref+x2ref);
            latex->PaintLatex(xtext,ytext,latex->GetTextAngle(),
                                          titlesize,
                                          sl);
            gPad->PaintLine(x1ref,y2ref-yspace,x2ref,y2ref-yspace);
         }
         delete [] sl;

         latex->SetTextAlign(talign);
         latex->SetTextColor(tcolor);
         latex->SetTextFont(tfont);
         latex->SetTextSize(tsize);
         latex->SetX(xl);  //paintlatex modifies fX and fY
         latex->SetY(yl);
      }
   }
   SetTextSize(textsave);

   // if a label create & paint a pavetext title
   if (fLabel.Length() > 0) {
      Double_t x1,x2;
      dy = gPad->GetY2() - gPad->GetY1();
      x1 = x1ref + 0.25*dx;
      x2 = x2ref - 0.25*dx;
      y1 = y2ref - 0.02*dy;
      y2 = y2ref + 0.02*dy;
      TPaveLabel *title = new TPaveLabel(x1,y1,x2,y2,fLabel.Data(),GetDrawOption());
      title->SetFillColor(GetFillColor());
      title->SetTextColor(GetTextColor());
      title->SetTextFont(GetTextFont());
      title->Paint();
      delete title;
   }
}


//______________________________________________________________________________
void TPaveStats::SavePrimitive(std::ostream &out, Option_t * /*= ""*/)
{
   /* Begin_Html
   Save primitive as a C++ statement(s) on output stream out.
   End_Html */

   char quote = '"';
   out<<"   "<<std::endl;
   if (gROOT->ClassSaved(TPaveStats::Class())) {
      out<<"   ";
   } else {
      out<<"   "<<ClassName()<<" *";
   }
   if (fOption.Contains("NDC")) {
      out<<"ptstats = new "<<ClassName()<<"("<<fX1NDC<<","<<fY1NDC<<","<<fX2NDC<<","<<fY2NDC
      <<","<<quote<<fOption<<quote<<");"<<std::endl;
   } else {
      out<<"ptstats = new "<<ClassName()<<"("<<fX1<<","<<fY1<<","<<fX2<<","<<fY2
      <<","<<quote<<fOption<<quote<<");"<<std::endl;
   }
   if (strcmp(GetName(),"TPave")) {
      out<<"   ptstats->SetName("<<quote<<GetName()<<quote<<");"<<std::endl;
   }
   if (fBorderSize != 4) {
      out<<"   ptstats->SetBorderSize("<<fBorderSize<<");"<<std::endl;
   }
   SaveFillAttributes(out,"ptstats",19,1001);
   SaveLineAttributes(out,"ptstats",1,1,1);
   SaveTextAttributes(out,"ptstats",22,0,1,62,0);
   SaveLines(out,"ptstats");
   out<<"   ptstats->SetOptStat("<<GetOptStat()<<");"<<std::endl;
   out<<"   ptstats->SetOptFit("<<GetOptFit()<<");"<<std::endl;
   out<<"   ptstats->Draw();"<<std::endl;
}


//______________________________________________________________________________
void TPaveStats::Streamer(TBuffer &R__b)
{
   /* Begin_Html
   Stream an object of class TPaveStats.
   End_Html */

   if (R__b.IsReading()) {
      UInt_t R__s, R__c;
      Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
      if (R__v > 2) {
         R__b.ReadClassBuffer(TPaveStats::Class(), this, R__v, R__s, R__c);
         return;
      }
      //====process old versions before automatic schema evolution
      TPaveText::Streamer(R__b);
      R__b >> fOptFit;
      R__b >> fOptStat;
      if (R__v > 1 || R__b.GetVersionOwner() == 22304) {
         fFitFormat.Streamer(R__b);
         fStatFormat.Streamer(R__b);
      } else {
         SetFitFormat();
         SetStatFormat();
      }
      R__b.CheckByteCount(R__s, R__c, TPaveStats::IsA());
      //====end of old versions

   } else {
      R__b.WriteClassBuffer(TPaveStats::Class(),this);
   }
}


//______________________________________________________________________________
void TPaveStats::UseCurrentStyle()
{
   /* Begin_Html
   Replace current attributes by current style.
   End_Html */

   if (gStyle->IsReading()) {
      SetOptStat(gStyle->GetOptStat());
      SetOptFit(gStyle->GetOptFit());
      SetStatFormat(gStyle->GetStatFormat());
      SetFitFormat(gStyle->GetFitFormat());
      SetBorderSize(gStyle->GetStatBorderSize());
      SetFillColor(gStyle->GetStatColor());
      SetFillStyle(gStyle->GetStatStyle());
      SetTextFont(gStyle->GetStatFont());
      SetTextSize(gStyle->GetStatFontSize());
      SetTextColor(gStyle->GetStatTextColor());
      SetX2NDC(gStyle->GetStatX());
      SetY2NDC(gStyle->GetStatY());
      SetX1NDC(gStyle->GetStatX()-gStyle->GetStatW());
      SetY1NDC(gStyle->GetStatY()-gStyle->GetStatH());
   } else {
      gStyle->SetOptStat(GetOptStat());
      gStyle->SetOptFit(GetOptFit());
      gStyle->SetStatFormat(GetStatFormat());
      gStyle->SetFitFormat(GetFitFormat());
      gStyle->SetStatBorderSize(GetBorderSize());
      gStyle->SetTextColor(GetTextColor());
      gStyle->SetStatColor(GetFillColor());
      gStyle->SetStatStyle(GetFillStyle());
      gStyle->SetTextFont(GetTextFont());
      gStyle->SetStatFontSize(GetTextSize());
      gStyle->SetStatTextColor(GetTextColor());
      gStyle->SetStatX(GetX2NDC());
      gStyle->SetStatY(GetY2NDC());
      gStyle->SetStatW(GetX2NDC()-GetX1NDC());
      gStyle->SetStatH(GetY2NDC()-GetY1NDC());
   }
}
 TPaveStats.cxx:1
 TPaveStats.cxx:2
 TPaveStats.cxx:3
 TPaveStats.cxx:4
 TPaveStats.cxx:5
 TPaveStats.cxx:6
 TPaveStats.cxx:7
 TPaveStats.cxx:8
 TPaveStats.cxx:9
 TPaveStats.cxx:10
 TPaveStats.cxx:11
 TPaveStats.cxx:12
 TPaveStats.cxx:13
 TPaveStats.cxx:14
 TPaveStats.cxx:15
 TPaveStats.cxx:16
 TPaveStats.cxx:17
 TPaveStats.cxx:18
 TPaveStats.cxx:19
 TPaveStats.cxx:20
 TPaveStats.cxx:21
 TPaveStats.cxx:22
 TPaveStats.cxx:23
 TPaveStats.cxx:24
 TPaveStats.cxx:25
 TPaveStats.cxx:26
 TPaveStats.cxx:27
 TPaveStats.cxx:28
 TPaveStats.cxx:29
 TPaveStats.cxx:30
 TPaveStats.cxx:31
 TPaveStats.cxx:32
 TPaveStats.cxx:33
 TPaveStats.cxx:34
 TPaveStats.cxx:35
 TPaveStats.cxx:36
 TPaveStats.cxx:37
 TPaveStats.cxx:38
 TPaveStats.cxx:39
 TPaveStats.cxx:40
 TPaveStats.cxx:41
 TPaveStats.cxx:42
 TPaveStats.cxx:43
 TPaveStats.cxx:44
 TPaveStats.cxx:45
 TPaveStats.cxx:46
 TPaveStats.cxx:47
 TPaveStats.cxx:48
 TPaveStats.cxx:49
 TPaveStats.cxx:50
 TPaveStats.cxx:51
 TPaveStats.cxx:52
 TPaveStats.cxx:53
 TPaveStats.cxx:54
 TPaveStats.cxx:55
 TPaveStats.cxx:56
 TPaveStats.cxx:57
 TPaveStats.cxx:58
 TPaveStats.cxx:59
 TPaveStats.cxx:60
 TPaveStats.cxx:61
 TPaveStats.cxx:62
 TPaveStats.cxx:63
 TPaveStats.cxx:64
 TPaveStats.cxx:65
 TPaveStats.cxx:66
 TPaveStats.cxx:67
 TPaveStats.cxx:68
 TPaveStats.cxx:69
 TPaveStats.cxx:70
 TPaveStats.cxx:71
 TPaveStats.cxx:72
 TPaveStats.cxx:73
 TPaveStats.cxx:74
 TPaveStats.cxx:75
 TPaveStats.cxx:76
 TPaveStats.cxx:77
 TPaveStats.cxx:78
 TPaveStats.cxx:79
 TPaveStats.cxx:80
 TPaveStats.cxx:81
 TPaveStats.cxx:82
 TPaveStats.cxx:83
 TPaveStats.cxx:84
 TPaveStats.cxx:85
 TPaveStats.cxx:86
 TPaveStats.cxx:87
 TPaveStats.cxx:88
 TPaveStats.cxx:89
 TPaveStats.cxx:90
 TPaveStats.cxx:91
 TPaveStats.cxx:92
 TPaveStats.cxx:93
 TPaveStats.cxx:94
 TPaveStats.cxx:95
 TPaveStats.cxx:96
 TPaveStats.cxx:97
 TPaveStats.cxx:98
 TPaveStats.cxx:99
 TPaveStats.cxx:100
 TPaveStats.cxx:101
 TPaveStats.cxx:102
 TPaveStats.cxx:103
 TPaveStats.cxx:104
 TPaveStats.cxx:105
 TPaveStats.cxx:106
 TPaveStats.cxx:107
 TPaveStats.cxx:108
 TPaveStats.cxx:109
 TPaveStats.cxx:110
 TPaveStats.cxx:111
 TPaveStats.cxx:112
 TPaveStats.cxx:113
 TPaveStats.cxx:114
 TPaveStats.cxx:115
 TPaveStats.cxx:116
 TPaveStats.cxx:117
 TPaveStats.cxx:118
 TPaveStats.cxx:119
 TPaveStats.cxx:120
 TPaveStats.cxx:121
 TPaveStats.cxx:122
 TPaveStats.cxx:123
 TPaveStats.cxx:124
 TPaveStats.cxx:125
 TPaveStats.cxx:126
 TPaveStats.cxx:127
 TPaveStats.cxx:128
 TPaveStats.cxx:129
 TPaveStats.cxx:130
 TPaveStats.cxx:131
 TPaveStats.cxx:132
 TPaveStats.cxx:133
 TPaveStats.cxx:134
 TPaveStats.cxx:135
 TPaveStats.cxx:136
 TPaveStats.cxx:137
 TPaveStats.cxx:138
 TPaveStats.cxx:139
 TPaveStats.cxx:140
 TPaveStats.cxx:141
 TPaveStats.cxx:142
 TPaveStats.cxx:143
 TPaveStats.cxx:144
 TPaveStats.cxx:145
 TPaveStats.cxx:146
 TPaveStats.cxx:147
 TPaveStats.cxx:148
 TPaveStats.cxx:149
 TPaveStats.cxx:150
 TPaveStats.cxx:151
 TPaveStats.cxx:152
 TPaveStats.cxx:153
 TPaveStats.cxx:154
 TPaveStats.cxx:155
 TPaveStats.cxx:156
 TPaveStats.cxx:157
 TPaveStats.cxx:158
 TPaveStats.cxx:159
 TPaveStats.cxx:160
 TPaveStats.cxx:161
 TPaveStats.cxx:162
 TPaveStats.cxx:163
 TPaveStats.cxx:164
 TPaveStats.cxx:165
 TPaveStats.cxx:166
 TPaveStats.cxx:167
 TPaveStats.cxx:168
 TPaveStats.cxx:169
 TPaveStats.cxx:170
 TPaveStats.cxx:171
 TPaveStats.cxx:172
 TPaveStats.cxx:173
 TPaveStats.cxx:174
 TPaveStats.cxx:175
 TPaveStats.cxx:176
 TPaveStats.cxx:177
 TPaveStats.cxx:178
 TPaveStats.cxx:179
 TPaveStats.cxx:180
 TPaveStats.cxx:181
 TPaveStats.cxx:182
 TPaveStats.cxx:183
 TPaveStats.cxx:184
 TPaveStats.cxx:185
 TPaveStats.cxx:186
 TPaveStats.cxx:187
 TPaveStats.cxx:188
 TPaveStats.cxx:189
 TPaveStats.cxx:190
 TPaveStats.cxx:191
 TPaveStats.cxx:192
 TPaveStats.cxx:193
 TPaveStats.cxx:194
 TPaveStats.cxx:195
 TPaveStats.cxx:196
 TPaveStats.cxx:197
 TPaveStats.cxx:198
 TPaveStats.cxx:199
 TPaveStats.cxx:200
 TPaveStats.cxx:201
 TPaveStats.cxx:202
 TPaveStats.cxx:203
 TPaveStats.cxx:204
 TPaveStats.cxx:205
 TPaveStats.cxx:206
 TPaveStats.cxx:207
 TPaveStats.cxx:208
 TPaveStats.cxx:209
 TPaveStats.cxx:210
 TPaveStats.cxx:211
 TPaveStats.cxx:212
 TPaveStats.cxx:213
 TPaveStats.cxx:214
 TPaveStats.cxx:215
 TPaveStats.cxx:216
 TPaveStats.cxx:217
 TPaveStats.cxx:218
 TPaveStats.cxx:219
 TPaveStats.cxx:220
 TPaveStats.cxx:221
 TPaveStats.cxx:222
 TPaveStats.cxx:223
 TPaveStats.cxx:224
 TPaveStats.cxx:225
 TPaveStats.cxx:226
 TPaveStats.cxx:227
 TPaveStats.cxx:228
 TPaveStats.cxx:229
 TPaveStats.cxx:230
 TPaveStats.cxx:231
 TPaveStats.cxx:232
 TPaveStats.cxx:233
 TPaveStats.cxx:234
 TPaveStats.cxx:235
 TPaveStats.cxx:236
 TPaveStats.cxx:237
 TPaveStats.cxx:238
 TPaveStats.cxx:239
 TPaveStats.cxx:240
 TPaveStats.cxx:241
 TPaveStats.cxx:242
 TPaveStats.cxx:243
 TPaveStats.cxx:244
 TPaveStats.cxx:245
 TPaveStats.cxx:246
 TPaveStats.cxx:247
 TPaveStats.cxx:248
 TPaveStats.cxx:249
 TPaveStats.cxx:250
 TPaveStats.cxx:251
 TPaveStats.cxx:252
 TPaveStats.cxx:253
 TPaveStats.cxx:254
 TPaveStats.cxx:255
 TPaveStats.cxx:256
 TPaveStats.cxx:257
 TPaveStats.cxx:258
 TPaveStats.cxx:259
 TPaveStats.cxx:260
 TPaveStats.cxx:261
 TPaveStats.cxx:262
 TPaveStats.cxx:263
 TPaveStats.cxx:264
 TPaveStats.cxx:265
 TPaveStats.cxx:266
 TPaveStats.cxx:267
 TPaveStats.cxx:268
 TPaveStats.cxx:269
 TPaveStats.cxx:270
 TPaveStats.cxx:271
 TPaveStats.cxx:272
 TPaveStats.cxx:273
 TPaveStats.cxx:274
 TPaveStats.cxx:275
 TPaveStats.cxx:276
 TPaveStats.cxx:277
 TPaveStats.cxx:278
 TPaveStats.cxx:279
 TPaveStats.cxx:280
 TPaveStats.cxx:281
 TPaveStats.cxx:282
 TPaveStats.cxx:283
 TPaveStats.cxx:284
 TPaveStats.cxx:285
 TPaveStats.cxx:286
 TPaveStats.cxx:287
 TPaveStats.cxx:288
 TPaveStats.cxx:289
 TPaveStats.cxx:290
 TPaveStats.cxx:291
 TPaveStats.cxx:292
 TPaveStats.cxx:293
 TPaveStats.cxx:294
 TPaveStats.cxx:295
 TPaveStats.cxx:296
 TPaveStats.cxx:297
 TPaveStats.cxx:298
 TPaveStats.cxx:299
 TPaveStats.cxx:300
 TPaveStats.cxx:301
 TPaveStats.cxx:302
 TPaveStats.cxx:303
 TPaveStats.cxx:304
 TPaveStats.cxx:305
 TPaveStats.cxx:306
 TPaveStats.cxx:307
 TPaveStats.cxx:308
 TPaveStats.cxx:309
 TPaveStats.cxx:310
 TPaveStats.cxx:311
 TPaveStats.cxx:312
 TPaveStats.cxx:313
 TPaveStats.cxx:314
 TPaveStats.cxx:315
 TPaveStats.cxx:316
 TPaveStats.cxx:317
 TPaveStats.cxx:318
 TPaveStats.cxx:319
 TPaveStats.cxx:320
 TPaveStats.cxx:321
 TPaveStats.cxx:322
 TPaveStats.cxx:323
 TPaveStats.cxx:324
 TPaveStats.cxx:325
 TPaveStats.cxx:326
 TPaveStats.cxx:327
 TPaveStats.cxx:328
 TPaveStats.cxx:329
 TPaveStats.cxx:330
 TPaveStats.cxx:331
 TPaveStats.cxx:332
 TPaveStats.cxx:333
 TPaveStats.cxx:334
 TPaveStats.cxx:335
 TPaveStats.cxx:336
 TPaveStats.cxx:337
 TPaveStats.cxx:338
 TPaveStats.cxx:339
 TPaveStats.cxx:340
 TPaveStats.cxx:341
 TPaveStats.cxx:342
 TPaveStats.cxx:343
 TPaveStats.cxx:344
 TPaveStats.cxx:345
 TPaveStats.cxx:346
 TPaveStats.cxx:347
 TPaveStats.cxx:348
 TPaveStats.cxx:349
 TPaveStats.cxx:350
 TPaveStats.cxx:351
 TPaveStats.cxx:352
 TPaveStats.cxx:353
 TPaveStats.cxx:354
 TPaveStats.cxx:355
 TPaveStats.cxx:356
 TPaveStats.cxx:357
 TPaveStats.cxx:358
 TPaveStats.cxx:359
 TPaveStats.cxx:360
 TPaveStats.cxx:361
 TPaveStats.cxx:362
 TPaveStats.cxx:363
 TPaveStats.cxx:364
 TPaveStats.cxx:365
 TPaveStats.cxx:366
 TPaveStats.cxx:367
 TPaveStats.cxx:368
 TPaveStats.cxx:369
 TPaveStats.cxx:370
 TPaveStats.cxx:371
 TPaveStats.cxx:372
 TPaveStats.cxx:373
 TPaveStats.cxx:374
 TPaveStats.cxx:375
 TPaveStats.cxx:376
 TPaveStats.cxx:377
 TPaveStats.cxx:378
 TPaveStats.cxx:379
 TPaveStats.cxx:380
 TPaveStats.cxx:381
 TPaveStats.cxx:382
 TPaveStats.cxx:383
 TPaveStats.cxx:384
 TPaveStats.cxx:385
 TPaveStats.cxx:386
 TPaveStats.cxx:387
 TPaveStats.cxx:388
 TPaveStats.cxx:389
 TPaveStats.cxx:390
 TPaveStats.cxx:391
 TPaveStats.cxx:392
 TPaveStats.cxx:393
 TPaveStats.cxx:394
 TPaveStats.cxx:395
 TPaveStats.cxx:396
 TPaveStats.cxx:397
 TPaveStats.cxx:398
 TPaveStats.cxx:399
 TPaveStats.cxx:400
 TPaveStats.cxx:401
 TPaveStats.cxx:402
 TPaveStats.cxx:403
 TPaveStats.cxx:404
 TPaveStats.cxx:405
 TPaveStats.cxx:406
 TPaveStats.cxx:407
 TPaveStats.cxx:408
 TPaveStats.cxx:409
 TPaveStats.cxx:410
 TPaveStats.cxx:411
 TPaveStats.cxx:412
 TPaveStats.cxx:413
 TPaveStats.cxx:414
 TPaveStats.cxx:415
 TPaveStats.cxx:416
 TPaveStats.cxx:417
 TPaveStats.cxx:418
 TPaveStats.cxx:419
 TPaveStats.cxx:420
 TPaveStats.cxx:421
 TPaveStats.cxx:422
 TPaveStats.cxx:423
 TPaveStats.cxx:424
 TPaveStats.cxx:425
 TPaveStats.cxx:426
 TPaveStats.cxx:427
 TPaveStats.cxx:428
 TPaveStats.cxx:429
 TPaveStats.cxx:430
 TPaveStats.cxx:431
 TPaveStats.cxx:432
 TPaveStats.cxx:433
 TPaveStats.cxx:434
 TPaveStats.cxx:435
 TPaveStats.cxx:436
 TPaveStats.cxx:437
 TPaveStats.cxx:438
 TPaveStats.cxx:439
 TPaveStats.cxx:440
 TPaveStats.cxx:441
 TPaveStats.cxx:442
 TPaveStats.cxx:443
 TPaveStats.cxx:444
 TPaveStats.cxx:445
 TPaveStats.cxx:446
 TPaveStats.cxx:447
 TPaveStats.cxx:448
 TPaveStats.cxx:449
 TPaveStats.cxx:450
 TPaveStats.cxx:451
 TPaveStats.cxx:452
 TPaveStats.cxx:453
 TPaveStats.cxx:454
 TPaveStats.cxx:455
 TPaveStats.cxx:456
 TPaveStats.cxx:457
 TPaveStats.cxx:458
 TPaveStats.cxx:459
 TPaveStats.cxx:460
 TPaveStats.cxx:461
 TPaveStats.cxx:462
 TPaveStats.cxx:463
 TPaveStats.cxx:464
 TPaveStats.cxx:465
 TPaveStats.cxx:466
 TPaveStats.cxx:467
 TPaveStats.cxx:468
 TPaveStats.cxx:469
 TPaveStats.cxx:470
 TPaveStats.cxx:471
 TPaveStats.cxx:472
 TPaveStats.cxx:473
 TPaveStats.cxx:474
 TPaveStats.cxx:475
 TPaveStats.cxx:476
 TPaveStats.cxx:477
 TPaveStats.cxx:478
 TPaveStats.cxx:479
 TPaveStats.cxx:480
 TPaveStats.cxx:481
 TPaveStats.cxx:482
 TPaveStats.cxx:483
 TPaveStats.cxx:484
 TPaveStats.cxx:485
 TPaveStats.cxx:486
 TPaveStats.cxx:487
 TPaveStats.cxx:488
 TPaveStats.cxx:489
 TPaveStats.cxx:490
 TPaveStats.cxx:491
 TPaveStats.cxx:492
 TPaveStats.cxx:493
 TPaveStats.cxx:494
 TPaveStats.cxx:495
 TPaveStats.cxx:496
 TPaveStats.cxx:497
 TPaveStats.cxx:498
 TPaveStats.cxx:499
 TPaveStats.cxx:500
 TPaveStats.cxx:501
 TPaveStats.cxx:502
 TPaveStats.cxx:503
 TPaveStats.cxx:504
 TPaveStats.cxx:505
 TPaveStats.cxx:506
 TPaveStats.cxx:507
 TPaveStats.cxx:508
 TPaveStats.cxx:509
 TPaveStats.cxx:510
 TPaveStats.cxx:511
 TPaveStats.cxx:512
 TPaveStats.cxx:513
 TPaveStats.cxx:514
 TPaveStats.cxx:515
 TPaveStats.cxx:516
 TPaveStats.cxx:517
 TPaveStats.cxx:518
 TPaveStats.cxx:519
 TPaveStats.cxx:520
 TPaveStats.cxx:521
 TPaveStats.cxx:522
 TPaveStats.cxx:523
 TPaveStats.cxx:524
 TPaveStats.cxx:525
 TPaveStats.cxx:526
 TPaveStats.cxx:527
 TPaveStats.cxx:528
 TPaveStats.cxx:529
 TPaveStats.cxx:530
 TPaveStats.cxx:531
 TPaveStats.cxx:532
 TPaveStats.cxx:533
 TPaveStats.cxx:534
 TPaveStats.cxx:535
 TPaveStats.cxx:536
 TPaveStats.cxx:537
 TPaveStats.cxx:538
 TPaveStats.cxx:539
 TPaveStats.cxx:540
 TPaveStats.cxx:541
 TPaveStats.cxx:542
 TPaveStats.cxx:543
 TPaveStats.cxx:544
 TPaveStats.cxx:545
 TPaveStats.cxx:546
 TPaveStats.cxx:547
 TPaveStats.cxx:548
 TPaveStats.cxx:549
 TPaveStats.cxx:550
 TPaveStats.cxx:551
 TPaveStats.cxx:552
 TPaveStats.cxx:553
 TPaveStats.cxx:554
 TPaveStats.cxx:555
 TPaveStats.cxx:556
 TPaveStats.cxx:557
 TPaveStats.cxx:558
 TPaveStats.cxx:559
 TPaveStats.cxx:560
 TPaveStats.cxx:561
 TPaveStats.cxx:562
 TPaveStats.cxx:563
 TPaveStats.cxx:564
 TPaveStats.cxx:565
 TPaveStats.cxx:566
 TPaveStats.cxx:567
 TPaveStats.cxx:568
 TPaveStats.cxx:569
 TPaveStats.cxx:570
 TPaveStats.cxx:571
 TPaveStats.cxx:572
 TPaveStats.cxx:573
 TPaveStats.cxx:574
 TPaveStats.cxx:575
 TPaveStats.cxx:576
 TPaveStats.cxx:577
 TPaveStats.cxx:578
 TPaveStats.cxx:579
 TPaveStats.cxx:580
 TPaveStats.cxx:581
 TPaveStats.cxx:582
 TPaveStats.cxx:583
 TPaveStats.cxx:584
 TPaveStats.cxx:585
 TPaveStats.cxx:586
 TPaveStats.cxx:587
 TPaveStats.cxx:588
 TPaveStats.cxx:589
 TPaveStats.cxx:590
 TPaveStats.cxx:591
 TPaveStats.cxx:592
 TPaveStats.cxx:593
 TPaveStats.cxx:594
 TPaveStats.cxx:595
 TPaveStats.cxx:596
 TPaveStats.cxx:597
 TPaveStats.cxx:598
 TPaveStats.cxx:599
 TPaveStats.cxx:600
 TPaveStats.cxx:601
 TPaveStats.cxx:602
 TPaveStats.cxx:603
 TPaveStats.cxx:604
 TPaveStats.cxx:605
 TPaveStats.cxx:606
 TPaveStats.cxx:607
 TPaveStats.cxx:608
 TPaveStats.cxx:609
 TPaveStats.cxx:610
 TPaveStats.cxx:611
 TPaveStats.cxx:612
 TPaveStats.cxx:613
 TPaveStats.cxx:614
 TPaveStats.cxx:615
 TPaveStats.cxx:616
 TPaveStats.cxx:617
 TPaveStats.cxx:618
 TPaveStats.cxx:619
 TPaveStats.cxx:620
 TPaveStats.cxx:621
 TPaveStats.cxx:622
 TPaveStats.cxx:623
 TPaveStats.cxx:624
 TPaveStats.cxx:625
 TPaveStats.cxx:626
 TPaveStats.cxx:627
 TPaveStats.cxx:628
 TPaveStats.cxx:629
 TPaveStats.cxx:630
 TPaveStats.cxx:631
 TPaveStats.cxx:632
 TPaveStats.cxx:633
 TPaveStats.cxx:634
 TPaveStats.cxx:635
 TPaveStats.cxx:636
 TPaveStats.cxx:637
 TPaveStats.cxx:638
 TPaveStats.cxx:639
 TPaveStats.cxx:640
 TPaveStats.cxx:641
 TPaveStats.cxx:642
 TPaveStats.cxx:643
 TPaveStats.cxx:644
 TPaveStats.cxx:645