#include #include #include #include void write_tree() { ROOT::RDataFrame df{1000}; df.Define("pts", []() { ROOT::RVecF ret; ret.reserve(4); for (std::size_t i = 0ul; i < 4; i++){ // Using mean 45 to have less entries passing the filter later ret.emplace_back(gRandom->Gaus(45, 1)); } return ret; }) .Snapshot("tree", "file.root", {"pts"}); } int main() { write_tree(); ROOT::RDataFrame df("tree", "file.root"); // Filtering events where all muons have pt>45 auto values = df.Filter([](const ROOT::RVecF &pts) { return ROOT::VecOps::All(ROOT::VecOps::Map(pts, [](float pt) { return pt > 45; })); }, {"pts"}) .Take("pts"); // This takes the column of pts as a std::vector // Every 10 events processed, do something values.OnPartialResult(10, [](std::vector &v) { const auto ¤tPts = v.back(); if (!currentPts.empty()) std::cout << currentPts << std::endl; }); std::cout << values->size() << std::endl; }