通过 Python 在 Using Root 中创建带有分支的 TTree
Creating a TTree with Branches in Using Root through 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() 时,我得到
TFile** rdata.root
T文件* rdata.root
图例:TH1F 质量;1 质量
关键:TNtuple tnt;1 tnt
除非您尝试进行按位与运算,否则符号 & 无效。我假设您想发送指向原始变量的指针。
我们不会在 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")
我正在尝试通过 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() 时,我得到
TFile** rdata.root T文件* rdata.root 图例:TH1F 质量;1 质量 关键:TNtuple tnt;1 tnt
除非您尝试进行按位与运算,否则符号 & 无效。我假设您想发送指向原始变量的指针。 我们不会在 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")