11#ifndef ROOT_RDF_TINTERFACE_UTILS 
   12#define ROOT_RDF_TINTERFACE_UTILS 
   42#include <unordered_map> 
   55template<
typename T, 
typename V>
 
   97struct GraphAsymmErrors{};
 
  112template <
typename T, 
bool ISV6HISTO = std::is_base_of<TH1, std::decay_t<T>>::value>
 
  117      auto xaxis = 
h.GetXaxis();
 
  118      return !(
xaxis->GetXmin() == 0. && 
xaxis->GetXmax() == 0.);
 
  130std::unique_ptr<RActionBase>
 
  131BuildAction(
const ColumnNames_t &
bl, 
const std::shared_ptr<ActionResultType> &
h, 
const unsigned int nSlots,
 
  140template <
typename... 
ColTypes, 
typename PrevNodeType>
 
  141std::unique_ptr<RActionBase>
 
  142BuildAction(
const ColumnNames_t &
bl, 
const std::shared_ptr<::TH1D> &
h, 
const unsigned int nSlots,
 
  143            std::shared_ptr<PrevNodeType> prevNode, ActionTags::Histo1D, 
const RColumnRegister &
colRegister)
 
  158template <
typename... 
ColTypes, 
typename PrevNodeType>
 
  159std::unique_ptr<RActionBase>
 
  160BuildAction(
const ColumnNames_t &
bl, 
const std::shared_ptr<TGraph> &
g, 
const unsigned int nSlots,
 
  161            std::shared_ptr<PrevNodeType> prevNode, ActionTags::Graph, 
const RColumnRegister &
colRegister)
 
  168template <
typename... 
ColTypes, 
typename PrevNodeType>
 
  169std::unique_ptr<RActionBase>
 
  170BuildAction(
const ColumnNames_t &
bl, 
const std::shared_ptr<TGraphAsymmErrors> &
g, 
const unsigned int nSlots,
 
  171            std::shared_ptr<PrevNodeType> prevNode, ActionTags::GraphAsymmErrors, 
const RColumnRegister &
colRegister)
 
  179template <
typename ColType, 
typename PrevNodeType, 
typename ActionResultType>
 
  180std::unique_ptr<RActionBase>
 
  182            std::shared_ptr<PrevNodeType> prevNode, ActionTags::Min, 
const RColumnRegister &
colRegister)
 
  190template <
typename ColType, 
typename PrevNodeType, 
typename ActionResultType>
 
  191std::unique_ptr<RActionBase>
 
  193            std::shared_ptr<PrevNodeType> prevNode, ActionTags::Max, 
const RColumnRegister &
colRegister)
 
  201template <
typename ColType, 
typename PrevNodeType, 
typename ActionResultType>
 
  202std::unique_ptr<RActionBase>
 
  204            std::shared_ptr<PrevNodeType> prevNode, ActionTags::Sum, 
const RColumnRegister &
colRegister)
 
  212template <
typename ColType, 
typename PrevNodeType>
 
  213std::unique_ptr<RActionBase>
 
  215            std::shared_ptr<PrevNodeType> prevNode, ActionTags::Mean, 
const RColumnRegister &
colRegister)
 
  223template <
typename ColType, 
typename PrevNodeType>
 
  224std::unique_ptr<RActionBase>
 
  226            std::shared_ptr<PrevNodeType> prevNode, ActionTags::StdDev, 
const RColumnRegister &
colRegister)
 
  236template <
typename... 
ColTypes, 
typename PrevNodeType>
 
  237std::unique_ptr<RActionBase>
 
  238BuildAction(
const ColumnNames_t &
bl, 
const std::shared_ptr<displayHelperArgs_t> &
helperArgs, 
const unsigned int,
 
  239            std::shared_ptr<PrevNodeType> prevNode, ActionTags::Display, 
const RColumnRegister &
colRegister)
 
  248   std::string fFileName;
 
  249   std::string fDirName;
 
  250   std::string fTreeName;
 
  256template <
typename... 
ColTypes, 
typename PrevNodeType>
 
  257std::unique_ptr<RActionBase>
 
  259            const unsigned int nSlots, std::shared_ptr<PrevNodeType> prevNode, ActionTags::Snapshot,
 
  269      std::vector<bool> 
isDef;
 
  271      for (
auto i = 0
u; i < 
sizeof...(ColTypes); ++i)
 
  298std::unique_ptr<RActionBase>
 
  299BuildAction(
const ColumnNames_t &
bl, 
const std::shared_ptr<Helper_t> &
h, 
const unsigned int ,
 
  300            std::shared_ptr<PrevNodeType> prevNode, ActionTags::Book, 
const RColumnRegister &
colRegister)
 
  308template <
typename Filter>
 
  311   using FilterRet_t = 
typename RDF::CallableTraits<Filter>::ret_type;
 
  312   static_assert(std::is_convertible<FilterRet_t, bool>::value,
 
  313                 "filter expression returns a type that is not convertible to bool");
 
  332                                             std::string_view expression, 
const ColumnNames_t &
branches,
 
  343std::shared_ptr<RJittedVariation>
 
  349std::string 
JitBuildAction(
const ColumnNames_t &
bl, std::shared_ptr<RDFDetail::RNodeBase> *prevNode,
 
  350                           const std::type_info &
art, 
const std::type_info &at, 
void *
rOnHeap, 
TTree *tree,
 
  363   return new std::weak_ptr<T>(
shPtr);
 
  370   return new std::shared_ptr<T>(
shPtr);
 
  377std::shared_ptr<RNodeBase> 
UpcastNode(std::shared_ptr<RNodeBase> ptr);
 
  392       lm.HasDataSourceColumnReaders(
colName, 
typeid(T)))
 
  396   std::vector<std::unique_ptr<RColumnReaderBase>> 
colReaders;
 
  426template <
typename F, 
typename PrevNode>
 
  448   using ColTypes_t = 
typename TTraits::CallableTraits<Callable_t>::arg_types;
 
  449   constexpr auto nColumns = ColTypes_t::list_size;
 
  453   auto ds = 
lm.GetDataSource();
 
  484   return std::unique_ptr<RDefineBase>(
 
  491template <
typename RDefineTypeTag, 
typename F>
 
  516   using ColTypes_t = 
typename TTraits::CallableTraits<Callable_t>::arg_types;
 
  518   auto ds = 
lm->GetDataSource();
 
  526   std::unique_ptr<RDefineBase> 
newCol{
 
  533template <
bool IsSingleColumn, 
typename F>
 
  565   using ColTypes_t = 
typename TTraits::CallableTraits<Callable_t>::arg_types;
 
  567   auto ds = 
lm->GetDataSource();
 
  612   constexpr auto nColumns = ColTypes_t::list_size;
 
  637   using type = TTraits::TakeFirstParameter_t<T>;
 
  641template <
typename R, 
typename F, 
typename... Args>
 
  644   return [
f](
unsigned int, Args... 
a) 
mutable -> 
R { 
return f(
a...); };
 
  652template <
typename... 
Rest>
 
  654   static constexpr bool value = 
true;
 
  659   static constexpr bool value = 
false;
 
  664   static constexpr bool value = 
true;
 
  667template <
typename ...ColTypes>
 
  674   static constexpr bool value = 
false;
 
  681template <
typename R, 
typename Merge, 
typename U, 
typename T, 
typename decayedU = std::decay_t<U>,
 
  682          typename mergeArgsNoDecay_t = 
typename CallableTraits<Merge>::arg_types_nodecay,
 
  683          typename mergeArgs_t = 
typename CallableTraits<Merge>::arg_types,
 
  684          typename mergeRet_t = 
typename CallableTraits<Merge>::ret_type>
 
  688      (std::is_same<R, decayedU>::value) || (std::is_same<R, void>::value && std::is_lvalue_reference<U>::value);
 
  689   static_assert(
isAggregatorOk, 
"aggregator function must have signature `U(U,T)` or `void(U&,T)`");
 
  691      (std::is_same<TypeList<decayedU, decayedU>, 
mergeArgs_t>
::value && std::is_same<decayedU, mergeRet_t>::value) ||
 
  693       std::is_same<void, mergeRet_t>::value);
 
  694   static_assert(
isMergeOk, 
"merge function must have signature `U(U,U)` or `void(std::vector<U>&)`");
 
  699template <
typename R, 
typename T>
 
  702   static_assert(
sizeof(T) == 0, 
"aggregator function must take exactly two arguments");
 
  720template <
typename NodeType>
 
  721std::vector<std::string> 
GetFilterNames(
const std::shared_ptr<NodeType> &node)
 
  729   std::string fTreeName;
 
  730   std::string fDirName;
 
  751struct IsList_t : std::false_type {};
 
  754struct IsList_t<std::list<T>> : std::true_type {};
 
  760struct IsDeque_t<std::deque<T>> : std::true_type {};
 
  770template <
typename Elem>
 
  778std::pair<std::vector<std::string>, std::vector<std::string>>
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
Int_t gErrorIgnoreLevel
Error handling routines.
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
 
The head node of a RDF computation graph.
 
RDataSource defines an API that RDataFrame can use to read arbitrary data formats.
 
The public interface to the RDataFrame federation of classes.
 
A "std::vector"-like collection of values implementing handy operation to analyse them.
 
A TTree represents a columnar dataset.
 
T Sum(const RVec< T > &v, const T zero=T(0))
Sum elements of an RVec.
 
const ColumnNames_t SelectColumns(unsigned int nRequiredNames, const ColumnNames_t &names, const ColumnNames_t &defaultNames)
Choose between local column names or default column names, throw in case of errors.
 
void CheckForNoVariations(const std::string &where, std::string_view definedColView, const RColumnRegister &colRegister)
Throw if the column has systematic variations attached.
 
ParsedTreePath ParseTreePath(std::string_view fullTreeName)
 
void CheckForRedefinition(const std::string &where, std::string_view definedColView, const RColumnRegister &colRegister, const ColumnNames_t &treeColumns, const ColumnNames_t &dataSourceColumns)
Throw if column definedColView is already there.
 
void CheckForDefinition(const std::string &where, std::string_view definedColView, const RColumnRegister &colRegister, const ColumnNames_t &treeColumns, const ColumnNames_t &dataSourceColumns)
Throw if column definedColView is not already there.
 
std::shared_ptr< RJittedDefine > BookDefineJit(std::string_view name, std::string_view expression, RLoopManager &lm, RDataSource *ds, const RColumnRegister &colRegister, const ColumnNames_t &branches, std::shared_ptr< RNodeBase > *upcastNodeOnHeap)
Book the jitting of a Define call.
 
void CheckValidCppVarName(std::string_view var, const std::string &where)
 
void RemoveDuplicates(ColumnNames_t &columnNames)
 
ColumnNames_t GetValidatedColumnNames(RLoopManager &lm, const unsigned int nColumns, const ColumnNames_t &columns, const RColumnRegister &colRegister, RDataSource *ds)
Given the desired number of columns and the user-provided list of columns:
 
std::shared_ptr< RNodeBase > UpcastNode(std::shared_ptr< RNodeBase > ptr)
 
std::vector< std::string > GetFilterNames(const std::shared_ptr< RLoopManager > &loopManager)
 
std::string PrettyPrintAddr(const void *const addr)
 
void CheckTypesAndPars(unsigned int nTemplateParams, unsigned int nColumnNames)
 
std::string DemangleTypeIdName(const std::type_info &typeInfo)
 
bool AtLeastOneEmptyString(const std::vector< std::string_view > strings)
 
std::shared_ptr< RDFDetail::RJittedFilter > BookFilterJit(std::shared_ptr< RDFDetail::RNodeBase > *prevNodeOnHeap, std::string_view name, std::string_view expression, const ColumnNames_t &branches, const RColumnRegister &colRegister, TTree *tree, RDataSource *ds)
Book the jitting of a Filter call.
 
std::string JitBuildAction(const ColumnNames_t &cols, std::shared_ptr< RDFDetail::RNodeBase > *prevNode, const std::type_info &helperArgType, const std::type_info &at, void *helperArgOnHeap, TTree *tree, const unsigned int nSlots, const RColumnRegister &colRegister, RDataSource *ds, std::weak_ptr< RJittedAction > *jittedActionOnHeap)
 
ColumnNames_t FilterArraySizeColNames(const ColumnNames_t &columnNames, const std::string &action)
Take a list of column names, return that list with entries starting by '#' filtered out.
 
std::shared_ptr< RJittedVariation > BookVariationJit(const std::vector< std::string > &colNames, std::string_view variationName, const std::vector< std::string > &variationTags, std::string_view expression, RLoopManager &lm, RDataSource *ds, const RColumnRegister &colRegister, const ColumnNames_t &branches, std::shared_ptr< RNodeBase > *upcastNodeOnHeap, bool isSingleColumn)
Book the jitting of a Vary call.
 
void CheckForDuplicateSnapshotColumns(const ColumnNames_t &cols)
 
ColumnNames_t ConvertRegexToColumns(const ColumnNames_t &colNames, std::string_view columnNameRegexp, std::string_view callerName)
 
std::pair< std::vector< std::string >, std::vector< std::string > > AddSizeBranches(const std::vector< std::string > &branches, TTree *tree, std::vector< std::string > &&colsWithoutAliases, std::vector< std::string > &&colsWithAliases)
Return copies of colsWithoutAliases and colsWithAliases with size branches for variable-sized array b...
 
std::vector< bool > FindUndefinedDSColumns(const ColumnNames_t &requestedCols, const ColumnNames_t &definedCols)
Return a bitset each element of which indicates whether the corresponding element in selectedColumns ...
 
std::shared_ptr< RJittedDefine > BookDefinePerSampleJit(std::string_view name, std::string_view expression, RLoopManager &lm, const RColumnRegister &colRegister, std::shared_ptr< RNodeBase > *upcastNodeOnHeap)
Book the jitting of a DefinePerSample call.
 
std::vector< std::string > GetValidatedArgTypes(const ColumnNames_t &colNames, const RColumnRegister &colRegister, TTree *tree, RDataSource *ds, const std::string &context, bool vector2rvec)
 
ColumnNames_t FindUnknownColumns(const ColumnNames_t &requiredCols, const ColumnNames_t &datasetColumns, const RColumnRegister &definedCols, const ColumnNames_t &dataSourceColumns)
 
ROOT type_traits extensions.
 
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
 
Bool_t IsImplicitMTEnabled()
Returns true if the implicit multi-threading in ROOT is enabled.
 
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
 
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
 
Double_t Mean(Long64_t n, const T *a, const Double_t *w=nullptr)
Returns the weighted mean of an array a with length n.
 
Double_t StdDev(Long64_t n, const T *a, const Double_t *w=nullptr)
 
A collection of options to steer the creation of the dataset on file.
 
Lightweight storage for a collection of types.