import ROOT

#reading file and getting tree
file  = ROOT.TFile("events.root","READ")
tree  = file.Get("tree")

#creating Lorentz vector objects
lep1 = ROOT.TLorentzVector()
lep2 = ROOT.TLorentzVector()
jet1 = ROOT.TLorentzVector()
jet2 = ROOT.TLorentzVector()
pho = ROOT.TLorentzVector()

#creating histogram
mZ = ROOT.TH1D("h1","m_{Z}",5,60,100)
mZ.Sumw2()

#reading tree and computing
for i in range(0,tree.GetEntries()):

    tree.GetEntry(i)
    
    pt_lep1  = getattr(tree,"pt_lep1")
    pt_lep2 = getattr(tree,"pt_lep2")
    eta_lep1  = getattr(tree,"eta_lep1")
    eta_lep2 = getattr(tree,"eta_lep2")
    e_lep1  = getattr(tree,"e_lep1")
    e_lep2 = getattr(tree,"e_lep2")
    phi_lep1  = getattr(tree,"phi_lep1")
    phi_lep2 = getattr(tree,"phi_lep2")

    lep1.SetPtEtaPhiE(pt_lep1, eta_lep1, phi_lep1, e_lep1)
    lep2.SetPtEtaPhiE(pt_lep2, eta_lep2, phi_lep2, e_lep2)
    
    dilepton = lep1 + lep2
    mZ.Fill(dilepton.M()) #filling histogram

outHistFile = ROOT.TFile.Open("output.root","RECREATE")
outHistFile.cd()
mZ.Write()


