Loading [MathJax]/extensions/tex2jax.js
Logo ROOT  
Reference Guide
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
tree1.C File Reference

Detailed Description

View in nbviewer Open in SWAN This example is a variant of hsimple.C but using a TTree instead of a TNtuple.

It shows:

  • how to fill a Tree with a few simple variables.
  • how to read this Tree
  • how to browse and analyze the Tree via the TBrowser and TTreeViewer This example can be run in many different ways:
  1. Using the Cling interpreter
    .x tree1.C
  2. Using the automatic compiler interface
    .x tree1.C++
  3. .L tree1.C or .L tree1.C++
    tree1()
    One can also run the write and read parts in two separate sessions. For example following one of the sessions above, one can start the session:
    .L tree1.C
    tree1r();
    #include "TROOT.h"
    #include "TFile.h"
    #include "TTree.h"
    #include "TBrowser.h"
    #include "TH2.h"
    #include "TRandom.h"
    void tree1w()
    {
    //create a Tree file tree1.root
    //create the file, the Tree and a few branches
    TFile f("tree1.root","recreate");
    TTree t1("t1","a simple Tree with simple variables");
    Float_t px, py, pz;
    Double_t random;
    Int_t ev;
    t1.Branch("px",&px,"px/F");
    t1.Branch("py",&py,"py/F");
    t1.Branch("pz",&pz,"pz/F");
    t1.Branch("random",&random,"random/D");
    t1.Branch("ev",&ev,"ev/I");
    //fill the tree
    for (Int_t i=0;i<10000;i++) {
    gRandom->Rannor(px,py);
    pz = px*px + py*py;
    random = gRandom->Rndm();
    ev = i;
    t1.Fill();
    }
    //save the Tree header. The file will be automatically closed
    //when going out of the function scope
    t1.Write();
    }
    void tree1r()
    {
    //read the Tree generated by tree1w and fill two histograms
    //note that we use "new" to create the TFile and TTree objects !
    //because we want to keep these objects alive when we leave this function.
    TFile *f = new TFile("tree1.root");
    TTree *t1 = (TTree*)f->Get("t1");
    Float_t px, py, pz;
    Double_t random;
    Int_t ev;
    t1->SetBranchAddress("px",&px);
    t1->SetBranchAddress("py",&py);
    t1->SetBranchAddress("pz",&pz);
    t1->SetBranchAddress("random",&random);
    t1->SetBranchAddress("ev",&ev);
    //create two histograms
    TH1F *hpx = new TH1F("hpx","px distribution",100,-3,3);
    TH2F *hpxpy = new TH2F("hpxpy","py vs px",30,-3,3,30,-3,3);
    //read all entries and fill the histograms
    Long64_t nentries = t1->GetEntries();
    for (Long64_t i=0;i<nentries;i++) {
    t1->GetEntry(i);
    hpx->Fill(px);
    hpxpy->Fill(px,py);
    }
    //we do not close the file. We want to keep the generated histograms
    //we open a browser and the TreeViewer
    if (gROOT->IsBatch()) return;
    new TBrowser();
    t1->StartViewer();
    // in the browser, click on "ROOT Files", then on "tree1.root".
    // you can click on the histogram icons in the right panel to draw them.
    // in the TreeViewer, follow the instructions in the Help button.
    // Allow to use the TTree after the end of the function.
    t1->ResetBranchAddresses();
    }
    void tree1() {
    tree1w();
    tree1r();
    }
    #define f(i)
    Definition: RSha256.hxx:104
    int Int_t
    Definition: RtypesCore.h:43
    double Double_t
    Definition: RtypesCore.h:57
    long long Long64_t
    Definition: RtypesCore.h:71
    float Float_t
    Definition: RtypesCore.h:55
    int nentries
    Definition: THbookFile.cxx:89
    #define gROOT
    Definition: TROOT.h:406
    R__EXTERN TRandom * gRandom
    Definition: TRandom.h:62
    Using a TBrowser one can browse all ROOT objects.
    Definition: TBrowser.h:37
    A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
    Definition: TFile.h:53
    1-D histogram with a float per channel (see TH1 documentation)}
    Definition: TH1.h:571
    virtual Int_t Fill(Double_t x)
    Increment bin with abscissa X by 1.
    Definition: TH1.cxx:3275
    2-D histogram with a float per channel (see TH1 documentation)}
    Definition: TH2.h:251
    Int_t Fill(Double_t)
    Invalid Fill method.
    Definition: TH2.cxx:294
    virtual void Rannor(Float_t &a, Float_t &b)
    Return 2 numbers distributed following a gaussian with mean=0 and sigma=1.
    Definition: TRandom.cxx:489
    virtual Double_t Rndm()
    Machine independent random number generator.
    Definition: TRandom.cxx:541
    A TTree represents a columnar dataset.
    Definition: TTree.h:78
    auto * t1
    Definition: textangle.C:20
Author
Rene Brun

Definition in file tree1.C.