Re: [ROOT] problem with TTree::Print in 3.10/02

From: Robert Michaels (rom@jlab.org)
Date: Wed Apr 14 2004 - 14:49:52 MEST


Ok, if I replace "right" by "fred" or "potato" it works.  
I suppose I should have known better.  (But "right" did
work in previous root versions; oh well.)

thanks
Robert


On Wed, 14 Apr 2004, Rene Brun wrote:

> Hi Robert,
> 
> The keywords "left" and "right" are manipulators used by C++ iostream
> see: http://www.cplusplus.com/ref/iostream/ios_base/_internal_left_right.html
> 
> Rene Brun
> 
> Robert Michaels wrote:
> > 
> > Using ROOT 3.10/02 compiled with gcc 3.2.3 on a RHEL 3WS.
> > The following example illustrates my problem.  It is minor
> > but I am wondering why this occured for this newer version
> > of root ?  For some earlier versions of root it was not a
> > problem.  Is it a new bug ?
> > 
> > thanks
> > Robert Michaels
> > Jefferson Lab
> > 
> > {
> > // This macro:  tsimple.C
> > //
> > // Why in this example must I have "R" instead
> > // of "right" as the 1st argument of TTree ?
> > //   right->Print`()   fails
> > // but if I replace "right" by "R", then
> > //   R->Print()  succeeds
> > 
> > // This problem occurs on a RH enterprise 3WS
> > // with ROOT version 3.10/02  compiled with gcc 3.2.3
> > // kernel 2.4.21-9.0.1.EL
> > //
> > // Most relevant is ROOT version, since 3.05/07
> > // compiled with same compiler on same system
> > // right->Print()  works fine.
> > // Some earlier versions also work (3.02/07, 3.03/06).
> > 
> >   gROOT->Reset();
> > 
> >   Double_t px, py, ev, bb;
> >   Int_t kout = 5000;
> > 
> >   TFile *hfile = new TFile("t.root","RECREATE","Demo");
> > 
> > // The following works ok -- can do "R->Print()"
> > //  TTree *tree = new TTree("R","simple tree");
> > 
> > // But this does not work:
> >    TTree *tree = new TTree("right","simple tree");
> > 
> > // Failure:
> > // root [0] .x tsimple.C
> > // root [1] right->Print()
> > //Error: non class,struct,union object right used with . or -> FILE:(tmpfile) LINE:1
> > //*** Interpreter error recovered ***
> > // So you must:
> > // root [2] TTree *R = (TTree*)gROOT.FindObject("right")
> > // root [3] R->Print()
> > // (no error now)
> > 
> >   tree->Branch("px",&px,"px/D",kout);
> >   tree->Branch("py",&py,"py/D",kout);
> >   tree->Branch("ev",&ev,"ev/D",kout);
> >   tree->Branch("bb",&bb,"bb/D",kout);
> > 
> > 
> > // Fill tree randomly
> >   gRandom->SetSeed();
> > 
> >   for (Int_t i = 0; i < 5000; i++) {
> >      gRandom->Rannor(px,py);
> >      ev = ev+1;
> >      bb = 40*ev+1000;
> >      tree->Fill();
> >   }
> > 
> >   tree->Write();
> > 
> > }
> 



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:07 MET