Re: [ROOT] PAW to ROOT

From: Christian Holm Christensen (cholm@hehi03.nbi.dk)
Date: Thu Sep 06 2001 - 18:38:32 MEST


Hi, 

On Wed, 5 Sep 2001 18:10:37 -0400
"Valeri Fine" <fine@bnl.gov> wrote
concerning "Re: [ROOT] PAW to ROOT":
> Since both classes TH1F as well as TH2F ( http://root.cern.ch/root/htmldoc/TH2F.html )  are
> derived from TArrayF (http://root.cern.ch/root/htmldoc/TArrayF.html)
> all methods of the last one are available.

> 
> TH2F *hist = (TH2F*)file->Get("hist_id");
> int dimX = (int)hist->GetNbinsX();
> int dimY = (int)hist->GetNbinsY();
> 
> float *vect = new float[dimX*dimY];
> memcpy(vect,hist->fArray,sizeof(vector)); 
> 
> > Whether there is a clean, simple function call in a ROOT
> > class, I'm not sure (haven't look at recent versions)
>
> One one needs no special function. 
> The function "memcpy" can do job.

One can do it even simpler than that: 

  TRandom* r = new TRandom;
  TH1F* h1 = new TH1F("h1", "Hello World", 100, 0, 10); 
  for (Int_t i = 0; i < 1000; i++) h->Fill(r->Gaus(5,2)); 
  TH2F* h2 = new TH2F("h2", "Hello World", 100, 0, 10, 100, 0, 10); 
  for (Int_t i = 0; i < 1000; i++) h->Fill(r->Gaus(5,2),r->Gaus(5,2)); 
  TArrayF* a1 = new TArrayF(*h1); 
  TArrayF* a2 = new TArrayF(*h2); 

Now you have the bounds checking TArray class instead of the low-level
float** type to play around with.  IMHO, much simpler.  You can
probably write the above as 

  TArrayF a1 = *h1; 
  TArrayF a2 = *h2; 

I'm personally not really keen on C functions like memcpy, and the
like.  memcpy is especially "bad", since it just copies bit for bit
the input to the output, and hence surcumvents the C++ strong typing,
which is one of the reasons for using C++ in the first place.  This is
also the reason why one should strive to use classes like string (or
in case of ROOT TString) rather than pointers to const char, and so
on.  Much cleaner OOP.  Perhaps, the methods like TNamed::SetName
should really take a string/TString reference as argument, rather than
a const Char_t pointer (I know it's probably not gonna happen, but IMHO
it's cleaner - maybe for ROOT 4 :-). 

Yours, 

Christian Holm Christensen -------------------------------------------
Address: Sankt Hansgade 23, 1. th.           Phone:  (+45) 35 35 96 91 
         DK-2200 Copenhagen N                Cell:   (+45) 28 82 16 23
         Denmark                             Office: (+45) 353  25 305 
Email:   cholm@nbi.dk                        Web:    www.nbi.dk/~cholm



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:59 MET