1

我有一个在一个分支元素上包含 TGeoTracks 的文件。TGeoTracks 有两个我感兴趣的私人成员,一些点和一个 4*nPoints 的数组(https://root.cern.ch/doc/master/TGeoTrack_8h_source.html#l00040)。

private :
   Int_t          fPointsSize; // capacity of points array
   Int_t          fNpoints;    // number of stored points
   Double_t      *fPoints;     //[fNpoints] array of points (x,y,z,t) belonging to this track

这是 TBrowser 中的 ROOT 文件:

在此处输入图像描述

请注意,TBrowser 中的解释有点误导,因为每个事件的所有四个元素都存储在同一个直方图中。

现在,我正在尝试使用 uproot 读取文件。此分支元素的默认解释是错误的:

mcFileThin1_5 = uproot.open("/media/CacheDrive2TB/Arbeit/PandaRoot/macro/detectors/lmd/testFullChain-thinKapton/mom-1_5/Lumi_MC_0.root")
startXarray = mcFileThin1_5["pndsim/GeoTracks.fPoints"]
print(startXarray.interpretation)


AsObjects(AsArray(True, False, AsArray(False, True, dtype('>f8'), ()), ()))

所以我尝试了自定义解释:

mcFileThin1_5 = uproot.open("/media/CacheDrive2TB/Arbeit/PandaRoot/macro/detectors/lmd/testFullChain-thinKapton/mom-1_5/Lumi_MC_0.root")
startXarray = mcFileThin1_5["pndsim/GeoTracks.fPoints"]

dtype = np.dtype([("x", ">f8"),("y", ">f8"),("z", ">f8"),("t", ">f8")])
interpret = uproot.AsDtype(dtype)
arr = mcFileThin1_5["pndsim/GeoTracks.fPoints"].array(interpret)

但这失败了:

ValueError: basket 0 in tree/branch /pndsim;4:GeoTracks/GeoTracks.fPoints has the wrong number of bytes (22902) for interpretation AsDtype("[('x', '>f8'), ('y', '>f8'), ('z', '>f8'), ('t', '>f8')]")
in file /media/CacheDrive2TB/Arbeit/PandaRoot/macro/detectors/lmd/testFullChain-thinKapton/mom-1_5/Lumi_MC_0.root

如何将此分支元素的解释指定为每点四个双精度数?

4

0 回答 0