110 lines
4.6 KiB
C++
110 lines
4.6 KiB
C++
|
#include "GlobalFunctions.hh"
|
||
|
#include "BackgroundPdf.hpp"
|
||
|
|
||
|
using namespace std;
|
||
|
using namespace RooFit;
|
||
|
using namespace RooStats;
|
||
|
|
||
|
|
||
|
//pdfs background
|
||
|
RooExponential * BackgroundPdf::bkg_exp1(RooRealVar *B_plus_M){
|
||
|
RooRealVar *exp = getRooRealVar("exp_par1",false);
|
||
|
BkgRooVars.push_back(exp);
|
||
|
RooExponential *bkg_exp = new RooExponential("bkg_exp1","ExponentialBckGnd1",*B_plus_M, *exp);
|
||
|
if (verboseLevel <2) bkg_exp->Print();
|
||
|
return bkg_exp;
|
||
|
}
|
||
|
RooExponential * BackgroundPdf::bkg_exp2(RooRealVar *B_plus_M){
|
||
|
RooRealVar *exp = getRooRealVar("exp_par2",false);
|
||
|
BkgRooVars.push_back(exp);
|
||
|
RooExponential *bkg_exp = new RooExponential("bkg_exp2","ExponentialBckGnd2",*B_plus_M, *exp);
|
||
|
if (verboseLevel <2) bkg_exp->Print();
|
||
|
return bkg_exp;
|
||
|
}
|
||
|
RooExpAndGauss * BackgroundPdf::ExpG(RooRealVar *B_plus_M){
|
||
|
RooRealVar *mean = getRooRealVar("bkg_mean",false);
|
||
|
RooRealVar *sigma = getRooRealVar("bkg_sigma",false);
|
||
|
RooRealVar *decay = getRooRealVar("bkg_decay",false);
|
||
|
BkgRooVars.push_back(mean);
|
||
|
BkgRooVars.push_back(sigma);
|
||
|
BkgRooVars.push_back(decay);
|
||
|
RooExpAndGauss *ExpG = new RooExpAndGauss("ExpG", "ExpG", *B_plus_M, *mean, *sigma, *decay);
|
||
|
if (verboseLevel <2) ExpG->Print();
|
||
|
return ExpG;
|
||
|
}
|
||
|
RooDoubleCB * BackgroundPdf::bkg_CB(RooRealVar *B_plus_M){
|
||
|
RooRealVar *mean = getRooRealVar("bkg_mean",false);
|
||
|
RooRealVar *sigma = getRooRealVar("bkg_sigma",false);
|
||
|
RooRealVar *alpha1 = getRooRealVar("bkg_alpha1",false);
|
||
|
RooRealVar *alpha2 = getRooRealVar("bkg_alpha2",false);
|
||
|
RooRealVar *n1 = getRooRealVar("bkg_n1",false);
|
||
|
RooRealVar *n2 = getRooRealVar("bkg_n2",false);
|
||
|
BkgRooVars.push_back(mean);
|
||
|
BkgRooVars.push_back(sigma);
|
||
|
BkgRooVars.push_back(alpha1);
|
||
|
BkgRooVars.push_back(alpha2);
|
||
|
BkgRooVars.push_back(n1);
|
||
|
BkgRooVars.push_back(n2);
|
||
|
RooDoubleCB *CBBplus = new RooDoubleCB("CBbkg", "CBbkg", *B_plus_M, *mean, *sigma, *alpha1, *n1, *alpha2, *n2);
|
||
|
if (verboseLevel <2) CBBplus->Print();
|
||
|
return CBBplus;
|
||
|
}
|
||
|
|
||
|
RooAddPdf* BackgroundPdf::getBplusBkgModel(RooRealVar *B_plus_M){
|
||
|
RooAddPdf *BplusBckGndModel = NULL;
|
||
|
RooExponential *exp1 = NULL; //could be defined right away, I keep it as it is in case fo future addons
|
||
|
if (NoBackground){
|
||
|
coutDebug("No background PDF!");
|
||
|
return NULL;
|
||
|
}
|
||
|
RooRealVar *zeroSlope = new RooRealVar("zeroSlope","slope", 0.05, 0.0, 0.1); //Doesn't matter anyhow
|
||
|
zeroSlope->setConstant("kTrue");
|
||
|
RooRealVar *zeroF = new RooRealVar("zeroF","zeroF", 1.0, 1.0, 1.0);
|
||
|
RooPolynomial *zeroLine = new RooPolynomial("zeroLine", "zeroLine", *B_plus_M, RooArgList(*zeroSlope));
|
||
|
coutDebug("Created zero slope for bkgPdf.");
|
||
|
|
||
|
if (SingleExponential){//No else-if, because then I can add OneCB
|
||
|
coutDebug("Creating single exponential");
|
||
|
exp1 = bkg_exp1(B_plus_M);
|
||
|
if (!bkgOneCB && !ExpGaus) BplusBckGndModel = new RooAddPdf("BplusBckGndModel", "SingleExponentialBckGnd", RooArgList(*exp1, *zeroLine),RooArgList(*zeroF));
|
||
|
}
|
||
|
|
||
|
if (bkgOneCB) { //No else-ifs, because then I can add the previously defined functions
|
||
|
coutDebug("Creating OneCB");
|
||
|
RooDoubleCB *OneCB = NULL;
|
||
|
OneCB = bkg_CB(B_plus_M);
|
||
|
if (!SingleExponential) BplusBckGndModel = new RooAddPdf("BplusBckGndModel", "OneCBBckGnd", RooArgList(*OneCB, *zeroLine),RooArgList(*zeroF));
|
||
|
else{
|
||
|
RooRealVar *f = getRooRealVar("bkg_f",false);
|
||
|
BkgRooVars.push_back(f);
|
||
|
BplusBckGndModel = new RooAddPdf("BplusBckGndModel", "SingleExponentialWithCBBckGnd", RooArgList(*OneCB, *exp1),RooArgList(*f));
|
||
|
coutDebug("Setting OneCB+SingleExp");
|
||
|
if (verboseLevel<3) BplusBckGndModel->Print();
|
||
|
}
|
||
|
}
|
||
|
else if (DoubleExponential){
|
||
|
coutDebug("Creating double exponential");
|
||
|
RooExponential *exp2 = bkg_exp2(B_plus_M);
|
||
|
RooRealVar *f = getRooRealVar("bkg_f",false);
|
||
|
BkgRooVars.push_back(f);
|
||
|
BplusBckGndModel = new RooAddPdf("BplusBckGndModel", "DoubleExponentialBckGnd", RooArgList(*exp1, *exp2),RooArgList(*f));
|
||
|
}
|
||
|
else if (ExpGaus){
|
||
|
coutDebug("Creating ExpGaus");
|
||
|
RooExpAndGauss *expGauss = ExpG(B_plus_M);
|
||
|
RooRealVar *f = getRooRealVar("bkg_f",false);
|
||
|
BkgRooVars.push_back(f);
|
||
|
BplusBckGndModel = new RooAddPdf("BplusBckGndModel", "ExpGausBckGnd", RooArgList(*exp1, *expGauss),RooArgList(*f));
|
||
|
}
|
||
|
if (NoBackground) coutDebug("No background PDF!");
|
||
|
else if (verboseLevel < 2) BplusBckGndModel->Print();
|
||
|
return BplusBckGndModel;
|
||
|
}
|
||
|
|
||
|
void BackgroundPdf::setAllRooVarsConstant(){
|
||
|
for (auto var : BkgRooVars){
|
||
|
var->setConstant(kTRUE);
|
||
|
}
|
||
|
}
|
||
|
|