首页 > 解决方案 > 我可以看一个切割数据以准备在根中进行直方图绘制的简短示例吗?

问题描述

我正在使用 Python 3.6.5(或更高版本)并且我已经成功安装了“numpy”、“uproot”和“awkward”。我有一个以前制作的带有锯齿形 NTuple 的 *.root 文件,其中包含相当多的分支。这是粒子物理数据,因此可以将“行”视为单独的碰撞或“事件”,而列具有数据结构。(有些列可能有第三维或更多……我会稍微解释一下。)

在这种情况下,我的事件中有很多“喷气机”,每个“喷气机”都有很多关于它的信息。

jet_E、jet_pT、jet_eta、jet_phi、Numb(b 标签的数量)、NLayer0 等。

每个“事件”可以有任意数量的喷气机,但在这种情况下它不可能有零喷气机。这些喷气式飞机中的每一个都将存储此信息,但来自一个“事件”的所有信息必须与任何其他“事件”保持不相关。(如果您已经了解粒子物理学,这部分可能已经了解。)

我一直在阅读连根拔起的文档和示例,但我无法很容易地看到,仅使用这样的 pythonic 代码,将 jet_pT 直方图绘制成直方图,但仅适用于在某些其他 jet 变量被切断的事件中的喷气机。埃塔,例如。

如何仅从 *.root 文件中提取有关 jet_eta>-1.0 和 jet_eta<1.0 的喷气机的所有 jet_pT 的信息?假设无论如何我只想查看前 3 架喷气机而忽略其余的,我将如何放置所描述的切割并且仅在任何情况下通过该切割的前 3 架喷气机直方图?

uproot 文档并没有真正说明这一点。谢谢!

标签: uprootawkward-array

解决方案


这实际上是一个尴尬的数组问题,所以我将其标记为这样。这也使编写答案变得更容易,因为我可以创建简单的人工案例,而无需将它们放在 ROOT 文件中并用 uproot 将它们读回。

以下是一些人工jetptjeteta锯齿状的数组:

>>> import awkward
>>> jetpt = awkward.fromiter([[0.0, 1.1, 2.2], [3.3], [4.4, 5.5], [6.6, 7.7, 8.8, 9.9]])
>>> jeteta = awkward.fromiter([[0.1, -1.2, 0.8], [1.2], [-0.8, 0.8], [0.2, -0.3, 0.9, 0.0]])
>>> jetpt, jeteta
(<JaggedArray [[0.0 1.1 2.2] [3.3] [4.4 5.5] [6.6 7.7 8.8 9.9]] at 0x7c2c9e9950b8>,
 <JaggedArray [[0.1 -1.2 0.8] [1.2] [-0.8 0.8] [0.2 -0.3 0.9 0.0]] at 0x7c2c9dfb9320>)

这两个锯齿状数组的关键是每个内部数组具有相同数量的内部数组元素:

>>> jetpt.counts, jeteta.counts
(array([3, 1, 2, 4]),
 array([3, 1, 2, 4]))

当我们对数组执行数学运算(例如不等式比较)时,这仍然是正确的。(请注意,我们必须为和/或/不使用按位运算符,因为这些是 Numpy 唯一可以重载的运算符。由于按位运算的操作顺序,您还需要括号。)

>>> (-1.0 < jeteta) & (jeteta < 1.0)
<JaggedArray [[True False True] [False] [True True] [True True True True]] at 0x7c2c9dfb9b38>
>>> ((-1.0 < jeteta) & (jeteta < 1.0)).counts
array([3, 1, 2, 4])

由于这些布尔数组具有与 相同的计数jetpt,因此您可以将它们用作jetpt任何其他 jet 变量的索引。您不能将它们用作muonpt等的索引,因为通常每个事件的 μ 子数量与每个事件的喷气机数量不同。(本教程的“03-columnar-data-analysis”笔记本中有更多关于此的内容。)

>>> jetpt[(-1.0 < jeteta) & (jeteta < 1.0)]
<JaggedArray [[0.0 2.2] [] [4.4 5.5] [6.6 7.7 8.8 9.9]] at 0x7c2ca88f8550>

你的第二个问题是关于最多截断三架喷气机。这是一个简单的切片,但适用于第二维。我将把它应用到上面的例子中——它需要是一个单独的方括号,如果你认为这样更容易阅读,你通常会将上面的内容分配给一个变量。

>>> jetpt[(-1.0 < jeteta) & (jeteta < 1.0)][:, :3]
<JaggedArray [[0.0 2.2] [] [4.4 5.5] [6.6 7.7 8.8]] at 0x7c2c9dfdb4a8>

请参阅笨拙的 README了解更多信息!


推荐阅读