I’ve made an RDataframe on TTrees across 1k files within Python so I can define new columns and files. The difficult part is after some Defines / Filters I want to Snapshot the results into a small file so I don’t have to re-filter across my Gbs of data every time.
However, a snapshot fails with:
The class requested (ROOT::VecOps::RVec<vector<double> >) for the branch "pixel_reset" is an instance of an stl collection and does not have a compiled CollectionProxy. Please generate the dictionary for this collection (ROOT::VecOps::RVec<vector<double> >) to avoid to write corrupted data.
___
_Please read [tips for efficient and successful posting](https://root-forum.cern.ch/t/tips-for-efficient-and-successful-posting/28292) and [posting code](https://root-forum.cern.ch/t/posting-code-read-this-first/28293)_
I have tried the following to no avail:
building a G__dictionary against my linkdef:
#include <ROOT/RVec.hxx>
#include <vector>
#ifdef __ROOTCLING__
#pragma link C++ class vector<vector <float> >+;
#pragma link C++ class vector<vector <double> >+;
#pragma link C++ class RVec<vector <double> >+;
// no linking difference from
// #pragma link C++ class ROOT::VecOps::RVec<vector <double> >+;
#endif
and loading with
ROOT.gSystem.Load("libmyDict.so") // with pcm file in directory too
also using:
ROOT.gInterpreter.GenerateDictionary("ROOT::VecOps::RVec<vector<double>>", "vector")
Fails with the same error.
Creating an object of the specified type fails.
Given any tree with branch of type:
ROOT::VecOps::RVec<vector<double>>,
as shown with:
rdf.GetColumnType('colName');
…How do I get this rdf to snapshot with these branches??
Reproduce by PyROOT:
import ROOT
rdf = ROOT.RDrameFrame("myStupidTree", "myPoorlyconstructedFile.root")
rdf.Snapshot("whatever", "slightlyLessWorse.root")
ROOT Version: ROOT Version: 6.27/01
Platform: ubuntu1~20.04.1
Compiler: c++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0