// @(#)root/hist:$Id: TGraph2DErrors.cxx,v 1.00
// Author: Olivier Couet

/*************************************************************************
 * 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 "Riostream.h"
#include "TROOT.h"
#include "TClass.h"
#include "TGraph2DErrors.h"
#include "TMath.h"
#include "TPolyMarker.h"
#include "TVirtualPad.h"
#include "TVirtualFitter.h"
#include "THLimitsFinder.h"
#include "TStyle.h"

ClassImp(TGraph2DErrors)

//______________________________________________________________________________
/* Begin_Html
<center><h2>Graph 2D class with errors</h2></center>
A TGraph2DErrors is a TGraph2D with errors. It behaves like a TGraph2D and has
the same drawing options.
<p>
The <tt>"ERR"</tt> drawing option allows to display the error bars. The
following example shows how to use it:

End_Html
Begin_Macro(source)
{
   TCanvas *c = new TCanvas("c","Graph2DErrors example",0,0,600,600);
   Double_t P = 6.;
   Int_t np   = 200;

   Double_t *rx=0, *ry=0, *rz=0;
   Double_t *ex=0, *ey=0, *ez=0;

   rx = new Double_t[np];
   ry = new Double_t[np];
   rz = new Double_t[np];
   ex = new Double_t[np];
   ey = new Double_t[np];
   ez = new Double_t[np];

   TRandom *r = new TRandom();

   for (Int_t N=0; N<np;N++) {
      rx[N] = 2*P*(r->Rndm(N))-P;
      ry[N] = 2*P*(r->Rndm(N))-P;
      rz[N] = rx[N]*rx[N]-ry[N]*ry[N];
      rx[N] = 10.+rx[N];
      ry[N] = 10.+ry[N];
      rz[N] = 40.+rz[N];
      ex[N] = r->Rndm(N);
      ey[N] = r->Rndm(N);
      ez[N] = 10*r->Rndm(N);
   }

   TGraph2DErrors *dte = new TGraph2DErrors(np, rx, ry, rz, ex, ey, ez);
   dte->SetTitle("TGraph2D with error bars: option \"ERR\"");
   dte->SetFillColor(29);
   dte->SetMarkerSize(0.8);
   dte->SetMarkerStyle(20);
   dte->SetMarkerColor(kRed);
   dte->SetLineColor(kBlue-3);
   dte->SetLineWidth(2);
   dte->Draw("err p0");
   gPad->SetLogy(1);
   return c;
}
End_Macro
*/


//______________________________________________________________________________
TGraph2DErrors::TGraph2DErrors(): TGraph2D()
{
   // TGraph2DErrors default constructor

   fEX = 0;
   fEY = 0;
   fEZ = 0;
}


//______________________________________________________________________________
TGraph2DErrors::TGraph2DErrors(Int_t n)
               : TGraph2D(n)
{
   // TGraph2DErrors normal constructor
   // the arrays are preset to zero

   if (n <= 0) {
      Error("TGraph2DErrors", "Invalid number of points (%d)", n);
      return;
   }

   fEX = new Double_t[n];
   fEY = new Double_t[n];
   fEZ = new Double_t[n];

   for (Int_t i=0;i<n;i++) {
      fEX[i] = 0;
      fEY[i] = 0;
      fEZ[i] = 0;
   }
}


//______________________________________________________________________________
TGraph2DErrors::TGraph2DErrors(Int_t n, Double_t *x, Double_t *y, Double_t *z,
                               Double_t *ex, Double_t *ey, Double_t *ez, Option_t *)
               :TGraph2D(n, x, y, z)
{
   // TGraph2DErrors constructor with doubles vectors as input.

   if (n <= 0) {
      Error("TGraphErrors", "Invalid number of points (%d)", n);
      return;
   }

   fEX = new Double_t[n];
   fEY = new Double_t[n];
   fEZ = new Double_t[n];

   for (Int_t i=0;i<n;i++) {
      if (ex) fEX[i] = ex[i];
      else    fEX[i] = 0;
      if (ey) fEY[i] = ey[i];
      else    fEY[i] = 0;
      if (ez) fEZ[i] = ez[i];
      else    fEZ[i] = 0;
   }
}


//______________________________________________________________________________
TGraph2DErrors::~TGraph2DErrors()
{
   // TGraph2DErrors destructor.

   delete [] fEX;
   delete [] fEY;
   delete [] fEZ;
}

//______________________________________________________________________________
TGraph2DErrors::TGraph2DErrors(const TGraph2DErrors &g) 
: TGraph2D(g), fEX(0), fEY(0), fEZ(0)
{
   // Copy constructor. 
   // Copy everything except list of functions
   if (fSize > 0) {
      fEX = new Double_t[fSize];
      fEY = new Double_t[fSize];
      fEZ = new Double_t[fSize];
      for (Int_t n = 0; n < fSize; n++) {
         fEX[n] = g.fEX[n];
         fEY[n] = g.fEY[n];
         fEZ[n] = g.fEZ[n];
      }
   }
}

//______________________________________________________________________________
TGraph2DErrors & TGraph2DErrors::operator=(const TGraph2DErrors &g) 
{ 
   // Assignment operator 
   // Copy everything except list of functions

   if (this == &g) return *this;

   // call operator= on TGraph2D
   this->TGraph2D::operator=(static_cast<const TGraph2D&>(g) ); 

   // delete before existing contained objects
   if (fEX) delete [] fEX;
   if (fEY) delete [] fEY;
   if (fEZ) delete [] fEZ;

   fEX   = (fSize > 0) ? new Double_t[fSize] : 0;
   fEY   = (fSize > 0) ? new Double_t[fSize] : 0;
   fEZ   = (fSize > 0) ? new Double_t[fSize] : 0;


   // copy error arrays
   for (Int_t n = 0; n < fSize; n++) {
      fEX[n] = g.fEX[n];
      fEY[n] = g.fEY[n];
      fEZ[n] = g.fEZ[n];
   }
   return *this; 
}
//______________________________________________________________________________
Double_t TGraph2DErrors::GetErrorX(Int_t i) const
{
   // This function is called by Graph2DFitChisquare.
   // It returns the error along X at point i.

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


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

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


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

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


//______________________________________________________________________________
Double_t TGraph2DErrors::GetXmaxE() const
{
   // Returns the X maximum with errors.

   Double_t v = fX[0]+fEX[0];
   for (Int_t i=1; i<fNpoints; i++) if (fX[i]+fEX[i]>v) v=fX[i]+fEX[i];
   return v;
}


//______________________________________________________________________________
Double_t TGraph2DErrors::GetXminE() const
{
   // Returns the X minimum with errors.

   Double_t v = fX[0]-fEX[0];
   for (Int_t i=1; i<fNpoints; i++) if (fX[i]-fEX[i]<v) v=fX[i]-fEX[i];
   return v;
}


//______________________________________________________________________________
Double_t TGraph2DErrors::GetYmaxE() const
{
   // Returns the Y maximum with errors.

   Double_t v = fY[0]+fEY[0];
   for (Int_t i=1; i<fNpoints; i++) if (fY[i]+fEY[i]>v) v=fY[i]+fEY[i];
   return v;
}


//______________________________________________________________________________
Double_t TGraph2DErrors::GetYminE() const
{
   // Returns the Y minimum with errors.

   Double_t v = fY[0]+fEY[0];
   for (Int_t i=1; i<fNpoints; i++) if (fY[i]-fEY[i]<v) v=fY[i]-fEY[i];
   return v;
}


//______________________________________________________________________________
Double_t TGraph2DErrors::GetZmaxE() const
{
   // Returns the Z maximum with errors.

   Double_t v = fZ[0]+fEZ[0];
   for (Int_t i=1; i<fNpoints; i++) if (fZ[i]+fEZ[i]>v) v=fZ[i]+fEZ[i];
   return v;
}


//______________________________________________________________________________
Double_t TGraph2DErrors::GetZminE() const
{
   // Returns the Z minimum with errors.

   Double_t v = fZ[0]+fEZ[0];
   for (Int_t i=1; i<fNpoints; i++) if (fZ[i]-fEZ[i]<v) v=fZ[i]-fEZ[i];
   return v;
}


//______________________________________________________________________________
void TGraph2DErrors::Set(Int_t n)
{
   // Set number of points in the 2D graph.
   // Existing coordinates are preserved.
   // New coordinates above fNpoints are preset to 0.

   if (n < 0) n = 0;
   if (n == fNpoints) return;
   if (n >  fNpoints) SetPointError(n,0,0,0);
   fNpoints = n;
}


//______________________________________________________________________________
void TGraph2DErrors::SetPoint(Int_t i, Double_t x, Double_t y, Double_t z)
{
   // Set x, y and z values for point number i

   if (i < 0) return;
   if (i >= fNpoints) {
   // re-allocate the object
      Double_t *savex  = new Double_t[i+1];
      Double_t *savey  = new Double_t[i+1];
      Double_t *savez  = new Double_t[i+1];
      Double_t *saveex = new Double_t[i+1];
      Double_t *saveey = new Double_t[i+1];
      Double_t *saveez = new Double_t[i+1];
      if (fNpoints > 0) {
         memcpy(savex, fX, fNpoints*sizeof(Double_t));
         memcpy(savey, fY, fNpoints*sizeof(Double_t));
         memcpy(savez, fZ, fNpoints*sizeof(Double_t));
         memcpy(saveex,fEX,fNpoints*sizeof(Double_t));
         memcpy(saveey,fEY,fNpoints*sizeof(Double_t));
         memcpy(saveez,fEZ,fNpoints*sizeof(Double_t));
      }
      if (fX)  delete [] fX;
      if (fY)  delete [] fY;
      if (fZ)  delete [] fZ;
      if (fEX) delete [] fEX;
      if (fEY) delete [] fEY;
      if (fEZ) delete [] fEZ;
      fX  = savex;
      fY  = savey;
      fZ  = savez;
      fEX = saveex;
      fEY = saveey;
      fEZ = saveez;
      fNpoints = i+1;
   }
   fX[i] = x;
   fY[i] = y;
   fZ[i] = z;
}


//______________________________________________________________________________
void TGraph2DErrors::SetPointError(Int_t i, Double_t ex, Double_t ey, Double_t ez)
{
   // Set ex, ey and ez values for point number i

   if (i < 0) return;
   if (i >= fNpoints) {
      // re-allocate the object
      TGraph2DErrors::SetPoint(i,0,0,0);
   }
   fEX[i] = ex;
   fEY[i] = ey;
   fEZ[i] = ez;
}


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

   if (b.IsReading()) {
      UInt_t R__s, R__c;
      Version_t R__v = b.ReadVersion(&R__s, &R__c);
      b.ReadClassBuffer(TGraph2DErrors::Class(), this, R__v, R__s, R__c);
   } else {
      b.WriteClassBuffer(TGraph2DErrors::Class(),this);
   }
}
 TGraph2DErrors.cxx:1
 TGraph2DErrors.cxx:2
 TGraph2DErrors.cxx:3
 TGraph2DErrors.cxx:4
 TGraph2DErrors.cxx:5
 TGraph2DErrors.cxx:6
 TGraph2DErrors.cxx:7
 TGraph2DErrors.cxx:8
 TGraph2DErrors.cxx:9
 TGraph2DErrors.cxx:10
 TGraph2DErrors.cxx:11
 TGraph2DErrors.cxx:12
 TGraph2DErrors.cxx:13
 TGraph2DErrors.cxx:14
 TGraph2DErrors.cxx:15
 TGraph2DErrors.cxx:16
 TGraph2DErrors.cxx:17
 TGraph2DErrors.cxx:18
 TGraph2DErrors.cxx:19
 TGraph2DErrors.cxx:20
 TGraph2DErrors.cxx:21
 TGraph2DErrors.cxx:22
 TGraph2DErrors.cxx:23
 TGraph2DErrors.cxx:24
 TGraph2DErrors.cxx:25
 TGraph2DErrors.cxx:26
 TGraph2DErrors.cxx:27
 TGraph2DErrors.cxx:28
 TGraph2DErrors.cxx:29
 TGraph2DErrors.cxx:30
 TGraph2DErrors.cxx:31
 TGraph2DErrors.cxx:32
 TGraph2DErrors.cxx:33
 TGraph2DErrors.cxx:34
 TGraph2DErrors.cxx:35
 TGraph2DErrors.cxx:36
 TGraph2DErrors.cxx:37
 TGraph2DErrors.cxx:38
 TGraph2DErrors.cxx:39
 TGraph2DErrors.cxx:40
 TGraph2DErrors.cxx:41
 TGraph2DErrors.cxx:42
 TGraph2DErrors.cxx:43
 TGraph2DErrors.cxx:44
 TGraph2DErrors.cxx:45
 TGraph2DErrors.cxx:46
 TGraph2DErrors.cxx:47
 TGraph2DErrors.cxx:48
 TGraph2DErrors.cxx:49
 TGraph2DErrors.cxx:50
 TGraph2DErrors.cxx:51
 TGraph2DErrors.cxx:52
 TGraph2DErrors.cxx:53
 TGraph2DErrors.cxx:54
 TGraph2DErrors.cxx:55
 TGraph2DErrors.cxx:56
 TGraph2DErrors.cxx:57
 TGraph2DErrors.cxx:58
 TGraph2DErrors.cxx:59
 TGraph2DErrors.cxx:60
 TGraph2DErrors.cxx:61
 TGraph2DErrors.cxx:62
 TGraph2DErrors.cxx:63
 TGraph2DErrors.cxx:64
 TGraph2DErrors.cxx:65
 TGraph2DErrors.cxx:66
 TGraph2DErrors.cxx:67
 TGraph2DErrors.cxx:68
 TGraph2DErrors.cxx:69
 TGraph2DErrors.cxx:70
 TGraph2DErrors.cxx:71
 TGraph2DErrors.cxx:72
 TGraph2DErrors.cxx:73
 TGraph2DErrors.cxx:74
 TGraph2DErrors.cxx:75
 TGraph2DErrors.cxx:76
 TGraph2DErrors.cxx:77
 TGraph2DErrors.cxx:78
 TGraph2DErrors.cxx:79
 TGraph2DErrors.cxx:80
 TGraph2DErrors.cxx:81
 TGraph2DErrors.cxx:82
 TGraph2DErrors.cxx:83
 TGraph2DErrors.cxx:84
 TGraph2DErrors.cxx:85
 TGraph2DErrors.cxx:86
 TGraph2DErrors.cxx:87
 TGraph2DErrors.cxx:88
 TGraph2DErrors.cxx:89
 TGraph2DErrors.cxx:90
 TGraph2DErrors.cxx:91
 TGraph2DErrors.cxx:92
 TGraph2DErrors.cxx:93
 TGraph2DErrors.cxx:94
 TGraph2DErrors.cxx:95
 TGraph2DErrors.cxx:96
 TGraph2DErrors.cxx:97
 TGraph2DErrors.cxx:98
 TGraph2DErrors.cxx:99
 TGraph2DErrors.cxx:100
 TGraph2DErrors.cxx:101
 TGraph2DErrors.cxx:102
 TGraph2DErrors.cxx:103
 TGraph2DErrors.cxx:104
 TGraph2DErrors.cxx:105
 TGraph2DErrors.cxx:106
 TGraph2DErrors.cxx:107
 TGraph2DErrors.cxx:108
 TGraph2DErrors.cxx:109
 TGraph2DErrors.cxx:110
 TGraph2DErrors.cxx:111
 TGraph2DErrors.cxx:112
 TGraph2DErrors.cxx:113
 TGraph2DErrors.cxx:114
 TGraph2DErrors.cxx:115
 TGraph2DErrors.cxx:116
 TGraph2DErrors.cxx:117
 TGraph2DErrors.cxx:118
 TGraph2DErrors.cxx:119
 TGraph2DErrors.cxx:120
 TGraph2DErrors.cxx:121
 TGraph2DErrors.cxx:122
 TGraph2DErrors.cxx:123
 TGraph2DErrors.cxx:124
 TGraph2DErrors.cxx:125
 TGraph2DErrors.cxx:126
 TGraph2DErrors.cxx:127
 TGraph2DErrors.cxx:128
 TGraph2DErrors.cxx:129
 TGraph2DErrors.cxx:130
 TGraph2DErrors.cxx:131
 TGraph2DErrors.cxx:132
 TGraph2DErrors.cxx:133
 TGraph2DErrors.cxx:134
 TGraph2DErrors.cxx:135
 TGraph2DErrors.cxx:136
 TGraph2DErrors.cxx:137
 TGraph2DErrors.cxx:138
 TGraph2DErrors.cxx:139
 TGraph2DErrors.cxx:140
 TGraph2DErrors.cxx:141
 TGraph2DErrors.cxx:142
 TGraph2DErrors.cxx:143
 TGraph2DErrors.cxx:144
 TGraph2DErrors.cxx:145
 TGraph2DErrors.cxx:146
 TGraph2DErrors.cxx:147
 TGraph2DErrors.cxx:148
 TGraph2DErrors.cxx:149
 TGraph2DErrors.cxx:150
 TGraph2DErrors.cxx:151
 TGraph2DErrors.cxx:152
 TGraph2DErrors.cxx:153
 TGraph2DErrors.cxx:154
 TGraph2DErrors.cxx:155
 TGraph2DErrors.cxx:156
 TGraph2DErrors.cxx:157
 TGraph2DErrors.cxx:158
 TGraph2DErrors.cxx:159
 TGraph2DErrors.cxx:160
 TGraph2DErrors.cxx:161
 TGraph2DErrors.cxx:162
 TGraph2DErrors.cxx:163
 TGraph2DErrors.cxx:164
 TGraph2DErrors.cxx:165
 TGraph2DErrors.cxx:166
 TGraph2DErrors.cxx:167
 TGraph2DErrors.cxx:168
 TGraph2DErrors.cxx:169
 TGraph2DErrors.cxx:170
 TGraph2DErrors.cxx:171
 TGraph2DErrors.cxx:172
 TGraph2DErrors.cxx:173
 TGraph2DErrors.cxx:174
 TGraph2DErrors.cxx:175
 TGraph2DErrors.cxx:176
 TGraph2DErrors.cxx:177
 TGraph2DErrors.cxx:178
 TGraph2DErrors.cxx:179
 TGraph2DErrors.cxx:180
 TGraph2DErrors.cxx:181
 TGraph2DErrors.cxx:182
 TGraph2DErrors.cxx:183
 TGraph2DErrors.cxx:184
 TGraph2DErrors.cxx:185
 TGraph2DErrors.cxx:186
 TGraph2DErrors.cxx:187
 TGraph2DErrors.cxx:188
 TGraph2DErrors.cxx:189
 TGraph2DErrors.cxx:190
 TGraph2DErrors.cxx:191
 TGraph2DErrors.cxx:192
 TGraph2DErrors.cxx:193
 TGraph2DErrors.cxx:194
 TGraph2DErrors.cxx:195
 TGraph2DErrors.cxx:196
 TGraph2DErrors.cxx:197
 TGraph2DErrors.cxx:198
 TGraph2DErrors.cxx:199
 TGraph2DErrors.cxx:200
 TGraph2DErrors.cxx:201
 TGraph2DErrors.cxx:202
 TGraph2DErrors.cxx:203
 TGraph2DErrors.cxx:204
 TGraph2DErrors.cxx:205
 TGraph2DErrors.cxx:206
 TGraph2DErrors.cxx:207
 TGraph2DErrors.cxx:208
 TGraph2DErrors.cxx:209
 TGraph2DErrors.cxx:210
 TGraph2DErrors.cxx:211
 TGraph2DErrors.cxx:212
 TGraph2DErrors.cxx:213
 TGraph2DErrors.cxx:214
 TGraph2DErrors.cxx:215
 TGraph2DErrors.cxx:216
 TGraph2DErrors.cxx:217
 TGraph2DErrors.cxx:218
 TGraph2DErrors.cxx:219
 TGraph2DErrors.cxx:220
 TGraph2DErrors.cxx:221
 TGraph2DErrors.cxx:222
 TGraph2DErrors.cxx:223
 TGraph2DErrors.cxx:224
 TGraph2DErrors.cxx:225
 TGraph2DErrors.cxx:226
 TGraph2DErrors.cxx:227
 TGraph2DErrors.cxx:228
 TGraph2DErrors.cxx:229
 TGraph2DErrors.cxx:230
 TGraph2DErrors.cxx:231
 TGraph2DErrors.cxx:232
 TGraph2DErrors.cxx:233
 TGraph2DErrors.cxx:234
 TGraph2DErrors.cxx:235
 TGraph2DErrors.cxx:236
 TGraph2DErrors.cxx:237
 TGraph2DErrors.cxx:238
 TGraph2DErrors.cxx:239
 TGraph2DErrors.cxx:240
 TGraph2DErrors.cxx:241
 TGraph2DErrors.cxx:242
 TGraph2DErrors.cxx:243
 TGraph2DErrors.cxx:244
 TGraph2DErrors.cxx:245
 TGraph2DErrors.cxx:246
 TGraph2DErrors.cxx:247
 TGraph2DErrors.cxx:248
 TGraph2DErrors.cxx:249
 TGraph2DErrors.cxx:250
 TGraph2DErrors.cxx:251
 TGraph2DErrors.cxx:252
 TGraph2DErrors.cxx:253
 TGraph2DErrors.cxx:254
 TGraph2DErrors.cxx:255
 TGraph2DErrors.cxx:256
 TGraph2DErrors.cxx:257
 TGraph2DErrors.cxx:258
 TGraph2DErrors.cxx:259
 TGraph2DErrors.cxx:260
 TGraph2DErrors.cxx:261
 TGraph2DErrors.cxx:262
 TGraph2DErrors.cxx:263
 TGraph2DErrors.cxx:264
 TGraph2DErrors.cxx:265
 TGraph2DErrors.cxx:266
 TGraph2DErrors.cxx:267
 TGraph2DErrors.cxx:268
 TGraph2DErrors.cxx:269
 TGraph2DErrors.cxx:270
 TGraph2DErrors.cxx:271
 TGraph2DErrors.cxx:272
 TGraph2DErrors.cxx:273
 TGraph2DErrors.cxx:274
 TGraph2DErrors.cxx:275
 TGraph2DErrors.cxx:276
 TGraph2DErrors.cxx:277
 TGraph2DErrors.cxx:278
 TGraph2DErrors.cxx:279
 TGraph2DErrors.cxx:280
 TGraph2DErrors.cxx:281
 TGraph2DErrors.cxx:282
 TGraph2DErrors.cxx:283
 TGraph2DErrors.cxx:284
 TGraph2DErrors.cxx:285
 TGraph2DErrors.cxx:286
 TGraph2DErrors.cxx:287
 TGraph2DErrors.cxx:288
 TGraph2DErrors.cxx:289
 TGraph2DErrors.cxx:290
 TGraph2DErrors.cxx:291
 TGraph2DErrors.cxx:292
 TGraph2DErrors.cxx:293
 TGraph2DErrors.cxx:294
 TGraph2DErrors.cxx:295
 TGraph2DErrors.cxx:296
 TGraph2DErrors.cxx:297
 TGraph2DErrors.cxx:298
 TGraph2DErrors.cxx:299
 TGraph2DErrors.cxx:300
 TGraph2DErrors.cxx:301
 TGraph2DErrors.cxx:302
 TGraph2DErrors.cxx:303
 TGraph2DErrors.cxx:304
 TGraph2DErrors.cxx:305
 TGraph2DErrors.cxx:306
 TGraph2DErrors.cxx:307
 TGraph2DErrors.cxx:308
 TGraph2DErrors.cxx:309
 TGraph2DErrors.cxx:310
 TGraph2DErrors.cxx:311
 TGraph2DErrors.cxx:312
 TGraph2DErrors.cxx:313
 TGraph2DErrors.cxx:314
 TGraph2DErrors.cxx:315
 TGraph2DErrors.cxx:316
 TGraph2DErrors.cxx:317
 TGraph2DErrors.cxx:318
 TGraph2DErrors.cxx:319
 TGraph2DErrors.cxx:320
 TGraph2DErrors.cxx:321
 TGraph2DErrors.cxx:322
 TGraph2DErrors.cxx:323
 TGraph2DErrors.cxx:324
 TGraph2DErrors.cxx:325
 TGraph2DErrors.cxx:326
 TGraph2DErrors.cxx:327
 TGraph2DErrors.cxx:328
 TGraph2DErrors.cxx:329
 TGraph2DErrors.cxx:330
 TGraph2DErrors.cxx:331
 TGraph2DErrors.cxx:332
 TGraph2DErrors.cxx:333
 TGraph2DErrors.cxx:334
 TGraph2DErrors.cxx:335
 TGraph2DErrors.cxx:336
 TGraph2DErrors.cxx:337
 TGraph2DErrors.cxx:338
 TGraph2DErrors.cxx:339
 TGraph2DErrors.cxx:340
 TGraph2DErrors.cxx:341
 TGraph2DErrors.cxx:342
 TGraph2DErrors.cxx:343
 TGraph2DErrors.cxx:344
 TGraph2DErrors.cxx:345
 TGraph2DErrors.cxx:346
 TGraph2DErrors.cxx:347
 TGraph2DErrors.cxx:348
 TGraph2DErrors.cxx:349
 TGraph2DErrors.cxx:350
 TGraph2DErrors.cxx:351
 TGraph2DErrors.cxx:352
 TGraph2DErrors.cxx:353
 TGraph2DErrors.cxx:354
 TGraph2DErrors.cxx:355
 TGraph2DErrors.cxx:356
 TGraph2DErrors.cxx:357
 TGraph2DErrors.cxx:358
 TGraph2DErrors.cxx:359
 TGraph2DErrors.cxx:360
 TGraph2DErrors.cxx:361
 TGraph2DErrors.cxx:362
 TGraph2DErrors.cxx:363
 TGraph2DErrors.cxx:364
 TGraph2DErrors.cxx:365
 TGraph2DErrors.cxx:366
 TGraph2DErrors.cxx:367
 TGraph2DErrors.cxx:368
 TGraph2DErrors.cxx:369
 TGraph2DErrors.cxx:370
 TGraph2DErrors.cxx:371
 TGraph2DErrors.cxx:372
 TGraph2DErrors.cxx:373
 TGraph2DErrors.cxx:374
 TGraph2DErrors.cxx:375
 TGraph2DErrors.cxx:376
 TGraph2DErrors.cxx:377
 TGraph2DErrors.cxx:378
 TGraph2DErrors.cxx:379
 TGraph2DErrors.cxx:380
 TGraph2DErrors.cxx:381
 TGraph2DErrors.cxx:382
 TGraph2DErrors.cxx:383
 TGraph2DErrors.cxx:384
 TGraph2DErrors.cxx:385
 TGraph2DErrors.cxx:386