I’m very new to ROOT, and I’m just starting on research work. I do have many years of experience with C++ though, among many other languages. So that’s my background.
I’m trying to extract some simple data from a D3PD, to make some graphs. I can get things to work in a root shell, but as soon as I move to compiling things everything breaks down. Here’s my code:
#include <root/TFile.h>
#include <root/TROOT.h>
#include <root/TKey.h>
#include <root/TTree.h>
#include <root/TTreePlayer.h>
#include <root/TEntryList.h>
#include <stdio.h>
#include <vector>
int
main()
{
TFile* fh = TFile::Open("NTUP_HI.01611701._002987.root.2");
TTree* tree = (TTree*)fh->Get("HeavyIonD3PD");
std::vector<float>* sv0p_x = NULL;
tree->SetBranchAddress(
"antikt4HIItrEMFR_flavor_component_sv0p_x",
&sv0p_x);
return 0;
}
Here’s my Makefile:
a.out: run.cpp
g++ `root-config --cflags` -D__USE_XOPEN2K8 -D_GNU_SOURCE run.cpp `root-config --libs` -lTreePlayer
And finally, here are the errors that result when I try to run the code:
[user@host ntup]$ make && ./a.out
g++ `root-config --cflags` -D__USE_XOPEN2K8 -D_GNU_SOURCE run.cpp `root-config --libs` -lTreePlayer
Warning in <TClass::TClass>: no dictionary for class AttributeListLayout is available
Warning in <TClass::TClass>: no dictionary for class pair<string,string> is available
Error in <TTree::SetBranchAddress>: Unable to determine the type given for the address for "antikt4HIItrEMFR_flavor_component_sv0p_x". The class expected (vector<float>) refers to an stl collection and do not have a compiled CollectionProxy. Please generate the dictionary for this class (vector<float>)
I didn’t bother putting a GetEntry() call into the code I pasted. Given the failure SetBranchAddress() I just get a segfault when I try GetEntry().
Does anyone have any ideas about how to fix this “Unable to determine the type” error?