PyROOT/rootpy 中的直方图"克隆"方法



我正在使用rootpy绘制一些ROOT直方图,遇到了一些奇怪的问题。我使用以下方法获得根直方图:

    Histo1 = FilePure.Get(HistoName + str("incl") + str(0))

其中 Histoname 是我需要的东西的名称。 然后我想从这个与(错误值)相关的直方图中制作另外两个直方图,所以我像这样"克隆"Histo1 两次:

    HistoMin = Histo1.Clone();      HistoMax = Histo1.Clone();

现在,当我对原始 Histo1 对象执行操作时(在我的情况下,我按常数因子重新缩放每个箱),然后打印所有 3 个直方图的值,Histo1 和 HistoMin 中的值已更改,但 HistoMax 没有!对此我很困惑,所以任何帮助将不胜感激!干杯千斤顶

P.s. 对于非 ROOT/rootpy 用户,他们仍然对 python/OO 了解很多,这里有一个指向 'Clone()' 文档的链接:http://root.cern.ch/root/html/TNamed.html#TNamed:Clone

我认为您的代码中的其他地方可能存在您没有显示的错误。

HistoMin是否以某种方式引用回代码中其他地方的Histo1

我看到了正确的行为(仅更改了原始直方图):

>>> from rootpy.plotting import Hist
>>> a = Hist(10, -3, 3)
>>> a.FillRandom('gaus')
>>> b = a.Clone()
>>> c = a.Clone()
>>> list(a.y())
[39.0, 136.0, 394.0, 796.0, 1131.0, 1106.0, 817.0, 397.0, 144.0, 40.0]
>>> list(b.y())
[39.0, 136.0, 394.0, 796.0, 1131.0, 1106.0, 817.0, 397.0, 144.0, 40.0]
>>> list(c.y())
[39.0, 136.0, 394.0, 796.0, 1131.0, 1106.0, 817.0, 397.0, 144.0, 40.0]
>>> a *= 3
>>> list(a.y())
[117.0, 408.0, 1182.0, 2388.0, 3393.0, 3318.0, 2451.0, 1191.0, 432.0, 120.0]
>>> list(b.y())
[39.0, 136.0, 394.0, 796.0, 1131.0, 1106.0, 817.0, 397.0, 144.0, 40.0]
>>> list(c.y())
[39.0, 136.0, 394.0, 796.0, 1131.0, 1106.0, 817.0, 397.0, 144.0, 40.0]

最新更新