Uproot:将分支添加到根文件中的现有TTree

时间:2020-09-23 16:28:00

标签: uproot

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

1 个答案:

答案 0 :(得分:1)

否,这是不可能的。

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

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