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