Когда я сравниваю ваш код с в этом примере , вы используете ROOT.vector
вместо array
. Когда я делаю это изменение, ветвь заполняется как ожидалось
#!/bin/python
import ROOT
from array import array
# doesn't work
def test1():
t_out = ROOT.TTree("ana", "ana")
rec_mass_gam1 = ROOT.vector('double')()
t_out.Branch("rec_mass_gam1", rec_mass_gam1, "rec_mass_gam1/D")
rec_mass_gam1 = 1337.
t_out.Fill()
t_out.Draw("rec_mass_gam1")
# works
def test2():
t_out = ROOT.TTree("ana", "ana")
rec_mass_gam1 = array('f', [0.])
t_out.Branch("rec_mass_gam1", rec_mass_gam1, "rec_mass_gam1/F")
rec_mass_gam1[0] = 1337.
t_out.Fill()
t_out.Draw("rec_mass_gam1")
Когда я запускаю test1, я вижу, что дерево и ветвь заполнены, но не тем значением, которое я хотел. Во втором примере желаемое значение заполняется.
Теперь, присмотревшись к тому, что происходит, в любом случае в вашем скрипте есть ошибка:
python не обрабатывает rec_mass_gam1 = p4_shw_gam1.M()
как "задает значение векторной переменной rec_mass_gam1
равным числу, которое выпадает из метода M()
. Он скорее создает новую переменную с плавающей точкой с именем rec_mass_gam1
и исходная векторная переменная (которая используется ветвью) остается неизменной.
Я должен признать, что не знаю, есть ли способ заполнить ветку также vector
.