Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TRatioPlot.h
Go to the documentation of this file.
1// @(#)root/gpad:$Id$
2// Author: Paul Gessinger 25/08/2016
3
4/*************************************************************************
5 * Copyright (C) 1995-2024, 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_TRatioPlot
13#define ROOT_TRatioPlot
14
15
16//////////////////////////////////////////////////////////////////////////
17// //
18// ROOT_TRatioPlot //
19// //
20// A collection of histograms //
21// //
22//////////////////////////////////////////////////////////////////////////
23
24#include "TObject.h"
25
26#include "TString.h"
27
28#include "TFitResultPtr.h"
29
30class TH1;
31class TPad;
32class TVirtualPad;
33class TGraph;
35class TGraphErrors;
36class TAxis;
37class TGaxis;
38class TLine;
39class TFitResult;
40class THStack;
41class TBrowser;
42
43class TRatioPlot : public TObject {
44
45private:
46 TRatioPlot &operator=(const TRatioPlot &) = delete;
47 TRatioPlot(const TRatioPlot &) = delete;
48
50 kDivideHist = 1, ///< Use `TH1::Divide` to create the ratio.
51 kDivideGraph = 2, ///< Use `TGraphAsymmErrors::Divide` to create the ratio.
52 kDifference = 3, ///< Calculate the difference between the histograms.
53 kFitResidual = 4, ///< Calculate the fit residual between the histogram and a fit stored within it.
54 kDifferenceSign = 5 ///< Calculate the difference divided by the error.
55 };
56
57 enum ErrorMode {
58 kErrorSymmetric = 1, ///< Use the regular `TH1::GetBinError` as the error
59 kErrorAsymmetric = 2, ///< Use `TH1::GetBinErrorUp` and `TH1::GetBinErrorLow` for the error, depending on y values.
60 kErrorFunc = 3 ///< Use the square root of the function value as the error.
61 };
62
64 kHideUp = 1, ///< Hide the first label of the upper y axis when there is low space.
65 kHideLow = 2, ///< Hide the last label of the lower y axis when there is low space.
66 kNoHide = 3, ///< Do not hide labels when there is low space.
67 kForceHideUp = 4, ///< Always hide the first label of the upper y axis
68 kForceHideLow = 5 ///< Always hide the last label of the lower y axis
69 };
70
71
72protected:
73
74 TVirtualPad *fParentPad = nullptr; ///< Stores the pad the ratio plot was created in
75 TPad *fUpperPad = nullptr; ///< The pad which contains the upper plot part
76 TPad *fLowerPad = nullptr; ///< The pad which contains the calculated lower plot part
77 TPad *fTopPad = nullptr; ///< The Pad that drawn on top on the others to have consistent coordinates
78
79 TH1 *fH1 = nullptr; ///< Stores the primary histogram
80 TH1 *fH2 = nullptr; ///< Stores the secondary histogram, if there is one
81 TObject *fHistDrawProxy = nullptr; ///< The object which is actually drawn, this might be TH1 or THStack
82 Bool_t fHistDrawProxyStack = kFALSE; ///< If stack was assigned as proxy
83
84 Int_t fMode = 0; ///< Stores which calculation is supposed to be performed as specified by user option
85 Int_t fErrorMode = ErrorMode::kErrorSymmetric; ///< Stores the error mode, sym, asym or func
86 TString fOption; ///< Stores the option which is given in the constructor as a string
87 TString fH1DrawOpt; ///< Stores draw option for h1 given in constructor
88 TString fH2DrawOpt; ///< Stores draw option for h2 given in constructor
89 TString fGraphDrawOpt; ///< Stores draw option for the lower plot graph given in constructor
90 TString fFitDrawOpt; ///< Stores draw option for the fit function in the fit residual case
91
92 Float_t fSplitFraction = 0.3; ///< Stores the fraction at which the upper and lower pads meet
93
94 TGraph *fRatioGraph = nullptr; ///< Stores the lower plot's graph
95 TGraphErrors *fConfidenceInterval1 = nullptr; ///< Stores the graph for the 1 sigma band
96 TGraphErrors *fConfidenceInterval2 = nullptr; ///< Stores the graph for the 2 sigma band
97 Color_t fCi1Color = kYellow; ///< Stores the color for the 1 sigma band
98 Color_t fCi2Color = kGreen; ///< Stores the color for the 2 sigma band
99
100 Bool_t fShowConfidenceIntervals = kTRUE; ///< Stores whether to show the confidence interval bands. From Draw option
101
102 Double_t fCl1 = 0.6827; ///< Stores the confidence level for the inner confidence interval band
103 Double_t fCl2 = 0.9545; ///< Stores the confidence level for the outer confidence interval band
104
105 Double_t fC1 = 1.; ///< Stores the scale factor for h1 (or THStack sum)
106 Double_t fC2 = 1.; ///< Stores the scale factor for h2
107
108 TFitResult *fFitResult = nullptr; ///< Stores the explicit fit result given in the fit residual case. Can be 0
109
110 TAxis *fSharedXAxis = nullptr; ///< X axis that stores the range for both plots
111 TGaxis *fUpperGXaxis = nullptr; ///< Upper graphical x axis
112 TGaxis *fLowerGXaxis = nullptr; ///< Lower graphical x axis
113 TGaxis *fUpperGYaxis = nullptr; ///< Upper graphical y axis
114 TGaxis *fLowerGYaxis = nullptr; ///< Lower graphical y axis
115 TGaxis *fUpperGXaxisMirror = nullptr; ///< Upper mirror of the x axis
116 TGaxis *fLowerGXaxisMirror = nullptr; ///< Lower mirror of the x axis
117 TGaxis *fUpperGYaxisMirror = nullptr; ///< Upper mirror of the y axis
118 TGaxis *fLowerGYaxisMirror = nullptr; ///< Lower mirror of the y axis
119
120 TAxis *fUpYaxis = nullptr; ///< Clone of the upper y axis
121 TAxis *fLowYaxis = nullptr; ///< Clone of the lower y axis
122
123 std::vector<TLine*> fGridlines; ///< Keeps TLine objects for the gridlines
124 std::vector<double> fGridlinePositions; ///< Stores the y positions for the gridlines
125 Bool_t fShowGridlines = kTRUE; ///< Stores whether to show the gridlines at all
126 Int_t fHideLabelMode = HideLabelMode::kHideLow; ///< Stores which label to hide if the margin is to narrow, if at all
127
128 // store margins to be able do determine
129 // what has changed when user drags
130 Float_t fUpTopMargin = 0.1; ///< Stores the top margin of the upper pad
131 Float_t fUpBottomMargin = 0.05; ///< Stores the bottom margin of the upper pad
132 Float_t fLowTopMargin = 0.05; ///< Stores the top margin of the lower pad
133 Float_t fLowBottomMargin = 0.3; ///< Stores the bottom margin of the lower pad
134
135 Float_t fLeftMargin = 0.1; ///< Stores the common left margin of both pads
136 Float_t fRightMargin = 0.1; ///< Stores the common right margin of both pads
137
139
140 Bool_t fIsUpdating = kFALSE; ///<! Keeps track of whether its currently updating to reject other calls until done
141
142 virtual void SyncAxesRanges();
143 virtual void SetupPads();
144 virtual void ConnectPadsSignals();
145 virtual void CreateVisualAxes();
146 virtual void UpdateVisualAxes();
147 virtual Bool_t SyncPadMargins();
148 void SetPadMargins();
149 void CreateGridlines();
150 void UpdateGridlines();
152
153 void ImportAxisAttributes(TGaxis* gaxis, TAxis* axis);
154
155 virtual void Init(TH1* h1, TH1* h2, Option_t *option = "");
156
157public:
158
159 TRatioPlot();
160 ~TRatioPlot() override;
161 TRatioPlot(TH1* h1, TH1* h2, Option_t *option = "pois");
162
163 TRatioPlot(THStack* st, TH1* h2, Option_t *option = "pois");
164
165 TRatioPlot(TH1* h1, Option_t *option = "", TFitResult *fitres = nullptr);
166
167 void SetH1DrawOpt(Option_t *opt);
168 void SetH2DrawOpt(Option_t *opt);
169 void SetGraphDrawOpt(Option_t *opt);
170 void SetFitDrawOpt(Option_t *opt);
171
173
174 void Draw(Option_t *chopt = "") override;
175
176 void Paint(Option_t *opt = "") override;
177
178 // Slots for signal receiving
179 void UnZoomed();
180 void RangeAxisChanged();
181 void SubPadResized();
182
183 // Getters
184 TAxis *GetXaxis() const { return fSharedXAxis; }
185 TAxis *GetUpYaxis() const { return fUpYaxis; }
186 TAxis *GetLowYaxis() const { return fLowYaxis; }
187
188 virtual TObject *GetUpperRefObject() const;
189 TAxis *GetUpperRefXaxis() const;
190 TAxis *GetUpperRefYaxis() const;
191
192 virtual TGraph *GetLowerRefGraph() const;
193 TAxis *GetLowerRefXaxis() const;
194 TAxis *GetLowerRefYaxis() const;
195
196 ////////////////////////////////////////////////////////////////////////////////
197 /// Get the output of the calculation in the form of a graph. The type of
198 /// the return value depends on the input option that was given in the constructor.
199
201
202 ////////////////////////////////////////////////////////////////////////////////
203 /// Returns the graph for the 1 sigma confidence interval in the fit residual case
204
206
207 ////////////////////////////////////////////////////////////////////////////////
208 /// Returns the graph for the 2 sigma confidence interval in the fit residual case
209
211
212 TPad *GetUpperPad() const { return fUpperPad; }
213 TPad *GetLowerPad() const { return fLowerPad; }
214
215 // Setters
216
217 ////////////////////////////////////////////////////////////////////////////////
218 /// Explicitly specify the fit result that is to be used for fit residual calculation.
219 /// If it is not provided, the last fit registered in the global fitter is used.
220 /// The fit result can also be specified in the constructor.
221 ///
222 /// \param fitres The fit result coming from the fit function call
223
224 void SetFitResult(TFitResultPtr fitres) { fFitResult = fitres.Get(); }
225
226 // Setters for margins
227 void SetUpTopMargin(Float_t margin);
228 void SetUpBottomMargin(Float_t margin);
229 void SetLowTopMargin(Float_t margin);
230 void SetLowBottomMargin(Float_t margin);
231 void SetLeftMargin(Float_t margin);
232 void SetRightMargin(Float_t margin);
233
236 void SetSplitFraction(Float_t sf);
238
239 virtual void SetGridlines(Double_t *gridlines, Int_t numGridlines);
240 virtual void SetGridlines(std::vector<double> gridlines);
241
243
244 void SetC1(Double_t c1) { fC1 = c1; }
245 void SetC2(Double_t c2) { fC2 = c2; }
246
247 ClassDefOverride(TRatioPlot, 2) //A ratio of histograms
248};
249
250#endif
int Int_t
Definition RtypesCore.h:45
short Color_t
Definition RtypesCore.h:92
float Float_t
Definition RtypesCore.h:57
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
double Double_t
Definition RtypesCore.h:59
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
const char Option_t
Definition RtypesCore.h:66
@ kGreen
Definition Rtypes.h:66
@ kYellow
Definition Rtypes.h:66
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
Option_t Option_t option
Option_t Option_t width
Class to manage histogram axis.
Definition TAxis.h:31
Using a TBrowser one can browse all ROOT objects.
Definition TBrowser.h:37
Provides an indirection to the TFitResult class and with a semantics identical to a TFitResult pointe...
TFitResult * Get() const
Return contained pointer.
Extends the ROOT::Fit::Result class with a TNamed inheritance providing easy possibility for I/O.
Definition TFitResult.h:34
The axis painter class.
Definition TGaxis.h:24
TGraph with asymmetric error bars.
A TGraphErrors is a TGraph with error bars.
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:59
The Histogram stack class.
Definition THStack.h:40
Use the TLine constructor to create a simple line.
Definition TLine.h:22
Mother of all ROOT objects.
Definition TObject.h:41
The most important graphics class in the ROOT system.
Definition TPad.h:28
Class for displaying ratios, differences and fit residuals.
Definition TRatioPlot.h:43
void SubPadResized()
Slot that handles common resizing of upper and lower pad.
@ kForceHideUp
Always hide the first label of the upper y axis.
Definition TRatioPlot.h:67
@ kHideUp
Hide the first label of the upper y axis when there is low space.
Definition TRatioPlot.h:64
@ kNoHide
Do not hide labels when there is low space.
Definition TRatioPlot.h:66
@ kHideLow
Hide the last label of the lower y axis when there is low space.
Definition TRatioPlot.h:65
@ kForceHideLow
Always hide the last label of the lower y axis.
Definition TRatioPlot.h:68
TGraphErrors * fConfidenceInterval2
Stores the graph for the 2 sigma band.
Definition TRatioPlot.h:96
TAxis * GetLowerRefXaxis() const
Gets the x axis of the lower ref graph.
TGraphErrors * GetConfidenceInterval2() const
Returns the graph for the 2 sigma confidence interval in the fit residual case.
Definition TRatioPlot.h:210
TAxis * GetLowYaxis() const
Definition TRatioPlot.h:186
Int_t fErrorMode
Stores the error mode, sym, asym or func.
Definition TRatioPlot.h:85
TAxis * GetLowerRefYaxis() const
Gets the y axis of the lower ref graph.
TGaxis * fUpperGXaxisMirror
Upper mirror of the x axis.
Definition TRatioPlot.h:115
TRatioPlot & operator=(const TRatioPlot &)=delete
TGaxis * fLowerGXaxisMirror
Lower mirror of the x axis.
Definition TRatioPlot.h:116
TPad * GetLowerPad() const
Definition TRatioPlot.h:213
TAxis * GetUpperRefYaxis() const
Gets the y axis of the object returned by TRatioPlot::GetUpperRefObject.
TAxis * GetUpYaxis() const
Definition TRatioPlot.h:185
Float_t fLowBottomMargin
Stores the bottom margin of the lower pad.
Definition TRatioPlot.h:133
void CreateGridlines()
Create a grid lines.
Int_t BuildLowerPlot()
Build the lower plot according to which constructor was called, and which options were passed.
void SetUpBottomMargin(Float_t margin)
Sets the bottom margin of the upper pad.
Float_t fUpBottomMargin
Stores the bottom margin of the upper pad.
Definition TRatioPlot.h:131
TH1 * fH1
Stores the primary histogram.
Definition TRatioPlot.h:79
void SetH2DrawOpt(Option_t *opt)
Sets the drawing option for h2.
TFitResult * fFitResult
Stores the explicit fit result given in the fit residual case. Can be 0.
Definition TRatioPlot.h:108
virtual Bool_t SyncPadMargins()
Figures out which pad margin has deviated from the stored ones, to figure out what the new nominal is...
virtual void UpdateVisualAxes()
Update TGaxis attributes.
Color_t fCi1Color
Stores the color for the 1 sigma band.
Definition TRatioPlot.h:97
TGaxis * fUpperGYaxis
Upper graphical y axis.
Definition TRatioPlot.h:113
Double_t fC2
Stores the scale factor for h2.
Definition TRatioPlot.h:106
void UpdateGridlines()
Update positions of grid lines.
void SetLowBottomMargin(Float_t margin)
Sets the bottom margin of the lower pad.
void SetConfidenceIntervalColors(Color_t ci1=kYellow, Color_t ci2=kGreen)
Set the confidence interval colors.
Double_t fC1
Stores the scale factor for h1 (or THStack sum)
Definition TRatioPlot.h:105
virtual void CreateVisualAxes()
Creates the TGaxis objects that are used for consistent display of the axes.
Float_t fLowTopMargin
Stores the top margin of the lower pad.
Definition TRatioPlot.h:132
TString fH2DrawOpt
Stores draw option for h2 given in constructor.
Definition TRatioPlot.h:88
void SetUpTopMargin(Float_t margin)
Sets the top margin of the upper pad.
TGaxis * fLowerGXaxis
Lower graphical x axis.
Definition TRatioPlot.h:112
TRatioPlot()
TRatioPlot default constructor.
void SetC2(Double_t c2)
Definition TRatioPlot.h:245
Bool_t fIsUpdating
! Keeps track of whether its currently updating to reject other calls until done
Definition TRatioPlot.h:140
void SetGraphDrawOpt(Option_t *opt)
Sets the drawing option for the lower graph.
Double_t fCl1
Stores the confidence level for the inner confidence interval band.
Definition TRatioPlot.h:102
@ kErrorAsymmetric
Use TH1::GetBinErrorUp and TH1::GetBinErrorLow for the error, depending on y values.
Definition TRatioPlot.h:59
@ kErrorFunc
Use the square root of the function value as the error.
Definition TRatioPlot.h:60
@ kErrorSymmetric
Use the regular TH1::GetBinError as the error.
Definition TRatioPlot.h:58
Float_t GetSeparationMargin() const
Return the separation margin value.
void ImportAxisAttributes(TGaxis *gaxis, TAxis *axis)
Internal method to import TAxis attributes to a TGaxis.
void SetFitDrawOpt(Option_t *opt)
Sets the drawing option for the fit in the fit residual case.
std::vector< TLine * > fGridlines
Keeps TLine objects for the gridlines.
Definition TRatioPlot.h:123
void SetPadMargins()
Sets the margins of all the pads to the value specified in class members.
TPad * fLowerPad
The pad which contains the calculated lower plot part.
Definition TRatioPlot.h:76
TAxis * fSharedXAxis
X axis that stores the range for both plots.
Definition TRatioPlot.h:110
void SetFitResult(TFitResultPtr fitres)
Explicitly specify the fit result that is to be used for fit residual calculation.
Definition TRatioPlot.h:224
TString fFitDrawOpt
Stores draw option for the fit function in the fit residual case.
Definition TRatioPlot.h:90
virtual void SetGridlines(Double_t *gridlines, Int_t numGridlines)
Set where horizontal, dashed lines are drawn on the lower pad.
TGaxis * fUpperGYaxisMirror
Upper mirror of the y axis.
Definition TRatioPlot.h:117
virtual void SetupPads()
Setup the pads.
TGraphErrors * GetConfidenceInterval1() const
Returns the graph for the 1 sigma confidence interval in the fit residual case.
Definition TRatioPlot.h:205
TAxis * fUpYaxis
Clone of the upper y axis.
Definition TRatioPlot.h:120
TVirtualPad * fParentPad
Stores the pad the ratio plot was created in.
Definition TRatioPlot.h:74
Float_t fUpTopMargin
Stores the top margin of the upper pad.
Definition TRatioPlot.h:130
TGraph * GetCalculationOutputGraph() const
Get the output of the calculation in the form of a graph.
Definition TRatioPlot.h:200
void SetH1DrawOpt(Option_t *opt)
Sets the drawing option for h1.
TGraph * fRatioGraph
Stores the lower plot's graph.
Definition TRatioPlot.h:94
virtual TGraph * GetLowerRefGraph() const
Returns the reference graph for the lower pad, which means the graph that is responsible for setting ...
TRatioPlot(const TRatioPlot &)=delete
virtual void ConnectPadsSignals()
Connect some signals from the pads to handle them Allows correctly work also after reading ratioplot ...
Int_t fMode
Stores which calculation is supposed to be performed as specified by user option.
Definition TRatioPlot.h:84
void SetSplitFraction(Float_t sf)
Set the fraction of the parent pad, at which the to sub pads should meet.
TObject * fHistDrawProxy
The object which is actually drawn, this might be TH1 or THStack.
Definition TRatioPlot.h:81
Float_t fRightMargin
Stores the common right margin of both pads.
Definition TRatioPlot.h:136
TGaxis * fLowerGYaxisMirror
Lower mirror of the y axis.
Definition TRatioPlot.h:118
Int_t fHideLabelMode
Stores which label to hide if the margin is to narrow, if at all.
Definition TRatioPlot.h:126
void SetC1(Double_t c1)
Definition TRatioPlot.h:244
TPad * fTopPad
The Pad that drawn on top on the others to have consistent coordinates.
Definition TRatioPlot.h:77
void SetInsetWidth(Double_t width)
Set the inset on the outer sides of all the pads.
virtual void SyncAxesRanges()
Syncs the axes ranges from the shared ones to the actual ones.
void RangeAxisChanged()
Slot that receives the RangeAxisChanged signal from any of the pads and reacts correspondingly.
@ kDifference
Calculate the difference between the histograms.
Definition TRatioPlot.h:52
@ kDivideHist
Use TH1::Divide to create the ratio.
Definition TRatioPlot.h:50
@ kFitResidual
Calculate the fit residual between the histogram and a fit stored within it.
Definition TRatioPlot.h:53
@ kDifferenceSign
Calculate the difference divided by the error.
Definition TRatioPlot.h:54
@ kDivideGraph
Use TGraphAsymmErrors::Divide to create the ratio.
Definition TRatioPlot.h:51
void UnZoomed()
Slot for the UnZoomed signal that was introduced to TPad.
TH1 * fH2
Stores the secondary histogram, if there is one.
Definition TRatioPlot.h:80
Double_t fCl2
Stores the confidence level for the outer confidence interval band.
Definition TRatioPlot.h:103
TAxis * fLowYaxis
Clone of the lower y axis.
Definition TRatioPlot.h:121
TString fOption
Stores the option which is given in the constructor as a string.
Definition TRatioPlot.h:86
TPad * fUpperPad
The pad which contains the upper plot part.
Definition TRatioPlot.h:75
Bool_t fShowConfidenceIntervals
Stores whether to show the confidence interval bands. From Draw option.
Definition TRatioPlot.h:100
void SetLowTopMargin(Float_t margin)
Sets the top margin of the lower pad.
void SetSeparationMargin(Float_t)
Sets the margin that separates the two pads.
Bool_t fHistDrawProxyStack
If stack was assigned as proxy.
Definition TRatioPlot.h:82
Float_t fInsetWidth
Definition TRatioPlot.h:138
TAxis * GetXaxis() const
Definition TRatioPlot.h:184
void SetLeftMargin(Float_t margin)
Sets the left margin of both pads.
Float_t fLeftMargin
Stores the common left margin of both pads.
Definition TRatioPlot.h:135
TAxis * GetUpperRefXaxis() const
Gets the x axis of the object returned by TRatioPlot::GetUpperRefObject.
Float_t fSplitFraction
Stores the fraction at which the upper and lower pads meet.
Definition TRatioPlot.h:92
void Paint(Option_t *opt="") override
Update the visual axes and grid lines when painting.
virtual TObject * GetUpperRefObject() const
Return the reference object.
TGraphErrors * fConfidenceInterval1
Stores the graph for the 1 sigma band.
Definition TRatioPlot.h:95
TGaxis * fUpperGXaxis
Upper graphical x axis.
Definition TRatioPlot.h:111
std::vector< double > fGridlinePositions
Stores the y positions for the gridlines.
Definition TRatioPlot.h:124
TString fH1DrawOpt
Stores draw option for h1 given in constructor.
Definition TRatioPlot.h:87
virtual void Init(TH1 *h1, TH1 *h2, Option_t *option="")
Internal method that shares constructor logic.
Bool_t fShowGridlines
Stores whether to show the gridlines at all.
Definition TRatioPlot.h:125
TString fGraphDrawOpt
Stores draw option for the lower plot graph given in constructor.
Definition TRatioPlot.h:89
~TRatioPlot() override
Destructor.
Color_t fCi2Color
Stores the color for the 2 sigma band.
Definition TRatioPlot.h:98
void SetRightMargin(Float_t margin)
Sets the right margin of both pads.
TGaxis * fLowerGYaxis
Lower graphical y axis.
Definition TRatioPlot.h:114
void SetConfidenceLevels(Double_t cl1, Double_t cl2)
Sets the confidence levels used to calculate the bands in the fit residual case.
TPad * GetUpperPad() const
Definition TRatioPlot.h:212
Basic string class.
Definition TString.h:139
TVirtualPad is an abstract base class for the Pad and Canvas classes.
Definition TVirtualPad.h:51
return c1
Definition legend1.C:41
TH1F * h1
Definition legend1.C:5
return c2
Definition legend2.C:14
th1 Draw()