Logo ROOT  
Reference Guide
TGraphMultiErrors.h
Go to the documentation of this file.
1// @(#)root/hist:$Id$
2// Author: Simon Spies 18/02/19
3
4/*************************************************************************
5 * Copyright (C) 2018-2019, 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_TGraphMultiErrors
13#define ROOT_TGraphMultiErrors
14
15//////////////////////////////////////////////////////////////////////////
16// //
17// TGraphMultiErrors //
18// //
19// a Graph with asymmetric error bars and multiple y errors //
20// //
21//////////////////////////////////////////////////////////////////////////
22
23#include "TGraph.h"
24#include <vector>
25
26class TArrayF;
27class TArrayD;
28
29class TGraphMultiErrors : public TGraph {
30
31protected:
32 Int_t fNYErrors; ///< The amount of different y-errors
33 Int_t fSumErrorsMode; ///< How y errors are summed: kOnlyFirst = Only First; kSquareSum = Squared Sum; kSum =
34 ///< Absolute Addition
35 Double_t *fExL; ///<[fNpoints] array of X low errors
36 Double_t *fExH; ///<[fNpoints] array of X high errors
37 std::vector<TArrayD> fEyL; ///< Two dimensional array of Y low errors
38 std::vector<TArrayD> fEyH; ///< Two dimensional array of Y high errors
39 mutable Double_t *fEyLSum = nullptr; ///<! Array of summed Y low errors for fitting
40 mutable Double_t *fEyHSum = nullptr; ///<! Array of summed Y high errors for fitting
41 std::vector<TAttFill> fAttFill; ///< The AttFill attributes of the different errors
42 std::vector<TAttLine> fAttLine; ///< The AttLine attributes of the different errors
43
44 virtual Double_t **Allocate(Int_t size);
46
47 virtual void CopyAndRelease(Double_t **newarrays, Int_t ibegin, Int_t iend, Int_t obegin);
48 virtual Bool_t CopyPoints(Double_t **arrays, Int_t ibegin, Int_t iend, Int_t obegin);
49 virtual void FillZero(Int_t begin, Int_t end, Bool_t from_ctor = kTRUE);
50
51 void CalcYErrorsSum() const;
52 virtual Bool_t DoMerge(const TGraph *tg);
53 virtual void SwapPoints(Int_t pos1, Int_t pos2);
54
55public:
57 kOnlyFirst = 0, ///< Only take errors from first dimension
58 kSquareSum = 1, ///< Calculate the square sum of all errors
59 kAbsSum = 2 ///< Calculate the absolute sum of all errors
60 };
61
63 TGraphMultiErrors(const Char_t *name, const Char_t *title);
64 TGraphMultiErrors(Int_t np, Int_t ne = 1);
65 TGraphMultiErrors(const Char_t *name, const Char_t *title, Int_t np, Int_t ne = 1);
66
67 TGraphMultiErrors(Int_t np, const Float_t *x, const Float_t *y, const Float_t *exL = nullptr,
68 const Float_t *exH = nullptr, const Float_t *eyL = nullptr, const Float_t *eyH = nullptr,
70 TGraphMultiErrors(const Char_t *name, const Char_t *title, Int_t np, const Float_t *x, const Float_t *y,
71 const Float_t *exL = nullptr, const Float_t *exH = nullptr, const Float_t *eyL = nullptr,
72 const Float_t *eyH = nullptr, Int_t m = kOnlyFirst);
73 TGraphMultiErrors(Int_t np, const Double_t *x, const Double_t *y, const Double_t *exL = nullptr,
74 const Double_t *exH = nullptr, const Double_t *eyL = nullptr, const Double_t *eyH = nullptr,
76 TGraphMultiErrors(const Char_t *name, const Char_t *title, Int_t np, const Double_t *x, const Double_t *y,
77 const Double_t *exL = nullptr, const Double_t *exH = nullptr, const Double_t *eyL = nullptr,
78 const Double_t *eyH = nullptr, Int_t m = kOnlyFirst);
79
80 TGraphMultiErrors(Int_t np, Int_t ne, const Float_t *x, const Float_t *y, const Float_t *exL, const Float_t *exH,
81 std::vector<std::vector<Float_t>> eyL, std::vector<std::vector<Float_t>> eyH,
83 TGraphMultiErrors(const Char_t *name, const Char_t *title, Int_t np, Int_t ne, const Float_t *x, const Float_t *y,
84 const Float_t *exL, const Float_t *exH, std::vector<std::vector<Float_t>> eyL,
85 std::vector<std::vector<Float_t>> eyH, Int_t m = kOnlyFirst);
86 TGraphMultiErrors(Int_t np, Int_t ne, const Double_t *x, const Double_t *y, const Double_t *exL, const Double_t *exH,
87 std::vector<std::vector<Double_t>> eyL, std::vector<std::vector<Double_t>> eyH,
89 TGraphMultiErrors(const Char_t *name, const Char_t *title, Int_t np, Int_t ne, const Double_t *x, const Double_t *y,
90 const Double_t *exL, const Double_t *exH, std::vector<std::vector<Double_t>> eyL,
91 std::vector<std::vector<Double_t>> eyH, Int_t m = kOnlyFirst);
92
93 TGraphMultiErrors(Int_t np, Int_t ne, const Float_t *x, const Float_t *y, const Float_t *exL, const Float_t *exH,
94 std::vector<TArrayF> eyL, std::vector<TArrayF> eyH, Int_t m = kOnlyFirst);
95 TGraphMultiErrors(const Char_t *name, const Char_t *title, Int_t np, Int_t ne, const Float_t *x, const Float_t *y,
96 const Float_t *exL, const Float_t *exH, std::vector<TArrayF> eyL, std::vector<TArrayF> eyH,
98 TGraphMultiErrors(Int_t np, Int_t ne, const Double_t *x, const Double_t *y, const Double_t *exL, const Double_t *exH,
99 std::vector<TArrayD> eyL, std::vector<TArrayD> eyH, Int_t m = kOnlyFirst);
100 TGraphMultiErrors(const Char_t *name, const Char_t *title, Int_t np, Int_t ne, const Double_t *x, const Double_t *y,
101 const Double_t *exL, const Double_t *exH, std::vector<TArrayD> eyL, std::vector<TArrayD> eyH,
102 Int_t m = kOnlyFirst);
103
104 TGraphMultiErrors(const TVectorF &tvX, const TVectorF &tvY, const TVectorF &tvExL, const TVectorF &tvExH,
105 const TVectorF &tvEyL, const TVectorF &tvEyH, Int_t m = kOnlyFirst);
106 TGraphMultiErrors(const TVectorD &tvX, const TVectorD &tvY, const TVectorD &tvExL, const TVectorD &tvExH,
107 const TVectorD &tvEyL, const TVectorD &tvEyH, Int_t m = kOnlyFirst);
108
109 TGraphMultiErrors(Int_t ne, const TVectorF &tvX, const TVectorF &tvY, const TVectorF &tvExL, const TVectorF &tvExH,
110 const TVectorF *tvEyL, const TVectorF *tvEyH, Int_t m = kOnlyFirst);
111 TGraphMultiErrors(Int_t ne, const TVectorD &tvX, const TVectorD &tvY, const TVectorD &tvExL, const TVectorD &tvExH,
112 const TVectorD *tvEyL, const TVectorD *tvEyH, Int_t m = kOnlyFirst);
113
116
117 TGraphMultiErrors(const TH1 *th, Int_t ne = 1);
118 TGraphMultiErrors(const TH1 *pass, const TH1 *total, Int_t ne = 1, Option_t *option = "");
119
120 virtual ~TGraphMultiErrors();
121
122 virtual void AddYError(Int_t np, const Double_t *eyL = nullptr, const Double_t *eyH = nullptr);
123 virtual void Apply(TF1 *f);
124 virtual void BayesDivide(const TH1 *pass, const TH1 *total, Option_t *opt = "");
125 void Divide(const TH1 *pass, const TH1 *total, Option_t *opt = "cp");
126 virtual void ComputeRange(Double_t &xmin, Double_t &ymin, Double_t &xmax, Double_t &ymax) const;
127 virtual void DeleteYError(Int_t e);
128
129 virtual Double_t GetErrorX(Int_t i) const;
130 virtual Double_t GetErrorY(Int_t i) const;
131 virtual Double_t GetErrorY(Int_t i, Int_t e) const;
132
133 virtual Double_t GetErrorXlow(Int_t i) const;
134 virtual Double_t GetErrorXhigh(Int_t i) const;
135 virtual Double_t GetErrorYlow(Int_t i) const;
136 virtual Double_t GetErrorYhigh(Int_t i) const;
137 virtual Double_t GetErrorYlow(Int_t i, Int_t e) const;
138 virtual Double_t GetErrorYhigh(Int_t i, Int_t e) const;
139
140 virtual Double_t *GetEXlow() const { return fExL; }
141 virtual Double_t *GetEXhigh() const { return fExH; }
142 virtual Double_t *GetEYlow() const;
143 virtual Double_t *GetEYhigh() const;
144 virtual Double_t *GetEYlow(Int_t e);
145 virtual Double_t *GetEYhigh(Int_t e);
146
147 virtual TAttFill *GetAttFill(Int_t e);
148 virtual TAttLine *GetAttLine(Int_t e);
149
152
153 virtual Color_t GetFillColor(Int_t e) const;
154 virtual Style_t GetFillStyle(Int_t e) const;
155
159
160 virtual Color_t GetLineColor(Int_t e) const;
161 virtual Style_t GetLineStyle(Int_t e) const;
162 virtual Width_t GetLineWidth(Int_t e) const;
163
165 Int_t GetNYErrors() const { return fNYErrors; }
166
167 virtual void Print(Option_t *chopt = "") const;
168 virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
169 virtual void Scale(Double_t c1=1., Option_t *option="y"); // *MENU*
170
171 virtual void SetPointError(Double_t exL, Double_t exH, Double_t eyL1, Double_t eyH1, Double_t eyL2 = 0.,
172 Double_t eyH2 = 0., Double_t eyL3 = 0., Double_t eyH3 = 0.); // *MENU*
173 virtual void SetPointError(Int_t i, Int_t ne, Double_t exL, Double_t exH, const Double_t *eyL, const Double_t *eyH);
174
175 virtual void SetPointEX(Int_t i, Double_t exL, Double_t exH);
176 virtual void SetPointEXlow(Int_t i, Double_t exL);
177 virtual void SetPointEXhigh(Int_t i, Double_t exH);
178 virtual void SetPointEY(Int_t i, Int_t ne, const Double_t *eyL, const Double_t *eyH);
179 virtual void SetPointEYlow(Int_t i, Int_t ne, const Double_t *eyL);
180 virtual void SetPointEYhigh(Int_t i, Int_t ne, const Double_t *eyH);
181 virtual void SetPointEY(Int_t i, Int_t e, Double_t eyL, Double_t eyH);
182 virtual void SetPointEYlow(Int_t i, Int_t e, Double_t eyL);
183 virtual void SetPointEYhigh(Int_t i, Int_t e, Double_t eyH);
184
185 virtual void SetEY(Int_t e, Int_t np, const Double_t *eyL, const Double_t *eyH);
186 virtual void SetEYlow(Int_t e, Int_t np, const Double_t *eyL);
187 virtual void SetEYhigh(Int_t e, Int_t np, const Double_t *eyH);
188
189 virtual void SetSumErrorsMode(Int_t m);
190
191 virtual void SetAttFill(Int_t e, TAttFill *taf);
192 virtual void SetAttLine(Int_t e, TAttLine *tal);
193
197
198 virtual void SetFillColor(Int_t e, Color_t fcolor);
199 virtual void SetFillColorAlpha(Int_t e, Color_t fcolor, Float_t falpha);
200 virtual void SetFillStyle(Int_t e, Style_t fstyle);
201
206
207 virtual void SetLineColor(Int_t e, Color_t lcolor);
208 virtual void SetLineColorAlpha(Int_t e, Color_t lcolor, Float_t lalpha);
209 virtual void SetLineStyle(Int_t e, Style_t lstyle);
210 virtual void SetLineWidth(Int_t e, Width_t lwidth);
211
212 ClassDef(TGraphMultiErrors, 1) // A Graph with asymmetric error bars and multiple y error dimensions
213};
214
215#endif // ROOT_TGraphMultiErrors
#define f(i)
Definition: RSha256.hxx:104
#define e(i)
Definition: RSha256.hxx:103
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
int Int_t
Definition: RtypesCore.h:45
char Char_t
Definition: RtypesCore.h:33
short Width_t
Definition: RtypesCore.h:91
bool Bool_t
Definition: RtypesCore.h:63
double Double_t
Definition: RtypesCore.h:59
short Color_t
Definition: RtypesCore.h:92
short Style_t
Definition: RtypesCore.h:89
float Float_t
Definition: RtypesCore.h:57
const Bool_t kTRUE
Definition: RtypesCore.h:100
const char Option_t
Definition: RtypesCore.h:66
#define ClassDef(name, id)
Definition: Rtypes.h:325
static unsigned int total
char name[80]
Definition: TGX11.cxx:110
float xmin
Definition: THbookFile.cxx:95
float ymin
Definition: THbookFile.cxx:95
float xmax
Definition: THbookFile.cxx:95
float ymax
Definition: THbookFile.cxx:95
Array of doubles (64 bits per element).
Definition: TArrayD.h:27
Array of floats (32 bits per element).
Definition: TArrayF.h:27
Fill Area Attributes class.
Definition: TAttFill.h:19
virtual Color_t GetFillColor() const
Return the fill area color.
Definition: TAttFill.h:30
virtual Style_t GetFillStyle() const
Return the fill area style.
Definition: TAttFill.h:31
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Definition: TAttFill.h:37
virtual void SetFillColorAlpha(Color_t fcolor, Float_t falpha)
Set a transparent fill color.
Definition: TAttFill.cxx:262
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
Definition: TAttFill.h:39
Line Attributes class.
Definition: TAttLine.h:18
virtual Color_t GetLineColor() const
Return the line color.
Definition: TAttLine.h:33
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
Definition: TAttLine.h:42
virtual Width_t GetLineWidth() const
Return the line width.
Definition: TAttLine.h:35
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
Definition: TAttLine.h:43
virtual void SetLineColorAlpha(Color_t lcolor, Float_t lalpha)
Set a transparent line color.
Definition: TAttLine.cxx:302
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Definition: TAttLine.h:40
virtual Style_t GetLineStyle() const
Return the line style.
Definition: TAttLine.h:34
1-Dim function class
Definition: TF1.h:213
TGraph with asymmetric error bars and multiple y error dimensions.
virtual void ComputeRange(Double_t &xmin, Double_t &ymin, Double_t &xmax, Double_t &ymax) const
Compute Range.
virtual void Print(Option_t *chopt="") const
Print graph and errors values.
Double_t * fEyLSum
! Array of summed Y low errors for fitting
Int_t GetSumErrorsMode() const
virtual Color_t GetFillColor() const
Return the fill area color.
Definition: TAttFill.h:30
virtual Style_t GetFillStyle() const
Return the fill area style.
Definition: TAttFill.h:31
virtual Double_t * GetEXhigh() const
virtual void FillZero(Int_t begin, Int_t end, Bool_t from_ctor=kTRUE)
Set zero values for point arrays in the range [begin, end].
virtual void SetPointError(Double_t exL, Double_t exH, Double_t eyL1, Double_t eyH1, Double_t eyL2=0., Double_t eyH2=0., Double_t eyL3=0., Double_t eyH3=0.)
Set ex and ey values for point pointed by the mouse.
virtual TAttLine * GetAttLine(Int_t e)
Get AttLine pointer for specified error dimension.
virtual void SetFillColorAlpha(Int_t e, Color_t fcolor, Float_t falpha)
Set Fill Color and Alpha of error e (-1 = Global and x errors).
virtual Color_t GetLineColor() const
Return the line color.
Definition: TAttLine.h:33
void Divide(const TH1 *pass, const TH1 *total, Option_t *opt="cp")
This function was adapted from the TGraphAsymmErrors class.
virtual void Apply(TF1 *f)
Apply a function to all data points .
std::vector< TAttLine > fAttLine
The AttLine attributes of the different errors.
virtual void AddYError(Int_t np, const Double_t *eyL=nullptr, const Double_t *eyH=nullptr)
Add a new y error to the graph and fill it with the values from eyL and eyH
TGraphMultiErrors()
TGraphMultiErrors default constructor.
virtual void SetEY(Int_t e, Int_t np, const Double_t *eyL, const Double_t *eyH)
Set error e ey values.
virtual void SetSumErrorsMode(Int_t m)
Set the sum errors mode and recalculate summed errors.
virtual ~TGraphMultiErrors()
TGraphMultiErrors default destructor.
virtual void BayesDivide(const TH1 *pass, const TH1 *total, Option_t *opt="")
This function is only kept for backward compatibility.
TGraphMultiErrors & operator=(const TGraphMultiErrors &tgme)
TGraphMultiErrors assignment operator.
virtual Double_t GetErrorXhigh(Int_t i) const
Get high error on x coordinate for point i.
virtual Bool_t DoMerge(const TGraph *tg)
Protected function to perform the merge operation of a graph with multiple asymmetric errors.
Int_t fSumErrorsMode
How y errors are summed: kOnlyFirst = Only First; kSquareSum = Squared Sum; kSum = Absolute Addition.
virtual void Scale(Double_t c1=1., Option_t *option="y")
Multiply the values and errors of a TGraphMultiErrors by a constant c1.
virtual Width_t GetLineWidth() const
Return the line width.
Definition: TAttLine.h:35
virtual Bool_t CopyPoints(Double_t **arrays, Int_t ibegin, Int_t iend, Int_t obegin)
Copy errors from fE*** to arrays[***] or to f*** Copy points.
virtual Double_t GetErrorY(Int_t i) const
Get error on y coordinate for point i.
@ kAbsSum
Calculate the absolute sum of all errors.
@ kSquareSum
Calculate the square sum of all errors.
@ kOnlyFirst
Only take errors from first dimension.
virtual Double_t GetErrorYlow(Int_t i) const
Get low error on y coordinate for point i.
virtual Double_t * GetEYhigh() const
Get all high errors on y coordinates as an array summed according to fSumErrorsMode.
virtual TAttFill * GetAttFill(Int_t e)
Get AttFill pointer for specified error dimension.
virtual void SetLineStyle(Int_t e, Style_t lstyle)
Set Line Style of error e (-1 = Global and x errors).
virtual void SetPointEXhigh(Int_t i, Double_t exH)
Set exH value for point i.
Double_t * fExL
[fNpoints] array of X low errors
virtual Double_t ** Allocate(Int_t size)
Allocate internal data structures for size points.
virtual void SetLineWidth(Int_t e, Width_t lwidth)
Set Line Width of error e (-1 = Global and x errors).
std::vector< TArrayD > fEyH
Two dimensional array of Y high errors.
virtual Style_t GetLineStyle() const
Return the line style.
Definition: TAttLine.h:34
virtual void SetPointEX(Int_t i, Double_t exL, Double_t exH)
Set ex values for point i.
virtual void SetPointEYlow(Int_t i, Int_t ne, const Double_t *eyL)
Set eyL values for point i.
virtual Double_t * GetEXlow() const
virtual void SetLineColorAlpha(Int_t e, Color_t lcolor, Float_t lalpha)
Set Line Color and Alpha of error e (-1 = Global and x errors).
virtual void SetFillColor(Int_t e, Color_t fcolor)
Set Fill Color of error e (-1 = Global and x errors).
void CalcYErrorsSum() const
Recalculates the summed y error arrays.
virtual void SetAttLine(Int_t e, TAttLine *tal)
Set TAttLine parameters of error e by copying from another TAttLine (-1 = Global and x errors).
Double_t * fEyHSum
! Array of summed Y high errors for fitting
virtual void DeleteYError(Int_t e)
Deletes the y error with the index e.
virtual Double_t * GetEYlow() const
Get all low errors on y coordinates as an array summed according to fSumErrorsMode.
virtual Double_t GetErrorX(Int_t i) const
Get error on x coordinate for point i.
virtual void SetFillStyle(Int_t e, Style_t fstyle)
Set Fill Style of error e (-1 = Global and x errors).
virtual void SetEYhigh(Int_t e, Int_t np, const Double_t *eyH)
Set error e eyH values.
virtual Double_t GetErrorXlow(Int_t i) const
Get low error on x coordinate for point i.
Int_t GetNYErrors() const
virtual void SetAttFill(Int_t e, TAttFill *taf)
Set TAttFill parameters of error e by copying from another TAttFill (-1 = Global and x errors).
virtual void SetEYlow(Int_t e, Int_t np, const Double_t *eyL)
Set error e eyL values.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save primitive as a C++ statement(s) on output stream out.
std::vector< TAttFill > fAttFill
The AttFill attributes of the different errors.
Bool_t CtorAllocate()
Should be called from ctors after fNpoints has been set Note: This function should be called only fro...
Double_t * fExH
[fNpoints] array of X high errors
virtual void SwapPoints(Int_t pos1, Int_t pos2)
Swap points.
virtual void SetPointEY(Int_t i, Int_t ne, const Double_t *eyL, const Double_t *eyH)
Set ey values for point i.
virtual void SetLineColor(Int_t e, Color_t lcolor)
Set Line Color of error e (-1 = Global and x errors).
virtual void SetPointEXlow(Int_t i, Double_t exL)
Set exL value for point i.
virtual void SetPointEYhigh(Int_t i, Int_t ne, const Double_t *eyH)
Set eyH values for point i.
Int_t fNYErrors
The amount of different y-errors.
std::vector< TArrayD > fEyL
Two dimensional array of Y low errors.
virtual void CopyAndRelease(Double_t **newarrays, Int_t ibegin, Int_t iend, Int_t obegin)
Copy and release.
virtual Double_t GetErrorYhigh(Int_t i) const
Get high error on y coordinate for point i.
A TGraph is an object made of two arrays X and Y with npoints each.
Definition: TGraph.h:41
TH1 is the base class of all histogram classes in ROOT.
Definition: TH1.h:58
TVectorT.
Definition: TVectorT.h:27
return c1
Definition: legend1.C:41
Double_t y[n]
Definition: legend1.C:17
Double_t x[n]
Definition: legend1.C:17
auto * m
Definition: textangle.C:8