9#pragma GCC diagnostic ignored "-Wfloat-conversion"
10#pragma GCC diagnostic ignored "-Wconversion"
28 std::vector<float> &cumSums, std::vector<bool> &drawLabel,
29 THStack *sampleStack, TLegend *splitSamplesLegend,
30 float baselineLLH_main = 0.00001)
33 size_t nSamples = sampNames.size();
35 cumSums.resize(nSamples);
36 drawLabel.resize(nSamples);
38 float LLH_main_integ = LLH_allSams.Integral();
40 int nBins = LLH_allSams.GetNbinsX();
42 MACH3LOG_DEBUG(
"getting split sample THStack for {} known samples", nSamples);
43 for (uint i = 0; i < nSamples; i++)
45 std::string sampName = sampNames[i];
51 LLH_indivSam->SetName(Form(
"%i_%s_%s", fileIdx, parameterName.c_str(), sampName.c_str()));
52 LLH_indivSam->SetBit(kCanDelete);
55 if (LLH_indivSam->GetNbinsX() == 1)
57 MACH3LOG_DEBUG(
" sample hist had only 1 bin - assuming it doesn't exist");
64 LLH_indivSam->SetStats(0);
65 LLH_indivSam->SetLineColor(TColor::GetColorPalette(
66 floor(
static_cast<float>(i) * TColor::GetNumberOfColors() /
static_cast<float>(nSamples))));
67 LLH_indivSam->SetFillColor(TColor::GetColorPalette(
68 floor(
static_cast<float>(i) * TColor::GetNumberOfColors() /
static_cast<float>(nSamples))));
69 sampleStack->Add(LLH_indivSam);
73 float lastBinLLH = LLH_indivSam->GetBinContent(
nBins);
76 MACH3LOG_DEBUG(
" Last bin LLH = {} :: cumulative LLH = {}", lastBinLLH, cumSum);
77 MACH3LOG_DEBUG(
" LLH fraction = {} / {} = {}", LLH_indivSam->Integral(), LLH_main_integ, LLH_indivSam->Integral() / LLH_main_integ);
98 double stackMax = ratioCompStack->GetMaximum(
"NOSTACK");
99 double stackMin = ratioCompStack->GetMinimum(
"NOSTACK");
101 double stackLim = std::max(std::abs(1.0 - stackMax), std::abs(1.0 - stackMin));
103 ratioCompStack->SetMinimum(1.0 - 1.05 * stackLim);
104 ratioCompStack->SetMaximum(1.0 + 1.05 * stackLim);
111 ratioCompStack->GetXaxis()->GetLabelSize());
113 ratioCompStack->GetXaxis()->GetLabelSize());
114 ratioCompStack->GetXaxis()->SetTitle(
"Parameter Variation");
117 ratioCompStack->GetYaxis()->GetLabelSize());
119 ratioCompStack->GetYaxis()->GetLabelSize());
120 ratioCompStack->GetYaxis()->SetTitleOffset(
yTitleOffset);
121 ratioCompStack->GetYaxis()->SetNdivisions(5, 2, 0);
125 TCanvas *
canv, TPad *LLHPad, TPad *ratioPad) {
127 THStack *compStack =
new THStack(
"LLH_Stack",
"");
128 THStack *ratioCompStack =
new THStack(
"LLH_Ratio_Stack",
"");
129 auto legend = std::make_unique<TLegend>(0.3, 0.6, 0.7, 0.8);
133 LLH_main.SetStats(0);
135 LLH_main.SetLineColor(kBlack);
136 compStack->Add(&LLH_main);
139 int nBins = LLH_main.GetNbinsX();
142 for (
unsigned int extraFileIdx = 1; extraFileIdx <
man->
input().getNInputFiles(); extraFileIdx++)
145 compHist->SetBit(kCanDelete);
146 if (compHist->GetNbinsX() == 0)
150 compHist->SetLineColor(
151 TColor::GetColorPalette(floor(
static_cast<float>(extraFileIdx) * TColor::GetNumberOfColors() /
153 compHist->SetLineStyle(2 + extraFileIdx % 9);
156 TH1D *divHist =
static_cast<TH1D*
>(compHist->Clone(Form(
"RatioHist_%i", extraFileIdx)));
157 divHist->SetBit(kCanDelete);
162 divHist->Divide(compHist, &LLH_main);
163 ratioCompStack->Add(divHist);
167 compStack->Add(compHist);
168 legend->AddEntry(compHist,
man->
getFileLabel(extraFileIdx).c_str(),
"l");
180 compStack->GetXaxis()->SetTitle(
"Parameter Variation");
181 compStack->GetYaxis()->SetTitle(Form(
"-2LLH_{%s}", LLHType.c_str()));
198 TLine line = TLine();
199 line.SetLineColor(kBlack);
201 line.DrawLine(LLH_main.GetBinLowEdge(1), 1.0, LLH_main.GetBinLowEdge(
nBins + 1), 1.0);
205 canv->SaveAs(outputFileName.c_str());
209 delete ratioCompStack;
213 TCanvas *
canv, TPad *LLHPad, TPad *ratioPad) {
222 if (LLH_main.GetNbinsX() == 1)
224 MACH3LOG_DEBUG(
" Main LLH had only 1 bin, assuming it doesn't exist");
228 THStack *baseSplitSamplesStack =
new THStack(
229 paramName.c_str(), Form(
"%s - %s", paramName.c_str(),
man->
getFileLabel(0).c_str()));
230 TLegend *baseSplitSamplesLegend =
new TLegend(0.37, 0.475, 0.63, 0.9);
233 canv->cd(1)->SetGrid();
237 std::vector<float> cumSums;
238 std::vector<bool> drawLabel;
241 baseSplitSamplesLegend);
247 LLH_main.SetLineWidth(1);
249 baseSplitSamplesLegend->AddEntry(&LLH_main,
"All Samples",
"l");
252 baseSplitSamplesLegend->Draw();
254 TLatex *label =
new TLatex;
256 label->SetTextAlign(11);
257 label->SetTextAngle(-55);
258 label->SetTextSize(0.012);
261 for (uint i = 0; i <
man->
input().getTaggedSamples(
man->
getOption<std::vector<std::string>>(
"sampleTags")).size(); i++)
272 label->DrawLatex(LLH_main.GetBinLowEdge(LLH_main.GetNbinsX() + 1), cumSums[i],
278 for (
unsigned int extraFileIdx = 1; extraFileIdx <
man->
getNFiles(); extraFileIdx++)
280 MACH3LOG_DEBUG(
" - Adding plot for additional file {}", extraFileIdx);
281 canv->cd(1 + extraFileIdx);
283 std::vector<float> extraCumSums;
284 std::vector<bool> extraDrawLabel;
286 THStack *splitSamplesStack =
287 new THStack(paramName.c_str(),
288 Form(
"%s - %s", paramName.c_str(),
man->
getFileLabel(extraFileIdx).c_str()));
289 TLegend *splitSamplesLegend =
new TLegend(0.37, 0.475, 0.63, 0.9);
291 splitSamplesStack->SetBit(kCanDelete);
292 splitSamplesLegend->SetBit(kCanDelete);
295 if (compLLH_main.GetNbinsX() == 1)
297 delete splitSamplesStack;
298 delete splitSamplesLegend;
307 splitSamplesStack, splitSamplesLegend, LLH_main.Integral());
310 splitSamplesStack, splitSamplesLegend);
319 splitSamplesStack->GetXaxis()->SetTitle(
"Parameter Variation");
320 splitSamplesStack->GetYaxis()->SetTitle(
"-2LLH_{sam}");
322 splitSamplesStack->SetMaximum(baseSplitSamplesStack->GetMaximum());
327 compLLH_main.SetLineColor(kBlack);
328 splitSamplesLegend->AddEntry(&compLLH_main,
"All Samples",
"l");
330 splitSamplesLegend->Draw();
333 for (uint i = 0; i <
man->
input().getTaggedSamples(
man->
getOption<std::vector<std::string>>(
"sampleTags")).size(); i++)
338 label->DrawLatex(compLLH_main.GetBinLowEdge(compLLH_main.GetNbinsX() + 1), extraCumSums[i],
344 THStack *splitSamplesStackRatios =
new THStack(paramName.c_str(),
"");
346 TList *baselineHistList = baseSplitSamplesStack->GetHists();
347 TList *compHistList = splitSamplesStack->GetHists();
349 for (uint sampleIdx = 0; sampleIdx <
man->
input().getTaggedSamples(
man->
getOption<std::vector<std::string>>(
"sampleTags")).size(); sampleIdx++)
351 TH1D *divHist =
new TH1D(
352 Form(
"%s_%s_splitDiv_%i", paramName.c_str(),
man->
getFileLabel(extraFileIdx).c_str(),
354 Form(
"%s_%s_splitDiv", paramName.c_str(),
man->
getFileLabel(extraFileIdx).c_str()),
355 compLLH_main.GetNbinsX(), compLLH_main.GetBinLowEdge(1),
356 compLLH_main.GetBinLowEdge(compLLH_main.GetNbinsX() + 1));
357 divHist->Divide(
static_cast<TH1D*
>(compHistList->At(sampleIdx)),
358 static_cast<TH1D*
>(baselineHistList->At(sampleIdx)));
359 splitSamplesStackRatios->Add(divHist);
360 divHist->SetLineColor((
static_cast<TH1D*
>(compHistList->At(sampleIdx))->GetLineColor()));
363 canv->cd(2 + extraFileIdx);
373 canv->SaveAs(outputFileName.c_str());
376 delete baseSplitSamplesStack;
377 delete baseSplitSamplesLegend;
385 TCanvas *
canv =
new TCanvas(
"canv",
"", 1024, 1024);
386 gStyle->SetOptTitle(2);
388 TCanvas *splitSamplesCanv =
new TCanvas(
"splitSampCanv",
"", 4096 *
man->
getNFiles(), 4096);
391 TPad *LLHPad, *ratioPad;
394 LLHPad =
new TPad(
"LLHPad",
"LLHPad", 0.0,
ratioPlotSplit, 1.0, 1.0);
395 LLHPad->SetBottomMargin(0.0);
396 ratioPad =
new TPad(
"ratioPad",
"ratioPad", 0.0, 0.0, 1.0,
ratioPlotSplit);
397 ratioPad->SetTopMargin(0.0);
398 ratioPad->SetBottomMargin(0.3);
401 LLHPad =
new TPad(
"AllSampPad",
"AllSampPad", 0.0, 0.0, 1.0, 1.0);
402 ratioPad =
new TPad(
"AllSampRatioPad",
"AllSampRatioPad", 0.0, 0.0, 0.0, 0.0);
412 for( std::string par:
man->
getOption<std::vector<std::string>>(
"parameterTags")) std::cout << par <<
", ";
434 splitSamplesCanv, LLHPad, ratioPad);
447 if(
man !=
nullptr)
delete man;
452int main(
int argc,
char **argv) {
void SetMaCh3LoggerFormat()
Set messaging format of the logger.
void drawRatioStack(THStack *ratioCompStack)
int main(int argc, char **argv)
double sampleLabelThreshold
void makeLLHScanComparisons(std::string paramName, std::string LLHType, std::string outputFileName, TCanvas *canv, TPad *LLHPad, TPad *ratioPad)
MaCh3Plotting::PlottingManager * man
void makeSplitSampleLLHScanComparisons(std::string paramName, std::string outputFileName, TCanvas *canv, TPad *LLHPad, TPad *ratioPad)
void getSplitSampleStack(int fileIdx, std::string parameterName, TH1D LLH_allSams, std::vector< float > &cumSums, std::vector< bool > &drawLabel, THStack *sampleStack, TLegend *splitSamplesLegend, float baselineLLH_main=0.00001)
The main class to be used in plotting scripts.
const std::string getOutputName()
Get the straight up output file name with no bells or whistles, just the file extension.
void setExec(std::string execName)
Internally set the name of the executable that manager is being used in.
void parseInputs(int argc, char *const *argv)
Parse command line arguments.
const std::string getDrawOptions()
const std::string getFileLabel(int i)
const StyleManager & style()
Get the StyleManager contained within this PlottingManager, for doing style related things.
T getOption(std::string option)
Get a specific option from the config for this executable.
const InputManager & input()
Get the InputManager contained within this PlottingManager, for doing input related things.
std::string prettifyParamName(const std::string &origName) const
Convert hideous and vulgar internal parameter name into a beautiful presentable name.
void setPalette(int rootPlotStyle) const
Set the root colour palette to one of the default root pallettes as defined in (root docs)[https://ro...
std::string prettifySampleName(const std::string &origName) const
Convert hideous and vulgar internal sample name into a beautiful presentable name.