Hi Maurizio, I have already posted several times the following example. I have slightly extended it to show how to create a Tree in a compiled program and read it with two small macros. Your short example cannot work because you try to create a branch with a pointer to a class not derived from TObject. You will find below the following files: A.h the definition file for a small class A A.cxx the corresponding implementation file ALinkDef.h the file containing the rootcint directives AMain.cxx the main program to create the Tree ARead.C a small macro to loop on the file A.root generated by Amain Asimple.C a small macro to plot one Tree variable goA a small script showing how to run rootcint,link,etc on Linux In this short example, I also illustrate how to create a shared lib. You should look at the examples in $ROOTSYS/test/MainEvent.cxx for a more elaborated Tree example. I also suggest you read the nice tutorials developped by the FNAL Root support team at URL: http://www-pat.fnal.gov/root/ Rene Brun I suggest the following steps using Root version 2.23: 1- execute goA 2- run A 3- execute the following Root interactive session Root > .x ARead.C 4- execute the following Root interactive session Root > .x Asimple.C #--------------file goA rootcint -f Acint.cxx -c A.h ALinkDef.h g++ -g -fPIC -I$ROOTSYS/include -c Acint.cxx A.cxx Amain.cxx g++ -g -Wl,-soname,A.so -shared Acint.o A.o -o A.so g++ -g -o A Amain.o A.so -L$ROOTSYS/lib \ -lCore -lCint -lTree -lm -ldl -rdynamic //------------------------------ A.h #ifndef __A_HH__ #define __A_HH__ #include "TObject.h" class A : public TObject { public: A(); virtual ~A(); Float_t fA; Float_t fB; ClassDef(A,1) //My small class example }; #endif //------------------------------- A.cxx #include "A.h" ClassImp(A) A::A() { fA = 1; fB = 2; } A::~A() { } //---------------------------file ALinkDef.h #ifdef __CINT__ #pragma link off all globals; #pragma link off all classes; #pragma link off all functions; #pragma link C++ class A; #endif //------------------------------macro ARead.C void Aread() { //example of macro to read the Tree generated in Amain.cxx gSystem->Load("A"); TFile *f = new TFile("A.root"); TTree *T = (TTree*)f->Get("T"); A *a=0; T->SetBranchAddress("aa",&a); Int_t nentries = (Int_t)T->GetEntries(); for (Int_t i=0;i<nentries;i++) { T->GetEntry(i); if (a->fA >0.001) continue; printf("Print entry:%d\n",i); a->Dump(); } } //------------------------------macro Asimple.C { // small macro plotting the distribution of variable fB gROOT->Reset(); gSystem->Load("A"); TFile *f = new TFile("A.root"); T->Draw("fB","fA<0.5"); } On Thu, 18 Nov 1999, Maurizio Ungaro wrote: > I'm trying to build a very simple tree > with my class A this way: > > > class A > { > public: > Int_t a; > Int_t b; > }; > > > > A *CC; > > > TROOT simple("simple","trees"); > > main() > { > > Int_t split = 0; > Int_t bsize = 32000; > > > // Create a ROOT Tree > > TTree *tree = new TTree("T","An example of ROOT tree"); > tree->Branch("aa","A",&CC,bsize,split); > > > return 0; > } > > > and I'm getting the message > > Error in <TTree::BranchObject>: Cannot find class:A > > > What am I doing wrong? >
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:43 MET