Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
tree107_tree.C File Reference

Detailed Description

View in nbviewer Open in SWAN
Example of a Tree where branches are variable length arrays A second Tree is created and filled in parallel.

Run this script with

In the function treer, the first Tree is open. The second Tree is declared friend of the first tree. TTree::Draw is called with variables from both Trees.

#include "TFile.h"
#include "TTree.h"
#include "TRandom.h"
#include "TCanvas.h"
{
const Int_t kMaxTrack = 500;
TFile f("tree108.root", "recreate");
auto t3 = new TTree("t3", "Reconst ntuple");
t3->Branch("ntrack", &ntrack, "ntrack/I");
t3->Branch("stat", stat, "stat[ntrack]/I");
t3->Branch("sign", sign, "sign[ntrack]/I");
t3->Branch("px", px, "px[ntrack]/F");
t3->Branch("py", py, "py[ntrack]/F");
t3->Branch("pz", pz, "pz[ntrack]/F");
t3->Branch("zv", zv, "zv[ntrack]/F");
t3->Branch("chi2", chi2, "chi2[ntrack]/F");
TFile fr("tree108f.root", "recreate");
auto t3f = new TTree("t3f", "a friend Tree");
t3f->Branch("ntrack", &ntrack, "ntrack/I");
t3f->Branch("sumstat", &sumstat, "sumstat/D");
t3f->Branch("pt", pt, "pt[ntrack]/F");
for (Int_t i=0; i<1000; i++) {
Int_t nt = gRandom->Rndm() * (kMaxTrack - 1);
sumstat = 0;
for (Int_t n=0; n<nt; n++) {
stat[n] = n % 3;
sign[n] = i % 2;
px[n] = gRandom->Gaus(0, 1);
py[n] = gRandom->Gaus(0, 2);
pz[n] = gRandom->Gaus(10, 5);
zv[n] = gRandom->Gaus(100, 2);
chi2[n] = gRandom->Gaus(0, .01);
sumstat += chi2[n];
pt[n] = TMath::Sqrt(px[n] * px[n] + py[n] * py[n]);
}
t3->Fill();
t3f->Fill();
}
t3->Print();
f.cd();
t3->Write();
fr.cd();
t3f->Write();
}
{
auto f = TFile::Open("tree108.root");
auto t3 = f->Get<TTree>("t3");
t3->AddFriend("t3f", "tree108f.root");
t3->Draw("pz", "pt>3");
}
{
auto p = new TPad("p", "p", 0.6, 0.4, 0.98, 0.8);
p->Draw();
p->cd();
auto f1 = TFile::Open("tree108.root");
auto f2 = TFile::Open("tree108f.root");
auto t3 = f1->Get<TTree>("t3");
t3->AddFriend("t3f", f2);
t3->Draw("pz", "pt>3");
}
{
}
#define f(i)
Definition RSha256.hxx:104
int Int_t
Definition RtypesCore.h:45
float Float_t
Definition RtypesCore.h:57
double Double_t
Definition RtypesCore.h:59
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
winID h TVirtualViewer3D TVirtualGLPainter p
R__EXTERN TRandom * gRandom
Definition TRandom.h:62
A ROOT file is an on-disk file, usually with extension .root, that stores objects in a file-system-li...
Definition TFile.h:131
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
Definition TFile.cxx:4131
The most important graphics class in the ROOT system.
Definition TPad.h:28
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:275
Double_t Rndm() override
Machine independent random number generator.
Definition TRandom.cxx:559
A TTree represents a columnar dataset.
Definition TTree.h:84
TPaveText * pt
const Int_t n
Definition legend1.C:16
TF1 * f1
Definition legend1.C:11
Double_t Sqrt(Double_t x)
Returns the square root of x.
Definition TMath.h:666
Author
Rene Brun

Definition in file tree107_tree.C.