Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
quantiles.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_math
3 /// \notebook -js
4 /// Demo for quantiles
5 ///
6 /// \macro_image
7 /// \macro_code
8 ///
9 /// \authors Rene Brun, Eddy Offermann
10 
11 void quantiles() {
12  const Int_t nq = 100;
13  const Int_t nshots = 10;
14  Double_t xq[nq]; // position where to compute the quantiles in [0,1]
15  Double_t yq[nq]; // array to contain the quantiles
16  for (Int_t i=0;i<nq;i++) xq[i] = Float_t(i+1)/nq;
17 
18  TGraph *gr70 = new TGraph(nshots);
19  TGraph *gr90 = new TGraph(nshots);
20  TGraph *gr98 = new TGraph(nshots);
21  TH1F *h = new TH1F("h","demo quantiles",50,-3,3);
22 
23  for (Int_t shot=0;shot<nshots;shot++) {
24  h->FillRandom("gaus",50);
25  h->GetQuantiles(nq,yq,xq);
26  gr70->SetPoint(shot,shot+1,yq[70]);
27  gr90->SetPoint(shot,shot+1,yq[90]);
28  gr98->SetPoint(shot,shot+1,yq[98]);
29  }
30 
31  //show the original histogram in the top pad
32  TCanvas *c1 = new TCanvas("c1","demo quantiles",10,10,600,900);
33  c1->Divide(1,3);
34  c1->cd(1);
35  h->SetFillColor(38);
36  h->Draw();
37 
38  // show the final quantiles in the middle pad
39  c1->cd(2);
40  gPad->SetGrid();
41  TGraph *gr = new TGraph(nq,xq,yq);
42  gr->SetTitle("final quantiles");
43  gr->SetMarkerStyle(21);
44  gr->SetMarkerColor(kRed);
45  gr->SetMarkerSize(0.3);
46  gr->Draw("ap");
47 
48  // show the evolution of some quantiles in the bottom pad
49  c1->cd(3);
50  gPad->DrawFrame(0,0,nshots+1,3.2);
51  gPad->SetGrid();
52  gr98->SetMarkerStyle(22);
53  gr98->SetMarkerColor(kRed);
54  gr98->Draw("lp");
55  gr90->SetMarkerStyle(21);
56  gr90->SetMarkerColor(kBlue);
57  gr90->Draw("lp");
58  gr70->SetMarkerStyle(20);
59  gr70->SetMarkerColor(kMagenta);
60  gr70->Draw("lp");
61  // add a legend
62  TLegend *legend = new TLegend(0.85,0.74,0.95,0.95);
63  legend->SetTextFont(72);
64  legend->SetTextSize(0.05);
65  legend->AddEntry(gr98," q98","lp");
66  legend->AddEntry(gr90," q90","lp");
67  legend->AddEntry(gr70," q70","lp");
68  legend->Draw();
69 }