Skip to content

Commit a1bc66f

Browse files
committed
operate with S&B ranges properly in case of DSCB
1 parent 914032d commit a1bc66f

2 files changed

Lines changed: 25 additions & 12 deletions

File tree

PWGHF/D2H/Macros/HFInvMassFitter.cxx

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
#include <cstring>
5555
#include <stdexcept>
5656
#include <string>
57+
#include <utility>
5758
#include <vector>
5859

5960
using namespace RooFit;
@@ -202,14 +203,14 @@ void HFInvMassFitter::doFit()
202203
mass->setRange("SBL", mMinMass, mMass - mNSigmaForSidebands * mSigmaSgn);
203204
mass->setRange("SBR", mMass + mNSigmaForSidebands * mSigmaSgn, mSecMass - mNSigmaForSidebands * mSecSigma);
204205
mass->setRange("SEC", mSecMass + mNSigmaForSidebands * mSecSigma, mMaxMass);
205-
mass->setRange("signal", mSecMass - mNSigmaForSidebands * mSecSigma, mSecMass + mNSigmaForSidebands * mSecSigma);
206+
mass->setRange("signal", mSecMass - mNSigmaForSgn * mSecSigma, mSecMass + mNSigmaForSgn * mSecSigma);
206207
} else { // Single Peak fit range
207208
mass->setRange("SBL", mMinMass, mMass - mNSigmaForSidebands * mSigmaSgn);
208209
mass->setRange("SBR", mMass + mNSigmaForSidebands * mSigmaSgn, mMaxMass);
209210
mass->setRange("signal", mMass - mNSigmaForSgn * mSigmaSgn, mMass + mNSigmaForSgn * mSigmaSgn);
210211
}
211212
}
212-
mass->setRange("bkg", mMass - 4 * mSigmaSgn, mMass + 4 * mSigmaSgn);
213+
mass->setRange("bkg", mMass - mNSigmaForSgn * mSigmaSgn, mMass + mNSigmaForSgn * mSigmaSgn);
213214
mass->setRange("full", mMinMass, mMaxMass);
214215
mInvMassFrame = mass->frame(Title(Form("%s", mHistoInvMass->GetTitle()))); // define the frame to plot
215216
dataHistogram.plotOn(mInvMassFrame, Name("data_c")); // plot data histogram on the frame
@@ -226,13 +227,14 @@ void HFInvMassFitter::doFit()
226227
mRooNSgn = new RooRealVar("mRooNSig", "number of signal", randomizeInitialParameter(rooNSgnParamRanges), rooNSgnParamRanges.lower, rooNSgnParamRanges.upper); // signal yield
227228
mTotalPdf = new RooAddPdf("mMCFunc", "MC fit function", RooArgList(*sgnPdf), RooArgList(*mRooNSgn)); // create total pdf
228229
if (strcmp(mFitOption.c_str(), "Chi2") == 0) {
229-
mTotalPdf->chi2FitTo(dataHistogram, Range("signal"));
230+
mTotalPdf->chi2FitTo(dataHistogram, Range("full"));
230231
} else {
231-
mTotalPdf->fitTo(dataHistogram, Range("signal"));
232+
mTotalPdf->fitTo(dataHistogram, Range("full"));
232233
}
233234
RooAbsReal* signalIntegralMc = mTotalPdf->createIntegral(*mass, NormSet(*mass), Range("signal")); // sig yield from fit
234235
mIntegralSgn = signalIntegralMc->getValV();
235-
calculateSignal(mRawYield, mRawYieldErr); // calculate signal and signal error
236+
calculateSignal(mRawYield, mRawYieldErr); // calculate signal and signal error
237+
countSignal(mRawYieldCounted, mRawYieldCountedErr);
236238
mTotalPdf->plotOn(mInvMassFrame, Name("Tot_c")); // plot total function
237239
// Fit to data ratio
238240
mRatioFrame = mass->frame(Title(Form("%s", mHistoInvMass->GetTitle())));
@@ -702,10 +704,7 @@ void HFInvMassFitter::drawReflection(TVirtualPad* pad)
702704
// calculate signal yield via bin counting
703705
void HFInvMassFitter::countSignal(double& signal, double& signalErr) const
704706
{
705-
const double mean = mRooMeanSgn->getVal();
706-
const double sigma = mRooSecSigmaSgn->getVal();
707-
const double minForSgn = mean - mNSigmaForSidebands * sigma;
708-
const double maxForSgn = mean + mNSigmaForSidebands * sigma;
707+
const auto [minForSgn, maxForSgn] = getRangesOfSignal();
709708
const int binForMinSgn = mHistoInvMass->FindBin(minForSgn);
710709
const int binForMaxSgn = mHistoInvMass->FindBin(maxForSgn);
711710
const double binForMinSgnUpperEdge = mHistoInvMass->GetBinLowEdge(binForMinSgn + 1);
@@ -758,8 +757,7 @@ void HFInvMassFitter::calculateSignificance(double& significance, double& errSig
758757
// estimate Signal
759758
void HFInvMassFitter::checkForSignal(double& estimatedSignal)
760759
{
761-
double const minForSgn = mMass - 4 * mSigmaSgn;
762-
double const maxForSgn = mMass + 4 * mSigmaSgn;
760+
auto const [minForSgn, maxForSgn] = getRangesOfSignal();
763761
int const binForMinSgn = mHistoInvMass->FindBin(minForSgn);
764762
int const binForMaxSgn = mHistoInvMass->FindBin(maxForSgn);
765763

@@ -772,6 +770,19 @@ void HFInvMassFitter::checkForSignal(double& estimatedSignal)
772770
estimatedSignal = sum - bkg;
773771
}
774772

773+
// Estimate ranges where signal is located to be used in countSignal() and checkForSignal()
774+
// It is mu +- n*sigma for Gaussian, and the entire mInv histogram for DoubleSidedCrystalBall (due to heavy tails)
775+
std::pair<double, double> HFInvMassFitter::getRangesOfSignal() const
776+
{
777+
if (mTypeOfSgnPdf == DoubleSidedCrystalBall) {
778+
return std::make_pair(mMinMass, mMaxMass);
779+
} else {
780+
const double mean = mRooMeanSgn->getVal();
781+
const double sigma = mRooSigmaSgn->getVal();
782+
return std::make_pair(mean - mNSigmaForSgn * sigma, mean + mNSigmaForSgn * sigma);
783+
}
784+
}
785+
775786
// Create Background Fit Function
776787
RooAbsPdf* HFInvMassFitter::createBackgroundFitFunction(RooWorkspace* workspace) const
777788
{

PWGHF/D2H/Macros/HFInvMassFitter.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
#include <array>
3838
#include <string>
39+
#include <utility>
3940
#include <vector>
4041

4142
class HFInvMassFitter : public TNamed
@@ -175,7 +176,8 @@ class HFInvMassFitter : public TNamed
175176
HFInvMassFitter& operator=(const HFInvMassFitter& source);
176177
void fillWorkspace(RooWorkspace& w) const;
177178
void highlightPeakRegion(const RooPlot* plot, Color_t color = kGray + 1, Width_t width = 1, Style_t style = 2) const;
178-
double randomizeInitialParameter(const ParameterRanges& parameterRanges) const;
179+
[[nodiscard]] double randomizeInitialParameter(const ParameterRanges& parameterRanges) const;
180+
[[nodiscard]] std::pair<double, double> getRangesOfSignal() const;
179181

180182
TH1* mHistoInvMass; // histogram to fit
181183
std::string mFitOption;

0 commit comments

Comments
 (0)