HP, I cannot tell you if you result is OK or not. In the first case, you read 2 branches, but only 1 in your second case. Are the results correct ? Note that you should not do: double *pf1 = (double *) malloc(dimension*sizeof(double)); but double *pf1 = new double[dimension]; Rene Brun On Fri, 6 Dec 2002, HP Wei wrote: > > >You can do: > > TClonesArray *arr =0; > > tree->SetBranchAddress("T", &arr); > > tree->SetBranchStatus("*",0); > > tree->SetBranchStatus("f1",1); > > tree->SetBranchStatus("f2",1); > > //then in the loop (see below > > tree->GetEntry(i); > > Hi REne, > I compared this method with the following one: > > (1) From the branch T_, find the dimension of the TClonesArray at i-th > entry. > (2) double *pf1 = (double *) malloc(dimension*sizeof(double)); > (3) tree->SetBranchAddress("T.f1", pf1); > (4) tree->SetBranchStatus("T.f1", 1); > (5) tree->GetEntry(i) > then, the array pointed by pf1 contains the data at the i-th entry. > > This method appears to be about three time faster than the > above TClonesArray method. > > Is this normal ? Or am I missing something in the TClonesArray method? > --HP > > >On Fri, 6 Dec 2002, HP Wei wrote: > > > >> I have a tree with one branch ("T") into which I populate with > >> TClonesArray of objects of class CL: > >> > >> Class CL : public TObject { > >> public: > >> double f1; > >> double f2; > >> int f3; > >> int f4; > >> > >> .... > >> }; > >> > >> The split is set to 1 when the tree is filled with data. > >> > >> Now, I want to read data from the resulting root file. > >> As in the tcl.C example, I do the following: > >> TClonesArray *arr =0; > >> tree->SetBranchAddress("T", &arr); > >> tree->GetEvent(event_number); > >> > >> This will extract data for f1, f2, f3, and f3... (all data fields defined > >> in class CL.) > >> > >> Suppose I want only f1, and f2. > >> What is the best way ? > >> > >> --HP > >> > >> > > >
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:23 MET