[ROOT] unfriendly trees

From: Eddy Offermann (eddy@rentec.com)
Date: Fri Apr 27 2001 - 05:04:51 MEST


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