Hi,
I have
struct BinSearch {
float phi_c, dphi_min, dphi_max;
...
};
...
bso = mh->MakeField<std::vector<BinSearch>>("bso");
bsn = mh->MakeField<std::vector<BinSearch>>("bsn");
The vectors are “parallel”, ie, they have the same number of elements for every event / entry. I was trying to define the difference and had trouble with the lambda versions, the string-based one works as expected, as TTree::Draw machinery does it.
auto H = ROOT::RDF::Experimental::FromRNTuple("H", "SelHitIdcs.root");
auto H0 = H.Define("Ddphi", [](float n, float o) { return n - o; }, {"bsn.dphi_max", "bso.dphi_max"});
auto H1 = H.Define("Ddphi", [](BinSearch &n, BinSearch &o) { return n.dphi_max - o.dphi_max;}, {"bsn", "bso"});
auto H2 = H.Define("Ddphi", "bsn.dphi_max - bso.dphi_max");
Expanding / plotting H0 returns N_events zeroes, H1 causes an unscheduled interruption, see below.
How is one supposed to write a lambda expression version of Define for this case?
Cheers,
Matevz
(gdb) bt
#0 0x00007ffff08f745e in std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__detail::_Select1st, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::size (this=0x0) at /usr/include/c++/13/bits/hashtable.h:648
#1 0x00007ffff08f6aeb in std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__detail::_Select1st, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::find (this=0x0, __k="Ddphi") at /usr/include/c++/13/bits/hashtable.h:1677
#2 0x00007fffdb5e7dd7 in std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::find (this=0x0, __x="Ddphi") at /usr/include/c++/13/bits/unordered_map.h:887
#3 0x00007fffdb5e6103 in ROOT::Internal::RDF::RColumnRegister::ResolveAlias[abi:cxx11](std::basic_string_view<char, std::char_traits<char> >) const (this=0x7ffff765a010, alias="Ddphi") at /home/matevz/root-dev/dev-1/tree/dataframe/src/RDFColumnRegister.cxx:286
#4 0x00007fffdb619316 in ROOT::Internal::RDF::GetValidatedColumnNames (lm=..., nColumns=1,
columns=std::vector of length 1, capacity 1 = {...}, colRegister=..., ds=0x0)
at /home/matevz/root-dev/dev-1/tree/dataframe/src/RDFInterfaceUtils.cxx:903