3 #include <TApplication.h>
5 #include <TRootCanvas.h>
11 #include <THnSparse.h>
13 #include "HnSparseBrowser.h"
26 fListOfHnSparses =
new TList();
34 SafeDelete(fListOfHnSparses);
43 TApplication app(
"app",
nullptr,
nullptr);
44 TH1::AddDirectory(
false);
46 std::vector<std::string> objectList;
47 std::vector<std::string> labels;
48 std::stringstream ss(objects);
52 if (filename.rfind(
"alien://", 0) == 0) {
53 TGrid::Connect(
"alien://");
55 while (std::getline(ss, label, delimiter)) {
56 objectList.push_back(label);
63 Printf(
"Opening file '%s' ...", filename.c_str());
66 Printf(
"Error: Cannot open filename %s!", filename.c_str());
70 for (
int i = 0; i < objectList.size(); i++) {
71 std::string objTemp = objectList[i].c_str();
72 Printf(
"Object : %s", objTemp.c_str());
73 size_t pos = objTemp.find(dirtoken);
74 labels.push_back(objTemp.substr(pos + dirtoken.length()));
77 fInputHnSparse = (THnSparse *)inputFile->Get(objectList[0].c_str());
78 if (!fInputHnSparse) {
79 Printf(
"Error: Cannot find objects %s!", objectList[0].c_str());
83 TObjArray * listOfAxes = fInputHnSparse->GetListOfAxes();
84 int nDim = listOfAxes->GetEntries();
86 TH2 * hAxes =
new TH2D(
"hAxes",
"Sparse Axes", nDim, 0., nDim, objectList.size(), 0., objectList.size());
90 for (
int i = 0; i < nDim; i++) {
91 TAxis * a = (TAxis *)listOfAxes->At(i);
92 hAxes->GetXaxis()->SetBinLabel(i + 1, a->GetName());
93 for (
int j = 0; j < objects.size(); j++) {
94 hAxes->SetBinContent(i + 1, j + 1, 1);
98 for (
int i = 0; i < objects.size(); i++) {
100 hAxes->GetYaxis()->SetBinLabel(i + 1, objectList[i].c_str());
102 hAxes->GetYaxis()->SetBinLabel(i + 1, labels[i].c_str());
105 hAxes->GetYaxis()->SetLabelSize(0.08);
106 hAxes->GetXaxis()->SetLabelSize(0.08);
108 THnSparse * sparseTmp =
nullptr;
109 for (
int i = 0; i < objects.size(); i++) {
110 sparseTmp = (THnSparse *)inputFile->Get(objectList[i].c_str());
112 Printf(
"Error: Cannot find objects %s!", objectList[i].c_str());
115 fListOfHnSparses->Add(sparseTmp);
118 TCanvas * CanvasMap =
new TCanvas(
"CanvasAxes",
"CanvasAxes", 0, 0, 1000, 300);
120 CanvasMap->Connect(
"Highlighted(TVirtualPad*,TObject*,Int_t,Int_t)",
"Ndmspc::HnSparseBrowser",
this,
121 "HighlightMain(TVirtualPad*,TObject*,Int_t,Int_t)");
122 hAxes->SetHighlight(
true);
132 void HnSparseBrowser::HighlightMain(TVirtualPad * pad, TObject * obj, Int_t xBin, Int_t yBin)
135 auto hAxes =
dynamic_cast<TH1D *
>(obj);
137 auto CanvasProj = (TCanvas *)gROOT->GetListOfCanvases()->FindObject(
"CanvasProj");
138 if (hAxes && !hAxes->IsHighlight()) {
139 if (CanvasProj)
delete CanvasProj;
140 hAxes->SetTitle(
"Disable highlight");
145 CanvasProj =
new TCanvas(
"CanvasProj",
"CanvasProj", 1005, 0, 600, 600);
147 fInputHnSparse =
dynamic_cast<THnSparse *
>(fListOfHnSparses->At(yBin - 1));
148 if (!fInputHnSparse) {
149 Printf(
"Error: Cannot find THnSparse at index %d", yBin - 1);
152 TH1 * proj = fInputHnSparse->Projection(xBin - 1);
154 Printf(
"Error: Cannot project THnSparse at bin %d", xBin - 1);
160 CanvasProj->Modified();
161 CanvasProj->Update();
virtual ~HnSparseBrowser()
int Draw(std::string filename="root://eos.ndmspc.io//eos/ndmspc/scratch/alice/hyperloop/PWGLF-376/222580/AnalysisResults.root", std::string objects="phianalysis-t-hn-sparse_default/unlikepm,phianalysis-t-hn-sparse_default/likepp", std::string dirtoken="/")
static TFile * OpenFile(std::string filename, std::string mode="READ", bool createLocalDir=true)