BmnRoot
Loading...
Searching...
No Matches
BmnPidQaReport.cxx
Go to the documentation of this file.
1
7#include "BmnPidQaReport.h"
8#include <fstream>
9#include <set>
10#include <vector>
11#include "BmnPidQa.h"
12#include "BmnUtils.h"
13#include "TCanvas.h"
14#include "TF1.h"
15#include "TGaxis.h"
16#include "TH1.h"
17#include "TLatex.h"
18#include "TLine.h"
19#include "TPaveStats.h"
20#include "TString.h"
21#include "TStyle.h"
22#include "map"
23#include "BmnDrawHist.h"
24#include "BmnDrawOnline.h"
25#include "BmnHistManager.h"
26#include "BmnReportElement.h"
27
28const Float_t pMax = 5.0;
29
30using namespace std;
31using namespace lit;
32
35 fGlobalTrackVariants()
36{
37 SetReportName("pid_qa");
38}
39
40BmnPidQaReport::BmnPidQaReport(TString name, TString storageName, unordered_map<Double_t,string> massTable)
42 fGlobalTrackVariants(),
43 fMassTable(massTable),
44 fPrefix(name + ": "),
45 fStorageName(storageName),
46 effTof400(nullptr),
47 contTof400(nullptr),
48 effTof700(nullptr),
49 contTof700(nullptr),
50 effHitsTof400(nullptr),
51 contHitsTof400(nullptr),
52 effHitsTof700(nullptr),
53 contHitsTof700(nullptr)
54{
55 SetReportName(name);
56}
57
60
62 Out().precision(3);
63 Out() << R()->DocumentBegin();
64 Out() << R()->Title(0, GetTitle());
65 Out() << "<hr>" << endl;
67 Out() << R()->DocumentEnd();
68}
69
70
73 drawHist = new BmnDrawOnline("RECREATE", fStorageName);
74
75
76 DrawTwoBananas(fPrefix + "Banana-plots",
77 "Banana-plot TOF-400","Banana-plot TOF-700");
78
79 drawHist->DrawMainCanvas("pid");
80
81 for (auto iter = fMassTable.begin(); iter != fMassTable.end(); ++iter){
82
83 string nameOfParticle = (*iter).second;
84
85 DrawThreeH1(fPrefix + "Total identified particles TOF-400 for " + nameOfParticle,
86 "TOF-400 total_vs_P for " + nameOfParticle,
87 "TOF-400 true_vs_P for " + nameOfParticle,
88 "TOF-400 false_vs_P for " + nameOfParticle);
89
90 DrawThreeH1(fPrefix + "Total identified particles TOF-700 for " + nameOfParticle,
91 "TOF-700 total_vs_P for " + nameOfParticle,
92 "TOF-700 true_vs_P for " + nameOfParticle,
93 "TOF-700 false_vs_P for " + nameOfParticle);
94
95
96 DrawThreeH2(fPrefix + "Total-True-False identified particles TOF-400 in P_Beta for " + nameOfParticle,
97 "TOF-400 total rigidity-momentum for " + nameOfParticle,
98 "TOF-400 true rigidity-momentum for " + nameOfParticle,
99 "TOF-400 false rigidity-momentum for " + nameOfParticle);
100
101 /* DrawTwoH2(fPrefix + "Undivided in time TOF400 for " + nameOfParticle,
102 "Undivided TOF-400 rigidity-momentum for " + nameOfParticle,
103 "Undivided TOF-400 time from P for " + nameOfParticle);*/
104
105 DrawThreeH2(fPrefix + "Total-True-False identified particles TOF-700 in P_Beta for " + nameOfParticle,
106 "TOF-700 total rigidity-momentum for " + nameOfParticle,
107 "TOF-700 true rigidity-momentum for " + nameOfParticle,
108 "TOF-700 false rigidity-momentum for " + nameOfParticle);
109
110 /*DrawTwoH2(fPrefix + "Undivided in time TOF700 for " + nameOfParticle,
111 "Undivided TOF-700 rigidity-momentum for " + nameOfParticle,
112 "Undivided TOF-700 time from P for " + nameOfParticle);*/
113
114 //Efficiency TOF-400
115
116 effTof400 = new TEfficiency(*(HM()->H1("TOF-400 true_vs_P for " + nameOfParticle)),
117 *(HM()->H1("TOF-400 total_vs_P for " + nameOfParticle)));
118
119 //Contamination TOF-400
120 HM()->H1("TOF-400 true-false_vs_P for " + nameOfParticle)-> Add(HM()->H1("TOF-400 true_vs_P for " + nameOfParticle),
121 HM()->H1("TOF-400 false_vs_P for " + nameOfParticle));
122
123 contTof400 = new TEfficiency(*(HM()->H1("TOF-400 false_vs_P for " + nameOfParticle)), *(HM()->H1("TOF-400 true-false_vs_P for " + nameOfParticle)));
124
125 // Efficiency Nhits TOF-400
126
127 effHitsTof400 = new TEfficiency(*(HM()->H1("TOF-400 true_vs_NOfHits for " + nameOfParticle)),
128 *(HM()->H1("TOF-400 total_vs_NOfHits for " + nameOfParticle)));
129
130 // Contamination Nhits TOF-400
131 HM()->H1("TOF-400 true-false_vs_NOfHits for " + nameOfParticle)-> Add(HM()->H1("TOF-400 true_vs_NOfHits for " + nameOfParticle),
132 HM()->H1("TOF-400 false_vs_NOfHits for " + nameOfParticle));
133
134 contHitsTof400 = new TEfficiency(*(HM()->H1("TOF-400 false_vs_NOfHits for " + nameOfParticle)), *(HM()->H1("TOF-400 true-false_vs_NOfHits for " + nameOfParticle)));
135
136 //Efficiency TOF-700
137 effTof700 = new TEfficiency(*(HM()->H1("TOF-700 true_vs_P for " + nameOfParticle)),
138 *(HM()->H1("TOF-700 total_vs_P for " + nameOfParticle)));
139
140
141 //Contamination TOF-700
142 HM()->H1("TOF-700 true-false_vs_P for " + nameOfParticle)-> Add(HM()->H1("TOF-700 true_vs_P for " + nameOfParticle),
143 HM()->H1("TOF-700 false_vs_P for " + nameOfParticle));
144
145 contTof700 = new TEfficiency(*(HM()->H1("TOF-700 false_vs_P for " + nameOfParticle)), *(HM()->H1("TOF-700 true-false_vs_P for " + nameOfParticle)));
146
147 // Efficiency Nhits TOF-700
148 effHitsTof700 = new TEfficiency(*(HM()->H1("TOF-700 true_vs_NOfHits for " + nameOfParticle)),
149 *(HM()->H1("TOF-700 total_vs_NOfHits for " + nameOfParticle)));
150
151 // Contamination Nhits TOF-700
152 HM()->H1("TOF-700 true-false_vs_NOfHits for " + nameOfParticle)-> Add(HM()->H1("TOF-700 true_vs_NOfHits for " + nameOfParticle),
153 HM()->H1("TOF-700 false_vs_NOfHits for " + nameOfParticle));
154
155 contHitsTof700 = new TEfficiency(*(HM()->H1("TOF-700 false_vs_NOfHits for " + nameOfParticle)), *(HM()->H1("TOF-700 true-false_vs_NOfHits for " + nameOfParticle)));
156
157
158 DrawEffCont(fPrefix + "TOF-400 and TOF-700 Efficiency for " + nameOfParticle, effTof400, effTof700);
159 DrawEffCont(fPrefix + "TOF-400 and TOF-700 Contamination for " + nameOfParticle, contTof400, contTof700);
160 DrawEffCont(fPrefix + "TOF-400 and TOF-700 Efficiency NOfHits for " + nameOfParticle, effHitsTof400, effHitsTof700);
161 DrawEffCont(fPrefix + "TOF-400 and TOF-700 Contamination NOfHits for " + nameOfParticle, contHitsTof400, contHitsTof700);
162
163
164 //Velocity
165
166 DrawThreeH2(fPrefix + "Total-True-False velocity from P TOF-400 for " + nameOfParticle,
167 "Total velocity from P TOF-400 for " + nameOfParticle,
168 "True velocity from P TOF-400 for " + nameOfParticle, "False velocity from P TOF-400 for " + nameOfParticle);
169
170
171 DrawThreeH2(fPrefix + "Total-True-False velocity from P TOF-700 for " + nameOfParticle,
172 "Total velocity from P TOF-700 for " + nameOfParticle,
173 "True velocity from P TOF-700 for " + nameOfParticle, "False velocity from P TOF-700 for " + nameOfParticle);
174
175 //Time
176
177 DrawThreeH2(fPrefix + "Total-True-False time from P TOF-400 for " + nameOfParticle,
178 "Total time from P TOF-400 for " + nameOfParticle,
179 "True time from P TOF-400 for " + nameOfParticle, "False time from P TOF-400 for " + nameOfParticle);
180
181
182 DrawThreeH2(fPrefix + "Total-True-False time from P TOF-700 for " + nameOfParticle,
183 "Total time from P TOF-700 for " + nameOfParticle,
184 "True time from P TOF-700 for " + nameOfParticle, "False time from P TOF-700 for " + nameOfParticle);
185
186 //Mass^2
187
188 DrawThreeH2(fPrefix + "Total-True-False mass^2 from P TOF-400 for " + nameOfParticle,
189 "Total mass^2 from P TOF-400 for " + nameOfParticle,
190 "True mass^2 from P TOF-400 for " + nameOfParticle, "False mass^2 from P TOF-400 for " + nameOfParticle);
191
192
193
194
195
196 DrawThreeH2(fPrefix + "Total-True-False mass^2 from P TOF-700 for " + nameOfParticle,
197 "Total mass^2 from P TOF-700 for " + nameOfParticle,
198 "True mass^2 from P TOF-700 for " + nameOfParticle, "False mass^2 from P TOF-700 for " + nameOfParticle);
199
200
201 drawHist->DrawMainCanvas(nameOfParticle);
202
203 }
204
205}
206
207
208
209void BmnPidQaReport::DrawOneH1(const TString canvasName, const TString name1, const TString drawOpt) {
210 TCanvas* canvas = CreateCanvas(canvasName.Data(), canvasName.Data(), 500, 500);
211 canvas->SetGrid();
212 drawHist->DrawH1(canvas, HM()->H1(name1), kLinear, kLinear, drawOpt.Data(), kRed, 1, 0.75, 1.1, 20);
213}
214
215void BmnPidQaReport::DrawTwoH1(const TString canvasName, const TString name1, const TString name2, const TString drawOpt) {
216 TCanvas* canvas = CreateCanvas(canvasName.Data(), canvasName.Data(), 1000, 500);
217 canvas->SetGrid();
218 canvas->Divide(2, 1);
219 canvas->cd(1);
220 drawHist->DrawH1(canvas, HM()->H1(name1), kLinear, kLinear, drawOpt.Data(), kRed, 1, 0.75, 1.1, 20);
221 canvas->cd(2);
222 drawHist->DrawH1(canvas, HM()->H1(name2), kLinear, kLinear, drawOpt.Data(), kRed, 1, 0.75, 1.1, 20);
223}
224
225void BmnPidQaReport::DrawOneH2(const TString canvasName, const TString name1) {
226 TCanvas* canvas = CreateCanvas(canvasName.Data(), canvasName.Data(), 500, 500);
227 canvas->SetGrid();
228 drawHist->DrawH2(canvas, HM()->H2(name1), kLinear, kLinear, kLinear, "colz");
229}
230
231void BmnPidQaReport::DrawTwoH2(const TString canvasName, const TString name1, const TString name2) {
232 TCanvas* canvas = CreateCanvas(canvasName.Data(), canvasName.Data(), 1000, 500);
233 canvas->SetGrid();
234 canvas->Divide(2, 1);
235 canvas->cd(1);
236 drawHist->DrawH2(canvas, HM()->H2(name1), kLinear, kLinear, kLinear, "colz");
237 canvas->cd(2);
238 drawHist->DrawH2(canvas, HM()->H2(name2), kLinear, kLinear, kLinear, "colz");
239}
240
241void BmnPidQaReport::DrawThreeH2(const TString canvasName, const TString name1, const TString name2, const TString name3) {
242 TCanvas* canvas = CreateCanvas(canvasName.Data(), canvasName.Data(), 2100, 500);
243 canvas->SetGrid();
244 canvas->Divide(3, 1);
245 canvas->cd(1);
246 drawHist->DrawH2(canvas, HM()->H2(name1), kLinear, kLinear, kLinear, "colz");
247 canvas->cd(2);
248 drawHist->DrawH2(canvas, HM()->H2(name2), kLinear, kLinear, kLinear, "colz");
249 canvas->cd(3);
250 drawHist->DrawH2(canvas, HM()->H2(name3), kLinear, kLinear, kLinear, "colz");
251}
252
253void BmnPidQaReport::DrawTwoBananas(const TString canvasName, const TString name1, const TString name2) {
254 TCanvas* canvas = CreateCanvas(canvasName.Data(), canvasName.Data(), 1000, 500);
255 canvas->SetGrid();
256 canvas->Divide(2, 1);
257 canvas->cd(1);
258 drawHist->DrawH2(canvas, HM()->H2(name1), kLinear, kLinear, kLinear, "colz");
259 canvas->cd(2);
260 drawHist->DrawH2(canvas, HM()->H2(name2), kLinear, kLinear, kLinear, "colz");
261}
262
263void BmnPidQaReport::DrawThreeH1(const TString canvasName, const TString name1, const TString name2, const TString name3) {
264 TCanvas* canvas = CreateCanvas(canvasName.Data(), canvasName.Data(), 1500, 500);
265 canvas->SetGrid();
266 canvas->Divide(3, 1);
267 canvas->cd(1);
268 drawHist->DrawH1(canvas, HM()->H1(name1), kLinear, kLinear, "", kBlue, 1, 0.75, 1.1, 20);
269 canvas->cd(2);
270 drawHist->DrawH1(canvas, HM()->H1(name2), kLinear, kLinear, "", kBlue, 1, 0.75, 1.1, 20);
271 canvas->cd(3);
272 drawHist->DrawH1(canvas, HM()->H1(name3), kLinear, kLinear, "", kBlue, 1, 0.75, 1.1, 20);
273}
274
275void BmnPidQaReport::DrawEffCont(const TString canvasName, TEfficiency* efficiency, TEfficiency* contamination) {
276 TCanvas* canvas = CreateCanvas(canvasName.Data(), canvasName.Data(), 1000, 500);
277 canvas->SetGrid();
278 canvas->Divide(2, 1);
279 canvas->cd(1);
280 drawHist->DrawH1(canvas, efficiency);
281 canvas->cd(2);
282 drawHist->DrawH1(canvas, contamination);
283}
Bool_t Add(const vector< Double_t > &a, const vector< Double_t > &b, vector< Double_t > &c)
const Float_t pMax
Create report for tracking QA.
FairTask for pid performance calculation.
void DrawH2(TCanvas *canvas, TH2 *hist, HistScale logx=kLinear, HistScale logy=kLinear, HistScale logz=kLinear, const string &drawOpt="COLZ")
void DrawMainCanvas(TString)
void DrawH1(TCanvas *canvas, 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)
TH1 * H1(const TString &name) const
Return pointer to TH1 histogram.
virtual void Draw()
Inherited from BmnSimulationReport.
void DrawTwoH2(const TString canvasName, const TString name1, const TString name2)
void DrawTwoH1(const TString canvasName, const TString name1, const TString name2, const TString drawOpt)
void DrawOneH1(const TString canvasName, const TString name1, const TString drawOpt)
unordered_map< Double_t, string > fMassTable
void DrawTwoBananas(const TString canvasName, const TString name1, const TString name2)
void DrawOneH2(const TString canvasName, const TString name1)
void DrawThreeH1(const TString canvasName, const TString name1, const TString name2, const TString name3)
void DrawThreeH2(const TString canvasName, const TString name1, const TString name2, const TString name3)
BmnPidQaReport()
Constructor.
void DrawEffCont(const TString canvasName, TEfficiency *, TEfficiency *)
virtual ~BmnPidQaReport()
Destructor.
virtual void Create()
Pure abstract function which is called from public Create() function. This function has to write repo...
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. User has to write the report using available tags from BmnReport...
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. Canvases created with this function will be automati...
Definition BmnReport.cxx:75
ostream & Out() const
All text output goes to this stream.
Definition BmnReport.h:50
Base class for simulation reports.
BmnHistManager * HM() const
Return pointer to Histogram manager.
void SetDefaultDrawStyle()
@ kLinear
Definition BmnDrawHist.h:71
STL namespace.