1

我需要读取包含存储在结构中的二维数组的根树,并希望为此使用 uproot。

例如:以下代码片段在结构中创建了一个包含 2D 数组和 2D 数组的树。Uproot 自己读取二维数组没有问题,但不知道如何在结构中解析它。

有没有办法告诉 uproot 如何解析这个结构?

Float_t x2[15][2]={{0}};
struct POINT{
  Float_t x[15][2]={{0}};
  Float_t y[15][2]={{0}};
};
POINT point;
TTree tree("T","ROOT tree with 2D array and 2D array in struct");
tree.Branch("point",&point,"x[15][2]:y[15][2]");
tree.Branch("x2",x2,"x2[15][2]/F");
4

1 回答 1

0

虽然我无法在没有文件的情况下对此进行测试,但以下内容应该允许您读取该数据结构:

import numpy as np
import uproot

dtype = np.dtype([("x", ">f4", (15, 2)), ("y", ">f4", (15, 2))])
interpretation = uproot.asdtype(dtype)
points_array = tree["point"].array(interpretation)

Uproot 无法识别这种结构是一个问题,尽管我可以想象为什么不识别:它是特例(叶列表)的特例(固定大小尺寸)。如果您可以将一个小的(< 1 MB)示例文件作为 Uproot GitHub 问题发布,我将研究自动识别此interpretation.

于 2020-06-22T17:52:52.193 回答