1

我正在尝试使用 uproot 将分支添加到 .root 文件中的现有 TTree 中。连根拔起可以做到这一点吗?

4

1 回答 1

1

不,这是不可能的。

第一个困难是打开一个任意的 ROOT 文件并以稳健的方式向其中添加任何内容(即结果可以由 ROOT 读回,并且可以由 ROOT 添加更多内容,而不会出现段错误)。如果你想要长篇大论,它在scikit-hep/uproot#381,但简短的故事是,如果 Uproot 自己制作文件,Uproot 控制初始条件并可以将文件置于已知的良好状态。我们(Uproot 的开发者)可以在不了解 100% 状态空间的情况下了解一些好的状态。但是,如果我们想从 ROOT 接受文件,修改它们,然后将它们返回给 ROOT,那么我们必须了解其文件系统内部文件碎片整理算法可以进入的所有可能状态,然后我们才能相信我们的修改那些国家留在善国的空间内。理解状态空间需要大量研究,因为 (1) 它是一个可以回收可用空间和所有内容的完整文件系统,以及 (2) 格式的这方面没有规范。它由 C++ 代码的功能定义。

第二个困难是在现有的 TTree 中添加一个 Tbranch。这没有实现,但更易于管理:我们只需使用额外的 TBranch 制作 TTree 元数据的新副本,并将新元数据链接到旧的 TBaskets(数据)。主要困难是将任何对象添加到预先存在的 ROOT 文件中。

于 2020-09-23T17:19:46.543 回答