Skip to content

Commit f57a37a

Browse files
committed
ITS: TrackExtensionStudy more plots
1 parent 4dbc0b6 commit f57a37a

File tree

2 files changed

+344
-24
lines changed

2 files changed

+344
-24
lines changed

Detectors/ITSMFT/ITS/postprocessing/studies/macros/PostTrackExtension.C

Lines changed: 299 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@
1515
#include "TError.h"
1616
#include "TColor.h"
1717
#include "TCanvas.h"
18-
#include "TH1F.h"
18+
#include "TH2D.h"
19+
#include "TF1.h"
1920
#include "TEfficiency.h"
21+
#include "TMarker.h"
2022
#include "TLegend.h"
2123
#include "TTree.h"
24+
#include "TLatex.h"
2225

2326
#include <memory>
2427
#include <array>
@@ -27,6 +30,7 @@
2730

2831
static constexpr std::array<uint8_t, 9> bitPatternsBefore{15, 30, 31, 60, 62, 63, 120, 124, 126};
2932
static constexpr std::array<uint8_t, 16> bitPatternsAfter{31, 47, 61, 62, 63, 79, 94, 95, 111, 121, 122, 123, 124, 125, 126, 127};
33+
inline bool bitsCleared(uint8_t b, uint8_t a) { return (a == b) ? true : (b & ~(a & b)) != 0; }
3034
static constexpr std::array<int, 16> patternColors = {
3135
kRed, // Red
3236
kBlue, // Blue
@@ -109,6 +113,10 @@ static const std::array<int, eN> markers{20, 21, 22, 23, 27, 28,
109113
29, 33, 39};
110114
static const char* const texPtX = "#it{p}_{T} (GeV/#it{c})";
111115
static const char* const texEff = "Efficiency";
116+
static const char* const texPtRes = "#sigma(#Delta#it{p}_{T}/#it{p}_{T})";
117+
static const char* const texDCAxyRes = "#sigma(DCA_{#it{xy}}) (#mum)";
118+
static const char* const texDCAzRes = "#sigma(DCA_{#it{z}}) (#mum)";
119+
static const char* const fitOpt{"QWMER"};
112120

113121
void setStyle();
114122
TEfficiency* makeEff(TFile*, const char* num, const char* den);
@@ -240,10 +248,13 @@ void PostTrackExtension(const char* fileName = "TrackExtensionStudy.root")
240248
auto h = p->DrawFrame(0.05, 0.0, 10., 1.05);
241249
h->GetXaxis()->SetTitle(texPtX);
242250
h->GetYaxis()->SetTitle(texEff);
243-
auto leg = new TLegend(0.35, 0.35, 0.7, 0.7);
251+
auto leg = new TLegend(0.35, 0.60, 0.7, 0.88);
244252
leg->SetNColumns(4);
245253
leg->SetHeader(std::format("BEFORE={:07b} GOOD Pattern AFTER/BEFORE", bitPatternsBefore[i]).c_str());
246254
for (int j{0}; j < (int)bitPatternsAfter.size(); ++j) {
255+
if (bitsCleared(bitPatternsBefore[i], bitPatternsAfter[j])) {
256+
continue;
257+
}
247258
auto eff = fIn->Get<TEfficiency>(std::format("eExtensionPatternGood_{:07b}_{:07b}", bitPatternsBefore[i], bitPatternsAfter[j]).c_str());
248259
stylePattern(eff, j, leg, std::format("{:07b}", bitPatternsAfter[j]).c_str());
249260
eff->Draw("same");
@@ -263,10 +274,13 @@ void PostTrackExtension(const char* fileName = "TrackExtensionStudy.root")
263274
auto h = p->DrawFrame(0.05, 0.0, 10., 1.05);
264275
h->GetXaxis()->SetTitle(texPtX);
265276
h->GetYaxis()->SetTitle(texEff);
266-
auto leg = new TLegend(0.35, 0.35, 0.7, 0.7);
277+
auto leg = new TLegend(0.35, 0.60, 0.7, 0.88);
267278
leg->SetNColumns(4);
268279
leg->SetHeader(std::format("BEFORE={:07b} FAKE Pattern AFTER/BEFORE", bitPatternsBefore[i]).c_str());
269280
for (int j{0}; j < (int)bitPatternsAfter.size(); ++j) {
281+
if (bitsCleared(bitPatternsBefore[i], bitPatternsAfter[j])) {
282+
continue;
283+
}
270284
auto eff = fIn->Get<TEfficiency>(std::format("eExtensionPatternFake_{:07b}_{:07b}", bitPatternsBefore[i], bitPatternsAfter[j]).c_str());
271285
stylePattern(eff, j, leg, std::format("{:07b}", bitPatternsAfter[j]).c_str());
272286
eff->Draw("same");
@@ -278,25 +292,292 @@ void PostTrackExtension(const char* fileName = "TrackExtensionStudy.root")
278292
c->SaveAs("trkExt_fake_pattern_comp.pdf");
279293
}
280294

295+
{ // DCA
296+
auto fGaus = new TF1("fGaus", "gaus", -200., 200.);
297+
auto dcaXYVsPtNo = fIn->Get<TH2D>("hDCAxyVsPtResNormal");
298+
auto dcaXYVsPtYes = fIn->Get<TH2D>("hDCAxyVsPtResExtended");
299+
auto dcazVsPtNo = fIn->Get<TH2D>("hDCAzVsPtResNormal");
300+
auto dcazVsPtYes = fIn->Get<TH2D>("hDCAzVsPtResExtended");
301+
auto bins = dcazVsPtNo->GetXaxis()->GetXbins();
302+
auto dcaXYResNo = new TH1F("hDcaxyResNo", "NORMAL;#it{p}_{T} (GeV/#it{c});#sigma(DCA_{#it{xy}}) (#mum)", bins->GetSize() - 1, bins->GetArray());
303+
auto dcaXYResYes = new TH1F("hDcaxyResYes", "EXTENDED;#it{p}_{T} (GeV/#it{c});#sigma(DCA_{#it{xy}}) (#mum)", bins->GetSize() - 1, bins->GetArray());
304+
auto dcaZResNo = new TH1F("hDcazResNo", "NORMAL;#it{p}_{T} (GeV/#it{c});#sigma(DCA_{#it{z}}) (#mum)", bins->GetSize() - 1, bins->GetArray());
305+
auto dcaZResYes = new TH1F("hDcazResYes", "EXTENDED;#it{p}_{T} (GeV/#it{c});#sigma(DCA_{#it{z}}) (#mum)", bins->GetSize() - 1, bins->GetArray());
306+
TH1* proj;
307+
for (int iPt{1}; iPt <= bins->GetSize(); ++iPt) {
308+
auto ptMin = dcaXYResNo->GetXaxis()->GetBinLowEdge(iPt);
309+
if (ptMin < 0.1) {
310+
continue;
311+
}
312+
float minFit = (ptMin < 1.) ? -200. : -75.;
313+
float maxFit = (ptMin < 1.) ? 200. : 75.;
314+
315+
proj = dcaXYVsPtNo->ProjectionY(Form("hProjDCAxy_no_%d", iPt), iPt, iPt);
316+
proj->Fit("fGaus", fitOpt, "", minFit, maxFit);
317+
dcaXYResNo->SetBinContent(iPt, fGaus->GetParameter(2));
318+
dcaXYResNo->SetBinError(iPt, fGaus->GetParError(2));
319+
320+
proj = dcaXYVsPtYes->ProjectionY(Form("hProjDCAxy_yes_%d", iPt), iPt, iPt);
321+
proj->Fit("fGaus", fitOpt, "", minFit, maxFit);
322+
dcaXYResYes->SetBinContent(iPt, fGaus->GetParameter(2));
323+
dcaXYResYes->SetBinError(iPt, fGaus->GetParError(2));
324+
325+
proj = dcazVsPtNo->ProjectionY(Form("hProjDCAz_no_%d", iPt), iPt, iPt);
326+
proj->Fit("fGaus", fitOpt, "", minFit, maxFit);
327+
dcaZResNo->SetBinContent(iPt, fGaus->GetParameter(2));
328+
dcaZResNo->SetBinError(iPt, fGaus->GetParError(2));
329+
330+
proj = dcazVsPtYes->ProjectionY(Form("hProjDCAz_yes_%d", iPt), iPt, iPt);
331+
proj->Fit("fGaus", fitOpt, "", minFit, maxFit);
332+
dcaZResYes->SetBinContent(iPt, fGaus->GetParameter(2));
333+
dcaZResYes->SetBinError(iPt, fGaus->GetParError(2));
334+
}
335+
336+
dcaXYResNo->SetLineColor(kRed);
337+
dcaXYResNo->SetMarkerColor(kRed);
338+
dcaXYResYes->SetLineColor(kBlue);
339+
dcaXYResYes->SetMarkerColor(kBlue);
340+
dcaZResNo->SetLineColor(kRed);
341+
dcaZResNo->SetMarkerColor(kRed);
342+
dcaZResYes->SetLineColor(kBlue);
343+
dcaZResYes->SetMarkerColor(kBlue);
344+
345+
auto c = new TCanvas("cDCA", "", 2 * 800, 600);
346+
c->Divide(2, 1);
347+
c->cd(1);
348+
auto h = gPad->DrawFrame(0.1, 1, 10., 500);
349+
h->GetXaxis()->SetTitle(texPtX);
350+
h->GetYaxis()->SetTitle(texDCAxyRes);
351+
dcaXYResNo->Draw("SAME");
352+
dcaXYResYes->Draw("SAME");
353+
gPad->SetLogx();
354+
gPad->SetLogy();
355+
gPad->SetGrid();
356+
auto leg = new TLegend(0.20, 0.20, 0.40, 0.40);
357+
leg->AddEntry(dcaXYResNo, "Normal");
358+
leg->AddEntry(dcaXYResYes, "Extended");
359+
leg->Draw();
360+
361+
c->cd(2);
362+
h = gPad->DrawFrame(0.1, 1, 10., 500);
363+
h->GetXaxis()->SetTitle(texPtX);
364+
h->GetYaxis()->SetTitle(texDCAzRes);
365+
dcaZResNo->Draw("SAME");
366+
dcaZResYes->Draw("SAME");
367+
gPad->SetLogx();
368+
gPad->SetLogy();
369+
gPad->SetGrid();
370+
371+
c->SaveAs("trkExt_dca.pdf");
372+
}
373+
374+
return;
281375
{ // Kinematic variables
282376
auto t = fIn->Get<TTree>("tree");
283377
auto c = new TCanvas("cKG", "", 800, 600);
284378
c->Divide(3, 2);
285-
auto p = c->cd(1);
286-
p->SetGrid();
287-
auto h = p->DrawFrame(-.5, 0., .5, 30.);
288-
h->GetXaxis()->SetTitle("#it{p}_{T,TRK}-#it{p}_{T,MC}");
289-
h->GetYaxis()->SetTitle("n. counts");
290-
t->Draw("trk.getPt()-mcTrk.getPt()>>hPtNo(100,-.5,.5)", "isGood&&!isExtended", "HIST;SAME");
291-
auto htemp = (TH1F*)p->GetPrimitive("hPtNo");
292-
htemp->Scale(1.0 / htemp->Integral("width"));
293-
htemp->SetLineColor(kRed);
294-
t->Draw("trk.getPt()-mcTrk.getPt()>>hPtYes(100,-.5,.5)", "isGood&&isExtended", "HIST;SAME");
295-
htemp = (TH1F*)p->GetPrimitive("hPtYes");
296-
htemp->Scale(1.0 / htemp->Integral("width"));
297-
htemp->SetLineColor(kBlue);
298-
p->Modified();
299-
p->Update();
379+
{
380+
auto p = c->cd(1);
381+
p->SetGrid();
382+
auto h = p->DrawFrame(-.6, 0., .6, 9.);
383+
h->GetXaxis()->SetTitle("#frac{Q^{2}}{p_{T,TRK}}-#frac{Q^{2}}{p_{T,MC}}");
384+
h->GetYaxis()->SetTitle("n. counts");
385+
t->Draw("trk.getQ2Pt()-mcTrk.getQ2Pt()>>hPtNo(100,-.6,.6)", "isGood&&!isExtended", "HIST;SAME");
386+
auto hNo = (TH1F*)p->GetPrimitive("hPtNo");
387+
hNo->Scale(1.0 / hNo->Integral("width"));
388+
hNo->SetLineColor(kRed);
389+
auto fitNo = new TF1("fitNo", "gaus", -0.04, 0.04);
390+
hNo->Fit(fitNo, "QR");
391+
fitNo->SetLineColor(kRed);
392+
fitNo->Draw("SAME");
393+
auto textNo = new TLatex(-0.55, 8.2, Form("#mu = %.3f, #sigma = %.3f", fitNo->GetParameter(1), fitNo->GetParameter(2)));
394+
textNo->SetTextColor(kRed);
395+
textNo->SetNDC(false);
396+
textNo->SetTextSize(0.05);
397+
textNo->Draw();
398+
399+
t->Draw("trk.getQ2Pt()-mcTrk.getQ2Pt()>>hPtYes(100,-.6,.6)", "isGood&&isExtended", "HIST;SAME");
400+
auto hYes = (TH1F*)p->GetPrimitive("hPtYes");
401+
hYes->Scale(1.0 / hYes->Integral("width"));
402+
hYes->SetLineColor(kBlue);
403+
auto fitYes = new TF1("fitYes", "gaus", -0.04, 0.04);
404+
hYes->Fit(fitYes, "QR");
405+
fitYes->SetLineColor(kBlue);
406+
fitYes->Draw("SAME");
407+
auto textYes = new TLatex(-0.55, 7, Form("#mu = %.4f, #sigma = %.4f", fitNo->GetParameter(1), fitNo->GetParameter(2)));
408+
textYes->SetTextColor(kBlue);
409+
textYes->SetNDC(false);
410+
textYes->SetTextSize(0.05);
411+
textYes->Draw();
412+
413+
p->Modified();
414+
p->Update();
415+
}
416+
{
417+
auto p = c->cd(2);
418+
p->SetGrid();
419+
auto h = p->DrawFrame(-3, 0., 3, 2.);
420+
h->GetXaxis()->SetTitle("Y_{TRK}-Y_{MC}");
421+
h->GetYaxis()->SetTitle("n. counts");
422+
t->Draw("trk.getY()-mcTrk.getY()>>hYNo(100,-3,3)", "isGood&&!isExtended", "HIST;SAME");
423+
auto hNo = (TH1F*)p->GetPrimitive("hYNo");
424+
hNo->Scale(1.0 / hNo->Integral("width"));
425+
hNo->SetLineColor(kRed);
426+
auto fitNo = new TF1("fitNo", "gaus", -0.5, 0.5);
427+
hNo->Fit(fitNo, "QR");
428+
fitNo->SetLineColor(kRed);
429+
fitNo->Draw("SAME");
430+
auto textNo = new TLatex(-2, 1.7, Form("#mu = %.3f, #sigma = %.3f", fitNo->GetParameter(1), fitNo->GetParameter(2)));
431+
textNo->SetTextColor(kRed);
432+
textNo->SetNDC(false);
433+
textNo->SetTextSize(0.05);
434+
textNo->Draw();
435+
436+
t->Draw("trk.getY()-mcTrk.getY()>>hYYes(100,-3,3)", "isGood&&isExtended", "HIST;SAME");
437+
auto hYes = (TH1F*)p->GetPrimitive("hYYes");
438+
hYes->Scale(1.0 / hYes->Integral("width"));
439+
hYes->SetLineColor(kBlue);
440+
auto fitYes = new TF1("fitYes", "gaus", -0.5, 0.5);
441+
hYes->Fit(fitYes, "QR");
442+
fitYes->SetLineColor(kBlue);
443+
fitYes->Draw("SAME");
444+
auto textYes = new TLatex(-2, 1.5, Form("#mu = %.4f, #sigma = %.4f", fitNo->GetParameter(1), fitNo->GetParameter(2)));
445+
textYes->SetTextColor(kBlue);
446+
textYes->SetNDC(false);
447+
textYes->SetTextSize(0.05);
448+
textYes->Draw();
449+
450+
p->Modified();
451+
p->Update();
452+
}
453+
{
454+
auto p = c->cd(3);
455+
p->SetGrid();
456+
auto h = p->DrawFrame(-2, 0., 2, 4.2);
457+
h->GetXaxis()->SetTitle("Z_{TRK}-Z_{MC}");
458+
h->GetYaxis()->SetTitle("n. counts");
459+
t->Draw("trk.getZ()-mcTrk.getZ()>>hZNo(100,-2,2)", "isGood&&!isExtended", "HIST;SAME");
460+
auto hNo = (TH1F*)p->GetPrimitive("hZNo");
461+
hNo->Scale(1.0 / hNo->Integral("width"));
462+
hNo->SetLineColor(kRed);
463+
auto fitNo = new TF1("fitNo", "gaus", -0.2, 0.2);
464+
hNo->Fit(fitNo, "QR");
465+
fitNo->SetLineColor(kRed);
466+
fitNo->Draw("SAME");
467+
auto textNo = new TLatex(-1.7, 3.8, Form("#mu = %.3f, #sigma = %.3f", fitNo->GetParameter(1), fitNo->GetParameter(2)));
468+
textNo->SetTextColor(kRed);
469+
textNo->SetNDC(false);
470+
textNo->SetTextSize(0.05);
471+
textNo->Draw();
472+
473+
t->Draw("trk.getZ()-mcTrk.getZ()>>hZYes(100,-2,2)", "isGood&&isExtended", "HIST;SAME");
474+
auto hYes = (TH1F*)p->GetPrimitive("hZYes");
475+
hYes->Scale(1.0 / hYes->Integral("width"));
476+
hYes->SetLineColor(kBlue);
477+
auto fitYes = new TF1("fitYes", "gaus", -0.2, 0.2);
478+
hYes->Fit(fitYes, "QR");
479+
fitYes->SetLineColor(kBlue);
480+
fitYes->Draw("SAME");
481+
auto textYes = new TLatex(-1.7, 3.5, Form("#mu = %.4f, #sigma = %.4f", fitNo->GetParameter(1), fitNo->GetParameter(2)));
482+
textYes->SetTextColor(kBlue);
483+
textYes->SetNDC(false);
484+
textYes->SetTextSize(0.05);
485+
textYes->Draw();
486+
487+
p->Modified();
488+
p->Update();
489+
}
490+
{
491+
auto p = c->cd(4);
492+
p->SetGrid();
493+
auto h = p->DrawFrame(-0.02, 0., 0.02, 370.);
494+
h->GetXaxis()->SetTitle("TGL_{TRK}-TGL_{MC}");
495+
h->GetYaxis()->SetTitle("n. counts");
496+
t->Draw("trk.getTgl()-mcTrk.getTgl()>>hTglNo(100,-0.02,0.02)", "isGood&&!isExtended", "HIST;SAME");
497+
auto hNo = (TH1F*)p->GetPrimitive("hTglNo");
498+
hNo->Scale(1.0 / hNo->Integral("width"));
499+
hNo->SetLineColor(kRed);
500+
auto fitNo = new TF1("fitNo", "gaus", -0.003, 0.003);
501+
hNo->Fit(fitNo, "QR");
502+
fitNo->SetLineColor(kRed);
503+
fitNo->Draw("SAME");
504+
auto textNo = new TLatex(-0.018, 330, Form("#mu = %.3f, #sigma = %.3f", fitNo->GetParameter(1), fitNo->GetParameter(2)));
505+
textNo->SetTextColor(kRed);
506+
textNo->SetNDC(false);
507+
textNo->SetTextSize(0.05);
508+
textNo->Draw();
509+
510+
t->Draw("trk.getTgl()-mcTrk.getTgl()>>hTglYes(100,-0.02,0.02)", "isGood&&isExtended", "HIST;SAME");
511+
auto hYes = (TH1F*)p->GetPrimitive("hTglYes");
512+
hYes->Scale(1.0 / hYes->Integral("width"));
513+
hYes->SetLineColor(kBlue);
514+
auto fitYes = new TF1("fitYes", "gaus", -0.003, 0.003);
515+
hYes->Fit(fitYes, "QR");
516+
fitYes->SetLineColor(kBlue);
517+
fitYes->Draw("SAME");
518+
auto textYes = new TLatex(-0.018, 310, Form("#mu = %.6f, #sigma = %.6f", fitNo->GetParameter(1), fitNo->GetParameter(2)));
519+
textYes->SetTextColor(kBlue);
520+
textYes->SetNDC(false);
521+
textYes->SetTextSize(0.05);
522+
textYes->Draw();
523+
524+
p->Modified();
525+
p->Update();
526+
}
527+
{
528+
auto p = c->cd(5);
529+
p->SetGrid();
530+
auto h = p->DrawFrame(-0.08, 0., 0.08, 80.);
531+
h->GetXaxis()->SetTitle("SNP_{TRK}-SNP_{MC}");
532+
h->GetYaxis()->SetTitle("n. counts");
533+
t->Draw("trk.getSnp()-mcTrk.getSnp()>>hSnpNo(100,-0.08,0.08)", "isGood&&!isExtended", "HIST;SAME");
534+
auto hNo = (TH1F*)p->GetPrimitive("hSnpNo");
535+
hNo->Scale(1.0 / hNo->Integral("width"));
536+
hNo->SetLineColor(kRed);
537+
auto fitNo = new TF1("fitNo", "gaus", -0.03, 0.03);
538+
hNo->Fit(fitNo, "QR");
539+
fitNo->SetLineColor(kRed);
540+
fitNo->Draw("SAME");
541+
auto textNo = new TLatex(-0.07, 72, Form("#mu = %.3f, #sigma = %.3f", fitNo->GetParameter(1), fitNo->GetParameter(2)));
542+
textNo->SetTextColor(kRed);
543+
textNo->SetNDC(false);
544+
textNo->SetTextSize(0.05);
545+
textNo->Draw();
546+
547+
t->Draw("trk.getSnp()-mcTrk.getSnp()>>hSnpYes(100,-0.08,0.08)", "isGood&&isExtended", "HIST;SAME");
548+
auto hYes = (TH1F*)p->GetPrimitive("hSnpYes");
549+
hYes->Scale(1.0 / hYes->Integral("width"));
550+
hYes->SetLineColor(kBlue);
551+
auto fitYes = new TF1("fitYes", "gaus", -0.03, 0.03);
552+
hYes->Fit(fitYes, "QR");
553+
fitYes->SetLineColor(kBlue);
554+
fitYes->Draw("SAME");
555+
auto textYes = new TLatex(-0.07, 66, Form("#mu = %.6f, #sigma = %.6f", fitNo->GetParameter(1), fitNo->GetParameter(2)));
556+
textYes->SetTextColor(kBlue);
557+
textYes->SetNDC(false);
558+
textYes->SetTextSize(0.05);
559+
textYes->Draw();
560+
561+
p->Modified();
562+
p->Update();
563+
}
564+
{
565+
auto p = c->cd(6);
566+
auto legend = new TLegend(0.2, 0.2, 0.8, 0.8);
567+
legend->SetTextSize(0.06);
568+
legend->SetLineWidth(3);
569+
legend->SetHeader("GOOD tracks", "C");
570+
auto mBlue = new TMarker();
571+
mBlue->SetMarkerColor(kBlue);
572+
mBlue->SetMarkerSize(4);
573+
legend->AddEntry(mBlue, "extended", "p");
574+
auto mRed = new TMarker();
575+
mRed->SetMarkerColor(kRed);
576+
mRed->SetMarkerSize(4);
577+
legend->AddEntry(mRed, "normal", "p");
578+
legend->SetLineColor(kRed);
579+
legend->Draw();
580+
}
300581
c->SaveAs("trkExt_kinematics.pdf");
301582
}
302583
}

0 commit comments

Comments
 (0)