11 #ifndef ROOT_GRAPHUTILS
12 #define ROOT_GRAPHUTILS
19 #include <type_traits>
29 class RCustomColumnBase;
37 namespace GraphDrawing {
38 std::shared_ptr<GraphNode>
39 CreateDefineNode(
const std::string &columnName,
const ROOT::Detail::RDF::RCustomColumnBase *columnPtr);
41 std::shared_ptr<GraphNode> CreateFilterNode(
const ROOT::Detail::RDF::RFilterBase *filterPtr);
43 std::shared_ptr<GraphNode> CreateRangeNode(
const ROOT::Detail::RDF::RRangeBase *rangePtr);
45 bool CheckIfDefaultOrDSColumn(
const std::string &name,
46 const std::shared_ptr<ROOT::Detail::RDF::RCustomColumnBase> &column);
59 class GraphCreatorHelper {
61 using ColumnsNodesMap_t = std::map<const ROOT::Detail::RDF::RCustomColumnBase *, std::weak_ptr<GraphNode>>;
62 using FiltersNodesMap_t = std::map<const ROOT::Detail::RDF::RFilterBase *, std::weak_ptr<GraphNode>>;
63 using RangesNodesMap_t = std::map<const ROOT::Detail::RDF::RRangeBase *, std::weak_ptr<GraphNode>>;
67 static ColumnsNodesMap_t &GetStaticColumnsMap()
69 static ColumnsNodesMap_t sMap;
75 static FiltersNodesMap_t &GetStaticFiltersMap()
77 static FiltersNodesMap_t sMap;
83 static RangesNodesMap_t &GetStaticRangesMap()
85 static RangesNodesMap_t sMap;
91 friend std::shared_ptr<GraphNode>
92 CreateDefineNode(
const std::string &columnName,
const ROOT::Detail::RDF::RCustomColumnBase *columnPtr);
96 friend std::shared_ptr<GraphNode> CreateFilterNode(
const ROOT::Detail::RDF::RFilterBase *filterPtr);
100 friend std::shared_ptr<GraphNode> CreateRangeNode(
const ROOT::Detail::RDF::RRangeBase *rangePtr);
104 std::string FromGraphLeafToDot(std::shared_ptr<GraphNode> leaf);
108 std::string FromGraphActionsToDot(std::vector<std::shared_ptr<GraphNode>> leaves);
112 std::string RepresentGraph(ROOT::RDataFrame &rDataFrame);
116 std::string RepresentGraph(RLoopManager *rLoopManager);
120 template <
typename Proxied,
typename DataSource>
121 std::string RepresentGraph(RInterface<Proxied, DataSource> &rInterface)
123 auto loopManager = rInterface.GetLoopManager();
126 return FromGraphLeafToDot(rInterface.GetProxiedPtr()->GetGraph());
131 template <
typename T>
132 std::string RepresentGraph(
const RResultPtr<T> &resultPtr)
134 auto loopManager = resultPtr.fLoopManager;
136 throw std::runtime_error(
"Something went wrong");
138 if (std::is_same<T, RInterface<RLoopManager, void>>::value) {
139 return RepresentGraph(loopManager);
144 auto actionPtr = resultPtr.fActionPtr;
145 return FromGraphLeafToDot(actionPtr->GetGraph());
152 template <
typename NodeType>
153 std::string operator()(NodeType &node)
157 GetStaticFiltersMap() = FiltersNodesMap_t();
158 GetStaticColumnsMap() = ColumnsNodesMap_t();
159 GetStaticRangesMap() = RangesNodesMap_t();
160 GraphNode::ClearCounter();
162 return RepresentGraph(node);