38 std::string userConfigRaw, std::string binning)
43 TApplication app(
"app",
nullptr,
nullptr);
45 std::string parameter =
"";
46 std::string resultsHnSparseName =
"results";
47 std::string parameterAxisName =
"parameters";
48 std::string inputFile;
52 TH1::AddDirectory(kFALSE);
55 if (!
Core::LoadConfig(config, userConfig, environment, userConfigRaw, binning))
return 1;
58 bool histogramEnabled =
false;
59 if (!gCfg[
"ndmspc"][
"data"][
"histogram"][
"enabled"].is_null() ||
60 gCfg[
"ndmspc"][
"data"][
"histogram"][
"enabled"].is_boolean())
61 histogramEnabled = gCfg[
"ndmspc"][
"data"][
"histogram"][
"enabled"].get<
bool>();
64 std::string hostUrl = gCfg[
"ndmspc"][
"output"][
"host"].get<std::string>();
71 if (!hostUrl.empty()) path = hostUrl +
"/";
72 path += gCfg[
"ndmspc"][
"output"][
"dir"].get<std::string>() +
"/";
74 path += environment +
"/";
77 for (
auto & cut : gCfg[
"ndmspc"][
"cuts"]) {
78 if (cut[
"enabled"].is_boolean() && cut[
"enabled"].get<
bool>() ==
false)
continue;
89 std::string fromFile =
"content.root";
91 fromFile =
"merged_" + std::to_string(level) +
".root";
94 if (gCfg[
"ndmspc"][
"data"][
"histogram"][
"enabled"].get<bool>()) {
97 auto & bin = gCfg[
"ndmspc"][
"result"][
"data"][
"defaults"];
99 int binsize = bin.size();
100 if (level < 0) level = binsize + 1;
101 if (level > binsize) {
102 path.erase(path.size() - 5, path.size());
104 int iLevel = binsize - level + 1;
105 for (
auto & binElement : bin) {
107 if (iLevel <= 0)
break;
108 binStr += std::to_string(binElement.get<Int_t>()) +
"/";
111 if (binStr.empty()) {
112 fromFile =
"results.root";
122 if (inputFile.empty()) inputFile = path + fromFile;
124 Printf(
"Opening file '%s' ...", inputFile.c_str());
125 fIn = TFile::Open(inputFile.c_str());
127 Printf(
"Error: Input file '%s' was not found !!!", inputFile.c_str());
134 Printf(
"Error: Results THnSparse histogram '%s' was not found !!!", resultsHnSparseName.c_str());
140 Printf(
"Error: 'mapAxesType' histogram was not found !!!");
146 int idxDefault = gCfg[
"ndmspc"][
"result"][
"parameters"][
"default"].get<
int>();
147 fCurrentParameterName = gCfg[
"ndmspc"][
"result"][
"parameters"][
"labels"][idxDefault].get<std::string>();
151 TAxis * a = (TAxis *)
fResultHnSparse->GetListOfAxes()->FindObject(parameterAxisName.c_str());
158 Printf(
"Could not find bin label '%s' in '%s' axis !!!", parameterAxisName.c_str(),
fCurrentParameterName.c_str());
168 int pointsSize = gCfg[
"ndmspc"][
"result"][
"axes"].size() + 1;
169 if (histogramEnabled) pointsSize += gCfg[
"ndmspc"][
"result"][
"data"][
"defaults"].size() + 1;
175 json axesArray = gCfg[
"ndmspc"][
"result"][
"axes"];
177 bool isDataSys =
true;
178 bool hasDataMc =
false;
179 for (
int iAxis = iAxisStart; iAxis <
fResultHnSparse->GetNdimensions(); iAxis++) {
181 std::string axisType =
fMapAxesType->GetXaxis()->GetBinLabel(iAxis + 1);
183 if (!hasDataMc) hasDataMc = !axisType.compare(
"data");
184 if (!axisType.compare(
"proj")) {
188 else if (!axisType.compare(
"sys-in") || !axisType.compare(
"data")) {
190 idTmp = iAxis - iAxisStart;
192 idBin = gCfg[
"ndmspc"][
"result"][
"data"][
"defaults"][idTmp].get<
int>();
196 if (histogramEnabled) idTmp -= gCfg[
"ndmspc"][
"result"][
"data"][
"defaults"].size();
198 idBin = axesArray[idTmp][
"default"].get<
int>() + 1;
206 std::string l = a->GetBinLabel(idBin);
208 fMapTitle += std::to_string(a->GetBinLowEdge(idBin));
224 auto CanvasMain =
new TCanvas(
"CanvasMain",
"CanvasMain", 0, 0, 500, 800);
225 CanvasMain->Divide(1, 2);
227 CanvasMain->Connect(
"Highlighted(TVirtualPad*,TObject*,Int_t,Int_t)",
"Ndmspc::PointDraw",
this,
228 "HighlightMain(TVirtualPad*,TObject*,Int_t,Int_t)");
233 TH1 * hParamMain =
new TH1S(
"hParamMain",
"Param Main",
fResultHnSparse->GetAxis(0)->GetNbins(), 0,
237 hParamMain->GetXaxis()->SetBinLabel(i + 1,
fResultHnSparse->GetAxis(0)->GetBinLabel(i + 1));
247 hParamMain->SetStats(0);
251 hParamMain->SetHighlight();
260 fData.push_back(
"x");
266 for (
auto & b1 : gCfg[
"ndmspc"][
"data"][
"histogram"][
"bins"]) {
267 std::vector<int> b = b1;
276 v += std::to_string(b[2]) +
"|";
277 v += std::to_string(b[3]);
279 fMcId.push_back(b[1]);
281 else if (b[1] == 1) {
285 v += std::to_string(b[2]) +
"|";
286 v += std::to_string(b[3]);
293 TH1 * hDataMc =
new TH2S(
"hDataMc",
"Data vs. MC",
fData.size(), 0,
fData.size(),
fMc.size(), 0,
fMc.size());
297 hDataMc->SetStats(0);
298 for (
long unsigned int i = 0; i <
fData.size(); i++) {
299 hDataMc->GetXaxis()->SetBinLabel(i + 1,
fData[i].c_str());
301 for (
long unsigned int i = 0; i <
fMc.size(); i++) {
302 hDataMc->GetYaxis()->SetBinLabel(i + 1,
fMc[i].c_str());
305 for (
int i = 1; i < hDataMc->GetNbinsX() + 1; i++)
306 for (
int j = 1; j < hDataMc->GetNbinsY() + 1; j++) {
307 if (i == 1 && j == 1)
continue;
308 if (i == 1 || j == 1) hDataMc->SetBinContent(i, j, 1);
314 hDataMc->Draw(
"col");
315 hDataMc->SetHighlight();
319 CanvasMain->Modified();
320 CanvasMain->Update();
434 auto CanvasProjectionMap = (TCanvas *)gROOT->GetListOfCanvases()->FindObject(
"CanvasProjectionMap");
435 if (!CanvasProjectionMap) {
436 CanvasProjectionMap =
new TCanvas(
"CanvasProjectionMap",
"CanvasProjectionMap", 505, 0, 400, 400);
439 CanvasProjectionMap->Connect(
"Highlighted(TVirtualPad*,TObject*,Int_t,Int_t)",
"Ndmspc::PointDraw",
this,
440 "HighlightProjectionPoint(TVirtualPad*,TObject*,Int_t,Int_t)");
443 if (!ignoreMapping) {
446 CanvasProjectionMap->cd();
456 CanvasProjectionMap->Modified();
457 CanvasProjectionMap->Update();
461 CanvasProjectionMap->cd();
468 CanvasProjectionMap->Modified();
469 CanvasProjectionMap->Update();
473 auto CanvasProjections = (TCanvas *)gROOT->GetListOfCanvases()->FindObject(
"CanvasProjections");
474 if (!CanvasProjections) {
475 CanvasProjections =
new TCanvas(
"CanvasProjections",
"CanvasProjections", 505, 445, 400, 350);
483 CanvasProjections->cd(1);
495 CanvasProjections->cd(2);
508 CanvasProjections->Modified();
509 CanvasProjections->Update();
554 TH2 * hDataMc = (TH2 *)obj;
555 if (!hDataMc)
return;
557 if (hDataMc->GetBinContent(xBin, yBin) <= 0) {
558 hDataMc->SetTitle(
"Data vs. MC");
564 std::string data = hDataMc->GetXaxis()->GetBinLabel(xBin);
565 std::string mc = hDataMc->GetYaxis()->GetBinLabel(yBin);
566 hDataMc->SetTitle(TString::Format(
"%s vs %s", data.c_str(), mc.c_str()).Data());
567 Printf(
"data=%s[%d] mc=%s[%d]", data.c_str(), xBin, mc.c_str(), yBin);
571 if (xBin == 1 && yBin > 1) {
573 ptrdiff_t pos = distance(
fMc.begin(), find(
fMc.begin(),
fMc.end(), mc));
579 else if (yBin == 1 && xBin > 1) {
581 ptrdiff_t pos = distance(
fData.begin(), find(
fData.begin(),
fData.end(), data));