BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnClusteringQaReport.cxx
Go to the documentation of this file.
1/**
2 * \file BmnClusteringQaReport.h
3 * \brief Simulation report for clustering QA.
4 * \author Andrey Lebedev <andrey.lebedev@gsi.de>
5 * \date 2011
6 */
8
9#include "BmnDrawHist.h"
10#include "BmnGemStripStation.h"
11#include "BmnGemStripStationSet_RunSpring2017.h"
12#include "BmnHistManager.h"
13#include "BmnReportElement.h"
14#include "BmnUtils.h"
15#include "TCanvas.h"
16#include "TF1.h"
17#include "TH1.h"
18#include "TPaveStats.h"
19#include "TProfile.h"
20
21#include <vector>
22using namespace std;
25using lit::Split;
26
27// string DefaultHitEfficiencyLabelFormatter(const string& histName, const BmnHistManager* hm) {
28// Double_t efficiency = (histName.find("_Eff_") != string::npos) ?
29// BmnClusteringQaReport::CalcEfficiency(hm->H1(FindAndReplace(histName, "_Eff_", "_Rec_")),
30// hm->H1(FindAndReplace(histName, "_Eff_", "_Acc_")), 100.) :
31// BmnClusteringQaReport::CalcEfficiency(hm->H1(FindAndReplace(histName, "_CloneProb_", "_Clone_")),
32// hm->H1(FindAndReplace(histName, "_CloneProb_", "_Acc_")), 100.);
33// vector<string> split = Split(histName, '_');
34// return split[1] + ":" + split[3] + "(" + NumberToString<Double_t > (efficiency, 1) + ")";
35// }
36//
37// string DefaultAccAndRecLabelFormatter(const string& histName, const BmnHistManager* hm) {
38// Int_t nofEvents = hm->H1("_hen_EventNo_ClusteringQa")->GetEntries();
39// vector<string> split = Split(histName, '_');
40// return split[3] + " (" + NumberToString<Double_t > (hm->H1(histName)->GetEntries() / nofEvents, 1) + ")";
41// }
42
45 , fGemDetector(NULL)
46 , nStationsGEM(nOfStationsGEM)
47 , nStationsSil(nOfStationsSil)
48{
49 SetReportName("clustering_qa");
50}
51
53
55{
56 Out().precision(3);
57 Out() << R()->DocumentBegin();
58 Out() << R()->Title(0, GetTitle());
59 Out() << PrintEventInfo();
61 Out() << R()->DocumentEnd();
62}
63
65{
66 Out() << "<h2>Event generator: QGSM</h2>" << endl;
67 Out() << "<h2>Energy: 4 GeV/n</h2>" << endl;
68 if (GetOnlyPrimes())
69 Out() << "<h2>Results only for primaries presented</h2>" << endl;
70 Out() << "<h2>Number of events: " << HM()->H1("hen_EventNo_ClusteringQa")->GetEntries() << "</h2>" << endl;
71 Out() << "<h2>Mean multiplicity: " << HM()->H1("Multiplicity")->GetMean() << "</h2>" << endl;
72 return "<hr>";
73}
74
75void BmnClusteringQaReport::DrawEventsInfo(const string& canvasName)
76{
77 TCanvas* canvas = CreateCanvas(canvasName.c_str(), canvasName.c_str(), 1500, 500);
78 canvas->SetGrid();
79 canvas->Divide(3, 1);
80 canvas->cd(1);
81 DrawH1(HM()->H1("Impact parameter"), kLinear, kLinear, "", kRed, 2, 1, 1.1, 20, 33);
82 canvas->cd(2);
83 DrawH1(HM()->H1("Multiplicity"), kLinear, kLinear, "", kRed, 2, 1, 1.1, 20, 33);
84 canvas->cd(3);
85 DrawH2(HM()->H2("Impact_Mult"), kLinear, kLinear, kLinear, "colz");
86}
87
88void BmnClusteringQaReport::DrawResXbyStation(const string& canvasName)
89{
90 TCanvas* canvas =
91 CreateCanvas(canvasName.c_str(), canvasName.c_str(), 1600, 300 * ((nStationsGEM + nStationsSil) / 4 + 1));
92 canvas->Divide(4, ((nStationsGEM + nStationsSil) / 4 + 1));
93 canvas->SetGrid();
94 for (Int_t i = 0; i < nStationsGEM; ++i) {
95 canvas->cd(i + 1);
96 TString resXname = Form("ResX_%dst_gem", i);
97 DrawH1(HM()->H1(resXname.Data()), kLinear, kLog);
98 }
99 for (Int_t i = 0; i < nStationsSil; ++i) {
100 canvas->cd(i + 1 + nStationsGEM);
101 TString resXname = Form("ResX_%dst_sil", i);
102 DrawH1(HM()->H1(resXname.Data()), kLinear, kLog);
103 }
104}
105
106void BmnClusteringQaReport::DrawResYbyStation(const string& canvasName)
107{
108 TCanvas* canvas =
109 CreateCanvas(canvasName.c_str(), canvasName.c_str(), 1600, 300 * ((nStationsGEM + nStationsSil) / 4 + 1));
110 canvas->Divide(4, ((nStationsGEM + nStationsSil) / 4) + 1);
111 canvas->SetGrid();
112 for (Int_t i = 0; i < nStationsGEM; ++i) {
113 canvas->cd(i + 1);
114 TString resYname = Form("ResY_%dst_gem", i);
115 DrawH1(HM()->H1(resYname.Data()), kLinear, kLog);
116 }
117 for (Int_t i = 0; i < nStationsSil; ++i) {
118 canvas->cd(i + 1 + nStationsGEM);
119 TString resYname = Form("ResY_%dst_sil", i);
120 DrawH1(HM()->H1(resYname.Data()), kLinear, kLog);
121 }
122}
123
125{
126 TCanvas* canvas =
127 CreateCanvas(canvasName.c_str(), canvasName.c_str(), 1600, 300 * ((nStationsGEM + nStationsSil) / 4 + 1));
128 canvas->Divide(4, (nStationsGEM / 4 + 1 + nStationsSil / 4));
129 canvas->SetGrid();
130 for (Int_t i = 0; i < nStationsGEM; ++i) {
131 canvas->cd(i + 1);
132 TString pntXhitXname = Form("PntX_vs_HitX_%dst_gem", i);
133 DrawH2(HM()->H2(pntXhitXname.Data()), kLinear, kLinear, kLinear, "colz");
134 }
135 for (Int_t i = 0; i < nStationsSil; ++i) {
136 canvas->cd(i + 1 + nStationsGEM);
137 TString pntXhitXname = Form("PntX_vs_HitX_%dst_sil", i);
138 DrawH2(HM()->H2(pntXhitXname.Data()), kLinear, kLinear, kLinear, "colz");
139 }
140}
141
143{
144 TCanvas* canvas =
145 CreateCanvas(canvasName.c_str(), canvasName.c_str(), 1600, 300 * ((nStationsGEM + nStationsSil) / 4 + 1));
146 canvas->Divide(4, ((nStationsGEM + nStationsSil) / 4 + 1));
147 canvas->SetGrid();
148 for (Int_t i = 0; i < nStationsGEM; ++i) {
149 canvas->cd(i + 1);
150 TString pntYhitYname = Form("PntY_vs_HitY_%dst_gem", i);
151 DrawH2(HM()->H2(pntYhitYname.Data()), kLinear, kLinear, kLinear, "colz");
152 }
153 for (Int_t i = 0; i < nStationsSil; ++i) {
154 canvas->cd(i + 1 + nStationsGEM);
155 TString pntYhitYname = Form("PntY_vs_HitY_%dst_sil", i);
156 DrawH2(HM()->H2(pntYhitYname.Data()), kLinear, kLinear, kLinear, "colz");
157 }
158}
159
161{
162 TCanvas* canvas =
163 CreateCanvas(canvasName.c_str(), canvasName.c_str(), 1600, 300 * ((nStationsGEM + nStationsSil) / 4 + 1));
164 canvas->Divide(4, ((nStationsGEM + nStationsSil) / 4 + 1));
165 canvas->SetGrid();
166 const Int_t nofEvents = HM()->H1("hen_EventNo_ClusteringQa")->GetEntries();
167 const Float_t xWidth = HM()->H2("Occupancy_0st_gem")->GetXaxis()->GetBinWidth(1);
168 const Float_t yWidth = HM()->H2("Occupancy_0st_gem")->GetYaxis()->GetBinWidth(1);
169 const Float_t square = xWidth * yWidth; // cm^2
170
171 for (Int_t i = 0; i < nStationsGEM; ++i) {
172 canvas->cd(i + 1);
173 TString occupname = Form("Occupancy_%dst_gem", i);
174 HM()->H2(occupname.Data())->Sumw2();
175 HM()->H2(occupname.Data())->Scale(1. / nofEvents / square);
176 DrawH2(HM()->H2(occupname.Data()), kLinear, kLinear, kLinear, "colz");
177 }
178
179 for (Int_t i = 0; i < nStationsSil; ++i) {
180 canvas->cd(i + 1 + nStationsGEM);
181 TString occupname = Form("Occupancy_%dst_sil", i);
182 HM()->H2(occupname.Data())->Sumw2();
183 HM()->H2(occupname.Data())->Scale(1. / nofEvents / square);
184 DrawH2(HM()->H2(occupname.Data()), kLinear, kLinear, kLinear, "colz");
185 }
186}
187
188void BmnClusteringQaReport::DrawPullXbyStation(const string& canvasName)
189{
190 TCanvas* canvas =
191 CreateCanvas(canvasName.c_str(), canvasName.c_str(), 1600, 300 * ((nStationsGEM + nStationsSil) / 4 + 1));
192 canvas->Divide(4, ((nStationsGEM + nStationsSil) / 4 + 1));
193 canvas->SetGrid();
194 for (Int_t i = 0; i < nStationsGEM; ++i) {
195 canvas->cd(i + 1);
196 TString pullXname = Form("PullX_%dst_gem", i);
197 DrawH1(HM()->H1(pullXname.Data()), kLinear, kLinear, "", kBlue);
198
199 HM()->H1(pullXname)->Fit("gaus", "RRQW", "", -5, 5);
200 TF1* fit = HM()->H1(pullXname)->GetFunction("gaus");
201
202 Float_t xMax = HM()->H1(pullXname)->GetXaxis()->GetXmax();
203 Float_t yMax = HM()->H1(pullXname)->GetMaximum();
204 TPaveStats* ps = new TPaveStats(xMax / 1.5, yMax / 5, xMax, yMax);
205 ps->SetFillColor(0);
206 ps->SetShadowColor(0);
207 ps->AddText(Form("#mu = %2.2f", fit->GetParameter(1)));
208 ps->AddText(Form("#sigma = %2.2f", fit->GetParameter(2)));
209 ps->Draw();
210 }
211
212 for (Int_t i = 0; i < nStationsSil; ++i) {
213 canvas->cd(i + 1 + nStationsGEM);
214 TString pullXname = Form("PullX_%dst_sil", i);
215 DrawH1(HM()->H1(pullXname.Data()), kLinear, kLinear, "", kBlue);
216
217 HM()->H1(pullXname)->Fit("gaus", "RRQW", "", -5, 5);
218 TF1* fit = HM()->H1(pullXname)->GetFunction("gaus");
219
220 Float_t xMax = HM()->H1(pullXname)->GetXaxis()->GetXmax();
221 Float_t yMax = HM()->H1(pullXname)->GetMaximum();
222 TPaveStats* ps = new TPaveStats(xMax / 1.5, yMax / 5, xMax, yMax);
223 ps->SetFillColor(0);
224 ps->SetShadowColor(0);
225 ps->AddText(Form("#mu = %2.2f", fit->GetParameter(1)));
226 ps->AddText(Form("#sigma = %2.2f", fit->GetParameter(2)));
227 ps->Draw();
228 }
229}
230
231void BmnClusteringQaReport::DrawPullYbyStation(const string& canvasName)
232{
233 TCanvas* canvas =
234 CreateCanvas(canvasName.c_str(), canvasName.c_str(), 1600, 300 * ((nStationsGEM + nStationsSil) / 4 + 1));
235 canvas->Divide(4, ((nStationsGEM + nStationsSil) / 4 + 1));
236 canvas->SetGrid();
237 for (Int_t i = 0; i < nStationsGEM; ++i) {
238 canvas->cd(i + 1);
239 TString pullYname = Form("PullY_%dst_gem", i);
240 DrawH1(HM()->H1(pullYname.Data()), kLinear, kLinear, "", kBlue);
241
242 HM()->H1(pullYname)->Fit("gaus", "RRQW", "", -5, 5);
243 TF1* fit = HM()->H1(pullYname)->GetFunction("gaus");
244
245 Float_t xMax = HM()->H1(pullYname)->GetXaxis()->GetXmax();
246 Float_t yMax = HM()->H1(pullYname)->GetMaximum();
247 TPaveStats* ps = new TPaveStats(xMax / 1.5, yMax / 5, xMax, yMax);
248 ps->SetFillColor(0);
249 ps->SetShadowColor(0);
250 ps->AddText(Form("#mu = %2.2f", fit->GetParameter(1)));
251 ps->AddText(Form("#sigma = %2.2f", fit->GetParameter(2)));
252 ps->Draw();
253 }
254
255 for (Int_t i = 0; i < nStationsSil; ++i) {
256 canvas->cd(i + 1 + nStationsGEM);
257 TString pullYname = Form("PullY_%dst_sil", i);
258 DrawH1(HM()->H1(pullYname.Data()), kLinear, kLinear, "", kBlue);
259
260 HM()->H1(pullYname)->Fit("gaus", "RRQW", "", -5, 5);
261 TF1* fit = HM()->H1(pullYname)->GetFunction("gaus");
262
263 Float_t xMax = HM()->H1(pullYname)->GetXaxis()->GetXmax();
264 Float_t yMax = HM()->H1(pullYname)->GetMaximum();
265 TPaveStats* ps = new TPaveStats(xMax / 1.5, yMax / 5, xMax, yMax);
266 ps->SetFillColor(0);
267 ps->SetShadowColor(0);
268 ps->AddText(Form("#mu = %2.2f", fit->GetParameter(1)));
269 ps->AddText(Form("#sigma = %2.2f", fit->GetParameter(2)));
270 ps->Draw();
271 }
272}
273
275{
276 // vector<TH1*> histos = HM()->H1Vector("_hno_NofObjects_.+_Event");
277 // Int_t nofHistos = histos.size();
278 // string str = R()->TableBegin("Average number of objects per event", list_of("Name")("Value"));
279 // for (Int_t iHist = 0; iHist < nofHistos; iHist++) {
280 // string cellName = Split(histos[iHist]->GetName(), '_')[3];
281 // str += R()->TableRow(list_of(cellName)(NumberToString<Int_t > (histos[iHist]->GetMean())));
282 // }
283 // str += R()->TableEnd();
284 // return str;
285 return "NOT IMPLEMENTED!";
286}
287
289{
290
291 DrawEventsInfo("Distribution of impact parameter and multiplicity");
292 CalculateEfficiencyHistos("Acc", "Rec", "Eff");
293 CalculateEfficiencyHistos("Acc", "Clone", "CloneProb");
294
295 DrawOccupancyByStation("Occupancy for each station");
296 DrawResXbyStation("X-residuals for each station");
297 DrawResYbyStation("Y-residuals for each station");
298 DrawPullXbyStation("X-pulls for each station");
299 DrawPullYbyStation("Y-pulls for each station");
300 DrawSimXRecXbyStation("Reconstructed X vs. Simulated X for each station");
301 DrawSimYRecYbyStation("Reconstructed Y vs. Simulated Y for each station");
302
303 DrawNofObjectsHistograms("Gem", "Event");
304 // DrawNofObjectsHistograms("Tof1", "Event");
305 // DrawNofObjectsHistograms("Dch1", "Event");
306 // DrawNofObjectsHistograms("Dch2", "Event");
307 // DrawNofObjectsHistograms("Tof2", "Event");
308
309 DrawNofObjectsHistograms("Gem", "Station");
310
311 // DrawH1ByPattern("hpa_.*Cluster_NofDigisInCluster_H1");
312 // DrawH2ByPattern("hpa_.*Cluster_NofDigisInCluster_H2", kLinear, kLinear, kLinear, "colz");
313
314 // DrawH1ByPattern("hpa_.*(Digi|Cluster|Hit)_NofPointsIn(Digi|Cluster|Hit)_H1");
315 // DrawH2ByPattern("hpa_.*(Digi|Cluster|Hit)_NofPointsIn(Digi|Cluster|Hit)_H2", kLinear, kLinear, kLinear,
316 // "colz");
317
318 // DrawH1ByPattern("_hpa_.*Hit_Sigma.*_H1");
319 // DrawH2ByPattern("_hpa_.*Hit_Sigma.*_H2", kLinear, kLinear, kLinear, "colz");
320
322 // DrawResidualsAndPulls("Tof1");
323 // DrawResidualsAndPulls("Dch1");
324 // DrawResidualsAndPulls("Dch2");
325 // DrawResidualsAndPulls("Tof2");
326
327 // DrawH1ByPattern("_hhe_Gem_All_(Eff|CloneProb)_Station", DefaultHitEfficiencyLabelFormatter);
328 // DrawH1ByPattern("_hhe_Tof1_All_(Eff|CloneProb)_Station", DefaultHitEfficiencyLabelFormatter);
329 // DrawH1ByPattern("_hhe_Dch1_All_(Eff|CloneProb)_Station", DefaultHitEfficiencyLabelFormatter);
330 // DrawH1ByPattern("_hhe_Dch2_All_(Eff|CloneProb)_Station", DefaultHitEfficiencyLabelFormatter);
331 // DrawH1ByPattern("_hhe_Tof2_All_(Eff|CloneProb)_Station", DefaultHitEfficiencyLabelFormatter);
332}
333
334void BmnClusteringQaReport::DrawNofObjectsHistograms(const string& detName, const string& parameter)
335{
336 // if (!HM()->Exists("_hno_NofObjects_" + detName + "Points_" + parameter)) return;
337 // string canvasName = GetReportName() + "_NofObjects_" + detName + "_" + parameter;
338 // TCanvas* canvas = CreateCanvas(canvasName.c_str(), canvasName.c_str(), 800, 500);
339 // canvas->SetGrid();
340 // canvas->cd();
341 // vector<string> labels = list_of("Points")/*("Digis")("Clusters")*/("Hits");
342 // vector<TH1*> histos = list_of(HM()->H1("_hno_NofObjects_" + detName + "Points_" +
343 // parameter))(HM()->H1("_hno_NofObjects_" + detName + "Hits_" + parameter)); //(HM()->H1("hno_NofObjects_" +
344 // detName + "Digis_" + parameter))(HM()->H1("hno_NofObjects_" + detName + "Clusters_" + parameter));
345 // // if (HM()->Exists("hno_NofObjects_" + detName + "PixelHits_" + parameter))
346 // histos.push_back(HM()->H1("hno_NofObjects_" + detName + "PixelHits_" + parameter));
347 // // else if (HM()->Exists("hno_NofObjects_" + detName + "StrawHits_" + parameter))
348 // histos.push_back(HM()->H1("hno_NofObjects_" + detName + "StrawHits_" + parameter));
349 // // else if (HM()->Exists("hno_NofObjects_" + detName + "Hits_" + parameter))
350 // histos.push_back(HM()->H1("hno_NofObjects_" + detName + "Hits_" + parameter)); DrawH1(histos, labels, kLinear,
351 // kLinear, true, 0.65, 0.75, 0.95, 0.99, "PE1X0", kFALSE);
352}
353
355{
356 // if (!(HM()->Exists("_hrp_" + detName + "_ResidualX_H2") && HM()->Exists("_hrp_" + detName + "_ResidualY_H2")
357 // && HM()->Exists("_hrp_" + detName + "_PullX_H2") && HM()->Exists("_hrp_" + detName +
358 // "_ResidualX_H2"))) return;
359 // vector<string> par = list_of("ResidualX")("ResidualY")("PullX")("PullY");
360 // Int_t nofCanvases = par.size();
361 // for (Int_t iCanvas = 0; iCanvas < nofCanvases; iCanvas++) {
362 // string histName = "_hrp_" + detName + "_" + par[iCanvas] + "_H2";
363 // TH2* hist = HM()->H2(histName);
364 // string canvasName = GetReportName() + "_" + histName + "_station";
365 // TCanvas* canvas = CreateCanvas(canvasName.c_str(), canvasName.c_str(), 1600, 900);
366 //
367 // Int_t nofBins, nofColumns, nofRows;
368 // if (detName == "Gem") {
369 // nofBins = 12;
370 // nofColumns = 4;
371 // nofRows = (nofBins / nofColumns) + ((nofBins % 4 == 0) ? 0 : 1);
372 // canvas->Divide(nofColumns, nofRows);
373 // } else {
374 // nofBins = 1;
375 // }
376 // for (Int_t iBin = 1; iBin <= nofBins; iBin++) {
377 // stringstream ss;
378 // ss << histName << "_" << iBin << "_py";
379 // TH1* projY = hist->ProjectionY(ss.str().c_str(), iBin, iBin);
380 // projY->SetNameTitle(ss.str().c_str(), ss.str().c_str());
381 // projY->SetXTitle(par[iCanvas].c_str());
382 // projY->SetYTitle("Yield");
383 // canvas->cd(iBin);
384 // DrawH1(projY, kLinear, kLinear);
385 // projY->Fit("gaus", "SQ");
386 // }
387 // }
388 // DrawH2ByPattern("_hrp_" + detName + "_.*_H2", kLinear, kLinear, kLinear, "colz");
389}
390
391Double_t BmnClusteringQaReport::CalcEfficiency(const TH1* histRec, const TH1* histAcc, Double_t scale)
392{
393 if (histAcc->Integral() == 0 || histRec->Integral() == 0) {
394 return 0.;
395 } else {
396 return scale * Double_t(histRec->Integral()) / Double_t(histAcc->Integral());
397 }
398}
399
401
402void BmnClusteringQaReport::DivideHistos(TH1* histo1, TH1* histo2, TH1* histo3, Double_t scale)
403{
404 histo1->Sumw2();
405 histo2->Sumw2();
406 histo3->Sumw2();
407 histo3->Divide(histo1, histo2, 1., 1., "B");
408 histo3->Scale(scale);
409}
410
411void BmnClusteringQaReport::CalculateEfficiencyHistos(const string& acc, const string& rec, const string& eff) {}
int i
Definition P4_F32vec4.h:22
Simulation report for clustering QA.
int Int_t
float Float_t
double Double_t
kRed
kBlue
char * Form(const char *fmt,...)
virtual void Create()
Inherited from CbmSimulationReport.
BmnGemStripStationSet * fGemDetector
void DrawPullYbyStation(const string &canvasName)
void DrawResYbyStation(const string &canvasName)
void DivideHistos(TH1 *histo1, TH1 *histo2, TH1 *histo3, Double_t scale)
static Double_t CalcEfficiency(const TH1 *histRec, const TH1 *histAcc, Double_t scale)
void DrawSimXRecXbyStation(const string &canvasName)
void DrawEventsInfo(const string &canvasName)
void DrawOccupancyByStation(const string &canvasName)
void DrawResidualsAndPulls(const string &detName)
void DrawSimYRecYbyStation(const string &canvasName)
void DrawResXbyStation(const string &canvasName)
void DrawPullXbyStation(const string &canvasName)
void DrawNofObjectsHistograms(const string &detName, const string &parameter)
BmnClusteringQaReport(Int_t nOfStationsGEM, Int_t nOfStationsSil)
Constructor.
virtual ~BmnClusteringQaReport()
Destructor.
string PrintNofObjects() const
Print number of objects table.
void CalculateEfficiencyHistos(const string &acc, const string &rec, const string &eff)
virtual void Draw()
Inherited from CbmSimulationReport.
TH2 * H2(const TString &name) const
Return pointer to TH2 histogram.
TH1 * H1(const TString &name) const
Return pointer to TH1 histogram.
virtual string Title(int size, const string &title) const =0
Return string with title.
virtual string DocumentBegin() const =0
Return string with open tags for document.
virtual string DocumentEnd() const =0
Return string with close tags of the document.
void SetReportName(TString name)
Definition BmnReport.h:56
void PrintCanvases() const
Print images created from canvases in the report.
const BmnReportElement * R() const
Accessor to BmnReportElement object.
Definition BmnReport.h:45
TCanvas * CreateCanvas(const char *name, const char *title, Int_t ww, Int_t wh)
Create canvas and put it to vector of TCanvases.
Definition BmnReport.cxx:75
ostream & Out() const
All text output goes to this stream.
Definition BmnReport.h:50
BmnHistManager * HM() const
Return pointer to Histogram manager.
BmnSimulationReport()
Constructor.
virtual void SetFillColor(Color_t fcolor)
Double_t GetXmax() const
virtual Double_t GetBinWidth(Int_t bin) const
TVirtualPad * cd(Int_t subpadnumber=0) override
virtual Double_t GetParameter(const TString &name) const
virtual Double_t GetMean(Int_t axis=1) const
TAxis * GetXaxis()
virtual TFitResultPtr Fit(const char *formula, Option_t *option="", Option_t *goption="", Double_t xmin=0, Double_t xmax=0)
virtual Double_t GetMaximum(Double_t maxval=FLT_MAX) const
TAxis * GetYaxis()
virtual Double_t GetEntries() const
virtual TF1 * GetFunction(const char *name) const
virtual Double_t Integral(Int_t binx1, Int_t binx2, Option_t *option="") const
virtual Bool_t Divide(const TH1 *h1)
virtual void Scale(Double_t c1=1, Option_t *option="")
virtual void Sumw2(Bool_t flag=kTRUE)
virtual const char * GetTitle() const
void SetGrid(Int_t valuex=1, Int_t valuey=1) override
void Divide(Int_t nx=1, Int_t ny=1, Float_t xmargin=0.01, Float_t ymargin=0.01, Int_t color=0) override
virtual TText * AddText(const char *label)
void Draw(Option_t *option="") override
virtual void SetShadowColor(Int_t color)
const char * Data() const
void DrawH2(TH2 *hist, HistScale logx=kLinear, HistScale logy=kLinear, HistScale logz=kLinear, const string &drawOpt="COLZ")
void DrawH1(TH1 *hist, HistScale logx=kLinear, HistScale logy=kLinear, const string &drawOpt="", Int_t color=BmnDrawingOptions::Color(0), Int_t lineWidth=BmnDrawingOptions::LineWidth(), Int_t lineStyle=BmnDrawingOptions::LineStyle(0), Float_t markerSize=BmnDrawingOptions::MarkerSize(), Int_t markerStyle=BmnDrawingOptions::MarkerStyle(0), Int_t fillColor=-1)
@ kLinear
Definition BmnDrawHist.h:66
@ kLog
Definition BmnDrawHist.h:65
string FindAndReplace(const string &name, const string &oldSubstr, const string &newSubstr)
Definition BmnUtils.cxx:19
vector< string > Split(const string &name, char delimiter)
Definition BmnUtils.cxx:27
string NumberToString(const T &value, int precision=1)
Definition BmnUtils.h:26
Definition json.hpp:4446