#include "ROOT/RDataFrame.hxx" #include "ROOT/RVec.hxx" #include "TTree.h" #include "TFile.h" #include "TMath.h" #include using namespace std; using namespace ROOT; using namespace ROOT::VecOps; RVec< RVec > distinct_comb(unsigned int n) { //cout <<"Entities "<< n << endl; RVec idx1; idx1.reserve(n*(n-1)/2); RVec idx2; idx2.reserve(n*(n-1)/2); unsigned int ij=0; for (unsigned int i=0; i > res; res.emplace_back(idx1); res.emplace_back(idx2); return res; } void simpletest() { RVec v {2., 3., 1.}; auto vTaken = Take(v, {0,2,2}); cout << vTaken << endl; RVec v2 {10., 20., 30., 40.}; auto comb = Combinations(v, v2); for (auto acomb: comb) { cout << acomb << endl; } auto res = Take(v, comb[0]) - Take(v2, comb[1]); cout << res << endl; cout << distinct_comb(3) << endl; auto dis_comb = distinct_comb(v2.size()); auto res2 = Take(v2, dis_comb[0]) - Take(v2, dis_comb[1]); cout << res2 << endl; } void combinator() { TFile f("08FB417A-DC0B-E811-80D7-0CC47A13D110.root"); TTree *ttree = dynamic_cast(f.Get("Events")); RDataFrame rd(*ttree); ROOT::RDF::RNode rlm(rd); rlm = rlm.Filter("nJet>=7"); rlm = rlm.Define("dis_comb", ::distinct_comb, {"nJet"}); rlm = rlm.Define("jphi1", "ROOT::VecOps::Take(Jet_phi, dis_comb[0])"); rlm = rlm.Define("jphi2", "ROOT::VecOps::Take(Jet_phi, dis_comb[1])"); rlm = rlm.Define("dphijets", "ROOT::VecOps::abs(ROOT::VecOps::DeltaPhi(jphi1, jphi2))"); rlm = rlm.Define("dphijets_min", "ROOT::VecOps::Min(dphijets)"); auto histojets = rlm.Histo1D({"dphi", "deltaphi of jets", 50, 0.0, TMath::Pi()}, "dphijets"); auto histojetsmin = rlm.Histo1D({"dphimin", "min deltaphi of jets", 50, 0.0, TMath::Pi()}, "dphijets_min"); auto _outrootfile = new TFile("testtest.root", "RECREATE"); histojets->Write(); histojetsmin->Write(); _outrootfile->Write(0, TObject::kOverwrite); _outrootfile->Close(); }