【问题标题】:Uproot: Add branch to existing TTree in root fileUproot:将分支添加到根文件中的现有 TTree
【发布时间】:2020-09-23 16:28:00
【问题描述】:

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

【问题讨论】:

    标签: uproot


    【解决方案1】:

    不,这是不可能的。

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

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

    【讨论】:

    • 感谢您的详细解答!我将改为在 root 中执行此操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 2023-01-13
    相关资源
    最近更新 更多