Hi Rooters, Running the following macro (plot.C) gives some unexpected results. The macro has two functions: fill() and analysis(). The fill routine fills the ntuple: ntuple with the variable x,y and z. x,y, and z are always equal to 5. The analysis routine reads all entries in the ntuple created in the fill routine. A new ntuple: analysis is created. The main routine (plot()) calls fill() and analysis() several times. When the root is started from the command line (of a linux redhat 6.2 box): root -l -q plot.C the following output is produced -- start output ******************************************* * * * W E L C O M E to R O O T * * * * Version 2.25/03 11 October 2000 * * * * You are welcome to visit our Web site * * http://root.cern.ch * * * ******************************************* Compiled with thread support. CINT/ROOT C/C++ Interpreter version 5.14.50, Sep 2 2000 Type ? for help. Commands must be C++ statements. Enclose multiple statements between { }. Processing plot.C... this is fill this is analysis i = 0 x = 5.000 y = 5.000 z = 5.000 this is fill this is analysis i = 0 x = 5.000 y = 5.000 z = 5.000 i = 1 x = 5.240 y = 5.240 z = 0.000 -- end of output The last line is VERY strange. This values of x,y and z should all be equal to 5. This is the source code of the macro: //-----start of plot.C void fill() { printf("this is fill\n"); TNtuple *ntuple = (TNtuple *)gDirectory->Get("ntuple"); if ( ntuple == NULL ) { ntuple = new TNtuple("ntuple","ntuple","x:y:z"); } Float_t x = 5.0; Float_t y = 5.0; Float_t z = 5.0; ntuple->Fill(x,y,z); } void analysis() { printf("this is analysis\n"); TNtuple *analysis = (TNtuple *)gDirectory->Get("analysis"); if ( analysis == NULL ) { analysis = new TNtuple("analysis","analysis","x:y:z"); } TNtuple *ntuple = (TNtuple *)gDirectory->Get("ntuple"); Float_t x,x1; Float_t y,y1; Float_t z,z1; if ( ntuple != NULL ) { ntuple->SetBranchAddress("x",&x); ntuple->SetBranchAddress("y",&y); ntuple->SetBranchAddress("z",&z); int nentries = ntuple->GetEntries(); for(int i=0;(i<nentries);i++) { ntuple->GetEntry(i); x1 = x + 1.0; y1 = y + 1.0; z1 = z + 1.0; analysis->Fill(x1,y1,z1); printf("i = %d x = %8.3f y = %8.3f z = %8.3f\n",i,x,y,z); } } } void plot() { fill(); analysis(); fill(); analysis(); } // end of plot.C Pieter Meulenhoff p.j.meulenhoff@kpn.com KPN Research Groningen, The Netherlands
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:35 MET