问题标签 [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.

0 投票
1 回答
255 浏览

numpy - 连根拔起阅读 TTree 朋友

是否有与 uproot 等效的TTree::AddFriend () ?我在 2 个不同的文件中有 2 个并行树,我需要使用 uproot.iterate 和使用解释(设置 uproot.iterate 的“分支”选项)读取它们。

也许我可以通过从文件上的 iterate() 调用手动获取几个迭代器,然后在每个迭代器上调用 next() 来做到这一点......但也许有一种类似于 AddFriend 的更简单的方法?

感谢您的任何提示!

编辑:我不确定我是否清楚,所以这里有更多细节。我的问题不是关于数组的使用,而是关于如何从不同的文件中读取它们。这是我正在做的一个模型:

那么如果a并且b属于 2 个不同文件中的 2 棵树呢?

0 投票
1 回答
571 浏览

python - 循环遍历 pandas.dataframe 的条目或子条目

我正在使用 uproot 将 ROOT.TTree 转换为 pandas.dataframe。数据框的结构如下所示。请注意,“met”是一个入门级变量,而“mu_cells_*”是一个子条目级变量。

现在我想创建一个“met”的 ROOT.TH1 直方图。我在根论坛上问过,这只能通过循环数据帧并为每个条目执行 ROOT.TH1.Fill() 来完成(不是子条目以避免多次计数),请参阅链接。我想问一下,最好的方法是什么?

同样,既然必须遍历子条目,我该如何制作 'mu_cells_e' 的 TH1?

最好的,

约瑟

0 投票
1 回答
146 浏览

python - 使用 uproot 继续读取压缩问题的树数据

从使用 zlib 压缩的树中读取数据时uproot,我发现 zlib 存在一些压缩错误,例如:Error -3 while decompressing data: incorrect data check或者Error -5 while decompressing data: incomplete or truncated stream.当我在 ROOT 中打开文件时,我从 zlib 中得到类似的错误:

但是,ROOT 会跳过有问题的条目(或多个条目)并继续尝试读取文件。在 uproot 中,zlib 异常被向上传递。我抓住了它,但我无法继续处理该文件。该文件显然存在潜在问题(似乎来自我无法控制的 ROOT 合并问题),但是有没有办法让根目录识别并跳过有问题的条目并继续处理其余数据?我可以想象在阅读时限制条目,但我如何在不反复试验的情况下通过根目录识别它们?我只能通过在根目录中逐个读取每个分支来识别有问题的分支,并且仍然无法识别哪些条目是问题(或通过检查 ROOT)。

谢谢!

0 投票
1 回答
136 浏览

uproot - 如何使用锯齿状数组获得与 root_numpy root2array() 输出相同的 uproot.iterate() 输出

我知道有类似问题的解决方案:如何快速获得像 root_numpy root2array() 输出一样的 uproot.iterate() 输出 但据我所知,它仅适用于平面 ROOT TTrees。我想为以下问题提供通用解决方案:

  1. 尺寸固定但嵌套的数据,如粒子动量 (px, py, pz),在根 TTree 中表示为vector<double>
  2. 任意大小的维度数据

我所有的申请asjagged都失败了。jaggedarray情况(1)是否可以避免?

0 投票
1 回答
1341 浏览

uproot - Uproot:AttributeError:“模块”对象没有属性“打开”

似乎连根拔起不承认“开放”。我正在使用文档中的代码;

返回 AttributeError: 'module' 对象没有属性 'open'

我正在使用 Python 2.7 和 uproot 3.10.11,但我还安装了一个虚拟环境并尝试了其他 python 和 uproot 版本。我尝试重新安装uproot,并尝试打开其他文件,都返回相同的错误。

有任何想法吗?

0 投票
0 回答
99 浏览

python - 使用 uproot 将 ROOT 文件读入 daskframe 时自动设置 dtypes

我正在尝试使用dask. 我最初以这种方式将我的 ROOT 文件读uproot入 a pandas.DataFrame

当我这样做时,一切正常,不同分支的类型被正确识别。特别是,在上面的示例中,"Trigger"分支是布尔值,"nTracks"分支是整数,"mass"分支是浮点数。

但是,当我使用读取同一个文件时,uproot.daskframe我取而代之的是取回一个分配了所有三个分支的 daskframe float64,如下所示:

这使脚本稍后中断,因为我需要将触发器分支专门解释为一个简单的布尔值,以便对其进行剪切。

理想情况下,我希望它能够自动识别每一列的正确 dtype。

或者,手动设置它们对我来说也很好。我可以通过以旧方式阅读一个事件并使用它来找出正确的 dtypes。根据文档,我应该能够传递一个返回 a 的字典uproot.interp.interp.Interpretation,但我不清楚它到底是如何工作的。

这整个混乱是使用dask还是限制uproot

作为参考,我使用的是 uproot 3.11.3 并安装了 dask 版本 2.6.0。

0 投票
1 回答
336 浏览

python - 将文件中的 TTree 复制到带有根目录的新文件中

我是连根拔起的新手,我正在尝试完成一项相当简单的任务,但我不知道该怎么做。本质上,我有一个根文件,其中包含一堆直方图和一个 TTree,它由 8 个分支组成,大约有 400 万个条目。

我需要做的是,创建一个新的根文件,并将 80% 的 TTree 从原始文件复制到一个 TTree(称为训练),将剩余的 20% 复制到同一个新文件中的第二个 TTree(称为测试)。

我尝试的是在python中创建一个目录,我从原始文件分支中读取所有数据。然后我使用这个目录将数据写入两个新的 TTree。

这是一种工作,我得到了一个具有我想要的结构的文件,我并不完全满意,原因有两个:

  • 肯定有更直接的方法吗?首先将数据读入python,然后将其写入文件似乎非常麻烦且占用大量内存。
  • 老实说,我对 root 不是很有经验,但根据我的理解,在我的原始文件中,我有一棵树,其中包含我的 400 万个事件。每个事件的每个分支都有一个值,所以当我说“让我输入 555!”时,我得到 8 个值(每个分支 1 个)。如果我只是按照我的方式复制分支,我会丢失这个结构还是目录中所有数组的索引都会替换条目号?那么,从索引 555 的所有数组中获取值与之前返回条目 555 相同吗?

欢迎任何帮助。谢谢!

0 投票
2 回答
60 浏览

amazon-s3 - 如何使用uproot从s3读取文件?

有没有办法使用 s3 打开 ROOT 文件?

ROOT 支持使用TS3WebFile读取(但不写入)

0 投票
0 回答
241 浏览

uproot - 在 uproot 中写一个 TH2 直方图

根除文档中提供的用于将 TH1 直方图写入文件的示例root效果很好。TH2也可以做同样的事情吗?如果是,是否可以提供一个示例,并可能包含在文档中?

编辑:

我现在已经做了一个类似自述部分的课程,但这次是 TH2:

仍然没有成功。任何想法我做错了什么?

0 投票
1 回答
239 浏览

uproot - 将 TLorentzVector 信息保存在 DataFrame 中以供将来分析

我想知道将 TLorentzVector 信息从 .root 文件转换为 Pandas DataFrames 的推荐协议。到目前为止,我的策略是为我关心的每个粒子保存 pT、eta 和 phi 信息。然后我编写自己的函数(基于 TLorentzVector 定义)来计算我偶尔可能需要的任何其他量,例如 DeltaR、mT 等。

然后我想知道我是否可以只将 TLorentzVector 保存到我的 DataFrame 并使用 uproot 使用类似这样的东西即时获取 pT、eta、phi 等数量(当我在 DataFrame 上运行时有效我刚刚从 .root 文件转换):

不过,我很快意识到,仅 Pandas 并不了解 TLorentzVector 是什么,所以当我稍后使用pd.read_csv.

那么,我的问题是,其他人如何建议我将 TLorentzVector 信息保存在稍后将在 pandas 中打开的 DataFrame 中,而不是连根拔起?似乎我的选择是为每个粒子保存(pT,eta,phi)列,然后编写我自己的函数,或者保存 TLorentzVector 组件(E,px,py,pz)并用于uproot_methods将这些组件转换回每次我重新加载 DataFrame 时都会出现一个 TLorentzVector。或者,希望还有另一个我还没有遇到过的更简单的解决方案!

非常感谢您的任何建议。