#author("2019-09-04T14:46:25+09:00","default:kondo","kondo") * TFile [#wd8d944e] ** TObjectをファイルに保存する [#x291f903] TFile *fout = new TFile("out.root","recreate"); TNamed *header = new TNamed("header"); fout->Add(header); ... fout->Write(); fout->Close(); みたいな感じ。[[ここ:http://www-he.scphys.kyoto-u.ac.jp/member/n.kamo/wiki/doku.php?id=study:software:root:io]]が詳しくわかりやすい。 ** 別のDirectoryで作ったTGraphを保存する場合 [#o88d2c82] 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)違いができることになるので。 *** 補足 [#n1a4e047] 以上の方法だと、Drawしたときに Warning in <TFile::Append>: Replacing existing TH1: gedp0 (Potential memory leak). とか言われる。[[ここ:http://www-utheal.phys.s.u-tokyo.ac.jp/~yuasa/wiki/index.php/TGraph%E3%82%92Add%E3%81%97%E3%81%A6Draw%E3%81%99%E3%82%8B%E3%81%A8%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%8C%E6%B6%88%E3%81%88%E3%82%8B]] によると、以下の様な対処法で回避できる。 TList* glist = new TList(); glist->Add(g1); glist->Add(g2); file_out->Add(glist); ** オブジェクト一覧を取得する方法 [#d2f14981] 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; }