Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TGraph.h
Go to the documentation of this file.
1 // @(#)root/hist:$Id$
2 // Author: Rene Brun, Olivier Couet 12/12/94
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TGraph
13 #define ROOT_TGraph
14 
15 
16 //////////////////////////////////////////////////////////////////////////
17 // //
18 // TGraph //
19 // //
20 // Graph graphics class. //
21 // //
22 //////////////////////////////////////////////////////////////////////////
23 
24 #include "TNamed.h"
25 #include "TAttLine.h"
26 #include "TAttFill.h"
27 #include "TAttMarker.h"
28 #include "TVectorFfwd.h"
29 #include "TVectorDfwd.h"
30 
31 class TBrowser;
32 class TAxis;
33 class TH1;
34 class TH1F;
35 class TCollection;
36 class TF1;
37 class TSpline;
38 
39 #include "TFitResultPtr.h"
40 
41 class TGraph : public TNamed, public TAttLine, public TAttFill, public TAttMarker {
42 
43 protected:
44 
45  Int_t fMaxSize; ///<!Current dimension of arrays fX and fY
46  Int_t fNpoints; ///< Number of points <= fMaxSize
47  Double_t *fX; ///<[fNpoints] array of X points
48  Double_t *fY; ///<[fNpoints] array of Y points
49  TList *fFunctions; ///< Pointer to list of functions (fits and user)
50  TH1F *fHistogram; ///< Pointer to histogram used for drawing axis
51  Double_t fMinimum; ///< Minimum value for plotting along y
52  Double_t fMaximum; ///< Maximum value for plotting along y
53 
54  static void SwapValues(Double_t* arr, Int_t pos1, Int_t pos2);
55  virtual void SwapPoints(Int_t pos1, Int_t pos2);
56 
57  virtual Double_t **Allocate(Int_t newsize);
58  Double_t **AllocateArrays(Int_t Narrays, Int_t arraySize);
59  virtual Bool_t CopyPoints(Double_t **newarrays, Int_t ibegin, Int_t iend, Int_t obegin);
60  virtual void CopyAndRelease(Double_t **newarrays, Int_t ibegin, Int_t iend, Int_t obegin);
61  Bool_t CtorAllocate();
62  Double_t **ExpandAndCopy(Int_t size, Int_t iend);
63  virtual void FillZero(Int_t begin, Int_t end, Bool_t from_ctor = kTRUE);
64  Double_t **ShrinkAndCopy(Int_t size, Int_t iend);
65  virtual Bool_t DoMerge(const TGraph * g);
66 
67 public:
68  // TGraph status bits
69  enum EStatusBits {
70  kClipFrame = BIT(10), ///< clip to the frame boundary
71  kResetHisto = BIT(17), ///< fHistogram must be reset in GetHistogram
72  kNotEditable = BIT(18), ///< bit set if graph is non editable
73  kIsSortedX = BIT(19), ///< graph is sorted in X points
74  kIsHighlight = BIT(20) ///< bit set if graph is highlight
75  };
76 
77  TGraph();
78  TGraph(Int_t n);
79  TGraph(Int_t n, const Int_t *x, const Int_t *y);
80  TGraph(Int_t n, const Float_t *x, const Float_t *y);
81  TGraph(Int_t n, const Double_t *x, const Double_t *y);
82  TGraph(const TGraph &gr);
83  TGraph& operator=(const TGraph&);
84  TGraph(const TVectorF &vx, const TVectorF &vy);
85  TGraph(const TVectorD &vx, const TVectorD &vy);
86  TGraph(const TH1 *h);
87  TGraph(const TF1 *f, Option_t *option="");
88  TGraph(const char *filename, const char *format="%lg %lg", Option_t *option="");
89  virtual ~TGraph();
90 
91  virtual void Apply(TF1 *f);
92  virtual void Browse(TBrowser *b);
93  virtual Double_t Chisquare(TF1 *f1, Option_t *option="") const;
94  static Bool_t CompareArg(const TGraph* gr, Int_t left, Int_t right);
95  static Bool_t CompareX(const TGraph* gr, Int_t left, Int_t right);
96  static Bool_t CompareY(const TGraph* gr, Int_t left, Int_t right);
97  static Bool_t CompareRadius(const TGraph* gr, Int_t left, Int_t right);
98  virtual void ComputeRange(Double_t &xmin, Double_t &ymin, Double_t &xmax, Double_t &ymax) const;
99  virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
100  virtual void Draw(Option_t *chopt="");
101  virtual void DrawGraph(Int_t n, const Int_t *x, const Int_t *y, Option_t *option="");
102  virtual void DrawGraph(Int_t n, const Float_t *x, const Float_t *y, Option_t *option="");
103  virtual void DrawGraph(Int_t n, const Double_t *x=0, const Double_t *y=0, Option_t *option="");
104  virtual void DrawPanel(); // *MENU*
105  virtual Double_t Eval(Double_t x, TSpline *spline=0, Option_t *option="") const;
106  virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
107  virtual void Expand(Int_t newsize);
108  virtual void Expand(Int_t newsize, Int_t step);
109  virtual TObject *FindObject(const char *name) const;
110  virtual TObject *FindObject(const TObject *obj) const;
111  virtual TFitResultPtr Fit(const char *formula ,Option_t *option="" ,Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0); // *MENU*
112  virtual TFitResultPtr Fit(TF1 *f1 ,Option_t *option="" ,Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0);
113  virtual void FitPanel(); // *MENU*
114  Bool_t GetEditable() const;
115  TF1 *GetFunction(const char *name) const;
116  TH1F *GetHistogram() const;
117  TList *GetListOfFunctions() const { return fFunctions; }
118  virtual Double_t GetCorrelationFactor() const;
119  virtual Double_t GetCovariance() const;
120  virtual Double_t GetMean(Int_t axis=1) const;
121  virtual Double_t GetRMS(Int_t axis=1) const;
122  Int_t GetMaxSize() const {return fMaxSize;}
123  Int_t GetN() const {return fNpoints;}
124  virtual Double_t GetErrorX(Int_t bin) const;
125  virtual Double_t GetErrorY(Int_t bin) const;
126  virtual Double_t GetErrorXhigh(Int_t bin) const;
127  virtual Double_t GetErrorXlow(Int_t bin) const;
128  virtual Double_t GetErrorYhigh(Int_t bin) const;
129  virtual Double_t GetErrorYlow(Int_t bin) const;
130  Double_t *GetX() const {return fX;}
131  Double_t *GetY() const {return fY;}
132  virtual Double_t *GetEX() const {return 0;}
133  virtual Double_t *GetEY() const {return 0;}
134  virtual Double_t *GetEXhigh() const {return 0;}
135  virtual Double_t *GetEXlow() const {return 0;}
136  virtual Double_t *GetEYhigh() const {return 0;}
137  virtual Double_t *GetEYlow() const {return 0;}
138  virtual Double_t *GetEXlowd() const {return 0;}
139  virtual Double_t *GetEXhighd() const {return 0;}
140  virtual Double_t *GetEYlowd() const {return 0;}
141  virtual Double_t *GetEYhighd() const {return 0;}
142  Double_t GetMaximum() const {return fMaximum;}
143  Double_t GetMinimum() const {return fMinimum;}
144  TAxis *GetXaxis() const ;
145  TAxis *GetYaxis() const ;
146  virtual char *GetObjectInfo(Int_t px, Int_t py) const;
147  virtual Int_t GetPoint(Int_t i, Double_t &x, Double_t &y) const;
148  virtual Double_t GetPointX(Int_t i) const;
149  virtual Double_t GetPointY(Int_t i) const;
150 
151  virtual void InitExpo(Double_t xmin=0, Double_t xmax=0);
152  virtual void InitGaus(Double_t xmin=0, Double_t xmax=0);
153  virtual void InitPolynom(Double_t xmin=0, Double_t xmax=0);
154  virtual Int_t InsertPoint(); // *MENU*
155  virtual void InsertPointBefore(Int_t ipoint, Double_t x, Double_t y);
156  virtual Double_t Integral(Int_t first=0, Int_t last=-1) const;
157  virtual Bool_t IsEditable() const {return !TestBit(kNotEditable);}
158  virtual Bool_t IsHighlight() const { return TestBit(kIsHighlight); }
159  virtual Int_t IsInside(Double_t x, Double_t y) const;
160  virtual void LeastSquareFit(Int_t m, Double_t *a, Double_t xmin=0, Double_t xmax=0);
161  virtual void LeastSquareLinearFit(Int_t n, Double_t &a0, Double_t &a1, Int_t &ifail, Double_t xmin=0, Double_t xmax=0);
162  virtual Int_t Merge(TCollection* list);
163  virtual void MovePoints(Double_t dx, Double_t dy, Bool_t logx = kFALSE, Bool_t logy = kFALSE);
164  virtual void Paint(Option_t *chopt="");
165  void PaintGraph(Int_t npoints, const Double_t *x, const Double_t *y, Option_t *chopt);
166  void PaintGrapHist(Int_t npoints, const Double_t *x, const Double_t *y, Option_t *chopt);
167  virtual void PaintStats(TF1 *fit);
168  virtual void Print(Option_t *chopt="") const;
169  virtual void RecursiveRemove(TObject *obj);
170  virtual Int_t RemovePoint(); // *MENU*
171  virtual Int_t RemovePoint(Int_t ipoint);
172  virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
173  virtual void SetEditable(Bool_t editable=kTRUE); // *TOGGLE* *GETTER=GetEditable
174  virtual void SetHighlight(Bool_t set = kTRUE); // *TOGGLE* *GETTER=IsHighlight
175  virtual void SetHistogram(TH1F *h) {fHistogram = h;}
176  virtual void SetMaximum(Double_t maximum=-1111); // *MENU*
177  virtual void SetMinimum(Double_t minimum=-1111); // *MENU*
178  virtual void Set(Int_t n);
179  virtual void SetPoint(Int_t i, Double_t x, Double_t y);
180  virtual void SetPointX(Int_t i, Double_t x);
181  virtual void SetPointY(Int_t i, Double_t y);
182  virtual void SetName(const char *name=""); // *MENU*
183  virtual void SetNameTitle(const char *name="", const char *title="");
184  virtual void SetTitle(const char *title=""); // *MENU*
185  virtual void Sort(Bool_t (*greater)(const TGraph*, Int_t, Int_t)=&TGraph::CompareX,
186  Bool_t ascending=kTRUE, Int_t low=0, Int_t high=-1111);
187  virtual void UseCurrentStyle();
188  void Zero(Int_t &k,Double_t AZ,Double_t BZ,Double_t E2,Double_t &X,Double_t &Y,Int_t maxiterations);
189 
190  ClassDef(TGraph,4) //Graph graphics class
191 };
192 
193 #endif