I was just trying this very simple script to reduce an ntuple to the branches I need (and nothing else):
#include "TFile.h"
#include "ROOT/TDataFrame.hxx"
#include <iostream>
#include <stdlib.h>
using ROOT::Experimental::TDataFrame;
std::vector<std::string> active_branches = {
"Z0_OWNPV_X", "Z0_ETA", "Z0_OWNPV_Y", "Z0_OWNPV_Z", "Z0_P", "Z0_PT", "Z0_PX", "Z0_PY", "Z0_PZ", "Z0_MM", "Z0_MMERR",
"Z0_PE", "muplus_ETA", "muplus_OWNPV_X", "muplus_OWNPV_Y", "muplus_OWNPV_Z", "muplus_OWNPV_XERR",
"muplus_OWNPV_YERR", "muplus_OWNPV_ZERR", "muplus_OWNPV_CHI2", "muplus_OWNPV_NDOF", "muplus_IP_OWNPV",
"muplus_IPCHI2_OWNPV", "muplus_P", "muplus_PT", "muplus_PE", "muplus_PX", "muplus_PY", "muplus_PZ", "muplus_PIDe",
"muplus_PIDmu", "muplus_PIDK", "muplus_PIDp", "muplus_ProbNNe", "muplus_ProbNNk", "muplus_ProbNNp",
"muplus_ProbNNpi", "muplus_ProbNNmu", "muplus_ProbNNghost", "muplus_ProbNNe", "muplus_TRACK_CHI2NDOF",
"muplus_TRACK_Likelihood", "muplus_ETA", "muplus_OWNPV_X", "muplus_OWNPV_Y", "muplus_OWNPV_Z", "muplus_OWNPV_XERR",
"muplus_OWNPV_YERR", "muplus_OWNPV_ZERR", "muplus_OWNPV_CHI2", "muplus_OWNPV_NDOF", "muplus_IP_OWNPV",
"muplus_IPCHI2_OWNPV", "muminus_P", "muminus_PT", "muminus_PE", "muminus_PX", "muminus_PY", "muminus_PZ",
"muminus_PIDe", "muminus_PIDmu", "muminus_PIDK", "muminus_PIDp", "muminus_ProbNNe",
// "muminus_ProbNNk",
// "muminus_ProbNNp",
// "muminus_ProbNNpi",
// "muminus_ProbNNmu",
// "muminus_ProbNNghost",
// "muminus_ProbNNe",
// "muminus_TRACK_CHI2NDOF",
// "muminus_TRACK_Likelihood",
// "runNumber",
// "eventNumber",
// "nTracks",
"nPV", "nSPDHits"};
void reduce_general(std::string file)
{
auto f = TFile::Open(file.c_str());
auto treeName = "DecayTree";
TDataFrame df(treeName, f);
df.Snapshot(treeName, "test.root", active_branches);
}
This works fine. However, if I uncomment one additional branch to copy, it runs into a recursion limit:
In file included from input_line_1:1:
In file included from /usr/include/c++/6/new:40:
In file included from /usr/include/c++/6/exception:171:
In file included from /usr/include/c++/6/bits/nested_exception.h:40:
In file included from /usr/include/c++/6/bits/move.h:57:
/usr/include/c++/6/type_traits:774:43: fatal error: recursive template instantiation exceeded maximum depth of 1024
: public __and_<is_array<_Tp>, __not_<extent<_Tp>>>
^~~~~~~~~~~~
/usr/include/c++/6/type_traits:121:26: note: in instantiation of template class 'std::__is_array_unknown_bounds<std::_Tuple_impl<66, ROOT::Internal::TDF::TColumnValue<int> > >' requested here
: public conditional<_B1::value, _B1, _B2>::type
^
/usr/include/c++/6/type_traits:126:14: note: in instantiation of template class 'std::__or_<std::__is_array_unknown_bounds<std::_Tuple_impl<66, ROOT::Internal::TDF::TColumnValue<int> > >,
std::is_function<std::_Tuple_impl<66, ROOT::Internal::TDF::TColumnValue<int> > > >' requested here
: public conditional<_B1::value, _B1, __or_<_B2, _B3, _Bn...>>::type
^
/usr/include/c++/6/type_traits:799:19: note: in instantiation of template class 'std::__or_<std::is_void<std::_Tuple_impl<66, ROOT::Internal::TDF::TColumnValue<int> > >,
std::__is_array_unknown_bounds<std::_Tuple_impl<66, ROOT::Internal::TDF::TColumnValue<int> > >, std::is_function<std::_Tuple_impl<66,
ROOT::Internal::TDF::TColumnValue<int> > > >' requested here
bool = __or_<is_void<_Tp>,
^
/usr/include/c++/6/type_traits:822:14: note: in instantiation of default argument for '__is_destructible_safe<std::_Tuple_impl<66, ROOT::Internal::TDF::TColumnValue<int> > >' required here
: public __is_destructible_safe<_Tp>::type
^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/6/type_traits:144:26: note: in instantiation of template class 'std::is_destructible<std::_Tuple_impl<66, ROOT::Internal::TDF::TColumnValue<int> > >' requested here
: public conditional<_B1::value, _B2, _B1>::type
^
/usr/include/c++/6/type_traits:986:14: note: (skipping 1015 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
: public __and_<is_destructible<_Tp>,
^
/usr/include/c++/6/bits/shared_ptr.h:619:14: note: in instantiation of function template specialization 'std::shared_ptr<ROOT::Internal::TDF::TAction<ROOT::Internal::TDF::SnapshotHelper<(lambda at
/cern/root-build/include/ROOT/TDFInterface.hxx:1108:28), (lambda at /cern/root-build/include/ROOT/TDFInterface.hxx:1098:26)>, ROOT::Detail::TDF::TLoopManager,
ROOT::Internal::TDF::TTypeList<double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double,
double, double, double, double, int, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double,
double, double, double, double, double, double, double, double, double, double, double, double, double, double, int, double, double, double, double, double,
double, double, double, double, double, double, double, double, double, int, int> >
>::shared_ptr<std::allocator<ROOT::Internal::TDF::TAction<ROOT::Internal::TDF::SnapshotHelper<(lambda at /cern/root-build/include/ROOT/TDFInterface.hxx:1108:28),
(lambda at /cern/root-build/include/ROOT/TDFInterface.hxx:1098:26)>, ROOT::Detail::TDF::TLoopManager, ROOT::Internal::TDF::TTypeList<double, double, double,
double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, int, double, double,
double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double,
double, double, double, double, double, double, double, int, double, double, double, double, double, double, double, double, double, double, double, double,
double, double, int, int> > >, ROOT::Internal::TDF::SnapshotHelper<(lambda at /cern/root-build/include/ROOT/TDFInterface.hxx:1108:28), (lambda at
/cern/root-build/include/ROOT/TDFInterface.hxx:1098:26)>, const std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >
&, ROOT::Detail::TDF::TLoopManager &>' requested here
return shared_ptr<_Tp>(_Sp_make_shared_tag(), __a,
^
/usr/include/c++/6/bits/shared_ptr.h:635:19: note: in instantiation of function template specialization 'std::allocate_shared<ROOT::Internal::TDF::TAction<ROOT::Internal::TDF::SnapshotHelper<(lambda at
/cern/root-build/include/ROOT/TDFInterface.hxx:1108:28), (lambda at /cern/root-build/include/ROOT/TDFInterface.hxx:1098:26)>, ROOT::Detail::TDF::TLoopManager,
ROOT::Internal::TDF::TTypeList<double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double,
double, double, double, double, int, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double,
double, double, double, double, double, double, double, double, double, double, double, double, double, double, int, double, double, double, double, double,
double, double, double, double, double, double, double, double, double, int, int> >,
std::allocator<ROOT::Internal::TDF::TAction<ROOT::Internal::TDF::SnapshotHelper<(lambda at /cern/root-build/include/ROOT/TDFInterface.hxx:1108:28), (lambda at
/cern/root-build/include/ROOT/TDFInterface.hxx:1098:26)>, ROOT::Detail::TDF::TLoopManager, ROOT::Internal::TDF::TTypeList<double, double, double, double, double,
double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, int, double, double, double, double,
double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double,
double, double, double, double, double, int, double, double, double, double, double, double, double, double, double, double, double, double, double, double, int,
int> > >, ROOT::Internal::TDF::SnapshotHelper<(lambda at /cern/root-build/include/ROOT/TDFInterface.hxx:1108:28), (lambda at
/cern/root-build/include/ROOT/TDFInterface.hxx:1098:26)>, const std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >
&, ROOT::Detail::TDF::TLoopManager &>' requested here
return std::allocate_shared<_Tp>(std::allocator<_Tp_nc>(),
^
/cern/root-build/include/ROOT/TDFInterface.hxx:1118:24: note: in instantiation of function template specialization 'std::make_shared<ROOT::Internal::TDF::TAction<ROOT::Internal::TDF::SnapshotHelper<(lambda at
/cern/root-build/include/ROOT/TDFInterface.hxx:1108:28), (lambda at /cern/root-build/include/ROOT/TDFInterface.hxx:1098:26)>, ROOT::Detail::TDF::TLoopManager,
ROOT::Internal::TDF::TTypeList<double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double,
double, double, double, double, int, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double,
double, double, double, double, double, double, double, double, double, double, double, double, double, double, int, double, double, double, double, double,
double, double, double, double, double, double, double, double, double, int, int> >, ROOT::Internal::TDF::SnapshotHelper<(lambda at
/cern/root-build/include/ROOT/TDFInterface.hxx:1108:28), (lambda at /cern/root-build/include/ROOT/TDFInterface.hxx:1098:26)>, const
std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > > &, ROOT::Detail::TDF::TLoopManager &>' requested here
df->Book(std::make_shared<DFA_t>(Op_t(std::move(initLambda), std::move(fillTree)), bnames, *fProxiedPtr));
^
/cern/root-build/include/ROOT/TDFInterface.hxx:266:14: note: in instantiation of function template specialization 'ROOT::Experimental::TDF::TInterface<ROOT::Detail::TDF::TLoopManager>::SnapshotImpl<double, double, double, double,
double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, int, double, double, double,
double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double,
double, double, double, double, double, double, int, double, double, double, double, double, double, double, double, double, double, double, double, double,
double, int, int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66>' requested here
return SnapshotImpl<BranchTypes...>(treename, filename, bnames, TypeInd_t());
^
input_line_44:2:129: note: in instantiation of function template specialization 'ROOT::Experimental::TDF::TInterface<ROOT::Detail::TDF::TLoopManager>::Snapshot<double, double, double, double,
double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, int, double, double, double,
double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double,
double, double, double, double, double, double, int, double, double, double, double, double, double, double, double, double, double, double, double, double,
double, int, int>' requested here
if (gROOTMutex) gROOTMutex->UnLock(); ((ROOT::Experimental::TDF::TInterface<ROOT::Detail::TDF::TLoopManager>*)0x7ffe68b1db00)->Snapshot<double, double, double, ...
^
/usr/include/c++/6/type_traits:774:43: note: use -ftemplate-depth=N to increase recursive template instantiation depth
: public __and_<is_array<_Tp>, __not_<extent<_Tp>>>
^
How can I increase the recursion depth or is there another work-around for this? The current limit seems to be 66 branches (or all, I guess).
Cheers,
Graipher