CENTER:#ref(./ROOTLOGO.png,50%)
既にいろんな便利なサイトはあると思いますが、
みなさんが調べたコマンドや既にご存知で便利だと思うコマンドを一言添えて貼り付けてくださると嬉しいです。(2020/11/03 熊岡)~
これでROOTを学ぶというよりはよく使うコマンドをリストアップして、いろんなページを開かなくていいようにできたらと( 参照ページ:https://atlas.kek.jp/comp/ROOT-commands.htmlのような感じ+αを目指す)。~
そのため初めて知ったコマンドは一度Class Referenceを見て、自分自身で調べた方がいいかもしれません。~
また詳しいオプション等は最後の項目の参考ページを見てください。

#contents

*ヒストグラム [#m5a4f80a]
**ヒストグラム作成 [#fefbb353]

TH1F *h1D = new TH1F ("name","title", nBins, minX, maxX); //char, char, int, float, float

h1D->Fill(x,w); //xbin にwの重み付けfill

詳しい色や形状、引数等はひとまず参照pageをみてください(よく使うものがあればぜひここに書き足してください)
TH2F *h2D = new TH2F ("name","title", nBinsX, minX, maxX, nBinsY, minY, maxY); //char, char, int, float, float, int, float, float
h2D->Fill(x,y);
h2D->Draw("colz"); //平面プロットのカラー付 //棒が立っている奴は"lego2z"
gStyle->SetPalette(1);//綺麗な虹色 kLainbowは薄汚い暗い虹色

h->Draw(); //"same"は重ね書きができる。

-''配列オブジェクト''(ヒストグラムに関わらずROOTのオブジェクトは配列化できるものが多い)~

TH1F *hList[n];
for(int nHist = 0; nHist < n; nHist++) hList[nHist] = TH1F (Form("h%d", nHist),"", nBins[nHist], minX[nHist],maxX[nHist]);//loopでhistNameが変わっていることが大切

-''多次元ヒストグラム( THnSparse:https://root.cern.ch/doc/master/classTHnSparse.html)'' ~
オブジェクトのbin数は, (bin_axial1)*(bin_axial2)*(bin_axial3)* ... となっていくためサイズが大きくなり、注意が必要.

static THnSparse * CreateSparse (const char *name, const char *title, const TH1 *h1, Int_t chunkSize=1024 *16); //多次元ヒストグラム(3D以上)

hN->GetAxis(3)->SetRangeUser(zMin[nZRange], zMax[nZRange]); //三つ目の軸のある範囲(zMin : zMax)においてヒストグラムを切り出す。
h1 = hN->Projection(0, "h1 Name"); //切り出したヒストグラムを一つ目の軸に一次元に投影(zは切り出した部分のみ、他の軸においては全てが潰れて入る)
h2 = hN->Projection(1, 4, "h1 Name"); //切り出したヒストグラムを2つ目の軸と5つ目の軸が作る面に2次元に投影 //同様に3Dまで可

-''ヒストグラムのコピー''(当然だがポインタは新しくできるため、心配せずヒストグラムを編集できる)~

TH1F hnew = (TH1F)h->Clone(); hnew->SetName("hnew"); // 新しいnameを付けないと同じ名のヒストグラムが2つ出来てしまう。

-''不均一bin幅''~

double xBinsW[] = {0,4,5,10};
TH1F *h = new TH1F ("hist","",3,xBinsW);


***ヒストグラムの演算 [#r0f293c1]
hist->Add(h1,x);//各binの値=現在の値+x*h1の値
hist->Add(h1,h2,x,y);//各binの値=x*h1の値+y*h2の値

hist->Divide(h1,x);//各binの値=現在の値/(x*h1の値)
hist->Divide(h1,h2,x,y);//各binの値=(x*h1の値)/(y*h2の値)

hist->Multiply(h1,x);//各binの値=現在の値*x*h1の値
hist->Multiply(h1,h2,x,y);//各binの値=x*h1の値*y*h2の値

hist->Scale(x);//各binの値=x*現在の値

Double_t tot=h1->Integral(); //面積で規格化
h1->Scale(1. /tot);

***efficiency [#db93d43c]
h->Divide(hNume, hDeno, 1.0, 1.0, "b") //efficiencyのerrorはバイナリであるため注意(option "b")

TEfficiency *heff = new TEfficiency(hNume, hDeno); //値が1を超える場合は計算できない
heff->Draw("AP"); //点と軸表示

**bin [#ka5e0365]
//get a number of bin for the axis value.
//take care the number of bin starts 1 not 0
h->FindBin(val);
h->FindFixBin(val);

h->GetBinContent(binNumber); //get the entry of the certain bin

Double_t xCenterValue = h1->GetXaxis()->GetBinCenter(i); //binのxの中心値を取得  

h->Rebin(n) //n binを1 binにまとめる。 bin数は1/nになる

double xBinsW[] = {0,4,5,10};
TH1F h_rebin* = hist->Rebin(4,"h_rebin",xBinsW); //recreate the bin width you want to set

**軸 [#ud644209]
軸情報へのアクセス
h->GetXaxis(); //X, Y, Z
h->GetAxis(3); //multi demension

h->GetXaxis()->SetRange(IBinNum, EBinNum);//bin番号を引数にする
h->GetXaxis()->SetRangeUser(IVal, EVal);//user座標を引数にする

//文字は#を使うとLaTeX表記できる ex) #it{p}_{T}, #alpha, #frac{1}{N}
//スライドで後から誤魔化す場合はHelveticaで書くといいらしい... 少し違う気もしますが
h->SetTitle("hTitle"); //ヒストグラムのタイトル
h->GetXaxis()->SetTitle("title_of_xaxis"); // 1次元ヒストグラム以外の場合

gPad->SetLogy(); //y軸をlog

//Axis labeling: Take care for the number start from 1 not 0
h->GetXaxis()->SetBinLabel(1,"A");
h->GetXaxis()->SetBinLabel(2,"B");
h->GetXaxis()->SetBinLabel(3,"C");
h->GetXaxis()->SetBinLabel(4,"D");

h->GetYaxis()->SetTitleSize(25);
h->GetYaxis()->SetTitleFont(43);
h->GetYaxis()->SetTitleOffset(1.55);


-C++の文字の扱い~

int intX = (int) floatX; //float->int

\nは改行;
leg->AddEntry(h3[i],cid,"l");
%3dは3文字幅を指定。%02dで08などと頭にゼロをつけてくれる。~
文字は%sで受けlongは%ldで。
Form("x = %d", x); // the value of x into %d as string

char src[100] = "10 123.456 ABC";
int i;
float f;
char s[100];
sscanf( src, "%d %f %s", &i, &f, &s ); //char to value
std::cout << src << " --(sscanf)---> "<< i <<" "<< f <<" "<< s << std::endl; // result 10 123.456 ABC --(sscanf)---> 10 123.456 ABC

**canvas / legend [#hf1c8fd0]

TCanvas *c1 = new TCanvas("name","title",width,height);

canvas->Divide(n,m); //n行,m列にcanvasを分割する
canvas->cd(i); //i番目の区画に移動する
hList[i]->Draw();

//TLegend(x1,y1,x2,y2,"title")、位置はNDCで指定する(0−1の間の値)
//最後の引数の"title"はlegendに表示にされるタイトル、邪魔な場合はいれなくてもいい
TLegend *leg = new TLegend(0.1,0.7,0.48,0.9);

//第一引数はポインタ、第二引数は項目名、第三引数で表示したいattributeを指定
leg->AddEntry(h,"histogram","f");
leg->Draw();


*関数 [#n15abd34]
**関数作成 [#t2b0a4f3]

TF1 ff = new TF1("ff", "(x<10)*(a + b * x) + (x>10)*c", 0, 100); //範囲指定のfitting ex: (x<10)linear, (x >10) constant

**フィット [#tde7458d]

h->Fit( "ff", "", "", 5.0, 100.0 );

*プロットの見た目 [#e754392a]

h->SetLineColor(1);

h->SetMarkerColor(1);
h->SetMarkerStyle(22);
h->SetMarkerSize(1.5);

d->SetLineWidth(5);
d->SetLineStyle(2); //[1=line,2=broken,3=dotted,4=broken-dot,5=long-broken-dot]

h->SetFillColorAlpha(kGreen, 0.5); //kGreen, 50% Clear
h->SetFillStyle(3005);

enum EColor { kWhite =0, kBlack =1, kGray=920, kRed =632, kGreen =416, kBlue=600, kYellow=400, kMagenta=616, kCyan=432, kOrange=800, kSpring=820, kTeal=840, kAzure =860, kViolet =880, kPink=900 };

&ref(./ColorReference.png,30%);&ref(./StyleSetting.png,60%);

''カラー/マカーを配列にしとくと便利かも. 既定のカラー(EColor変数:kRedなど)は下にあるように元々は値が入っている。この値を図を参照に+/-して色を決めておく.''

//kRed, kOrange+7, kSpring-9, kGreen+1, kAzur-2, kBlue, kVioret-5
int hColorList[] = {632, 807, 811, 417, 858, 600, 875};
int hMarkerList[] = {20, 21, 22, 23, 34};

hList[histNum]->SetMarkerColor(hColorList.at(histNum));
hList[histNum]->SetMarkerStyle(hMarkerList.at(histNum));


*ROOT file I/O [#b1930bbc]
TFIle *file = new TFile("hoge.root","option"); //option : READ, UPDATE, NEW/CREATE, RECREATE

TH1F* h = (TH1F*)file->Get("hist");//Getで得られるのはTObject型なのでキャストしている。

TH1F h = (TH1F)gROOT->FindObject("hist");

obj->SaveAs("hoge.root");
obj->Write();
file->Write();


**TTree [#pb908295]

-''TTree Read ''~

TFile *file = new TFile("file.root","recreate"); //create root file
TTree *tree = new TTree("objectName","titleName");

Int_t a;
Double_t b;

tree->Branch("val1", &a,);
tree->Branch("val2", &b);

//Event loot #######
a = 3; b = 1.22;
tree->Fill();
a = 1; b = 2.4; c=1.33;
tree->Fill();
//Event loot #######

tree->Write();

-''TTree Creatation''~

TFile *file = new TFIle("hoge.root","recreate"); //TTreeを作る前にrootファイルを必ず生成しておく
TTree *tree = new TTree("tree","tree");

-''Branch Creation''~

Int_t a; //Branchに間接的に値を代入するための変数をあらかじめ宣言する (tempraly variable)
Double_t b;
tree->Branch("val1", &a);
tree->Branch("val2", &b);

*よく見るプロット(gap なし/あり) [#z5d069f3]
-横割りRatioプロット(macroなのでratioPlot.Cを作り中身を貼り付ければ, root ratioPlot.Cで走ります): &ref(ratioPlot.txt); ~
&ref(./ratioPlot_nogap.png,40%);&ref(./ratioPlot_withgap.png,40%);

-Error Band Plot Macro : &ref(errBandPlot.txt); ~
#ref(./errBandPlot.png,45%);~

-double Fit Function to sub background: Macro &ref(./estimateBackground.txt);~
#ref(./sigPeakSubBkg.png,40%);~

*カテゴリはわかんないけどひとまず [#k48cbb10]

-その内載せたいもの(気が向いたらみなさんも載せてくれるとありがたいです) (2020/11/03 熊岡)~
hadd, TCanvas(分割), TLegend, TROOT, FindObject, TChain, MakeClass, ファイルの読み出し/書き出し, Errobar,
fitParameterの取り出し, etc... ~

-''ALICE detector''
頑張るとこんなこともできます。~
ヌルヌル動いてgif保存もできます!~
&ref(./ALICEClipping.png,35%);&ref(./ALICE.png,35%);

-TDatabasePDG
TDatabasePDG *pdg = new TDatabasePDG ();
TParticlePDG *particle = pdg->GetParticle(id); //pdgIdについてはhttp://pdg.lbl.gov/2004/reviews/montecarlorpp.pdf
particle->GetName(); //粒子の名前
particle->Mass(); //質量
particle->Spin(); //スピン
particle->Lifetime(); //寿命

*便利なGUI [#ac7045e6]
グラフのいろんなところを右クリックで色々いじれます。(以下の画像は このページ:https://atlas.kek.jp/comp/ROOT-commands.htmlから拝借)~
#ref(./getROOTmethods.png,20%);



#ref(./EditTab.png, 60%);
-''View Tab->Editor'': 一番使う~
binの設定rebinしたり、グラフの色を変えたり、軸の名前を変えたり、三次元を二次元に投影したり色々できる。
"Vie"Tabの"Editor"を押すと左の"Files"タブの隣に"Pad Editor"タブができている。
ここをクリック後、グラフのポイントやバーをクリックすると色や大きさが変えられる。
軸をクリックすれば軸の設定等ができ、クリックした場所の設定変更がGUIで行える。
時間がない時は有効!

-''Edit Tab->Style Tab'': Editorより詳細な設定ができる~
大抵Editorでできるため使用頻度は少ない。
Editorでやりたいことができなかった時開いてみてください。

-''Tools Tab->Fit Panel'': フィットが簡単にできる~
既存の関数でfitしたり、ここで関数を作ってfitすることもできる。
フィットパラメータはterminal上に表示される。
Panel下のbarをいじるとフィット範囲も指定できる。
一番上の場所でフィットするヒストグラムを指定.
#ref(./FitPanel.png,60%);

-''一部のオブジェクトだけをrootファイルとして保存''~
左のオブジェクトを右クリックすると”SaveAs”とあるので, そこをクリックし名前を決めていろんな拡張子で保存できる。
一部のオブジェクト(ヒストグラム等)だけでいい場合や、GUIで編集したhistogramを保存したい場合は便利。
#ref(./ObjectSave.png,80%);

*みんなのMacro集 [#ff2a7d1c]
#ref(plotMacro.py); (熊岡 2020/11/03)

*参考ページ (自分のよく使うリンクを貼り付けてくださるとありがたいです。) [#zbb40174]
-ROOT Reference Page:https://root.cern/doc/master/ (右上の検索窓でClass名を入れれば、詳しいページに飛べます)~
- 便利なコマンド表と使い方の例:https://atlas.kek.jp/comp/ROOT-commands.html~
- 一般(KamonoWiki):https://www-he.scphys.kyoto-u.ac.jp/member/n.kamo/wiki/doku.php?id=study:software:root:main~
- TFile:https://www-he.scphys.kyoto-u.ac.jp/member/shotakaha/dokuwiki/doku.php?id=toolbox:root:tfile:start~
- ヒストグラム:https://www-he.scphys.kyoto-u.ac.jp/member/shotakaha/dokuwiki/doku.php?id=toolbox:root:histograms:start~
- プロットの情報を見る:https://www-jlc.kek.jp/subg/offl/lib/docs/rootstarter/node26.html~
-TColor Reference:https://root.cern.ch/doc/master/classTColor.html#TColor:SetPalette~
- Graphic:https://www-he.scphys.kyoto-u.ac.jp/member/n.kamo/wiki/doku.php?id=study:software:root:graphic~
- Ntuple/MakeClass:https://www.icepp.jp/atlas-japan/tutorials/tutorial2013/ATLAS_SoftwareLecture2013.pdf~
- 山形大ROOT:https://www.quark.kj.yamagata-u.ac.jp/~miyachi/ROOT/index.html#fit~
- TMATH(関数等):https://root.cern.ch/root/html524/TMath.html~
- ROOTUsersGuid:https://root.cern/root/htmldoc/guides/users-guide/ROOTUsersGuide.html
-~

-- TakuyaKumaoka - 2020-11-09

Edit | Attach | Watch | Print version | History: r1 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r1 - 2020-11-09 - TakuyaKumaoka
 
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    Main All webs login

This site is powered by the TWiki collaboration platform Powered by PerlCopyright & 2008-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
or Ideas, requests, problems regarding TWiki? use Discourse or Send feedback