242 TPad* LLHPad =
nullptr;
243 TPad* ratioPad =
nullptr;
248 canv->Divide(
PlotMan->getNFiles());
251 TH1D LLH_main =
PlotMan->input().getLLHScan_TH1D(0, paramName,
"sample");
252 if (LLH_main.GetNbinsX() == 1)
254 MACH3LOG_DEBUG(
" Main LLH had only 1 bin, assuming it doesn't exist");
258 auto baseSplitSamplesStack = std::make_unique<THStack>(
259 paramName.c_str(), Form(
"%s - %s", paramName.c_str(),
PlotMan->getFileLabel(0).c_str()));
261 auto baseSplitSamplesLegend = std::make_unique<TLegend>(0.37, 0.475, 0.63, 0.9);
264 canv->cd(1)->SetGrid();
268 canv->cd(1)->SetLeftMargin(0.15);
269 std::vector<float> cumSums;
270 std::vector<bool> drawLabel;
272 getSplitSampleStack(0, paramName, LLH_main, cumSums, drawLabel, baseSplitSamplesStack.get(),
273 baseSplitSamplesLegend.get());
274 baseSplitSamplesStack->Draw(
PlotMan->getDrawOptions().c_str());
276 baseSplitSamplesStack->GetYaxis()->SetTitle(
"-2LLH_{sam}");
277 if (
PlotMan->getPlotRatios() ==
false) baseSplitSamplesStack->GetXaxis()->SetTitle(
"Parameter Variation");
281 bool totalOnSplitPlots =
PlotMan->getOption<
bool>(
"totalOnSplitPlots");
282 if (totalOnSplitPlots)
284 LLH_main.SetLineWidth(1);
285 LLH_main.Draw(Form(
"same%s",
PlotMan->getDrawOptions().c_str()));
286 baseSplitSamplesLegend->AddEntry(&LLH_main,
"All Samples",
"l");
289 baseSplitSamplesLegend->Draw();
291 auto label = std::make_unique<TLatex>();
293 label->SetTextAlign(11);
294 label->SetTextAngle(-55);
295 label->SetTextSize(0.012);
296 const auto& SampleTags =
PlotMan->getOption<std::vector<std::string>>(
"sampleTags");
299 for (uint i = 0; i <
PlotMan->input().getTaggedSamples(SampleTags).size(); i++)
302 std::string sampName =
PlotMan->input().getTaggedSamples(SampleTags)[i];
310 label->DrawLatex(LLH_main.GetBinLowEdge(LLH_main.GetNbinsX() + 1), cumSums[i],
311 Form(
"#leftarrow%s",
PlotMan->style().prettifySampleName(sampName).c_str()));
316 for (
unsigned int extraFileIdx = 1; extraFileIdx <
PlotMan->getNFiles(); extraFileIdx++)
318 MACH3LOG_DEBUG(
" - Adding plot for additional file {}", extraFileIdx);
319 canv->cd(1 + extraFileIdx);
321 std::vector<float> extraCumSums;
322 std::vector<bool> extraDrawLabel;
324 THStack *splitSamplesStack =
325 new THStack(paramName.c_str(),
326 Form(
"%s - %s", paramName.c_str(),
PlotMan->getFileLabel(extraFileIdx).c_str()));
328 auto splitSamplesLegend = std::make_unique<TLegend>(0.37, 0.475, 0.63, 0.9);
329 splitSamplesStack->SetBit(kCanDelete);
330 splitSamplesLegend->SetBit(kCanDelete);
332 int originalErrorLevel = gErrorIgnoreLevel;
333 gErrorIgnoreLevel = kFatal;
334 TH1D compLLH_main =
PlotMan->input().getLLHScan_TH1D(extraFileIdx, paramName,
"sample");
335 compLLH_main.SetName((compLLH_main.GetName() + std::string(
"_file_") + extraFileIdx).Data());
336 gErrorIgnoreLevel = originalErrorLevel;
337 if (compLLH_main.GetNbinsX() == 1)
339 delete splitSamplesStack;
342 bool sameAxis =
PlotMan->getOption<
bool>(
"sameAxis");
348 splitSamplesStack, splitSamplesLegend.get(), LLH_main.Integral());
351 splitSamplesStack, splitSamplesLegend.get());
359 splitSamplesStack->Draw(
PlotMan->getDrawOptions().c_str());
361 splitSamplesStack->SetMaximum(baseSplitSamplesStack->GetMaximum());
363 if (totalOnSplitPlots)
365 compLLH_main.Draw(Form(
"same%s",
PlotMan->getDrawOptions().c_str()));
366 compLLH_main.SetLineColor(kBlack);
367 splitSamplesLegend->AddEntry(&compLLH_main,
"All Samples",
"l");
369 splitSamplesLegend->Draw();
372 baseSplitSamplesStack->GetYaxis()->SetTitle(
"-2LLH_{sam}");
373 if (
PlotMan->getPlotRatios() ==
false) baseSplitSamplesStack->GetXaxis()->SetTitle(
"Parameter Variation");
378 for (uint i = 0; i <
PlotMan->input().getTaggedSamples(
PlotMan->getOption<std::vector<std::string>>(
"sampleTags")).size(); i++)
380 std::string sampName =
PlotMan->input().getTaggedSamples(
PlotMan->getOption<std::vector<std::string>>(
"sampleTags"))[i];
383 label->DrawLatex(compLLH_main.GetBinLowEdge(compLLH_main.GetNbinsX() + 1), extraCumSums[i],
384 Form(
"#leftarrow%s",
PlotMan->style().prettifySampleName(sampName).c_str()));
389 THStack *splitSamplesStackRatios =
new THStack(paramName.c_str(),
"");
391 TList *baselineHistList = baseSplitSamplesStack->GetHists();
392 TList *compHistList = splitSamplesStack->GetHists();
393 for (uint sampleIdx = 0; sampleIdx <
PlotMan->input().getTaggedSamples(
PlotMan->getOption<std::vector<std::string>>(
"sampleTags")).size(); sampleIdx++)
395 TH1D *divHist =
new TH1D(
396 Form(
"%s_%s_splitDiv_%i", paramName.c_str(),
PlotMan->getFileLabel(extraFileIdx).c_str(),
398 Form(
"%s_%s_splitDiv", paramName.c_str(),
PlotMan->getFileLabel(extraFileIdx).c_str()),
399 compLLH_main.GetNbinsX(), compLLH_main.GetBinLowEdge(1),
400 compLLH_main.GetBinLowEdge(compLLH_main.GetNbinsX() + 1));
401 divHist->Divide(
static_cast<TH1D*
>(compHistList->At(sampleIdx)),
402 static_cast<TH1D*
>(baselineHistList->At(sampleIdx)));
403 splitSamplesStackRatios->Add(divHist);
404 divHist->SetLineColor((
static_cast<TH1D*
>(compHistList->At(sampleIdx))->GetLineColor()));
407 canv->cd(2 + extraFileIdx);
415 canv->SaveAs(outputFileName.c_str());
void getSplitSampleStack(int fileIdx, const std::string ¶meterName, const TH1D &LLH_allSams, std::vector< float > &cumSums, std::vector< bool > &drawLabel, THStack *sampleStack, TLegend *splitSamplesLegend, float baselineLLH_main=0.00001)