11#ifndef ROOT_RDF_RVARIATION
12#define ROOT_RDF_RVARIATION
82 return static_cast<void *
>(&
v[
varIdx]);
92 [
expected](
const auto &
inner) { return inner.size() == expected; });
128template <
typename VaryExpressionRet_t,
bool IsSingleColumn>
144template <
bool IsSingleColumn,
typename Ret_t>
147template <
typename F,
bool IsSingleColumn>
150 using TypeInd_t = std::make_index_sequence<ColumnTypes_t::list_size>;
153 using Result_t = std::conditional_t<IsSingleColumn, ROOT::RVec<VariedCol_t>, std::vector<ROOT::RVec<VariedCol_t>>>;
160 std::vector<std::array<RColumnReaderBase *, ColumnTypes_t::list_size>>
fValues;
162 template <
typename ColType>
168 throw std::out_of_range{
"RDataFrame: Could not retrieve value for variation '" + fColNames[
readerIdx] +
169 "' for entry " + std::to_string(
entry) +
170 ". You can use the DefaultValueFor operation to provide a default value, or "
171 "FilterAvailable/FilterMissing to discard/keep entries with missing values instead."};
174 template <
typename...
ColTypes, std::size_t... S>
182 std::integral_constant<bool, IsSingleColumn>{})) {
184 throw std::runtime_error(
"The evaluation of the expression for variation \"" +
variationName +
186 std::to_string(fVariationNames.size()) +
" were expected.");
197 fExpression(std::
move(expression)),
201 fLoopManager->Register(
this);
203 for (
auto i = 0
u; i <
lm.GetNSlots(); ++i)
221 const auto colIt = std::find(fColNames.begin(), fColNames.end(), column);
223 const auto colIdx = std::distance(fColNames.begin(),
colIt);
225 const auto varIt = std::find(fVariationNames.begin(), fVariationNames.end(),
variation);
227 const auto varIdx = std::distance(fVariationNames.begin(),
varIt);
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
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 r
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.
A binder for user-defined columns, variations and aliases.
This type includes all parts of RVariation that do not depend on the callable signature.
void Update(unsigned int slot, Long64_t entry) final
Update the value at the address returned by GetValuePtr with the content corresponding to the given e...
const std::type_info & GetTypeId() const final
void FinalizeSlot(unsigned int slot) final
Clean-up operations to be performed at the end of a task.
void * GetValuePtr(unsigned int slot, const std::string &column, const std::string &variation) final
Return the (type-erased) address of the value for the given processing slot.
std::make_index_sequence< ColumnTypes_t::list_size > TypeInd_t
auto GetValueChecked(unsigned int slot, std::size_t readerIdx, Long64_t entry) -> ColType &
RVariation(const std::vector< std::string > &colNames, std::string_view variationName, F expression, const std::vector< std::string > &variationTags, std::string_view type, const RColumnRegister &defines, RLoopManager &lm, const ColumnNames_t &inputColNames)
void InitSlot(TTreeReader *r, unsigned int slot) final
RVariation & operator=(const RVariation &)=delete
typename CallableTraits< F >::ret_type Ret_t
std::vector< std::array< RColumnReaderBase *, ColumnTypes_t::list_size > > fValues
Column readers per slot and per input column.
void UpdateHelper(unsigned int slot, Long64_t entry, TypeList< ColTypes... >, std::index_sequence< S... >)
typename CallableTraits< F >::arg_types ColumnTypes_t
std::vector< Result_t > fLastResults
Per-slot storage for varied column values (for one or multiple columns depending on IsSingleColumn).
RVariation(const RVariation &)=delete
std::conditional_t< IsSingleColumn, ROOT::RVec< VariedCol_t >, std::vector< ROOT::RVec< VariedCol_t > > > Result_t
const_iterator begin() const
const_iterator end() const
A "std::vector"-like collection of values implementing handy operation to analyse them.
A simple, robust and fast interface to read values from ROOT columnar datasets such as TTree,...
std::size_t GetNVariations(const RVec< T > &results)
void ResizeResults(ROOT::RVec< T > &results, std::size_t, std::size_t nVariations)
void * GetValuePtrHelper(ROOT::RVec< T > &v, std::size_t, std::size_t varIdx)
constexpr std::size_t CacheLineStep()
Stepping through CacheLineStep<T> values in a vector<T> brings you to a new cache line.
void AssignResults(ROOT::RVec< T > &resStorage, ROOT::RVec< T > &&tmpResults)
Assign into fLastResults[slot] without changing the addresses of its elements (we gave those addresse...
typename ColumnType< Ret_t, IsSingleColumn >::type ColumnType_t
When varying a single column, Ret_t is RVec<T> and ColumnType_t is T.
std::array< RDFDetail::RColumnReaderBase *, sizeof...(ColTypes)> GetColumnReaders(unsigned int slot, TTreeReader *r, TypeList< ColTypes... >, const RColumnReadersInfo &colInfo, const std::string &variationName="nominal")
Create a group of column readers, one per type in the parameter pack.
bool ResultsSizeEq(const T &results, std::size_t expected, std::size_t nColumns, std::true_type)
std::vector< std::string > ColumnNames_t
ROOT type_traits extensions.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
Extract types from the signature of a callable object. See CallableTraits.
This type aggregates some of the arguments passed to GetColumnReaders.