问题标签 [uproot]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何在 Python 中使用 uproot 读取 TMatrixT?
我有一个 *.root 文件,我正在尝试使用 uproot (uproot4) 读入 Python。它看起来像这样:
如何读取 TMatrixT 类型?使用 .keys()、.values() 和 .items() 不起作用。
将数据读入笨拙的数组、pandas 数据框或 numpy 数组的正确方法是什么?
python - 将提升直方图写入在 uproot 中创建的根文件
我目前正在尝试用 uproot 读取 ROOT 树,用 boost-histogram 记录和填充直方图,并将它们写回一个新的 ROOT 文件。这似乎对 bin 内容非常有效,但我似乎无法为最终 ROOT 文件中的直方图获得正确的 bin 错误。当我阅读这些直方图时,h.GetBinError(b)
似乎等于h.GetBinContent(b)
,而我想知道通常为 ROOT 直方图产生的熟悉的 sumW2 错误。我的工作流程如下,使用 python 3.8:
然后我使用 uproot4.iterate 遍历输入树,为每个“块”生成一个尴尬的数组,在此表示为e
:
我不确定如何在构建提升直方图时获得 sumw2 权重,但根据文档,我将直方图定义更改为:
但是,当我运行我的代码时,这会导致该.to_numpy()
行出现问题。错误说:“ what = uproot3_methods.convert.towriteable(what)
”“ TypeError: cannot perform reduce with flexible type
”
是否有其他方法可以将 sumW2 样式的错误从 boost-histogram 传播到在 uproot 中创建的 ROOT 文件?或者我对这个变量的理解可能存在错误storage=
......任何帮助将不胜感激。
python - 读取 TH1D 的一个分支
我正在尝试在 uproot4 中读取 TH1D 对象的一个分支。可以使用以下命令创建示例根文件:
连根拔起:
但是,当我尝试读取数组时,它会失败并出现很长的 Traceback。最后的电话是:
如果我设置 SetMakeClass(0); 在创建文件时,读取失败,而是:
使用 Python 2.7.18 和 3.8.6 解释器测试了 ROOT 6.22/06 和 5.34/21,连根拔起 4.0.5 和 4.0.6。难道我做错了什么?
python - 带有 bin 标签的 NumPy 的 TH2D 对象
我在似然拟合中使用的讨厌参数之间有一个二维相关矩阵。我想把它翻译成 NumPy 以便与其他 vis 库一起使用。问题是TH2D.edges
返回 bin 索引,我需要 bin 标签,即哪个 bin 是哪个讨厌的参数。该TH2D
对象具有以下成员:
是否可以为每个索引提取 bin 标签?
uproot - TParameter 没有属性“值”
我有这个 TParameter(准确地说是 Model_TParameter_3c_double_3e__v2),我试图通过它的“值”属性访问它,我已经看到通过这里的文档使用它
但这不起作用并吐出:
我还使用标准成员函数 GetVal() 通过 root 读取了它,那里的一切似乎都运行良好。
我错过了什么吗?干杯
python - 在 MultiIndex pandas 数据帧上使用多维索引?
我有一个看起来像这样的多索引熊猫数据框(称为 p_z):
我希望能够根据另一个多维数据框(或 numpy 数组)选择某些行。它看起来像一个 pandas 数据框(称为 tofpid):
我也把它当作一个尴尬的数组,它是一个 (26692, ) 数组(每个条目都有非标准数量的子条目)。这是一个选择 df/array,它告诉 p_z df 要保留哪些行。所以在 p_z 的条目 0 中,它应该保留子条目 0、2、4、5、7 等。
我找不到在熊猫中完成这项工作的方法。我是 pandas 的新手,甚至是 multiindex 的新手;但我觉得应该有办法做到这一点。如果它能够更好地广播,我将在大约 1500 个类似大小的数据帧上执行此操作。如果有帮助,这些数据框来自使用 uproot 导入的 *.root 文件(如果有另一种方法可以在没有 pandas 的情况下做到这一点,我会接受它;但我很想使用 pandas 来保持井井有条)。
编辑:这是一个可重复的示例(由 Jim Pavinski 的回答提供;谢谢!)。
这两个数据帧都是在 uproot 中本地生成的,但这将重现与 uproot 相同的数据帧(使用笨拙的库)。
python - 更改根文件中的分支名称
我有一个包含一个 TTree 和 57 个分支的根文件。我想将其转换为只有 40 个分支的根文件,并更改它们的名称。我正在用python做这个。
解决这个问题的最佳方法是什么?我应该使用 uproot.recreate 创建一个新的根文件吗?如果是这样,如何使用来自 40 个旧分支的数据创建一个新的根文件,并更改分支名称?