1 #ifndef CROMBIETOOLS_PLOTTOOLS_PLOTUTILS_H 2 #define CROMBIETOOLS_PLOTTOOLS_PLOTUTILS_H 13 #include "TGraphErrors.h" 40 TFile* uncHistFile =
new TFile(theUnc->
fFileName);
41 TH1* uncHist = (TH1*) uncHistFile->Get(theUnc->
fHistName);
44 for (Int_t iBin = 1; iBin != theHist->GetXaxis()->GetNbins(); ++iBin) {
45 theHist->SetBinError(iBin,
46 TMath::Sqrt(pow(theHist->GetBinError(iBin),2) +
47 pow(theHist->GetBinContent(iBin) *
48 (uncHist->GetBinContent(UncBin) - 1), 2)
62 for (Int_t iParam = 0; iParam != theFunc->GetNpar(); ++iParam)
63 theFunc->SetParError(iParam, 0);
71 for (Int_t iBin = 0; iBin != theHist->GetXaxis()->GetNbins(); ++iBin)
72 theHist->SetBinError(iBin + 1, 0);
80 for (Int_t iPoint = 0; iPoint != theGraph->GetN(); ++iPoint)
81 theGraph->SetPointError(iPoint,0,0);
95 TString plotString = TString(
"(") + PlotFunc->GetExpFormula() + TString(
")");
96 TString ratString = TString(
"(") + RatioFunc->GetExpFormula().ReplaceAll(TString(
"[p"),TString(
"[q")) + TString(
")");
97 TF1 *tempFunc =
new TF1(
"divided",plotString + TString(
"/") + ratString);
98 for (Int_t iParam = 0; iParam != PlotFunc->GetNpar() + RatioFunc->GetNpar(); ++iParam) {
99 if (iParam < PlotFunc->GetNpar()) {
100 tempFunc->SetParameter(iParam, PlotFunc->GetParameter(iParam));
101 tempFunc->SetParError(iParam, PlotFunc->GetParError(iParam));
104 tempFunc->SetParameter(iParam, RatioFunc->GetParameter(iParam - PlotFunc->GetNpar()));
105 tempFunc->SetParError(iParam, RatioFunc->GetParError(iParam - PlotFunc->GetNpar()));
123 PlotGraph->SetPointError(iPoint,0,
124 sqrt(pow(PlotGraph->GetEY()[iPoint]/RatioGraph->GetY()[iPoint],2) +
125 pow((PlotGraph->GetY()[iPoint])*(RatioGraph->GetEY()[iPoint])/
126 pow(RatioGraph->GetY()[iPoint],2),2)));
134 Int_t NumPoints = RatioGraph->GetN();
135 Double_t RangeMin = 1000.;
136 Double_t RangeMax = 0.;
137 for (Int_t iPoint = 0; iPoint != NumPoints; ++iPoint) {
138 Double_t point = PlotGraph->GetY()[iPoint]/RatioGraph->GetY()[iPoint];
139 PlotGraph->SetPoint(iPoint,PlotGraph->GetX()[iPoint],point);
141 if (point < RangeMin)
143 if (point > RangeMax)
146 PlotGraph->GetYaxis()->SetRangeUser(RangeMin,RangeMax);
154 PlotHist->Divide(RatioHist);
155 for (Int_t iBin = 1; iBin != RatioHist->GetXaxis()->GetNbins() + 1; ++iBin) {
156 if (PlotHist->GetBinContent(iBin) == 0 && RatioHist->GetBinContent(iBin) == 0)
157 PlotHist->SetBinContent(iBin,1);
168 std::vector<T*> outLines;
169 for (UInt_t iLine = 0; iLine != InLines.size(); ++iLine) {
170 tempLine = (T*) InLines[iLine]->Clone();
171 Division(tempLine,RatioLines[iLine]);
172 outLines.push_back(tempLine);
183 std::vector<T*> tempRatioLines;
184 for (UInt_t iLine = 0; iLine != InLines.size(); ++iLine)
185 tempRatioLines.push_back(RatioGraph);
191 std::vector<TGraphErrors*>
192 GetRatioToPoint(std::vector<TGraphErrors*> InGraphs, Double_t RatioPoint, Double_t PointError = 0)
194 Int_t NumPoints = InGraphs[0]->GetN();
195 Double_t* GraphX = InGraphs[0]->GetX();
196 TGraphErrors tempRatioGraph(NumPoints);
197 for (Int_t iPoint = 0; iPoint != NumPoints; ++iPoint) {
198 tempRatioGraph.SetPoint(iPoint,GraphX[iPoint],RatioPoint);
199 tempRatioGraph.SetPointError(iPoint,0,PointError);
207 GetRatioToPoint(std::vector<TH1D*> InHists, Double_t RatioPoint, Double_t PointError = 0)
209 TH1D tempRatioHist = *(InHists[0]);
210 tempRatioHist.Reset();
211 for (Int_t iBin = 0; iBin != tempRatioHist.GetXaxis()->GetNbins(); iBin++) {
212 tempRatioHist.SetBinContent(iBin + 1,RatioPoint);
213 tempRatioHist.SetBinError(iBin + 1,PointError);
221 GetRatioToPoint(std::vector<TF1*> InFuncs, Double_t RatioPoint, Double_t PointError = 0)
223 TF1 tempRatioFunc(
"ratio",
"[0]");
224 tempRatioFunc.SetParameter(0,RatioPoint);
225 tempRatioFunc.SetParError(0,PointError);
239 Double_t fAxisMin, Double_t fAxisMax, TString XLabel, TString YLabel)
243 double YMin = std::numeric_limits<double>::max();
244 double YMax = std::numeric_limits<double>::min();
245 double XMin = std::numeric_limits<double>::max();
246 double XMax = std::numeric_limits<double>::min();
248 for (std::vector<TGraphErrors*>::iterator iLine = theLines.begin(); iLine != theLines.end(); ++iLine ) {
250 double ymin_, ymax_, xmin_, xmax_;
252 (*iLine)->ComputeRange(xmin_, ymin_, xmax_, ymax_);
255 xmin_, xmax_, ymin_, ymax_);
257 XMin = std::min(XMin, xmin_);
258 XMax = std::max(XMax, xmax_);
259 YMin = std::min(YMin, ymin_);
260 YMax = std::max(YMax, ymax_);
263 XMin, XMax, YMin, YMax);
267 if (fAxisMin != fAxisMax) {
272 theCanvas->DrawFrame(XMin, YMin, XMax, YMax,
";" + XLabel +
";" + YLabel);
277 for (
auto branch : *(tree->GetListOfBranches())) {
278 auto name =
branch->GetName();
279 if (needed.find(name) == needed.end() && expr.Contains(name))