ROOTの使い方メモ

◼︎ヒストグラム

ROOTのヒストグラム用のクラスは、すべてTH1というクラスを継承している。

クラスはTH1Fの他、TH1I, TH1D, TH2F, TH2D 等がある。
この 1, 2 というのは次元のことで、それぞれ 1次元, 2次元のヒストグラムであることを示す。
また、I, F, Dというのは各binの持っている値の型を示していて、それぞれ Int_t, Float_t, Double_t に対応する。



◼︎グラフ




■グラフィック関係

・TCanvasはrootの様々なオブジェクトを描く(ディスプレイに出力する)ためのクラスである。
・TCanvasはTPadを継承している。
・TCanvasの中には複数のTPadをもつことができる。

■TTree関係

treeの中身の確認

解析を行う際、treeに入っている変数を確認したい場合がある。そういう時は単純に

root -l hoge.root // root fileを開く
root [0] 
Attaching file hoge.root as _file0...
root [1].ls // 入っているtreeの名前を確認
TFile**         hoge.root       
 TFile*         hoge.root       
  KEY: TTree    CollectionTree;1        CollectionTree
root [2] CollectionTree->Print() // 調べたいtreeの中身を確認
******************************************************************************
*Tree    :CollectionTree: CollectionTree                                         *
*Entries :        1 : Total =         1168904 bytes  File  Size =     431965 *
*        :          : Tree compression factor =   1.91                       *
******************************************************************************
*Br    0 :ByteStreamEventInfo : EventInfo_p4                                 *
*Entries :        1 : Total  Size=       1369 bytes  File Size  =        377 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.21     *
*............................................................................*
*Br    1 :BCM_RDOs  : BCM_RDO_Container_p0                                   *
*Entries :        1 : Total  Size=       1383 bytes  File Size  =        398 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.24     *
*............................................................................*
.......
.......

で確認可能。<br>

解析用コードの生成

SetBranchAddressしてGetEntryしてLoopをまわして解析を行うような手続きは一般的なので,TTreeにはこれを行うスケルトン関数やクラスを自動的に生成するメソッドが存在する.

MakeClass MakeClassで解析を行うためには事前にコードを生成する必要がある.

% root rootfile.root
root[0] HitTree->MakeClass("HitEvent"); //HitEventである必要はない.好きな名前で.

これで,HitEvent.C,HitEvent.hが生成される.
使い方としては,下のようにクラスのメンバー関数を使用する

root[0] .L HitEvent.C 
root[1] HitEvent* t = new HitEvent();
root[2] t->Loop();

で,Loop関数で実際の解析が行われる.Loop関数に書き加えて,ヒストグラムを生成するサンプルコードは以下.

void HitEvent::Loop() 
{
  if (fChain == 0) return;

  Long64_t nentries = fChain->GetEntriesFast();
  Long64_t nbytes = 0, nb = 0;

  TH2F* digi_ocu = new TH2F("digi_ocu", "Occupancy Map; col; row", 400, 0, 400, 192, 0, 192);

  // std::cout << "nentries = " << nentries << std::endl;

  for (Long64_t jentry=0; jentry<nentries;jentry++) {
    Long64_t ientry = LoadTree(jentry);
    if (ientry < 0) break;
    nb = fChain->GetEntry(jentry);   nbytes += nb;
    for (int i=0; i<nhits; i++) {
      digi_ocu->Fill(hit_col[i], hit_row[i]);
    }
    // if (Cut(ientry) < 0) continue;
  }
  TCanvas* can = new TCanvas("c", "Occupancy_digi", 800, 800);
  digi_ocu->Draw("colz");
  can->SaveAs("./plots/Occupancy_digi.png");
}

MakeSelector

UsingROOT_memo (最終更新日時 2018-10-23 05:18:42 更新者 YuiWashizu)