Skip to content

Commit 6cb6aa8

Browse files
committed
Imporve plotting style of the mass canvases
1 parent 2b0091f commit 6cb6aa8

File tree

3 files changed

+74
-54
lines changed

3 files changed

+74
-54
lines changed

PWGHF/D2H/Macros/HFInvMassFitter.cxx

Lines changed: 57 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
#include <cstring>
5252
#include <stdexcept>
5353
#include <string>
54+
#include <vector>
5455

5556
using namespace RooFit;
5657

@@ -567,65 +568,80 @@ void HFInvMassFitter::fillWorkspace(RooWorkspace& workspace) const
567568
}
568569

569570
// draw fit output
570-
void HFInvMassFitter::drawFit(TVirtualPad* pad, Int_t writeFitInfo)
571+
void HFInvMassFitter::drawFit(TVirtualPad* pad, const std::vector<std::string>& plotLabels, Bool_t writeParInfo)
571572
{
572573
gStyle->SetOptStat(0);
573574
gStyle->SetCanvasColor(0);
574575
gStyle->SetFrameFillColor(0);
575576
pad->cd();
576-
if (writeFitInfo > 0) {
577-
TPaveText* textInfoLeft = new TPaveText(0.12, 0.65, 0.47, 0.89, "NDC");
578-
TPaveText* textInfoRight = new TPaveText(0.6, 0.7, 1., .87, "NDC");
579-
textInfoLeft->SetBorderSize(0);
580-
textInfoLeft->SetFillStyle(0);
581-
textInfoRight->SetBorderSize(0);
582-
textInfoRight->SetFillStyle(0);
583-
textInfoRight->SetTextColor(kBlue);
584-
textInfoLeft->AddText(Form("S = %.0f #pm %.0f ", mRawYield, mRawYieldErr));
585-
textInfoLeft->AddText(Form("S_{count} = %.0f #pm %.0f ", mRawYieldCounted, mRawYieldCountedErr));
586-
if (mTypeOfBkgPdf != NoBkg) {
587-
textInfoLeft->AddText(Form("B (%d#sigma) = %.0f #pm %.0f", mNSigmaForSidebands, mBkgYield, mBkgYieldErr));
588-
textInfoLeft->AddText(Form("S/B (%d#sigma) = %.4g ", mNSigmaForSidebands, mRawYield / mBkgYield));
589-
}
590-
if (mReflPdf) {
591-
textInfoLeft->AddText(Form("Refl/Sig = %.3f #pm %.3f ", mReflOverSgn, 0.0));
592-
}
593-
if (mTypeOfBkgPdf != NoBkg) {
594-
textInfoLeft->AddText(Form("Signif (%d#sigma) = %.1f #pm %.1f ", mNSigmaForSidebands, mSignificance, mSignificanceErr));
595-
textInfoLeft->AddText(Form("#chi^{2} / ndf = %.3f", mChiSquareOverNdfTotal));
596-
}
577+
// Fit metrics
578+
TPaveText* textFitMetrics = new TPaveText(0.65, 0.7, 0.9, 0.88, "NDC");
579+
textFitMetrics->SetBorderSize(0);
580+
textFitMetrics->SetFillStyle(0);
581+
textFitMetrics->SetTextSize(0.04);
582+
textFitMetrics->SetTextAlign(33);
583+
textFitMetrics->AddText(Form("S = %.0f #pm %.0f ", mRawYield, mRawYieldErr));
584+
if (mTypeOfBkgPdf != NoBkg) {
585+
textFitMetrics->AddText(Form("B (%d#sigma) = %.0f #pm %.0f", mNSigmaForSidebands, mBkgYield, mBkgYieldErr));
586+
textFitMetrics->AddText(Form("S/B (%d#sigma) = %.4g ", mNSigmaForSidebands, mRawYield / mBkgYield));
587+
}
588+
if (mReflPdf) {
589+
textFitMetrics->AddText(Form("Refl/Sig = %.3f #pm %.3f ", mReflOverSgn, 0.0));
590+
}
591+
if (mTypeOfBkgPdf != NoBkg) {
592+
textFitMetrics->AddText(Form("Significance (%d#sigma) = %.1f #pm %.1f ", mNSigmaForSidebands, mSignificance, mSignificanceErr));
593+
textFitMetrics->AddText(Form("#chi^{2} / ndf = %.3f", mChiSquareOverNdfTotal));
594+
}
595+
mInvMassFrame->addObject(textFitMetrics);
596+
// Analysis information
597+
TPaveText* textAnalysisInfo = new TPaveText(0.18, 0.78, 0.35, 0.88, "NDC");
598+
textAnalysisInfo->SetBorderSize(0);
599+
textAnalysisInfo->SetFillStyle(0);
600+
textAnalysisInfo->SetTextSize(0.05);
601+
textAnalysisInfo->SetTextAlign(13);
602+
for (const auto& label : plotLabels) {
603+
textAnalysisInfo->AddText(label.c_str());
604+
}
605+
mInvMassFrame->addObject(textAnalysisInfo);
606+
if (writeParInfo) {
607+
// right text box
608+
TPaveText* textSignalPar = new TPaveText(0.18, 0.65, 0.4, 0.75, "NDC");
609+
textSignalPar->SetBorderSize(0);
610+
textSignalPar->SetFillStyle(0);
611+
textSignalPar->SetTextColor(kBlue);
612+
textSignalPar->SetTextAlign(13);
597613
if (mFixedMean) {
598-
textInfoRight->AddText(Form("mean(fixed) = %.3f #pm %.3f", mRooMeanSgn->getVal(), mRooMeanSgn->getError()));
614+
textSignalPar->AddText(Form("mean(fixed) = %.3f #pm %.3f", mRooMeanSgn->getVal(), mRooMeanSgn->getError()));
599615
} else {
600-
textInfoRight->AddText(Form("mean(free) = %.3f #pm %.3f", mRooMeanSgn->getVal(), mRooMeanSgn->getError()));
616+
textSignalPar->AddText(Form("mean(free) = %.3f #pm %.3f", mRooMeanSgn->getVal(), mRooMeanSgn->getError()));
601617
}
602618
if (mTypeOfSgnPdf == DoubleGaus) {
603619
if (mFixedSigma) {
604-
textInfoRight->AddText(Form("sigma(fixed) = %.3f #pm %.3f", mRooSigmaSgn->getVal(), mRooSigmaSgn->getError()));
620+
textSignalPar->AddText(Form("sigma(fixed) = %.3f #pm %.3f", mRooSigmaSgn->getVal(), mRooSigmaSgn->getError()));
605621
} else {
606-
textInfoRight->AddText(Form("sigma(free) = %.3f #pm %.3f", mRooSigmaSgn->getVal(), mRooSigmaSgn->getError()));
622+
textSignalPar->AddText(Form("sigma(free) = %.3f #pm %.3f", mRooSigmaSgn->getVal(), mRooSigmaSgn->getError()));
607623
}
608624
if (mFixedSigmaDoubleGaus) {
609-
textInfoRight->AddText(Form("sigma 2(fixed) = %.3f #pm %.3f", mRooSecSigmaSgn->getVal(), mRooSecSigmaSgn->getError()));
625+
textSignalPar->AddText(Form("sigma 2(fixed) = %.3f #pm %.3f", mRooSecSigmaSgn->getVal(), mRooSecSigmaSgn->getError()));
610626
} else {
611-
textInfoRight->AddText(Form("sigma 2(free) = %.3f #pm %.3f", mRooSecSigmaSgn->getVal(), mRooSecSigmaSgn->getError()));
627+
textSignalPar->AddText(Form("sigma 2(free) = %.3f #pm %.3f", mRooSecSigmaSgn->getVal(), mRooSecSigmaSgn->getError()));
612628
}
613629
} else if (mFixedSigma) {
614-
textInfoRight->AddText(Form("sigma(fixed) = %.3f #pm %.3f", mRooSigmaSgn->getVal(), mRooSigmaSgn->getError()));
630+
textSignalPar->AddText(Form("sigma(fixed) = %.3f #pm %.3f", mRooSigmaSgn->getVal(), mRooSigmaSgn->getError()));
615631
} else {
616-
textInfoRight->AddText(Form("sigma(free) = %.3f #pm %.3f", mRooSigmaSgn->getVal(), mRooSigmaSgn->getError()));
617-
}
618-
mInvMassFrame->addObject(textInfoLeft);
619-
mInvMassFrame->addObject(textInfoRight);
620-
mInvMassFrame->GetYaxis()->SetTitleOffset(1.8);
621-
gPad->SetLeftMargin(0.15);
622-
mInvMassFrame->GetYaxis()->SetTitle(Form("%s", mHistoInvMass->GetYaxis()->GetTitle()));
623-
mInvMassFrame->GetXaxis()->SetTitle(Form("%s", mHistoInvMass->GetXaxis()->GetTitle()));
624-
mInvMassFrame->Draw();
625-
highlightPeakRegion(mInvMassFrame);
626-
if (mHistoTemplateRefl) {
627-
mReflFrame->Draw("same");
632+
textSignalPar->AddText(Form("sigma(free) = %.3f #pm %.3f", mRooSigmaSgn->getVal(), mRooSigmaSgn->getError()));
628633
}
634+
mInvMassFrame->addObject(textSignalPar);
635+
}
636+
mInvMassFrame->GetXaxis()->SetTitleOffset(1.2);
637+
mInvMassFrame->GetYaxis()->SetTitleOffset(1.8);
638+
gPad->SetLeftMargin(0.15);
639+
mInvMassFrame->GetYaxis()->SetTitle(Form("%s", mHistoInvMass->GetYaxis()->GetTitle()));
640+
mInvMassFrame->GetXaxis()->SetTitle(Form("%s", mHistoInvMass->GetXaxis()->GetTitle()));
641+
mInvMassFrame->Draw();
642+
highlightPeakRegion(mInvMassFrame);
643+
if (mHistoTemplateRefl) {
644+
mReflFrame->Draw("same");
629645
}
630646
}
631647

PWGHF/D2H/Macros/HFInvMassFitter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ class HFInvMassFitter : public TNamed
229229
void calculateSignificance(Double_t& significance, Double_t& significanceErr) const;
230230
void checkForSignal(Double_t& estimatedSignal);
231231
void calculateFitToDataRatio();
232-
void drawFit(TVirtualPad* c, Int_t writeFitInfo = 2);
232+
void drawFit(TVirtualPad* c, const std::vector<std::string>& plotLabels, Bool_t writeParInfo = true);
233233
void drawResidual(TVirtualPad* c);
234234
void drawRatio(TVirtualPad* c);
235235
void drawReflection(TVirtualPad* c);

PWGHF/D2H/Macros/runMassFitter.C

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,12 @@ int runMassFitter(const TString& configFileName)
8181
fclose(configFile);
8282

8383
Bool_t isMc = config["IsMC"].GetBool();
84+
Bool_t writeSignalPar = config["WriteSignalPar"].GetBool();
8485
TString inputFileName = config["InFileName"].GetString();
8586
TString reflFileName = config["ReflFileName"].GetString();
8687
TString outputFileName = config["OutFileName"].GetString();
8788
TString particleName = config["Particle"].GetString();
89+
TString collisionSystem = config["CollisionSystem"].GetString();
8890

8991
std::vector<std::string> inputHistoName;
9092
std::vector<std::string> promptHistoName;
@@ -200,19 +202,21 @@ int runMassFitter(const TString& configFileName)
200202
sgnFunc[iSliceVar] = sgnFuncConfig[iSliceVar];
201203
}
202204

203-
std::map<std::string, std::pair<std::string, std::string>> particles{
204-
{"Dplus", {"K#pi#pi", "D+"}},
205-
{"D0", {"K#pi", "D0"}},
206-
{"Ds", {"KK#pi", "D_s+"}},
207-
{"LcToPKPi", {"pK#pi", "Lambda_c+"}},
208-
{"LcToPK0s", {"pK^{0}_{s}", "Lambda_c+"}},
209-
{"Dstar", {"D^{0}pi^{+}", "D*+"}},
210-
{"XicToXiPiPi", {"#Xi#pi#pi", "Xi_c+"}}};
205+
std::map<std::string, std::tuple<std::string, std::string, std::string>> particles{
206+
{"Dplus", {"K#pi#pi", "D+", "D^{+} #rightarrow K^{-}#pi^{+}#pi^{+} + c.c."}},
207+
{"D0", {"K#pi", "D0", "D^{0} #rightarrow K^{-}#pi^{+} + c.c."}},
208+
{"Ds", {"KK#pi", "D_s+", "D_{s}^{+} #rightarrow K^{-}K^{+}#pi^{+} + c.c."}},
209+
{"LcToPKPi", {"pK#pi", "Lambda_c+", "#Lambda_{c}^{+} #rightarrow pK^{-}#pi^{+} + c.c."}},
210+
{"LcToPK0s", {"pK^{0}_{s}", "Lambda_c+", "#Lambda_{c}^{+} #rightarrow pK^{0}_{s} + c.c."}},
211+
{"Dstar", {"D^{0}pi^{+}", "D*+", "D^{*+} #rightarrow D^{0}#pi^{+} + c.c."}},
212+
{"XicToXiPiPi", {"#Xi#pi#pi", "Xi_c+", "#Xi_{c}^{+} #rightarrow #Xi^{-}#pi^{+}#pi^{+} + c.c."}}};
211213
if (particles.find(particleName.Data()) == particles.end()) {
212214
throw std::runtime_error("ERROR: only Dplus, D0, Ds, LcToPKPi, LcToPK0s, Dstar and XicToXiPiPi particles supported! Exit");
213215
}
214-
const TString massAxisTitle = "#it{M}(" + particles[particleName.Data()].first + ") (GeV/#it{c}^{2})";
215-
const double massPDG = TDatabasePDG::Instance()->GetParticle(particles[particleName.Data()].second.c_str())->Mass();
216+
const auto& particleTuple = particles[particleName.Data()];
217+
const TString massAxisTitle = "#it{M}(" + std::get<0>(particleTuple) + ") (GeV/#it{c}^{2})";
218+
const double massPDG = TDatabasePDG::Instance()->GetParticle(std::get<1>(particleTuple).c_str())->Mass();
219+
const std::vector<std::string> plotLabels = {std::get<2>(particleTuple), collisionSystem.Data()};
216220

217221
// load inv-mass histograms
218222
auto inputFile = TFile::Open(inputFileName.Data());
@@ -424,7 +428,7 @@ int runMassFitter(const TString& configFileName)
424428
canvasMass[iCanvas]->cd();
425429
}
426430

427-
massFitter->drawFit(gPad);
431+
massFitter->drawFit(gPad, plotLabels, writeSignalPar);
428432

429433
const Double_t rawYield = massFitter->getRawYield();
430434
const Double_t rawYieldErr = massFitter->getRawYieldError();
@@ -572,7 +576,7 @@ int runMassFitter(const TString& configFileName)
572576
} else {
573577
canvasMass[iCanvas]->cd();
574578
}
575-
massFitter->drawFit(gPad);
579+
massFitter->drawFit(gPad, plotLabels, writeSignalPar);
576580
canvasMass[iCanvas]->Modified();
577581
canvasMass[iCanvas]->Update();
578582

0 commit comments

Comments
 (0)