Метод гистограммы "Клон" в PyROOT/rootpy
Я делаю некоторые графики ROOT-гистограмм, используя rootpy, и столкнулся с какой-то странной проблемой. Я получаю гистограмму ROOT, используя:
Histo1 = FilePure.Get(HistoName + str("incl") + str(0))
Где Histoname - это имя того, что мне нужно. Затем я хочу сделать две другие гистограммы из этой, относящиеся к (значениям ошибок), поэтому я "клонирую" Histo1 дважды так:
HistoMin = Histo1.Clone(); HistoMax = Histo1.Clone();
Теперь, когда я выполняю операцию с исходным объектом Histo1 (в моем случае я масштабирую каждый бин постоянным множителем), а затем печатаю значения всех 3 гистограмм, значения в Histo1 И HistoMin изменились, а HistoMax - нет! Я очень смущен этим, поэтому любая помощь будет оценена! Ура, Джек
Ps для не ROOT/rootpy пользователей, которые, тем не менее, много знают о python/OO в целом, здесь ссылка на документ. для 'Clone ()': http://root.cern.ch/root/html/TNamed.html
1 ответ
Я думаю, что где-то в вашем коде может быть ошибка, которую вы не показываете.
Является 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]