//Example illustrating how to save histograms in Tree branches. //To run this example, do // root > .L htest.C // root > htw() // root > htr1() // root > htr2() // root > htr3() // //Author: Rene Brun void htw() { //create a Tree with a few branches of type histogram //25000 entries are filled in the Tree //For each entry, the copy of 3 histograms is written //The data base will contain 75000 histograms. gBenchmark->Start("hsimple"); TFile f("ht.root","recreate"); TTree *T = new TTree("T","test"); TH1F *hpx = new TH1F("hpx","This is the px distribution",100,-4,4); TH2F *hpxpy = new TH2F("hpxpy","py vs px",40,-4,4,40,-4,4); TProfile *hprof = new TProfile("hprof","Profile of pz versus px",100,-4,4,0,20); T->Branch("hpx","TH1F",&hpx,32000,0); T->Branch("hpxpy","TH2F",&hpxpy,32000,0); T->Branch("hprof","TProfile",&hprof,32000,0); Float_t px, py, pz; for (Int_t i = 0; i < 25000; i++) { if (i%1000 == 0) printf("at entry: %d\n",i); gRandom->Rannor(px,py); pz = px*px + py*py; hpx->Fill(px); hpxpy->Fill(px,py); hprof->Fill(px,pz); T->Fill(); } T->Print(); f.Write(); gBenchmark->Show("hsimple"); } void htr1() { //connect Tree generated by htw and show histograms for entry 12345 TFile *f = new TFile("ht.root"); TTree *T = (TTree*)f->Get("T"); TH1F *hpx = 0; TH2F *hpxpy = 0; TProfile *hprof = 0; T->SetBranchAddress("hpx",&hpx); T->SetBranchAddress("hpxpy",&hpxpy); T->SetBranchAddress("hprof",&hprof); T->GetEntry(12345); TCanvas *c1 = new TCanvas("c1","test",10,10,600,1000); c1->Divide(1,3); c1->cd(1); hpx->Draw(); c1->cd(2); hpxpy->Draw(); c1->cd(3); hprof->Draw(); } void htr2() { //connect Tree generated by htw and show histograms for entry 12345 // a variant of htr1 TFile *f = new TFile("ht.root"); TTree *T = (TTree*)f->Get("T"); TCanvas *c1 = new TCanvas("c1","test",10,10,600,1000); c1->Divide(1,3); c1->cd(1); T->Draw("hpx.Draw()","","goff",1,12345); c1->cd(2); T->Draw("hpxpy.Draw()","","goff",1,12345); c1->cd(3); T->Draw("hprof.Draw()","","goff",1,12345); } void htr3() { //connect Tree generated by htw //read all histograms and plot the RMS of hpx versus the Mean of hprof //for each of the 25000 entries TFile *f = new TFile("ht.root"); TTree *T = (TTree*)f->Get("T"); T->Draw("hpx.GetRMS():hprof.GetMean()"); } void htest() { htw(); htr1(); htr2(); htr3(); }