編集メニュー > 新規作成 編集 コピー 名前の変更 凍結 アップロード 添付ファイル一覧 バックアップ

TFile

TObjectをファイルに保存する

TFile *fout = new TFile("out.root","recreate");
TNamed *header = new TNamed("header");
fout->Add(header);

...

fout->Write();
fout->Close();

みたいな感じ。ここが詳しくわかりやすい。

別のDirectoryで作ったTGraphを保存する場合

TFile *file_in = new TFile("file1.root","readonly");
TGraph *g1 = new TGraph(N1,x1,y1);
TGraph *g2 = new TGraph(N2,x2,y2);
g1->SetName("g1");
g2->SetName("g2");

TFile *file_out = new TFile("file2.root",recreate");
file_out->Add(g1);
file_out->Add(g2);
file_out->Write();

とかする。TFile::Addをすればよい。TGraph::SetName?はこれをしておかないと、複数作った場合はすべて"Graph"という名前のバージョン(namecycle)違いができることになるので。

補足

以上の方法だと、Drawしたときに

Warning in <TFile::Append>: Replacing existing TH1: gedp0 (Potential memory leak).

とか言われる。ここ によると、以下の様な対処法で回避できる。

TList* glist = new TList();
glist->Add(g1);
glist->Add(g2);
file_out->Add(glist);

オブジェクト一覧を取得する方法

   TList *list = f1->GetListOfKeys();
   for (Int_t i=0;i<list->GetEntries();++i){
     TKey *key = (TKey*)list->At(i);
     TString name = key->GetName();
     TObject *o1 = f1->Get(name.Data());
     TString cname(o1->ClassName());
     if (!cname.Contains("TH1")) continue;
   }