Can I create 3 dimension array for one of Branch in ROOT? "maketree.C" filled the tree in the following way: ------------------------------------------------------------------- Float_t sum,intrpos[3],bgo[10][2][20]; // Create a new ROOT binary machine independant file TFile *f = new TFile("aticdata.root","RECREATE"); // Create a ROOT Tree and branches TTree *tree = new TTree("EVENT","Event Tree"); TBranch *branch1 = tree->Branch("SUM",&sum,"sum/F"); TBranch *branch2 = tree->Branch("INTRPOS",intrpos,"intrpos[3]/F"); TBranch *branch3 = tree->Branch("BGO",bgo,"bgo[10][2][20]/F"); ^^^^^^^^^^^^^^ ??? // Fill the tree for(event=1; event<=NUMOFEVENTS; event++) { sum = XXX; intrpos[0]=XXX; intrpos[1]=XXX; intrpos[2]=XXX; for(i=0; i<10; i++) for(j=0; j<2; j++) for(k=0; k<20; k++) bgo[i][j][k]=XXX; tree->Fill(); ------------------------------------------------------------------- When I retrieve each branch value from the tree("EVENT") in the following manner I succededed in retrieving sum and intrpos. However bgo gives garbage. ^^^ ^^^^^^^ ^^^ Is this because bgo is 3 dim array or my code is wrong? ---------------------------- retrieving routine ------------- #include <stdio.h> #include "TROOT.h" #include "TFile.h" #include "TTree.h" #include "TBranch.h" #include "TObject.h" Int_t main() { Int_t nevent; Int_t nbyte; Float_t sum; Float_t intrpos[3]; Float_t bgo[10][2][20]; TROOT readtree("readtree","Test of reading TREE"); // Connect ROOT file TFile *f = new TFile("aticdata.root"); // Read Tree named "EVENT" in memory. // Tree pointer is assigned the same name. TTree *EVENT = (TTree *)f->Get("EVENT"); // Access each branch TBranch *bsum = (TBranch *)EVENT->GetBranch("SUM"); TBranch *bintrpos = (TBranch *)EVENT->GetBranch("INTRPOS"); TBranch *bbgo = (TBranch *)EVENT->GetBranch("BGO"); // Set addresses bsum->SetAddress(&sum); bintrpos->SetAddress(&intrpos[0]); bbgo->SetAddress(&bgo[0][0][0]); // Read from each branch nevent = EVENT->GetEntries(); nbyte = 0; for(Int_t i=0; i<nevent; i++) { nbyte += EVENT->GetEvent(i); printf("%d %g\n",i,sum); printf("%d %g %g %g\n",i,intrpos[0],intrpos[1],intrpos[2]); for(Int_t j=0; j<10; j++) for(Int_t k=0; k<2; k++) for(Int_t l=0; l<20; l++) printf("%d %g\n",i,bgo[j][k][l]); } f->Close(); return 0; } ---- Thanks a lot! Jayoung
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:30 MET