If I have a class made of a hierarchy of classes in pure C++ (ie no ClassDef stuff) and I want to put this class into a root tree without changing the orginal class, can it be done the with inheritance into a root class (ie with ClassDef). Something like: #include "TObject.h" #include <vector> #include "MyC++Class.h" class RootClass : public MyC++Class { public: RootClas(); virtual ~RootClass(); ClassDef(RootClass,1) }; also how deep into the hierarchy must I go. I tried tried to modofy one of the examples by adding a pure C++ class SubEventSTL and adding a data member SEVector which is a vector of SubEventSTL objects. It compiled but gave the following errors: [pmurray@ccc04 sample]$ ./STL UNKNOW type, sopen=SubEventSTL Size: 0 - Contents : 0 1 2 3 4 5 6 7 8 9here 1:0 *** Break *** segmentation violation Generating stack trace... 0x401cd7d7 in TUnixSystem::StackTrace(void) + 0x25b from /usr/local/lib/root/libCore.so.3.05 0x401cc3ce in TUnixSystem::DispatchSignals(ESignals) + 0xb2 from /usr/local/lib/root/libCore.so.3.05 0x401cb59b in <unknown> from /usr/local/lib/root/libCore.so.3.05 0x401cf099 in <unknown> from /usr/local/lib/root/libCore.so.3.05 0x40881848 in <unknown> from /lib/i686/libc.so.6 0x4019287d in TClass::Streamer(void *, TBuffer &) + 0x21 from /usr/local/lib/root/libCore.so.3.05 0x401263d4 in TBuffer::StreamObject(void *, TClass *) + 0x24 from /usr/local/lib/root/libCore.so.3.05 0x40021945 in R__EventSTL_SEVector__FR7TBufferPvi at /home/pmurray/sample/STLcint.cxx:154 from EventSTL.so 0x401b9f79 in TStreamerInfo::WriteBuffer(TBuffer &, char *, int) + 0x1bc1 from /usr/local/lib/root/libCore.so.3.05 0x407300fb in TBranchElement::FillLeaves(TBuffer &) + 0x34b from /usr/local/lib/root/libTree.so.3.05 0x4072a92c in TBranch::Fill(void) + 0x214 from /usr/local/lib/root/libTree.so.3.05 0x4072fd3b in TBranchElement::Fill(void) + 0x117 from /usr/local/lib/root/libTree.so.3.05 0x40744644 in TTree::Fill(void) + 0x80 from /usr/local/lib/root/libTree.so.3.05 0x08048cb9 in main + 0x179 from ./STL 0x4086f507 in __libc_start_main at /usr/src/build/40457-i686/BUILD/glibc-2.2.4/csu/../sysdeps/generic/libc-start.c:129 from /lib/i686/libc.so.6 0x08048a61 in EventSTL::EventSTL(void) + 0x3d from ./STL Aborted [pmurray@ccc04 sample]$ Here is the code: Thank you for your help, Pat Murray //....goSTL rootcint -f STLcint.cxx -c EventSTL.h myLinkDef.h g++ -g -fPIC -I/usr/local/include/root -c STLcint.cxx EventSTL.cxx MainSTL.cxx SubEventSTL.cxx g++ -g -Wl,-soname,EventSTL.so -shared STLcint.o EventSTL.o SubEventSTL.o -o EventSTL.so g++ -g -o STL MainSTL.o EventSTL.so -L/usr/local/lib/root \ -lCore -lCint -lTree -lm -ldl -rdynamic //------------------file SubEventSTL.h #include <vector> class SubEventSTL { public: SubEventSTL(); virtual ~SubEventSTL(); void Add(int x); void VI(); void Clear(); vector<int> B; }; //------------------file SubEventSTL.cxx #include "SubEventSTL.h" SubEventSTL::SubEventSTL() { for (int i=0;i<10;i++) { Add(i); cout << " " << B[i]; } } SubEventSTL::~SubEventSTL() {} void SubEventSTL::Add(int x) { B.push_back(x); } void SubEventSTL::Clear() { B.clear(); } void SubEventSTL::VI() { cout << "Size: " << B.size() << " - Contents : " ; for (int i=0;i<B.size();i++) { cout << " " << B[i]; } cout << endl; } //------------------file EventSTL.h #include "TObject.h" #include <vector> #include "SubEventSTL.h" class EventSTL : public TObject { public: EventSTL(); virtual ~EventSTL(); void Electron(Double_t x); void VI(); void Clear(); vector<Double_t> A; vector<SubEventSTL> SEVector; ClassDef(EventSTL,1) }; //------------------file EventSTL.cxx #include "EventSTL.h" ClassImp(EventSTL) EventSTL::EventSTL() {} EventSTL::~EventSTL() {} void EventSTL::Electron(Double_t x) { A.push_back(x); SubEventSTL se; SEVector.push_back(se); } void EventSTL::Clear() { A.clear(); } void EventSTL::VI() { cout << "Size: " << A.size() << " - Contents : " ; for (Int_t i=0;i<A.size();i++) { cout << " " << A[i]; } cout << endl; } //------------------file myLinkDef.h #ifdef __CINT__ #pragma link off all globals; #pragma link off all classes; #pragma link off all functions; #pragma link C++ class EventSTL+; #endif //-----------------file MainSTL.cxx #include <iostream> #include "TROOT.h" #include "TFile.h" #include "TTree.h" #include "EventSTL.h" EventSTL *CC = new EventSTL; TROOT Mauri("Bos_to_Root","Bos Banks to Root file conversion"); main() { TFile *myfile; myfile = new TFile("STL.root","RECREATE","TTree Dynamic ROOT file"); TTree *mytree = new TTree("T","My tree"); mytree->Branch("abc","EventSTL",&CC,16000,0); for (Int_t i=0;i<10;++i) { for (Int_t j=0;j<i;++j) { CC->Electron(i); cout<<"here "<<i<<":"<<j<<endl; } mytree->Fill(); CC->VI(); CC->Clear(); } mytree->Write(); mytree->Print(); return 0; }
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:11 MET