HOME>
ROOT>
解析する
●bin関係
h1->FindBin(x軸の数値) //あるxでのビン番号
h1->GetBinCenter(ビン番号) //ビン番号の中心値(x)
h1->GetBinContent(ビン番号) //そのビンのEntry数(y)
h1->GetNbinsX() //ビン番号の最大値(ビンの個数)
・bin番号は1から始まる。0はunderflow binで最大値+1はoverflow binらしい。
https://www-he.scphys.kyoto-u.ac.jp/member/shotakaha/dokuwiki/doku.php?id=toolbox:root:histograms:start
●統計ボックス
gStyle->SetOptStat("i"); //bin数(integralを表示)
gStyle->SetOptFit(10001); //fit情報(だけ)を表示
●Friend Tree
Tree解析で、既存のツリーにブランチを追加する方法を調べていたら、
Freiend Treeを追加するという機能があるらしい。→
Ntuple [KamonoWiki]/AddFriend・treeに別のtreeのBranchを追加する
追加したFreiend Treeの確認方法は
tree->GetListOfFriends()->Print()
●fit関係
範囲を指定してfit (ガウス関数は初めから定義されている関数なので単にgausと書けばOK)
h1->Fit("gaus","","",940,980)
統計ボックスにフィット情報を表示
gStyle->SetOptStat(1000000000); //統計情報を表示しない(ボックスのみ表示)
gStyle->SetOptFit(0101);
(コマンドライン上で)フィッティングパラメータを表示
gaus->GetParameter(0) //Constant
gaus->GetParameter(1) //Mean
gaus->GetParameter(2) //Sigma
ガウス関数の積分値
gaus->GetParameter(0)*gaus->GetParameter(2)*TMath::Sqrt(2*TMath::Pi())
FitPanelを使った場合
PrevFitTMP->GetParameter(0)*PrevFitTMP->GetParameter(2)*TMath::Sqrt(2*TMath::Pi())
フィッティングパラメータをテキストファイルに書き込む
cout<<gaus->GetParameter(0)<<"\t"<<gaus->GetParameter(1)<<"\t"<<gaus->GetParameter(2)<<" coments\n"; >>temp.txt
60Co較正用簡易計算機
●1次元ヒストグラム同士のちょっと複雑な演算
簡単な演算はこれ→ https://www-he.scphys.kyoto-u.ac.jp/member/n.kamo/wiki/doku.php?id=study:software:root:main#%E3%83%92%E3%82%B9%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E6%BC%94%E7%AE%97
Tmode3->Draw("(kCrystal1E[39]+kCrystal0E[39])>>h2(5000,0,5000)","kCrystal1E[39]>100","");
Tmode3->Draw("kCrystal1E[39]>>h1(5000,0,5000)","kCrystal1E[39]>100","same");
TH1F *h10 = new TH1F("h10","h10",5000,0,5000);
float w;for(int i=0;i<5000;i++){w=h2->GetBinContent(i)/h1->GetBinContent(i); if(h2->GetBinContent(i)>20&&h1->GetBinContent(i)>20){h10->Fill(i,w);}}
h10->Draw();
●kromekのMCAで取ったKSpect形式のファイルをrootのヒストグラムにする
{
int initial=11;//はじめのチャンネルの行番号
int end =4106;//最後のチャンネルの行番号
TH1F *hist = new TH1F("h1","h1",(end-initial),0,(end-initial));
ifstream ifs("20190429_137Cs-NaI.spe");//読み込むkspectファイル
string buf;
int a,c;
c=1;
while ( !ifs.eof() ){
getline(ifs, buf);
if(c>=initial && c<=end){
a=atoi(buf.c_str());
hist->Fill(c-initial,a);
}
c++;
}
hist->Draw();
}
最終更新 2019/12/11