グラフしたい(TGraph
)
1TGraph *g;
2g->SetPoint(g->GetN(), x1, y1);
3g->SetPoint(g->GetN(), x2, y2);
4g->SetPoint(g->GetN(), x3, y3);
TGraph::SetPoint
で、データ点を順番に追加できます。
方眼紙にプロットするように、1点ずつ点を打つようなグラフ(散布図)を作りたい人に向いています。
FADCの波形データをプロットしたい
1const Int_t N = t->GetEntries();
2TGraph *gr[N]; // 各イベントのFADC波形をグラフにしたいとする
3
4for (Int_t igraph = 0; graph < N; igraph++) {
5 gr[igraph] = new TGraph(0); // 0個の点のグラフとしてTGraphオブジェクトを作成
6}
7
8for (Int_t ientry = 0; ientry < N; ientry++) {
9 t->GetEntry(ientry); // ここで、FADCの各サンプリング点データの詰まったvectorが得られるとする(変数名をadcとする)
10 Int_t Nsamp = (Int_t)adc.size(); // vector変数の大きさを調べる
11 for (Int_t isamp = 0; isamp < Nsamp; isamp++) {
12 gr[ientry]->SetPoint(gr[ientry]->GetN(), isamp, adc->at(isamp));
13 // GetN()で、今の点の数を取ってきているのがミソ
14 // あとは、xの値、yの値を指定する
15 }
16}
上記サンプルは、FADCの波形データをプロットした場合のものです。
エラーを付ける際の注意点
上のループはTGraphErrorsでも使用可能
なので、エラーを付けることもできるが、以下の点に注意する
1// これは間違い
2gre->SetPoint(gre->GetN(), x, y); // とりえあずGetN()してプロットする
3gre->SetPointError(gre->GetN(), xerr, yerr); // しかし、これだと、GetN()が次のになってしまって、正しい位置にエラーがつかない
4
5// 正しくは以下のようにする
6Int_t npt = gre->GetN();
7gre->SetPoint(npt, x, y);
8gre->SetPoint(npt, xerr, yerr); // 第一引数の値を一緒にする