TFile directory構造 | ファイルの読み込みを行う。TFile *f = new TFile("demo.root")(or . root demo.root)とするとcurrent directoryがdemo.rootになる(.pwdか gDirectory->pwd()でチェックする )。.ls(gDirectory->ls())で現directoryの内容をリストする。KEY: TDirectoryFile sub;1と出て下部構造があるならばgDirectory->cd("sub");でsubdirectoryに入れる。gDirectory->cd("..");で一つ上にgDirectory->cd("../sub1");で隣のsub1に、f->cd()でtop directoryに戻れる。KEYはまだdisk上にあるのでf->Get("HIST名"); memory上に持ってくる、OBJ:が見える実例:RootFile.txt。HIST名->Draw()でもdisk上からOBJに持ってこれる。c1->Print("x.png");で描ける。cout<GetBinEntries(16)<GetBinContent(1,1)<Get("h0");が要る)。TFile数は1000くらいが限度なので使い終わったらdelete fで消すこと。
.rootファイル TFile TTree | TTreeは変数データやオブジェクトをひとまとめにして管理するクラスで何らかの物理データをROOTで使いやすい形に保存しておくために使う。ROOTではデータや解析結果をまとめて.rootファイル形式で保存する。例。root -b histos.rootで開ける。
TFile *f=new TFile("NOChipData_now.root"); .dir *.root; で取りいれたことを確認。f->ls();でobjにTTreeがあることがわかる。 TTreeViewer v("FullTree"); TTree * t=f.Get("FullTree;1"); t->Show(0), t->Show(1).....で内容が出る。t.Draw("NOChip12>>h12");でhistogram h12に内容が移される。後は普通のhistogram。イベントを扱った場合tree->Scan()で最初の25 eventsの内容が表示される:interactiveに見る方法とprogramから見る方法がある。TH1F *h0 = (TH1F*)f->Get("h0")が要る; vectorを含むときの扱いは
hvector.Cの例を参考にする。
vectorのTTree | hvector.Cを使った例(Tree作成-->hvector.root-->Tree read)とTTree_vector_interactive.txt
| xxx.root出力 | TFile f("demo.root","recreate");h->Write();f.Close();でいい 例pt_sampling.C-->save+read&plot。多くのhistogram扱うにはTObjArray Hlist(0)を定義しHlist.Add(h);と追加してからHlist->Write(); see p.159 , 例->make_root_file.C、
| xxx.root入力 | rootを読んだ例はfitExample.CのようにTFile *f = new TFile("demo5.root");auto h0 = (TH1F*)f->Get("h0");または auto h0 = static_cast(f->Get("Potential_300V));auto h = f->Get("Potential_300V")でもいい!。TCanvasもc1->Write()で書き込める(write_read.C)
root file copy | TFile_copy.CでTH1F, TProfile2Dなどの完全コピーできる。TTreeはまだ。
hのclass指定しなくてもauto h = f->Get(line)でよさそう。subdirectoryも作れる。
| rootの結合・合成 | TObjArray Hlist(0); Hlist.Add(Potential_FEM);を使う。例addRootFiles.C。Hlist.Add(Ey_FEM60_70_150);Hlist.Add(Ex_FEM60_70_150);TFile fg("test4.root","recreate");
Hlist.Write();でできた。.lsで調べる。例:combine_rootFiles_0.C,combine_rootFiles.C。subdirectoryも作れる
TFile_copy.C
|
軸 :HistGraph | 入出力 | Tree/TFile | 軸 | 演算 | 色 | 文字 | 関数とfit | 凡例(Legend) | 引数 | 日時 | 乱数発生:→topへ
テンプレート法 | auto htemplate = new TH2F("htemplate1",";x;y,1,xmin,xmax,1,ymin,ymax);htemplate->Draw();で軸をあらかじめ書いておき、Draw("SAME")で書き入れればいいのだった。Template.C-> 図
| 余白Margin | gPad->SetTopMargin(0.10) Divid(2,2)などの時はc1->cd(2)の後に入れる。
| X,Y軸の最少値最高値 | h->GetXaxix()->GetXmin();h->GetXaxis()->GetXmax();y=gPad->GetUymax(); GetUymin() scaleの違う2つのグラフ重ねるときに有効ー>右軸の追加参照
| 軸タイトルと軸ラベル | h1->GetXaxis()->SetLabelSize(0.05),SetLabelColor(2),SetLabelOffset(0.2),SetTitleSize(0.05)など。TGraphではh->GetXaxis()->SetTitle("tt")が必要(axisのa小文字)), d->GetXaxis()->SetTitleOffset(0.8); (x軸からのオフセット調節),TH1Fなどは直接d->SetXTitle("P_{x} (GeV)")もできる。例はaxisSet.C->図;({ }はLaTeX形式)、SetYTitle("Events/4 (GeV^{-1})");ギリシャ文字は#etaなど#をつける。上付き^{2},下付き_{a}など。 h->SetTitle("write graph title at the top")
| 縦軸調整 | h->SetMaximum(1.2);スケールの上限をset。下限はh->SetMinimum(0.0);
| 横軸の範囲調整 | g1->GetXaxis()->SetRangeUser(0.,12.)<-これはzoom時のみ有効みたい。TGraphで範囲決めたいときのごまかし方ー>SetRange_TGraph.C; g1->GetXaxis()->SetLimits(0.,12.)とすればTGraphでも有効だ(2011.2.7)
ところがTProfile, histに使ったらplotは変わらず横軸だけスケールした(2011.4.9, 例と図,)。
| x,y軸範囲の拡大 | プロットしx,y軸の下限数字近くで手模様が出たら右クリックし上限まで引く。
| グリッド | c1(or gPad)->SetGrid(); SetGrid(0)はY軸のみ, SetGrid(1)はX,Y軸とも。pad->SetGridx()はX(垂直)Grid, pad->SetGridy()はY(水平)Grid,
| 年月日や時間軸 | (p125)(指定)h->GetXaxis()->SetTimeDisplay(1);
(形式)h->GetXaxis()->SetTimeFormat("%d\/%m\/%Y");%yなら世紀なし,%H(24hour clock),%M,%S
(Time Offset)TDatime da(2003,02,28,12,00,00);gStyle->SetTimeOffset(da.Convert());(合成して)h->GetXaxis()->SetTimeFormat("%d\/%m\/%y%F2000-02-28 13:00:01"); (2段で表示する)
;gr0->GetXaxis()->SetTimeFormat("#splitline{ %Y}{%b %d}");axis->SetTimeFormat("#splitline{%Y}{%d\/%m}"); #splitline{%b %d}{%H %M}");実例ー> see time_test.Cとplot図。注意:gStyle->SetTimeOffset(da.Convert())でxはoffsetがかかっているから0.が左端になる。TDatime d2(2010,12,28,12,00,00);int t2=d2.Convert()で秒単位に統一した数字になる。 see time.C,24:00:00もOK(time_2.C)。
注意2:hour表示(H)がなぜか8時間ずれる。time_hour_test.Cと結果図。逆は逆はd1->Set(t1+30*60), d1->GetYear(),d1->GetMonth(),d1->GetDay(),d1->GetHour(),d1->GetMinute(),d1->GetSecond();, time_reverse.txtのようにd1->GetYear()など。
SetTimeDisplay(1)とするとちゃんと年月の区切りtick lineを自動的に入れてくれる。
| TGaxis | histogram/graphと独立に軸を描く。axis = new TGaxis(x1,y1,x2,y2,v1,v2,510,"+L");tick markに対してL=left,R=right,C=center, +,-,+-はside指定。" ","-","-R"はtick右,label左 (標準)で"+L"はtick左,label右(右辺にいい)だった。;例 axis = new TGaxis(gPad->GetUxmax(),gPad->GetUymin(),gPad->GetUxmax(),gPad->GetUymax(),0,rightmax,510,"+L");
| 軸の表示桁指定 | h1->GetYaxis()->SetDecimals(2); その例
| 指数はずし | (p.123-124) h->GetYaxis()->SetNoExponent();。TGaxis::SetMaxDigits(6)(defaultは5)で高くできるがTGaxisにしか使えないのでXaxis=new TGaxis(0,1,100,0,0,100,0,"+L");とダミーで作っておきXaxis->SetMaxDigits(6);とやればそれ以降画面は6ケタになる。Draw()いらない。例とその図
| 軸の生成 | (page. 123) TGaxis(Double_t xmin,Double_t ymin,Double_t xmax,Double_t ymax,Double_t wmin,
Double_t wmax,Int_t ndiv = 510,Option_t* chopt,Double_t gridlength = 0)
| 軸目盛の設定 | (p.122)gr0->GetXaxis()->SetNdivisions(505);ndiv = N1 + 100*N2 + 10000*N3,
N1=最細分割数. N2=次の分割数、default=510。optimizationがある。負にするとexactに分割。目盛(tick)の長さはh->GetXaxis()->SetTickLength(0.03)など。(右のY軸を目盛らない)c1->SetTicky(0);(上のX軸を目盛らない) c1->SetTickx(0);参考図
| 右軸などの追加 | TGaxis *axis = new TGaxis(t2,ymin,t2,ymax*0.8,ymin,ymax*0.8,510,"+L");
axis->SetLabelSize(0);axis->Draw();
例rightAxis.C,axis.Cとその図, twoScales.Cとその図, 目盛が重複しないためにはc1->SetTicky(0); c1->SetTickx();でいい?? ATLAS->SetPadTickY(0);ならいいが。右軸に2種類の目盛を並べた具体例ー>plot_2RightAxis_sample.Cと結果図
| 軸の追加書き込み | Fillなどで目盛が隠されてしまった場合に使う。TGaxis *axis = new (左Y軸)TGaxis(xmin,ymin,xmin,ymax,ymin,ymax,510,"-");(下X軸)TGaxis(xmin,ymin,xman,ymin,xmin,xmax,510,"-");"-"は目盛りの方向を示す。"+-"もいい。
axis->SetLabelSize(0);axis->Draw(); gPad->RedrawAxis()でいいかも(see p.38)
| log,対数表示 | (p.113)gPad->SetLogy():y軸をlogにする。SetLogx()もあり。gPad->SetLogy(0);でリニアーに変更。あるいはキャンバスc1の左端あたりを右クリックするとSetLogyが出るので選ぶ。
| 対数目盛 | ヒストグラムはlinearで取る()Full(log10(x))で取るが軸は対数目盛にしたい場合はh->GetXaxis()->SetTickLength(0.0);で目盛りをなくしておいてからaxis = new TGaxis(xmin,ymin,xmax,ymin,pow(10.,xmin),pow(10.,xmax),510,"+G"); axis->Draw();で追加して書く。10**5なども表示される。fontが合わないかも?
| RedrawAxis() | Fillで目盛が隠されてしまった場合に使うgPad->RedrawAxis().使えなかった(2012.3.22), h1->Draw("sameaxis");もダメだった??
| パレットpalette | h2->Draw("COLZ");c1.Update();pal = (TPaletteAxis*)h2->GetListOfFunctions()->FindObject("palette"); pal->GetAxis()->SetTitle("your own title");
pal->SetLabelSize(0.03); 例 plot_2D.Cと図。
| 画面余白調整 | c1 = new TCanvas("c1","A Simple Graph ",300,0,750,560);
c1->SetLeftMargin(0.12);, c1->SetBottomMargin(0.10);
|
演算 :HistGraph | 入出力 | Tree/TFile | 軸 | 演算 | 色 | 文字 | 関数とfit | 凡例(Legend) | 引数 | 日時 | 乱数発生:→topへ
Scale変更 | Float_t rightmax = 1.1*hint1->GetMaximum(); Float_t scale = gPad->GetUymax()/rightmax; hint1->Scale(scale);
| 正規化(1.0にする) | h->DrawNormalized("",1.0);またはDouble_t scale=1./Photo_r_phi->Integral();
Photo_r_phi->Scale(scale);とする。 面積を1にしたい場合は田中純メモ
| hist演算 | root>TH1F *d = new TH1F((*H1)/(*H2)); スケール倍はTH1F *s = new TH1F(2.5*(h)); /
田中純メモ参照
| ERRORの扱い | h->DrawNormalized("E")で出るが、正規化したりしてスケールずらす時は事前にbin毎にh->SetBinError(i+1,h->GetBinError(i+1));でエラーを強制的に書き込んでおくことー>例
| 平均とrms | xbar=SUM(w*x)/SUM(w), sigma=sqrt{SUM(w*(x-xbar)**2)/SUM(w)}=SQRT{SUM(w*x*x-w*2*x*xbar+w*xbar*xbar)/(SUM(w)} = SQRT{[SUM(w*x*x)-2*SUM(w*x)*xbar+SUM(w)*xbar*xbar)]/SUM(w)} = SQRT{[SUM(w*x*x)-SUM(w)*xbar*xbar]/SUM(w)}=SQRT{(SUMw2-SUMw0*xbar*xbar)/SUMw0}
| 複素数 | Complex.C
|
文字 :HistGraph | 入出力 | 軸 | 演算 | 色 | 文字 | 関数とfit | 凡例(Legend) | 引数 | 日時 | 乱数発生:→topへ
string | string becname[3] = {"EndcapC","Barrel","EndcapA"};などと出来る。文字列への変換はaa.c_str()。文字列からの変換はs=Form("%s",line)。特定文字の消去はstring_erase.C。特定文字列の置換はstring_replace.C。入力はifstream_string.C
| Text attributesクラス | TAttText Class Referenceが文字(text)関係のクラスである。Alignment, Angle, Color, Size, Font and Precisionが載っている。
| Font | Text font code = 10*fontnumber(1から15まで) + precision(0,1,2,3=pixels) 例はFontLooksにある。Pixel指定すると2つの異なる大きさのグラフの文字の大きさを同じにできるので便利だ(TextFont=43 and 63 (bold))。
| フォント指定 | (p.131)Fontリスト, t->SetTextFont(font); font = 10 * fontID(1-14) + precision,( 0,1,2), ->font.C, defaultは62, 132がTimesNew Roman --> see SetTextFont.txtと結果図
| ギリシャ・数文字・特殊記号 | TLatex *t=new TLatex(x,y,"#alpha #eta");-->page 118にリストあり。
Greek, Symbol, Accent, SQRTは#sqrt{x+1}。%は%%としないと出ないみたい。ℓは\ellか。
| Delimitersと | [#circC]は変なspaceが入ってしまう。p.117にあるように#[]{#circC},#left[....#right]とする。big square bracketsになってしまうが。
| 文字記入 | TText *t=new TText(x,y,"MC event"); t->SetTextSize(0.04); t->SetTextColor(2); t->Draw(); 前のものは消してくれる。角度変更t->SetTextAngle(45);絶対座標系(NDC)を使うときはt->SetNDC()とする。
| ATLAS Label | ATLAS SCT Preliminary, ATLASLabel(0.65,0.93,"SCT Preliminary");
gaus_ATLASLabel.C->図
| 数字(文字)を文字列に sprint() Form() | cid = new char[9];とはじめのあたりに宣言しておくと便利。何回も使える。sprintf(cid,"V%d.txt",HV);\0はNULL文字(文字列の終端を示す)でcid[8]=0でもいいが\0を最後につけておくのが簡単。sprintfは自動的に付けるようだし、間違いと宣言される。int HV=150ならV150.txtとなる。(int)x でfloat->intの変換ができる。\nは改行;leg->AddEntry(h3[i],cid,"l"); ->sprintfの例, 小数点の桁指定は%6.2fとする(例:sprintf.C->図)。%3dは3文字幅を指定。%02dで08などと頭にゼロをつけてくれる(時刻用)。文字は%sで受けlongは%ldで。例:sprintf.cxx。cid介さずに直接 Form("Barrel=%d",Layer) を文字代わりに入れてもいい!
| 文字列の分解 | strtok()を使う。strtok(), sscanf()の方が簡単かな。%f(float) %lf(double) %ld(long) %d(int)
| 文字列を数値に変換 | atoi、atof, stod, atoi64、atol を使う。double d=stod(string), atoi(),sscanf()の方が簡単かな。%f(float) %lf(double) %ld(long) %d(int)
| 凡例Legend | (p.137)
leg = new TLegend(x1 ,y1 ,x2, y2);絶対座標系(Normalized Coordinate System (NDC))を使っていることに注意。leg->AddEntry(h1,"One Theory","l");leg->AddEntry(h2,"Another Theory","f");
SetFillColor(kWhite);leg->SetFillColor(10)(背景色=白), leg->SetBorderSize(0)(0=枠なし、1=枠あり、2=枠とその影), leg->SetTextSize(0.03);leg->Draw(); ->SetBorderSize(2);leg->SetTextFont(132);"f"=box, "l"="L"=line, "p"=markerを表す。
Legendとは伝説・凡例・説明文のこと->Legend.txt、SetTextSize(0.04)を使うと枠から飛び出ても文字を書いてくれて自動調節がなくなるからいい(がマーカーが中心に来なくなる)。また同時にy1=y2とすればLegend領域の色が示されないので背景の色などが消されないー>例。X軸共通の複数プロットを1ページに描くと上中下でPadの大きさが異なる場合がある。NDC座標を使うTLegendの位置が同じくならない。その時は関数GetNDCY(y)を作ってuser座標yからNDCを計算すればいい。軸がlog scaleなら lymax=log10(ymax); lymin=log10(ymin); yleg1 = GetNDCY( (lymax-lymin)*0.78 + lymin) ;とする。
| マーカー | d->SetMarkerStyle(n) (n=1)dot(2)+(3)*(4)○(5)×(6)+(7)■(8)●(9)dot(20)---(30)はROOT_markerを見よ。 h->Draw(P);で描く。カラー指定:d->SetMarkerColor(n), サイズ設定:d->SetMarkerSize(3)(これはダメみたい->マーカー;
gr3->SetMarkerStyle(21);
TMarker *m=new TMarker(x,y,4); m->Draw(); 例はMarker.C, ROOT_markerを見よ。h1->SetMarkerStyle(kFullCircle)(kFullSquare)(kFullTriangleUp);(kFullTriangleDown);(kOpenCircle);
| 直線を描く | z1=new TLine(30000,0, 30000,0.16); z1->SetLineColor(n); z1->Draw();同じものは上書きになる。newを付ければ同じz1を使える。
| 線の幅・style | d->SetLineWidth(5);線スタイル:d->SetLineStyle(2)[1=line,2=broken,3=dotted,4=broken-dot,5=long-broken-dot]
| 矢印 | TArrow *ar = new TArrow(4,0.2,4,4.5,0.02,"|>");ar->SetLineWidth(3); ar->SetArrowSize(0.02);ar->Draw();
arrow.C->図
| 長方形を描く | b = new TBox(0.2,0.2,0.8,0.3); b->SetFillColor(5); b->SetFillStyle(3001); b->Draw();
| 長方形TPave | p = new TPave(0.2,225,7.2,345); これはTLegendと違ってuser座標のようだ。p->SetFillColor(10); p->SetBorderSize(2);2以上だと影が出来る、p->SetLineColor(1);p->Draw();
|
色 :HistGraph | 入出力 | Tree/TFile | 軸 | 演算 | 色 | 文字 | 関数とfit | 凡例(Legend) | 引数 | 日時 | 乱数発生:→topへ
色・模様をFILLする | (p.133) h->SetFillColor(2),h->SetFillStyle(3002);例:TBox.C ==>FillStyles。SetFillStyle(3002)などを使うと後ろの座標目盛が隠れない→例。誤差Fillが重なるときは3004と3005を使えば両方見える例。カラー指定:d->SetMarkerColor(n)(n=0と10は透明のようだ。kWhiteを使えば白を指定できる。)
| (p.134)色 | RootColorIndexを参照。(n=1)黒(2)赤
(3)bright緑(4)bright青(5)黄
(6)桃色(7)空色
(8)黄緑(9)青(10)白(透明?)。color index+100で暗く、+150で明るくできる。
| 背景を透明にする | photoshop elementで(1)選択する色を(スポイトでなく)領域(点線□)でえらぶ。shiftキーで複数色を選べるー>(2)付近の色で選択する。(3)新しいキャンパス(透明)にコピーし(4)pngでsaveすればよい。jpegでは背景が白くなる。
| 多彩な色表現 | 色番号の代わりにSetFillColor(kRed)のようにkBlack,kGray,kWhite,kRed,kOrange,kYellow,kSpring,kGreen,kTeal,KCyan,lAzure,kBlue,kViolet,kMagentaがある。kRed+9-10まである。kRed-4だとか。Root Color Wheel参照。詳しい説明はここにある。ROOT TColorクラスの説明参照。
| Color Palette | ROOTを使う。Draw("PLC PMC")とするとカラーパレットの中から自動的に色を順に選んでくれるようだ。ColorPalette.Cと結果図, plot_HVcurrent.Cと結果図, ここにgStyle->SetPalette(1);gStyle->SetPalette(kCherry),kCMYKgStyle->SetPalette(kSunset);TColor::InvertPalette();など(makeSCurve_2D.Cと2D.png)
| 色でFILLする | g->SetFillColor(45); Draw(ALF)のFが必要。例1と図1,例2と図2。Fillした濃すぎるば場合は透明化をg->SetFillColorAlpha(45,0.50)と調節できる。
| 位置指定 | グラフの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); fit(1111)の例
| TCanvas | c1 = new TCanvas("c1","A Simple Graph",0,0,700,500);0,0,750,500はスクリーの位置のよう。c1->SetFillStyle(4100);
TCanvas *c1 = new TCanvas("sakamoto","c1 title");sakamotoはリソース名、c1はプログラム上の変数名、c1 titlはタイトル。Draw()でやるとc1がdefaultで出来るらしい。
| 画面分割 | c1->Divide(2,2);c1->cd(1);h->Draw();から始まる。c1->cd(0)でDivie(1,1)に戻る(例->結果図)。c1->Divide(1,2,0,0)で2つのグラフをつなげられそう(
plot_2G.CとtwoGraph.gifgif,pngでは右端おかしいがepsならいい。参照。
| 画面分割 | NX*NY画面:plot_NXNY.Cと図
| c1->Clear(); | 画面クリアーする。Divie(1,1)に戻るようだ。
| c1.Print("file.ps") | ROOTのc1画面を出力する。file.eps,file.gifも可能。()ならc1.ps。
|
乱数発生 :HistGraph | 入出力 | Tree/TFile | 軸 | 演算 | 色 | 文字 | 関数とfit | 凡例(Legend) | 引数 | 日時 | 乱数発生:→topへ
乱数発生:gRandom | gRandom->Rndm() or Uniform(min,max), Gaus(mean,sigma), Exp(tau), BreitWigner(mean,sigma),
Landau(mean,sigma), Poisson(mean), Binomial(ntot,prob) 例;randGauss.C->結果, Seedのランダム発生はgRandom->SetSeed();
pt_sampling.Cと結果, random.cxx
| GetRandom | h1->GetRandom()でh1のhistgramの分布に従って乱数を発生する。例getRandom.Cと結果.png,getRandomPt.Cと結果.png,
,getRandomDedx.C(dedx_clone経由)と結果.png,
| GetRandom2 | h2D->GetRandom2(x,y)でh2Dのhistgramの分布に従って乱数を発生する。例dedx.Cでroot fileを作成しておいてからgetRandom2D.C-->結果.png
| Landau分布 | gRandom->Landau(mpv, sigma) -> 例Landau.Cとその結果:11.4.9. ランダウ分布を生成する "参照
| GUI利用 | c1画面のメニューにSavea s canvas.psでc1.psができる。
| h2root zz.ntup zz.root | root-fileに変換する。いろいろ出てくる。
| . ! | はshellに戻る。.!ls, .!vi XX
|
関数とfit :HistGraph | 入出力 | Tree/TFile | 軸 | 演算 | 色 | 文字 | 関数とfit | 凡例(Legend) | 引数 | 日時 | 乱数発生:→topへ
.L test.cxx | sub-program text.cxxをあらかじめコンパイルロードしておく。userが作る関数にいい。同じdirectoryか/root/macrosにおくと良いようだ。例:f2.cxx, induced.cxx,
| 外付け関数 | サブ関数はmainの前でも後ろでもよかった!(2015.9.22) 例:f3.Cと例:f3_reverse.C
| 関数を描く | TF1 f1("func1","sin(x)/x",0,10); f1.Draw();
| ROOTにある関数 | namespace TMath表に存在する関数のリストが載っている。Erfc(x) は complementary error function erfc(x) = (2/sqrt(pi)) Integral(exp(-t^2))dt between x and infinityがあるし逆関数のErfcInverse(x)もある。ただしガウス分布に使う時はprobability(>x)=0.5*erfc(x/sqrt(2))とすること。
| 組込み関数フィット | (p.65) gaus、expo、polN (N>0)、landauがある。例:fit_gaus.Cと結果と結果txt出力。h->Fit("expo");領域限定はh->Fit("gaus","","",-80.,80.)フィット結果を図に重ねて書かないときはh->Fit("gaus","0","",-80.,80.);-->例;ここで第2引数はL (Likelihood method、デフォルトは chisq-method)、 E (Better errors estimation by MINOS)等があります。第3引数はDrawオプションでE (エラーバー付き) 。
TF1 *gaus = h->GetFunction("gaus")で付随する関数をとって gaus->SetLineColor(4); gaus->SetLineWidth(2);などが出来る。
| フィット結果表示 | TF1 *fit = h->GetFunction("func");で定義してから例 chi2 = fit->GetChisquare();
p1 = fit->GetParameter(0); e1 = fit->GetParError(0);h->Fit("expo","Q")でFit出力を隠す。例:fit_gaus.Cとその結果図。[1]の初期値は f->SetParameter(1,1.21)とおく;
| SetNpx | TF1 *fit = g->GetFunction("f"); fit->SetNpx(10000);でfit曲線表示がスムーズになる。without_SetNpx.jpg->with_SetNpx.jpg
| 簡単な関数でフィット | TF1 *f = new TF1("f", "[2]*x*x + [1]*x + [0]");TF1 *f= new TF1("f", "[0]*exp([1]*x*x)+[2]")など ;例と図
| 初期値設定 | f->SetParameters(2.,0.,9.) (<---[0],[1],[2]の初期値設定)、f->SetParameter(0,100.);は[0]の初期値を100に設定。
| fit option | void Fit("gaus", "QO","LP", xxmin, xxmax); 第2引数は"Q" Quiet mode (minimum printing), "0" Do not plot the result of the fit."R" Use the range specified in the function range "N" Do not store the graphics function, do not draw, 第3引数はDrawOption
| 自分の関数でフィット | 例:fit_test.C . Fit使えるのはTH1,TH1Fだけかな?No, TGraphErrorsに外部関数でfit.Cした例。
| Minuitを使ったfit | Ifit_xyonly.Cと結果
| fit表示 | gStyle->SetOptFit();(非表示)gStyle->SetOptFit(0);(全情報)gStyle->SetOptFit(1111);fit(1111)の例
| DateTime | tm構造体?まだよく理解できず。datetime.C++.tx, sscanf()を使う %f(float) %lf(double) %ld(long) %d(int)
| | | | | | | | | |