データをすぐに読み込みたい(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型
の場合はブランチ名/I
、Double_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になっていると楽ちんなので、 このデータをすぐに変換できるようマクロを作ることをオススメします。