Logo ROOT  
Reference Guide
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();
}
Author
Rene Brun

Definition in file tree1.C.

TBrowser
Definition: TBrowser.h:37
f
#define f(i)
Definition: RSha256.hxx:122
TH2F
2-D histogram with a float per channel (see TH1 documentation)}
Definition: TH2.h:251
Long64_t
long long Long64_t
Definition: RtypesCore.h:73
TTree
Definition: TTree.h:79
TRandom.h
Float_t
float Float_t
Definition: RtypesCore.h:57
Int_t
int Int_t
Definition: RtypesCore.h:45
TBrowser.h
nentries
int nentries
Definition: THbookFile.cxx:91
TTree.h
TFile.h
TROOT.h
TRandom::Rannor
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
TH1::Fill
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
Definition: TH1.cxx:3274
gRandom
R__EXTERN TRandom * gRandom
Definition: TRandom.h:62
TRandom::Rndm
virtual Double_t Rndm()
Machine independent random number generator.
Definition: TRandom.cxx:541
TH2.h
TFile
Definition: TFile.h:54
TH2::Fill
Int_t Fill(Double_t)
Invalid Fill method.
Definition: TH2.cxx:294
Double_t
double Double_t
Definition: RtypesCore.h:59
t1
auto * t1
Definition: textangle.C:20
TH1F
1-D histogram with a float per channel (see TH1 documentation)}
Definition: TH1.h:572
gROOT
#define gROOT
Definition: TROOT.h:406