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);
72 float lastBinLLH = LLH_indivSam->GetBinContent(
nBins);
75 MACH3LOG_DEBUG(
" Last bin LLH = {} :: cumulative LLH = {}", lastBinLLH, cumSum);
76 MACH3LOG_DEBUG(
" LLH fraction = {} / {} = {}", LLH_indivSam->Integral(), LLH_main_integ, LLH_indivSam->Integral() / LLH_main_integ);
96 double stackMax = ratioCompStack->GetMaximum(
"NOSTACK");
97 double stackMin = ratioCompStack->GetMinimum(
"NOSTACK");
99 double stackLim = std::max(std::abs(1.0 - stackMax), std::abs(1.0 - stackMin));
101 ratioCompStack->SetMinimum(1.0 - 1.05 * stackLim);
102 ratioCompStack->SetMaximum(1.0 + 1.05 * stackLim);
109 ratioCompStack->GetXaxis()->GetLabelSize());
111 ratioCompStack->GetXaxis()->GetLabelSize());
112 ratioCompStack->GetXaxis()->SetTitle(
"Parameter Variation");
115 ratioCompStack->GetYaxis()->GetLabelSize());
117 ratioCompStack->GetYaxis()->GetLabelSize());
118 ratioCompStack->GetYaxis()->SetTitleOffset(
yTitleOffset);
119 ratioCompStack->GetYaxis()->SetNdivisions(5, 2, 0);
123 const std::string& LLHType,
124 const std::string& outputFileName,
125 const std::unique_ptr<TCanvas>&
canv,
126 const std::unique_ptr<TPad>& LLHPad,
127 const std::unique_ptr<TPad>& ratioPad) {
129 auto compStack = std::make_unique<THStack>(
"LLH_Stack",
"");
130 auto ratioCompStack = std::make_unique<THStack>(
"LLH_Ratio_Stack",
"");
131 auto legend = std::make_unique<TLegend>(0.3, 0.6, 0.7, 0.8);
135 LLH_main.SetStats(0);
137 LLH_main.SetLineColor(kBlack);
138 compStack->Add(&LLH_main);
141 int nBins = LLH_main.GetNbinsX();
144 for (
unsigned int extraFileIdx = 1; extraFileIdx <
man->
input().getNInputFiles(); extraFileIdx++)
146 int originalErrorLevel = gErrorIgnoreLevel;
147 gErrorIgnoreLevel = kFatal;
150 compHist->SetName(Form(
"LLHScan_%s_%s_%d", paramName.c_str(), LLHType.c_str(), extraFileIdx));
151 compHist->SetBit(kCanDelete);
152 gErrorIgnoreLevel = originalErrorLevel;
153 if (compHist->GetNbinsX() == 0)
157 compHist->SetLineColor(
158 TColor::GetColorPalette(floor(
static_cast<float>(extraFileIdx) * TColor::GetNumberOfColors() /
160 compHist->SetLineStyle(2 + extraFileIdx % 9);
163 TH1D *divHist =
static_cast<TH1D*
>(compHist->Clone(Form(
"RatioHist_%i", extraFileIdx)));
164 divHist->SetBit(kCanDelete);
169 divHist->Divide(compHist, &LLH_main);
170 ratioCompStack->Add(divHist);
174 compStack->Add(compHist);
175 legend->AddEntry(compHist,
man->
getFileLabel(extraFileIdx).c_str(),
"l");
187 compStack->GetXaxis()->SetTitle(
"Parameter Variation");
188 compStack->GetYaxis()->SetTitle(Form(
"-2LLH_{%s}", LLHType.c_str()));
205 TLine line = TLine();
206 line.SetLineColor(kBlack);
208 line.DrawLine(LLH_main.GetBinLowEdge(1), 1.0, LLH_main.GetBinLowEdge(
nBins + 1), 1.0);
212 canv->SaveAs(outputFileName.c_str());
216 const std::string& outputFileName,
217 const std::unique_ptr<TCanvas>&
canv,
218 const std::unique_ptr<TPad>& LLHPad,
219 const std::unique_ptr<TPad>& ratioPad) {
228 if (LLH_main.GetNbinsX() == 1)
230 MACH3LOG_DEBUG(
" Main LLH had only 1 bin, assuming it doesn't exist");
234 THStack *baseSplitSamplesStack =
new THStack(
235 paramName.c_str(), Form(
"%s - %s", paramName.c_str(),
man->
getFileLabel(0).c_str()));
236 TLegend *baseSplitSamplesLegend =
new TLegend(0.37, 0.475, 0.63, 0.9);
239 canv->cd(1)->SetGrid();
243 std::vector<float> cumSums;
244 std::vector<bool> drawLabel;
247 baseSplitSamplesLegend);
253 LLH_main.SetLineWidth(1);
255 baseSplitSamplesLegend->AddEntry(&LLH_main,
"All Samples",
"l");
258 baseSplitSamplesLegend->Draw();
260 TLatex *label =
new TLatex;
262 label->SetTextAlign(11);
263 label->SetTextAngle(-55);
264 label->SetTextSize(0.012);
267 for (uint i = 0; i <
man->
input().getTaggedSamples(
man->
getOption<std::vector<std::string>>(
"sampleTags")).size(); i++)
278 label->DrawLatex(LLH_main.GetBinLowEdge(LLH_main.GetNbinsX() + 1), cumSums[i],
284 for (
unsigned int extraFileIdx = 1; extraFileIdx <
man->
getNFiles(); extraFileIdx++)
286 MACH3LOG_DEBUG(
" - Adding plot for additional file {}", extraFileIdx);
287 canv->cd(1 + extraFileIdx);
289 std::vector<float> extraCumSums;
290 std::vector<bool> extraDrawLabel;
292 THStack *splitSamplesStack =
293 new THStack(paramName.c_str(),
294 Form(
"%s - %s", paramName.c_str(),
man->
getFileLabel(extraFileIdx).c_str()));
295 TLegend *splitSamplesLegend =
new TLegend(0.37, 0.475, 0.63, 0.9);
297 splitSamplesStack->SetBit(kCanDelete);
298 splitSamplesLegend->SetBit(kCanDelete);
301 if (compLLH_main.GetNbinsX() == 1)
303 delete splitSamplesStack;
304 delete splitSamplesLegend;
313 splitSamplesStack, splitSamplesLegend, LLH_main.Integral());
316 splitSamplesStack, splitSamplesLegend);
325 splitSamplesStack->GetXaxis()->SetTitle(
"Parameter Variation");
326 splitSamplesStack->GetYaxis()->SetTitle(
"-2LLH_{sam}");
328 splitSamplesStack->SetMaximum(baseSplitSamplesStack->GetMaximum());
333 compLLH_main.SetLineColor(kBlack);
334 splitSamplesLegend->AddEntry(&compLLH_main,
"All Samples",
"l");
336 splitSamplesLegend->Draw();
339 for (uint i = 0; i <
man->
input().getTaggedSamples(
man->
getOption<std::vector<std::string>>(
"sampleTags")).size(); i++)
344 label->DrawLatex(compLLH_main.GetBinLowEdge(compLLH_main.GetNbinsX() + 1), extraCumSums[i],
350 THStack *splitSamplesStackRatios =
new THStack(paramName.c_str(),
"");
352 TList *baselineHistList = baseSplitSamplesStack->GetHists();
353 TList *compHistList = splitSamplesStack->GetHists();
355 for (uint sampleIdx = 0; sampleIdx <
man->
input().getTaggedSamples(
man->
getOption<std::vector<std::string>>(
"sampleTags")).size(); sampleIdx++)
357 TH1D *divHist =
new TH1D(
358 Form(
"%s_%s_splitDiv_%i", paramName.c_str(),
man->
getFileLabel(extraFileIdx).c_str(),
360 Form(
"%s_%s_splitDiv", paramName.c_str(),
man->
getFileLabel(extraFileIdx).c_str()),
361 compLLH_main.GetNbinsX(), compLLH_main.GetBinLowEdge(1),
362 compLLH_main.GetBinLowEdge(compLLH_main.GetNbinsX() + 1));
363 divHist->Divide(
static_cast<TH1D*
>(compHistList->At(sampleIdx)),
364 static_cast<TH1D*
>(baselineHistList->At(sampleIdx)));
365 splitSamplesStackRatios->Add(divHist);
366 divHist->SetLineColor((
static_cast<TH1D*
>(compHistList->At(sampleIdx))->GetLineColor()));
369 canv->cd(2 + extraFileIdx);
379 canv->SaveAs(outputFileName.c_str());
382 delete baseSplitSamplesStack;
383 delete baseSplitSamplesLegend;
390 auto canv = std::make_unique<TCanvas>(
"canv",
"", 1024, 1024);
391 gStyle->SetOptTitle(2);
393 auto splitSamplesCanv = std::make_unique<TCanvas>(
"splitSampCanv",
"", 4096 *
man->
getNFiles(), 4096);
396 std::unique_ptr<TPad> LLHPad, ratioPad;
399 LLHPad = std::make_unique<TPad>(
"LLHPad",
"LLHPad", 0.0,
ratioPlotSplit, 1.0, 1.0);
400 LLHPad->SetBottomMargin(0.0);
401 ratioPad = std::make_unique<TPad>(
"ratioPad",
"ratioPad", 0.0, 0.0, 1.0,
ratioPlotSplit);
402 ratioPad->SetTopMargin(0.0);
403 ratioPad->SetBottomMargin(0.3);
405 LLHPad = std::make_unique<TPad>(
"AllSampPad",
"AllSampPad", 0.0, 0.0, 1.0, 1.0);
406 ratioPad = std::make_unique<TPad>(
"AllSampRatioPad",
"AllSampRatioPad", 0.0, 0.0, 0.0, 0.0);
416 for( std::string par:
man->
getOption<std::vector<std::string>>(
"parameterTags")) std::cout << par <<
", ";
438 splitSamplesCanv, LLHPad, ratioPad);
448 if(
man !=
nullptr)
delete man;
453 int 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 makeSplitSampleLLHScanComparisons(const std::string ¶mName, const std::string &outputFileName, const std::unique_ptr< TCanvas > &canv, const std::unique_ptr< TPad > &LLHPad, const std::unique_ptr< TPad > &ratioPad)
MaCh3Plotting::PlottingManager * man
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)
void makeLLHScanComparisons(const std::string ¶mName, const std::string &LLHType, const std::string &outputFileName, const std::unique_ptr< TCanvas > &canv, const std::unique_ptr< TPad > &LLHPad, const std::unique_ptr< TPad > &ratioPad)
The main class to be used in plotting scripts.
void setExec(const std::string &execName)
Internally set the name of the executable that manager is being used in.
const std::string getFileLabel(int i) const
const InputManager & input() const
Get the InputManager contained within this PlottingManager, for doing input related things.
const std::string getOutputName() const
Get the straight up output file name with no bells or whistles, just the file extension.
void parseInputs(int argc, char *const *argv)
Parse command line arguments.
bool getSplitBySample() const
T getOption(const std::string &option)
Get a specific option from the config for this executable.
const StyleManager & style() const
Get the StyleManager contained within this PlottingManager, for doing style related things.
const std::string getDrawOptions() const
bool getPlotRatios() const
std::string prettifyParamName(const std::string &origName) const
Convert hideous and vulgar internal parameter name into a beautiful presentable name.
std::string prettifySampleName(const std::string &origName) const
Convert hideous and vulgar internal sample name into a beautiful presentable name.
void setPalette(const int rootPlotStyle) const
Set the root colour palette to one of the default root pallettes as defined in (root docs)[https://ro...
void MaCh3Welcome()
KS: Prints welcome message with MaCh3 logo.