通过Python使用Root创建带有分支的TTree

2024-04-25 09:42:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试通过python创建一个带有根中分支的树。我有一个.root文件,并且我正在尝试创建作为.root文件的变量(或数据点)的分支。以下是我的尝试:

f = ROOT.TFile('event.root', 'read') #opening the file and creating a file object f
T = ROOT.TTree("T", "simple tree")



#ntuple = ROOT.TNtuple("ntuple","Demo ntuple","px:py:pz:m")
T.Scan("px:py:pz:m")

这给了我:

Error in TTreeFormula::Compile: Bad numerical expression : “px”
Error in TTreeFormula::Compile: Bad numerical expression : “py”
Error in TTreeFormula::Compile: Bad numerical expression : “pz”
Error in TTreeFormula::Compile: Bad numerical expression : “m”

Row * px * py * pz * m *

我明白为什么,因为我没有定义我的变量。因此,我查看了一个示例https://www.niser.ac.in/sercehep2017/notes/RootTutorial_TTree.pdf,(幻灯片3),并尝试将.root文件中应包含的变量定义为:

f = ROOT.TFile('event.root', 'read') #opening the file and creating a file object f
T = ROOT.TTree("T", "simple tree")

px_as_floats = float(px)
py_as_float = float(py)
pz_as_float = float(pz)
m_as_float = float(m)
T.Branch("px",&px,"px/F")
T.Branch("py",&py,"py/F")
T.Branch("pz,&pz,"pz/F")
T.Branch("m",&m,"m/F")

但是,我最后犯了一个错误:

Traceback (most recent call last):
File “”, line 1, in
File “/mnt/c/1/writeroot.py”, line 17
T.Branch(“px”,&px,“px/F”)
              ^
SyntaxError: invalid syntax

有没有办法用python来写呢?写作:

T.ROOT.Branch(“px”,&px,“px/F”)

也不起作用。你知道吗

 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/mnt/c/1/writeroot.py", line 17
  T.ROOT.Branch("pt1",&pt1,"pt/F")
                    ^
 SyntaxError: invalid syntax

如何修复语法。 最后,我尝试将.root文件中使用的字典加载到我的树中,然后对字典中的项进行一些计算。 换句话说,如何从.root文件中提取字典?你知道吗

键入时:

当我键入gFile->;ls()时,我得到

文件**rdata.root根目录 文件*rdata.root根目录 键:TH1F质量;1质量 关键词:三硝基甲苯;一硝基甲苯


Tags: 文件inpybranchnumericalerrorrootfloat
1条回答
网友
1楼 · 发布于 2024-04-25 09:42:24

除非尝试进行位与运算,否则symobl&;无效。我假设您想要发送指向原始变量的指针。 我们在python中不这样做。如果是这样的话,在google上查找局部变量和全局变量。 python中的Tl;dr所有可变类型都是通过引用传递的 我个人会这样写:

T.Branch("px",px,"px/F")
T.Branch("py",py,"py/F")
T.Branch("pz", pz,"pz/F")
T.Branch("m",m,"m/F")

相关问题 更多 >