Thanks to the many people who reacted to my mail yesterday. I forgot to include the example of main program. It is included below. Rene Brun //-----------------------file Amain.cxx #include "TROOT.h" #include "TFile.h" #include "TTree.h" #include "TRandom.h" #include "A.h" TROOT simple("simple","trees"); int main() { Int_t split = 1; Int_t bsize = 32000; // Create a ROOT Tree A *a = new A; TFile f("A.root","recreate"); TTree *tree = new TTree("T","An example of ROOT tree"); tree->Branch("aa","A",&a,bsize,split); for (Int_t i=0;i<10000;i++) { a->fA = gRandom->Rndm(); a->fB = gRandom->Gaus(0,1); tree->Fill(); } tree->Print(); tree->Write(); return 0; } Rene Brun wrote: > > 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