ndmspc 0.20250304.0
Loading...
Searching...
No Matches
PointDraw.cxx
1#include <TString.h>
2#include <TApplication.h>
3#include <TCanvas.h>
4#include <TRootCanvas.h>
5#include <TROOT.h>
6#include <TF1.h>
7#include <TH2.h>
8#include <TH1D.h>
9#include <TCanvas.h>
10#include <string>
11#include "PointDraw.h"
12#include "Core.h"
13#include "Rtypes.h"
14#include "Utils.h"
15
17ClassImp(Ndmspc::PointDraw);
19
20namespace Ndmspc {
21std::string PointDraw::fgEnvironment = "";
23
24{
28}
29
36
37int PointDraw::DrawPoint(int level, std::string config, std::string userConfig, std::string environment,
38 std::string userConfigRaw, std::string binning)
39{
43 TApplication app("app", nullptr, nullptr);
44
45 std::string parameter = "";
46 std::string resultsHnSparseName = "results";
47 std::string parameterAxisName = "parameters";
48 std::string inputFile;
49
50 fCurrentParameterName = parameter;
51
52 TH1::AddDirectory(kFALSE);
53
54 // INFO: Done via Results::LoadConfig
55 if (!Core::LoadConfig(config, userConfig, environment, userConfigRaw, binning)) return 1;
56
57 // INFO: Done via Results::LoadConfig
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>();
62
63 // TODO: Results path
64 std::string hostUrl = gCfg["ndmspc"]["output"]["host"].get<std::string>();
65 // if (hostUrl.empty()) {
66 // Printf("Error: gCfg[ndmspc][output][host] is empty!!!");
67 // return 2;
68 // }
69
70 std::string path;
71 if (!hostUrl.empty()) path = hostUrl + "/";
72 path += gCfg["ndmspc"]["output"]["dir"].get<std::string>() + "/";
73
74 path += environment + "/";
75
76 // std::string rebinStr = "";
77 for (auto & cut : gCfg["ndmspc"]["cuts"]) {
78 if (cut["enabled"].is_boolean() && cut["enabled"].get<bool>() == false) continue;
79 // path += cut["axis"].get<std::string>() + "_";
80 // rebinStr += std::to_string(cut["rebin"].get<Int_t>()) + "_";
81 fNDimCuts++;
82 }
83 //
84 // path[path.size() - 1] = '/';
85 // path += rebinStr;
86 // path[path.size() - 1] = '/';
87 path += Utils::GetCutsPath(gCfg["ndmspc"]["cuts"]);
88
89 std::string fromFile = "content.root";
90 if (level > 0) {
91 fromFile = "merged_" + std::to_string(level) + ".root";
92 }
93 // std::vector<std::string> binsArray;
94 if (gCfg["ndmspc"]["data"]["histogram"]["enabled"].get<bool>()) {
95 path += "bins/";
96 std::string binStr;
97 auto & bin = gCfg["ndmspc"]["result"]["data"]["defaults"];
98 binStr = "";
99 int binsize = bin.size();
100 if (level < 0) level = binsize + 1;
101 if (level > binsize) {
102 path.erase(path.size() - 5, path.size());
103 }
104 int iLevel = binsize - level + 1;
105 for (auto & binElement : bin) {
106
107 if (iLevel <= 0) break;
108 binStr += std::to_string(binElement.get<Int_t>()) + "/";
109 iLevel--;
110 }
111 if (binStr.empty()) {
112 fromFile = "results.root";
113 }
114 else {
115 path += binStr;
116 }
117 }
118 else {
119 path += "bins/";
120 }
121
122 if (inputFile.empty()) inputFile = path + fromFile;
123
124 Printf("Opening file '%s' ...", inputFile.c_str());
125 fIn = TFile::Open(inputFile.c_str());
126 if (!fIn) {
127 Printf("Error: Input file '%s' was not found !!!", inputFile.c_str());
128 return 2;
129 }
130
131 fResultHnSparse = (THnSparse *)fIn->Get(resultsHnSparseName.c_str());
132
133 if (!fResultHnSparse) {
134 Printf("Error: Results THnSparse histogram '%s' was not found !!!", resultsHnSparseName.c_str());
135 return 3;
136 }
137
138 fMapAxesType = (TH1 *)fIn->Get("mapAxesType");
139 if (!fMapAxesType) {
140 Printf("Error: 'mapAxesType' histogram was not found !!!");
141 return 4;
142 }
143 for (int iDim = 0; iDim < fResultHnSparse->GetNdimensions(); iDim++) fParameterPoint.push_back(-1);
144
145 if (fCurrentParameterName.empty()) {
146 int idxDefault = gCfg["ndmspc"]["result"]["parameters"]["default"].get<int>();
147 fCurrentParameterName = gCfg["ndmspc"]["result"]["parameters"]["labels"][idxDefault].get<std::string>();
148 }
149 Printf("Parameter: %s", fCurrentParameterName.c_str());
150
151 TAxis * a = (TAxis *)fResultHnSparse->GetListOfAxes()->FindObject(parameterAxisName.c_str());
152 if (a == nullptr) {
153 return 5;
154 }
155 Int_t id = fResultHnSparse->GetListOfAxes()->IndexOf(a);
156 Int_t idBin = a->FindBin(fCurrentParameterName.c_str());
157 if (idBin < 0) {
158 Printf("Could not find bin label '%s' in '%s' axis !!!", parameterAxisName.c_str(), fCurrentParameterName.c_str());
159 return 6;
160 }
161
162 // Printf("Axis: %d [parameters] SetRange(%d,%d)", id, idBin, idBin);
163 fParameterPoint[id] = idBin;
164 fResultHnSparse->GetAxis(id)->SetRange(idBin, idBin);
165
166 // int nAxisX = fResultHnSparse->GetNdimensions();
167 // int nAxisY = fResultHnSparse->GetAxis(0)->GetNbins();
168 int pointsSize = gCfg["ndmspc"]["result"]["axes"].size() + 1;
169 if (histogramEnabled) pointsSize += gCfg["ndmspc"]["result"]["data"]["defaults"].size() + 1;
170 // int points[pointsSize];
171 // int iPoint = 0;
172 // points[iPoint++] = nAxisY;
173 int iAxisStart = 1;
175 json axesArray = gCfg["ndmspc"]["result"]["axes"];
176 int idTmp;
177 bool isDataSys = true;
178 bool hasDataMc = false;
179 for (int iAxis = iAxisStart; iAxis < fResultHnSparse->GetNdimensions(); iAxis++) {
180 idBin = 1;
181 std::string axisType = fMapAxesType->GetXaxis()->GetBinLabel(iAxis + 1);
182 // Printf("Axis: %d [%s]", iAxis, axisType.c_str());
183 if (!hasDataMc) hasDataMc = !axisType.compare("data");
184 if (!axisType.compare("proj")) {
185 isDataSys = false;
186 fProjectionAxes.push_back(iAxis);
187 }
188 else if (!axisType.compare("sys-in") || !axisType.compare("data")) {
189 if (isDataSys) {
190 idTmp = iAxis - iAxisStart;
191 // Printf("%d %d %d", iAxis, iAxisStart, idTmp);
192 idBin = gCfg["ndmspc"]["result"]["data"]["defaults"][idTmp].get<int>();
193 }
194 else {
195 idTmp = iAxis - iAxisStart - fNDimCuts;
196 if (histogramEnabled) idTmp -= gCfg["ndmspc"]["result"]["data"]["defaults"].size();
197 // Printf("%d %s", idTmp, axesArray.dump().c_str());
198 idBin = axesArray[idTmp]["default"].get<int>() + 1;
199 }
200 }
201 a = (TAxis *)fResultHnSparse->GetAxis(iAxis);
202 // Printf("Axis: %d [%s][%s] SetRange(%d,%d)", iAxis, axisType.c_str(), a->GetName(), idBin, idBin);
203 // points[iAxis] = a->GetNbins();
204 fParameterPoint[iAxis] = idBin;
205 fResultHnSparse->GetAxis(iAxis)->SetRange(idBin, idBin);
206 std::string l = a->GetBinLabel(idBin);
207 if (l.empty()) {
208 fMapTitle += std::to_string(a->GetBinLowEdge(idBin));
209 }
210 else {
211 fMapTitle += l;
212 }
213 fMapTitle += " ";
214 }
215 fMapTitle[fMapTitle.size() - 1] = ']';
216
217 // for (auto & p : fParameterPoint) {
218 // printf("%d ", p);
219 // }
220 // printf("\n");
221
222 // Printf("fMapTitle='%s'", fMapTitle.c_str());
223
224 auto CanvasMain = new TCanvas("CanvasMain", "CanvasMain", 0, 0, 500, 800);
225 CanvasMain->Divide(1, 2);
226 /*CanvasMain->HighlightConnect("HighlightMain(TVirtualPad*,TObject*,Int_t,Int_t)");*/
227 CanvasMain->Connect("Highlighted(TVirtualPad*,TObject*,Int_t,Int_t)", "Ndmspc::PointDraw", this,
228 "HighlightMain(TVirtualPad*,TObject*,Int_t,Int_t)");
229
230 // // handle systematics
231 // // Printf("nAxisX=%d nAxisY=%d", nAxisX, nAxisY);
232 CanvasMain->cd(1);
233 TH1 * hParamMain = new TH1S("hParamMain", "Param Main", fResultHnSparse->GetAxis(0)->GetNbins(), 0,
234 fResultHnSparse->GetAxis(0)->GetNbins());
235
236 for (int i = 0; i < fResultHnSparse->GetAxis(0)->GetNbins(); i++) {
237 hParamMain->GetXaxis()->SetBinLabel(i + 1, fResultHnSparse->GetAxis(0)->GetBinLabel(i + 1));
238 // hParamMain->SetBinContent(i + 1, 1, 1);
239 }
240
241 // for (int i = 0; i < nAxisX; i++) {
242 // hParamMain->GetXaxis()->SetBinLabel(i + 1, fResultHnSparse->GetAxis(i)->GetName());
243 // for (int j = 0; j < points[i]; j++) {
244 // hParamMain->SetBinContent(i + 1, j + 1, 1);
245 // }
246 // }
247 hParamMain->SetStats(0);
248 // hParamMain->SetLabelSize(0.07);
249 // hParamMain->Print();
250 hParamMain->Draw();
251 hParamMain->SetHighlight();
252
253 CanvasMain->cd(2);
254 if (hasDataMc) {
255 fResultHnSparse->GetAxis(1)->SetRange();
256 fResultHnSparse->GetAxis(2)->SetRange();
257 fDataId.clear();
258 fDataId.push_back(-1);
259 fData.clear();
260 fData.push_back("x");
261 fMcId.clear();
262 fMcId.push_back(-1);
263
264 fMc.clear();
265 fMc.push_back("x");
266 for (auto & b1 : gCfg["ndmspc"]["data"]["histogram"]["bins"]) {
267 std::vector<int> b = b1;
268 // Printf("b1=[%d(%s),%d(%s),%d(%s),%d(%s)] ", b[0], fResultHnSparse->GetAxis(1)->GetBinLabel(b[0]), b[1],
269 // fResultHnSparse->GetAxis(2)->GetBinLabel(b[1]), b[2], fResultHnSparse->GetAxis(3)->GetBinLabel(b[2]),
270 // b[3], fResultHnSparse->GetAxis(4)->GetBinLabel(b[3]));
271 std::string v;
272 if (b[0] == 1) {
273 // mc
274 v += fResultHnSparse->GetAxis(2)->GetBinLabel(b[1]);
275 v += "|";
276 v += std::to_string(b[2]) + "|";
277 v += std::to_string(b[3]);
278 fMc.push_back(v);
279 fMcId.push_back(b[1]);
280 }
281 else if (b[1] == 1) {
282 // data
283 v += fResultHnSparse->GetAxis(1)->GetBinLabel(b[0]);
284 v += "|";
285 v += std::to_string(b[2]) + "|";
286 v += std::to_string(b[3]);
287 fData.push_back(v);
288 fDataId.push_back(b[0]);
289 }
290 // Printf("%s", v.c_str());
291 }
292 // Printf("%ld %ld", fData.size(), fMc.size());
293 TH1 * hDataMc = new TH2S("hDataMc", "Data vs. MC", fData.size(), 0, fData.size(), fMc.size(), 0, fMc.size());
294
295 /*TH2 * hDataMc = fResultHnSparse->Projection(2, 1, "O");*/
296 /*hDataMc->SetNameTitle("hDataMc", "Data vs. MC");*/
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());
300 }
301 for (long unsigned int i = 0; i < fMc.size(); i++) {
302 hDataMc->GetYaxis()->SetBinLabel(i + 1, fMc[i].c_str());
303 }
304
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);
309 }
310
311 // hDataMc->Reset();
312 // hParamMain->SetBinContent(i + 1, j + 1, 1);
313
314 hDataMc->Draw("col");
315 hDataMc->SetHighlight();
316 }
317
319 CanvasMain->Modified();
320 CanvasMain->Update();
321
322 app.Run();
323 return 0;
324}
325
327{
331 Printf("DrawUser : Getting '%s' ...", fCurrentContentPath.c_str());
332 auto CanvasUser = (TCanvas *)gROOT->GetListOfCanvases()->FindObject("CanvasUser");
333 if (!CanvasUser) {
334 CanvasUser = new TCanvas("CanvasUser", "CanvasUser", 910, 0, 400, 400);
335 // Printf("CanvasUser");
336 CanvasUser->Divide(2, 2);
337 // CanvasUser->HighlightConnect("HighlightProj(TVirtualPad*,TObject*,Int_t,Int_t)");
338 }
339 // fCurrentContentPath += "hPeak";
340 TH1 * hSigBg = (TH1 *)fIn->Get(TString::Format("%s/hSigBg", fCurrentContentPath.c_str()));
341 TH1 * hBg = (TH1 *)fIn->Get(TString::Format("%s/hBg", fCurrentContentPath.c_str()));
342 TH1 * hBgNorm = (TH1 *)fIn->Get(TString::Format("%s/hBgNorm", fCurrentContentPath.c_str()));
343 TH1 * hPeak = (TH1 *)fIn->Get(TString::Format("%s/hPeak", fCurrentContentPath.c_str()));
344 if (!hPeak) {
345 CanvasUser->Clear("D");
346 CanvasUser->Modified();
347 CanvasUser->Update();
348 // gROOT->GetListOfCanvases()->Remove(CanvasUser);
349 // SafeDelete(CanvasUser);
350 return;
351 }
352
353 if (hBg) {
354 hBg->SetLineColor(kViolet);
355 hBg->SetMarkerColor(kViolet);
356 }
357 if (hBgNorm) {
358 hBgNorm->SetLineColor(kGreen);
359 hBgNorm->SetMarkerColor(kGreen);
360 }
361
362 CanvasUser->cd(1);
363 if (hSigBg) hSigBg->Draw();
364 if (hBg) hBg->Draw("SAME");
365 CanvasUser->cd(2);
366 if (hSigBg) hSigBg->Draw();
367 if (hBgNorm) hBgNorm->Draw("SAME");
368 CanvasUser->cd(3);
369 if (hPeak) hPeak->Draw();
370 CanvasUser->cd(4);
371 if (hPeak) {
372
373 TF1 * funSignal = (TF1 *)hPeak->GetListOfFunctions()->At(0);
374 if (funSignal) {
375 funSignal->Draw();
376 }
377 }
378 CanvasUser->Modified();
379 CanvasUser->Update();
380}
381
383{
387 for (int iAxis = 0; iAxis < fResultHnSparse->GetNdimensions(); iAxis++) {
388 // Printf("Axis: %d [%s] SetRange(%d,%d)", iAxis, fResultHnSparse->GetAxis(iAxis)->GetName(),
389 // fParameterPoint[iAxis],
390 // fParameterPoint[iAxis]);
391 fResultHnSparse->GetAxis(iAxis)->SetRange(fParameterPoint[iAxis], fParameterPoint[iAxis]);
392 }
393
394 fCurrentContentPath.clear();
395 // int i = 0;
396 for (auto & p : fParameterPoint) {
397 if (fCurrentContentPath.empty()) {
398 fCurrentContentPath = "content/";
399 continue;
400 }
401 fCurrentContentPath += std::to_string(std::abs(p)) + "/";
402 }
403}
404
405void PointDraw::DrawProjections(bool ignoreMapping)
406{
410
411 // Printf("DrawProjections %zu", fProjectionAxes.size());
412 UpdateRanges();
413
414 if (fParameterPoint.size() == 0) return;
415
416 int xBin = fParameterPoint[fProjectionAxes[0]];
417 int yBin = -1;
418
419 if (fProjectionAxes.size() == 2) {
422 }
423
424 double min = 1;
425 double max = 0;
426
427 if (!gCfg["ndmspc"]["result"]["parameters"]["draw"][fCurrentParameterName].is_null()) {
428 // Printf("Apply %s %s", fCurrentParameterName.c_str(),
429 // gCfg["ndmspc"]["result"]["parameters"]["draw"][fCurrentParameterName].dump().c_str());
430 min = gCfg["ndmspc"]["result"]["parameters"]["draw"][fCurrentParameterName]["min"].get<double>();
431 max = gCfg["ndmspc"]["result"]["parameters"]["draw"][fCurrentParameterName]["max"].get<double>();
432 }
433
434 auto CanvasProjectionMap = (TCanvas *)gROOT->GetListOfCanvases()->FindObject("CanvasProjectionMap");
435 if (!CanvasProjectionMap) {
436 CanvasProjectionMap = new TCanvas("CanvasProjectionMap", "CanvasProjectionMap", 505, 0, 400, 400);
437 // Printf("CanvasProjectionMap xBin=%d yBin=%d %zu", xBin, yBin, fProjectionAxes.size());
438 /*CanvasProjectionMap->HighlightConnect("HighlightProjectionPoint(TVirtualPad*,TObject*,Int_t,Int_t)");*/
439 CanvasProjectionMap->Connect("Highlighted(TVirtualPad*,TObject*,Int_t,Int_t)", "Ndmspc::PointDraw", this,
440 "HighlightProjectionPoint(TVirtualPad*,TObject*,Int_t,Int_t)");
441 }
442
443 if (!ignoreMapping) {
444
445 if (fProjectionAxes.size() == 1) {
446 CanvasProjectionMap->cd();
447 fResultHnSparse->GetAxis(fProjectionAxes[0])->SetRange();
448 TH1 * h = fResultHnSparse->Projection(fProjectionAxes[0], "O");
449 h->SetHighlight();
450 if (min < max) {
451 h->SetMinimum(min);
452 h->SetMaximum(max);
453 }
454 h->Draw();
455
456 CanvasProjectionMap->Modified();
457 CanvasProjectionMap->Update();
458 return;
459 }
460 if (fProjectionAxes.size() == 2) {
461 CanvasProjectionMap->cd();
462 fResultHnSparse->GetAxis(fProjectionAxes[0])->SetRange();
463 fResultHnSparse->GetAxis(fProjectionAxes[1])->SetRange();
464 // fResultHnSparse->Projection(fProjectionAxes[1], fProjectionAxes[0], "O")->Draw("colz");
465 TH2 * h = fResultHnSparse->Projection(fProjectionAxes[1], fProjectionAxes[0], "O");
466 h->SetHighlight();
467 h->Draw("colz");
468 CanvasProjectionMap->Modified();
469 CanvasProjectionMap->Update();
470 }
471 }
472
473 auto CanvasProjections = (TCanvas *)gROOT->GetListOfCanvases()->FindObject("CanvasProjections");
474 if (!CanvasProjections) {
475 CanvasProjections = new TCanvas("CanvasProjections", "CanvasProjections", 505, 445, 400, 350);
476 // Printf("CanvasProjections xBin=%d yBin=%d %zu", xBin, yBin, fProjectionAxes.size());
477 CanvasProjections->Divide(1, fProjectionAxes.size());
478 // CanvasProjections->HighlightConnect("HighlightProj(TVirtualPad*,TObject*,Int_t,Int_t)");
479 }
480
481 TH1 * px = nullptr;
482 TH1 * py = nullptr;
483 CanvasProjections->cd(1);
484 fResultHnSparse->GetAxis(fProjectionAxes[0])->SetRange();
485 fResultHnSparse->GetAxis(fProjectionAxes[1])->SetRange(xBin, xBin);
486 px = fResultHnSparse->Projection(fProjectionAxes[0], "O");
487 if (px) {
488 if (min < max) {
489 px->SetMinimum(min);
490 px->SetMaximum(max);
491 }
492 px->Draw();
493 }
494 if (fProjectionAxes.size() == 2) {
495 CanvasProjections->cd(2);
496 if (fProjectionAxes.size() > 1) fResultHnSparse->GetAxis(fProjectionAxes[1])->SetRange();
497 if (yBin > 0) fResultHnSparse->GetAxis(fProjectionAxes[0])->SetRange(yBin, yBin);
498 py = fResultHnSparse->Projection(fProjectionAxes[1], "O");
499 if (py) {
500 if (min < max) {
501 py->SetMinimum(min);
502 py->SetMaximum(max);
503 }
504 py->Draw();
505 }
506 }
507
508 CanvasProjections->Modified();
509 CanvasProjections->Update();
510}
511
512void PointDraw::HighlightMain(TVirtualPad * pad, TObject * obj, Int_t xBin, Int_t yBin)
513{
517 auto h = (TH1 *)obj;
518 std::string hName = h->GetName();
519 if (!hName.compare("hParamMain")) {
520 HighlightParam(pad, obj, xBin, yBin);
521 }
522 else if (!hName.compare("hDataMc")) {
523 HighlightData(pad, obj, xBin, yBin);
524 }
525}
526
527void PointDraw::HighlightParam(TVirtualPad * pad, TObject * obj, Int_t xBin, Int_t yBin)
528{
532 // Printf("HighlightParam %d %d", xBin, yBin);
533 TH1 * fParamMapHistogram = (TH1 *)obj;
534 if (!fParamMapHistogram) return;
535
536 // double binContent = fParamMapHistogram->GetBinContent(xBin, yBin);
537 // if (binContent <= 0) return;
538 fParamMapHistogram->SetTitle(fParamMapHistogram->GetXaxis()->GetBinLabel(xBin));
539 fParameterPoint[0] = xBin;
540 fCurrentParameterName = fParamMapHistogram->GetXaxis()->GetBinLabel(xBin);
541 // Printf("%s", fCurrentParameterName.c_str());
543
544 pad->Modified();
545 pad->Update();
546}
547
548void PointDraw::HighlightData(TVirtualPad * pad, TObject * obj, Int_t xBin, Int_t yBin)
549{
553 // Printf("HighlightData %d %d", xBin, yBin);
554 TH2 * hDataMc = (TH2 *)obj;
555 if (!hDataMc) return;
556
557 if (hDataMc->GetBinContent(xBin, yBin) <= 0) {
558 hDataMc->SetTitle("Data vs. MC");
559 pad->Modified();
560 pad->Update();
561 return;
562 }
563
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);
568 fParameterPoint[1] = xBin;
569 fParameterPoint[2] = yBin;
570
571 if (xBin == 1 && yBin > 1) {
572 // mc
573 ptrdiff_t pos = distance(fMc.begin(), find(fMc.begin(), fMc.end(), mc));
574 fParameterPoint[2] = fMcId[int(pos)];
575 std::vector<std::string> tok = Ndmspc::Utils::Tokenize(mc, '|');
576 fParameterPoint[3] = atoi(tok[1].c_str());
577 fParameterPoint[4] = atoi(tok[2].c_str());
578 }
579 else if (yBin == 1 && xBin > 1) {
580 // data
581 ptrdiff_t pos = distance(fData.begin(), find(fData.begin(), fData.end(), data));
582 fParameterPoint[1] = fDataId[int(pos)];
583 std::vector<std::string> tok = Ndmspc::Utils::Tokenize(data, '|');
584 fParameterPoint[3] = atoi(tok[1].c_str());
585 fParameterPoint[4] = atoi(tok[2].c_str());
586 }
587 else {
588 // TODO: Handle case when mc and data are not one
589 return;
590 }
591
592 // Printf("fParameterPoint %d %d %d %d", fParameterPoint[1], fParameterPoint[2], fParameterPoint[3],
593 // fParameterPoint[4]);
594
596 DrawUser();
597 pad->Modified();
598 pad->Update();
599}
600
601void PointDraw::HighlightProjectionPoint(TVirtualPad * pad, TObject * obj, Int_t xBin, Int_t yBin)
602{
606 // Printf("HighlightProjectionPoint %d %d %d", xBin, yBin, fProjectionAxes[0]);
607 if (fProjectionAxes.size() == 1) {
609 }
610 else if (fProjectionAxes.size() == 2) {
613 }
614 // UpdateRanges();
615 DrawProjections(true);
616 DrawUser();
617 pad->Modified();
618 pad->Update();
619}
620
621} // namespace Ndmspc
static bool LoadConfig(std::string config, std::string userConfig, std::string &environment, std::string userConfigRaw="", std::string binning="")
Definition Core.cxx:16
PointDraw object.
Definition PointDraw.h:21
std::vector< int > fDataId
Data ids.
Definition PointDraw.h:41
int fNDimCuts
Number of dimension cuts.
Definition PointDraw.h:39
void DrawProjections(bool ignoreMapping=false)
int DrawPoint(int level, std::string config="myAnalysis.json", std::string userConfig="", std::string environment="", std::string userConfigRaw="", std::string binning="")
Definition PointDraw.cxx:37
std::vector< int > fParameterPoint
Parameter point.
Definition PointDraw.h:34
THnSparse * fResultHnSparse
Result HnSparse.
Definition PointDraw.h:31
std::vector< std::string > fMc
MC.
Definition PointDraw.h:42
TH1 * fMapAxesType
Map axes type.
Definition PointDraw.h:36
std::string fMapTitle
Map title.
Definition PointDraw.h:37
std::string fCurrentParameterName
Current parameter name.
Definition PointDraw.h:32
std::vector< int > fMcId
MC ids.
Definition PointDraw.h:43
void HighlightParam(TVirtualPad *pad, TObject *obj, Int_t xBin, Int_t yBin)
TH1 * fParamMapHistogram
Param map histogram.
Definition PointDraw.h:38
virtual ~PointDraw()
Definition PointDraw.cxx:30
void HighlightData(TVirtualPad *pad, TObject *obj, Int_t xBin, Int_t yBin)
void HighlightProjectionPoint(TVirtualPad *pad, TObject *obj, Int_t xBin, Int_t yBin)
std::vector< std::string > fData
Data.
Definition PointDraw.h:40
void HighlightMain(TVirtualPad *pad, TObject *obj, Int_t xBin, Int_t yBin)
TFile * fIn
Input file.
Definition PointDraw.h:30
std::string fCurrentContentPath
Current content path.
Definition PointDraw.h:33
std::vector< int > fProjectionAxes
Projection axes.
Definition PointDraw.h:35
static std::string fgEnvironment
Currnet environment.
Definition PointDraw.h:44
static std::string GetCutsPath(json cuts)
Definition Utils.cxx:143
static std::vector< std::string > Tokenize(std::string_view input, const char delim)
Definition Utils.cxx:256