【问题标题】:Converting C++ to pyroot: How to get a file object from a file in pyroot?将 C++ 转换为 pyroot:如何从 pyroot 中的文件中获取文件对象?
【发布时间】:2018-12-29 02:07:49
【问题描述】:
  1. 我正在进行中微子研究,这需要我通过叠加直方图来进行数据分析。我们正在使用ROOT。我目前正在尝试将以下代码从 C++ 转换为 pyroot:

    #include "TFile.h"
    #include "TH1F.h"
    #include "TCanvas.h"
    #include "TString.h"
    void myscript()
    {
      //get a histogram named vtx_0 from the file 5A_data
      TFile* file = TFile::Open("5A_data");
      TH1F* hist = file->Get("vtx_0");
      TCanvas* canvas = new TCanvas("c1", "Dynamic Filling Example", 200, 10, 700,500);
      hist->Draw();
    }
    
  2. 这是我目前的代码,用 python 重写:

    from ROOT import TFile, TH1F, TCanvas, TString
    def myscript():
      #get vtx_0 from 5A_data
      TFile file1 = open("5A_data")
      TH1F hist = 
    
  3. 我对 Python 的了解有限。上面的 Python 代码主要是通过查看各种在线示例创建的,因此我什至不确定到目前为止我所写的内容是否正确。

  4. 我最需要并且在网上找不到的是如何将 C++ 中的以下行转换为 Python 中的等价行。

    TH1F* hist = file->Get("vtx_0");
    

如何做到这一点?

  1. 此外,如果您发现到目前为止我编写的 Python 代码有任何问题,请告诉我我做错了什么以及如何解决它。谢谢。

【问题讨论】:

    标签: python c++ root-framework pyroot


    【解决方案1】:

    变量声明不需要类型,这样的事情可能会让你开始:

    from ROOT import TFile, TH1F, TCanvas, TString
    def myscript():
        tf = TFile("5A_data")
        print(dir(tf))
        #tree = tf.Get("vtx_0")
        fo = tf.GetObject("vtx_0")
        print(dir(fo))
        for x in fo:
            print(x)
        import pdb;pdb.set_trace()
    

    引用:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-30
      • 2014-06-28
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多