Hello, For the future reference I would like to report a bug in the previously presented code. The statbuf should be declared as a variable not a pointer. The corrected code is enclosed. Thank you Rene and best regards. Michal > Date: Wed, 22 Mar 2000 07:41:57 +0000 > From: Rene Brun <Rene.Brun@cern.ch> > MIME-Version: 1.0 > To: lijowski@cosray2.wustl.edu > CC: roottalk@pcroot.cern.ch > Subject: Re: How to update a tree > Content-Transfer-Encoding: 7bit > > Hi Michal, > To continue to fill an existing TTree (TNtuple) in a file, you must > import in memory the previous TTree object. > See the mods in your code below. > > Rene Brun > > lijowski@cosray2.wustl.edu wrote: > > > > Hello, > > > > I would like to update an existing tree in the existing file > > with more entries. In the following example after running the > > program twice I would like to have 75000 entries in the ntuple > > instead of 50000 which I get using this version. > > > > Thank you and best regards, > > > > Michal Lijowski > > > > // This program tests updating the ROOT ntuple > > #include <TROOT.h> > > #include <Rtypes.h> > > #include <TSystem.h> > > #include <TFile.h> > > #include <TNtuple.h> > > #include <TRandom.h> > > #include <sys/stat.h> > > #include <sys/types.h> > > #include <errno.h> > > > > int main(int argc, char **argv) > > { > > > > char *ProgName; > > TFile *hfile; > > struct stat statbuf; > > TNtuple *ntuple; > > > > TROOT test_ROOT("SIMPLE", "Testing Tree Update"); > > > > ProgName = strrchr(argv[0], '/'); > > if (ProgName == NULL) { > > /* not running under gdb */ > > ProgName = argv[0]; > > } else { > > /* running under gdb */ > > ProgName++; > > } > > Char_t outfile[40]; > > sprintf(outfile, "%s.root", ProgName); > > Int_t istat = 1; > > istat = stat(outfile, &statbuf); > > Int_t NoEvents; > > > > // test whether the output file exists or not > > if ( (istat < 0) && (errno == ENOENT) ) { > > printf(" %s file %s does not exist istat %d errno %d\n", ProgName, outfile, istat, errno); > > hfile = (TFile*)gROOT->FindObject(outfile); > > if (hfile) hfile->Close(); > > hfile = new TFile(outfile,"RECREATE","Demo ROOT file with ntuple"); > ntuple = new TNtuple("ntuple","Demo > ntuple","px:py:pz:random:i"); > > NoEvents = 25000; > > // return 1; > > } else if ( (istat < 0) && (errno != ENOENT) ) { > > printf(" %s has problem with file %s istat %d errno %d\n", ProgName, outfile, istat, errno); > > return 1; > > } else if (istat == 0) { > > printf(" %s file %s exists istat %d errno %d\n", ProgName, outfile, istat, errno); > > hfile = new TFile(outfile, "UPDATE"); > ntuple = (TNtuple*)hfile->Get("ntuple"); > > NoEvents = 50000; > > } > > > > > // Fill histograms randomly > > gRandom->SetSeed(); > > Float_t px, py, pz; > > for (Int_t i = 0; i < NoEvents; i++) { > > gRandom->Rannor(px,py); > > pz = px*px + py*py; > > Float_t random = gRandom->Rndm(1); > > ntuple->Fill(px, py, pz, random, i); > > } > > // Save all objects in this file > > hfile -> Write(); > > hfile -> Close(); > > return 0; > > } > > > > >
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:21 MET