Suppose I have a data frame that I want to refer to with and without a filter. Further suppose that, after defining the filter, I want to define a new column. How should I allow both the filtered and unfiltered data frames to refer to the new column? The following works, but prints an error:
In [1]: import ROOT
In [2]: f = ROOT.TFile.Open('root://path/to/file.root')
In [3]: t = f.Get('some tree')
In [4]: df = ROOT.RDataFrame(t)
In [5]: df_filt = df.Filter('some selection')
In [6]: df_defi = df.Define('pt_test', 'sqrt(X_PX*X_PX + X_PY*X_PY)')
In [7]: df_filt_defi = df_filt.Define('pt_test', 'sqrt(X_PX*X_PX + X_PY*X_PY)')
input_line_84:1:25: error: redefinition of 'eval_pt_test'
namespace __tdf1 { auto eval_pt_test = [](Double_t& X_PX, Double_t& X_PY){return sqrt(X_PX*X_PX + X_PY*X_PY)
^
input_line_81:1:25: note: previous definition is here
namespace __tdf1 { auto eval_pt_test = [](Double_t& X_PX, Double_t& X_PY){return sqrt(X_PX*X_PX + X_PY*X_PY)
^
In [8]: 'pt_test' in df_filt.GetColumnNames()
Out[8]: False
In [9]: 'pt_test' in df_defi.GetColumnNames()
Out[9]: True
In [10]: 'pt_test' in df_filt_defi.GetColumnNames()
Out[10]: True
ROOT Version: 6.15/01
Platform: macOS
Compiler: Not Provided