Angular analysis of B+->K*+(K+pi0)mumu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

109 lines
4.6 KiB

#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);
}
}