グラフしたい(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);  // 第一引数の値を一緒にする