next up previous contents
: グローバルのリセット : 対話モードで ROOT を使う : フィット情報の表示(SET FIT ...)   目次

Ntuple の扱い

Ntuple の使い方についても、「猿にも」に書いてあるのでさらりと。 まず箱を用意する。 つまり


  TNtuple *tup = new TNtuple("tupname", "tuptitle", "adc1:adc2:adc3");
などとして、 例えば3つの変数 ${\tt ''adc1''}$${\tt ''adc2''}$${\tt ''adc3''}$、 からなる Ntuple を作る。 またもや練習なのでダミーデータを詰め込もう。

  {
    Int_t i;
    for (i=0; i<10000; i++) {
      Float_t mu   = 100. + gRandom->Gaus(0.,30.);
      Float_t adc1 = gRandom->Gaus(mu,5.);
      Float_t adc2 = gRandom->Gaus(mu,5.);
      Float_t adc3 = gRandom->Gaus(mu,5.);
      tup->Fill(adc1,adc2,adc3);
    }
  }
この Ntuple の内容をヒストグラムしたければ

  tup->Draw("adc1");
あるいは、カットつきなら例えば

  tup->Draw("adc1","adc2>80. && adc3<150.");
等とすればよい。

2次元プロットなら


  tup->Draw("adc1:adc2","adc3>80.");
これを ${\tt ''hadc12''}$ などという名前の2次元プロットにしたかったら

  tup->Draw("adc1:adc2 >> hadc12","adc3>80.");
hadc12 は普通の2次元プロットなので自由にいじれる。

また、


  tup->Draw("adc1-adc2","adc3<150.");           
  tup->Draw("adc1-adc2:adc1","adc3<150.");
等 Ntuple の内容に演算を加えてから ヒストグラムすることも可能である。 作った Ntuple をファイルに書き出すには

  TFile file("testtup.root","RECREATE");
  tup->Write();
でよい。

まあ、ここまでは「猿にも」の受け売りであるが、 時には、イベント毎に Ntuple の内容に直接アクセスしたい場合もでてくる。 今保存した Ntuple の入った ROOT ファイルを読んで イベント毎の情報を引き出すことを考えよう。 ROOT を再起動して、${\tt TNtuple}$ ${\tt ''tupname''}$ という名前で作ったことを思いだし、


  TFile *file = TFile::Open("testtup.root");
  TNtuple *tup = (TNtuple *)gROOT->FindObject("tupname");
として保存した Ntuple へのポインターを得る。 ここで、例えば、イベント5の変数 ${\tt ''adc1''}$ の値が取ってきたかったら、

  Float_t a1;
  tup->SetBranchAddress("adc1",&a1);       // link "adc1" to a1
  tup->GetEntry(5);                        // get event 5
  cerr << a1 << endl;

さて、カットされたサブサンプルに対して情報を得たい場合は ${\tt TEventList}$ を使う。 例えば、カット後の最初のイベントならば


  tup->Draw(">>elist","adc3 > 80","goff"); // "goff" = graphics OFF
  TEventList *elist = (TEventList *)gDirectory->Get("elist");
  Int_t nlist = elist->GetN();             // get No. selected events 
  Int_t event = elist->GetEntry(1);        // event No. for 1st selected
  tup->GetEntry(event);                    // get event No.event
  cerr << a1 << endl;
等とする。


next up previous contents
: グローバルのリセット : 対話モードで ROOT を使う : フィット情報の表示(SET FIT ...)   目次
Keisuke Fujii 平成12年12月22日