1
  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 代码有任何问题,请告诉我我做错了什么以及如何修复它。谢谢你。
4

1 回答 1

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()

参考:

于 2018-07-20T18:34:05.833 回答