Int_t testMT( Bool_t mt ) { TCanvas cv; if( mt ) ROOT::EnableImplicitMT(); ROOT::RDataFrame df("AnalysisTree", "AnalysisTree10M.root"); Int_t* bins = new Int_t[3]; Double_t* xmin = new Double_t[3]; Double_t* xmax = new Double_t[3]; for (size_t n = 0; n < 2; n++) { bins[n] = 80; xmin[n] = -20; xmax[n] = 20; } bins[2] = 100; xmin[2] = 0; xmax[2] = 10; THnD* sparse = new THnD("sparse", "sparse", 3, bins, xmin, xmax); std::vector > data; auto parValues1 = df.Take("final_posX"); data.push_back(*parValues1); auto parValues2 = df.Take("final_posY"); data.push_back(*parValues2); auto parValues3 = df.Take("final_energy"); data.push_back(*parValues3); Double_t* values = new Double_t[3]; std::cout << "N-values filled: " << data[0].size() << std::endl; if (!data.empty()) for (size_t m = 0; m < data[0].size(); m++) { for (size_t v = 0; v < 3; v++) { values[v] = data[v][m]; } sparse->Fill(values); } std::vector test = {-0.250000 , 2.750000 , 2.150000}; Double_t content = sparse->GetBinContent(sparse->GetBin(test.data())); std::cout << "Content " << content << std::endl; std::cout << "Nbins : " << sparse->GetNbins() << std::endl; return 0; }