ROOT logo
// @(#)root/hist:$Id$
// Author: Rene Brun   03/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 "Riostream.h"
#include "TEfficiency.h"
#include "TROOT.h"
#include "TGraphAsymmErrors.h"
#include "TStyle.h"
#include "TMath.h"
#include "TArrow.h"
#include "TBox.h"
#include "TVirtualPad.h"
#include "TF1.h"
#include "TH1.h"
#include "TVector.h"
#include "TVectorD.h"
#include "TClass.h"
#include "Math/QuantFuncMathCore.h"

ClassImp(TGraphAsymmErrors)

//______________________________________________________________________________
/* Begin_Html
<center><h2>TGraphAsymmErrors class</h2></center>
A TGraphAsymmErrors is a TGraph with assymetric error bars.
<p>
The TGraphAsymmErrors painting is performed thanks to the
<a href="http://root.cern.ch/root/html/TGraphPainter.html">TGraphPainter</a>
class. All details about the various painting options are given in
<a href="http://root.cern.ch/root/html/TGraphPainter.html">this class</a>.
<p>
The picture below gives an example:
End_Html
Begin_Macro(source)
{
   c1 = new TCanvas("c1","A Simple Graph with assymetric error bars",200,10,700,500);
   c1->SetFillColor(42);
   c1->SetGrid();
   c1->GetFrame()->SetFillColor(21);
   c1->GetFrame()->SetBorderSize(12);
   Int_t n = 10;
   Double_t x[n]   = {-0.22, 0.05, 0.25, 0.35, 0.5, 0.61,0.7,0.85,0.89,0.95};
   Double_t y[n]   = {1,2.9,5.6,7.4,9,9.6,8.7,6.3,4.5,1};
   Double_t exl[n] = {.05,.1,.07,.07,.04,.05,.06,.07,.08,.05};
   Double_t eyl[n] = {.8,.7,.6,.5,.4,.4,.5,.6,.7,.8};
   Double_t exh[n] = {.02,.08,.05,.05,.03,.03,.04,.05,.06,.03};
   Double_t eyh[n] = {.6,.5,.4,.3,.2,.2,.3,.4,.5,.6};
   gr = new TGraphAsymmErrors(n,x,y,exl,exh,eyl,eyh);
   gr->SetTitle("TGraphAsymmErrors Example");
   gr->SetMarkerColor(4);
   gr->SetMarkerStyle(21);
   gr->Draw("ALP");
   return c1;
}
End_Macro */


//______________________________________________________________________________
TGraphAsymmErrors::TGraphAsymmErrors(): TGraph()
{
   // TGraphAsymmErrors default constructor.

   fEXlow       = 0;
   fEYlow       = 0;
   fEXhigh      = 0;
   fEYhigh      = 0;
}


//______________________________________________________________________________
TGraphAsymmErrors::TGraphAsymmErrors(const TGraphAsymmErrors &gr)
       : TGraph(gr)
{
   // TGraphAsymmErrors copy constructor

   if (!CtorAllocate()) return;
   Int_t n = fNpoints*sizeof(Double_t);
   memcpy(fEXlow, gr.fEXlow, n);
   memcpy(fEYlow, gr.fEYlow, n);
   memcpy(fEXhigh, gr.fEXhigh, n);
   memcpy(fEYhigh, gr.fEYhigh, n);
}


//______________________________________________________________________________
TGraphAsymmErrors& TGraphAsymmErrors::operator=(const TGraphAsymmErrors &gr)
{
   // TGraphAsymmErrors assignment operator

   if(this!=&gr) {
      TGraph::operator=(gr);
      // delete arrays
      if (fEXlow) delete [] fEXlow;
      if (fEYlow) delete [] fEYlow;
      if (fEXhigh) delete [] fEXhigh;
      if (fEYhigh) delete [] fEYhigh;

      if (!CtorAllocate()) return *this;
      Int_t n = fNpoints*sizeof(Double_t);
      memcpy(fEXlow, gr.fEXlow, n);
      memcpy(fEYlow, gr.fEYlow, n);
      memcpy(fEXhigh, gr.fEXhigh, n);
      memcpy(fEYhigh, gr.fEYhigh, n);
   }
   return *this;
}


//______________________________________________________________________________
TGraphAsymmErrors::TGraphAsymmErrors(Int_t n)
       : TGraph(n)
{
   // TGraphAsymmErrors normal constructor.
   //
   // the arrays are preset to zero

   if (!CtorAllocate()) return;
   FillZero(0, fNpoints);
}


//______________________________________________________________________________
TGraphAsymmErrors::TGraphAsymmErrors(Int_t n, const Float_t *x, const Float_t *y, const Float_t *exl, const Float_t *exh, const Float_t *eyl, const Float_t *eyh)
       : TGraph(n,x,y)
{
   // TGraphAsymmErrors normal constructor.
   //
   // if exl,h or eyl,h are null, the corresponding arrays are preset to zero

   if (!CtorAllocate()) return;

   for (Int_t i=0;i<n;i++) {
      if (exl) fEXlow[i]  = exl[i];
      else     fEXlow[i]  = 0;
      if (exh) fEXhigh[i] = exh[i];
      else     fEXhigh[i] = 0;
      if (eyl) fEYlow[i]  = eyl[i];
      else     fEYlow[i]  = 0;
      if (eyh) fEYhigh[i] = eyh[i];
      else     fEYhigh[i] = 0;
   }
}


//______________________________________________________________________________
TGraphAsymmErrors::TGraphAsymmErrors(Int_t n, const Double_t *x, const Double_t *y, const Double_t *exl, const Double_t *exh, const Double_t *eyl, const Double_t *eyh)
       : TGraph(n,x,y)
{
   // TGraphAsymmErrors normal constructor.
   //
   // if exl,h or eyl,h are null, the corresponding arrays are preset to zero

   if (!CtorAllocate()) return;

   n = fNpoints*sizeof(Double_t);
   if(exl) { memcpy(fEXlow, exl, n);
   } else { memset(fEXlow, 0, n); }
   if(exh) { memcpy(fEXhigh, exh, n);
   } else { memset(fEXhigh, 0, n); }
   if(eyl) { memcpy(fEYlow, eyl, n);
   } else { memset(fEYlow, 0, n); }
   if(eyh) { memcpy(fEYhigh, eyh, n);
   } else { memset(fEYhigh, 0, n); }
}


//______________________________________________________________________________
TGraphAsymmErrors::TGraphAsymmErrors(const TVectorF  &vx, const TVectorF  &vy, const TVectorF  &vexl, const TVectorF  &vexh, const TVectorF  &veyl, const TVectorF  &veyh)
                  :TGraph()
{
   // Constructor with six vectors of floats in input
   // A grapherrors is built with the X coordinates taken from vx and Y coord from vy
   // and the errors from vectors vexl/h and veyl/h.
   // The number of points in the graph is the minimum of number of points
   // in vx and vy.

   fNpoints = TMath::Min(vx.GetNrows(), vy.GetNrows());
   if (!TGraph::CtorAllocate()) return;
   if (!CtorAllocate()) return;
   Int_t ivxlow  = vx.GetLwb();
   Int_t ivylow  = vy.GetLwb();
   Int_t ivexllow = vexl.GetLwb();
   Int_t ivexhlow = vexh.GetLwb();
   Int_t iveyllow = veyl.GetLwb();
   Int_t iveyhlow = veyh.GetLwb();
      for (Int_t i=0;i<fNpoints;i++) {
      fX[i]      = vx(i+ivxlow);
      fY[i]      = vy(i+ivylow);
      fEXlow[i]  = vexl(i+ivexllow);
      fEYlow[i]  = veyl(i+iveyllow);
      fEXhigh[i] = vexh(i+ivexhlow);
      fEYhigh[i] = veyh(i+iveyhlow);
   }
}


//______________________________________________________________________________
TGraphAsymmErrors::TGraphAsymmErrors(const TVectorD &vx, const TVectorD &vy, const TVectorD &vexl, const TVectorD &vexh, const TVectorD &veyl, const TVectorD &veyh)
                  :TGraph()
{
   // Constructor with six vectors of doubles in input
   // A grapherrors is built with the X coordinates taken from vx and Y coord from vy
   // and the errors from vectors vexl/h and veyl/h.
   // The number of points in the graph is the minimum of number of points
   // in vx and vy.

   fNpoints = TMath::Min(vx.GetNrows(), vy.GetNrows());
   if (!TGraph::CtorAllocate()) return;
   if (!CtorAllocate()) return;
   Int_t ivxlow  = vx.GetLwb();
   Int_t ivylow  = vy.GetLwb();
   Int_t ivexllow = vexl.GetLwb();
   Int_t ivexhlow = vexh.GetLwb();
   Int_t iveyllow = veyl.GetLwb();
   Int_t iveyhlow = veyh.GetLwb();
      for (Int_t i=0;i<fNpoints;i++) {
      fX[i]      = vx(i+ivxlow);
      fY[i]      = vy(i+ivylow);
      fEXlow[i]  = vexl(i+ivexllow);
      fEYlow[i]  = veyl(i+iveyllow);
      fEXhigh[i] = vexh(i+ivexhlow);
      fEYhigh[i] = veyh(i+iveyhlow);
   }
}


//______________________________________________________________________________
TGraphAsymmErrors::TGraphAsymmErrors(const TH1 *h)
       : TGraph(h)
{
   // TGraphAsymmErrors constructor importing its parameters from the TH1 object passed as argument
   // the low and high errors are set to the bin error of the histogram.

   if (!CtorAllocate()) return;

   for (Int_t i=0;i<fNpoints;i++) {
      fEXlow[i]  = h->GetBinWidth(i+1)*gStyle->GetErrorX();
      fEXhigh[i] = fEXlow[i];
      fEYlow[i]  = h->GetBinError(i+1);
      fEYhigh[i] = fEYlow[i];
   }
}


//______________________________________________________________________________
TGraphAsymmErrors::TGraphAsymmErrors(const TH1* pass, const TH1* total, Option_t *option)
   : TGraph((pass)?pass->GetNbinsX():0)
{
   // Creates a TGraphAsymmErrors by dividing two input TH1 histograms:
   // pass/total. (see TGraphAsymmErrors::Divide)

   if (!pass || !total) {
      Error("TGraphAsymmErrors","Invalid histogram pointers");
      return;
   }
   if (!CtorAllocate()) return;

   std::string sname = "divide_" + std::string(pass->GetName()) + "_by_" +
      std::string(total->GetName());
   SetName(sname.c_str());
   SetTitle(pass->GetTitle());

   //copy style from pass
   pass->TAttLine::Copy(*this);
   pass->TAttFill::Copy(*this);
   pass->TAttMarker::Copy(*this);

   Divide(pass, total, option);
}


//______________________________________________________________________________
TGraphAsymmErrors::~TGraphAsymmErrors()
{
   // TGraphAsymmErrors default destructor.

   if(fEXlow) delete [] fEXlow;
   if(fEXhigh) delete [] fEXhigh;
   if(fEYlow) delete [] fEYlow;
   if(fEYhigh) delete [] fEYhigh;
}


//______________________________________________________________________________
void TGraphAsymmErrors::Apply(TF1 *f)
{
   // apply a function to all data points
   // y = f(x,y)
   //
   // Errors are calculated as eyh = f(x,y+eyh)-f(x,y) and
   // eyl = f(x,y)-f(x,y-eyl)
   //
   // Special treatment has to be applied for the functions where the
   // role of "up" and "down" is reversed.
   // function suggested/implemented by Miroslav Helbich <helbich@mail.desy.de>

   Double_t x,y,exl,exh,eyl,eyh,eyl_new,eyh_new,fxy;

   if (fHistogram) {
      delete fHistogram;
      fHistogram = 0;
   }
   for (Int_t i=0;i<GetN();i++) {
      GetPoint(i,x,y);
      exl=GetErrorXlow(i);
      exh=GetErrorXhigh(i);
      eyl=GetErrorYlow(i);
      eyh=GetErrorYhigh(i);

      fxy = f->Eval(x,y);
      SetPoint(i,x,fxy);

      // in the case of the functions like y-> -1*y the roles of the
      // upper and lower error bars is reversed
      if (f->Eval(x,y-eyl)<f->Eval(x,y+eyh)) {
         eyl_new = TMath::Abs(fxy - f->Eval(x,y-eyl));
         eyh_new = TMath::Abs(f->Eval(x,y+eyh) - fxy);
      }
      else {
         eyh_new = TMath::Abs(fxy - f->Eval(x,y-eyl));
         eyl_new = TMath::Abs(f->Eval(x,y+eyh) - fxy);
      }

      //error on x doesn't change
      SetPointError(i,exl,exh,eyl_new,eyh_new);
   }
   if (gPad) gPad->Modified();
}

//______________________________________________________________________________
void TGraphAsymmErrors::BayesDivide(const TH1* pass, const TH1* total, Option_t *)
{
   //This function is only kept for backward compatibility.
   //You should rather use the Divide method.
   //It calls Divide(pass,total,"cl=0.683 b(1,1) mode") which is equivalent to the
   //former BayesDivide method.

   Divide(pass,total,"cl=0.683 b(1,1) mode");
}

//______________________________________________________________________________
void TGraphAsymmErrors::Divide(const TH1* pass, const TH1* total, Option_t *opt)
{
   // Fill this TGraphAsymmErrors by dividing two 1-dimensional histograms pass/total
   //
   // This method serves two purposes:
   //
   // 1) calculating efficiencies:
   // ----------------------------
   //
   // The assumption is that the entries in "pass" are a subset of those in
   // "total". That is, we create an "efficiency" graph, where each entry is
   // between 0 and 1, inclusive.
   //
   // If the histograms are not filled with unit weights, the number of effective
   // entries is used to normalise the bin contents which might lead to wrong results.
   // Begin_Latex effective entries = #frac{(#sum w_{i})^{2}}{#sum w_{i}^{2}}End_Latex
   //
   // The points are assigned a x value at the center of each histogram bin.
   // The y values are Begin_Latex eff = #frac{pass}{total} End_Latex for all options except for the
   // bayesian methods where the result depends on the chosen option.
   //
   // If the denominator becomes 0 or pass >  total, the corresponding bin is
   // skipped.
   //
   // 2) calculating ratios of two Poisson means (option 'pois'):
   // --------------------------------------------------------------
   //
   // The two histograms are interpreted as independent Poisson processes and the ratio
   // Begin_Latex #tau = #frac{n_{1}}{n_{2}} = #frac{#varepsilon}{1 - #varepsilon} with #varepsilon = #frac{n_{1}}{n_{1} + n_{2}} End_Latex
   // The histogram 'pass' is interpreted as n_{1} and the total histogram
   // is used for n_{2}
   //
   // The (asymmetric) uncertainties of the Poisson ratio are linked to the uncertainties
   // of efficiency by a parameter transformation:
   // Begin_Latex #Delta #tau_{low/up} = #frac{1}{(1 - #varepsilon)^{2}} #Delta #varepsilon_{low/up} End_Latex
   //
   // The x errors span each histogram bin (lowedge ... lowedge+width)
   // The y errors depend on the chosen statistic methode which can be determined
   // by the options given below. For a detailed description of the used statistic
   // calculations please have a look at the corresponding functions!
   //
   // Options:
   // - v     : verbose mode: prints information about the number of used bins
   //           and calculated efficiencies with their errors
   // - cl=x  : determine the used confidence level (0<x<1) (default is 0.683)
   // - cp    : Clopper-Pearson interval (see TEfficiency::ClopperPearson)
   // - w     : Wilson interval (see TEfficiency::Wilson)
   // - n     : normal approximation propagation (see TEfficiency::Normal)
   // - ac    : Agresti-Coull interval (see TEfficiency::AgrestiCoull)
   // - fc    : Feldman-Cousins interval (see TEfficiency::FeldmanCousinsInterval)
   // - b(a,b): bayesian interval using a prior probability ~Beta(a,b); a,b > 0
   //           (see TEfficiency::Bayesian)
   // - mode  : use mode of posterior for Bayesian interval (default is mean)
   // - shortest: use shortest interval (done by default if mode is set)
   // - central: use central interval (done by default if mode is NOT set)
   // - pois: interpret histograms as poisson ratio instead of efficiency
   // - e0    : plot (in Bayesian case) efficiency and interval for bins where total=0
   //           (default is to skip them)
   //
   // Note:
   // Unfortunately there is no straightforward approach for determining a confidence
   // interval for a given confidence level. The actual coverage probability of the
   // confidence interval oscillates significantly according to the total number of
   // events and the true efficiency. In order to decrease the impact of this
   // oscillation on the actual coverage probability a couple of approximations and
   // methodes has been developped. For a detailed discussion, please have a look at
   // this statistical paper:
   // Begin_Html <a href="http://www-stat.wharton.upenn.edu/~tcai/paper/Binomial-StatSci.pdf"
   // > http://www-stat.wharton.upenn.edu/~tcai/paper/Binomial-StatSci.pdf</a> End_Html

   //check pointers
   if(!pass || !total) {
      Error("Divide","one of the passed pointers is zero");
      return;
   }

   //check dimension of histograms; only 1-dimensional ones are accepted
   if((pass->GetDimension() > 1) || (total->GetDimension() > 1)) {
      Error("Divide","passed histograms are not one-dimensional");
      return;
   }

   //check whether histograms are filled with weights -> use number of effective
   //entries
   Bool_t bEffective = false;
   //compare sum of weights with sum of squares of weights
   Double_t stats[TH1::kNstat];
   pass->GetStats(stats);
   if (TMath::Abs(stats[0] -stats[1]) > 1e-6)
      bEffective = true;
   total->GetStats(stats);
   if (TMath::Abs(stats[0] -stats[1]) > 1e-6)
      bEffective = true;

   if (bEffective && (pass->GetSumw2()->fN == 0 || total->GetSumw2()->fN == 0) ) {
      Warning("Divide","histogram have been computed with weights but the sum of weight squares are not stored in the histogram. Error calculation is performed ignoring the weights");
      bEffective = false;
   }

   //parse option
   TString option = opt;
   option.ToLower();

   Bool_t bVerbose = false;
   //pointer to function returning the boundaries of the confidence interval
   //(is only used in the frequentist cases.)
   Double_t (*pBound)(Int_t,Int_t,Double_t,Bool_t) = &TEfficiency::ClopperPearson; // default method
   //confidence level
   Double_t conf = 0.682689492137;
   //values for bayesian statistics
   Bool_t bIsBayesian = false;
   Double_t alpha = 1;
   Double_t beta = 1;

   //verbose mode
   if(option.Contains("v")) {
      option.ReplaceAll("v","");
      bVerbose = true;
   }

   //confidence level
   if(option.Contains("cl=")) {
      Double_t level = -1;
      // coverity [secure_coding : FALSE]
      sscanf(strstr(option.Data(),"cl="),"cl=%lf",&level);
      if((level > 0) && (level < 1))
         conf = level;
      else
         Warning("Divide","given confidence level %.3lf is invalid",level);
      option.ReplaceAll("cl=","");
   }

   //normal approximation
   if(option.Contains("n")) {
      option.ReplaceAll("n","");
      pBound = &TEfficiency::Normal;
   }

   //clopper pearson interval
   if(option.Contains("cp")) {
      option.ReplaceAll("cp","");
      pBound = &TEfficiency::ClopperPearson;
   }

   //wilson interval
   if(option.Contains("w")) {
      option.ReplaceAll("w","");
      pBound = &TEfficiency::Wilson;
   }

   //agresti coull interval
   if(option.Contains("ac")) {
      option.ReplaceAll("ac","");
      pBound = &TEfficiency::AgrestiCoull;
   }
   // Feldman-Cousins interval
   if(option.Contains("fc")) {
      option.ReplaceAll("fc","");
      pBound = &TEfficiency::FeldmanCousins;
   }

   //bayesian with prior
   if(option.Contains("b(")) {
      Double_t a = 0;
      Double_t b = 0;
      sscanf(strstr(option.Data(),"b("),"b(%lf,%lf)",&a,&b);
      if(a > 0)
         alpha = a;
      else
         Warning("Divide","given shape parameter for alpha %.2lf is invalid",a);
      if(b > 0)
         beta = b;
      else
         Warning("Divide","given shape parameter for beta %.2lf is invalid",b);
      option.ReplaceAll("b(","");
      bIsBayesian = true;
   }

   // use posterior mode
   Bool_t usePosteriorMode = false;
   if(bIsBayesian && option.Contains("mode") ) {
      usePosteriorMode = true;
      option.ReplaceAll("mode","");
   }

   Bool_t plot0Bins = false;
   if(option.Contains("e0") ) {
      plot0Bins = true;
      option.ReplaceAll("e0","");
   }

   Bool_t useShortestInterval = false;
   if (bIsBayesian && ( option.Contains("sh") || (usePosteriorMode && !option.Contains("cen") ) ) ) {
      useShortestInterval = true;
   }

   // interpret as Poisson ratio
   Bool_t bPoissonRatio = false;
   if(option.Contains("pois") ) {
      bPoissonRatio = true;
      option.ReplaceAll("pois","");
   }

   // weights works only in case of Normal approximation or Bayesian
   if (bEffective && !bIsBayesian && pBound != &TEfficiency::Normal ) {
      Warning("Divide","Histograms have weights: only Normal or Bayesian error calculation is supported");
      Info("Divide","Using now the Normal approximation for weighted histograms");
   }

   if(bPoissonRatio)
   {
     if(pass->GetDimension() != total->GetDimension()) {
       Error("Divide","passed histograms are not of the same dimension");
       return;
     }

     if(!TEfficiency::CheckBinning(*pass,*total)) {
       Error("Divide","passed histograms are not consistent");
       return;
     }
   }
   else
   {
     //check consistency of histograms, allowing weights
     if(!TEfficiency::CheckConsistency(*pass,*total,"w")) {
       Error("Divide","passed histograms are not consistent");
       return;
     }
   }

   //Set the graph to have a number of points equal to the number of histogram
   //bins
   Int_t nbins = pass->GetNbinsX();
   Set(nbins);

   // Ok, now set the points for each bin
   // (Note: the TH1 bin content is shifted to the right by one:
   //  bin=0 is underflow, bin=nbins+1 is overflow.)

   //efficiency with lower and upper boundary of confidence interval
   double eff, low, upper;
   //this keeps track of the number of points added to the graph
   int npoint=0;
   //number of total and passed events
   Int_t t = 0 , p = 0;
   Double_t tw = 0, tw2 = 0, pw = 0, pw2 = 0; // for the case of weights
                                              //loop over all bins and fill the graph
   for (Int_t b=1; b<=nbins; ++b) {

      // default value when total =0;
      eff = 0;
      low = 0;
      upper = 0;

      // special case in case of weights we have to consider the sum of weights and the sum of weight squares
      if(bEffective) {
         tw =  total->GetBinContent(b);
         tw2 = total->GetSumw2()->At(b);
         pw =  pass->GetBinContent(b);
         pw2 = pass->GetSumw2()->At(b);

         if(bPoissonRatio)
         {
            tw += pw;
            tw2 += pw2;
         }

         if (tw <= 0 && !plot0Bins) continue; // skip bins with total <= 0

         // in the case of weights have the formula only for
         // the normal and  bayesian statistics (see below)

      }

      //use bin contents
      else {
         t = int( total->GetBinContent(b) + 0.5);
         p = int(pass->GetBinContent(b) + 0.5);

         if(bPoissonRatio)
            t += p;

         if (!t && !plot0Bins) continue; // skip bins with total = 0
      }


      //using bayesian statistics
      if(bIsBayesian) {
         double aa,bb;

         if (bEffective && tw2 <= 0) {
            // case of bins with zero errors
            eff = pw/tw;
            low = eff; upper = eff;
         }
         else {

            if (bEffective) {
               // tw/tw2 renormalize the weights
               double norm = tw/tw2;  // case of tw2 = 0 is treated above
               aa =  pw * norm + alpha;
               bb =  (tw - pw) * norm + beta;
            }
            else {
               aa = double(p) + alpha;
               bb = double(t-p) + beta;
            }
            if (usePosteriorMode)
               eff = TEfficiency::BetaMode(aa,bb);
            else
               eff = TEfficiency::BetaMean(aa,bb);

            if (useShortestInterval) {
               TEfficiency::BetaShortestInterval(conf,aa,bb,low,upper);
            }
            else {
               low = TEfficiency::BetaCentralInterval(conf,aa,bb,false);
               upper = TEfficiency::BetaCentralInterval(conf,aa,bb,true);
            }
         }
      }
      // case of non-bayesian statistics
      else {
         if (bEffective) {

            if (tw > 0) {

               eff = pw/tw;

               // use normal error calculation using variance of MLE with weights (F.James 8.5.2)
               // this is the same formula used in ROOT for TH1::Divide("B")

               double variance = ( pw2 * (1. - 2 * eff) + tw2 * eff *eff ) / ( tw * tw) ;
               double sigma = sqrt(variance);

               double prob = 0.5 * (1.-conf);
               double delta = ROOT::Math::normal_quantile_c(prob, sigma);
               low = eff - delta;
               upper = eff + delta;
               if (low < 0) low = 0;
               if (upper > 1) upper = 1.;
            }
         }

         else {
            // when not using weights
            if(t)
               eff = ((Double_t)p)/t;

            low = pBound(t,p,conf,false);
            upper = pBound(t,p,conf,true);
         }
      }
      // treat as Poisson ratio
      if(bPoissonRatio && eff != 1)
      {
         Double_t cor = 1./pow(1 - eff,2);
         Double_t ratio = eff/(1 - eff);
         low = ratio - cor * (eff - low);
         upper = ratio + cor * (upper - eff);
         eff = ratio;
      }
      //Set the point center and its errors
      SetPoint(npoint,pass->GetBinCenter(b),eff);
      SetPointError(npoint,
                    pass->GetBinCenter(b)-pass->GetBinLowEdge(b),
                    pass->GetBinLowEdge(b)-pass->GetBinCenter(b)+pass->GetBinWidth(b),
                    eff-low,upper-eff);
      npoint++;//we have added a point to the graph
   }

   Set(npoint);//tell the graph how many points we've really added

   if (bVerbose) {
      Info("Divide","made a graph with %d points from %d bins",npoint,nbins);
      Info("Divide","used confidence level: %.2lf\n",conf);
      if(bIsBayesian)
         Info("Divide","used prior probability ~ beta(%.2lf,%.2lf)",alpha,beta);
      Print();
   }
}

//______________________________________________________________________________
void TGraphAsymmErrors::ComputeRange(Double_t &xmin, Double_t &ymin, Double_t &xmax, Double_t &ymax) const
{
   // Compute Range

   TGraph::ComputeRange(xmin,ymin,xmax,ymax);

   for (Int_t i=0;i<fNpoints;i++) {
      if (fX[i] -fEXlow[i] < xmin) {
         if (gPad && gPad->GetLogx()) {
            if (fEXlow[i] < fX[i]) xmin = fX[i]-fEXlow[i];
            else                   xmin = TMath::Min(xmin,fX[i]/3);
         } else {
            xmin = fX[i]-fEXlow[i];
         }
      }
      if (fX[i] +fEXhigh[i] > xmax) xmax = fX[i]+fEXhigh[i];
      if (fY[i] -fEYlow[i] < ymin) {
         if (gPad && gPad->GetLogy()) {
            if (fEYlow[i] < fY[i]) ymin = fY[i]-fEYlow[i];
            else                   ymin = TMath::Min(ymin,fY[i]/3);
         } else {
            ymin = fY[i]-fEYlow[i];
         }
      }
      if (fY[i] +fEYhigh[i] > ymax) ymax = fY[i]+fEYhigh[i];
   }
}


//______________________________________________________________________________
void TGraphAsymmErrors::CopyAndRelease(Double_t **newarrays,
                                       Int_t ibegin, Int_t iend, Int_t obegin)
{
   // Copy and release.

   CopyPoints(newarrays, ibegin, iend, obegin);
   if (newarrays) {
      delete[] fEXlow;
      fEXlow = newarrays[0];
      delete[] fEXhigh;
      fEXhigh = newarrays[1];
      delete[] fEYlow;
      fEYlow = newarrays[2];
      delete[] fEYhigh;
      fEYhigh = newarrays[3];
      delete[] fX;
      fX = newarrays[4];
      delete[] fY;
      fY = newarrays[5];
      delete[] newarrays;
   }
}


//______________________________________________________________________________
Bool_t TGraphAsymmErrors::CopyPoints(Double_t **arrays,
                                     Int_t ibegin, Int_t iend, Int_t obegin)
{
   // Copy errors from fE*** to arrays[***]
   // or to f*** Copy points.

   if (TGraph::CopyPoints(arrays ? arrays+4 : 0, ibegin, iend, obegin)) {
      Int_t n = (iend - ibegin)*sizeof(Double_t);
      if (arrays) {
         memmove(&arrays[0][obegin], &fEXlow[ibegin], n);
         memmove(&arrays[1][obegin], &fEXhigh[ibegin], n);
         memmove(&arrays[2][obegin], &fEYlow[ibegin], n);
         memmove(&arrays[3][obegin], &fEYhigh[ibegin], n);
      } else {
         memmove(&fEXlow[obegin], &fEXlow[ibegin], n);
         memmove(&fEXhigh[obegin], &fEXhigh[ibegin], n);
         memmove(&fEYlow[obegin], &fEYlow[ibegin], n);
         memmove(&fEYhigh[obegin], &fEYhigh[ibegin], n);
      }
      return kTRUE;
   } else {
      return kFALSE;
   }
}


//______________________________________________________________________________
Bool_t TGraphAsymmErrors::CtorAllocate(void)
{
   // Should be called from ctors after fNpoints has been set
   // Note: This function should be called only from the constructor
   // since it does not delete previously existing arrays

   if (!fNpoints) {
      fEXlow = fEYlow = fEXhigh = fEYhigh = 0;
      return kFALSE;
   }
   fEXlow = new Double_t[fMaxSize];
   fEYlow = new Double_t[fMaxSize];
   fEXhigh = new Double_t[fMaxSize];
   fEYhigh = new Double_t[fMaxSize];
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGraphAsymmErrors::DoMerge(const TGraph *g)
{
   //  protected function to perform the merge operation of a graph with asymmetric errors
   if (g->GetN() == 0) return kFALSE;

   Double_t * exl = g->GetEXlow();
   Double_t * exh = g->GetEXhigh();
   Double_t * eyl = g->GetEYlow();
   Double_t * eyh = g->GetEYhigh();
   if (exl == 0 || exh == 0 || eyl == 0 || eyh == 0) {
      if (g->IsA() != TGraph::Class() )
         Warning("DoMerge","Merging a %s is not compatible with a TGraphAsymmErrors - errors will be ignored",g->IsA()->GetName());
      return TGraph::DoMerge(g);
   }
   for (Int_t i = 0 ; i < g->GetN(); i++) {
      Int_t ipoint = GetN();
      Double_t x = g->GetX()[i];
      Double_t y = g->GetY()[i];
      SetPoint(ipoint, x, y);
      SetPointError(ipoint, exl[i], exh[i], eyl[i], eyh[i] );
   }

   return kTRUE;
}

//______________________________________________________________________________
void TGraphAsymmErrors::FillZero(Int_t begin, Int_t end,
                                 Bool_t from_ctor)
{
   // Set zero values for point arrays in the range [begin, end)

   if (!from_ctor) {
      TGraph::FillZero(begin, end, from_ctor);
   }
   Int_t n = (end - begin)*sizeof(Double_t);
   memset(fEXlow + begin, 0, n);
   memset(fEXhigh + begin, 0, n);
   memset(fEYlow + begin, 0, n);
   memset(fEYhigh + begin, 0, n);
}


//______________________________________________________________________________
Double_t TGraphAsymmErrors::GetErrorX(Int_t i) const
{
   // This function is called by GraphFitChisquare.
   // It returns the error along X at point i.

   if (i < 0 || i >= fNpoints) return -1;
   if (!fEXlow && !fEXhigh) return -1;
   Double_t elow=0, ehigh=0;
   if (fEXlow)  elow  = fEXlow[i];
   if (fEXhigh) ehigh = fEXhigh[i];
   return TMath::Sqrt(0.5*(elow*elow + ehigh*ehigh));
}


//______________________________________________________________________________
Double_t TGraphAsymmErrors::GetErrorY(Int_t i) const
{
   // This function is called by GraphFitChisquare.
   // It returns the error along Y at point i.

   if (i < 0 || i >= fNpoints) return -1;
   if (!fEYlow && !fEYhigh) return -1;
   Double_t elow=0, ehigh=0;
   if (fEYlow)  elow  = fEYlow[i];
   if (fEYhigh) ehigh = fEYhigh[i];
   return TMath::Sqrt(0.5*(elow*elow + ehigh*ehigh));
}


//______________________________________________________________________________
Double_t TGraphAsymmErrors::GetErrorXhigh(Int_t i) const
{
   // Get high error on X.

   if (i<0 || i>fNpoints) return -1;
   if (fEXhigh) return fEXhigh[i];
   return -1;
}


//______________________________________________________________________________
Double_t TGraphAsymmErrors::GetErrorXlow(Int_t i) const
{
   // Get low error on X.

   if (i<0 || i>fNpoints) return -1;
   if (fEXlow) return fEXlow[i];
   return -1;
}


//______________________________________________________________________________
Double_t TGraphAsymmErrors::GetErrorYhigh(Int_t i) const
{
   // Get high error on Y.

   if (i<0 || i>fNpoints) return -1;
   if (fEYhigh) return fEYhigh[i];
   return -1;
}


//______________________________________________________________________________
Double_t TGraphAsymmErrors::GetErrorYlow(Int_t i) const
{
   // Get low error on Y.

   if (i<0 || i>fNpoints) return -1;
   if (fEYlow) return fEYlow[i];
   return -1;
}


//______________________________________________________________________________
void TGraphAsymmErrors::Print(Option_t *) const
{
   // Print graph and errors values.

   for (Int_t i=0;i<fNpoints;i++) {
      printf("x[%d]=%g, y[%d]=%g, exl[%d]=%g, exh[%d]=%g, eyl[%d]=%g, eyh[%d]=%g\n"
         ,i,fX[i],i,fY[i],i,fEXlow[i],i,fEXhigh[i],i,fEYlow[i],i,fEYhigh[i]);
   }
}


//______________________________________________________________________________
void TGraphAsymmErrors::SavePrimitive(ostream &out, Option_t *option /*= ""*/)
{
    // Save primitive as a C++ statement(s) on output stream out

   char quote = '"';
   out<<"   "<<endl;
   if (gROOT->ClassSaved(TGraphAsymmErrors::Class())) {
      out<<"   ";
   } else {
      out<<"   TGraphAsymmErrors *";
   }
   out<<"grae = new TGraphAsymmErrors("<<fNpoints<<");"<<endl;
   out<<"   grae->SetName("<<quote<<GetName()<<quote<<");"<<endl;
   out<<"   grae->SetTitle("<<quote<<GetTitle()<<quote<<");"<<endl;

   SaveFillAttributes(out,"grae",0,1001);
   SaveLineAttributes(out,"grae",1,1,1);
   SaveMarkerAttributes(out,"grae",1,1,1);

   for (Int_t i=0;i<fNpoints;i++) {
      out<<"   grae->SetPoint("<<i<<","<<fX[i]<<","<<fY[i]<<");"<<endl;
      out<<"   grae->SetPointError("<<i<<","<<fEXlow[i]<<","<<fEXhigh[i]<<","<<fEYlow[i]<<","<<fEYhigh[i]<<");"<<endl;
   }

   static Int_t frameNumber = 0;
   if (fHistogram) {
      frameNumber++;
      TString hname = fHistogram->GetName();
      hname += frameNumber;
      fHistogram->SetName(Form("Graph_%s",hname.Data()));
      fHistogram->SavePrimitive(out,"nodraw");
      out<<"   grae->SetHistogram("<<fHistogram->GetName()<<");"<<endl;
      out<<"   "<<endl;
   }

   // save list of functions
   TIter next(fFunctions);
   TObject *obj;
   while ((obj=next())) {
      obj->SavePrimitive(out,"nodraw");
      if (obj->InheritsFrom("TPaveStats")) {
         out<<"   grae->GetListOfFunctions()->Add(ptstats);"<<endl;
         out<<"   ptstats->SetParent(grae->GetListOfFunctions());"<<endl;
      } else {
         out<<"   grae->GetListOfFunctions()->Add("<<obj->GetName()<<");"<<endl;
      }
   }

   const char *l = strstr(option,"multigraph");
   if (l) {
      out<<"   multigraph->Add(grae,"<<quote<<l+10<<quote<<");"<<endl;
   } else {
      out<<"   grae->Draw("<<quote<<option<<quote<<");"<<endl;
   }
}

//______________________________________________________________________________
void TGraphAsymmErrors::SetPointError(Double_t exl, Double_t exh, Double_t eyl, Double_t eyh)
{
   // Set ex and ey values for point pointed by the mouse.

   Int_t px = gPad->GetEventX();
   Int_t py = gPad->GetEventY();

   //localize point to be deleted
   Int_t ipoint = -2;
   Int_t i;
   // start with a small window (in case the mouse is very close to one point)
   for (i=0;i<fNpoints;i++) {
      Int_t dpx = px - gPad->XtoAbsPixel(gPad->XtoPad(fX[i]));
      Int_t dpy = py - gPad->YtoAbsPixel(gPad->YtoPad(fY[i]));
      if (dpx*dpx+dpy*dpy < 25) {ipoint = i; break;}
   }
   if (ipoint == -2) return;

   fEXlow[ipoint]  = exl;
   fEYlow[ipoint]  = eyl;
   fEXhigh[ipoint] = exh;
   fEYhigh[ipoint] = eyh;
   gPad->Modified();
}


//______________________________________________________________________________
void TGraphAsymmErrors::SetPointError(Int_t i, Double_t exl, Double_t exh, Double_t eyl, Double_t eyh)
{
   // Set ex and ey values for point number i.

   if (i < 0) return;
   if (i >= fNpoints) {
   // re-allocate the object
      TGraphAsymmErrors::SetPoint(i,0,0);
   }
   fEXlow[i]  = exl;
   fEYlow[i]  = eyl;
   fEXhigh[i] = exh;
   fEYhigh[i] = eyh;
}


//______________________________________________________________________________
void TGraphAsymmErrors::SetPointEXlow(Int_t i, Double_t exl)
{
   // Set EXlow for point i

   if (i < 0) return;
   if (i >= fNpoints) {
   // re-allocate the object
      TGraphAsymmErrors::SetPoint(i,0,0);
   }
   fEXlow[i]  = exl;
}


//______________________________________________________________________________
void TGraphAsymmErrors::SetPointEXhigh(Int_t i, Double_t exh)
{
   // Set EXhigh for point i

   if (i < 0) return;
   if (i >= fNpoints) {
   // re-allocate the object
      TGraphAsymmErrors::SetPoint(i,0,0);
   }
   fEXhigh[i]  = exh;
}


//______________________________________________________________________________
void TGraphAsymmErrors::SetPointEYlow(Int_t i, Double_t eyl)
{
   // Set EYlow for point i

   if (i < 0) return;
   if (i >= fNpoints) {
   // re-allocate the object
      TGraphAsymmErrors::SetPoint(i,0,0);
   }
   fEYlow[i]  = eyl;
}


//______________________________________________________________________________
void TGraphAsymmErrors::SetPointEYhigh(Int_t i, Double_t eyh)
{
   // Set EYhigh for point i

   if (i < 0) return;
   if (i >= fNpoints) {
   // re-allocate the object
      TGraphAsymmErrors::SetPoint(i,0,0);
   }
   fEYhigh[i]  = eyh;
}


//______________________________________________________________________________
void TGraphAsymmErrors::Streamer(TBuffer &b)
{
   // Stream an object of class TGraphAsymmErrors.

   if (b.IsReading()) {
      UInt_t R__s, R__c;
      Version_t R__v = b.ReadVersion(&R__s, &R__c);
      if (R__v > 2) {
         b.ReadClassBuffer(TGraphAsymmErrors::Class(), this, R__v, R__s, R__c);
         return;
      }
      //====process old versions before automatic schema evolution
      TGraph::Streamer(b);
      fEXlow  = new Double_t[fNpoints];
      fEYlow  = new Double_t[fNpoints];
      fEXhigh = new Double_t[fNpoints];
      fEYhigh = new Double_t[fNpoints];
      if (R__v < 2) {
         Float_t *exlow  = new Float_t[fNpoints];
         Float_t *eylow  = new Float_t[fNpoints];
         Float_t *exhigh = new Float_t[fNpoints];
         Float_t *eyhigh = new Float_t[fNpoints];
         b.ReadFastArray(exlow,fNpoints);
         b.ReadFastArray(eylow,fNpoints);
         b.ReadFastArray(exhigh,fNpoints);
         b.ReadFastArray(eyhigh,fNpoints);
         for (Int_t i=0;i<fNpoints;i++) {
            fEXlow[i]  = exlow[i];
            fEYlow[i]  = eylow[i];
            fEXhigh[i] = exhigh[i];
            fEYhigh[i] = eyhigh[i];
         }
         delete [] eylow;
         delete [] exlow;
         delete [] eyhigh;
         delete [] exhigh;
      } else {
         b.ReadFastArray(fEXlow,fNpoints);
         b.ReadFastArray(fEYlow,fNpoints);
         b.ReadFastArray(fEXhigh,fNpoints);
         b.ReadFastArray(fEYhigh,fNpoints);
      }
      b.CheckByteCount(R__s, R__c, TGraphAsymmErrors::IsA());
      //====end of old versions

   } else {
      b.WriteClassBuffer(TGraphAsymmErrors::Class(),this);
   }
}


//______________________________________________________________________________
void TGraphAsymmErrors::SwapPoints(Int_t pos1, Int_t pos2)
{
   // Swap points.

   SwapValues(fEXlow,  pos1, pos2);
   SwapValues(fEXhigh, pos1, pos2);
   SwapValues(fEYlow,  pos1, pos2);
   SwapValues(fEYhigh, pos1, pos2);
   TGraph::SwapPoints(pos1, pos2);
}
 TGraphAsymmErrors.cxx:1
 TGraphAsymmErrors.cxx:2
 TGraphAsymmErrors.cxx:3
 TGraphAsymmErrors.cxx:4
 TGraphAsymmErrors.cxx:5
 TGraphAsymmErrors.cxx:6
 TGraphAsymmErrors.cxx:7
 TGraphAsymmErrors.cxx:8
 TGraphAsymmErrors.cxx:9
 TGraphAsymmErrors.cxx:10
 TGraphAsymmErrors.cxx:11
 TGraphAsymmErrors.cxx:12
 TGraphAsymmErrors.cxx:13
 TGraphAsymmErrors.cxx:14
 TGraphAsymmErrors.cxx:15
 TGraphAsymmErrors.cxx:16
 TGraphAsymmErrors.cxx:17
 TGraphAsymmErrors.cxx:18
 TGraphAsymmErrors.cxx:19
 TGraphAsymmErrors.cxx:20
 TGraphAsymmErrors.cxx:21
 TGraphAsymmErrors.cxx:22
 TGraphAsymmErrors.cxx:23
 TGraphAsymmErrors.cxx:24
 TGraphAsymmErrors.cxx:25
 TGraphAsymmErrors.cxx:26
 TGraphAsymmErrors.cxx:27
 TGraphAsymmErrors.cxx:28
 TGraphAsymmErrors.cxx:29
 TGraphAsymmErrors.cxx:30
 TGraphAsymmErrors.cxx:31
 TGraphAsymmErrors.cxx:32
 TGraphAsymmErrors.cxx:33
 TGraphAsymmErrors.cxx:34
 TGraphAsymmErrors.cxx:35
 TGraphAsymmErrors.cxx:36
 TGraphAsymmErrors.cxx:37
 TGraphAsymmErrors.cxx:38
 TGraphAsymmErrors.cxx:39
 TGraphAsymmErrors.cxx:40
 TGraphAsymmErrors.cxx:41
 TGraphAsymmErrors.cxx:42
 TGraphAsymmErrors.cxx:43
 TGraphAsymmErrors.cxx:44
 TGraphAsymmErrors.cxx:45
 TGraphAsymmErrors.cxx:46
 TGraphAsymmErrors.cxx:47
 TGraphAsymmErrors.cxx:48
 TGraphAsymmErrors.cxx:49
 TGraphAsymmErrors.cxx:50
 TGraphAsymmErrors.cxx:51
 TGraphAsymmErrors.cxx:52
 TGraphAsymmErrors.cxx:53
 TGraphAsymmErrors.cxx:54
 TGraphAsymmErrors.cxx:55
 TGraphAsymmErrors.cxx:56
 TGraphAsymmErrors.cxx:57
 TGraphAsymmErrors.cxx:58
 TGraphAsymmErrors.cxx:59
 TGraphAsymmErrors.cxx:60
 TGraphAsymmErrors.cxx:61
 TGraphAsymmErrors.cxx:62
 TGraphAsymmErrors.cxx:63
 TGraphAsymmErrors.cxx:64
 TGraphAsymmErrors.cxx:65
 TGraphAsymmErrors.cxx:66
 TGraphAsymmErrors.cxx:67
 TGraphAsymmErrors.cxx:68
 TGraphAsymmErrors.cxx:69
 TGraphAsymmErrors.cxx:70
 TGraphAsymmErrors.cxx:71
 TGraphAsymmErrors.cxx:72
 TGraphAsymmErrors.cxx:73
 TGraphAsymmErrors.cxx:74
 TGraphAsymmErrors.cxx:75
 TGraphAsymmErrors.cxx:76
 TGraphAsymmErrors.cxx:77
 TGraphAsymmErrors.cxx:78
 TGraphAsymmErrors.cxx:79
 TGraphAsymmErrors.cxx:80
 TGraphAsymmErrors.cxx:81
 TGraphAsymmErrors.cxx:82
 TGraphAsymmErrors.cxx:83
 TGraphAsymmErrors.cxx:84
 TGraphAsymmErrors.cxx:85
 TGraphAsymmErrors.cxx:86
 TGraphAsymmErrors.cxx:87
 TGraphAsymmErrors.cxx:88
 TGraphAsymmErrors.cxx:89
 TGraphAsymmErrors.cxx:90
 TGraphAsymmErrors.cxx:91
 TGraphAsymmErrors.cxx:92
 TGraphAsymmErrors.cxx:93
 TGraphAsymmErrors.cxx:94
 TGraphAsymmErrors.cxx:95
 TGraphAsymmErrors.cxx:96
 TGraphAsymmErrors.cxx:97
 TGraphAsymmErrors.cxx:98
 TGraphAsymmErrors.cxx:99
 TGraphAsymmErrors.cxx:100
 TGraphAsymmErrors.cxx:101
 TGraphAsymmErrors.cxx:102
 TGraphAsymmErrors.cxx:103
 TGraphAsymmErrors.cxx:104
 TGraphAsymmErrors.cxx:105
 TGraphAsymmErrors.cxx:106
 TGraphAsymmErrors.cxx:107
 TGraphAsymmErrors.cxx:108
 TGraphAsymmErrors.cxx:109
 TGraphAsymmErrors.cxx:110
 TGraphAsymmErrors.cxx:111
 TGraphAsymmErrors.cxx:112
 TGraphAsymmErrors.cxx:113
 TGraphAsymmErrors.cxx:114
 TGraphAsymmErrors.cxx:115
 TGraphAsymmErrors.cxx:116
 TGraphAsymmErrors.cxx:117
 TGraphAsymmErrors.cxx:118
 TGraphAsymmErrors.cxx:119
 TGraphAsymmErrors.cxx:120
 TGraphAsymmErrors.cxx:121
 TGraphAsymmErrors.cxx:122
 TGraphAsymmErrors.cxx:123
 TGraphAsymmErrors.cxx:124
 TGraphAsymmErrors.cxx:125
 TGraphAsymmErrors.cxx:126
 TGraphAsymmErrors.cxx:127
 TGraphAsymmErrors.cxx:128
 TGraphAsymmErrors.cxx:129
 TGraphAsymmErrors.cxx:130
 TGraphAsymmErrors.cxx:131
 TGraphAsymmErrors.cxx:132
 TGraphAsymmErrors.cxx:133
 TGraphAsymmErrors.cxx:134
 TGraphAsymmErrors.cxx:135
 TGraphAsymmErrors.cxx:136
 TGraphAsymmErrors.cxx:137
 TGraphAsymmErrors.cxx:138
 TGraphAsymmErrors.cxx:139
 TGraphAsymmErrors.cxx:140
 TGraphAsymmErrors.cxx:141
 TGraphAsymmErrors.cxx:142
 TGraphAsymmErrors.cxx:143
 TGraphAsymmErrors.cxx:144
 TGraphAsymmErrors.cxx:145
 TGraphAsymmErrors.cxx:146
 TGraphAsymmErrors.cxx:147
 TGraphAsymmErrors.cxx:148
 TGraphAsymmErrors.cxx:149
 TGraphAsymmErrors.cxx:150
 TGraphAsymmErrors.cxx:151
 TGraphAsymmErrors.cxx:152
 TGraphAsymmErrors.cxx:153
 TGraphAsymmErrors.cxx:154
 TGraphAsymmErrors.cxx:155
 TGraphAsymmErrors.cxx:156
 TGraphAsymmErrors.cxx:157
 TGraphAsymmErrors.cxx:158
 TGraphAsymmErrors.cxx:159
 TGraphAsymmErrors.cxx:160
 TGraphAsymmErrors.cxx:161
 TGraphAsymmErrors.cxx:162
 TGraphAsymmErrors.cxx:163
 TGraphAsymmErrors.cxx:164
 TGraphAsymmErrors.cxx:165
 TGraphAsymmErrors.cxx:166
 TGraphAsymmErrors.cxx:167
 TGraphAsymmErrors.cxx:168
 TGraphAsymmErrors.cxx:169
 TGraphAsymmErrors.cxx:170
 TGraphAsymmErrors.cxx:171
 TGraphAsymmErrors.cxx:172
 TGraphAsymmErrors.cxx:173
 TGraphAsymmErrors.cxx:174
 TGraphAsymmErrors.cxx:175
 TGraphAsymmErrors.cxx:176
 TGraphAsymmErrors.cxx:177
 TGraphAsymmErrors.cxx:178
 TGraphAsymmErrors.cxx:179
 TGraphAsymmErrors.cxx:180
 TGraphAsymmErrors.cxx:181
 TGraphAsymmErrors.cxx:182
 TGraphAsymmErrors.cxx:183
 TGraphAsymmErrors.cxx:184
 TGraphAsymmErrors.cxx:185
 TGraphAsymmErrors.cxx:186
 TGraphAsymmErrors.cxx:187
 TGraphAsymmErrors.cxx:188
 TGraphAsymmErrors.cxx:189
 TGraphAsymmErrors.cxx:190
 TGraphAsymmErrors.cxx:191
 TGraphAsymmErrors.cxx:192
 TGraphAsymmErrors.cxx:193
 TGraphAsymmErrors.cxx:194
 TGraphAsymmErrors.cxx:195
 TGraphAsymmErrors.cxx:196
 TGraphAsymmErrors.cxx:197
 TGraphAsymmErrors.cxx:198
 TGraphAsymmErrors.cxx:199
 TGraphAsymmErrors.cxx:200
 TGraphAsymmErrors.cxx:201
 TGraphAsymmErrors.cxx:202
 TGraphAsymmErrors.cxx:203
 TGraphAsymmErrors.cxx:204
 TGraphAsymmErrors.cxx:205
 TGraphAsymmErrors.cxx:206
 TGraphAsymmErrors.cxx:207
 TGraphAsymmErrors.cxx:208
 TGraphAsymmErrors.cxx:209
 TGraphAsymmErrors.cxx:210
 TGraphAsymmErrors.cxx:211
 TGraphAsymmErrors.cxx:212
 TGraphAsymmErrors.cxx:213
 TGraphAsymmErrors.cxx:214
 TGraphAsymmErrors.cxx:215
 TGraphAsymmErrors.cxx:216
 TGraphAsymmErrors.cxx:217
 TGraphAsymmErrors.cxx:218
 TGraphAsymmErrors.cxx:219
 TGraphAsymmErrors.cxx:220
 TGraphAsymmErrors.cxx:221
 TGraphAsymmErrors.cxx:222
 TGraphAsymmErrors.cxx:223
 TGraphAsymmErrors.cxx:224
 TGraphAsymmErrors.cxx:225
 TGraphAsymmErrors.cxx:226
 TGraphAsymmErrors.cxx:227
 TGraphAsymmErrors.cxx:228
 TGraphAsymmErrors.cxx:229
 TGraphAsymmErrors.cxx:230
 TGraphAsymmErrors.cxx:231
 TGraphAsymmErrors.cxx:232
 TGraphAsymmErrors.cxx:233
 TGraphAsymmErrors.cxx:234
 TGraphAsymmErrors.cxx:235
 TGraphAsymmErrors.cxx:236
 TGraphAsymmErrors.cxx:237
 TGraphAsymmErrors.cxx:238
 TGraphAsymmErrors.cxx:239
 TGraphAsymmErrors.cxx:240
 TGraphAsymmErrors.cxx:241
 TGraphAsymmErrors.cxx:242
 TGraphAsymmErrors.cxx:243
 TGraphAsymmErrors.cxx:244
 TGraphAsymmErrors.cxx:245
 TGraphAsymmErrors.cxx:246
 TGraphAsymmErrors.cxx:247
 TGraphAsymmErrors.cxx:248
 TGraphAsymmErrors.cxx:249
 TGraphAsymmErrors.cxx:250
 TGraphAsymmErrors.cxx:251
 TGraphAsymmErrors.cxx:252
 TGraphAsymmErrors.cxx:253
 TGraphAsymmErrors.cxx:254
 TGraphAsymmErrors.cxx:255
 TGraphAsymmErrors.cxx:256
 TGraphAsymmErrors.cxx:257
 TGraphAsymmErrors.cxx:258
 TGraphAsymmErrors.cxx:259
 TGraphAsymmErrors.cxx:260
 TGraphAsymmErrors.cxx:261
 TGraphAsymmErrors.cxx:262
 TGraphAsymmErrors.cxx:263
 TGraphAsymmErrors.cxx:264
 TGraphAsymmErrors.cxx:265
 TGraphAsymmErrors.cxx:266
 TGraphAsymmErrors.cxx:267
 TGraphAsymmErrors.cxx:268
 TGraphAsymmErrors.cxx:269
 TGraphAsymmErrors.cxx:270
 TGraphAsymmErrors.cxx:271
 TGraphAsymmErrors.cxx:272
 TGraphAsymmErrors.cxx:273
 TGraphAsymmErrors.cxx:274
 TGraphAsymmErrors.cxx:275
 TGraphAsymmErrors.cxx:276
 TGraphAsymmErrors.cxx:277
 TGraphAsymmErrors.cxx:278
 TGraphAsymmErrors.cxx:279
 TGraphAsymmErrors.cxx:280
 TGraphAsymmErrors.cxx:281
 TGraphAsymmErrors.cxx:282
 TGraphAsymmErrors.cxx:283
 TGraphAsymmErrors.cxx:284
 TGraphAsymmErrors.cxx:285
 TGraphAsymmErrors.cxx:286
 TGraphAsymmErrors.cxx:287
 TGraphAsymmErrors.cxx:288
 TGraphAsymmErrors.cxx:289
 TGraphAsymmErrors.cxx:290
 TGraphAsymmErrors.cxx:291
 TGraphAsymmErrors.cxx:292
 TGraphAsymmErrors.cxx:293
 TGraphAsymmErrors.cxx:294
 TGraphAsymmErrors.cxx:295
 TGraphAsymmErrors.cxx:296
 TGraphAsymmErrors.cxx:297
 TGraphAsymmErrors.cxx:298
 TGraphAsymmErrors.cxx:299
 TGraphAsymmErrors.cxx:300
 TGraphAsymmErrors.cxx:301
 TGraphAsymmErrors.cxx:302
 TGraphAsymmErrors.cxx:303
 TGraphAsymmErrors.cxx:304
 TGraphAsymmErrors.cxx:305
 TGraphAsymmErrors.cxx:306
 TGraphAsymmErrors.cxx:307
 TGraphAsymmErrors.cxx:308
 TGraphAsymmErrors.cxx:309
 TGraphAsymmErrors.cxx:310
 TGraphAsymmErrors.cxx:311
 TGraphAsymmErrors.cxx:312
 TGraphAsymmErrors.cxx:313
 TGraphAsymmErrors.cxx:314
 TGraphAsymmErrors.cxx:315
 TGraphAsymmErrors.cxx:316
 TGraphAsymmErrors.cxx:317
 TGraphAsymmErrors.cxx:318
 TGraphAsymmErrors.cxx:319
 TGraphAsymmErrors.cxx:320
 TGraphAsymmErrors.cxx:321
 TGraphAsymmErrors.cxx:322
 TGraphAsymmErrors.cxx:323
 TGraphAsymmErrors.cxx:324
 TGraphAsymmErrors.cxx:325
 TGraphAsymmErrors.cxx:326
 TGraphAsymmErrors.cxx:327
 TGraphAsymmErrors.cxx:328
 TGraphAsymmErrors.cxx:329
 TGraphAsymmErrors.cxx:330
 TGraphAsymmErrors.cxx:331
 TGraphAsymmErrors.cxx:332
 TGraphAsymmErrors.cxx:333
 TGraphAsymmErrors.cxx:334
 TGraphAsymmErrors.cxx:335
 TGraphAsymmErrors.cxx:336
 TGraphAsymmErrors.cxx:337
 TGraphAsymmErrors.cxx:338
 TGraphAsymmErrors.cxx:339
 TGraphAsymmErrors.cxx:340
 TGraphAsymmErrors.cxx:341
 TGraphAsymmErrors.cxx:342
 TGraphAsymmErrors.cxx:343
 TGraphAsymmErrors.cxx:344
 TGraphAsymmErrors.cxx:345
 TGraphAsymmErrors.cxx:346
 TGraphAsymmErrors.cxx:347
 TGraphAsymmErrors.cxx:348
 TGraphAsymmErrors.cxx:349
 TGraphAsymmErrors.cxx:350
 TGraphAsymmErrors.cxx:351
 TGraphAsymmErrors.cxx:352
 TGraphAsymmErrors.cxx:353
 TGraphAsymmErrors.cxx:354
 TGraphAsymmErrors.cxx:355
 TGraphAsymmErrors.cxx:356
 TGraphAsymmErrors.cxx:357
 TGraphAsymmErrors.cxx:358
 TGraphAsymmErrors.cxx:359
 TGraphAsymmErrors.cxx:360
 TGraphAsymmErrors.cxx:361
 TGraphAsymmErrors.cxx:362
 TGraphAsymmErrors.cxx:363
 TGraphAsymmErrors.cxx:364
 TGraphAsymmErrors.cxx:365
 TGraphAsymmErrors.cxx:366
 TGraphAsymmErrors.cxx:367
 TGraphAsymmErrors.cxx:368
 TGraphAsymmErrors.cxx:369
 TGraphAsymmErrors.cxx:370
 TGraphAsymmErrors.cxx:371
 TGraphAsymmErrors.cxx:372
 TGraphAsymmErrors.cxx:373
 TGraphAsymmErrors.cxx:374
 TGraphAsymmErrors.cxx:375
 TGraphAsymmErrors.cxx:376
 TGraphAsymmErrors.cxx:377
 TGraphAsymmErrors.cxx:378
 TGraphAsymmErrors.cxx:379
 TGraphAsymmErrors.cxx:380
 TGraphAsymmErrors.cxx:381
 TGraphAsymmErrors.cxx:382
 TGraphAsymmErrors.cxx:383
 TGraphAsymmErrors.cxx:384
 TGraphAsymmErrors.cxx:385
 TGraphAsymmErrors.cxx:386
 TGraphAsymmErrors.cxx:387
 TGraphAsymmErrors.cxx:388
 TGraphAsymmErrors.cxx:389
 TGraphAsymmErrors.cxx:390
 TGraphAsymmErrors.cxx:391
 TGraphAsymmErrors.cxx:392
 TGraphAsymmErrors.cxx:393
 TGraphAsymmErrors.cxx:394
 TGraphAsymmErrors.cxx:395
 TGraphAsymmErrors.cxx:396
 TGraphAsymmErrors.cxx:397
 TGraphAsymmErrors.cxx:398
 TGraphAsymmErrors.cxx:399
 TGraphAsymmErrors.cxx:400
 TGraphAsymmErrors.cxx:401
 TGraphAsymmErrors.cxx:402
 TGraphAsymmErrors.cxx:403
 TGraphAsymmErrors.cxx:404
 TGraphAsymmErrors.cxx:405
 TGraphAsymmErrors.cxx:406
 TGraphAsymmErrors.cxx:407
 TGraphAsymmErrors.cxx:408
 TGraphAsymmErrors.cxx:409
 TGraphAsymmErrors.cxx:410
 TGraphAsymmErrors.cxx:411
 TGraphAsymmErrors.cxx:412
 TGraphAsymmErrors.cxx:413
 TGraphAsymmErrors.cxx:414
 TGraphAsymmErrors.cxx:415
 TGraphAsymmErrors.cxx:416
 TGraphAsymmErrors.cxx:417
 TGraphAsymmErrors.cxx:418
 TGraphAsymmErrors.cxx:419
 TGraphAsymmErrors.cxx:420
 TGraphAsymmErrors.cxx:421
 TGraphAsymmErrors.cxx:422
 TGraphAsymmErrors.cxx:423
 TGraphAsymmErrors.cxx:424
 TGraphAsymmErrors.cxx:425
 TGraphAsymmErrors.cxx:426
 TGraphAsymmErrors.cxx:427
 TGraphAsymmErrors.cxx:428
 TGraphAsymmErrors.cxx:429
 TGraphAsymmErrors.cxx:430
 TGraphAsymmErrors.cxx:431
 TGraphAsymmErrors.cxx:432
 TGraphAsymmErrors.cxx:433
 TGraphAsymmErrors.cxx:434
 TGraphAsymmErrors.cxx:435
 TGraphAsymmErrors.cxx:436
 TGraphAsymmErrors.cxx:437
 TGraphAsymmErrors.cxx:438
 TGraphAsymmErrors.cxx:439
 TGraphAsymmErrors.cxx:440
 TGraphAsymmErrors.cxx:441
 TGraphAsymmErrors.cxx:442
 TGraphAsymmErrors.cxx:443
 TGraphAsymmErrors.cxx:444
 TGraphAsymmErrors.cxx:445
 TGraphAsymmErrors.cxx:446
 TGraphAsymmErrors.cxx:447
 TGraphAsymmErrors.cxx:448
 TGraphAsymmErrors.cxx:449
 TGraphAsymmErrors.cxx:450
 TGraphAsymmErrors.cxx:451
 TGraphAsymmErrors.cxx:452
 TGraphAsymmErrors.cxx:453
 TGraphAsymmErrors.cxx:454
 TGraphAsymmErrors.cxx:455
 TGraphAsymmErrors.cxx:456
 TGraphAsymmErrors.cxx:457
 TGraphAsymmErrors.cxx:458
 TGraphAsymmErrors.cxx:459
 TGraphAsymmErrors.cxx:460
 TGraphAsymmErrors.cxx:461
 TGraphAsymmErrors.cxx:462
 TGraphAsymmErrors.cxx:463
 TGraphAsymmErrors.cxx:464
 TGraphAsymmErrors.cxx:465
 TGraphAsymmErrors.cxx:466
 TGraphAsymmErrors.cxx:467
 TGraphAsymmErrors.cxx:468
 TGraphAsymmErrors.cxx:469
 TGraphAsymmErrors.cxx:470
 TGraphAsymmErrors.cxx:471
 TGraphAsymmErrors.cxx:472
 TGraphAsymmErrors.cxx:473
 TGraphAsymmErrors.cxx:474
 TGraphAsymmErrors.cxx:475
 TGraphAsymmErrors.cxx:476
 TGraphAsymmErrors.cxx:477
 TGraphAsymmErrors.cxx:478
 TGraphAsymmErrors.cxx:479
 TGraphAsymmErrors.cxx:480
 TGraphAsymmErrors.cxx:481
 TGraphAsymmErrors.cxx:482
 TGraphAsymmErrors.cxx:483
 TGraphAsymmErrors.cxx:484
 TGraphAsymmErrors.cxx:485
 TGraphAsymmErrors.cxx:486
 TGraphAsymmErrors.cxx:487
 TGraphAsymmErrors.cxx:488
 TGraphAsymmErrors.cxx:489
 TGraphAsymmErrors.cxx:490
 TGraphAsymmErrors.cxx:491
 TGraphAsymmErrors.cxx:492
 TGraphAsymmErrors.cxx:493
 TGraphAsymmErrors.cxx:494
 TGraphAsymmErrors.cxx:495
 TGraphAsymmErrors.cxx:496
 TGraphAsymmErrors.cxx:497
 TGraphAsymmErrors.cxx:498
 TGraphAsymmErrors.cxx:499
 TGraphAsymmErrors.cxx:500
 TGraphAsymmErrors.cxx:501
 TGraphAsymmErrors.cxx:502
 TGraphAsymmErrors.cxx:503
 TGraphAsymmErrors.cxx:504
 TGraphAsymmErrors.cxx:505
 TGraphAsymmErrors.cxx:506
 TGraphAsymmErrors.cxx:507
 TGraphAsymmErrors.cxx:508
 TGraphAsymmErrors.cxx:509
 TGraphAsymmErrors.cxx:510
 TGraphAsymmErrors.cxx:511
 TGraphAsymmErrors.cxx:512
 TGraphAsymmErrors.cxx:513
 TGraphAsymmErrors.cxx:514
 TGraphAsymmErrors.cxx:515
 TGraphAsymmErrors.cxx:516
 TGraphAsymmErrors.cxx:517
 TGraphAsymmErrors.cxx:518
 TGraphAsymmErrors.cxx:519
 TGraphAsymmErrors.cxx:520
 TGraphAsymmErrors.cxx:521
 TGraphAsymmErrors.cxx:522
 TGraphAsymmErrors.cxx:523
 TGraphAsymmErrors.cxx:524
 TGraphAsymmErrors.cxx:525
 TGraphAsymmErrors.cxx:526
 TGraphAsymmErrors.cxx:527
 TGraphAsymmErrors.cxx:528
 TGraphAsymmErrors.cxx:529
 TGraphAsymmErrors.cxx:530
 TGraphAsymmErrors.cxx:531
 TGraphAsymmErrors.cxx:532
 TGraphAsymmErrors.cxx:533
 TGraphAsymmErrors.cxx:534
 TGraphAsymmErrors.cxx:535
 TGraphAsymmErrors.cxx:536
 TGraphAsymmErrors.cxx:537
 TGraphAsymmErrors.cxx:538
 TGraphAsymmErrors.cxx:539
 TGraphAsymmErrors.cxx:540
 TGraphAsymmErrors.cxx:541
 TGraphAsymmErrors.cxx:542
 TGraphAsymmErrors.cxx:543
 TGraphAsymmErrors.cxx:544
 TGraphAsymmErrors.cxx:545
 TGraphAsymmErrors.cxx:546
 TGraphAsymmErrors.cxx:547
 TGraphAsymmErrors.cxx:548
 TGraphAsymmErrors.cxx:549
 TGraphAsymmErrors.cxx:550
 TGraphAsymmErrors.cxx:551
 TGraphAsymmErrors.cxx:552
 TGraphAsymmErrors.cxx:553
 TGraphAsymmErrors.cxx:554
 TGraphAsymmErrors.cxx:555
 TGraphAsymmErrors.cxx:556
 TGraphAsymmErrors.cxx:557
 TGraphAsymmErrors.cxx:558
 TGraphAsymmErrors.cxx:559
 TGraphAsymmErrors.cxx:560
 TGraphAsymmErrors.cxx:561
 TGraphAsymmErrors.cxx:562
 TGraphAsymmErrors.cxx:563
 TGraphAsymmErrors.cxx:564
 TGraphAsymmErrors.cxx:565
 TGraphAsymmErrors.cxx:566
 TGraphAsymmErrors.cxx:567
 TGraphAsymmErrors.cxx:568
 TGraphAsymmErrors.cxx:569
 TGraphAsymmErrors.cxx:570
 TGraphAsymmErrors.cxx:571
 TGraphAsymmErrors.cxx:572
 TGraphAsymmErrors.cxx:573
 TGraphAsymmErrors.cxx:574
 TGraphAsymmErrors.cxx:575
 TGraphAsymmErrors.cxx:576
 TGraphAsymmErrors.cxx:577
 TGraphAsymmErrors.cxx:578
 TGraphAsymmErrors.cxx:579
 TGraphAsymmErrors.cxx:580
 TGraphAsymmErrors.cxx:581
 TGraphAsymmErrors.cxx:582
 TGraphAsymmErrors.cxx:583
 TGraphAsymmErrors.cxx:584
 TGraphAsymmErrors.cxx:585
 TGraphAsymmErrors.cxx:586
 TGraphAsymmErrors.cxx:587
 TGraphAsymmErrors.cxx:588
 TGraphAsymmErrors.cxx:589
 TGraphAsymmErrors.cxx:590
 TGraphAsymmErrors.cxx:591
 TGraphAsymmErrors.cxx:592
 TGraphAsymmErrors.cxx:593
 TGraphAsymmErrors.cxx:594
 TGraphAsymmErrors.cxx:595
 TGraphAsymmErrors.cxx:596
 TGraphAsymmErrors.cxx:597
 TGraphAsymmErrors.cxx:598
 TGraphAsymmErrors.cxx:599
 TGraphAsymmErrors.cxx:600
 TGraphAsymmErrors.cxx:601
 TGraphAsymmErrors.cxx:602
 TGraphAsymmErrors.cxx:603
 TGraphAsymmErrors.cxx:604
 TGraphAsymmErrors.cxx:605
 TGraphAsymmErrors.cxx:606
 TGraphAsymmErrors.cxx:607
 TGraphAsymmErrors.cxx:608
 TGraphAsymmErrors.cxx:609
 TGraphAsymmErrors.cxx:610
 TGraphAsymmErrors.cxx:611
 TGraphAsymmErrors.cxx:612
 TGraphAsymmErrors.cxx:613
 TGraphAsymmErrors.cxx:614
 TGraphAsymmErrors.cxx:615
 TGraphAsymmErrors.cxx:616
 TGraphAsymmErrors.cxx:617
 TGraphAsymmErrors.cxx:618
 TGraphAsymmErrors.cxx:619
 TGraphAsymmErrors.cxx:620
 TGraphAsymmErrors.cxx:621
 TGraphAsymmErrors.cxx:622
 TGraphAsymmErrors.cxx:623
 TGraphAsymmErrors.cxx:624
 TGraphAsymmErrors.cxx:625
 TGraphAsymmErrors.cxx:626
 TGraphAsymmErrors.cxx:627
 TGraphAsymmErrors.cxx:628
 TGraphAsymmErrors.cxx:629
 TGraphAsymmErrors.cxx:630
 TGraphAsymmErrors.cxx:631
 TGraphAsymmErrors.cxx:632
 TGraphAsymmErrors.cxx:633
 TGraphAsymmErrors.cxx:634
 TGraphAsymmErrors.cxx:635
 TGraphAsymmErrors.cxx:636
 TGraphAsymmErrors.cxx:637
 TGraphAsymmErrors.cxx:638
 TGraphAsymmErrors.cxx:639
 TGraphAsymmErrors.cxx:640
 TGraphAsymmErrors.cxx:641
 TGraphAsymmErrors.cxx:642
 TGraphAsymmErrors.cxx:643
 TGraphAsymmErrors.cxx:644
 TGraphAsymmErrors.cxx:645
 TGraphAsymmErrors.cxx:646
 TGraphAsymmErrors.cxx:647
 TGraphAsymmErrors.cxx:648
 TGraphAsymmErrors.cxx:649
 TGraphAsymmErrors.cxx:650
 TGraphAsymmErrors.cxx:651
 TGraphAsymmErrors.cxx:652
 TGraphAsymmErrors.cxx:653
 TGraphAsymmErrors.cxx:654
 TGraphAsymmErrors.cxx:655
 TGraphAsymmErrors.cxx:656
 TGraphAsymmErrors.cxx:657
 TGraphAsymmErrors.cxx:658
 TGraphAsymmErrors.cxx:659
 TGraphAsymmErrors.cxx:660
 TGraphAsymmErrors.cxx:661
 TGraphAsymmErrors.cxx:662
 TGraphAsymmErrors.cxx:663
 TGraphAsymmErrors.cxx:664
 TGraphAsymmErrors.cxx:665
 TGraphAsymmErrors.cxx:666
 TGraphAsymmErrors.cxx:667
 TGraphAsymmErrors.cxx:668
 TGraphAsymmErrors.cxx:669
 TGraphAsymmErrors.cxx:670
 TGraphAsymmErrors.cxx:671
 TGraphAsymmErrors.cxx:672
 TGraphAsymmErrors.cxx:673
 TGraphAsymmErrors.cxx:674
 TGraphAsymmErrors.cxx:675
 TGraphAsymmErrors.cxx:676
 TGraphAsymmErrors.cxx:677
 TGraphAsymmErrors.cxx:678
 TGraphAsymmErrors.cxx:679
 TGraphAsymmErrors.cxx:680
 TGraphAsymmErrors.cxx:681
 TGraphAsymmErrors.cxx:682
 TGraphAsymmErrors.cxx:683
 TGraphAsymmErrors.cxx:684
 TGraphAsymmErrors.cxx:685
 TGraphAsymmErrors.cxx:686
 TGraphAsymmErrors.cxx:687
 TGraphAsymmErrors.cxx:688
 TGraphAsymmErrors.cxx:689
 TGraphAsymmErrors.cxx:690
 TGraphAsymmErrors.cxx:691
 TGraphAsymmErrors.cxx:692
 TGraphAsymmErrors.cxx:693
 TGraphAsymmErrors.cxx:694
 TGraphAsymmErrors.cxx:695
 TGraphAsymmErrors.cxx:696
 TGraphAsymmErrors.cxx:697
 TGraphAsymmErrors.cxx:698
 TGraphAsymmErrors.cxx:699
 TGraphAsymmErrors.cxx:700
 TGraphAsymmErrors.cxx:701
 TGraphAsymmErrors.cxx:702
 TGraphAsymmErrors.cxx:703
 TGraphAsymmErrors.cxx:704
 TGraphAsymmErrors.cxx:705
 TGraphAsymmErrors.cxx:706
 TGraphAsymmErrors.cxx:707
 TGraphAsymmErrors.cxx:708
 TGraphAsymmErrors.cxx:709
 TGraphAsymmErrors.cxx:710
 TGraphAsymmErrors.cxx:711
 TGraphAsymmErrors.cxx:712
 TGraphAsymmErrors.cxx:713
 TGraphAsymmErrors.cxx:714
 TGraphAsymmErrors.cxx:715
 TGraphAsymmErrors.cxx:716
 TGraphAsymmErrors.cxx:717
 TGraphAsymmErrors.cxx:718
 TGraphAsymmErrors.cxx:719
 TGraphAsymmErrors.cxx:720
 TGraphAsymmErrors.cxx:721
 TGraphAsymmErrors.cxx:722
 TGraphAsymmErrors.cxx:723
 TGraphAsymmErrors.cxx:724
 TGraphAsymmErrors.cxx:725
 TGraphAsymmErrors.cxx:726
 TGraphAsymmErrors.cxx:727
 TGraphAsymmErrors.cxx:728
 TGraphAsymmErrors.cxx:729
 TGraphAsymmErrors.cxx:730
 TGraphAsymmErrors.cxx:731
 TGraphAsymmErrors.cxx:732
 TGraphAsymmErrors.cxx:733
 TGraphAsymmErrors.cxx:734
 TGraphAsymmErrors.cxx:735
 TGraphAsymmErrors.cxx:736
 TGraphAsymmErrors.cxx:737
 TGraphAsymmErrors.cxx:738
 TGraphAsymmErrors.cxx:739
 TGraphAsymmErrors.cxx:740
 TGraphAsymmErrors.cxx:741
 TGraphAsymmErrors.cxx:742
 TGraphAsymmErrors.cxx:743
 TGraphAsymmErrors.cxx:744
 TGraphAsymmErrors.cxx:745
 TGraphAsymmErrors.cxx:746
 TGraphAsymmErrors.cxx:747
 TGraphAsymmErrors.cxx:748
 TGraphAsymmErrors.cxx:749
 TGraphAsymmErrors.cxx:750
 TGraphAsymmErrors.cxx:751
 TGraphAsymmErrors.cxx:752
 TGraphAsymmErrors.cxx:753
 TGraphAsymmErrors.cxx:754
 TGraphAsymmErrors.cxx:755
 TGraphAsymmErrors.cxx:756
 TGraphAsymmErrors.cxx:757
 TGraphAsymmErrors.cxx:758
 TGraphAsymmErrors.cxx:759
 TGraphAsymmErrors.cxx:760
 TGraphAsymmErrors.cxx:761
 TGraphAsymmErrors.cxx:762
 TGraphAsymmErrors.cxx:763
 TGraphAsymmErrors.cxx:764
 TGraphAsymmErrors.cxx:765
 TGraphAsymmErrors.cxx:766
 TGraphAsymmErrors.cxx:767
 TGraphAsymmErrors.cxx:768
 TGraphAsymmErrors.cxx:769
 TGraphAsymmErrors.cxx:770
 TGraphAsymmErrors.cxx:771
 TGraphAsymmErrors.cxx:772
 TGraphAsymmErrors.cxx:773
 TGraphAsymmErrors.cxx:774
 TGraphAsymmErrors.cxx:775
 TGraphAsymmErrors.cxx:776
 TGraphAsymmErrors.cxx:777
 TGraphAsymmErrors.cxx:778
 TGraphAsymmErrors.cxx:779
 TGraphAsymmErrors.cxx:780
 TGraphAsymmErrors.cxx:781
 TGraphAsymmErrors.cxx:782
 TGraphAsymmErrors.cxx:783
 TGraphAsymmErrors.cxx:784
 TGraphAsymmErrors.cxx:785
 TGraphAsymmErrors.cxx:786
 TGraphAsymmErrors.cxx:787
 TGraphAsymmErrors.cxx:788
 TGraphAsymmErrors.cxx:789
 TGraphAsymmErrors.cxx:790
 TGraphAsymmErrors.cxx:791
 TGraphAsymmErrors.cxx:792
 TGraphAsymmErrors.cxx:793
 TGraphAsymmErrors.cxx:794
 TGraphAsymmErrors.cxx:795
 TGraphAsymmErrors.cxx:796
 TGraphAsymmErrors.cxx:797
 TGraphAsymmErrors.cxx:798
 TGraphAsymmErrors.cxx:799
 TGraphAsymmErrors.cxx:800
 TGraphAsymmErrors.cxx:801
 TGraphAsymmErrors.cxx:802
 TGraphAsymmErrors.cxx:803
 TGraphAsymmErrors.cxx:804
 TGraphAsymmErrors.cxx:805
 TGraphAsymmErrors.cxx:806
 TGraphAsymmErrors.cxx:807
 TGraphAsymmErrors.cxx:808
 TGraphAsymmErrors.cxx:809
 TGraphAsymmErrors.cxx:810
 TGraphAsymmErrors.cxx:811
 TGraphAsymmErrors.cxx:812
 TGraphAsymmErrors.cxx:813
 TGraphAsymmErrors.cxx:814
 TGraphAsymmErrors.cxx:815
 TGraphAsymmErrors.cxx:816
 TGraphAsymmErrors.cxx:817
 TGraphAsymmErrors.cxx:818
 TGraphAsymmErrors.cxx:819
 TGraphAsymmErrors.cxx:820
 TGraphAsymmErrors.cxx:821
 TGraphAsymmErrors.cxx:822
 TGraphAsymmErrors.cxx:823
 TGraphAsymmErrors.cxx:824
 TGraphAsymmErrors.cxx:825
 TGraphAsymmErrors.cxx:826
 TGraphAsymmErrors.cxx:827
 TGraphAsymmErrors.cxx:828
 TGraphAsymmErrors.cxx:829
 TGraphAsymmErrors.cxx:830
 TGraphAsymmErrors.cxx:831
 TGraphAsymmErrors.cxx:832
 TGraphAsymmErrors.cxx:833
 TGraphAsymmErrors.cxx:834
 TGraphAsymmErrors.cxx:835
 TGraphAsymmErrors.cxx:836
 TGraphAsymmErrors.cxx:837
 TGraphAsymmErrors.cxx:838
 TGraphAsymmErrors.cxx:839
 TGraphAsymmErrors.cxx:840
 TGraphAsymmErrors.cxx:841
 TGraphAsymmErrors.cxx:842
 TGraphAsymmErrors.cxx:843
 TGraphAsymmErrors.cxx:844
 TGraphAsymmErrors.cxx:845
 TGraphAsymmErrors.cxx:846
 TGraphAsymmErrors.cxx:847
 TGraphAsymmErrors.cxx:848
 TGraphAsymmErrors.cxx:849
 TGraphAsymmErrors.cxx:850
 TGraphAsymmErrors.cxx:851
 TGraphAsymmErrors.cxx:852
 TGraphAsymmErrors.cxx:853
 TGraphAsymmErrors.cxx:854
 TGraphAsymmErrors.cxx:855
 TGraphAsymmErrors.cxx:856
 TGraphAsymmErrors.cxx:857
 TGraphAsymmErrors.cxx:858
 TGraphAsymmErrors.cxx:859
 TGraphAsymmErrors.cxx:860
 TGraphAsymmErrors.cxx:861
 TGraphAsymmErrors.cxx:862
 TGraphAsymmErrors.cxx:863
 TGraphAsymmErrors.cxx:864
 TGraphAsymmErrors.cxx:865
 TGraphAsymmErrors.cxx:866
 TGraphAsymmErrors.cxx:867
 TGraphAsymmErrors.cxx:868
 TGraphAsymmErrors.cxx:869
 TGraphAsymmErrors.cxx:870
 TGraphAsymmErrors.cxx:871
 TGraphAsymmErrors.cxx:872
 TGraphAsymmErrors.cxx:873
 TGraphAsymmErrors.cxx:874
 TGraphAsymmErrors.cxx:875
 TGraphAsymmErrors.cxx:876
 TGraphAsymmErrors.cxx:877
 TGraphAsymmErrors.cxx:878
 TGraphAsymmErrors.cxx:879
 TGraphAsymmErrors.cxx:880
 TGraphAsymmErrors.cxx:881
 TGraphAsymmErrors.cxx:882
 TGraphAsymmErrors.cxx:883
 TGraphAsymmErrors.cxx:884
 TGraphAsymmErrors.cxx:885
 TGraphAsymmErrors.cxx:886
 TGraphAsymmErrors.cxx:887
 TGraphAsymmErrors.cxx:888
 TGraphAsymmErrors.cxx:889
 TGraphAsymmErrors.cxx:890
 TGraphAsymmErrors.cxx:891
 TGraphAsymmErrors.cxx:892
 TGraphAsymmErrors.cxx:893
 TGraphAsymmErrors.cxx:894
 TGraphAsymmErrors.cxx:895
 TGraphAsymmErrors.cxx:896
 TGraphAsymmErrors.cxx:897
 TGraphAsymmErrors.cxx:898
 TGraphAsymmErrors.cxx:899
 TGraphAsymmErrors.cxx:900
 TGraphAsymmErrors.cxx:901
 TGraphAsymmErrors.cxx:902
 TGraphAsymmErrors.cxx:903
 TGraphAsymmErrors.cxx:904
 TGraphAsymmErrors.cxx:905
 TGraphAsymmErrors.cxx:906
 TGraphAsymmErrors.cxx:907
 TGraphAsymmErrors.cxx:908
 TGraphAsymmErrors.cxx:909
 TGraphAsymmErrors.cxx:910
 TGraphAsymmErrors.cxx:911
 TGraphAsymmErrors.cxx:912
 TGraphAsymmErrors.cxx:913
 TGraphAsymmErrors.cxx:914
 TGraphAsymmErrors.cxx:915
 TGraphAsymmErrors.cxx:916
 TGraphAsymmErrors.cxx:917
 TGraphAsymmErrors.cxx:918
 TGraphAsymmErrors.cxx:919
 TGraphAsymmErrors.cxx:920
 TGraphAsymmErrors.cxx:921
 TGraphAsymmErrors.cxx:922
 TGraphAsymmErrors.cxx:923
 TGraphAsymmErrors.cxx:924
 TGraphAsymmErrors.cxx:925
 TGraphAsymmErrors.cxx:926
 TGraphAsymmErrors.cxx:927
 TGraphAsymmErrors.cxx:928
 TGraphAsymmErrors.cxx:929
 TGraphAsymmErrors.cxx:930
 TGraphAsymmErrors.cxx:931
 TGraphAsymmErrors.cxx:932
 TGraphAsymmErrors.cxx:933
 TGraphAsymmErrors.cxx:934
 TGraphAsymmErrors.cxx:935
 TGraphAsymmErrors.cxx:936
 TGraphAsymmErrors.cxx:937
 TGraphAsymmErrors.cxx:938
 TGraphAsymmErrors.cxx:939
 TGraphAsymmErrors.cxx:940
 TGraphAsymmErrors.cxx:941
 TGraphAsymmErrors.cxx:942
 TGraphAsymmErrors.cxx:943
 TGraphAsymmErrors.cxx:944
 TGraphAsymmErrors.cxx:945
 TGraphAsymmErrors.cxx:946
 TGraphAsymmErrors.cxx:947
 TGraphAsymmErrors.cxx:948
 TGraphAsymmErrors.cxx:949
 TGraphAsymmErrors.cxx:950
 TGraphAsymmErrors.cxx:951
 TGraphAsymmErrors.cxx:952
 TGraphAsymmErrors.cxx:953
 TGraphAsymmErrors.cxx:954
 TGraphAsymmErrors.cxx:955
 TGraphAsymmErrors.cxx:956
 TGraphAsymmErrors.cxx:957
 TGraphAsymmErrors.cxx:958
 TGraphAsymmErrors.cxx:959
 TGraphAsymmErrors.cxx:960
 TGraphAsymmErrors.cxx:961
 TGraphAsymmErrors.cxx:962
 TGraphAsymmErrors.cxx:963
 TGraphAsymmErrors.cxx:964
 TGraphAsymmErrors.cxx:965
 TGraphAsymmErrors.cxx:966
 TGraphAsymmErrors.cxx:967
 TGraphAsymmErrors.cxx:968
 TGraphAsymmErrors.cxx:969
 TGraphAsymmErrors.cxx:970
 TGraphAsymmErrors.cxx:971
 TGraphAsymmErrors.cxx:972
 TGraphAsymmErrors.cxx:973
 TGraphAsymmErrors.cxx:974
 TGraphAsymmErrors.cxx:975
 TGraphAsymmErrors.cxx:976
 TGraphAsymmErrors.cxx:977
 TGraphAsymmErrors.cxx:978
 TGraphAsymmErrors.cxx:979
 TGraphAsymmErrors.cxx:980
 TGraphAsymmErrors.cxx:981
 TGraphAsymmErrors.cxx:982
 TGraphAsymmErrors.cxx:983
 TGraphAsymmErrors.cxx:984
 TGraphAsymmErrors.cxx:985
 TGraphAsymmErrors.cxx:986
 TGraphAsymmErrors.cxx:987
 TGraphAsymmErrors.cxx:988
 TGraphAsymmErrors.cxx:989
 TGraphAsymmErrors.cxx:990
 TGraphAsymmErrors.cxx:991
 TGraphAsymmErrors.cxx:992
 TGraphAsymmErrors.cxx:993
 TGraphAsymmErrors.cxx:994
 TGraphAsymmErrors.cxx:995
 TGraphAsymmErrors.cxx:996
 TGraphAsymmErrors.cxx:997
 TGraphAsymmErrors.cxx:998
 TGraphAsymmErrors.cxx:999
 TGraphAsymmErrors.cxx:1000
 TGraphAsymmErrors.cxx:1001
 TGraphAsymmErrors.cxx:1002
 TGraphAsymmErrors.cxx:1003
 TGraphAsymmErrors.cxx:1004
 TGraphAsymmErrors.cxx:1005
 TGraphAsymmErrors.cxx:1006
 TGraphAsymmErrors.cxx:1007
 TGraphAsymmErrors.cxx:1008
 TGraphAsymmErrors.cxx:1009
 TGraphAsymmErrors.cxx:1010
 TGraphAsymmErrors.cxx:1011
 TGraphAsymmErrors.cxx:1012
 TGraphAsymmErrors.cxx:1013
 TGraphAsymmErrors.cxx:1014
 TGraphAsymmErrors.cxx:1015
 TGraphAsymmErrors.cxx:1016
 TGraphAsymmErrors.cxx:1017
 TGraphAsymmErrors.cxx:1018
 TGraphAsymmErrors.cxx:1019
 TGraphAsymmErrors.cxx:1020
 TGraphAsymmErrors.cxx:1021
 TGraphAsymmErrors.cxx:1022
 TGraphAsymmErrors.cxx:1023
 TGraphAsymmErrors.cxx:1024
 TGraphAsymmErrors.cxx:1025
 TGraphAsymmErrors.cxx:1026
 TGraphAsymmErrors.cxx:1027
 TGraphAsymmErrors.cxx:1028
 TGraphAsymmErrors.cxx:1029
 TGraphAsymmErrors.cxx:1030
 TGraphAsymmErrors.cxx:1031
 TGraphAsymmErrors.cxx:1032
 TGraphAsymmErrors.cxx:1033
 TGraphAsymmErrors.cxx:1034
 TGraphAsymmErrors.cxx:1035
 TGraphAsymmErrors.cxx:1036
 TGraphAsymmErrors.cxx:1037
 TGraphAsymmErrors.cxx:1038
 TGraphAsymmErrors.cxx:1039
 TGraphAsymmErrors.cxx:1040
 TGraphAsymmErrors.cxx:1041
 TGraphAsymmErrors.cxx:1042
 TGraphAsymmErrors.cxx:1043
 TGraphAsymmErrors.cxx:1044
 TGraphAsymmErrors.cxx:1045
 TGraphAsymmErrors.cxx:1046
 TGraphAsymmErrors.cxx:1047
 TGraphAsymmErrors.cxx:1048
 TGraphAsymmErrors.cxx:1049
 TGraphAsymmErrors.cxx:1050
 TGraphAsymmErrors.cxx:1051
 TGraphAsymmErrors.cxx:1052
 TGraphAsymmErrors.cxx:1053
 TGraphAsymmErrors.cxx:1054
 TGraphAsymmErrors.cxx:1055
 TGraphAsymmErrors.cxx:1056
 TGraphAsymmErrors.cxx:1057
 TGraphAsymmErrors.cxx:1058
 TGraphAsymmErrors.cxx:1059
 TGraphAsymmErrors.cxx:1060
 TGraphAsymmErrors.cxx:1061
 TGraphAsymmErrors.cxx:1062
 TGraphAsymmErrors.cxx:1063
 TGraphAsymmErrors.cxx:1064
 TGraphAsymmErrors.cxx:1065
 TGraphAsymmErrors.cxx:1066
 TGraphAsymmErrors.cxx:1067
 TGraphAsymmErrors.cxx:1068
 TGraphAsymmErrors.cxx:1069
 TGraphAsymmErrors.cxx:1070
 TGraphAsymmErrors.cxx:1071
 TGraphAsymmErrors.cxx:1072
 TGraphAsymmErrors.cxx:1073
 TGraphAsymmErrors.cxx:1074
 TGraphAsymmErrors.cxx:1075
 TGraphAsymmErrors.cxx:1076
 TGraphAsymmErrors.cxx:1077
 TGraphAsymmErrors.cxx:1078
 TGraphAsymmErrors.cxx:1079
 TGraphAsymmErrors.cxx:1080
 TGraphAsymmErrors.cxx:1081
 TGraphAsymmErrors.cxx:1082
 TGraphAsymmErrors.cxx:1083
 TGraphAsymmErrors.cxx:1084
 TGraphAsymmErrors.cxx:1085
 TGraphAsymmErrors.cxx:1086
 TGraphAsymmErrors.cxx:1087
 TGraphAsymmErrors.cxx:1088
 TGraphAsymmErrors.cxx:1089
 TGraphAsymmErrors.cxx:1090
 TGraphAsymmErrors.cxx:1091
 TGraphAsymmErrors.cxx:1092
 TGraphAsymmErrors.cxx:1093
 TGraphAsymmErrors.cxx:1094
 TGraphAsymmErrors.cxx:1095
 TGraphAsymmErrors.cxx:1096
 TGraphAsymmErrors.cxx:1097
 TGraphAsymmErrors.cxx:1098
 TGraphAsymmErrors.cxx:1099
 TGraphAsymmErrors.cxx:1100
 TGraphAsymmErrors.cxx:1101
 TGraphAsymmErrors.cxx:1102
 TGraphAsymmErrors.cxx:1103
 TGraphAsymmErrors.cxx:1104
 TGraphAsymmErrors.cxx:1105
 TGraphAsymmErrors.cxx:1106
 TGraphAsymmErrors.cxx:1107
 TGraphAsymmErrors.cxx:1108
 TGraphAsymmErrors.cxx:1109
 TGraphAsymmErrors.cxx:1110
 TGraphAsymmErrors.cxx:1111
 TGraphAsymmErrors.cxx:1112
 TGraphAsymmErrors.cxx:1113
 TGraphAsymmErrors.cxx:1114
 TGraphAsymmErrors.cxx:1115
 TGraphAsymmErrors.cxx:1116
 TGraphAsymmErrors.cxx:1117
 TGraphAsymmErrors.cxx:1118
 TGraphAsymmErrors.cxx:1119
 TGraphAsymmErrors.cxx:1120
 TGraphAsymmErrors.cxx:1121
 TGraphAsymmErrors.cxx:1122
 TGraphAsymmErrors.cxx:1123
 TGraphAsymmErrors.cxx:1124
 TGraphAsymmErrors.cxx:1125
 TGraphAsymmErrors.cxx:1126
 TGraphAsymmErrors.cxx:1127
 TGraphAsymmErrors.cxx:1128
 TGraphAsymmErrors.cxx:1129
 TGraphAsymmErrors.cxx:1130
 TGraphAsymmErrors.cxx:1131
 TGraphAsymmErrors.cxx:1132
 TGraphAsymmErrors.cxx:1133
 TGraphAsymmErrors.cxx:1134
 TGraphAsymmErrors.cxx:1135
 TGraphAsymmErrors.cxx:1136
 TGraphAsymmErrors.cxx:1137
 TGraphAsymmErrors.cxx:1138
 TGraphAsymmErrors.cxx:1139
 TGraphAsymmErrors.cxx:1140
 TGraphAsymmErrors.cxx:1141
 TGraphAsymmErrors.cxx:1142
 TGraphAsymmErrors.cxx:1143
 TGraphAsymmErrors.cxx:1144
 TGraphAsymmErrors.cxx:1145
 TGraphAsymmErrors.cxx:1146
 TGraphAsymmErrors.cxx:1147
 TGraphAsymmErrors.cxx:1148
 TGraphAsymmErrors.cxx:1149
 TGraphAsymmErrors.cxx:1150
 TGraphAsymmErrors.cxx:1151
 TGraphAsymmErrors.cxx:1152
 TGraphAsymmErrors.cxx:1153
 TGraphAsymmErrors.cxx:1154
 TGraphAsymmErrors.cxx:1155
 TGraphAsymmErrors.cxx:1156
 TGraphAsymmErrors.cxx:1157
 TGraphAsymmErrors.cxx:1158
 TGraphAsymmErrors.cxx:1159
 TGraphAsymmErrors.cxx:1160
 TGraphAsymmErrors.cxx:1161
 TGraphAsymmErrors.cxx:1162
 TGraphAsymmErrors.cxx:1163
 TGraphAsymmErrors.cxx:1164
 TGraphAsymmErrors.cxx:1165
 TGraphAsymmErrors.cxx:1166
 TGraphAsymmErrors.cxx:1167
 TGraphAsymmErrors.cxx:1168
 TGraphAsymmErrors.cxx:1169
 TGraphAsymmErrors.cxx:1170
 TGraphAsymmErrors.cxx:1171
 TGraphAsymmErrors.cxx:1172
 TGraphAsymmErrors.cxx:1173
 TGraphAsymmErrors.cxx:1174
 TGraphAsymmErrors.cxx:1175
 TGraphAsymmErrors.cxx:1176
 TGraphAsymmErrors.cxx:1177
 TGraphAsymmErrors.cxx:1178
 TGraphAsymmErrors.cxx:1179
 TGraphAsymmErrors.cxx:1180
 TGraphAsymmErrors.cxx:1181
 TGraphAsymmErrors.cxx:1182