Hi Rene, I seem not to be able to get the AddFriend() in tree going. In the example below, I create two tree's. In the first one I make a friend of the second one. Later when opening the seconf the program segv. I ran this on SunOS 2.6 with gcc2.9.5 with a CVS version of a week ago. Could you please have a look, Best Regards, Eddy Starting program: /work/eddy/kk3/src/tree/doit Filling tree Filling tree ****************************************************************************** *Tree :tree : test * *Entries : 10 : Total = 0 bytes File Size = 0 * * : : Tree compression factor = 1.00 * ****************************************************************************** *Br 0 :keylen : keylen/I * *Entries : 10 : Total Size= 0 bytes File Size = 0 * *Baskets : 0 : Basket Size= 32000 bytes Compression= 1.00 * *............................................................................* *Br 1 :key : key[keylen]/C * *Entries : 10 : Total Size= 0 bytes File Size = 0 * *Baskets : 0 : Basket Size= 32000 bytes Compression= 1.00 * *............................................................................* *Br 2 :id : id[2]/I * *Entries : 10 : Total Size= 0 bytes File Size = 0 * *Baskets : 0 : Basket Size= 32000 bytes Compression= 1.00 * *............................................................................* Program received signal SIGSEGV, Segmentation fault. LoadOutput (file=@0x0) at main.C:73 73 tr->SetBranchAddress("keylen",&keylen); (gdb) where #0 LoadOutput (file=@0x0) at main.C:73 #1 0x10b20 in main (argc=-4262088, argv=0xffbef8bc) at main.C:18 //--------------------------------------------------------- #include <TROOT.h> #include <TFile.h> #include <TTree.h> #include <Rtypes.h> void CreateOutput(TString &file, Bool_t mkFriends); void LoadOutput(TString &file); int main(Int_t argc, Char_t **argv) { TROOT showit("showit","showit"); TString file1 = "sample1.root"; CreateOutput(file1,0); TString file2 = "sample2.root"; CreateOutput(file2,1); LoadOutput(file2); return 0; } //__________________________________________________________________________________ void CreateOutput( TString &file, Bool_t mkFriends) { TFile *tfile = new TFile(file.Data(),"RECREATE","file"); TTree *tree = new TTree("tree","test"); Int_t keylen; Char_t *key = new Char_t[1024]; Int_t id[2]; TBranch *b1 = tree->Branch("keylen",&keylen,"keylen/I"); TBranch *b2 = tree->Branch("key",key,"key[keylen]/C"); TBranch *b3 = tree->Branch("id",id,"id[2]/I"); Char_t *funny = "aap noot mies"; printf("Filling tree\n"); for (Int_t i = 0; i < 10; i++) { id[0] = i; id[1] = i+1; keylen = 10; strcpy(key,funny); keylen = strlen(key)+1; tree->Fill(); } if (mkFriends) { tree->AddFriend("alias = tree","sample1.root"); tree->Print(); } delete [] key; tfile->Write(); tfile->Close(); } //__________________________________________________________________________________ void LoadOutput( TString &file) { TFile tfile(file.Data()); TTree *tr = (TTree*)gDirectory->Get("trades"); Int_t keylen; Char_t *key = new Char_t[1024]; Int_t id[2]; tr->SetBranchAddress("keylen",&keylen); tr->SetBranchAddress("key",key); tr->SetBranchAddress("id",id); printf("Reading tree\n"); Int_t nrBytes = 0; for (Int_t j = 0; j < tr->GetEntries(); j++) { nrBytes += tr->GetEvent(j); printf("%d %d %s\n",id[0],id[1],key); } delete tr; }
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:43 MET