-2

我正在使用 rootpy 绘制一些根直方图,并遇到了一些奇怪的问题。我得到一个根直方图,使用:

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

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

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

现在,当我对原始 Histo1 对象执行操作时(在我的情况下,我将每个 bin 重新缩放一个常数因子)然后打印所有 3 个直方图的值 Histo1 和 HistoMin 中的值已经改变,但 HistoMax 没有!我对此感到非常困惑,因此我们将不胜感激!干杯,杰克

Ps 对于非 ROOT/rootpy 用户,他们通常对 python/OO 了解很多,这里是文档的链接。对于“克隆()”: http ://root.cern.ch/root/html/TNamed.html#TNamed:Clone

4

1 回答 1

0

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

是否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]
于 2013-11-07T19:48:52.963 回答