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