根据您提供的代码和问题描述,您想要读取一个包含三个直方图数据的 ROOT 文件。您尝试了 root read.c 命令,但一直没有成功读取数据。
首先,确保您已经正确安装了 ROOT 软件,并且在 Linux 系统中可以使用 root 命令。
接下来,让我们来仔细分析您提供的 read_Histo.c 代码:void read_Histo(const char* fname = "Date88.root") { gROOT->Reset(); TFile f(fname); Int_t before; TTree* ReadTree = (TTree*)gDirectory->Get(fname); ReadTree->SetBranchAddress("before", &before); Int_t nentries = ReadTree->GetEntries(); Int_t nbytes = 0; ofstream leave("AL_2point8mm.txt"); for (Int_t i = 0; i < nentries; i++) { nbytes += ReadTree->GetEntry(i); leave << before << " " << endl; }}
根据代码分析,这是一个定义了 read_Histo 函数的 C++ 代码。它使用 ROOT 库来读取 ROOT 文件中的直方图数据,并将数据写入到名为 AL_2point8mm.txt 的文本文件中。
然而,您的代码中 TFile 类的构造函数中传入的 fname 参数是一个 ROOT 文件名,而不是文件路径。因此,在调用 TFile 构造函数之前,您需要将 ROOT 文件的路径和文件名传递给 fname 参数。
另外,确保 ROOT 文件(Date88.root)与您的代码位于相同的目录下,或者提供正确的相对路径或绝对路径。
修正后的代码示例如下:void read_Histo(const char* fname = "path/to/your/ROOT/Date88.root") { gROOT->Reset(); TFile f(fname); Int_t before; TTree* ReadTree = (TTree*)gDirectory->Get("tree_name"); // 请将 "tree_name" 替换为您 ROOT 文件中的树的名称 ReadTree->SetBranchAddress("before", &before); Int_t nentries = ReadTree->GetEntries(); Int_t nbytes = 0; ofstream leave("AL_2point8mm.txt"); for (Int_t i = 0; i < nentries; i++) { nbytes += ReadTree->GetEntry(i); leave << before << " " << endl; }}
请将 "path/to/your/ROOT/Date88.root" 替换为正确的 ROOT 文件的路径。同时,将 "tree_name" 替换为您 ROOT 文件中实际树的名称。
根据您提供的信息,您也可以考虑使用 TTree 的 Draw 函数来直接绘制直方图数据,而不是将数据写入文本文件。
希望这个解释对您有所帮助!如果您有任何进一步的问题,请随时提问。 |