(no subject)

Rene Brun (Rene.Brun@cern.ch)
Thu, 26 Feb 1998 12:03:41 +0100


Jayoung Wu wrote:
>
> Can I create 3 dimension array for one of Branch in ROOT?
>

Only 1 and 2-d arrays are supported in version 1.03/09.
Version 2.00 available next week includes supports for
multi-dimensional arrays in general. In the new version
TTree::MakeCode has been modified to generate correct array
declarations.

Rene Brun

> "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