我正在尝试使用uproot向.root文件中的现有TTree添加分支。有没有可能用uproot实现这一点?
发布于 2020-09-24 01:19:47
不,这不可能。
第一个困难是打开一个任意的根文件,并以一种健壮的方式向其中添加任何内容(即,结果可以由ROOT读回,更多的内容可以由ROOT添加,而不会出现段错误)。如果您想要详细说明,它是在scikit-hep/uproot#381中,但简短的说明是,如果Uproot使文件本身,则Uproot控制初始条件,并可以将文件置于已知的良好状态。我们(Uproot的开发者)可以知道一些好的状态,而不需要理解100%的状态空间。但是,如果我们想要接受来自ROOT的文件,修改它们,并将它们返回给ROOT,那么我们必须了解它的文件系统内文件碎片整理算法可能进入的所有可能状态,然后我们才能相信我们对这些状态的修改会保持在良好状态的空间内。理解状态空间需要大量的研究,因为(1)它是一个完整的文件系统,可以回收可用空间和所有东西,(2)没有关于格式这一方面的规范。它是由C++代码执行的操作定义的。
第二个困难是向现有TTree添加TBranch。这并未实现,但更易于管理:我们只需使用额外的TBranch创建TTree元数据的新副本,并将新的元数据链接到旧的TBaskets (数据)。主要的困难是将任何对象添加到预先存在的根文件中。
https://stackoverflow.com/questions/64032361
复制相似问题