データをすぐに読み込みたい(TTree::ReadFile

1TTree *tree = new TTree("t1", "test measurement");
2tree->ReadFile("入力ファイル名", "列1/I:列2/I:列3/D", ",");  // CSVを読み込んだ想定
3tree->Draw("列1");  // 列1のヒストグラムを作成
1Long64_t ReadFile(const char* filename,
2                  const char* branchDescriptor = "",
3                  char delimiter = ' ')
filename

読み込むファイル名(テキストファイル)を指定します。 連番ファイルを読みこむ場合は、後述する TString を使うと楽ちんです。 ファイルの内容(=カラム名)はbranchDescriptorで指定します。

branchDescriptor

ブランチ変数を指定します。 複数のブランチ変数を指定する場合は:(コロン)で区切ってください。 ブランチ名には型を含めることができます。 Int_t型の場合はブランチ名/IDouble_t型の場合はブランチ名/Dのように書きます。 型を省略した場合はFloat_t型ブランチ名/Fになるらしいです。

delimiter

入力ファイルの区切り文字を指定します。 デフォルトは" "(半角スペース)です。 CSVファイルを読み込む場合は","と指定します。

サンプルコード

ここに100行4列のデータのテキストファイルがあるとします。 このファイルの「行数」はイベント数に相当し、 「列数」は取得したデータの項目に相当します。

# ch1,ch2,ch3,ch4,temp
100,105,104,103,20.5
101,106,103,100,20.7
...
 1// data2tree.C
 2{
 3    // STEP1: Set input filename
 4    TString ifn = "inputfilename";
 5
 6    // STEP2: Create TTree
 7    TTree *tree = new TTree("tree", "tree using ReadFile()");
 8
 9    // STEP3: Read data using TTree::ReadFile(...) method
10    tree->ReadFile(ifn.Data(), "row1/I:row2/I:row3/I:row4/I:row5/D", ",");
11
12    // STEP4: Create TFile to save TTree
13    TString ofn = "out.root";
14    TFile *fout = new TFile(ofn, "recreate");
15
16    // STEP5: Write TTree to TFile
17    tree->Write();
18
19    // STEP6: Close TFile
20    fout->Close();
21
22    return;
23}

注釈

学生実験や小さなテストベンチを使った実験の場合、 取得したデータはテキスト形式で出力するのが一番簡単な方法です。 ROOTで解析するときはTTreeになっていると楽ちんなので、 このデータをすぐに変換できるようマクロを作ることをオススメします。