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