Skip to content

Commit

Permalink
Merge pull request cms-sw#124 from arizzi/regression
Browse files Browse the repository at this point in the history
Regression
  • Loading branch information
arizzi committed Jul 21, 2015
2 parents 1046001 + 18341e0 commit 2381d1e
Show file tree
Hide file tree
Showing 11 changed files with 13,472 additions and 2 deletions.
85 changes: 85 additions & 0 deletions VHbbAnalysis/Heppy/python/JetRegression.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
from VHbbAnalysis.Heppy.vhbbobj import ptRel
from PhysicsTools.HeppyCore.utils.deltar import deltaR,deltaPhi

from math import *
import ROOT
import array
class JetRegression :
def __init__(self,weightfile,name) :
# weights = { "../weights/Zll_weights_phys14.xml" , "../weights/Wln_weights_phys14.xml", "../weights/Znn_weights_phys14.xml"}
# reader_name = {"jet0Regression_zll", "jet0Regression_wln","jet0Regression_znn"}
# for i in range(0,3):
reader = ROOT.TMVA.Reader()
self.Jet_pt =array.array('f',[0])
self.Jet_rawPt = array.array('f',[0])
self.rho = array.array('f',[0])
self.Jet_eta = array.array('f',[0])
self.Jet_mt = array.array('f',[0])
self.Jet_leadTrackPt = array.array('f',[0])
self.Jet_leptonPtRel = array.array('f',[0])
self.Jet_leptonPt = array.array('f',[0])
self.Jet_leptonDeltaR = array.array('f',[0])
self.Jet_chEmEF = array.array('f',[0])
self.Jet_chHEF = array.array('f',[0])
self.Jet_neHEF = array.array('f',[0])
self.Jet_neEmEF = array.array('f',[0])
self.Jet_chMult = array.array('f',[0])
self.Jet_vtxPt = array.array('f',[0])
self.Jet_vtxMass = array.array('f',[0])
self.Jet_vtx3dL = array.array('f',[0])
self.Jet_vtxNtrk = array.array('f',[0])
self.Jet_vtx3deL = array.array('f',[0])
reader.AddVariable("Jet_pt",self.Jet_pt)
reader.AddVariable("Jet_rawPt",self.Jet_rawPt)
reader.AddVariable("rho",self.rho)
reader.AddVariable("Jet_eta",self.Jet_eta)
reader.AddVariable("Jet_mt",self.Jet_mt)
reader.AddVariable("Jet_leadTrackPt",self.Jet_leadTrackPt)
reader.AddVariable("Jet_leptonPtRel",self.Jet_leptonPtRel)
reader.AddVariable("Jet_leptonPt",self.Jet_leptonPt)
reader.AddVariable("Jet_leptonDeltaR",self.Jet_leptonDeltaR)
reader.AddVariable("Jet_chEmEF",self.Jet_chEmEF)
reader.AddVariable("Jet_chHEF",self.Jet_chHEF)
reader.AddVariable("Jet_neHEF",self.Jet_neHEF)
reader.AddVariable("Jet_neEmEF",self.Jet_neEmEF)
reader.AddVariable("Jet_chMult",self.Jet_chMult)
reader.AddVariable("Jet_vtxPt",self.Jet_vtxPt)
reader.AddVariable("Jet_vtxMass",self.Jet_vtxMass)
reader.AddVariable("Jet_vtx3dL",self.Jet_vtx3dL)
reader.AddVariable("Jet_vtxNtrk",self.Jet_vtxNtrk)
reader.AddVariable("Jet_vtx3deL",self.Jet_vtx3deL)
reader.BookMVA(name,weightfile)
self.reader=reader
self.name=name

def evaluateRegression(self, event):
#self.readCollections( event.input )
self.rho[0] = event.rho
for j in event.jetsForHiggs :
self.Jet_pt[0] = j.pt()
self.Jet_eta[0] = j.eta()
self.Jet_rawPt[0] = j.pt()*j.rawFactor()
self.Jet_mt[0] = j.mt()
self.Jet_leadTrackPt[0] = j.leadTrackPt()
if len(j.leptons) > 0 :
self.Jet_leptonPtRel[0] = ptRel(j.leptons[0].p4(),j.p4())
self.Jet_leptonPt[0] = j.leptons[0].pt()
self.Jet_leptonDeltaR[0] = deltaR(j.leptons[0].p4().eta(),j.leptons[0].p4().phi(),j.p4().eta(),j.p4().phi())
else:
self.Jet_leptonPtRel[0] = -99
self.Jet_leptonPt[0] = -99
self.Jet_leptonDeltaR[0] =-99
self.Jet_chEmEF[0] = j.chargedEmEnergyFraction()
self.Jet_chHEF[0] = j.chargedHadronEnergyFraction()
self.Jet_neHEF[0] = j.neutralHadronEnergyFraction()
self.Jet_neEmEF[0] = j.neutralEmEnergyFraction()
self.Jet_chMult[0] = j.chargedMultiplicity()
self.Jet_vtxPt[0] = sqrt(j.userFloat("vtxPx")**2 + j.userFloat("vtxPy")**2)
self.Jet_vtxMass[0] = j.userFloat("vtxMass")
self.Jet_vtx3dL[0] = j.userFloat("vtx3dL")
self.Jet_vtxNtrk[0] = j.userFloat("vtxNtrk")
self.Jet_vtx3deL[0] = j.userFloat("vtx3deL")
j.pt_reg = self.reader.EvaluateRegression(self.name)[0]



27 changes: 27 additions & 0 deletions VHbbAnalysis/Heppy/python/VHbbAnalyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from PhysicsTools.HeppyCore.utils.deltar import deltaR,deltaPhi
from copy import deepcopy
from math import *
from JetRegression import JetRegression
import itertools
import ROOT
def Boost(self,boost):
Expand Down Expand Up @@ -49,6 +50,13 @@ def beginLoop(self,setup):
self.inputCounter = ROOT.TH1F("Count","Count",1,0,2)
self.inputCounterPosWeight = ROOT.TH1F("CountPosWeight","Count genWeight>0",1,0,2)
self.inputCounterNegWeight = ROOT.TH1F("CountNegWeight","Count genWeight<0",1,0,2)
self.regressions={}
for re in self.cfg_ana.regressions :
print "Initialize regression ",re
regression = JetRegression(re["weight"],re["name"])
for i in re["vtypes"] :
self.regressions[i] = regression


def doVBF(self,event) :
event.jetsForVBF = [x for x in event.cleanJetsAll if self.cfg_ana.higgsJetsPreSelection(x) ]
Expand Down Expand Up @@ -198,6 +206,19 @@ def doHiggsAddJetsdR08(self,event) :

event.HaddJetsdR08 = sum(map(lambda x:x.p4(), event.hJetsaddJetsdR08), ROOT.reco.Particle.LorentzVector(0.,0.,0.,0.))

def doVHRegression(self, event):
self.regressions[event.Vtype].evaluateRegression(event)
hJetCSV_reg0 =ROOT.reco.Particle.LorentzVector( event.hJetsCSV[0].p4())
hJetCSV_reg1 =ROOT.reco.Particle.LorentzVector( event.hJetsCSV[1].p4())
hJetCSV_reg0*=event.hJetsCSV[0].pt_reg/event.hJetsCSV[0].pt()
hJetCSV_reg1*=event.hJetsCSV[0].pt_reg/event.hJetsCSV[1].pt()
event.HCSV_reg = hJetCSV_reg0+hJetCSV_reg1

hJet_reg0=ROOT.reco.Particle.LorentzVector(event.hJets[0].p4())
hJet_reg1=ROOT.reco.Particle.LorentzVector(event.hJets[1].p4())
hJet_reg0*=event.hJets[0].pt_reg/event.hJets[0].pt()
hJet_reg1*=event.hJets[0].pt_reg/event.hJets[0].pt()
event.H_reg = hJet_reg0+hJet_reg1



Expand Down Expand Up @@ -334,11 +355,15 @@ def initOutputs (self,event) :
event.H = ROOT.reco.Particle.LorentzVector(0.,0.,0.,0.)
event.HCSV = ROOT.reco.Particle.LorentzVector(0.,0.,0.,0.)
event.HaddJetsdR08 = ROOT.reco.Particle.LorentzVector(0.,0.,0.,0.)
event.H_reg = ROOT.reco.Particle.LorentzVector(0.,0.,0.,0.)
event.HCSV_reg = ROOT.reco.Particle.LorentzVector(0.,0.,0.,0.)
event.V = ROOT.reco.Particle.LorentzVector(0.,0.,0.,0.)
event.minDr3=-1
event.V.goodMt=0
event.hjidxDiJetPtByCSV = []
event.softActivityJets=[]


def process(self, event):
#print "Event number",event.iEv
self.readCollections( event.input )
Expand Down Expand Up @@ -372,6 +397,8 @@ def process(self, event):
self.doHiggsHighPt(event)
self.searchISRforVH(event)
self.doHiggsAddJetsdR08(event)
self.doVHRegression(event)

self.fillTauIndices(event)
if getattr(self.cfg_ana,"doVBF", True) :
self.doVBF(event)
Expand Down
1 change: 1 addition & 0 deletions VHbbAnalysis/Heppy/python/vhbbobj.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@
NTupleVariable("mult", lambda x : getattr(x,'mult', 0) , int, mcOnly=False,help="QG input variable: total multiplicity"),
NTupleVariable("numberOfDaughters", lambda x : x.numberOfDaughters(), int, mcOnly=False,help="number of daughters"),
NTupleVariable("btagIdx", lambda x : x.btagIdx, int, mcOnly=False,help="ranking in btag "),
NTupleVariable("pt_reg",lambda x : getattr(x,"pt_reg",-99), help="Regression"),
])


Expand Down
Loading

0 comments on commit 2381d1e

Please sign in to comment.