12 #ifndef ROOT_TGraphMultiErrors
13 #define ROOT_TGraphMultiErrors
28 class TGraphMultiErrors :
public TGraph {
36 std::vector<TArrayD> fEyL;
37 std::vector<TArrayD> fEyH;
38 mutable Double_t *fEyLSum =
nullptr;
39 mutable Double_t *fEyHSum =
nullptr;
40 std::vector<TAttFill> fAttFill;
41 std::vector<TAttLine> fAttLine;
43 virtual Double_t **Allocate(Int_t size);
44 Bool_t CtorAllocate();
46 virtual void CopyAndRelease(Double_t **newarrays, Int_t ibegin, Int_t iend, Int_t obegin);
47 virtual Bool_t CopyPoints(Double_t **arrays, Int_t ibegin, Int_t iend, Int_t obegin);
48 virtual void FillZero(Int_t begin, Int_t end, Bool_t from_ctor = kTRUE);
50 void CalcYErrorsSum()
const;
51 virtual Bool_t DoMerge(
const TGraph *tg);
52 virtual void SwapPoints(Int_t pos1, Int_t pos2);
55 enum ESummationModes {
62 TGraphMultiErrors(
const Char_t *name,
const Char_t *title);
63 TGraphMultiErrors(Int_t np, Int_t ne = 1);
64 TGraphMultiErrors(
const Char_t *name,
const Char_t *title, Int_t np, Int_t ne = 1);
66 TGraphMultiErrors(Int_t np,
const Float_t *x,
const Float_t *y,
const Float_t *exL =
nullptr,
67 const Float_t *exH =
nullptr,
const Float_t *eyL =
nullptr,
const Float_t *eyH =
nullptr,
68 Int_t m = kOnlyFirst);
69 TGraphMultiErrors(
const Char_t *name,
const Char_t *title, Int_t np,
const Float_t *x,
const Float_t *y,
70 const Float_t *exL =
nullptr,
const Float_t *exH =
nullptr,
const Float_t *eyL =
nullptr,
71 const Float_t *eyH =
nullptr, Int_t m = kOnlyFirst);
72 TGraphMultiErrors(Int_t np,
const Double_t *x,
const Double_t *y,
const Double_t *exL =
nullptr,
73 const Double_t *exH =
nullptr,
const Double_t *eyL =
nullptr,
const Double_t *eyH =
nullptr,
74 Int_t m = kOnlyFirst);
75 TGraphMultiErrors(
const Char_t *name,
const Char_t *title, Int_t np,
const Double_t *x,
const Double_t *y,
76 const Double_t *exL =
nullptr,
const Double_t *exH =
nullptr,
const Double_t *eyL =
nullptr,
77 const Double_t *eyH =
nullptr, Int_t m = kOnlyFirst);
79 TGraphMultiErrors(Int_t np, Int_t ne,
const Float_t *x,
const Float_t *y,
const Float_t *exL,
const Float_t *exH,
80 std::vector<std::vector<Float_t>> eyL, std::vector<std::vector<Float_t>> eyH,
81 Int_t m = kOnlyFirst);
82 TGraphMultiErrors(
const Char_t *name,
const Char_t *title, Int_t np, Int_t ne,
const Float_t *x,
const Float_t *y,
83 const Float_t *exL,
const Float_t *exH, std::vector<std::vector<Float_t>> eyL,
84 std::vector<std::vector<Float_t>> eyH, Int_t m = kOnlyFirst);
85 TGraphMultiErrors(Int_t np, Int_t ne,
const Double_t *x,
const Double_t *y,
const Double_t *exL,
const Double_t *exH,
86 std::vector<std::vector<Double_t>> eyL, std::vector<std::vector<Double_t>> eyH,
87 Int_t m = kOnlyFirst);
88 TGraphMultiErrors(
const Char_t *name,
const Char_t *title, Int_t np, Int_t ne,
const Double_t *x,
const Double_t *y,
89 const Double_t *exL,
const Double_t *exH, std::vector<std::vector<Double_t>> eyL,
90 std::vector<std::vector<Double_t>> eyH, Int_t m = kOnlyFirst);
92 TGraphMultiErrors(Int_t np, Int_t ne,
const Float_t *x,
const Float_t *y,
const Float_t *exL,
const Float_t *exH,
93 std::vector<TArrayF> eyL, std::vector<TArrayF> eyH, Int_t m = kOnlyFirst);
94 TGraphMultiErrors(
const Char_t *name,
const Char_t *title, Int_t np, Int_t ne,
const Float_t *x,
const Float_t *y,
95 const Float_t *exL,
const Float_t *exH, std::vector<TArrayF> eyL, std::vector<TArrayF> eyH,
96 Int_t m = kOnlyFirst);
97 TGraphMultiErrors(Int_t np, Int_t ne,
const Double_t *x,
const Double_t *y,
const Double_t *exL,
const Double_t *exH,
98 std::vector<TArrayD> eyL, std::vector<TArrayD> eyH, Int_t m = kOnlyFirst);
99 TGraphMultiErrors(
const Char_t *name,
const Char_t *title, Int_t np, Int_t ne,
const Double_t *x,
const Double_t *y,
100 const Double_t *exL,
const Double_t *exH, std::vector<TArrayD> eyL, std::vector<TArrayD> eyH,
101 Int_t m = kOnlyFirst);
103 TGraphMultiErrors(
const TVectorF &tvX,
const TVectorF &tvY,
const TVectorF &tvExL,
const TVectorF &tvExH,
104 const TVectorF &tvEyL,
const TVectorF &tvEyH, Int_t m = kOnlyFirst);
105 TGraphMultiErrors(
const TVectorD &tvX,
const TVectorD &tvY,
const TVectorD &tvExL,
const TVectorD &tvExH,
106 const TVectorD &tvEyL,
const TVectorD &tvEyH, Int_t m = kOnlyFirst);
108 TGraphMultiErrors(Int_t ne,
const TVectorF &tvX,
const TVectorF &tvY,
const TVectorF &tvExL,
const TVectorF &tvExH,
109 const TVectorF *tvEyL,
const TVectorF *tvEyH, Int_t m = kOnlyFirst);
110 TGraphMultiErrors(Int_t ne,
const TVectorD &tvX,
const TVectorD &tvY,
const TVectorD &tvExL,
const TVectorD &tvExH,
111 const TVectorD *tvEyL,
const TVectorD *tvEyH, Int_t m = kOnlyFirst);
113 TGraphMultiErrors(
const TGraphMultiErrors &tgme);
114 TGraphMultiErrors &operator=(
const TGraphMultiErrors &tgme);
116 TGraphMultiErrors(
const TH1 *th, Int_t ne = 1);
117 TGraphMultiErrors(
const TH1 *pass,
const TH1 *total, Int_t ne = 1, Option_t *option =
"");
119 virtual ~TGraphMultiErrors();
121 virtual void AddYError(Int_t np,
const Double_t *eyL =
nullptr,
const Double_t *eyH =
nullptr);
122 virtual void Apply(TF1 *f);
123 virtual void BayesDivide(
const TH1 *pass,
const TH1 *total, Option_t *opt =
"");
124 void Divide(
const TH1 *pass,
const TH1 *total, Option_t *opt =
"cp");
125 virtual void ComputeRange(Double_t &xmin, Double_t &ymin, Double_t &xmax, Double_t &ymax)
const;
126 virtual void DeleteYError(Int_t e);
128 virtual Double_t GetErrorX(Int_t i)
const;
129 virtual Double_t GetErrorY(Int_t i)
const;
130 virtual Double_t GetErrorY(Int_t i, Int_t e)
const;
132 virtual Double_t GetErrorXlow(Int_t i)
const;
133 virtual Double_t GetErrorXhigh(Int_t i)
const;
134 virtual Double_t GetErrorYlow(Int_t i)
const;
135 virtual Double_t GetErrorYhigh(Int_t i)
const;
136 virtual Double_t GetErrorYlow(Int_t i, Int_t e)
const;
137 virtual Double_t GetErrorYhigh(Int_t i, Int_t e)
const;
139 virtual Double_t *GetEXlow()
const {
return fExL; }
140 virtual Double_t *GetEXhigh()
const {
return fExH; }
141 virtual Double_t *GetEYlow()
const;
142 virtual Double_t *GetEYhigh()
const;
143 virtual Double_t *GetEYlow(Int_t e);
144 virtual Double_t *GetEYhigh(Int_t e);
146 virtual TAttFill *GetAttFill(Int_t e);
147 virtual TAttLine *GetAttLine(Int_t e);
149 using TAttFill::GetFillColor;
150 using TAttFill::GetFillStyle;
152 virtual Color_t GetFillColor(Int_t e)
const;
153 virtual Style_t GetFillStyle(Int_t e)
const;
155 using TAttLine::GetLineColor;
156 using TAttLine::GetLineStyle;
157 using TAttLine::GetLineWidth;
159 virtual Color_t GetLineColor(Int_t e)
const;
160 virtual Style_t GetLineStyle(Int_t e)
const;
161 virtual Width_t GetLineWidth(Int_t e)
const;
163 Int_t GetSumErrorsMode()
const {
return fSumErrorsMode; }
164 Int_t GetNYErrors()
const {
return fNYErrors; }
166 virtual void Print(Option_t *chopt =
"")
const;
167 virtual void SavePrimitive(std::ostream &out, Option_t *option =
"");
169 virtual void SetPointError(Double_t exL, Double_t exH, Double_t eyL1, Double_t eyH1, Double_t eyL2 = 0.,
170 Double_t eyH2 = 0., Double_t eyL3 = 0., Double_t eyH3 = 0.);
171 virtual void SetPointError(Int_t i, Int_t ne, Double_t exL, Double_t exH,
const Double_t *eyL,
const Double_t *eyH);
173 virtual void SetPointEX(Int_t i, Double_t exL, Double_t exH);
174 virtual void SetPointEXlow(Int_t i, Double_t exL);
175 virtual void SetPointEXhigh(Int_t i, Double_t exH);
176 virtual void SetPointEY(Int_t i, Int_t ne,
const Double_t *eyL,
const Double_t *eyH);
177 virtual void SetPointEYlow(Int_t i, Int_t ne,
const Double_t *eyL);
178 virtual void SetPointEYhigh(Int_t i, Int_t ne,
const Double_t *eyH);
179 virtual void SetPointEY(Int_t i, Int_t e, Double_t eyL, Double_t eyH);
180 virtual void SetPointEYlow(Int_t i, Int_t e, Double_t eyL);
181 virtual void SetPointEYhigh(Int_t i, Int_t e, Double_t eyH);
183 virtual void SetEY(Int_t e, Int_t np,
const Double_t *eyL,
const Double_t *eyH);
184 virtual void SetEYlow(Int_t e, Int_t np,
const Double_t *eyL);
185 virtual void SetEYhigh(Int_t e, Int_t np,
const Double_t *eyH);
187 virtual void SetSumErrorsMode(Int_t m);
189 virtual void SetAttFill(Int_t e, TAttFill *taf);
190 virtual void SetAttLine(Int_t e, TAttLine *tal);
192 using TAttFill::SetFillColor;
193 using TAttFill::SetFillColorAlpha;
194 using TAttFill::SetFillStyle;
196 virtual void SetFillColor(Int_t e, Color_t fcolor);
197 virtual void SetFillColorAlpha(Int_t e, Color_t fcolor, Float_t falpha);
198 virtual void SetFillStyle(Int_t e, Style_t fstyle);
200 using TAttLine::SetLineColor;
201 using TAttLine::SetLineColorAlpha;
202 using TAttLine::SetLineStyle;
203 using TAttLine::SetLineWidth;
205 virtual void SetLineColor(Int_t e, Color_t lcolor);
206 virtual void SetLineColorAlpha(Int_t e, Color_t lcolor, Float_t lalpha);
207 virtual void SetLineStyle(Int_t e, Style_t lstyle);
208 virtual void SetLineWidth(Int_t e, Width_t lwidth);
210 ClassDef(TGraphMultiErrors, 1)
213 #endif // ROOT_TGraphMultiErrors