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

Detailed Description

View in nbviewer Open in SWAN
Write and read STL vectors in a tree.

#include <vector>
#include "TFile.h"
#include "TTree.h"
#include "TCanvas.h"
#include "TFrame.h"
#include "TH1F.h"
#include "TBenchmark.h"
#include "TRandom.h"
#include "TSystem.h"
{
auto f = TFile::Open("hvector.root","RECREATE");
if (!f)
return;
// Create one histograms
auto hpx = new TH1F("hpx","This is the px distribution", 100, -4, 4);
hpx->SetFillColor(48);
std::vector<float> vpx;
std::vector<float> vpy;
std::vector<float> vpz;
std::vector<float> vrand;
// Create a TTree
TTree *t = new TTree("tvec", "Tree with vectors");
t->Branch("vpx", &vpx);
t->Branch("vpy", &vpy);
t->Branch("vpz", &vpz);
t->Branch("vrand", &vrand);
// Create a new canvas.
auto c1 = new TCanvas("c1", "Dynamic Filling Example", 200, 10, 700, 500);
const Int_t kUPDATE = 1000;
for (Int_t i = 0; i < 25000; i++) {
Int_t npx = (Int_t)(gRandom->Rndm(1) * 15);
vpx.clear();
vpy.clear();
vpz.clear();
vrand.clear();
for (Int_t j = 0; j < npx; ++j) {
Float_t px,py,pz;
gRandom->Rannor(px, py);
pz = px * px + py * py;
hpx->Fill(px);
vpx.emplace_back(px);
vpy.emplace_back(py);
vpz.emplace_back(pz);
vrand.emplace_back(random);
}
if (i && (i%kUPDATE) == 0) {
if (i == kUPDATE)
hpx->Draw();
c1->Modified();
c1->Update();
break;
}
t->Fill();
}
f->Write();
delete f;
}
{
auto f = TFile::Open("hvector.root", "READ");
if (!f)
return;
auto t = f->Get<TTree>("tvec");
std::vector<float> *vpx = nullptr;
// Create a new canvas.
auto c1 = new TCanvas("c1", "Dynamic Filling Example", 200, 10, 700, 500);
const Int_t kUPDATE = 1000;
TBranch *bvpx = nullptr;
t->SetBranchAddress("vpx", &vpx, &bvpx);
// Create one histograms
auto h = new TH1F("h", "This is the px distribution", 100, -4, 4);
h->SetFillColor(48);
for (Int_t i = 0; i < 25000; i++) {
bvpx->GetEntry(tentry);
for (UInt_t j = 0; j < vpx->size(); ++j) {
h->Fill(vpx->at(j));
}
if (i && (i%kUPDATE) == 0) {
if (i == kUPDATE)
h->Draw();
c1->Modified();
c1->Update();
break;
}
}
// Since we passed the address of a local variable we need
// to remove it.
}
{
gBenchmark->Start("hvector");
gBenchmark->Show("hvector");
}
#define f(i)
Definition RSha256.hxx:104
#define h(i)
Definition RSha256.hxx:106
int Int_t
Definition RtypesCore.h:45
unsigned int UInt_t
Definition RtypesCore.h:46
float Float_t
Definition RtypesCore.h:57
long long Long64_t
Definition RtypesCore.h:69
R__EXTERN TBenchmark * gBenchmark
Definition TBenchmark.h:59
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
R__EXTERN TRandom * gRandom
Definition TRandom.h:62
R__EXTERN TSystem * gSystem
Definition TSystem.h:572
virtual void Start(const char *name)
Starts Benchmark with the specified name.
virtual void Show(const char *name)
Stops Benchmark name and Prints results.
A TTree is a list of TBranches.
Definition TBranch.h:93
The Canvas class.
Definition TCanvas.h:23
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
1-D histogram with a float per channel (see TH1 documentation)
Definition TH1.h:877
virtual void SetSeed(ULong_t seed=0)
Set the random generator seed.
Definition TRandom.cxx:615
Double_t Rndm() override
Machine independent random number generator.
Definition TRandom.cxx:559
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:507
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
Definition TSystem.cxx:416
A TTree represents a columnar dataset.
Definition TTree.h:84
virtual Int_t Fill()
Fill all branches.
Definition TTree.cxx:4610
virtual Int_t SetBranchAddress(const char *bname, void *add, TBranch **ptr=nullptr)
Change branch address, dealing with clone trees properly.
Definition TTree.cxx:8486
TBranch * Branch(const char *name, T *obj, Int_t bufsize=32000, Int_t splitlevel=99)
Add a new branch, and infer the data type from the type of obj being passed.
Definition TTree.h:365
virtual Long64_t LoadTree(Long64_t entry)
Set current entry.
Definition TTree.cxx:6483
virtual void ResetBranchAddresses()
Tell all of our branches to drop their current objects and allocate new ones.
Definition TTree.cxx:8162
return c1
Definition legend1.C:41
Author
The ROOT Team

Definition in file tree121_hvector.C.