132 gROOT->GetListOfCleanups()->Remove(
this);
138 for (
unsigned int i=0;i<
fGridlines.size();++i) {
170 if (optionString.
Contains(
"divsym")) {
172 fMode = TRatioPlot::CalculationMode::kDivideHist;
173 }
else if (optionString.
Contains(
"diffsig")) {
175 fMode = TRatioPlot::CalculationMode::kDifferenceSign;
178 if (optionString.
Contains(
"errasym")) {
179 fErrorMode = TRatioPlot::ErrorMode::kErrorAsymmetric;
183 if (optionString.
Contains(
"errfunc")) {
184 fErrorMode = TRatioPlot::ErrorMode::kErrorFunc;
187 }
else if (optionString.
Contains(
"diff")) {
189 fMode = TRatioPlot::CalculationMode::kDifference;
191 fMode = TRatioPlot::CalculationMode::kDivideGraph;
221 gROOT->GetListOfCleanups()->Add(
this);
224 Warning(
"TRatioPlot",
"Need two histograms.");
231 if (!h1IsTH1 && !h2IsTH1) {
232 Warning(
"TRatioPlot",
"Need two histograms deriving from TH2 or TH3.");
238 Init(h1, h2, option);
253 Warning(
"TRatioPlot",
"Need a histogram and a stack");
259 if (stackHists->
GetSize() == 0) {
260 Warning(
"TRatioPlot",
"Stack does not have histograms");
267 for (
int i=0;i<stackHists->
GetSize();++i) {
268 tmpHist->
Add((
TH1*)stackHists->
At(i));
273 Init(tmpHist, h2, option);
288 gROOT->GetListOfCleanups()->Add(
this);
291 Warning(
"TRatioPlot",
"Need a histogram.");
298 Warning(
"TRatioPlot",
"Need a histogram deriving from TH2 or TH3.");
304 if (h1Functions->
GetSize() < 1) {
305 Warning(
"TRatioPlot",
"Histogram given needs to have a (fit) function associated with it");
314 fMode = TRatioPlot::CalculationMode::kFitResidual;
319 if (optionString.
Contains(
"errasym")) {
320 fErrorMode = TRatioPlot::ErrorMode::kErrorAsymmetric;
324 if (optionString.
Contains(
"errfunc")) {
325 fErrorMode = TRatioPlot::ErrorMode::kErrorFunc;
405 Error(
"SetupPads",
"need to create a canvas first");
411 double height =
gPad->GetHNDC();
420 fUpperPad->
Connect(
"RangeAxisChanged()",
"TRatioPlot",
this,
"RangeAxisChanged()");
421 fLowerPad->
Connect(
"RangeAxisChanged()",
"TRatioPlot",
this,
"RangeAxisChanged()");
434 fTopPad =
new TPad(
"top_pad",
"", pm*f, pm, 1-pm*f, 1-pm);
568 }
else if (drawOpt.
Contains(
"grid")) {
573 if (drawOpt.
Contains(
"noconfint")) {
576 }
else if (drawOpt.
Contains(
"confint")) {
583 }
else if (drawOpt.
Contains(
"fhidelow")) {
585 }
else if (drawOpt.
Contains(
"hideup")) {
587 }
else if (drawOpt.
Contains(
"hidelow")) {
589 }
else if (drawOpt.
Contains(
"nohide")) {
596 Error(
"Draw",
"need to create a canvas first");
625 if (
fMode == TRatioPlot::CalculationMode::kFitResidual) {
630 Error(
"BuildLowerPlot",
"h1 does not have a fit function");
654 Warning(
"Draw",
"Draw proxy not of type TH1 or THStack, not drawing it");
692 Error(
"GetLowerRefGraph",
"Lower pad has not been defined");
697 if (primlist->
GetSize() == 0) {
698 Error(
"GetLowerRefGraph",
"Lower pad does not have primitives");
714 Error(
"GetLowerRefGraph",
"Did not find graph in list");
728 refobj = primlist->
At(i);
734 Error(
"GetUpperRefObject",
"No upper ref object of TH1 or THStack type found");
745 if (!refobj)
return 0;
763 if (!refobj)
return 0;
766 return ((
TH1*)refobj)->GetYaxis();
768 return ((
THStack*)refobj)->GetYaxis();
798 if (y < lowYFirst || lowYLast < y) {
804 dest = dest - outofrange;
807 for (
unsigned int i=0;i<
fGridlines.size();++i) {
813 for (
unsigned int i=0;i<
dest;++i) {
824 unsigned int skipped = 0;
828 if (y < lowYFirst || lowYLast < y) {
896 static Double_t divideGridlines[] = {0.7, 1.0, 1.3};
897 static Double_t diffGridlines[] = {0.0};
898 static Double_t signGridlines[] = {1.0, 0.0, -1.0};
902 if (
fMode == TRatioPlot::CalculationMode::kDivideGraph) {
920 }
else if (
fMode == TRatioPlot::CalculationMode::kDifference) {
931 }
else if (
fMode == TRatioPlot::CalculationMode::kDifferenceSign) {
947 if (
fErrorMode == TRatioPlot::ErrorMode::kErrorAsymmetric) {
952 if (val - val2 > 0) {
960 }
else if (
fErrorMode == TRatioPlot::ErrorMode::kErrorSymmetric) {
963 Warning(
"BuildLowerPlot",
"error mode is invalid");
969 res = (val - val2) / error;
979 }
else if (
fMode == TRatioPlot::CalculationMode::kFitResidual) {
987 Error(
"BuildLowerPlot",
"h1 does not have a fit function");
997 std::vector<double> ci1;
998 std::vector<double> ci2;
1018 ci1.push_back(ci_arr1[i-1]);
1023 ci2.push_back(ci_arr2[i-1]);
1028 ci1.push_back(ci_arr1[i-1]);
1032 ci2.push_back(ci_arr2[i-1]);
1044 if (
fErrorMode == TRatioPlot::ErrorMode::kErrorAsymmetric) {
1057 }
else if (
fErrorMode == TRatioPlot::ErrorMode::kErrorSymmetric) {
1059 }
else if (
fErrorMode == TRatioPlot::ErrorMode::kErrorFunc) {
1064 Warning(
"BuildLowerPlot",
"error mode is invalid");
1089 }
else if (
fMode == TRatioPlot::CalculationMode::kDivideHist){
1102 Error(
"BuildLowerPlot",
"Invalid fMode value");
1110 Error(
"BuildLowerPlot",
"Error creating lower graph");
1131 TString thisfunc =
"CreateVisualAxes";
1169 if (upYFirst <= 0 || upYLast <= 0) {
1170 Error(thisfunc,
"Cannot set upper Y axis to log scale");
1178 if (lowYFirst <= 0 || lowYLast <= 0) {
1179 Error(thisfunc,
"Cannot set lower Y axis to log scale");
1186 if (first <= 0 || last <= 0) {
1187 Error(thisfunc,
"Cannot set X axis to log scale");
1193 if (logx) xopt.
Append(
"G");
1195 if (uplogy) upyopt.
Append(
"G");
1197 if (lowlogy) lowyopt.
Append(
"G");
1272 Double_t ratio = ( (upBM-(1-upTM))*(1-sf) ) / ( (lowBM-(1-lowTM))*sf ) ;
1281 }
else if (
fHideLabelMode == TRatioPlot::HideLabelMode::kForceHideLow) {
1291 }
else if (
fHideLabelMode == TRatioPlot::HideLabelMode::kHideLow) {
1300 }
else if (
fHideLabelMode == TRatioPlot::HideLabelMode::kHideLow) {
1309 if (axistop || axisright) {
1449 verticalChanged =
kTRUE;
1456 verticalChanged =
kTRUE;
1474 if (verticalChanged) {
1478 return changed || verticalChanged;
1532 if (upFirst != globFirst || upLast != globLast) {
1536 else if (lowFirst != globFirst || lowLast != globLast) {
1541 if (upChanged || lowChanged) {
1556 if (marginsChanged) {
1600 Float_t lowyup = lowylow + lowh;
1638 Warning(
"SetSplitFraction",
"Can only be used after TRatioPlot has been drawn.");
1659 Warning(
"SetInsetWidth",
"Can only be used after TRatioPlot has been drawn.");
1710 for (
Int_t i=0;i<numGridlines;++i) {
virtual void SetY2(Double_t y2)
Style_t GetFrameFillStyle() const
virtual void Draw(Option_t *chopt="")
Default Draw method for all objects.
TRatioPlot()
TRatioPlot default constructor.
virtual void SetGridx(Int_t value=1)
virtual Float_t GetTickLength() const
virtual void Scale(Double_t c1=1, Option_t *option="")
Multiply this histogram by a constant c1.
virtual void SetPad(const char *name, const char *title, Double_t xlow, Double_t ylow, Double_t xup, Double_t yup, Color_t color=35, Short_t bordersize=5, Short_t bordermode=-1)
Set all pad parameters.
TVirtualPad * fParentPad
Stores the pad the ratio plot was created in.
Float_t GetLeftMargin() const
virtual Double_t GetBinCenter(Int_t bin) const
Return bin center for 1D histogram.
TGaxis * fUpperGYaxisMirror
Upper mirror of the y axis.
void SetUpBottomMargin(Float_t margin)
Sets the bottom margin of the upper pad.
virtual Int_t GetLogy() const =0
Int_t GetFirst() const
Return first bin on the axis i.e.
TList * GetListOfPrimitives() const
The Histogram stack class.
virtual void SetLimits(Double_t xmin, Double_t xmax)
TAxis * GetLowerRefYaxis() const
Shortcut for:
virtual Float_t GetLabelOffset() const
virtual Double_t GetBinLowEdge(Int_t bin) const
Return low edge of bin.
Float_t fLowTopMargin
Stores the top margin of the lower pad.
TH1 * fH2
Stores the secondary histogram, if there is one.
image html pict1_TGaxis_012 png width
Define new text attributes for the label number "labNum".
Color_t fCi2Color
Stores the color for the 2 sigma band.
TString & ReplaceAll(const TString &s1, const TString &s2)
Float_t GetBottomMargin() const
void SetLeftMargin(Float_t margin)
Sets the left margin of both pads.
virtual TObject * GetUpperRefObject() const
virtual Color_t GetAxisColor() const
TAxis * fLowYaxis
Clone of the lower y axis.
void GetConfidenceIntervals(unsigned int n, unsigned int stride1, unsigned int stride2, const double *x, double *ci, double cl=0.95, bool norm=false) const
get confidence intervals for an array of n points x.
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
virtual Double_t GetHNDC() const =0
TObject * fHistDrawProxy
The object which is actually drawn, this might be TH1 or THStack.
TAxis * GetYaxis() const
Get y axis of the graph.
TGraph * fRatioGraph
Stores the lower plot's graph.
if object in a pad cannot be picked
void SetInsetWidth(Double_t width)
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
void SetSplitFraction(Float_t sf)
virtual void SetTitle(const char *title="")
Change the title of the axis.
Float_t fSplitFraction
Stores the fraction at which the upper and lower pads meet.
TString fH2DrawOpt
Stores draw option for h2 given in constructor.
Int_t fErrorMode
Stores the error mode, sym, asym or func.
virtual void Draw(Option_t *option="")
Draw this function with its current attributes.
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
virtual void SetTitle(const char *title="")
Set graph title.
void SetConfidenceLevels(Double_t cl1, Double_t cl2)
virtual Float_t GetLabelSize() const
TString fGraphDrawOpt
Stores draw option for the lower plot graph given in constructor.
Double_t fCl1
Stores the confidence level for the inner confidence interval band.
void SetLowBottomMargin(Float_t margin)
Sets the bottom margin of the lower pad.
Bool_t GetDecimals() const
virtual void Paint(Option_t *opt="")
This method must be overridden if a class wants to paint itself.
virtual void Draw(Option_t *chopt="")
Draw this graph with its current attributes.
virtual TVirtualPad * cd(Int_t subpadnumber=0)=0
virtual void SetTopMargin(Float_t topmargin)
Set Pad top margin in fraction of the pad height.
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
bool GetConfidenceIntervals(const TH1 *h1, const ROOT::Fit::FitResult &r, TGraphErrors *gr, double cl=0.95)
compute confidence intervals at level cl for a fitted histogram h1 in a TGraphErrors gr ...
TFitResult * fFitResult
Stores the explicit fit result given in the fit residual case. Can be 0.
virtual void Reset(Option_t *option="")
Reset this histogram: contents, errors, etc.
virtual TObject * FindObject(const char *name) const
Delete a TObjLink object.
virtual Double_t GetBinUpEdge(Int_t bin) const
Return up edge of bin.
virtual void SetGridlines(Double_t *gridlines, Int_t numGridlines)
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
void SetH1DrawOpt(Option_t *opt)
Sets the drawing option for h1.
TAxis * GetLowerRefXaxis() const
Shortcut for:
TString fH1DrawOpt
Stores draw option for h1 given in constructor.
virtual Style_t GetTitleFont() const
virtual void SetRangeUser(Double_t ufirst, Double_t ulast)
Set the viewing range for the axis from ufirst to ulast (in user coordinates).
virtual Bool_t SyncPadMargins()
void SetTitleSize(Float_t titlesize)
virtual void SetTextFont(Font_t tfont=62)
Set the text font.
TGraphErrors * fConfidenceInterval2
Stores the graph for the 2 sigma band.
std::vector< double > fGridlinePositions
Stores the y positions for the gridlines.
TGraph with asymmetric error bars.
TVirtualPad * cd(Int_t subpadnumber=0)
Set Current pad.
TGaxis * fLowerGXaxisMirror
Lower mirror of the x axis.
TString fFitDrawOpt
Stores draw option for the fit function in the fit residual case.
Extends the ROOT::Fit::Result class with a TNamed inheritance providing easy possibility for I/O...
Int_t fMode
Stores which calculation is supposed to be performed as specified by user option. ...
virtual Int_t GetLogx() const =0
void SetOption(Option_t *option="")
To set axis options.
virtual void SetupPads()
Setup the pads.
Color_t fCi1Color
Stores the color for the 1 sigma band.
TPad * fUpperPad
The pad which contains the upper plot part.
Float_t GetSeparationMargin() const
TString & Append(const char *cs)
void SetTimeFormat(const char *tformat)
Change the format used for time plotting.
void SetConfidenceIntervalColors(Color_t ci1=kGreen, Color_t ci2=kYellow)
void SetH2DrawOpt(Option_t *opt)
Sets the drawing option for h2.
virtual void SetLogx(Int_t value=1)
Set Lin/Log scale for X.
virtual Int_t GetTicky() const =0
TGaxis * fUpperGXaxisMirror
Upper mirror of the x axis.
TVirtualPad is an abstract base class for the Pad and Canvas classes.
TAxis * GetUpperRefXaxis() const
Double_t fCl2
Stores the confidence level for the outer confidence interval band.
virtual void Draw(Option_t *option="")
Draw Pad in Current pad (re-parent pad if necessary).
virtual const char * GetTimeFormat() const
virtual Color_t GetLabelColor() const
virtual ~TRatioPlot()
Destructor.
virtual Bool_t GetGridy() const =0
void SetLabelSize(Float_t labelsize)
virtual Bool_t Divide(TF1 *f1, Double_t c1=1)
Performs the operation: this = this/(c1*f1) if errors are defined (see TH1::Sumw2), errors are also recalculated.
virtual Int_t GetNdivisions() const
Double_t GetYlowNDC() const
virtual void SetLogx(Int_t value=1)=0
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual void SetX2(Double_t x2)
virtual TGraph * GetLowerRefGraph() const
Using a TBrowser one can browse all ROOT objects.
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Non-static method is used to connect from the signal of this object to the receiver slot...
Double_t fC1
Stores the scale factor for h1 (or THStack sum)
virtual void SetRange(Int_t first=0, Int_t last=0)
Set the viewing range for the axis from bin first to last.
TGaxis * fUpperGYaxis
Upper graphical y axis.
virtual void SetBottomMargin(Float_t bottommargin)
Set Pad bottom margin in fraction of the pad height.
const char * GetTitle() const
Returns title of object.
Int_t GetLast() const
Return last bin on the axis i.e.
Class to manage histogram axis.
virtual void SetY1(Double_t y1)
virtual void Draw(Option_t *option="")
Draw this histogram with options.
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void Init(TH1 *h1, TH1 *h2, Option_t *option="")
Internal method that shares constructor logic.
std::vector< TLine * > fGridlines
Keeps TLine objects for the gridlines.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
Bool_t fShowGridlines
Stores whether to show the gridlines at all.
void SetUpTopMargin(Float_t margin)
Sets the top margin of the upper pad.
virtual Float_t GetTitleOffset() const
The most important graphics class in the ROOT system.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
static TVirtualFitter * GetFitter()
static: return the current Fitter
Float_t fLeftMargin
Stores the common left margin of both pads.
TGaxis * fUpperGXaxis
Upper graphical x axis.
virtual void Divide(const TH1 *pass, const TH1 *total, Option_t *opt="cp")
Fill this TGraphAsymmErrors by dividing two 1-dimensional histograms pass/total.
Int_t fHideLabelMode
Stores which label to hide if the margin is to narrow, if at all.
virtual TList * GetListOfPrimitives() const =0
TH1 * fH1
Stores the primary histogram.
virtual TObject * At(Int_t idx) const
Returns the object at position idx. Returns 0 if idx is out of range.
virtual Color_t GetTitleColor() const
Float_t fRightMargin
Stores the common right margin of both pads.
virtual TObjLink * FirstLink() const
void SetWmax(Double_t wmax)
virtual Double_t GetWNDC() const =0
TGaxis * fLowerGXaxis
Lower graphical x axis.
virtual void SetX1(Double_t x1)
virtual void Modified(Bool_t flag=1)=0
virtual Int_t GetSumw2N() const
TPad * fLowerPad
The pad which contains the calculated lower plot part.
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
Evaluate this function.
void SetFitDrawOpt(Option_t *opt)
Sets the drawing option for the fit in the fit residual case.
void SetLabelOffset(Float_t labeloffset)
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width for 1D histogram.
virtual void CreateVisualAxes()
virtual Double_t GetBinErrorLow(Int_t bin) const
Return lower error associated to bin number bin.
Bool_t fIsUpdating
Keeps track of whether its currently updating to reject other calls until done.
Float_t fUpTopMargin
Stores the top margin of the upper pad.
virtual void SetGridy(Int_t value=1)
Wrapper around a TObject so it can be stored in a TList.
virtual void SetFillStyle(Style_t fstyle)
Override TAttFill::FillStyle for TPad because we want to handle style=0 as style 4000.
Float_t fUpBottomMargin
Stores the bottom margin of the upper pad.
TGraphErrors * fConfidenceInterval1
Stores the graph for the 1 sigma band.
TString fOption
Stores the option which is given in the constructor as a string.
virtual const char * GetTitle() const
Returns title of object.
void SetLabelFont(Int_t labelfont)
TGaxis * fLowerGYaxisMirror
Lower mirror of the y axis.
virtual Int_t GetTickx() const =0
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
void SetSeparationMargin(Float_t)
void SetGraphDrawOpt(Option_t *opt)
Sets the drawing option for the lower graph.
virtual Float_t GetTitleSize() const
Float_t fLowBottomMargin
Stores the bottom margin of the lower pad.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
TAxis * fSharedXAxis
X axis that stores the range for both plots.
virtual Bool_t Add(TF1 *h1, Double_t c1=1, Option_t *option="")
Performs the operation: this = this + c1*f1 if errors are defined (see TH1::Sumw2), errors are also recalculated.
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
virtual void SetRightMargin(Float_t rightmargin)
Set Pad right margin in fraction of the pad width.
Mother of all ROOT objects.
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
TAxis * fUpYaxis
Clone of the upper y axis.
Double_t fC2
Stores the scale factor for h2.
TObject * GetObject() const
Double_t GetUymax() const
Returns the maximum y-coordinate value visible on the pad. If log axis the returned value is in decad...
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
Set x and y values for point number i.
Float_t GetTopMargin() const
void ImportAxisAttributes(TGaxis *gaxis, TAxis *axis)
Bool_t fShowConfidenceIntervals
Stores whether to show the confidence interval bands. From Draw option.
#define dest(otri, vertexptr)
A Graph is a graphics object made of two arrays X and Y with npoints each.
TObject * Clone(const char *newname=0) const
Make a complete copy of the underlying object.
TAxis * GetUpperRefYaxis() const
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
void SetTickSize(Float_t ticksize)
A TGraphErrors is a TGraph with error bars.
void SetLabelColor(Int_t labelcolor)
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
virtual Double_t GetBinErrorUp(Int_t bin) const
Return upper error associated to bin number bin.
void SetRightMargin(Float_t margin)
Sets the right margin of both pads.
Bool_t fIsPadUpdating
Keeps track whether pads are updating during resizing.
virtual Int_t GetNbinsX() const
Option_t * GetDrawOption() const
Get option used by the graphics system to draw this object.
void SetWmin(Double_t wmin)
virtual Bool_t GetGridx() const =0
virtual void SyncAxesRanges()
virtual void SetPointError(Double_t ex, Double_t ey)
Set ex and ey values for point pointed by the mouse.
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
void SetTitleOffset(Float_t titleoffset=1)
Float_t GetTickSize() const
TGaxis * fLowerGYaxis
Lower graphical y axis.
TList * GetListOfFunctions() const
Double_t GetUymin() const
Returns the minimum y-coordinate value visible on the pad. If log axis the returned value is in decad...
Float_t GetRightMargin() const
void Modified(Bool_t flag=1)
TPad * fTopPad
The Pad that drawn on top on the others to have consistent coordinates.
virtual void Browse(TBrowser *b)
Browse.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
virtual Style_t GetLabelFont() const
void SetLowTopMargin(Float_t margin)
Sets the top margin of the lower pad.
virtual void SetNdivisions(Int_t ndiv)
virtual Double_t GetBinError(Int_t bin) const
Return value of error associated to bin number bin.
void ChangeLabel(Int_t labNum=0, Double_t labAngle=-1., Double_t labSize=-1., Int_t labAlign=-1, Int_t labColor=-1, Int_t labFont=-1, TString labText="")
virtual void SetLeftMargin(Float_t leftmargin)
Set Pad left margin in fraction of the pad width.
const char * Data() const
virtual void SetLogy(Int_t value=1)
Set Lin/Log scale for Y.