ROOTファイルの作成†
TFile* outputfile = new TFile("output.root","recreate"); // ファイルの作成
TH1F* hist1 = new TH1F("hist1name","hist1 Title",10,0,10); // ヒストグラムの定義
float val = 1;
for(int i=0;i<10;i++){
hist1->Fill(val); // ヒストグラムに値を詰める
}
outputfile->Write(); // 作成したヒストグラムをファイルに書き込む
outputfile->Close(); // ファイルを閉じる
File1にあるヒストグラムをFile2に書き込む†
TFile* inputfile = new TFile("file1.root");
TFile* ourputfile = new TFile("file2.root","recreate");
outputfile->Add(inputfile->Get("hist1"));
outputfile->Write();
outputfile->Close();
同じNameのTreeが複数作られてしまう問題†
- treeを含むTFileを作り、そのファイルを開いて.lsすると同じtreeが複数出来ることがある。
これは、treeのAutoSave機能によるもので、TFileにTTreeを書き込む際に、ある程度の容量になる毎に自動保存され、そのたびにTKeyが付与されることが原因である。
- だからと言って、その複数のTKeyに対してデータが分割されて入っているわけではなく、どちらも同じデータを参照しているため、実用上は(たぶん)問題ない。
- とは言え気持ち悪いので、ひとつだけにしたい、という場合の回避策としては、
tree->Write("",TObject::kOverwrite);
または
file->Write("",TObject::kOverwrite);
としてからTFileを閉じれば良い。