http://www-he.scphys.kyoto-u.ac.jp/member/n.kamo/wiki/doku.php?id=study:software:root:graphic
の、
「Styleの変更とModifiedとUpdateとDrawの関係」
を読む。
おおまかには、Drawの位置を変えるか、いろいろDraw optionやgStyleをいじった最後に
canvas->Update();
http://www-he.scphys.kyoto-u.ac.jp/member/n.kamo/wiki/doku.php?id=study:software:root:graphic
の、
「Styleの変更とModifiedとUpdateとDrawの関係」
を読む。
おおまかには、Drawの位置を変えるか、いろいろDraw optionやgStyleをいじった最後に
canvas->Update();
TFile* file = new TFile("hoge.root"); TTree* t = (TTree*)file->Get("t"); vector<int>* vec = 0; t->SetBranchAddress("vec",&vec);
ポインタを用意する
TFile* file = new TFile("hoge.root","recreate"); TTree* t = new TTree("t","tree"); vector<int> vec; t->Branch("vec",&vec,"vec/I"); : : : t->Fill(); vec.clear(); t->Write(); file->Close();
Branch()の三番目の引数が必要かどうかはよくわからん
TGraphをfor文使って大量に描きたいときは、二次元配列を使うとうまいことできる
x[3][5] = {{…..}, {…..}, {…..}}; y[3][5] = {{…..}, {…..}, {…..}}; TGraph *g[3]; for(int i=0;i<3;i++){ g[i] = new TGraph(5, x[i], y[i]); g[i]->Draw(); }
二次元ヒストグラムでなんかの分布を見て、一番データが集中してるところでのx, yの値がほしいときがよくある
ヒストグラムの名前をhist1とすると、
int maxbin; int maximum_xbin; int maximum_ybin; int dammyz; double maximum_x; double maximum_y; maxbin = hist1->GetMaximumBin(); //グローバルなbinの値をとってくる hist1->GetBinXYZ(maxbin, maximum_xbin, maximum_ybin, dammyz); //グローバルなbinの値を、x,y,z軸それぞれのbin番号に変える(今は二次元なのでzはダミー) maximum_x = hist1->GetXaxis()->GetBinCenter(maximum_xbin); //bin番号を、その軸上での値に変える maximum_y = hist1->GetYaxis()->GetBinCenter(maximum_ybin);
とする。Hough変換とかで便利
コンパイルして使用している場合、これらの関数はTH1で定義されているので、TH1.hをincludeする
普通、配列にデータ入れてグラフ描くときは
int x[3] = {1,2,3}; int y[3] = {1,2,3}; TGraph *g1 = new TGraph(3, x, y); g1->Draw("AP");
的な感じでTGraphの引数には配列の名前を入れる
vectorでこれをやるとエラーでるけど、引数を
vector<int> x; vector<int> y; … TGraph *g1 = new TGraph(3, &x[0], &y[0]);
とすればいける