Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
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"
void write()
{
TFile *f = TFile::Open("hvector.root","RECREATE");
if (!f) { return; }
// Create one histograms
TH1F *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.
TCanvas *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;
Float_t random = gRandom->Rndm(1);
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;
}
void read()
{
TFile *f = TFile::Open("hvector.root","READ");
if (!f) { return; }
TTree *t; f->GetObject("tvec",t);
std::vector<float> *vpx = nullptr;
// Create a new canvas.
TCanvas *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
TH1F *h = new TH1F("h","This is the px distribution",100,-4,4);
h->SetFillColor(48);
for (Int_t i = 0; i < 25000; i++) {
Long64_t tentry = t->LoadTree(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.
}
void hvector()
{
gBenchmark->Start("hvector");
write();
read();
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
R__EXTERN TRandom * gRandom
Definition TRandom.h:62
R__EXTERN TSystem * gSystem
Definition TSystem.h:561
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Definition TAttFill.h:37
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
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:1706
The Canvas class.
Definition TCanvas.h:23
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:4089
1-D histogram with a float per channel (see TH1 documentation)
Definition TH1.h:622
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
Definition TH1.cxx:3344
void Draw(Option_t *option="") override
Draw this histogram with options.
Definition TH1.cxx:3066
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:79
virtual Int_t Fill()
Fill all branches.
Definition TTree.cxx:4603
virtual Int_t SetBranchAddress(const char *bname, void *add, TBranch **ptr=nullptr)
Change branch address, dealing with clone trees properly.
Definition TTree.cxx:8385
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:353
virtual Long64_t LoadTree(Long64_t entry)
Set current entry.
Definition TTree.cxx:6473
virtual void ResetBranchAddresses()
Tell all of our branches to drop their current objects and allocate new ones.
Definition TTree.cxx:8075
return c1
Definition legend1.C:41
Author
The ROOT Team

Definition in file hvector.C.