9 #include "RooRealVar.h" 10 #include "RooCategory.h" 11 #include "RooDataSet.h" 12 #include "RooKeysPdf.h" 24 SetMultiplyLumi(
true);
36 DisplayFunc(__func__);
37 Message(eDebug,
"About to fit %i categories %s to shape of %s",
38 fCategoryNames.size(), fCategoryBranch, fDefaultExpr.Data());
39 Message(eDebug,
"Data cut is %s", fDataBaseCut.GetTitle());
40 Message(eDebug,
" MC cut is %s", fBaseCut.GetTitle());
41 if (fSignalName !=
"")
42 Message(eDebug,
"Only reweighting %s", fSignalName.Data());
45 ConvertToArray(1, Shape_Min, Shape_Max, XBins);
48 RooRealVar variable = RooRealVar(fDefaultExpr.Data(), ShapeLabel, Shape_Min, Shape_Max);
51 RooRealVar MCWeight = RooRealVar(fMCWeight.GetTitle(),
"MC Weight", 0.0);
54 RooCategory category = RooCategory(fCategoryBranch,
"categories");
57 for (UInt_t iCat = 0; iCat != fCategoryNames.size(); ++iCat)
58 category.defineType(fCategoryNames[iCat], iCat);
60 TH1D *FloatSizer = GetHist(1, XBins, fSignalType, fSignalName, fSearchBy,
true);
61 Double_t FloatSize = FloatSizer->Integral(
"width");
64 OpenFiles(ReturnFileNames(fSignalType, fSignalName, fSearchBy,
true));
67 TString dataname = TString::Format(
"Dataset_%s",
"Floating");
69 Message(eDebug,
"Created dataset with name %s", dataname.Data());
71 RooArgSet argset(variable, MCWeight, category);
72 RooDataSet
dataset(dataname, dataname, argset);
76 for (UInt_t iTree = 0; iTree != fInTrees.size(); ++iTree) {
77 Message(eDebug,
"Getting data from tree %i / %i", iTree, fInTrees.size());
79 TString datasetname = TString::Format(
"Dataset_%s_%i",
"Floating", iTree);
80 TTree *copiedTree = fInTrees[iTree]->CopyTree(fBaseCut.GetTitle());
81 RooDataSet tempData {datasetname, datasetname, copiedTree, argset, 0, fMCWeight};
83 dataset.append(tempData);
84 Message(eDebug,
"Dataset now has %i entries", dataset.numEntries());
88 TString
pdfName = TString::Format(
"pdf_%s",
"Floating");
90 Message(eDebug,
"Creating pdf: %s", pdfName.Data());
93 TList *dataList = dataset.split(category);
95 Message(eDebug,
"Dataset list size: %i", dataList->GetSize());
100 for (UInt_t iBin = 0; iBin != fCategoryNames.size(); ++iBin) {
102 Message(eDebug,
"Getting pdf for category: %s", fCategoryNames[iBin].Data());
104 TString pdfNameTemp = TString::Format(
"pdf_%s_%i",
"Floating", iBin);
105 Message(eDebug,
"The pdf name will be %s", pdfNameTemp.Data());
106 RooKeysPdf tempPdf {pdfNameTemp, pdfNameTemp, variable, *(
static_cast<RooDataSet*
>(dataList->At(iBin)))};
107 Message(eDebug,
"Keys pdf created at %p", &tempPdf);
110 if (iBin != fCategoryNames.size() - 1) {
111 TString coeffName = TString::Format(
"coeff_%s_%i",
"Floating", iBin);
112 Message(eDebug,
"Added coefficient named %s", coeffName.Data());
113 RooRealVar tempVar {coeffName, coeffName, 0.0, 1.0};
114 coeffSet.add(tempVar);
118 RooAddPdf floatPdf(pdfName, pdfName, pdfSet, coeffSet);
120 TH1D *StaticSizer = GetHist(1, XBins, kBackground, fSignalName, fSearchBy,
false);
121 Double_t StaticSize = StaticSizer->Integral(
"width") * (1.0 + fBackgroundChange);
125 OpenFiles(ReturnFileNames(kBackground, fSignalName, fSearchBy,
false));
128 dataname = TString::Format(
"Dataset_%s",
"Static");
130 Message(eDebug,
"Created dataset with name %s", dataname.Data());
132 RooDataSet static_dataset(dataname, dataname, argset);
136 for (UInt_t iTree = 0; iTree != fInTrees.size(); ++iTree) {
137 Message(eDebug,
"Getting data from tree %i / %i", iTree, fInTrees.size());
139 TString datasetname = TString::Format(
"Dataset_%s_%i",
"Static", iTree);
140 TTree *copiedTree = fInTrees[iTree]->CopyTree(fBaseCut.GetTitle());
141 RooDataSet tempData {datasetname, datasetname, copiedTree, argset, 0, fMCWeight};
143 static_dataset.append(tempData);
144 Message(eDebug,
"Dataset now has %i entries", static_dataset.numEntries());
148 pdfName = TString::Format(
"pdf_%s",
"Static");
150 Message(eDebug,
"Creating pdf: %s", pdfName.Data());
152 RooKeysPdf staticPdf(pdfName, pdfName, variable, static_dataset);
154 Double_t relativeSize = FloatSize/(FloatSize + StaticSize);
156 Message(eDebug,
"Finished importing pdfs. Floating: %f, Static: %f, Relative fraction: %f", FloatSize, StaticSize, relativeSize);
158 RooRealVar relativePdfs = RooRealVar(
"Relative",
"Relative", relativeSize);
159 RooAddPdf finalPdf = RooAddPdf(
"Final Pdf",
"Final Pdf", floatPdf, staticPdf, relativePdfs);
161 Message(eDebug,
"Final pdf created at %p", &finalPdf);
164 TChain *dataChain = ReturnTChain(fTreeName, kData);
165 TTree *dataTree = dataChain->CopyTree(fDataBaseCut.GetTitle());
167 Message(eDebug,
"TTree at %p created from TChain at %p", dataTree, dataChain);
169 RooDataSet dataDataset = RooDataSet(
"data",
"data", dataTree, RooArgSet(variable));
171 Message(eDebug,
"Data imported with size %i", dataDataset.numEntries());
173 for (UInt_t iBin = 0; iBin != fCategoryNames.size() - 1; ++iBin) {
174 TString coeffName = TString::Format(
"coeff_%s_%i",
"Floating", iBin);
175 Message(eInfo,
"Coefficient %s has value %f", coeffName.Data(),
static_cast<RooRealVar*
>(coeffSet.find(coeffName))->getValV());
178 finalPdf.fitTo(dataDataset);
180 for (UInt_t iBin = 0; iBin != fCategoryNames.size() - 1; ++iBin) {
181 TString coeffName = TString::Format(
"coeff_%s_%i",
"Floating", iBin);
182 Message(eInfo,
"Coefficient %s has value %f", coeffName.Data(),
static_cast<RooRealVar*
>(coeffSet.find(coeffName))->getValV());