Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
tree107_tree.C
Go to the documentation of this file.
1/// \file
2/// \ingroup tutorial_tree
3/// \notebook
4/// Example of a Tree where branches are variable length arrays
5/// A second Tree is created and filled in parallel.
6/// Run this script with
7/// ~~~
8/// .x tree107_tree.C
9/// ~~~
10/// In the function treer, the first Tree is open.
11/// The second Tree is declared friend of the first tree.
12/// TTree::Draw is called with variables from both Trees.
13/// \macro_code
14///
15/// \author Rene Brun
16
17#include "TFile.h"
18#include "TTree.h"
19#include "TRandom.h"
20#include "TCanvas.h"
21
22void tree107_write()
23{
24 const Int_t kMaxTrack = 500;
26 Int_t stat[kMaxTrack];
35
36 TFile f("tree108.root", "recreate");
37 auto t3 = new TTree("t3", "Reconst ntuple");
38 t3->Branch("ntrack", &ntrack, "ntrack/I");
39 t3->Branch("stat", stat, "stat[ntrack]/I");
40 t3->Branch("sign", sign, "sign[ntrack]/I");
41 t3->Branch("px", px, "px[ntrack]/F");
42 t3->Branch("py", py, "py[ntrack]/F");
43 t3->Branch("pz", pz, "pz[ntrack]/F");
44 t3->Branch("zv", zv, "zv[ntrack]/F");
45 t3->Branch("chi2", chi2, "chi2[ntrack]/F");
46
47 TFile fr("tree108f.root", "recreate");
48 auto t3f = new TTree("t3f", "a friend Tree");
49 t3f->Branch("ntrack", &ntrack, "ntrack/I");
50 t3f->Branch("sumstat", &sumstat, "sumstat/D");
51 t3f->Branch("pt", pt, "pt[ntrack]/F");
52
53 for (Int_t i=0; i<1000; i++) {
54 Int_t nt = gRandom->Rndm() * (kMaxTrack - 1);
55 ntrack = nt;
56 sumstat = 0;
57 for (Int_t n=0; n<nt; n++) {
58 stat[n] = n % 3;
59 sign[n] = i % 2;
60 px[n] = gRandom->Gaus(0, 1);
61 py[n] = gRandom->Gaus(0, 2);
62 pz[n] = gRandom->Gaus(10, 5);
63 zv[n] = gRandom->Gaus(100, 2);
64 chi2[n] = gRandom->Gaus(0, .01);
65 sumstat += chi2[n];
66 pt[n] = TMath::Sqrt(px[n] * px[n] + py[n] * py[n]);
67 }
68 t3->Fill();
69 t3f->Fill();
70 }
71 t3->Print();
72 f.cd();
73 t3->Write();
74 fr.cd();
75 t3f->Write();
76}
77
78void tree107_read()
79{
80 auto f = TFile::Open("tree108.root");
81 auto t3 = f->Get<TTree>("t3");
82 t3->AddFriend("t3f", "tree108f.root");
83 t3->Draw("pz", "pt>3");
84}
85
86void tree107_read2()
87{
88 auto p = new TPad("p", "p", 0.6, 0.4, 0.98, 0.8);
89 p->Draw();
90 p->cd();
91 auto f1 = TFile::Open("tree108.root");
92 auto f2 = TFile::Open("tree108f.root");
93 auto t3 = f1->Get<TTree>("t3");
94 t3->AddFriend("t3f", f2);
95 t3->Draw("pz", "pt>3");
96}
97
98void tree107_tree()
99{
101 tree107_read();
103}
#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:53
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:4088
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:79
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