Skip to content

Commit

Permalink
Merge pull request cms-sw#82 from mariadalfonso/maria_7Z_v2
Browse files Browse the repository at this point in the history
maria_7Z_v2
  • Loading branch information
gpetruc committed Jul 11, 2014
2 parents b229996 + 144720f commit 664e38b
Show file tree
Hide file tree
Showing 8 changed files with 142 additions and 73 deletions.
47 changes: 47 additions & 0 deletions CMGTools/RootTools/python/physicsobjects/IsoTrack.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
from CMGTools.RootTools.physicsobjects.Lepton import Lepton
import math

class IsoTrack( Lepton ):

def __init__(self, isoTrack):
self.isoTrack = isoTrack
super(IsoTrack, self).__init__(isoTrack)

def relIso(self, dummy1, dummy2):
'''Just making the tau behave as a lepton.'''
return -1

def relIso(self, dummy1, dummy2):
'''Just making the tau behave as a lepton.'''
return -1

def mvaId(self):
'''For a transparent treatment of electrons, muons and taus. Returns -99'''
return -99

def dxy(self, vertex=None):
if vertex is None:
vertex = self.associatedVertex
vtx = self.vertex(); # FIXME
p4 = self.p4();
return ( - (vtx.x()-vertex.position().x()) * p4.y()
+ (vtx.y()-vertex.position().y()) * p4.x() ) / p4.pt();

def dz(self, vertex=None):
if vertex is None:
vertex = self.associatedVertex
vtx = self.vertex(); # FIXME
p4 = self.p4();
return (vtx.z()-vertex.position().z()) - ((vtx.x()-vertex.position().x())*p4.x()+(vtx.y()-vertex.position().y())*p4.y())/ p4.pt() * p4.z()/ p4.pt();

def __str__(self):
lep = super(IsoTrack, self).__str__()
return lep
#spec = '\t\tTau: decay = {decMode:<15}, eOverP = {eOverP:4.2f}, isoMVALoose = {isoMVALoose}'.format(
# decMode = tauDecayModes.intToName( self.decayMode() ),
# eOverP = self.calcEOverP(),
# isoMVALoose = self.tauID('byLooseIsoMVA')
# )
#return '\n'.join([lep, spec])


2 changes: 1 addition & 1 deletion CMGTools/TTHAnalysis/cfg/run_susyCore_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
test = 1
if test==1:
# test a single component, using a single thread.
comp = TTJets
comp = TTJets_PU20bx25
comp.files = comp.files[:1]
selectedComponents = [comp]
comp.splitFactor = 1
Expand Down
17 changes: 12 additions & 5 deletions CMGTools/TTHAnalysis/cfg/run_susyFullHad_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@
ttHJetAna.doPuId = False
ttHJetAna.jetEtaCentral = 2.5

# TAU
ttHTauAna.etaMax = 2.3
ttHTauAna.dxyMax = 99999.
ttHTauAna.dzMax = 99999.
ttHTauAna.vetoLeptons = False
ttHTauAna.vetoLeptonsPOG = True

##------------------------------------------
## ISOLATED TRACK
##------------------------------------------
Expand All @@ -25,17 +32,17 @@
# candidatesTypes='std::vector<cmg::Candidate>',
candidates='packedPFCandidates',
candidatesTypes='std::vector<pat::PackedCandidate>',
ptMin = 10,
ptMinEMU = 5,
ptMin = 5, # for pion
ptMinEMU = 5, # for EMU
dzMax = 0.1,
#####
isoDR = 0.3,
ptPartMin = 0,
dzPartMax = 0.1,
#####
MaxIsoSum = 0.1,
MaxIsoSumEMU = 0.2,
doSecondVeto = True
MaxIsoSum = 0.1, ### unused
MaxIsoSumEMU = 0.2, ### unused
doSecondVeto = False
)


Expand Down
14 changes: 11 additions & 3 deletions CMGTools/TTHAnalysis/python/analyzers/ntupleTypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,12 +102,12 @@

tauType = NTupleObjectType("tau", baseObjectTypes = [ particleType ], variables = [
NTupleVariable("charge", lambda x : x.charge(), int),
#NTupleVariable("dxy", lambda x : x.dxy(), help="d_{xy} of lead track with respect to PV, in cm (with sign)"),
#NTupleVariable("dz", lambda x : x.dz() , help="d_{z} of lead track with respect to PV, in cm (with sign)"),
NTupleVariable("dxy", lambda x : x.dxy(), help="d_{xy} of lead track with respect to PV, in cm (with sign)"),
NTupleVariable("dz", lambda x : x.dz() , help="d_{z} of lead track with respect to PV, in cm (with sign)"),
#NTupleVariable("idMVA2", lambda x : x.idMVA2, int, help="1,2,3 if the tau passes the loose, medium, tight WP of the By<X>IsolationMVA2 discriminator"),
NTupleVariable("idCI3hit", lambda x : x.idCI3hit, int, help="1,2,3 if the tau passes the loose, medium, tight WP of the By<X>CombinedIsolationDBSumPtCorr3Hits discriminator"),
NTupleVariable("isoCI3hit", lambda x : x.tauID("byCombinedIsolationDeltaBetaCorrRaw3Hits"), help="byCombinedIsolationDeltaBetaCorrRaw3Hits raw output discriminator"),
#NTupleVariable("isoMVA2", lambda x : x.tauID("byIsolationMVA2raw"), help="ByIsolationMVA2 raw output discriminator"),
NTupleVariable("isoRaw", lambda x : x.tauID("byCombinedIsolationDeltaBetaCorrRaw3Hits"), help="byCombinedIsolationDeltaBetaCorrRaw3Hits raw output discriminator"),
])
tauTypeTTH = NTupleObjectType("tauTTH", baseObjectTypes = [ tauType ], variables = [
NTupleVariable("mcMatchId", lambda x : x.mcMatchId, int, mcOnly=True, help="Match to source from hard scatter (25 for H, 6 for t, 23/24 for W/Z)"),
Expand All @@ -116,6 +116,14 @@
NTupleVariable("mcMatchId", lambda x : x.mcMatchId, int, mcOnly=True, help="Match to source from hard scatter (25 for H, 6 for t, 23/24 for W/Z)"),
])

isoTrackType = NTupleObjectType("isoTrack", baseObjectTypes = [ particleType ], variables = [
NTupleVariable("charge", lambda x : x.charge(), int),
NTupleVariable("dz", lambda x : x.dz() , help="d_{z} of lead track with respect to PV, in cm (with sign)"),
NTupleVariable("absIso", lambda x : x.absIso, float, mcOnly=False, help="abs charged iso with condition for isolation such that Min(0.2*pt, 8 GeV)"),
NTupleVariable("mcMatchId", lambda x : x.mcMatchId, int, mcOnly=True, help="Match to source from hard scatter (25 for H, 6 for t, 23/24 for W/Z)"),
])


photonTypeSusy = NTupleObjectType("photon", baseObjectTypes = [ particleType ], variables = [
NTupleVariable("mcMatchId", lambda x : x.mcMatchId, int, mcOnly=True, help="Match to source from hard scatter (25 for H, 6 for t, 23/24 for W/Z)"),
])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@
matchAllInclusiveLeptons = False,
)

# Tau Analyzer (generic)
# Photon Analyzer (generic)
ttHPhoAna = cfg.Analyzer(
'ttHPhotonAnalyzerSusy',
photons='slimmedPhotons',
Expand All @@ -138,8 +138,12 @@
ttHTauAna = cfg.Analyzer(
'ttHTauAnalyzer',
ptMin = 20,
etaMax = 9999,
dxyMax = 0.5,
dzMax = 1.0,
vetoLeptons = True,
leptonVetoDR = 0.4,
vetoLeptonsPOG = False,
tauID = "byLooseCombinedIsolationDeltaBetaCorr3Hits",
tauLooseID = "decayModeFinding",
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,6 @@ def __init__(self, cfg_ana, cfg_comp, looperName):
# NTupleVariable("mtw", lambda ev: ev.mtw, int, help="mt(l,met)"),
# NTupleVariable("mtwTau", lambda ev: ev.mtwTau, int, help="mt(tau,met)"),
# NTupleVariable("IsoTrack_mtw", lambda ev: ev.mtwIsoTrack, int, help="mt(isoTrack,met)"),
NTupleVariable("isoTrack_pt", lambda ev: ev.ptIsoTrack, int, help="pt(most isolated Track)"),
NTupleVariable("isoTrack_relIso", lambda ev: ev.isoIsoTrack, int, help="relIso (iso isolated Track)"),
NTupleVariable("isoTrack_dz", lambda ev: ev.dzIsoTrack, int, help="dz(iso isolated Track, PV)"),
NTupleVariable("isoTrack_pdgId", lambda ev: ev.typeIsoTrack, int, help="PFID (iso isolated Track)"),
##--------------------------------------------------
NTupleVariable("mt2", lambda ev: ev.mt2, float, help="mt2(l,met)"),
# NTupleVariable("mt2w", lambda ev: ev.mt2w, float, help="mt2w(l,b,met)"),
Expand All @@ -44,12 +40,12 @@ def __init__(self, cfg_ana, cfg_comp, looperName):
# put more here
"pseudoJet1" : NTupleObject("pseudoJet1", fourVectorType, help="pseudoJet1 for hemishphere"),
"pseudoJet2" : NTupleObject("pseudoJet2", fourVectorType, help="pseudoJet2 for hemishphere"),

})
self.collections.update({
# put more here
"cleanJetsAll" : NTupleCollection("jet", jetTypeSusy, 8, help="all jets after full selection and cleaning, sorted by pt"),
"allphotons" : NTupleCollection("gamma", photonTypeSusy, 5, help="all photons"),
"selectedIsoTrack" : NTupleCollection("isoTrack", isoTrackType, 3, help="isoTrack, sorted by pt"),
})

## Book the variables, but only if we're called explicitly and not through a base class
Expand Down
113 changes: 56 additions & 57 deletions CMGTools/TTHAnalysis/python/analyzers/ttHIsoTrackAnalyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from CMGTools.RootTools.fwlite.AutoHandle import AutoHandle
from CMGTools.RootTools.physicsobjects.Lepton import Lepton
from CMGTools.RootTools.physicsobjects.Tau import Tau
from CMGTools.RootTools.physicsobjects.IsoTrack import IsoTrack
from CMGTools.TTHAnalysis.analyzers.ttHLepMCMatchAnalyzer import matchObjectCollection3

from CMGTools.RootTools.utils.DeltaR import deltaR, deltaPhi, bestMatch
Expand All @@ -36,32 +37,21 @@ def beginLoop(self):
count.register('has >=1 selected Track')
count.register('has >=1 selected Iso Track')


#------------------
# MAKE LIST
#------------------
def makeIsoTrack(self, event):
event.selectedIsoTrack = []
event.preIsoTrack = []
event.typeIsoTrack=-99999
event.isoIsoTrack=-1
event.dzIsoTrack=-1
event.ptIsoTrack=-1

foundIsoTrack = False
minIsoSum=99999999
indexIsoSum=-1
index=-1;

def dz(self, vertex=None):
if vertex is None:
vertex = self.associatedVertex
selfp4 = self.p4();
return (self.vz()-vertex.position().z()) - ((self.vx()-vertex.position().x())*self.px()+(self.vy()-vertex.position().y())*self.py())/ self.pt() * self.pz()/ self.pt();

for track in self.handles['cmgCand'].product():

## get all
alltrack = map( IsoTrack, self.handles['cmgCand'].product() )

for track in alltrack:
track.associatedVertex = event.goodVertices[0]

foundIsoTrack = False

## ===> require Track Candidate above some pt and charged
if track.charge()==0 : continue
if ( (track.pdgId()!=11) and (track.pdgId()!=12) and (track.pt() < self.cfg_ana.ptMin) ): continue
Expand All @@ -73,51 +63,49 @@ def dz(self, vertex=None):
if ( (track.pdgId()!=11) and (track.pdgId()!=12) and (track.charge()*event.selectedLeptons[0].charge()) ): continue

## ===> require the Track Candidate with a minimum dz
if abs(dz(track))>self.cfg_ana.dzMax : continue
if abs(track.dz())>self.cfg_ana.dzMax : continue

## ===> compute the isolation and find the most isolated track
isoSum=0
for part in self.handles['cmgCand'].product():

allpart = map( IsoTrack, self.handles['cmgCand'].product() )
for part in allpart:
part.associatedVertex = event.goodVertices[0]
### ===> skip pfcands neutral
if part.charge()==0 : continue
### ===> skip pfcands outside the cone (this should be 0.3)
if deltaR(part.eta(), part.phi(), track.eta(), track.phi()) > self.cfg_ana.isoDR : continue
### ===> skip pfcands with a pt min (this should be 0)
if part.pt()<self.cfg_ana.ptPartMin : continue
### ===> skip pfcands with a dz (this should be 0.1)
if abs(dz(part))>self.cfg_ana.dzPartMax : continue
if abs(part.dz())>self.cfg_ana.dzPartMax : continue
isoSum += part.pt()

### ===> the sum should not contain the track candidate
isoSum -= track.pt()
isoSum = isoSum/track.pt()
### isoSum = isoSum/track.pt() ## <--- this is for relIso

track.absIso = isoSum

### store a temporary a track
### store a preIso track
event.preIsoTrack.append(track)
index+=1;

if (isoSum < minIsoSum ) :
minIsoSum = isoSum
indexIsoSum=index
# if (isoSum < minIsoSum ) :
if(track.absIso < min(0.2*track.pt(), 8.)):
foundIsoTrack = True

if(foundIsoTrack):
event.selectedIsoTrack.append(event.preIsoTrack[indexIsoSum])
event.typeIsoTrack=event.selectedIsoTrack[0].pdgId()
event.isoIsoTrack=minIsoSum
event.dzIsoTrack=abs(dz(event.selectedIsoTrack[0]))
event.ptIsoTrack=event.selectedIsoTrack[0].pt()
if(foundIsoTrack):
event.selectedIsoTrack.append(track)

event.selectedIsoTrack.sort(key = lambda l : l.pt(), reverse = True)

self.counters.counter('events').inc('all events')
if(len(event.preIsoTrack)): self.counters.counter('events').inc('has >=1 selected Track')
if foundIsoTrack: self.counters.counter('events').inc('has >=1 selected Iso Track')
if(len(event.selectedIsoTrack)): self.counters.counter('events').inc('has >=1 selected Iso Track')

def matchIsoTrack(self, event):
event.genTaus = [ x for x in event.genParticles if x.status() == 3 and abs(x.pdgId()) == 15 ]
# event.genMuons = [ x for x in event.genParticles if x.status() == 3 and abs(x.pdgId()) == 13 ]
# event.genElectrons = [ x for x in event.genParticles if x.status() == 3 and abs(x.pdgId()) == 11 ]
matchTau = matchObjectCollection3(event.selectedIsoTrack, event.genTaus, deltaRMax = 0.5)
# matchMuon = matchObjectCollection3(event.selectedIsoTrack, event.genMuons, deltaRMax = 0.5)
# matchEletron = matchObjectCollection3(event.selectedIsoTrack, event.genElectrons, deltaRMax = 0.5)
matchTau = matchObjectCollection3(event.selectedIsoTrack, event.genTaus + event.gentauleps + event.genleps, deltaRMax = 0.5)
for lep in event.selectedIsoTrack:
gen = matchTau[lep]
lep.mcMatchId = 1 if gen else 0
Expand All @@ -127,18 +115,23 @@ def printInfo(self, event):
print '----------------'

if len(event.selectedIsoTrack)>0:
print 'track candidate type: ',event.typeIsoTrack
print 'pt: ',event.ptIsoTrack
print 'dz: ',event.dzIsoTrack
print 'iso: ',event.isoIsoTrack
print 'lenght: ',len(event.selectedIsoTrack)
print 'track candidate pt: ',event.selectedIsoTrack[0].pt()
print 'track candidate eta: ',event.selectedIsoTrack[0].eta()
print 'track candidate phi: ',event.selectedIsoTrack[0].phi()
print 'track candidate mass: ',event.selectedIsoTrack[0].mass()
print 'pdgId candidate : ',event.selectedIsoTrack[0].pdgId()
print 'dz: ',event.selectedIsoTrack[0].dz()
print 'iso: ',event.selectedIsoTrack[0].absIso
print 'matchId: ',event.selectedIsoTrack[0].mcMatchId

for lepton in event.selectedLeptons:
print 'good lepton type: ',lepton.pdgId()
print 'pt: ',lepton.pt()
# for lepton in event.selectedLeptons:
# print 'good lepton type: ',lepton.pdgId()
# print 'pt: ',lepton.pt()

for tau in event.selectedTaus:
print 'good lepton type: ',tau.pdgId()
print 'pt: ',tau.pt()
# for tau in event.selectedTaus:
# print 'good lepton type: ',tau.pdgId()
# print 'pt: ',tau.pt()

print '----------------'

Expand All @@ -149,22 +142,28 @@ def process(self, iEvent, event):

if len(event.selectedIsoTrack)==0 : return True

## ===> do matching
## event.pdgIdIsoTrack.append(event.selectedIsoTrack[0].pdgId())
## event.isoIsoTrack.append(minIsoSum)
## event.dzIsoTrack.append(abs(dz(event.selectedIsoTrack[0])))

### ===> do matching

if not self.cfg_comp.isMC:
return True

self.matchIsoTrack(event)

## ===> do veto if needed
### self.printInfo(event)

### ===> do veto if needed

if (self.cfg_ana.doSecondVeto and (event.selectedIsoTrack[0].pdgId()!=11) and (event.selectedIsoTrack[0].pdgId()!=12) and event.isoIsoTrack < self.cfg_ana.MaxIsoSum ) :
# self.printInfo(event)
return False
# if (self.cfg_ana.doSecondVeto and (event.selectedIsoTrack[0].pdgId()!=11) and (event.selectedIsoTrack[0].pdgId()!=12) and event.isoIsoTrack < self.cfg_ana.MaxIsoSum ) :
### self.printInfo(event)
# return False

if ((self.cfg_ana.doSecondVeto and event.selectedIsoTrack[0].pdgId()==11 or event.selectedIsoTrack[0].pdgId()==12) and event.isoIsoTrack < self.cfg_ana.MaxIsoSumEMU ) :
# self.printInfo(event)
return False
# if ((self.cfg_ana.doSecondVeto and event.selectedIsoTrack[0].pdgId()==11 or event.selectedIsoTrack[0].pdgId()==12) and event.isoIsoTrack < self.cfg_ana.MaxIsoSumEMU ) :
## self.printInfo(event)
# return False


return True
10 changes: 9 additions & 1 deletion CMGTools/TTHAnalysis/python/analyzers/ttHTauAnalyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,16 @@ def makeTaus(self, event):
if deltaR(lep.eta(), lep.phi(), tau.eta(), tau.phi()) < self.cfg_ana.leptonVetoDR:
tau.lepVeto = True
if tau.lepVeto: continue
if self.cfg_ana.vetoLeptonsPOG:
if not tau.tauID("againstMuonTight"):
tau.lepVeto = True
if not tau.tauID("againstElectronLoose"):
tau.lepVeto = True
if tau.lepVeto: continue
if tau.pt() < self.cfg_ana.ptMin: continue
if abs(tau.dxy()) > 0.5 or abs(tau.dz()) > 1.0: continue
if abs(tau.eta()) > self.cfg_ana.etaMax: continue
### tau.dxy and tau.dz are zero
### if abs(tau.dxy()) > self.cfg_ana.dxyMax or abs(tau.dz()) > self.cfg_ana.dzMax: continue
foundTau = True
def id3(tau,X):
"""Create an integer equal to 1-2-3 for (loose,medium,tight)"""
Expand Down

0 comments on commit 664e38b

Please sign in to comment.