ROOTコマンド集ページ

2008.10.30 by T. Kondo (KEK)


link to: http://root.cern.ch | ROOT user's guide | ROOT入門.html(田中純) | ROOT入門jlc
TFile *f = new TFile("ggh4mu.root")ファイルの読み込み。
.ls or f->ls() or f.ls();中身リスト。rootの中でのdirectoryをリスト。
TBrowser tw; twなどの名前はなんでもいい。
f->cd ("ATLFAST")change directry
histogram作成TH1F *h1 = new TH1F("h1","h1 title",100,-25.,25.);
dataを入れるにはroot>#include <fstream>, root>ifstream fin("1hist.dat"); root>double x; root>while (fin >> x) h1->Fill(x); root>fin.close();
h->Draw(); Histogram"h"をDrawする。("SAME")重ねる("E")エラーバー(L")折れ線("P")マーカー("SAME P")で複数指定。
軸タイトル書きd->SetXTitle("P_{x} (GeV)");({ }はLaTeX形式)、SetYTitle("Events/4 (GeV^{-1})");ギリシャ文字は#etaなど#をつける。 d->GetXaxis()->SetTitleOffset(0.8); (x軸からのオフセット調節)
d->SetLineColor(n);(n=1)黒(2)赤(3)緑(4)青(5)黄(6)紫(7)空色(8)黄緑(9)青、線幅指定:h->SetLineWidth(5);線スタイル:h->SetLineStyle(2);
d->SetMarkerStyle(n)(n=1)dot(2)✚(3)star(4)○(5)X(6)+(7)■(8)●(9)dot.., h->Draw(P);で描く。カラー指定:d->SetMarkerColor(n), サイズ設定:d->SetMarkerSize(3);
FILLするh->SetFillColor(2),h->SetFillStyle(3002);
文字記入TText *t=new TText(x,y,"MC event"); t->SetTextSize(0.04); t->Draw(); 前のものは消してくれる。
マーカーTMarker *m=new TMarker(x,y,4); m->Draw();
位置指定グラフのx,y座標を基準にする。m->SetX(0.3);m->SetY(0.8)など
左上タイトルd80->SetTitle("New Title"); d80->SetTitle();なら表示しない。
右上タイトルd80->SetName("New Name") 消すにはgStyle->SetOptStat(0);
統計表示defaultはgStyle->SetOptStat()(全情報)gStyle->SetOptStat(1111111);(非表示)gStyle->SetOptStat(0);かgStyle->SetOptStat(0001111);
組込み関数フィットれgaus、expo、polN (N>0)、landauがある。h->Fit("expo");領域限定はh->Fit("gaus","","",-80.,80.)フィット結果を重ねないはh->Fit("gaus","0","",-80.,80.);h->Draw();ここで第2引数はL (Likelihood method、デフォルトは chisq-method)、 E (Better errors estimation by MINOS)等があります。第3引数はDrawオプションでE (エラーバー付き) 。
fit表示gStyle->SetOptFit();(非表示)gStyle->SetOptFit(0);(全情報)gStyle->SetOptFit(1111);
縦軸調整h->SetMaximum(1.2);スケールの上限をset。下限はh->SetMinimum(0.0);
log表示画面c1の左端あたりを右クリックするとSetLogyが出るので選ぶ。
横軸調整h->SetAxisRange(-100.,100.);
x,y軸範囲の拡大まずプロットし、x,y軸の下限数字近くで手模様が出たら右クリックし上限まで引く。
c1->Divide(2,2);画面分割。
c1->cd(2);h->Draw();分割画面c1のパッド2を選ぶ。その後hをプロットする。
c1->Clear(); 画面クリアー
グリッドc1->SetGrid();
gPad->SetLogy();y軸をlogにする。gPad->SetLogy(0); でリニアーに変更。
hist演算root>TH1F *d = new TH1F((*H1)/(*H2)); 田中純メモ参照
root[2]c1.Print("file.ps")ROOTのc1画面を出力する。file.eps,file.gifも可能。()ならc1.ps。
GUI利用c1画面のメニューにSavea s canvas.psでc1.psができる。
h2root zz.ntup zz.root root-fileに変換する。いろいろ出てくる。
. ! はshellに戻る。.!ls, .!vi XX
.x Nmuo.CマクロファイルNmuo.Cの実行。例
    {
      TFile *f = new TFile("ggh4mu.root");
      f->cd("ATLFAST");
      h51->Draw("Nmuo");
    }
http://www.icepp.s.u-tokyo.ac.jp/~sakamoto/work/Pukiwiki/pukiwiki.php?UserAlgorithm
にある。
-----------------------------------------------------
.hの中では以下のようにTH1F*で定義しておくようだ
-----------------------------------------------------
#include "TH1.h"
 private:  
  /** Histograms */
  TH1F* m_h_cluset;
  TH1F* m_h_cluse;
  TH1F* m_h_cluseta;
  TH1F* m_h_clusphi;
----------------------------------------------------
そしてcxx中では
----------------------------------------------------
#include "GaudiKernel/ITHistSvc.h" かなあ???
////////////////////////////////////////////////////////////////////////////////////
/// Initialize

  addBranch("ElectronEt",    m_aan_et);
  addBranch("ElectronPhi",   m_aan_phi);
  addBranch("ElectronE",    m_aan_e);
  addBranch("ElecPtRatio",   m_aan_elecetres);

  /// ROOT histograms ---------------------------------------

  m_h_cluset     = new TH1F("EMTopoCluster430_et","et cl",50,0,5.*GeV);
  sc = m_thistSvc->regHist("/AANT/EMTopoCluster430/clus_et",m_h_cluset);
 m_h_electron_eta_vs_phi = new TH2F( "electron_eta_vs_phi", "Electron Eta vs Phi", 100, -5.0, 5.0, 90, 0, 360 );
 m_thistSvc -> regHist( "/MyAnalysis/Electron/electron_eta_vs_phi", m_h_electron_eta_vs_phi );
 }
  m_aan_et->clear();
  m_aan_phi->clear();

/// Execute - on event by event

    m_h_cluset->Fill( (*elecItr)->et(), 1.);
    m_h_cluse->Fill( (*elecItr)->e(), 1.);
    m_h_cluseta->Fill( (*elecItr)->eta(), 1.);
    m_h_clusphi->Fill( (*elecItr)->phi(), 1.);
  m_h_electron_eta_vs_phi -> Fill( elec -> eta( ), phi, 1.0 );

    /** fill Athena-Aware NTuple */
    m_aan_eta->push_back((*elecItr)->eta());
-----------------------------------------------------------------








root> c1->Print("test.ps")
   Info in : PostScript file test.ps has been created
rppt> c1->Update()     まだ意味不明
root> TPostScript zzz("test-zzz.ps"
)	ページを開く
root [17] h51->Draw("Nmuo")
root [18] c1->Update()     
root [19] h51->Draw("Pxmuo")
root [20] c1->Update()      
root [21] h51->Draw("Pymuo") 
root [22] c1->Update() 
Info in : PostScript file test.ps has been created

画面分割法

root [13] TFile *f = new TFile("ggh4mu.root")  fは変数名、 
root [14] f->cd("ATLFAST")
(Bool_t)1 
root [15] TCanvas *c1 = new TCanvas("sakamoto","c1 title");
  sakamotoはリソース名、c1はプログラム上の変数名、c1 titlはタイトル。
root [16] c1->Divide(3,2)
root [17] c1->Clear();
root [18] c1->Divide(3,2);
root [19] c1->cd(1);
root [20] h51->Draw("Nmuo");
root [21] h51->Draw("Pxmuo");
root [22] c1->cd(2);         
root [23] h51->Draw("Eemuo");
root [24] c1->cd(3);         
root [25] h51->Draw("Kfmuo");



 STL

std::vector<Particle*> &AAParticle型の可変長配列(vextor)のAAをSTLのコンテナvectorで設定する。AA.push_back(a), AA.size(), AA.......などがある。
(蔵重の中級入門@岡山
 CLASS

class B : public A { } クラスAを基底として派生クラスBを定義する。Aのpublic memberはすべてBのpublicメンバになる。


 その他

./ZZ < input.script >& loginput.script入力でZZを実行し、すべての出力をlogに出す。
&& || ! .and.   .or.   not.
double xdouble precision float型の変数 x を定義。"float" "double" "long double"がある。
const double pi=3.14定数識別子piの定義
int main(void)void識別子は引数がないことを示す。Cの流れで引数のvoidは省略できる。
void f(int);関数fは整数引数をもつが値を返さない関数なのでvoidと書く。


p.eta(), p.phi(),  p.pt(),  
Particleクラス
 eta(), phi(), pt(), pId().islsoMuon(),  pType().pdgid(),  


---------------------------------------------------
2003.7.22

9:11    mkdir ana
cd ana
cp /atlas/tutorial/root/atlfast/codes.tar.gz .
tar zxvf codes.tar.gz
cd samples/
source atlas/tutorial/root/etc/atlj.csh  
echo $ATLJ_TOP_DIR

cd code01
gmake    
./ZZ
現在6個のコマンドのみ  .q, exit, quitなどで出る

code02がヒストグラム
文字列をptype unitで読み込んでいる

activate allで全ておんになり時間がかかる。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
2003.7.22  
ここでZZー>Hを組むプログラムを入れる。隣の蔵重がたすけてくれた。

ZZ.h ,  ZZ.cxx  を変える。
make clean  が必要みたいだ。
gmake
./ZZ < signal.script > & log
root result.root
root [1] TBrowser tw
で見えるはず。
孫のmuonが重なっていないかcheckしたら39 eventsになるはず。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
バックグランドファイルは大きいので(100ファイル)、興味あるイベント
のみをのこして新しいファイルをつくる。code05

---------------------------------------------------------------
バックグランドを重ねるーーー> code04.ansをコピーする。




ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
長野
mkdir tgc
cd tgc
rootlogon.C


{
  if (!TClassTable::GetDict("TgcDataObject")) {
    gSystem->Load("libTgcDataObject.so");
  }

  TFile *f = new TFile("tgc_2.root");
  f->ls();

  TgcDataObject *data = new TgcDataObject();

  TTree *tree = (TTree*)gROOT->FindObject("tree");
  TBranch *branch = tree->GetBranch("data");
  branch->SetAddress(&data);
}


setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:
./ed
TGC H8 ED > next
------------------------------------------
    Event:        26
------------------------------------------
 L1ID:    27  BCID:   114  nSLB:     4
------------------------------------------

/usr/local/Acrobat5/bin/acroread RootTutorial.pdf &
に解説あり。

hits.C を変えて1イベント毎にプリントしてみ

Send your comments on this page to kondo@kekvax.kek.jp