Logo ROOT  
Reference Guide
tree4.C File Reference

Detailed Description

View in nbviewer Open in SWAN This example writes a tree with objects of the class Event. It is a simplified version of $ROOTSYS/test/MainEvent.cxx to write the tree, and $ROOTSYS/test/eventb.C It shows:

  • how to fill a Tree with an event class containing these data members:
    char fType[20];
    Int_t fNtrack;
    Int_t fNseg;
    Int_t fNvertex;
    UInt_t fFlag;
    Float_t fTemperature;
    EventHeader fEvtHdr;
    TClonesArray *fTracks; //->
    TH1F *fH; //->
    Int_t fMeasures[10];
    Float_t fMatrix[4][4];
    Float_t *fClosestDistance; //[fNvertex]
  • the difference in splitting or not splitting a branch
  • how to read selected branches of the tree, and print the first entry with less than 587 tracks.
  • how to browse and analyze the Tree via the TBrowser and TTreeViewer

This example can be run in many different ways:

  • way1 using the Cling interpreter:
    .x tree4.C
  • way2 using the Cling interpreter:
    .L tree4.C
    tree4()
  • way3 using ACLIC:
    .L ../test/libEvent.so
    .x tree4.C++

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 tree4.C
tree4r();
R__LOAD_LIBRARY($ROOTSYS/test/libEvent.so)
#include "TFile.h"
#include "TTree.h"
#include "TBrowser.h"
#include "TH2.h"
#include "TRandom.h"
#include "TClassTable.h"
#include "TSystem.h"
#include "TROOT.h"
#include "../test/Event.h"
void tree4w()
{
//create a Tree file tree4.root
TFile f("tree4.root","RECREATE");
// Create a ROOT Tree
TTree t4("t4","A Tree with Events");
// Create a pointer to an Event object
Event *event = new Event();
// Create two branches, split one.
t4.Branch("event_split", &event,16000,99);
t4.Branch("event_not_split", &event,16000,0);
// a local variable for the event type
char etype[20];
// Fill the tree
for (Int_t ev = 0; ev <100; ev++) {
Float_t sigmat, sigmas;
gRandom->Rannor(sigmat,sigmas);
Int_t ntrack = Int_t(600 + 600 *sigmat/120.);
Float_t random = gRandom->Rndm(1);
sprintf(etype,"type%d",ev%5);
event->SetType(etype);
event->SetHeader(ev, 200, 960312, random);
event->SetNseg(Int_t(10*ntrack+20*sigmas));
event->SetNvertex(Int_t(1+20*gRandom->Rndm()));
event->SetFlag(UInt_t(random+0.5));
event->SetTemperature(random+20.);
for(UChar_t m = 0; m < 10; m++) {
event->SetMeasure(m, Int_t(gRandom->Gaus(m,m+1)));
}
// fill the matrix
for(UChar_t i0 = 0; i0 < 4; i0++) {
for(UChar_t i1 = 0; i1 < 4; i1++) {
event->SetMatrix(i0,i1,gRandom->Gaus(i0*i1,1));
}
}
// Create and fill the Track objects
for (Int_t t = 0; t < ntrack; t++) event->AddTrack(random);
// Fill the tree
t4.Fill();
// Clear the event before reloading it
event->Clear();
}
// Write the file header
f.Write();
// Print the tree contents
t4.Print();
}
void tree4r()
{
// read the tree generated with tree4w
//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("tree4.root");
TTree *t4 = (TTree*)f->Get("t4");
// create a pointer to an event object. This will be used
// to read the branch values.
Event *event = new Event();
// get two branches and set the branch address
TBranch *bntrack = t4->GetBranch("fNtrack");
TBranch *branch = t4->GetBranch("event_split");
branch->SetAddress(&event);
Long64_t nevent = t4->GetEntries();
Int_t nselected = 0;
Int_t nb = 0;
for (Long64_t i=0;i<nevent;i++) {
//read branch "fNtrack"only
bntrack->GetEntry(i);
//reject events with more than 587 tracks
if (event->GetNtrack() > 587)continue;
//read complete accepted event in memory
nb += t4->GetEntry(i);
nselected++;
//print the first accepted event
if (nselected == 1) t4->Show();
//clear tracks array
event->Clear();
}
if (gROOT->IsBatch()) return;
new TBrowser();
t4->StartViewer();
}
void tree4() {
Event::Reset(); // Allow for re-run this script by cleaning static variables.
tree4w();
Event::Reset(); // Allow for re-run this script by cleaning static variables.
tree4r();
}
Author
Rene Brun

Definition in file tree4.C.

m
auto * m
Definition: textangle.C:8
TRandom::Gaus
virtual Double_t Gaus(Double_t mean=0, Double_t sigma=1)
Samples a random number from the standard Normal (Gaussian) Distribution with the given mean and sigm...
Definition: TRandom.cxx:263
TBrowser
Definition: TBrowser.h:37
f
#define f(i)
Definition: RSha256.hxx:122
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
TTree::Show
virtual void Show(Long64_t entry=-1, Int_t lenmax=20)
Print values of all active leaves for entry.
Definition: TTree.cxx:9174
Int_t
int Int_t
Definition: RtypesCore.h:45
TBrowser.h
TTree.h
test
Definition: test.py:1
TTree::GetEntry
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all branches of entry and return total number of bytes read.
Definition: TTree.cxx:5537
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
TBranch
Definition: TBranch.h:89
TTree::GetBranch
virtual TBranch * GetBranch(const char *name)
Return pointer to the branch with the given name in this tree or its friends.
Definition: TTree.cxx:5210
TTree::StartViewer
virtual void StartViewer()
Start the TTreeViewer on this tree.
Definition: TTree.cxx:9248
TNamed::Clear
virtual void Clear(Option_t *option="")
Set name and title to empty strings ("").
Definition: TNamed.cxx:64
TClassTable.h
TSystem.h
TBranch::GetEntry
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all leaves of entry and return total number of bytes read.
Definition: TBranch.cxx:1582
gRandom
R__EXTERN TRandom * gRandom
Definition: TRandom.h:62
UInt_t
unsigned int UInt_t
Definition: RtypesCore.h:46
TRandom::Rndm
virtual Double_t Rndm()
Machine independent random number generator.
Definition: TRandom.cxx:541
TBranch::SetAddress
virtual void SetAddress(void *add)
Set address of this branch.
Definition: TBranch.cxx:2522
TH2.h
TFile
Definition: TFile.h:54
TH1F
1-D histogram with a float per channel (see TH1 documentation)}
Definition: TH1.h:572
UChar_t
unsigned char UChar_t
Definition: RtypesCore.h:38
TClonesArray
Definition: TClonesArray.h:29
TTree::GetEntries
virtual Long64_t GetEntries() const
Definition: TTree.h:458
R__LOAD_LIBRARY
#define R__LOAD_LIBRARY(LIBRARY)
Definition: Rtypes.h:472
TText::Print
virtual void Print(Option_t *option="") const
Dump this text with its attributes.
Definition: TText.cxx:780
gROOT
#define gROOT
Definition: TROOT.h:406