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