Good morning.
I have a problem creating a TBranch containing a std::vector<fastjet::PseudoJet>
.
When I try to fill a TBranch with such objects, this error is shown:
Fatal in TBranchElement::InitializeOffsets: Could not find the real data member ‘Jet._structure._ptr’ when constructing the branch ‘Jet’ [Likely an internal error, please report to the developers].
aborting
#0 0x00007fbb1cb77c2a in __GI___wait4 (pid=2763, stat_loc=stat_loc
entry=0x7ffdfe2ac3a8, options=options
entry=0, usage=usage
entry=0x0) at …/sysdeps/unix/sysv/linux/wait4.c:27
#1 0x00007fbb1cb77beb in __GI___waitpid (pid=, stat_loc=stat_loc
entry=0x7ffdfe2ac3a8, options=options
entry=0) at waitpid.c:38
#2 0x00007fbb1cae70e7 in do_system (line=) at …/sysdeps/posix/system.c:172
#3 0x00007fbb1d94346e in TUnixSystem::StackTrace() () from /home/pasquale/root/lib/root/libCore.so
#4 0x00007fbb1d8116a8 in DefaultErrorHandler(int, bool, char const*, char const*) () from /home/pasquale/root/lib/root/libCore.so
#5 0x00007fbb1d810f8a in ErrorHandler () from /home/pasquale/root/lib/root/libCore.so
#6 0x00007fbb1d82449d in TObject::Fatal(char const*, char const*, …) const () from /home/pasquale/root/lib/root/libCore.so
#7 0x00007fbb1d178bc2 in TBranchElement::InitializeOffsets() () from /home/pasquale/root/lib/root/libTree.so
#8 0x00007fbb1d17cd2f in TBranchElement::SetAddressImpl(void*, bool) () from /home/pasquale/root/lib/root/libTree.so
#9 0x00007fbb1d1e3a6e in TTree::BronchExec(char const*, char const*, void*, bool, int, int) () from /home/pasquale/root/lib/root/libTree.so
#10 0x00007fbb1d1e7102 in TTree::BranchImpRef(char const*, TClass*, EDataType, void*, int, int) () from /home/pasquale/root/lib/root/libTree.so
#11 0x000055a9ed022b5b in TreeJetCreator(char const*, double, double) ()
#12 0x000055a9ed01eab1 in main ()
Annullato (core dump creato)
Here are my steps to get this error.
First I write this header file:
jetdict.h
#include <vector>
#include <PseudoJet.hh>
#include <SharedPtr.hh>
#include <PseudoJetStructureBase.hh>
#pragma link C++ class vector;
#pragma link C++ class fastjet::PseudoJet;
#pragma link C++ class fastjet::SharedPtr;
#pragma link C++ class fastjet::PseudoJetStructureBase;
#pragma link C++ class fastjet::PseudoJet::UserInfoBase;
#pragma link C++ class fastjet::SharedPtr<fastjet::PseudoJetStructureBase>;
#pragma link C++ class fastjet::SharedPtr<fastjet::PseudoJet::UserInfoBase>;
#pragma link C++ class fastjet::SharedPtr<fastjet::PseudoJet::UserInfoBase>::__SharedCountingPtr;
#pragma link C++ class fastjet::SharedPtr<fastjet::PseudoJetStructureBase>::__SharedCountingPtr;
#pragma link C++ class vector<fastjet::PseudoJet>;
which I compile to a JetDictionary.cpp file using this line:
rootcling JetDictionary.cpp jetdict.h -I/home/pasquale/fastjet/include/fastjet -I/home/pasquale/fastjet/include
Then I write my TreeJetCreator.cpp function where I fill the TBranch:
int TreeJetCreator(//variables)
{
TTree Jet_tree("Jet_tree","Jet_tree");
TBranch *jetbranch = Jet_tree.Branch("Jet", &jets);
Int_t i = 0, j = 0, flag = 0;
for (i=0; i<nentries; i+=1)
{
//Data manipulation
ClusterSequence cluster_seq(particelle, jet_def);
jets = sorted_by_pt(cluster_seq.inclusive_jets(pT_min));
jetbranch->Fill();
}
Jet_tree.Write("");
return 0;
Thank you!
ROOT Version: 6.22/00
System: Ubuntu 20.04.1 LTS
Compiler: h5c++