%%cpp -d ROOT::RDF::RNode AddFilter(ROOT::RDF::RNode node, string_view filterStr) { return node.Filter(filterStr); } ROOT::RDataFrame df(8); auto f1 = AddFilter(df, "rdfentry_ > 0"); auto f2 = f1.Filter([](ULong64_t e) { return e > 1; }, {"rdfentry_"}); bool someCondition = true; auto maybe_filtered = ROOT::RDF::RNode(f2); if (someCondition) maybe_filtered = maybe_filtered.Filter("rdfentry_ > 3"); auto with_columns = ROOT::RDF::RNode(maybe_filtered); for (auto i = 0; i < 3; ++i) with_columns = with_columns.Define("x" + std::to_string(i), "42"); std::cout << "Entries passing the selection: " << with_columns.Count().GetValue() << std::endl; gROOT->GetListOfCanvases()->Draw()