摘要:在运行uproot tutorial时,TTree分支似乎丢失了。
我有一个根文件,其中包含一个名为'prod‘的TTree,它有一组复杂的参差不齐的叶子和分支,我可以在根目录的TBrowser中看到。我使用这个根文件作为输入启动了uproot教程,并在交互会话开始时收到以下错误:
>>>import uproot as up
>>> file = up.open('small.root')
>>> file
<ROOTDirectory b'small.root' at 0x025b5e3477c0>
>>> file.keys()
[b'prod;1']
>>> file.classnames()
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
file.classnames()
AttributeError: 'ROOTDirectory' object has no attribute 'classnames'
>>> file['prod']
<TTree b'prod' at 0x025b5dd15d00>为什么在尝试获取类名时会出现错误?
忽略这一点,继续前进。下一个问题是当我尝试查看TTree prod中的内容时
>>> tree = file['prod']
>>> tree.keys()
[b'COSMIC', b'COSMICRES', b'COTNBC', b'COTTIME', b'GLB', b'LUM', b'MET', b'MU', b'PHOTON', b'RESIDUALS', b'TRACK', b'TRKDET', b'VERTEX', b'ZVTX', b'MOM_ntk', b'MOM_pt', b'MOM_px', b'MOM_py', b'MOM_pz']
>>> branches = tree.arrays(namedecode='utf-8')
>>> branches.keys()
dict_keys(['MET', 'MOM_ntk', 'MOM_pt', 'MOM_px', 'MOM_py', 'MOM_pz'])uproot教程暗示我应该获得所有的分支,但显然我遗漏了相当多的分支。特别是,唯一被转移的分支是那些我称之为“简单”的分支,因为它们只有数字数据成员。
其他分支在其中包含更多的项。例如,'MU‘分支具有事件中每个µ子的属性。首先是这样的µ子的数量,然后是这些µ子的每个属性的进一步分支,比如它的质量和与之相关的磁道号。‘'MET’、'MOM_ntk‘、'MOM_pt’、'MOM_px‘、'MOM_py’和'MOM_pz‘都只包含浮点数的列表。MOM_ntk每个事件只有一个数字(称之为'alpha'),而其他MOM分支将在每个分支中都有'alpha‘数字。
该文件只有1000个事件,总大小只有5MB左右。
我想知道其他的分支都到哪里去了!我的朋友'COTNBC‘或'GLB’在哪里(其中应该有所有的运行和事件编号)。
任何建议或帮助都将不胜感激!
配备32 i7内存的Windows 10 PC英特尔(R)酷睿(TM) i7-8700 CPU @3.20 CPU x64处理器
发布于 2020-10-16 21:47:59
根据你正在尝试做的事情和你得到的输出,看起来你期待的是Uroot4,但你得到的是Uroot3。在Uroot4与Uroot3具有特征奇偶校验之前,它将位于一个名为uproot4 (pip install uproot4和import uproot4)的包中。这使您可以在此转换过程中同时使用这两种方法。
其中一个不同之处在于,Uroot3的keys()方法不会通过分支的子分支递归,但Uroot4的方法会递归。(在这两个文件中都有一个recurse=True/False参数,但是由于您所看到的原因,默认值发生了变化。)
名称更改(uproot4 uproot和uproot→uproot3)将在年底前进行。Uroot4只需要写入文件就可以了。
https://stackoverflow.com/questions/64389307
复制相似问题