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