【问题标题】:How to open root files (ROOT Framework)如何打开根文件(ROOT 框架)
【发布时间】:2016-04-19 21:52:11
【问题描述】:

如何在 C++ 代码中打开 .root 文件?并在终端上使用 C++ 代码从 .root 文件中读取和打印参数?

【问题讨论】:

    标签: file frameworks analysis root-framework


    【解决方案1】:

    你需要安装ROOT (https://root.cern.ch/)

    那么您有几个选项,最简单的方法是在解释器中打开它,只需在控制台中输入即可:

    root your_file.root
    

    你可以在浏览器中查看,输入:

    TBrowser b
    

    从脚本/C++ 代码打开它并获取存储在其中的树:

    #include "TFile.h"
    #include "TTree.h"
    
    TFile *f=new TFile("your_file.root");
    TTree *tr=(TTree*)f->Get("the_tree_name");
    

    【讨论】:

    • 在这种情况下,您可以使用以下方法检索对象:TFile f=new TFile("your_file.root"); TH1F *h=(TH1F)f->Get("hM0");
    • 有没有办法不用命令行?我需要为我的论文检查很多根文件,并希望通过双击根文件来打开 TBrowser。但它不起作用。有谁知道我能做什么?
    • 嗯,我相信答案的第二部分正是如此。如果您更喜欢 python,请查找 pyROOT。
    • 我不想将数据导入脚本。 Root 具有 TBrowser,它是一个 GUI,可将 Root 文件的内容显示为直方图。但要打开 TBrowser,我首先必须从命令行启动 Root,然后调用新 TBrowser 的构造函数。在 TBrowser GUI 中,我可以导航到我想要检查的文件,然后我可以打开直方图。
    • 这是一个非常乏味且不必要的复杂过程。我想要的是能够通过双击根文件来查看 TBrowser 直方图。就像您想阅读 PDF 文件一样,双击它即可立即开始阅读。为什么 Root 文件没那么简单?
    【解决方案2】:

    如果您仅限于终端(即无法访问 X 服务器),那么您可以使用类似的东西

    root -l myfile.root
    root [0] .ls
    <...>
    KEY: TTree tree;1 Demo ntuple
    root [1] tree->Scan("parameter")
    

    (参见根用户指南的section 11)。

    根据您要打印的参数类型,您可能还需要考虑myObject-&gt;Print()(从您的根命令行会话中点击myObject-&gt;[tab])。

    如果您可以使用图形用户界面(例如ssh -Y),那么@asen-christov 的答案就是您要走的路。

    【讨论】:

    • 有没有办法直接从GUI打开TBrowser而不用打开命令行?
    【解决方案3】:

    我通常只保存一个文件(例如 try.cpp) 然后在终端输入root -l try.cpp 打印和扫描(如上面的答案所示)打印您需要的内容。

    TBrowser b 显示 .root 文件中的内容(树、树枝和树叶)

    【讨论】:

      猜你喜欢
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 2012-09-04
      • 1970-01-01
      • 2012-09-10
      相关资源
      最近更新 更多