Example #1
0
    def process(self, iEvent, event):

        self.readCollections(iEvent)

        self.counters.counter('jets').inc('all events')

        event.selectedGenJets = filter(self.testJet, event.genJets)

        # Could have a better lepton rejection at gen level..
        event.cleanGenJets, dummy = cleanObjectCollection(
            event.selectedGenJets, masks=event.leptons, deltaRMin=0.5)

        def match(jet, objects, name):
            bm, dr2 = bestMatch(jet, objects)
            if bm:
                bm.dr = math.sqrt(dr2)
            setattr(jet, name, bm)

        for jet in event.cleanGenJets:
            if hasattr(event, 'recJets'):
                match(jet, event.recJets, 'rec')
                if jet.rec:
                    response = jet.rec.pt() / jet.pt()
##                 if response>0.98 and response<1.2:
##                     print '-'*50
##                     print jet.rec
##                     pfconstituents = jet.rec.getPFConstituents()
##                     for pfc in pfconstituents:
##                         print pfc.pt(), pfc.pdgId()
            match(jet, event.simJets, 'sim')
            match(jet, event.genParticles3, 'genPtc3')

        return True
Example #2
0
    def process (self, iEvent, event) :
        #read all the handles defined beforehand
        self.readCollections (iEvent)
        
        jetEtaCut = 4.5 
        
        # get the vertexes
        event.vertices = self.handles['vertices'].product ()
#        self.h_nvtx.Fill (len (event.vertices))
        
        # get the jets in the jets variable
        jets = self.handles['jets'].product ()
        # filter jets with some selections
        event.jets = [ jet for jet in jets if ( abs(jet.eta()) < jetEtaCut and jet.pt()>self.cfg_ana.ptCut and self.isPFLoose(jet) ) ]
        
        # get status 2 leptons
        if 'genParticlesPruned' in self.mchandles:
            event.genLeptons = [ lep for lep in self.mchandles['genParticlesPruned'].product() if lep.status() == 2 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ]  
        else:
            event.genLeptons = [ lep for lep in self.mchandles['genParticles'].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ]  
# @ Pasquale: why level 3 and not level 2?
#        event.selGenLeptons = [GenParticle (lep) for lep in event.genLeptons if (lep.pt ()>self.cfg_ana.ptCut and abs (lep.eta ()) < jetEtaCut)]
        
        # get genJets
        event.genJets = map (GenJet, self.mchandles['genJets'].product ())
        # filter genjets as for reco jets
        event.selGenJets = [GenJet (jet) for jet in event.genJets if (jet.pt ()>self.cfg_ana.genPtCut)]
        
        #FIXME why are there cases in which there's 4 or 6 leptons?
        if len (event.genLeptons) != 2 :
            return
        # in case I want to filter out taus
        # 11, 13, 15 : e, u, T
#        event.genOneLepton = [GenParticle (part) for part in event.genLeptons if abs (part.pdgId ()) == 15]
        # remove leptons from jets if closer than 0.2
        event.cleanJets = cleanObjectCollection (event.jets, event.genLeptons, 0.2)
        event.matchingCleanJets = matchObjectCollection2 (event.cleanJets, event.selGenJets, 0.25)
        # assign to each jet its gen match (easy life :))
        for jet in event.cleanJets :
            jet.gen = event.matchingCleanJets[ jet ]

        
        event.matchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen != None]
        for jet in event.matchedCleanJets:
            self.myntuple.Fill (jet.gen.pt (), jet.pt (), jet.gen.eta (), jet.eta (), jet.gen.phi (), jet.phi (), len (event.vertices))
Example #3
0
    def process(self, iEvent, event):

        self.readCollections(iEvent)
        self.counters.counter('jets').inc('all events')

        event.selectedGenJets = filter(self.testJet, event.genJets)

        event.cleanGenJets, dummy = cleanObjectCollection(
            event.selectedGenJets, masks=event.genLeptons3, deltaRMin=0.5)

        def match(jet, objects, name):
            bm, dr2 = bestMatch(jet, objects)
            if bm:
                bm.dr = math.sqrt(dr2)
            setattr(jet, name, bm)

        for jet in event.cleanGenJets:
            match(jet, event.genParticles3, 'genPtc3')

        return True
Example #4
0
    def process(self, iEvent, event):
        
        self.readCollections( iEvent )
        self.counters.counter('jets').inc('all events')

        event.selectedGenJets = filter(self.testJet, event.genJets)

        event.cleanGenJets, dummy = cleanObjectCollection( event.selectedGenJets,
                                                           masks = event.genLeptons3,
                                                           deltaRMin = 0.5 )


        def match(jet, objects, name):
            bm, dr2 = bestMatch(jet, objects)
            if bm:
                bm.dr = math.sqrt(dr2)
            setattr(jet, name, bm)
    
        for jet in event.cleanGenJets:
            match(jet, event.genParticles3, 'genPtc3')

        return True        
Example #5
0
    def process(self, iEvent, event):
        
        self.readCollections( iEvent )

        self.counters.counter('jets').inc('all events')

        event.selectedGenJets = filter(self.testJet, event.genJets)

        # Could have a better lepton rejection at gen level..
        event.cleanGenJets, dummy = cleanObjectCollection( event.selectedGenJets,
                                                           masks = event.leptons,
                                                           deltaRMin = 0.5 )
        


        def match(jet, objects, name):
            bm, dr2 = bestMatch(jet, objects)
            if bm:
                bm.dr = math.sqrt(dr2)
            setattr(jet, name, bm)
    
        for jet in event.cleanGenJets:
            if hasattr(event, 'recJets'):
                match(jet, event.recJets, 'rec')
                if jet.rec:
                    response = jet.rec.pt()/jet.pt()
##                 if response>0.98 and response<1.2:
##                     print '-'*50
##                     print jet.rec
##                     pfconstituents = jet.rec.getPFConstituents()
##                     for pfc in pfconstituents:
##                         print pfc.pt(), pfc.pdgId()
            match(jet, event.simJets, 'sim')
            match(jet, event.genParticles3, 'genPtc3')
    
        
        return True        
    def process(self, iEvent, event):
        # read all the handles defined beforehand
        self.readCollections(iEvent)

        jetEtaCut = 4.5

        # get the vertexes
        event.vertices = self.handles["vertices"].product()
        self.h_nvtx.Fill(len(event.vertices))
        event.vertexBin = int(len(event.vertices))

        # get the jets in the jets variable
        jets = self.handles["jets"].product()
        # filter jets with some selections
        event.jets = [
            jet
            for jet in jets
            if (abs(jet.eta()) < jetEtaCut and jet.pt() > self.cfg_ana.ptCut and self.isPFLoose(jet))
        ]
        self.jetHistos.fillEvent(event.jets)

        # get status 2 leptons
        if "genParticlesPruned" in self.mchandles:
            event.genLeptons = [
                lep
                for lep in self.mchandles["genParticlesPruned"].product()
                if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15)
            ]
        else:
            event.genLeptons = [
                lep
                for lep in self.mchandles["genParticles"].product()
                if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15)
            ]
        # @ Pasquale: why level 3 and not level 2?
        #        event.selGenLeptons = [GenParticle (lep) for lep in event.genLeptons if (lep.pt ()>self.cfg_ana.ptCut and abs (lep.eta ()) < jetEtaCut)]

        # get genJets
        event.genJets = map(GenJet, self.mchandles["genJets"].product())
        # filter genjets as for reco jets
        event.myGenJets = [GenJet(jet) for jet in event.genJets if (jet.pt() > self.cfg_ana.genPtCut)]
        event.selGenJets = cleanObjectCollection(event.myGenJets, event.genLeptons, 0.2)
        # event.selGenJets = event.genJets
        for jet in event.selGenJets:
            self.h_genjetspt.Fill(jet.pt())
            self.h_genjetspt2.Fill(jet.pt())
            if abs(jet.eta()) < 1.4:
                self.h_genjetspt_barrel.Fill(jet.pt())
            elif 1.6 < abs(jet.eta()) < 2.5:
                self.h_genjetspt_endtk.Fill(jet.pt())
            elif 2.6 < abs(jet.eta()) < 2.9:
                self.h_genjetspt_endNOtk.Fill(jet.pt())
            elif 3.1 < abs(jet.eta()):
                self.h_genjetspt_fwd.Fill(jet.pt())

        event.noNegJets = [jet for jet in event.jets if (jet.jecFactor(0) > 0)]

        # first stats plots
        # print 'genLeptons : ' + repr (len (event.genLeptons)) + ' | genJets : ' + repr (len (event.genJets)) + ' | recoJets : ' + repr (len (event.jets))
        self.jetHistos.fillStats(len(event.selGenJets), len(event.noNegJets))

        # FIXME why are there cases in which there's 4 or 6 leptons?
        if len(event.genLeptons) > 2:
            return
        # in case I want to filter out taus
        # 11, 13, 15 : e, u, T
        #        event.genOneLepton = [GenParticle (part) for part in event.genLeptons if abs (part.pdgId ()) == 15]
        # remove leptons from jets if closer than 0.2
        event.cleanJets = cleanObjectCollection(event.noNegJets, event.genLeptons, 0.2)
        self.cleanJetHistos.fillEvent(event.cleanJets)
        for jet in event.cleanJets:
            if abs(jet.eta()) < 1.4:
                self.cleanJetHistos_barrel.fillJet(jet)
            elif 1.6 < abs(jet.eta()) < 2.5:
                self.cleanJetHistos_endtk.fillJet(jet)
            elif 2.6 < abs(jet.eta()) < 2.9:
                self.cleanJetHistos_endNOtk.fillJet(jet)
            elif 3.1 < abs(jet.eta()):
                self.cleanJetHistos_fwd.fillJet(jet)

        #        print len (jets),len (event.jets), len (event.noNegJets), len (event.cleanJets), len (event.genLeptons),"-->",(len (event.noNegJets) - len (event.cleanJets) - len (event.genLeptons))

        event.matchingCleanJets = matchObjectCollection2(event.cleanJets, event.selGenJets, 0.25)
        # assign to each jet its gen match (easy life :))
        for jet in event.cleanJets:
            jet.gen = event.matchingCleanJets[jet]
        # FIXME next step might be to put this in the matching and remove the boolean flags

        self.cleanJetHistos.fillEvent(event.cleanJets)

        event.matchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen != None]
        event.cleanGluJets = []
        event.cleanQuarkJets = []
        for jet in event.matchedCleanJets:
            flav = abs(jet.partonFlavour())
            if flav == 21:
                event.cleanGluJets.append(jet)
            elif flav > 0 and flav <= 3:
                event.cleanQuarkJets.append(jet)

        event.LPtmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen != None and jet.pt() <= 30]
        event.HPtmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen != None and jet.pt() > 30]

        self.matchedCleanJetHistos.fillEvent(event.matchedCleanJets)
        self.LPtmatchedCleanJetHistos.fillEvent(event.LPtmatchedCleanJets)
        self.HPtmatchedCleanJetHistos.fillEvent(event.HPtmatchedCleanJets)

        event.unmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen == None]
        event.LPtunmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen == None and jet.pt() <= 30]
        event.HPtunmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen == None and jet.pt() > 30]

        self.unmatchedCleanJetHistos.fillEvent(event.unmatchedCleanJets)
        self.LPtUnmatchedCleanJetHistos.fillEvent(event.LPtunmatchedCleanJets)
        self.HPtUnmatchedCleanJetHistos.fillEvent(event.HPtunmatchedCleanJets)

        self.matchedCleanJetHistosComponents.fillEvent(event.matchedCleanJets)

        self.unmatchedCleanJetHistosComponents.fillEvent(event.unmatchedCleanJets)

        self.matchedCleanJetHistosResolution.fillEvent(event.matchedCleanJets, len(event.vertices))

        for jet in event.matchedCleanJets:
            if abs(jet.gen.eta()) < 1.4:
                self.matchedCleanJetHistosResolution_barrel.fillJet(jet, len(event.vertices))
                self.matchedCleanJetHistos_barrel.fillJet(jet)
            elif 1.6 < abs(jet.gen.eta()) < 2.5:
                self.matchedCleanJetHistosResolution_endtk.fillJet(jet, len(event.vertices))
                self.matchedCleanJetHistos_endtk.fillJet(jet)
            elif 2.6 < abs(jet.gen.eta()) < 2.9:
                self.matchedCleanJetHistosResolution_endNOtk.fillJet(jet, len(event.vertices))
                self.matchedCleanJetHistos_endNOtk.fillJet(jet)
            elif 3.1 < abs(jet.gen.eta()):
                self.matchedCleanJetHistosResolution_fwd.fillJet(jet, len(event.vertices))
                self.matchedCleanJetHistos_fwd.fillJet(jet)

        # PG debugging for tails
        #         for jet in event.matchedCleanJets :
        #             minDelta = 10
        #             secondClosest = jet
        #             for recojet in event.cleanJets :
        #                 if recojet == jet :
        #                     continue
        #                 dr2 = deltaR2( jet.gen.eta (), jet.gen.phi (), recojet.eta (), recojet.phi ())
        #                 if dr2 < minDelta :
        #                     minDelta = dr2
        #                     secondClosest = recojet
        #             if len(event.vertices) < 10 or abs (jet.gen.eta ()) < 1.6: continue
        #             self.h_secondClosestVsPtratio.Fill (jet.pt () / jet.gen.pt (), math.sqrt (minDelta))
        #             #if (jet.pt () / jet.gen.pt () < 0.2) :
        #                 #print '------------'
        #                 #print jet.pt (), jet.eta (), jet.phi ()
        #                 #print jet.gen.pt (), jet.gen.eta (), jet.gen.phi ()
        #                 #print 'second reco closest to gen at distance', minDelta

        #         aveDeltaR = 0
        #         num = 0
        #         for recojet1 in event.cleanJets :
        #             minDelta = 10
        #             closest = recojet1
        #             for recojet2 in event.cleanJets :
        #                 if recojet1 == recojet2 : continue
        #                     dr2 = deltaR2( recojet1.eta (), recojet1.phi (), recojet2.eta (), recojet2.phi ())
        #                     if dr2 < minDelta :
        #                         minDelta = dr2
        #                         closest = recojet2
        #             if minDelta == 10 continue ;
        #             aveDeltaR = aveDeltaR + math.sqrt (minDelta)
        #             num = num + 1
        #         if num > 0 :
        #             aveDeltaR = aveDeltaR / num
        #            self.h_avedistanceVSNvtx.Fill (len(event.vertices), aveDeltaR)

        # AB: fill eta-dependent responses (in bins of gen pt)
        for jet in event.matchedCleanJets:
            if abs(jet.gen.pt()) < 20.0:
                self.matchedCleanJetHistosResolution_PtL.fillJet(jet, len(event.vertices))
                self.matchedCleanJetHistos_PtL.fillJet(jet)
            elif 20.0 < abs(jet.gen.pt()) < 40.0:
                self.matchedCleanJetHistosResolution_PtM.fillJet(jet, len(event.vertices))
                self.matchedCleanJetHistos_PtM.fillJet(jet)
            elif 40.0 < abs(jet.gen.pt()) < 80.0:
                self.matchedCleanJetHistosResolution_PtH.fillJet(jet, len(event.vertices))
                self.matchedCleanJetHistos_PtH.fillJet(jet)
            elif 80.0 < abs(jet.gen.pt()):
                self.matchedCleanJetHistosResolution_PtV.fillJet(jet, len(event.vertices))
                self.matchedCleanJetHistos_PtV.fillJet(jet)

        if self.doJetIdHisto:
            self.gluCleanHistosId.fillEvent(event.cleanGluJets, event.vertices)
            self.quarkCleanHistosId.fillEvent(event.cleanQuarkJets, event.vertices)
            ### self.matchedCleanHistosId.fillEvent(event.matchedCleanJets,event.vertices)
            self.reweiMatchedCleanHistosId.fillEvent(event.matchedCleanJets, event.vertices)
            self.unmatchedCleanHistosId.fillEvent(event.unmatchedCleanJets, event.vertices)
Example #7
0
    def process (self, iEvent, event) :
        #read all the handles defined beforehand
        self.readCollections (iEvent)
        
        jetEtaCut = 4.5 
        
        # get the vertexes
        event.vertices = self.handles['vertices'].product ()
        self.h_nvtx.Fill (len (event.vertices))
        event.vertexBin = int (len (event.vertices))
        
        # get the jets in the jets variable
        jets = self.handles['jets'].product ()
        # filter jets with some selections
        event.jets = [ jet for jet in jets if ( abs(jet.eta()) < jetEtaCut and jet.pt()>self.cfg_ana.ptCut and self.isPFLoose(jet) ) ]
        self.jetHistos.fillEvent (event.jets)
        
        try:
            # get status 2 leptons
            if 'leptons2' in self.mchandles:
                event.genLeptons = map (GenParticle, self.mchandles['leptons2'].product ())
            else:
                event.genLeptons = [ lep for lep in self.mchandles['genParticles'].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ]  
        except:
            event.genLeptons = None

        if event.genLeptons:
        #FIXME why are there cases in which there's 4 or 6 leptons?
            if len (event.genLeptons) != 2 :
                return
            # in case I want to filter out taus
            # 11, 13, 15 : e, u, T
            # remove leptons from jets if closer than 0.2
            event.cleanJets = cleanObjectCollection (event.jets, event.genLeptons, 0.2)
        else:
            event.cleanJets = event.jets
            
        ### event.matchingCleanJets = matchObjectCollection2 (event.cleanJets, event.selGenJets, 0.25)
        # assign to each jet its gen match (easy life :))
        event.selGenJets = []
        for jet in event.cleanJets :
            try:
                jet.gen = jet.genJet()
                jet.gen.pt()
                event.selGenJets.append(jet.gen) 
            except:
                jet.gen = None

        for jet in event.selGenJets : 
            self.h_genjetspt.Fill (jet.pt ())
        self.jetHistos.fillStats (len (event.selGenJets), len (event.jets))
        
        ### try:
        ###     # get genJets
        ###     event.genJets = map (GenJet, self.mchandles['genJets'].product ())
        ###     event.selGenJets = event.genJets
        ###     for jet in event.selGenJets : 
        ###         self.h_genjetspt.Fill (jet.pt ())
        ###         
        ###     # first stats plots
        ###     self.jetHistos.fillStats (len (event.selGenJets), len (event.jets))
        ### except:
        ###     pass
           

        ## run the PileupJetIdAlgo and attach the id to the jet
        ijet = 0
        for jet in event.cleanJets:
            try:
                jet.puIdentifier = self.puidalgo.computeIdVariables(jet.sourcePtr().get(),0.,event.vertices[0],self.runMva)
            except:
                jet.puIdentifier = self.puidalgo.computeIdVariables(jet,0.,event.vertices[0],self.runMva)
            if self.cfg_ana.dumpTree:
                ## self.puidalgo.fillJet(jet.puIdentifier,ijet,0)
                self.puidalgo.setIJetIEvent(ijet,0)
                self.treevars.nvtx = len(event.vertices)
                self.treevars.isMatched = False
                self.treevars.jetFlavour = -999
                self.treevars.genPt = 0.
                self.treevars.partonPt = 0.
                self.treevars.genDr = -100.
                if jet.gen:
                    self.treevars.isMatched  = True
                    self.treevars.jetFlavour = jet.partonFlavour()
                    self.treevars.genPt = jet.gen.pt()
                    self.treevars.genDr = deltaR(jet.gen.eta(),jet.gen.phi(),jet.eta(),jet.phi())
                    try:
                        self.treevars.partonPt = jet.genParton.pt()
                    except:
                        pass
                self.tree.Fill()
            ijet += 1

        self.cleanJetHistos.fillEvent (event.cleanJets)
        
        event.matchedCleanJets = [jet for jet in event.cleanJets if jet.gen != None]

        event.unmatchedCleanJets = [jet for jet in event.cleanJets if jet.gen == None]
        self.matchedCleanJetHistos.fillEvent (event.matchedCleanJets)
        self.unmatchedCleanJetHistos.fillEvent (event.unmatchedCleanJets)

        event.cleanGluJets = []
        event.cleanQuarkJets = []
        vtxbin = findBin(self.vtxBinLabels,len(event.vertices))
        for jet in event.matchedCleanJets:
            flav = abs(jet.partonFlavour()) 
            if flav == 21:
                event.cleanGluJets.append(jet)
            elif flav > 0 and flav <= 3:
                event.cleanQuarkJets.append(jet)
            jet.weight = self.reweight[1](getattr(jet,self.reweight[0])())
            etabin = findBin(self.etaBins,jet.eta())
            ### self.jetKin[vtxbin][etabin].fillJet(jet)

        if self.cfg_ana.doJetIdHisto:
            self.gluCleanHistosId.fillEvent(event.cleanGluJets,event.vertices)
            self.quarkCleanHistosId.fillEvent(event.cleanQuarkJets,event.vertices)
            ### self.matchedCleanHistosId.fillEvent(event.matchedCleanJets,event.vertices)
            self.reweiMatchedCleanHistosId.fillEvent(event.matchedCleanJets,event.vertices)
            self.unmatchedCleanHistosId.fillEvent(event.unmatchedCleanJets,event.vertices)
Example #8
0
    def process(self, iEvent, event):
        #read all the handles defined beforehand
        self.readCollections(iEvent)
        #        print '-------'

        jetEtaCut = 4.5

        event.vertices = self.handles['vertices'].product()
        self.h_NVTXnum.Fill(len(event.vertices))

        YeCHSjets = self.handles['YeCHSjets'].product()
        event.YeCHSjets = [
            jet for jet in YeCHSjets
            if (abs(jet.eta()) < jetEtaCut and jet.pt() > self.cfg_ana.ptCut
                and self.isPFLoose(jet))
        ]
        NoCHSjets = self.handles['NoCHSjets'].product()
        event.NoCHSjets = [
            jet for jet in NoCHSjets
            if (abs(jet.eta()) < jetEtaCut and jet.pt() > self.cfg_ana.ptCut
                and self.isPFLoose(jet))
        ]

        # get status 2 leptons
        if 'genParticlesPruned' in self.mchandles:
            event.genLeptons = [
                lep for lep in self.mchandles['genParticlesPruned'].product()
                if lep.status() == 2 and (abs(lep.pdgId()) == 11 or abs(
                    lep.pdgId()) == 13 or abs(lep.pdgId()) == 15)
            ]
        else:
            event.genLeptons = [
                lep for lep in self.mchandles['genParticles'].product()
                if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(
                    lep.pdgId()) == 13 or abs(lep.pdgId()) == 15)
            ]

        event.NoCHSgenJets = map(GenJet,
                                 self.mchandles['NoCHSgenJets'].product())
        event.myNoCHSGenJets = [
            GenJet(jet) for jet in event.NoCHSgenJets
            if (jet.pt() > self.cfg_ana.genPtCut)
        ]
        event.selNoCHSGenJets = cleanObjectCollection(event.myNoCHSGenJets,
                                                      event.genLeptons, 0.2)
        event.YeCHSgenJets = map(GenJet,
                                 self.mchandles['YeCHSgenJets'].product())
        event.myYeCHSGenJets = [
            GenJet(jet) for jet in event.YeCHSgenJets
            if (jet.pt() > self.cfg_ana.genPtCut)
        ]
        event.selYeCHSGenJets = cleanObjectCollection(event.myYeCHSGenJets,
                                                      event.genLeptons, 0.2)

        self.h_NoCHS_genjetsnum.Fill(len(event.selNoCHSGenJets))

        if len(event.genLeptons) > 2:
            return

        for jet in event.selNoCHSGenJets:
            self.h_NoCHS_genjetspt.Fill(jet.pt())
            self.h_NoCHS_genjetseta.Fill(jet.eta())
        for jet in event.selYeCHSGenJets:
            self.h_YeCHS_genjetspt.Fill(jet.pt())
            self.h_YeCHS_genjetseta.Fill(jet.eta())

        event.cleanYeCHSJets = cleanObjectCollection(event.YeCHSjets,
                                                     event.genLeptons, 0.2)
        event.cleanNoCHSJets = cleanObjectCollection(event.NoCHSjets,
                                                     event.genLeptons, 0.2)
        for jet in event.cleanYeCHSJets:
            self.h_YeCHS_recjetspt.Fill(jet.pt())
            self.h_YeCHS_recjetseta.Fill(jet.eta())
#            if (abs(jet.pt () > 20) and len(event.vertices) > 10):
#                self.h_YeCHS_correction.Fill (jet.eta (), 1. / jet.jecFactor(0)) ;
#                print 'Ev', event.iEv, 'YeCHS ', round (jet.eta (), 2), round (jet.phi (), 2), round (jet.pt () * jet.jecFactor(0), 2)#, round (jet.component (1).fraction (), 2)

        for jet in event.cleanNoCHSJets:
            self.h_NoCHS_recjetspt.Fill(jet.pt())
            self.h_NoCHS_recjetseta.Fill(jet.eta())
#            if (abs(jet.pt () > 20) and len(event.vertices) > 10):
#                self.h_NoCHS_correction.Fill (jet.eta (), 1. / jet.jecFactor(0)) ;
#                print 'Ev', event.iEv, 'NoCHS ', round (jet.eta (), 2), round (jet.phi (), 2), round (jet.pt () * jet.jecFactor(0), 2)#, round (jet.component (1).fraction (), 2)

#PG removing negative correction jets
        event.noNegCleanYeCHSJets = [
            jet for jet in event.cleanYeCHSJets if (jet.jecFactor(0) > 0)
        ]
        event.noNegCleanNoCHSJets = [
            jet for jet in event.cleanNoCHSJets if (jet.jecFactor(0) > 0)
        ]

        #PG matching between CHS and non CHS
        event.YeNoCHSmatch = matchObjectCollection2(event.noNegCleanYeCHSJets,
                                                    event.noNegCleanNoCHSJets,
                                                    0.1)
        for yejet, nojet in event.YeNoCHSmatch.iteritems():
            if nojet == None:
                continue
            self.YeNoCHSRatio_eta.Fill(
                yejet.eta(),
                yejet.pt() * yejet.jecFactor(0) /
                (nojet.pt() * nojet.jecFactor(0)))
            self.h_NoCHS_correction.Fill(nojet.eta(), 1. / nojet.jecFactor(0))
            self.h_YeCHS_correction.Fill(yejet.eta(), 1. / yejet.jecFactor(0))

            if len(event.vertices) > 8 and len(event.vertices) <= 10:
                self.YeNoCHSRatio_eta_PUcut.Fill(
                    yejet.eta(),
                    yejet.pt() * yejet.jecFactor(0) /
                    (nojet.pt() * nojet.jecFactor(0)))
                self.h_NoCHS_correction_PUcut.Fill(nojet.eta(),
                                                   1. / nojet.jecFactor(0))
                self.h_YeCHS_correction_PUcut.Fill(yejet.eta(),
                                                   1. / yejet.jecFactor(0))

            if nojet.pt() < 40 or nojet.pt() > 60:
                continue
            self.YeNoCHSRatio_eta_ptcut.Fill(
                yejet.eta(),
                yejet.pt() * yejet.jecFactor(0) /
                (nojet.pt() * nojet.jecFactor(0)))
            self.h_NoCHS_correction_ptcut.Fill(nojet.eta(),
                                               1. / nojet.jecFactor(0))
            self.h_YeCHS_correction_ptcut.Fill(yejet.eta(),
                                               1. / yejet.jecFactor(0))

            if len(event.vertices) < 8 or len(event.vertices) > 10:
                continue
            self.YeNoCHSRatio_eta_ptcut_PUcut.Fill(
                yejet.eta(),
                yejet.pt() * yejet.jecFactor(0) /
                (nojet.pt() * nojet.jecFactor(0)))
            self.h_NoCHS_correction_ptcut_PUcut.Fill(nojet.eta(),
                                                     1. / nojet.jecFactor(0))
            self.h_YeCHS_correction_ptcut_PUcut.Fill(yejet.eta(),
                                                     1. / yejet.jecFactor(0))

#            if yejet.pt () * yejet.jecFactor(0) < 10:
#                continue ;
#            if abs (yejet.eta ()) < 3:
#                continue ;
#            print round (yejet.eta (), 2), '\t', round (yejet.pt () * yejet.jecFactor(0), 2),  '\t',round (nojet.pt () * nojet.jecFactor(0), 2),  '\t',round (yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0)), 2)
#            print round (yejet.eta (), 2), '\t', round (yejet.pt (), 2),  '\t',round (nojet.pt (), 2),  '\t',round (yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0)), 2)

        event.matchingCleanYeCHSJets = matchObjectCollection2(
            event.cleanYeCHSJets, event.selYeCHSGenJets, 0.25)
        for jet in event.cleanYeCHSJets:
            jet.gen = event.matchingCleanYeCHSJets[jet]
        event.matchedCleanYeCHSJets = [
            jet for jet in event.matchingCleanYeCHSJets if jet.gen != None
        ]

        for jet in event.matchedCleanYeCHSJets:
            self.h_YeCHS_recjetspt_match.Fill(jet.pt())
            self.h_YeCHS_recjetseta_match.Fill(jet.eta())
            self.h_YeCHS_genjetspt_match.Fill(jet.gen.pt())
            self.h_YeCHS_genjetseta_match.Fill(jet.gen.eta())

        event.matchingCleanNoCHSJets = matchObjectCollection2(
            event.cleanNoCHSJets, event.selNoCHSGenJets, 0.25)
        for jet in event.cleanNoCHSJets:
            jet.gen = event.matchingCleanNoCHSJets[jet]
        event.matchedCleanNoCHSJets = [
            jet for jet in event.matchingCleanNoCHSJets if jet.gen != None
        ]

        for jet in event.matchedCleanNoCHSJets:
            self.h_NoCHS_recjetspt_match.Fill(jet.pt())
            self.h_NoCHS_recjetseta_match.Fill(jet.eta())
            self.h_NoCHS_genjetspt_match.Fill(jet.gen.pt())
            self.h_NoCHS_genjetseta_match.Fill(jet.gen.eta())

        if len(event.vertices) != 10:
            return
        for jet in event.matchedCleanNoCHSJets:
            if (jet.gen.pt() < 20 or jet.gen.pt() > 30
                    or abs(jet.gen.eta()) > 1.4):
                continue
            self.h_NoCHS_response.Fill(
                (jet.pt() - jet.gen.pt()) / jet.gen.pt())
        for jet in event.matchedCleanYeCHSJets:
            if (jet.gen.pt() < 20 or jet.gen.pt() > 30
                    or abs(jet.gen.eta()) > 1.4):
                continue
            self.h_YeCHS_response.Fill(
                (jet.pt() - jet.gen.pt()) / jet.gen.pt())
Example #9
0
    def process(self, iEvent, event):

#        print 'process ongoing!'
#        import pdb; pdb.set_trace()
	
#	import pdb; pdb.set_trace()
        self.readCollections(iEvent)
        self.counters.counter('EMT').inc('all events')
        
        event.muoncand     = self.buildLooseLeptons(self.handles['muons'].product(), event)
        event.electroncand = self.buildLooseOtherLeptons(self.handles['electrons'].product(), event)
        event.taucand      = self.buildLooseTau(self.handles['taus'].product(), event)

        cmgJets = self.handles['jets'].product()

        event.CSVjet = []

        for cmgJet in cmgJets:
            jet = Jet( cmgJet )
            if self.testVetoBJet(jet):
                event.CSVjet.append(jet)


        event.electroncand, dummpy = cleanObjectCollection(event.electroncand,
                                                           masks = event.muoncand,
                                                           deltaRMin = 0.5)

        
        
        # CSV veto
        electroncand_removebjet = []
        muoncand_removebjet = []
        
        for ielectron in event.electroncand:
            bm, dr2min = bestMatch(ielectron, event.CSVjet)
            if dr2min > 0.25:
                electroncand_removebjet.append(ielectron)

        for imuon in event.muoncand:
            bm, dr2min = bestMatch(imuon, event.CSVjet)
            if dr2min > 0.25:
                muoncand_removebjet.append(imuon)

        event.electroncand = electroncand_removebjet
        event.muoncand = muoncand_removebjet
        
        
#        event.flag_trigmatched = False
#        


#        if not event.flag_trigmatched:
#            return False

    
#        event.cleanelectron = []
#        event.cleanmuon = []



        for ii in event.electroncand:                                               
            ii.flag_id = self.eid(ii)
            ii.flag_iso = self.eiso(ii)

            ii.trig_match = True
#            if self.triggerCheck(event, event.hltPaths, ii):
#                ii.trig_match = True


#
#            for jj in event.muoncand:
#                if self.returnMass(jj, ii) > 20. and \
#                       ii.charge()*jj.charge()==1. and \
#                       self.returnDR(ii, jj) > 0.5:
#
#                    flag_add = True
#
#            if flag_add:
#                ii.flag_id = self.eid(ii)
#                ii.flag_iso = self.eiso(ii)
#                event.cleanelectron.append(ii)
#
#
#
        for ii in event.muoncand:
            ii.flag_id = self.muid(ii)
            ii.flag_iso = self.muiso(ii)


            ii.trig_match = True
#            if self.triggerCheck(event, event.hltPaths, ii):
#                ii.trig_match = True


#                continue
#                
#            for jj in event.electroncand:
#                if self.returnMass(jj, ii) > 20. and \
#                       ii.charge()*jj.charge()==1. and \
#                       self.returnDR(ii, jj) > 0.5:
#
#                    flag_add = True
#
#            if flag_add:
#                ii.flag_id = self.muid(ii)
#                ii.flag_iso = self.muiso(ii)
#                event.cleanmuon.append(ii)



#        event.electroncand = event.cleanelectron
#        event.muoncand = event.cleanmuon

        


#        idiso_electron = [ie for ie in event.electroncand if self.eid(ie) and self.eiso(ie)]
#        idiso_muon = [im for im in event.muoncand if self.muid(im) and self.muiso(im)]

#        if idiso_electron[0].pt() > idiso_muon[0].pt():
            


#        if not (len(event.muoncand)>=1 and len(event.electroncand)>=1 and len(event.taucand)>=1):
#            print 'YCheck : (m,e,t) = ', len(event.muoncand), len(event.electroncand), len(event.taucand)
#            return False

        
#        lepton1 = [] # Leading lepton
#        lepton2 = [] # 2nd leading lepton


#        if not (len(id_electron)>=1 and len(id_muon)>=1):
#            return False
            

#        lepton_type = ''
#
#        if id_electron[0].pt() > id_muon[0].pt(): #e-mu
#            lepton1 = [ie for ie in id_electron if ie.pt() > 20.]
#            lepton2 = [im for im in id_muon if im.pt() > 10.]
#            lepton_type = 'electron'
#        elif id_electron[0].pt() < id_muon[0].pt():
#            lepton1 = [im for im in id_muon if im.pt() > 20.]
#            lepton2 = [ie for ie in id_electron if ie.pt() > 10.]
#            lepton_type = 'muon'



#            import pdb; pdb.set_trace()        
#        if not (len(lepton1)==1 and len(lepton2)==1):
#            return False

#        self.counters.counter('EMT').inc('1mu + 1e')
#        
#
#        event.muon = ''
#        event.electron = ''
#        
#        if lepton_type=='muon':
#            event.muon = lepton1[0]
#            event.electron = lepton2[0]
#        elif lepton_type=='electron':
#            event.electron = lepton1[0]
#            event.muon = lepton2[0]




        event.loosetau = []

        for itau in event.taucand:

            itau.decaymode = itau.decayMode()
            itau.ep = itau.calcEOverP()
            itau.flag_iso = self.tauiso(itau)
            itau.flag_id = self.tauid(itau)

            itau.againstERaw = itau.tauID('againstElectronMVA3raw')
            itau.againstE2Raw = itau.tauID('againstElectronMVA2raw')
            itau.againstE0Raw = itau.tauID('againstElectronMVA')
            itau.againstECat = int(round(itau.tauID('againstElectronMVA3category')))
            itau.againstE2Cat = int(round(itau.tauID('againstElectronMVA2category')))
#            itau.againstE0Cat = int(round(itau.tauID('againstElectronMVAcategory')))
            itau.againstELooseArmin = itau.tauID("againstElectronLoose")
            itau.againstETight = itau.tauID("againstElectronTightMVA3")
            itau.againstELoose = itau.tauID("againstElectronLooseMVA3")
            itau.againstEMedium = itau.tauID("againstElectronMediumMVA3")
            itau.againstE2Loose = itau.tauID("againstElectronLooseMVA2")
            itau.againstE2Medium = itau.tauID("againstElectronMediumMVA2")
#            itau.againstE0Loose = itau.tauID("againstElectronLooseMVA")
#            itau.againstE0Medium = itau.tauID("againstElectronMediumMVA")
            itau.againstMuLoose = itau.tauID("againstMuonLoose")
            itau.againstMuTight = itau.tauID("againstMuonTight")
            itau.dBisolation = itau.tauID("byCombinedIsolationDeltaBetaCorrRaw3Hits")
            itau.mvaisolation = itau.tauID("byRawIsoMVA")
            itau.mvaisolation_loose = itau.tauID('byLooseIsoMVA')

#            print 'dB, raw, loose', itau.tauID("byCombinedIsolationDeltaBetaCorrRaw3Hits"), itau.tauID("byRawIsoMVA"), itau.tauID('byLooseIsoMVA')
#            print 'ID_check', itau.tauID("againstMuonLoose"), itau.tauID("againstElectronLooseMVA3")
#            print 'mu_loose, e_loose, e_medium', itau.tauID("againstMuonLoose"), itau.tauID("againstElectronLooseMVA3"),  itau.tauID("againstElectronMediumMVA3"), itau.flag_id
            
#            if flag_mu_mass and  and \
#                   ((itau.decayMode()==0 and itau.calcEOverP() > 0.2) or (itau.decayMode()!=0)):
#                itau.flag_id = True
#
#            
#            if flag_e_mass==False and flag_mu_mass==False and self.tauid(itau):
#                itau.flag_id = True





#            flag_e_overlap = False
#            flag_e_mass = False
#
#            for ii in idiso_electron:
#                mass_et = self.returnMass(ii, itau)
#                if mass_et > 71.2 and mass_et < 111.2:
#                    flag_e_mass = True
#                
#                if self.returnDR(itau, ii) < 0.5:
#                    flag_e_overlap = True
#
#            if flag_e_overlap:
#                continue
#            
#
#            flag_mu_overlap = False
#            flag_mu_mass = False
#
#            for ii in idiso_muon:
#                mass_mt = self.returnMass(ii, itau)
#                if mass_mt > 71.2 and mass_mt < 111.2:
#                    flag_mu_mass = True
#                
#                if self.returnDR(itau, ii) < 0.5:
#                    flag_mu_overlap = True
#
#            if flag_mu_overlap:
#                continue


#            if self.tauiso(itau):
#                itau.flag_iso = True
#
#            
#            if flag_e_mass and itau.tauID("againstElectronMediumMVA3"):
#                itau.flag_id = True
#
#
#            if flag_mu_mass and itau.tauID("againstMuonTight") and \
#                   ((itau.decayMode()==0 and itau.calcEOverP() > 0.2) or (itau.decayMode()!=0)):
#                itau.flag_id = True
#
#            
#            if flag_e_mass==False and flag_mu_mass==False and self.tauid(itau):
#                itau.flag_id = True


            event.loosetau.append(itau)


        event.taucand = event.loosetau

        # Additional tau veto
        event.vetotaucand = self.buildVetoTau(self.handles['taus'].product(), event)
        event.vetomuoncand = self.buildVetoLeptons(self.handles['muons'].product(), event)
        event.vetoelectroncand = self.buildVetoOtherLeptons(self.handles['electrons'].product(), event)

        flag_sscharge = False
        for im in event.muoncand:
            for ie in event.electroncand:
                if im.charge()*ie.charge()==1:
                    flag_sscharge = True

        self.counters.counter('EMT').inc('step1')
        
        if flag_sscharge==False:
            return False

        self.counters.counter('EMT').inc('step2')
        
#        if not (len(event.taucand)>=1 and len(event.muoncand)>=1 and len(event.electroncand)>=1):
        if not (len(event.muoncand)>=1 and len(event.electroncand)>=1):
            return False

        self.counters.counter('EMT').inc('step3')

#        idiso_tau = [it for it in event.taucand if (it.flag_id and it.flag_iso)]
#        if not len(idiso_tau)>=1 :
#            return False





#        if not len(lepton3) == 1:
#            return False

#        self.counters.counter('EMT').inc('1 e/mu/tau')
#        event.tau = lepton3[0]




#        event.M_l2t = self.returnMass(lepton2[0], event.tau)

#        if self.returnMass(event.muon, event.electron) < 20.:
#            return False
#        if self.returnMass(lepton2[0], event.tau) < 20.:
#            return False

        

        # charge requirement
        # SS for two light leptons

#        if event.electron.charge()*event.muon.charge()==-1.:
#            return False


#        if event.tau.charge()*event.muon.charge()!=-1.:
#            return False


        # dR separation 
#        if self.returnDR(event.tau, event.muon) < 0.5:
#            return False
#        if self.returnDR(event.tau, event.electron) < 0.5:
#            return False
#        if self.returnDR(event.electron, event.muon) < 0.5:
#            return False

        

#        event.loosetaucand, dummpy = cleanObjectCollection(event.loosetaucand,
#                                                           masks = [event.muon],
##                                                           masks = event.muoncand,
#                                                           deltaRMin = 0.4)
#
#        event.loosetaucand, dummpy = cleanObjectCollection(event.loosetaucand,
#                                                           masks = [event.electron],
##                                                           masks = event.electroncand,
#                                                           deltaRMin = 0.4)
#
#        event.loosetaucand, dummpy = cleanObjectCollection(event.loosetaucand,
#                                                           masks = [event.tau],
#                                                           deltaRMin = 0.4)
#
#
#        event.loosemuoncand, dummpy = cleanObjectCollection(event.loosemuoncand,
#                                                           masks = [event.muon],
#                                                           deltaRMin = 0.4)
#
#        event.loosemuoncand, dummpy = cleanObjectCollection(event.loosemuoncand,
#                                                           masks = [event.electron],
#                                                           deltaRMin = 0.4)
#
#        event.loosemuoncand, dummpy = cleanObjectCollection(event.loosemuoncand,
#                                                           masks = [event.tau],
#                                                           deltaRMin = 0.4)
#
#        event.looseelectroncand, dummpy = cleanObjectCollection(event.looseelectroncand,
#                                                           masks = [event.muon],
#                                                           deltaRMin = 0.4)
#
#        event.looseelectroncand, dummpy = cleanObjectCollection(event.looseelectroncand,
#                                                           masks = [event.electron],
#                                                           deltaRMin = 0.4)
#
#        event.looseelectroncand, dummpy = cleanObjectCollection(event.looseelectroncand,
#                                                           masks = [event.tau],
#                                                           deltaRMin = 0.4)

        
        
#        NadditionalLepton = len(event.loosetaucand) + len(event.loosemuoncand) + len(event.looseelectroncand)
#        if NadditionalLepton>=1:
#            return False



        print 'All events passed : ', event.run, event.lumi, event.eventId
        
        return True
    def selectionSequence(self, event, fillCounter, leg1IsoCut=None, leg2IsoCut=None):

        if fillCounter: self.counters.counter('DiLepton').inc('all events')
        # if not self.triggerList.triggerPassed(event.triggerObject):
        #    return False
        # self.counters.counter('DiLepton').inc('trigger passed ')

        # if event.eventId == 155035:
        #    import pdb; pdb.set_trace()
            
        if len(event.diLeptons) == 0:
            return False
        if fillCounter: self.counters.counter('DiLepton').inc('> 0 di-lepton')

        # testing di-lepton itself
        selDiLeptons = event.diLeptons
        # selDiLeptons = self.selectDiLeptons( selDiLeptons ) 
        
        if not self.leptonAccept( event.leptons ):
            return False
        if fillCounter: self.counters.counter('DiLepton').inc('lepton accept')


        if len(self.cfg_comp.triggers)>0:
            # trigger matching leg1
            selDiLeptons = [diL for diL in selDiLeptons if \
                            self.trigMatched(event, diL.leg1(), 'leg1')]
            if len(selDiLeptons) == 0:
                event.l1TrigMatched=False
                if hasattr(self.cfg_ana,'HCP_matching'):
	            return False
            else:
                if fillCounter: self.counters.counter('DiLepton').inc('leg1 trig matched')
                event.l1TrigMatched=True

        if len(self.cfg_comp.triggers)>0:
            # trigger matching leg2
            selDiLeptons = [diL for diL in selDiLeptons if \
                            self.trigMatched(event, diL.leg2(), 'leg2')]
            if len(selDiLeptons) == 0:
                event.l2TrigMatched=False
                if hasattr(self.cfg_ana,'HCP_matching'):
	            return False
            else:
                if fillCounter: self.counters.counter('DiLepton').inc('leg2 trig matched')
                event.l2TrigMatched=True

        if len(self.cfg_comp.triggers)>0 and len(self.cfg_ana.triggerMap[ event.hltPath ])>2:
            # trigger matching jet
            cmgJets = self.handles['jets'].product()
	    jets=[]
            for cmgJet in cmgJets:
                jet = Jet( cmgJet )
                if self.testJet( jet ):
                    jets.append(jet)

	    selDiLeptonsNew=[]
	    for diL in selDiLeptons:
                cleanJets, dummy = cleanObjectCollection( jets, masks = [ diL.leg1(), diL.leg2() ], deltaRMin = 0.5 )
                if len(cleanJets)>0 and self.trigMatched(event, cleanJets[0], 'jet'):
                    selDiLeptonsNew+=[diL]
	    selDiLeptons=selDiLeptonsNew
            if len(selDiLeptons) == 0:
                event.jetTrigMatched=False
                if hasattr(self.cfg_ana,'HCP_matching'):
	            return False
            else:
                if fillCounter: self.counters.counter('DiLepton').inc('jet trig matched')
                event.jetTrigMatched=True

        event.diLeptonsTrigMatched = selDiLeptons

        # testing leg1
        selDiLeptons = [ diL for diL in selDiLeptons if \
                         self.testLeg1( diL.leg1(), leg1IsoCut ) ]
        if len(selDiLeptons) == 0:
            return False
        else:
            if fillCounter: self.counters.counter('DiLepton').inc('leg1 offline cuts passed')

        # testing leg2 
        selDiLeptons = [ diL for diL in selDiLeptons if \
                         self.testLeg2( diL.leg2(), leg2IsoCut ) ]
        if len(selDiLeptons) == 0:
            return False
        else:
            if fillCounter: self.counters.counter('DiLepton').inc('leg2 offline cuts passed')

        # mass cut 
        selDiLeptons = [ diL for diL in selDiLeptons if \
                         self.testMass(diL) ]
        if len(selDiLeptons)==0:
            return False
        else:
            if fillCounter: self.counters.counter('DiLepton').inc(
                '{min:3.1f} < m < {max:3.1f}'.format( min = self.cfg_ana.m_min,
                                                      max = self.cfg_ana.m_max )
                )

        # exactly one? 
        if len(selDiLeptons)==0:
            return False
        elif len(selDiLeptons)==1:
            if fillCounter: self.counters.counter('DiLepton').inc('exactly 1 di-lepton')
        
        event.diLepton = self.bestDiLepton( selDiLeptons )
        event.leg1 = event.diLepton.leg1()
        event.leg2 = event.diLepton.leg2()

        return True
Example #11
0
    def selectionSequence(self,
                          event,
                          fillCounter,
                          leg1IsoCut=None,
                          leg2IsoCut=None):

        if fillCounter: self.counters.counter('DiLepton').inc('all events')

        if len(event.diLeptons) == 0:
            return False
        if fillCounter: self.counters.counter('DiLepton').inc('> 0 di-lepton')

        # testing di-lepton itself
        selDiLeptons = event.diLeptons

        if not self.leptonAccept(event.leptons):
            return False
        if fillCounter: self.counters.counter('DiLepton').inc('lepton accept')

        if not hasattr(event, 'hltPaths'):
            event.hltPaths = []

        #import pdb ; pdb.set_trace()

        matching = {}
        for trig in event.hltPaths:
            matching.update({trig: [-99, -99,
                                    -99]})  # {trigName:leg1,leg2,jet}

        event.diLeptonsTrigMatched = []

        for trig in event.hltPaths:
            if self.cfg_comp.isEmbed: continue  ## no matching for the embed
            selDiLeptons = event.diLeptons
            if len(self.cfg_comp.triggers) > 0:
                # trigger matching leg1
                selDiLeptons = [
                    diL for diL in selDiLeptons
                    if self.trigMatched(event, diL.leg1(), 'leg1', trig)
                ]
                if len(selDiLeptons) == 0:
                    matching[trig][0] = 0
                else:
                    if fillCounter:
                        self.counters.counter('DiLepton').inc(
                            'leg1 trig matched')
                    matching[trig][0] = 1

            if len(self.cfg_comp.triggers) > 0:
                # trigger matching leg2
                selDiLeptons = [
                    diL for diL in selDiLeptons
                    if self.trigMatched(event, diL.leg2(), 'leg2', trig)
                ]
                if len(selDiLeptons) == 0:
                    matching[trig][1] = 0
                else:
                    if fillCounter:
                        self.counters.counter('DiLepton').inc(
                            'leg2 trig matched')
                    matching[trig][1] = 1

            if len(self.cfg_comp.triggers) > 0 and len(
                    self.cfg_ana.triggerMap[trig]) > 2:
                # trigger matching jet
                cmgJets = self.handles['jets'].product()
                jets = []
                for cmgJet in cmgJets:
                    jet = Jet(cmgJet)
                    if self.testJet(jet):
                        jets.append(jet)

                selDiLeptonsNew = []
                for diL in selDiLeptons:
                    cleanJets, dummy = cleanObjectCollection(
                        jets, masks=[diL.leg1(), diL.leg2()], deltaRMin=0.5)
                    if len(cleanJets) > 0 and self.trigMatched(
                            event, cleanJets[0], 'jet', trig):
                        selDiLeptonsNew += [diL]
                selDiLeptons = selDiLeptonsNew
                if len(selDiLeptons) == 0:
                    matching[trig][2] = 0
                else:
                    if fillCounter:
                        self.counters.counter('DiLepton').inc(
                            'jet trig matched')
                    matching[trig][2] = 1

            event.diLeptonsTrigMatched += selDiLeptons

        event.diLeptonsTrigMatched = set(event.diLeptonsTrigMatched)

        ### need unix style wild card to macth different trigger versions in data
        for trig in matching.keys():
            if fnm(trig, 'HLT_DoubleMediumIsoPFTau35_Trk*_eta2p1_v*'):
                event.l1TrigMatched_diTau = matching[trig][0]
                event.l2TrigMatched_diTau = matching[trig][1]
            if fnm(trig, 'HLT_DoubleMediumIsoPFTau*_Trk*_eta2p1_Jet30_v*'):
                event.l1TrigMatched_diTauJet = matching[trig][0]
                event.l2TrigMatched_diTauJet = matching[trig][1]
                event.jetTrigMatched_diTauJet = matching[trig][2]

        # testing leg1
        selDiLeptons = [
            diL for diL in selDiLeptons if self.testLeg(diL.leg1())
        ]
        if len(selDiLeptons) == 0:
            return False
        else:
            if fillCounter:
                self.counters.counter('DiLepton').inc(
                    'leg1 offline cuts passed')

        # testing leg2
        selDiLeptons = [
            diL for diL in selDiLeptons if self.testLeg(diL.leg2())
        ]
        if len(selDiLeptons) == 0:
            return False
        else:
            if fillCounter:
                self.counters.counter('DiLepton').inc(
                    'leg2 offline cuts passed')

        # mass cut
        selDiLeptons = [diL for diL in selDiLeptons if self.testMass(diL)]
        if len(selDiLeptons) == 0:
            return False
        else:
            if fillCounter:
                self.counters.counter('DiLepton').inc(
                    '{min:3.1f} < m < {max:3.1f}'.format(
                        min=self.cfg_ana.m_min, max=self.cfg_ana.m_max))

        # exactly one?
        if len(selDiLeptons) == 0:
            return False
        elif len(selDiLeptons) == 1:
            if fillCounter:
                self.counters.counter('DiLepton').inc('exactly 1 di-lepton')

        event.diLepton = self.bestDiLepton(selDiLeptons)
        event.leg1 = event.diLepton.leg1()
        event.leg2 = event.diLepton.leg2()

        # match with L1 particles, whether Central Jets or Taus
        L1Taus = self.handles['L1JetsTau'].product()
        L1Jets = self.handles['L1JetsCentral'].product()
        L1dR1T, L1dR2T, index1T, index2T = self.match(event.diLepton, L1Taus)
        L1dR1J, L1dR2J, index1J, index2J = self.match(event.diLepton, L1Jets)
        if L1dR1T < L1dR1J and L1dR1T <= 0.5:
            if L1Taus[index1T].pt() > 44. and abs(L1Taus[index1T].eta()) < 2.1:
                event.leg1.L1particle = L1Taus[index1T]
        if L1dR1J < L1dR1T and L1dR1J <= 0.5:
            if L1Jets[index1J].pt() > 64.:
                event.leg1.L1particle = L1Jets[index1J]
        if L1dR2T < L1dR2J and L1dR2T <= 0.5:
            if L1Taus[index2T].pt() > 44. and abs(L1Taus[index2T].eta()) < 2.1:
                event.leg2.L1particle = L1Taus[index2T]
        if L1dR2J < L1dR2T and L1dR2J <= 0.5:
            if L1Jets[index2J].pt() > 64.:
                event.leg2.L1particle = L1Jets[index2J]

        ### require trigger bit in Embedded RecHit
        if self.cfg_comp.isEmbed:
            #if len(event.hltPath)==0 : return False
            if not event.hltPath: return False

        #import pdb ; pdb.set_trace()
        return True
Example #12
0
    def process(self, iEvent, event):
        
        self.readCollections( iEvent )
        cmgJets = self.handles['jets'].product()

        allJets = []
        event.jets = []
        event.bJets = []
        event.cleanJets = []
        event.cleanBJets = []

        leptons = event.selectedLeptons

        genJets = None
        if self.cfg_comp.isMC:
            genJets = map( GenJet, self.mchandles['genJets'].product() ) 
            
        for cmgJet in cmgJets:
            jet = Jet( cmgJet )
            allJets.append( jet )
            if self.cfg_comp.isMC and hasattr( self.cfg_comp, 'jetScale'):
                scale = random.gauss( self.cfg_comp.jetScale,
                                      self.cfg_comp.jetSmear )
                jet.scaleEnergy( scale )
            if genJets:
                # Use DeltaR = 0.25 matching like JetMET
                pairs = matchObjectCollection( [jet], genJets, 0.25*0.25)
                if pairs[jet] is None:
                    pass
                    #jet.genJet = None
                else:
                    jet.genJet = pairs[jet] 
                # print jet, jet.genJet

            #Add JER correction for MC jets. Requires gen-jet matching. 
            if self.cfg_comp.isMC and hasattr(self.cfg_ana, 'jerCorr') and self.cfg_ana.jerCorr:
                self.jerCorrection(jet)

            #Add JES correction for MC jets.
            if self.cfg_comp.isMC and hasattr(self.cfg_ana, 'jesCorr'):
                self.jesCorrection(jet, self.cfg_ana.jesCorr)
            if self.testJet( jet ):
                event.jets.append(jet)
            if self.testBJet(jet):
                event.bJets.append(jet)


                
        self.counters.counter('jets').inc('all events')

        event.cleanJets, dummy = cleanObjectCollection( event.jets,
                                                        masks = leptons,
                                                        deltaRMin = 0.5 )
        

        event.cleanBJets, dummy = cleanObjectCollection( event.bJets,
                                                         masks = leptons,
                                                         deltaRMin = 0.5 )        

        pairs = matchObjectCollection( leptons, allJets, 0.5*0.5)


        # associating a jet to each lepton
        for lepton in leptons:
            jet = pairs[lepton]
            if jet is None:
                lepton.jet = lepton
            else:
                lepton.jet = jet

        # associating a leg to each clean jet
        invpairs = matchObjectCollection( event.cleanJets, leptons, 99999. )
        for jet in event.cleanJets:
            leg = invpairs[jet]
            jet.leg = leg

        for jet in event.cleanJets:
            jet.matchGenParton=999.0

        if self.cfg_comp.isMC and "BB" in self.cfg_comp.name:
            genParticles = self.mchandles['genParticles'].product()
            event.genParticles = map( GenParticle, genParticles)
            for gen in genParticles:
                if abs(gen.pdgId())==5 and gen.mother() and abs(gen.mother().pdgId())==21:
                    for jet in event.cleanJets:
                        dR=deltaR2(jet.eta(), jet.phi(), gen.eta(), gen.phi() )
                        if dR<jet.matchGenParton:
                            jet.matchGenParton=dR

        event.jets30 = [jet for jet in event.jets if jet.pt()>30]
        event.cleanJets30 = [jet for jet in event.cleanJets if jet.pt()>30]
        
        if len( event.jets30 )>=2:
            self.counters.counter('jets').inc('at least 2 good jets')
               
        if len( event.cleanJets30 )>=2:
            self.counters.counter('jets').inc('at least 2 clean jets')

        if len(event.cleanJets)<2:
            return True

        return True
Example #13
0
    def selectionSequence(self, event, fillCounter, leg1IsoCut=None, leg2IsoCut=None):

        if fillCounter: self.counters.counter('DiLepton').inc('all events')
            
        if len(event.diLeptons) == 0:
            return False
        if fillCounter: self.counters.counter('DiLepton').inc('> 0 di-lepton')

        # testing di-lepton itself
        selDiLeptons = event.diLeptons
        
        if not self.leptonAccept( event.leptons ):
            return False
        if fillCounter: self.counters.counter('DiLepton').inc('lepton accept')

        ## for embedded no hltPaths (for now)
        if not hasattr( event, 'hltPaths'):
            event.hltPaths = []

        matching = {}
        for trig in event.hltPaths :
          matching.update({trig:[-99,-99,-99]}) # {trigName:leg1,leg2,jet}
                
        event.diLeptonsTrigMatched = []
        
        for trig in event.hltPaths :
          if self.cfg_comp.isEmbed : continue   ## no matching for the embed
          selDiLeptons = event.diLeptons
          if len(self.cfg_comp.triggers)>0:
              # trigger matching leg1
              selDiLeptons = [diL for diL in selDiLeptons if self.trigMatched(event, diL.leg1(), 'leg1', trig)]
              if len(selDiLeptons) == 0:
                  matching[trig][0]=0
              else:
                  if fillCounter: self.counters.counter('DiLepton').inc('leg1 trig matched')
                  matching[trig][0]=1
  
          if len(self.cfg_comp.triggers)>0:
              # trigger matching leg2
              selDiLeptons = [diL for diL in selDiLeptons if self.trigMatched(event, diL.leg2(), 'leg2', trig)]
              if len(selDiLeptons) == 0:
                  matching[trig][1]=0
              else:
                  if fillCounter: self.counters.counter('DiLepton').inc('leg2 trig matched')
                  matching[trig][1]=1
  
          if len(self.cfg_comp.triggers)>0 and len(self.cfg_ana.triggerMap[ trig ])>2:
              # trigger matching jet
              cmgJets = self.handles['jets'].product()
	      jets=[]
              for cmgJet in cmgJets:
                  jet = Jet( cmgJet )
                  if self.testJet( jet ):
                      jets.append(jet)
  
	      selDiLeptonsNew=[]
	      for diL in selDiLeptons:
                  cleanJets, dummy = cleanObjectCollection( jets, masks = [ diL.leg1(), diL.leg2() ], deltaRMin = 0.5 )
                  if len(cleanJets)>0 and self.trigMatched(event, cleanJets[0], 'jet', trig):
                      selDiLeptonsNew += [diL]
	      selDiLeptons = selDiLeptonsNew
              if len(selDiLeptons) == 0:
                  matching[trig][2]=0
              else:
                  if fillCounter: self.counters.counter('DiLepton').inc('jet trig matched')
                  matching[trig][2]=1
              
              
          event.diLeptonsTrigMatched += selDiLeptons
        
        event.diLeptonsTrigMatched = set(event.diLeptonsTrigMatched)
        
        ### need unix style wild card to macth different trigger versions in data
        for trig in matching.keys() :
          if fnm(trig,'HLT_DoubleMediumIsoPFTau35_Trk*_eta2p1_v*') :
            event.l1TrigMatched_diTau = matching[trig][0]
            event.l2TrigMatched_diTau = matching[trig][1]      
          if fnm(trig,'HLT_DoubleMediumIsoPFTau*_Trk*_eta2p1_Jet30_v*') :
            event.l1TrigMatched_diTauJet  = matching[trig][0]
            event.l2TrigMatched_diTauJet  = matching[trig][1]
            event.jetTrigMatched_diTauJet = matching[trig][2]        
        
        # testing leg1
        selDiLeptons = [ diL for diL in selDiLeptons if self.testLeg( diL.leg1() ) ]
        if len(selDiLeptons) == 0:
            return False
        else:
            if fillCounter: self.counters.counter('DiLepton').inc('leg1 offline cuts passed')

        # testing leg2 
        selDiLeptons = [ diL for diL in selDiLeptons if self.testLeg( diL.leg2() ) ]
        if len(selDiLeptons) == 0:
            return False
        else:
            if fillCounter: self.counters.counter('DiLepton').inc('leg2 offline cuts passed')

 
        # mass cut 
        selDiLeptons = [ diL for diL in selDiLeptons if self.testMass(diL) ]
        if len(selDiLeptons)==0:
            return False
        else:
            if fillCounter: self.counters.counter('DiLepton').inc('{min:3.1f} < m < {max:3.1f}'.format( min = self.cfg_ana.m_min, max = self.cfg_ana.m_max ))

        # exactly one? 
        if len(selDiLeptons)==0:
            return False
        elif len(selDiLeptons)==1:
            if fillCounter: self.counters.counter('DiLepton').inc('exactly 1 di-lepton')
        
        event.diLepton = self.bestDiLepton( selDiLeptons )
        event.leg1 = event.diLepton.leg1()
        event.leg2 = event.diLepton.leg2()
        
        
        ### require trigger bit in Embedded RecHit
        if self.cfg_comp.isEmbed :
          if not event.hltPath : return False
        
        if "DY" in self.cfg_comp.name or "Higgs" in self.cfg_comp.name or self.cfg_comp.isEmbed:
          if event.leg1.decayMode() == 0 :
            event.leg1.prongWeight = 0.88
          else :
            event.leg1.prongWeight = 1.
          if event.leg2.decayMode() == 0 :
            event.leg2.prongWeight = 0.88
          else :
            event.leg2.prongWeight = 1.
        #import pdb ; pdb.set_trace()
        return True
Example #14
0
    def selectionSequence(self, event, fillCounter, leg1IsoCut=None, leg2IsoCut=None):

        if fillCounter: self.counters.counter('DiLepton').inc('all events')
            
        if len(event.diLeptons) == 0:
            return False
        if fillCounter: self.counters.counter('DiLepton').inc('> 0 di-lepton')

        # testing di-lepton itself
        selDiLeptons = event.diLeptons
        
        if not self.leptonAccept( event.leptons ):
            return False
        if fillCounter: self.counters.counter('DiLepton').inc('lepton accept')

        if not hasattr( event, 'hltPaths'):
            event.hltPaths = []

        #import pdb ; pdb.set_trace() 
        
        matching = {}
        for trig in event.hltPaths :
          matching.update({trig:[-99,-99,-99]}) # {trigName:leg1,leg2,jet}
                
        event.diLeptonsTrigMatched = []
        
        for trig in event.hltPaths :
          if self.cfg_comp.isEmbed : continue   ## no matching for the embed
          selDiLeptons = event.diLeptons
          if len(self.cfg_comp.triggers)>0:
              # trigger matching leg1
              selDiLeptons = [diL for diL in selDiLeptons if self.trigMatched(event, diL.leg1(), 'leg1', trig)]
              if len(selDiLeptons) == 0:
                  matching[trig][0]=0
              else:
                  if fillCounter: self.counters.counter('DiLepton').inc('leg1 trig matched')
                  matching[trig][0]=1
  
          if len(self.cfg_comp.triggers)>0:
              # trigger matching leg2
              selDiLeptons = [diL for diL in selDiLeptons if self.trigMatched(event, diL.leg2(), 'leg2', trig)]
              if len(selDiLeptons) == 0:
                  matching[trig][1]=0
              else:
                  if fillCounter: self.counters.counter('DiLepton').inc('leg2 trig matched')
                  matching[trig][1]=1
  
          if len(self.cfg_comp.triggers)>0 and len(self.cfg_ana.triggerMap[ trig ])>2:
              # trigger matching jet
              cmgJets = self.handles['jets'].product()
	      jets=[]
              for cmgJet in cmgJets:
                  jet = Jet( cmgJet )
                  if self.testJet( jet ):
                      jets.append(jet)
  
	      selDiLeptonsNew=[]
	      for diL in selDiLeptons:
                  cleanJets, dummy = cleanObjectCollection( jets, masks = [ diL.leg1(), diL.leg2() ], deltaRMin = 0.5 )
                  if len(cleanJets)>0 and self.trigMatched(event, cleanJets[0], 'jet', trig):
                      selDiLeptonsNew += [diL]
	      selDiLeptons = selDiLeptonsNew
              if len(selDiLeptons) == 0:
                  matching[trig][2]=0
              else:
                  if fillCounter: self.counters.counter('DiLepton').inc('jet trig matched')
                  matching[trig][2]=1
              
          event.diLeptonsTrigMatched += selDiLeptons
        
        event.diLeptonsTrigMatched = set(event.diLeptonsTrigMatched)
        
        ### need unix style wild card to macth different trigger versions in data
        for trig in matching.keys() :
          if fnm(trig,'HLT_DoubleMediumIsoPFTau35_Trk*_eta2p1_v*') :
            event.l1TrigMatched_diTau = matching[trig][0]
            event.l2TrigMatched_diTau = matching[trig][1]      
          if fnm(trig,'HLT_DoubleMediumIsoPFTau*_Trk*_eta2p1_Jet30_v*') :
            event.l1TrigMatched_diTauJet  = matching[trig][0]
            event.l2TrigMatched_diTauJet  = matching[trig][1]
            event.jetTrigMatched_diTauJet = matching[trig][2]        
        
        # testing leg1
        selDiLeptons = [ diL for diL in selDiLeptons if self.testLeg( diL.leg1() ) ]
        if len(selDiLeptons) == 0:
            return False
        else:
            if fillCounter: self.counters.counter('DiLepton').inc('leg1 offline cuts passed')

        # testing leg2 
        selDiLeptons = [ diL for diL in selDiLeptons if self.testLeg( diL.leg2() ) ]
        if len(selDiLeptons) == 0:
            return False
        else:
            if fillCounter: self.counters.counter('DiLepton').inc('leg2 offline cuts passed')

 
        # mass cut 
        selDiLeptons = [ diL for diL in selDiLeptons if self.testMass(diL) ]
        if len(selDiLeptons)==0:
            return False
        else:
            if fillCounter: self.counters.counter('DiLepton').inc('{min:3.1f} < m < {max:3.1f}'.format( min = self.cfg_ana.m_min, max = self.cfg_ana.m_max ))

        # exactly one? 
        if len(selDiLeptons)==0:
            return False
        elif len(selDiLeptons)==1:
            if fillCounter: self.counters.counter('DiLepton').inc('exactly 1 di-lepton')
        
        event.diLepton = self.bestDiLepton( selDiLeptons )
        event.leg1 = event.diLepton.leg1()
        event.leg2 = event.diLepton.leg2()
        
        # match with L1 particles, whether Central Jets or Taus
        L1Taus = self.handles['L1JetsTau'].product()
        L1Jets = self.handles['L1JetsCentral'].product()
        L1dR1T, L1dR2T, index1T, index2T = self.match(event.diLepton, L1Taus)
        L1dR1J, L1dR2J, index1J, index2J = self.match(event.diLepton, L1Jets)
        if L1dR1T < L1dR1J and L1dR1T<=0.5 :
          if L1Taus[index1T].pt()>44. and abs(L1Taus[index1T].eta())<2.1 :
            event.leg1.L1particle = L1Taus[index1T]
        if L1dR1J < L1dR1T and L1dR1J<=0.5 :
          if L1Jets[index1J].pt()>64. :
            event.leg1.L1particle = L1Jets[index1J]
        if L1dR2T < L1dR2J and L1dR2T<=0.5 :
          if L1Taus[index2T].pt()>44. and abs(L1Taus[index2T].eta())<2.1 :
            event.leg2.L1particle = L1Taus[index2T]
        if L1dR2J < L1dR2T and L1dR2J<=0.5 :
          if L1Jets[index2J].pt()>64. :
            event.leg2.L1particle = L1Jets[index2J]

        ### require trigger bit in Embedded RecHit
        if self.cfg_comp.isEmbed :
          #if len(event.hltPath)==0 : return False
          if not event.hltPath : return False
        
        #import pdb ; pdb.set_trace()
        return True
Example #15
0
    def selectionSequence(self,
                          event,
                          fillCounter,
                          leg1IsoCut=None,
                          leg2IsoCut=None):

        if fillCounter: self.counters.counter('DiLepton').inc('all events')

        if len(event.diLeptons) == 0:
            return False
        if fillCounter: self.counters.counter('DiLepton').inc('> 0 di-lepton')

        # testing di-lepton itself
        selDiLeptons = event.diLeptons

        if not self.leptonAccept(event.leptons):
            return False
        if fillCounter: self.counters.counter('DiLepton').inc('lepton accept')

        ## for embedded no hltPaths (for now)
        if not hasattr(event, 'hltPaths'):
            event.hltPaths = []

        matching = {}
        for trig in event.hltPaths:
            matching.update({trig: [-99, -99,
                                    -99]})  # {trigName:leg1,leg2,jet}

        event.diLeptonsTrigMatched = []

        for trig in event.hltPaths:
            if self.cfg_comp.isEmbed: continue  ## no matching for the embed
            selDiLeptons = event.diLeptons
            if len(self.cfg_comp.triggers) > 0:
                # trigger matching leg1
                selDiLeptons = [
                    diL for diL in selDiLeptons
                    if self.trigMatched(event, diL.leg1(), 'leg1', trig)
                ]
                if len(selDiLeptons) == 0:
                    matching[trig][0] = 0
                else:
                    if fillCounter:
                        self.counters.counter('DiLepton').inc(
                            'leg1 trig matched')
                    matching[trig][0] = 1

            if len(self.cfg_comp.triggers) > 0:
                # trigger matching leg2
                selDiLeptons = [
                    diL for diL in selDiLeptons
                    if self.trigMatched(event, diL.leg2(), 'leg2', trig)
                ]
                if len(selDiLeptons) == 0:
                    matching[trig][1] = 0
                else:
                    if fillCounter:
                        self.counters.counter('DiLepton').inc(
                            'leg2 trig matched')
                    matching[trig][1] = 1

            if len(self.cfg_comp.triggers) > 0 and len(
                    self.cfg_ana.triggerMap[trig]) > 2:
                # trigger matching jet
                cmgJets = self.handles['jets'].product()
                jets = []
                for cmgJet in cmgJets:
                    jet = Jet(cmgJet)
                    if self.testJet(jet):
                        jets.append(jet)

                selDiLeptonsNew = []
                for diL in selDiLeptons:
                    cleanJets, dummy = cleanObjectCollection(
                        jets, masks=[diL.leg1(), diL.leg2()], deltaRMin=0.5)
                    if len(cleanJets) > 0 and self.trigMatched(
                            event, cleanJets[0], 'jet', trig):
                        selDiLeptonsNew += [diL]
                selDiLeptons = selDiLeptonsNew
                if len(selDiLeptons) == 0:
                    matching[trig][2] = 0
                else:
                    if fillCounter:
                        self.counters.counter('DiLepton').inc(
                            'jet trig matched')
                    matching[trig][2] = 1

            event.diLeptonsTrigMatched += selDiLeptons

        event.diLeptonsTrigMatched = set(event.diLeptonsTrigMatched)

        ### need unix style wild card to macth different trigger versions in data
        for trig in matching.keys():
            if fnm(trig, 'HLT_DoubleMediumIsoPFTau35_Trk*_eta2p1_v*'):
                event.l1TrigMatched_diTau = matching[trig][0]
                event.l2TrigMatched_diTau = matching[trig][1]
            if fnm(trig, 'HLT_DoubleMediumIsoPFTau*_Trk*_eta2p1_Jet30_v*'):
                event.l1TrigMatched_diTauJet = matching[trig][0]
                event.l2TrigMatched_diTauJet = matching[trig][1]
                event.jetTrigMatched_diTauJet = matching[trig][2]

        # testing leg1
        selDiLeptons = [
            diL for diL in selDiLeptons if self.testLeg(diL.leg1())
        ]
        if len(selDiLeptons) == 0:
            return False
        else:
            if fillCounter:
                self.counters.counter('DiLepton').inc(
                    'leg1 offline cuts passed')

        # testing leg2
        selDiLeptons = [
            diL for diL in selDiLeptons if self.testLeg(diL.leg2())
        ]
        if len(selDiLeptons) == 0:
            return False
        else:
            if fillCounter:
                self.counters.counter('DiLepton').inc(
                    'leg2 offline cuts passed')

        # mass cut
        selDiLeptons = [diL for diL in selDiLeptons if self.testMass(diL)]
        if len(selDiLeptons) == 0:
            return False
        else:
            if fillCounter:
                self.counters.counter('DiLepton').inc(
                    '{min:3.1f} < m < {max:3.1f}'.format(
                        min=self.cfg_ana.m_min, max=self.cfg_ana.m_max))

        # exactly one?
        if len(selDiLeptons) == 0:
            return False
        elif len(selDiLeptons) == 1:
            if fillCounter:
                self.counters.counter('DiLepton').inc('exactly 1 di-lepton')

        event.diLepton = self.bestDiLepton(selDiLeptons)
        event.leg1 = event.diLepton.leg1()
        event.leg2 = event.diLepton.leg2()

        ### require trigger bit in Embedded RecHit
        if self.cfg_comp.isEmbed:
            if not event.hltPath: return False

        if "DY" in self.cfg_comp.name or "Higgs" in self.cfg_comp.name or self.cfg_comp.isEmbed:
            if event.leg1.decayMode() == 0:
                event.leg1.prongWeight = 0.88
            else:
                event.leg1.prongWeight = 1.
            if event.leg2.decayMode() == 0:
                event.leg2.prongWeight = 0.88
            else:
                event.leg2.prongWeight = 1.
        #import pdb ; pdb.set_trace()
        return True
Example #16
0
    def process(self, iEvent, event):

        self.readCollections(iEvent)
        self.counters.counter('MMT').inc('all events')

        event.muoncand     = self.buildLooseLeptons     (self.handles['muons'    ].product(), event)
        event.electroncand = self.buildLooseOtherLeptons(self.handles['electrons'].product(), event)
        event.taucand      = self.buildLooseTau         (self.handles['taus'     ].product(), event)

        cmgJets = self.handles['jets'].product()

        # fill the bjet collection
        event.CSVjet = []

        for cmgJet in cmgJets:
            jet = Jet( cmgJet )
            if self.testVetoBJet(jet):
                event.CSVjet.append(jet)

        # clean the electron collection from muons
        event.electroncand, dummpy = cleanObjectCollection(event.electroncand,
                                                           masks = event.muoncand,
                                                           deltaRMin = 0.5)

        # CSV veto
        electroncand_removebjet = []
        muoncand_removebjet     = []

        # clean the electrons from bjets
        for ielectron in event.electroncand:
            bm, dr2min = bestMatch(ielectron, event.CSVjet)
            if dr2min > 0.25:
                electroncand_removebjet.append(ielectron)

        # clean the muons from bjets
        for imuon in event.muoncand:
            bm, dr2min = bestMatch(imuon, event.CSVjet)
            if dr2min > 0.25:
                muoncand_removebjet.append(imuon)

        event.electroncand = electroncand_removebjet
        event.muoncand     = muoncand_removebjet

        for ii in event.electroncand:
            ii.flag_id    = self.eid(ii)
            ii.flag_iso   = self.eiso(ii)
            ii.trig_match = True # trigger matching temporarily disabled

        for ii in event.muoncand:
            ii.flag_id    = self.muid(ii)
            ii.flag_iso   = self.muiso(ii)
            ii.trig_match = True # trigger matching temporarily disabled

        event.loosetau = []

        for itau in event.taucand:

            itau.decaymode = itau.decayMode()
            itau.ep        = itau.calcEOverP()
            itau.flag_iso  = self.tauiso(itau)
            itau.flag_id   = self.tauid(itau)

            itau.againstERaw        = itau.tauID('againstElectronMVA3raw')
            itau.againstE2Raw       = itau.tauID('againstElectronMVA2raw')
            itau.againstE0Raw       = itau.tauID('againstElectronMVA')
            itau.againstECat        = int(round(itau.tauID('againstElectronMVA3category')))
            itau.againstE2Cat       = int(round(itau.tauID('againstElectronMVA2category')))
            itau.againstE0Cat       = int(round(itau.tauID('againstElectronMVAcategory')))
            itau.againstELooseArmin = itau.tauID("againstElectronLoose")
            itau.againstETight      = itau.tauID("againstElectronTightMVA3")
            itau.againstELoose      = itau.tauID("againstElectronLooseMVA3")
            itau.againstEMedium     = itau.tauID("againstElectronMediumMVA3")
            itau.againstE2Loose     = itau.tauID("againstElectronLooseMVA2")
            itau.againstE2Medium    = itau.tauID("againstElectronMediumMVA2")
            itau.againstE0Loose     = itau.tauID("againstElectronLooseMVA")
            itau.againstE0Medium    = itau.tauID("againstElectronMediumMVA")
            itau.againstMuLoose     = itau.tauID("againstMuonLoose")
            itau.againstMuTight     = itau.tauID("againstMuonTight")
            itau.dBisolation        = itau.tauID("byCombinedIsolationDeltaBetaCorrRaw3Hits")
            itau.mvaisolation       = itau.tauID("byRawIsoMVA")
            itau.mvaisolation_loose = itau.tauID('byLooseIsoMVA')

            event.loosetau.append(itau)

        event.taucand = event.loosetau

        # Additional tau veto
        event.vetotaucand      = self.buildVetoTau(self.handles['taus'].product(), event)
        event.vetomuoncand     = self.buildVetoLeptons(self.handles['muons'].product(), event)
        event.vetoelectroncand = self.buildVetoOtherLeptons(self.handles['electrons'].product(), event)

        flag_sscharge = False
        for im in event.muoncand:
            for ie in event.electroncand:
                if im.charge()*ie.charge()==1:
                    flag_sscharge = True

        self.counters.counter('MMT').inc('step1')

        if flag_sscharge==False:
            return False

        self.counters.counter('MMT').inc('step2')

        if not (len(event.muoncand)>=1 and len(event.electroncand)>=1):
            return False

        self.counters.counter('MMT').inc('step3')

        print 'All events passed : ', event.run, event.lumi, event.eventId

        return True
Example #17
0
    def process(self, iEvent, event):
        #read all the handles defined beforehand
        self.readCollections(iEvent)

        jetEtaCut = 4.5

        # get the vertexes
        event.vertices = self.handles['vertices'].product()
        self.h_nvtx.Fill(len(event.vertices))
        event.vertexBin = int(len(event.vertices))

        # get the jets in the jets variable
        jets = self.handles['jets'].product()
        # filter jets with some selections
        event.jets = [
            jet for jet in jets
            if (abs(jet.eta()) < jetEtaCut and jet.pt() > self.cfg_ana.ptCut
                and self.isPFLoose(jet))
        ]
        self.jetHistos.fillEvent(event.jets)

        try:
            # get status 2 leptons
            if 'leptons2' in self.mchandles:
                event.genLeptons = map(GenParticle,
                                       self.mchandles['leptons2'].product())
            else:
                event.genLeptons = [
                    lep for lep in self.mchandles['genParticles'].product()
                    if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(
                        lep.pdgId()) == 13 or abs(lep.pdgId()) == 15)
                ]
        except:
            event.genLeptons = None

        if event.genLeptons:
            #FIXME why are there cases in which there's 4 or 6 leptons?
            if len(event.genLeptons) != 2:
                return
            # in case I want to filter out taus
            # 11, 13, 15 : e, u, T
            # remove leptons from jets if closer than 0.2
            event.cleanJets = cleanObjectCollection(event.jets,
                                                    event.genLeptons, 0.2)
        else:
            event.cleanJets = event.jets

        ### event.matchingCleanJets = matchObjectCollection2 (event.cleanJets, event.selGenJets, 0.25)
        # assign to each jet its gen match (easy life :))
        event.selGenJets = []
        for jet in event.cleanJets:
            try:
                jet.gen = jet.genJet()
                jet.gen.pt()
                event.selGenJets.append(jet.gen)
            except:
                jet.gen = None

        for jet in event.selGenJets:
            self.h_genjetspt.Fill(jet.pt())
        self.jetHistos.fillStats(len(event.selGenJets), len(event.jets))

        ### try:
        ###     # get genJets
        ###     event.genJets = map (GenJet, self.mchandles['genJets'].product ())
        ###     event.selGenJets = event.genJets
        ###     for jet in event.selGenJets :
        ###         self.h_genjetspt.Fill (jet.pt ())
        ###
        ###     # first stats plots
        ###     self.jetHistos.fillStats (len (event.selGenJets), len (event.jets))
        ### except:
        ###     pass

        ## run the PileupJetIdAlgo and attach the id to the jet
        ijet = 0
        for jet in event.cleanJets:
            try:
                jet.puIdentifier = self.puidalgo.computeIdVariables(
                    jet.sourcePtr().get(), 0., event.vertices[0], self.runMva)
            except:
                jet.puIdentifier = self.puidalgo.computeIdVariables(
                    jet, 0., event.vertices[0], self.runMva)
            if self.cfg_ana.dumpTree:
                ## self.puidalgo.fillJet(jet.puIdentifier,ijet,0)
                self.puidalgo.setIJetIEvent(ijet, 0)
                self.treevars.nvtx = len(event.vertices)
                self.treevars.isMatched = False
                self.treevars.jetFlavour = -999
                self.treevars.genPt = 0.
                self.treevars.partonPt = 0.
                self.treevars.genDr = -100.
                if jet.gen:
                    self.treevars.isMatched = True
                    self.treevars.jetFlavour = jet.partonFlavour()
                    self.treevars.genPt = jet.gen.pt()
                    self.treevars.genDr = deltaR(jet.gen.eta(), jet.gen.phi(),
                                                 jet.eta(), jet.phi())
                    try:
                        self.treevars.partonPt = jet.genParton.pt()
                    except:
                        pass
                self.tree.Fill()
            ijet += 1

        self.cleanJetHistos.fillEvent(event.cleanJets)

        event.matchedCleanJets = [
            jet for jet in event.cleanJets if jet.gen != None
        ]

        event.unmatchedCleanJets = [
            jet for jet in event.cleanJets if jet.gen == None
        ]
        self.matchedCleanJetHistos.fillEvent(event.matchedCleanJets)
        self.unmatchedCleanJetHistos.fillEvent(event.unmatchedCleanJets)

        event.cleanGluJets = []
        event.cleanQuarkJets = []
        vtxbin = findBin(self.vtxBinLabels, len(event.vertices))
        for jet in event.matchedCleanJets:
            flav = abs(jet.partonFlavour())
            if flav == 21:
                event.cleanGluJets.append(jet)
            elif flav > 0 and flav <= 3:
                event.cleanQuarkJets.append(jet)
            jet.weight = self.reweight[1](getattr(jet, self.reweight[0])())
            etabin = findBin(self.etaBins, jet.eta())
            ### self.jetKin[vtxbin][etabin].fillJet(jet)

        if self.cfg_ana.doJetIdHisto:
            self.gluCleanHistosId.fillEvent(event.cleanGluJets, event.vertices)
            self.quarkCleanHistosId.fillEvent(event.cleanQuarkJets,
                                              event.vertices)
            ### self.matchedCleanHistosId.fillEvent(event.matchedCleanJets,event.vertices)
            self.reweiMatchedCleanHistosId.fillEvent(event.matchedCleanJets,
                                                     event.vertices)
            self.unmatchedCleanHistosId.fillEvent(event.unmatchedCleanJets,
                                                  event.vertices)
Example #18
0
    def process (self, iEvent, event) :
        #read all the handles defined beforehand
        self.readCollections (iEvent)
        
        jetEtaCut = 4.5 
        
        # get the vertexes
        event.vertices = self.handles['vertices'].product ()
        self.h_nvtx.Fill (len (event.vertices))
        event.vertexBin = int (len (event.vertices))
        
        # get the jets in the jets variable
        jets = self.handles['jets'].product ()
        # filter jets with some selections
        event.jets = [ jet for jet in jets if ( abs(jet.eta()) < jetEtaCut and jet.pt()>self.cfg_ana.ptCut and self.isPFLoose(jet) ) ]
        self.jetHistos.fillEvent (event.jets)
        
        # get status 2 leptons
        if 'genParticlesPruned' in self.mchandles:
            event.genLeptons = [ lep for lep in self.mchandles['genParticlesPruned'].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ]
        else:
            event.genLeptons = [ lep for lep in self.mchandles['genParticles'].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ]  
# @ Pasquale: why level 3 and not level 2?
#        event.selGenLeptons = [GenParticle (lep) for lep in event.genLeptons if (lep.pt ()>self.cfg_ana.ptCut and abs (lep.eta ()) < jetEtaCut)]
        
        # get genJets
        event.genJets = map (GenJet, self.mchandles['genJets'].product ())
        # filter genjets as for reco jets
        event.myGenJets = [GenJet (jet) for jet in event.genJets if (jet.pt ()>self.cfg_ana.genPtCut)]
        event.selGenJets = cleanObjectCollection (event.myGenJets, event.genLeptons, 0.2)
        # event.selGenJets = event.genJets
        for jet in event.selGenJets : 
            self.h_genjetspt.Fill (jet.pt ())
        
        event.noNegJets = [ jet for jet in event.jets if (jet.jecFactor(0) > 0) ]
#        event.noNegJets = [ jet for jet in event.jets]
        
        # first stats plots
        # print 'genLeptons : ' + repr (len (event.genLeptons)) + ' | genJets : ' + repr (len (event.genJets)) + ' | recoJets : ' + repr (len (event.jets))
        self.jetHistos.fillStats (len (event.selGenJets), len (event.noNegJets))
        
        #FIXME why are there cases in which there's 4 or 6 leptons?
        if len (event.genLeptons) > 2 :
            return
        # in case I want to filter out taus
        # 11, 13, 15 : e, u, T
#        event.genOneLepton = [GenParticle (part) for part in event.genLeptons if abs (part.pdgId ()) == 15]
        # remove leptons from jets if closer than 0.2
        event.cleanJets = cleanObjectCollection (event.noNegJets, event.genLeptons, 0.2)
#        event.cleanJets = event.noNegJets
        self.cleanJetHistos.fillEvent (event.cleanJets)
        
#        print len (jets),len (event.jets), len (event.noNegJets), len (event.cleanJets), len (event.genLeptons),"-->",(len (event.noNegJets) - len (event.cleanJets) - len (event.genLeptons))

        event.matchingCleanJets = matchObjectCollection2 (event.cleanJets, event.selGenJets, 0.25)
        # assign to each jet its gen match (easy life :))
        for jet in event.cleanJets :
            jet.gen = event.matchingCleanJets[ jet ]
        # FIXME next step might be to put this in the matching and remove the boolean flags

        event.matchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen != None]
        event.cleanGluJets = []
        event.cleanQuarkJets = []
        for jet in event.matchedCleanJets:
            flav = abs(jet.partonFlavour()) 
            if flav == 21:
                event.cleanGluJets.append(jet)
            elif flav > 0 and flav <= 3:
                event.cleanQuarkJets.append(jet)

        event.LPtmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen != None and jet.pt () <= 30]
        event.HPtmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen != None and jet.pt () > 30]

        self.matchedCleanJetHistos.fillEvent (event.matchedCleanJets)
        self.LPtmatchedCleanJetHistos.fillEvent (event.LPtmatchedCleanJets)
        self.HPtmatchedCleanJetHistos.fillEvent (event.HPtmatchedCleanJets)

        event.unmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen == None]
        event.LPtunmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen == None and jet.pt () <= 30]
        event.HPtunmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen == None and jet.pt () > 30]
        
        self.unmatchedCleanJetHistos.fillEvent (event.unmatchedCleanJets)
        self.LPtUnmatchedCleanJetHistos.fillEvent (event.LPtunmatchedCleanJets)
        self.HPtUnmatchedCleanJetHistos.fillEvent (event.HPtunmatchedCleanJets)
        
        self.matchedCleanJetHistosComponents.fillEvent (event.matchedCleanJets)
        
        self.unmatchedCleanJetHistosComponents.fillEvent (event.unmatchedCleanJets)
        
        self.matchedCleanJetHistosResolution.fillEvent (event.matchedCleanJets, len (event.vertices))
        
        for jet in event.matchedCleanJets :
            if abs (jet.gen.eta ()) < 1.4 :
                self.matchedCleanJetHistosResolution_barrel.fillJet (jet, len (event.vertices))
                self.matchedCleanJetHistos_barrel.fillJet (jet)
            elif 1.6 < abs (jet.gen.eta ()) < 2.5 :    
                self.matchedCleanJetHistosResolution_endtk.fillJet (jet, len (event.vertices))
                self.matchedCleanJetHistos_endtk.fillJet (jet)
            elif 2.6 < abs (jet.gen.eta ()) < 2.9 :    
                self.matchedCleanJetHistosResolution_endNOtk.fillJet (jet, len (event.vertices))
                self.matchedCleanJetHistos_endNOtk.fillJet (jet)
            elif 3.1 < abs (jet.gen.eta ()) :    
                self.matchedCleanJetHistosResolution_fwd.fillJet (jet, len (event.vertices))
                self.matchedCleanJetHistos_fwd.fillJet (jet)

        ##PG debugging for tails
        #for jet in event.matchedCleanJets :
            #deltaRR = deltaR( jet.eta (), jet.phi (), jet.gen.eta (), jet.gen.phi ())
            #self.h_matchDR.Fill (deltaRR)
            #self.h_relPtVSmatchDR.Fill (deltaRR, jet.pt () / jet.gen.pt ())
            #if abs (jet.gen.eta ()) > 2.5 and abs (jet.gen.eta ()) < 3 :
                #self.h_relPtVSchFrac.Fill (jet.chargedHadronEnergyFraction (), jet.pt () / jet.gen.pt ())

            #if jet.gen.pt () > 20 and jet.gen.pt () < 40 :
                #self.h_PTRatioVSgenEta.Fill (jet.gen.eta (), jet.pt () / jet.gen.pt ())
            #if abs (jet.gen.eta ()) > 1.6 :
                #self.h_PTRatioVSgenPt.Fill (jet.gen.pt (), jet.pt () / jet.gen.pt ())

            #minDelta = 10
            #secondClosest = jet
            #for recojet in event.cleanJets :
                #if recojet == jet : continue
                #dr2 = deltaR2( jet.gen.eta (), jet.gen.phi (), recojet.eta (), recojet.phi ())
                #if dr2 < minDelta :
                    #minDelta = dr2
                    #secondClosest = recojet 
            ##if len(event.vertices) < 10 or abs (jet.gen.eta ()) < 1.6: continue
            #self.h_secondClosestVsPtratio.Fill (jet.pt () / jet.gen.pt (), math.sqrt (minDelta))
            #if jet.pt () / jet.gen.pt () < 0.2 and jet.gen.pt () > 20 and abs (jet.gen.eta ()) < 3 and abs (jet.gen.eta ()) > 2.5 :
                #print '============',len(event.genLeptons)
                #print jet.pt (), jet.eta (), jet.phi (), jet.jecFactor (0)
                #print jet.gen.pt (), jet.gen.eta (), jet.gen.phi ()
                #print '------------ leptons:'
                #for lept in event.genLeptons :
                    #print lept.pt (), lept.eta (), lept.phi ()
                #print '------------'
                #for recojet in event.cleanJets :
                    #print "RECO",recojet.pt (), recojet.eta (), recojet.phi (), recojet.jecFactor (0)
                #for genjet in event.selGenJets :
                    #print "GEN ",genjet.pt (), genjet.eta (), genjet.phi ()

        #aveDeltaR = 0
        #num = 0
        #for recojet1 in event.cleanJets :
            #minDelta = 10
            #closest = recojet1
            #for recojet2 in event.cleanJets :
                #if recojet1 == recojet2 : continue
                #dr2 = deltaR2( recojet1.eta (), recojet1.phi (), recojet2.eta (), recojet2.phi ())
                #if dr2 < minDelta :
                    #minDelta = dr2
                    #closest = recojet2
            #if minDelta == 10 : continue
            #aveDeltaR = aveDeltaR + math.sqrt (minDelta)
            #num = num + 1
        #if num > 0 :
            #aveDeltaR = aveDeltaR / num
            #self.h_avedistanceVSNvtx.Fill (len(event.vertices), aveDeltaR)


        if self.doJetIdHisto:
            self.gluCleanHistosId.fillEvent(event.cleanGluJets,event.vertices)
            self.quarkCleanHistosId.fillEvent(event.cleanQuarkJets,event.vertices)
            ### self.matchedCleanHistosId.fillEvent(event.matchedCleanJets,event.vertices)
            self.reweiMatchedCleanHistosId.fillEvent(event.matchedCleanJets,event.vertices)
            self.unmatchedCleanHistosId.fillEvent(event.unmatchedCleanJets,event.vertices)
Example #19
0
    def process(self, iEvent, event):
        
        self.readCollections( iEvent )
        cmgJets = self.handles['jets'].product()

        allJets = []
        event.jets = []
        event.bJets = []
        event.cleanJets = []
        event.cleanBJets = []

        leg1 = event.diLepton.leg1()
        leg2 = event.diLepton.leg2()

        genJets = None
        if self.cfg_comp.isMC:
            genJets = map( GenJet, self.mchandles['genJets'].product() ) 
     
        for cmgJet in cmgJets:
            jet = Jet( cmgJet )
            allJets.append( jet )
            if self.cfg_comp.isMC and hasattr( self.cfg_comp, 'jetScale'):
                scale = random.gauss( self.cfg_comp.jetScale,
                                      self.cfg_comp.jetSmear )
                jet.scaleEnergy( scale )

            if self.testJet( jet ):
                event.jets.append(jet)
            if self.testBJet(jet):
                event.bJets.append(jet)
            if genJets:
                # Use DeltaR = 0.25 matching like JetMET
                pairs = matchObjectCollection( [jet], genJets, 0.25*0.25)
                if pairs[jet] is None:
                    pass
                    #jet.genJet = None
                else:
                    jet.genJet = pairs[jet] 

            #Add JER correction for MC jets. Requires gen-jet matching
            if self.cfg_comp.isMC and hasattr(self.cfg_ana, 'jerCorr') and self.cfg_ana.jerCorr:
                self.jerCorrection(jet)

        self.counters.counter('VBF').inc('all events')

        event.cleanJets, dummy = cleanObjectCollection( event.jets,
                                                        masks = [leg1,
                                                                 leg2 ],
                                                        deltaRMin = 0.5 )
        

        event.cleanBJets, dummy = cleanObjectCollection( event.bJets,
                                                         masks = [leg1,
                                                                  leg2 ],
                                                         deltaRMin = 0.5 )        

        pairs = matchObjectCollection( [ leg1,
                                         leg2 ], allJets, 0.5*0.5)

        # associating a jet to each leg
        leg1.jet = pairs[leg1]
        leg2.jet = pairs[leg2]
        if leg1.jet is None: #COLIN: I don't understand the code below...
            leg1.jet = leg1
        if leg2.jet is None:
            leg2.jet = leg2        

        # associating a leg to each clean jet
        invpairs = matchObjectCollection( event.cleanJets, [ leg1,leg2 ], 99999. )
        for jet in event.cleanJets:
            leg = invpairs[jet]
            jet.leg = leg

        for jet in event.cleanJets:
            jet.matchGenParton=999.0

        if self.cfg_comp.isMC and "BB" in self.cfg_comp.name:
            genParticles = self.mchandles['genParticles'].product()
            event.genParticles = map( GenParticle, genParticles)
            for gen in genParticles:
                if abs(gen.pdgId())==5 and gen.mother() and abs(gen.mother().pdgId())==21:
                    for jet in event.cleanJets:
                        dR=deltaR2(jet.eta(), jet.phi(), gen.eta(), gen.phi() )
                        if dR<jet.matchGenParton:
                            jet.matchGenParton=dR

        event.jets30 = [jet for jet in event.jets if jet.pt()>30]
        event.cleanJets30 = [jet for jet in event.cleanJets if jet.pt()>30]
        
        if len( event.jets30 )>=2:
            self.counters.counter('VBF').inc('at least 2 good jets')
               
        if len( event.cleanJets30 )>=2:
            self.counters.counter('VBF').inc('at least 2 clean jets')

        if len(event.cleanJets)<2:
            return True

        event.vbf = VBF( event.cleanJets, event.diLepton,
                         None, self.cfg_ana.cjvPtCut )
        if event.vbf.mjj > self.cfg_ana.Mjj:
            self.counters.counter('VBF').inc('M_jj > {cut:3.1f}'.format(cut=self.cfg_ana.Mjj) )
        else:
            return True 
        if abs(event.vbf.deta) > self.cfg_ana.deltaEta:
            self.counters.counter('VBF').inc('delta Eta > {cut:3.1f}'.format(cut=self.cfg_ana.deltaEta) )
        else:
            return True 
        if len(event.vbf.centralJets)==0:
            self.counters.counter('VBF').inc('no central jets')
        else:
            return True
        
        return True
Example #20
0
    def process (self, iEvent, event) :
        #read all the handles defined beforehand
        self.readCollections (iEvent)
#        print '-------'
        
        jetEtaCut = 4.5 
        
        event.vertices = self.handles['vertices'].product ()
        self.h_NVTXnum.Fill (len (event.vertices))
        
        YeCHSjets = self.handles['YeCHSjets'].product ()
        event.YeCHSjets = [ jet for jet in YeCHSjets if ( abs(jet.eta()) < jetEtaCut and jet.pt()>self.cfg_ana.ptCut and self.isPFLoose(jet) ) ]
        NoCHSjets = self.handles['NoCHSjets'].product ()
        event.NoCHSjets = [ jet for jet in NoCHSjets if ( abs(jet.eta()) < jetEtaCut and jet.pt()>self.cfg_ana.ptCut and self.isPFLoose(jet) ) ]
        
        # get status 2 leptons
        if 'genParticlesPruned' in self.mchandles:
            event.genLeptons = [ lep for lep in self.mchandles['genParticlesPruned'].product() if lep.status() == 2 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ]  
        else:
            event.genLeptons = [ lep for lep in self.mchandles['genParticles'].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ]  
        
        event.NoCHSgenJets = map (GenJet, self.mchandles['NoCHSgenJets'].product ())
        event.myNoCHSGenJets = [GenJet (jet) for jet in event.NoCHSgenJets if (jet.pt ()>self.cfg_ana.genPtCut)]
        event.selNoCHSGenJets = cleanObjectCollection (event.myNoCHSGenJets, event.genLeptons, 0.2)
        event.YeCHSgenJets = map (GenJet, self.mchandles['YeCHSgenJets'].product ())
        event.myYeCHSGenJets = [GenJet (jet) for jet in event.YeCHSgenJets if (jet.pt ()>self.cfg_ana.genPtCut)]
        event.selYeCHSGenJets = cleanObjectCollection (event.myYeCHSGenJets, event.genLeptons, 0.2)
        
        self.h_NoCHS_genjetsnum.Fill (len (event.selNoCHSGenJets)) 
        
        if len (event.genLeptons) > 2 :
            return
     
        for jet in event.selNoCHSGenJets:
            self.h_NoCHS_genjetspt.Fill (jet.pt ()) ;
            self.h_NoCHS_genjetseta.Fill (jet.eta ()) ;
        for jet in event.selYeCHSGenJets:
            self.h_YeCHS_genjetspt.Fill (jet.pt ()) ;
            self.h_YeCHS_genjetseta.Fill (jet.eta ()) ;

        event.cleanYeCHSJets = cleanObjectCollection (event.YeCHSjets, event.genLeptons, 0.2)
        event.cleanNoCHSJets = cleanObjectCollection (event.NoCHSjets, event.genLeptons, 0.2)
        for jet in event.cleanYeCHSJets :
            self.h_YeCHS_recjetspt       .Fill (jet.pt ()) ;
            self.h_YeCHS_recjetseta      .Fill (jet.eta ()) ; 
#            if (abs(jet.pt () > 20) and len(event.vertices) > 10):
#                self.h_YeCHS_correction.Fill (jet.eta (), 1. / jet.jecFactor(0)) ;
#                print 'Ev', event.iEv, 'YeCHS ', round (jet.eta (), 2), round (jet.phi (), 2), round (jet.pt () * jet.jecFactor(0), 2)#, round (jet.component (1).fraction (), 2)
                
        for jet in event.cleanNoCHSJets:
            self.h_NoCHS_recjetspt       .Fill (jet.pt ()) ;
            self.h_NoCHS_recjetseta      .Fill (jet.eta ()) ; 
#            if (abs(jet.pt () > 20) and len(event.vertices) > 10):
#                self.h_NoCHS_correction.Fill (jet.eta (), 1. / jet.jecFactor(0)) ;
#                print 'Ev', event.iEv, 'NoCHS ', round (jet.eta (), 2), round (jet.phi (), 2), round (jet.pt () * jet.jecFactor(0), 2)#, round (jet.component (1).fraction (), 2)
                
        #PG removing negative correction jets
        event.noNegCleanYeCHSJets = [ jet for jet in event.cleanYeCHSJets if (jet.jecFactor(0) > 0) ]
        event.noNegCleanNoCHSJets = [ jet for jet in event.cleanNoCHSJets if (jet.jecFactor(0) > 0) ]
        
        #PG matching between CHS and non CHS
        event.YeNoCHSmatch = matchObjectCollection2 (event.noNegCleanYeCHSJets, event.noNegCleanNoCHSJets, 0.1)
        for yejet, nojet in event.YeNoCHSmatch.iteritems():
            if nojet == None: 
                continue
            self.YeNoCHSRatio_eta.Fill (yejet.eta (), yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0)))
            self.h_NoCHS_correction.Fill (nojet.eta (), 1. / nojet.jecFactor(0))
            self.h_YeCHS_correction.Fill (yejet.eta (), 1. / yejet.jecFactor(0))

            if len (event.vertices) > 8 and len (event.vertices) <= 10:
                self.YeNoCHSRatio_eta_PUcut.Fill (yejet.eta (), yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0)))
                self.h_NoCHS_correction_PUcut.Fill (nojet.eta (), 1. / nojet.jecFactor(0))
                self.h_YeCHS_correction_PUcut.Fill (yejet.eta (), 1. / yejet.jecFactor(0))
            
            if nojet.pt () < 40 or nojet.pt () > 60:
                continue
            self.YeNoCHSRatio_eta_ptcut.Fill (yejet.eta (), yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0)))
            self.h_NoCHS_correction_ptcut.Fill (nojet.eta (), 1. / nojet.jecFactor(0))
            self.h_YeCHS_correction_ptcut.Fill (yejet.eta (), 1. / yejet.jecFactor(0))

            if len (event.vertices) < 8 or len (event.vertices) > 10:
                continue
            self.YeNoCHSRatio_eta_ptcut_PUcut.Fill (yejet.eta (), yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0)))
            self.h_NoCHS_correction_ptcut_PUcut.Fill (nojet.eta (), 1. / nojet.jecFactor(0))
            self.h_YeCHS_correction_ptcut_PUcut.Fill (yejet.eta (), 1. / yejet.jecFactor(0))



#            if yejet.pt () * yejet.jecFactor(0) < 10: 
#                continue ;
#            if abs (yejet.eta ()) < 3:
#                continue ;
#            print round (yejet.eta (), 2), '\t', round (yejet.pt () * yejet.jecFactor(0), 2),  '\t',round (nojet.pt () * nojet.jecFactor(0), 2),  '\t',round (yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0)), 2)
#            print round (yejet.eta (), 2), '\t', round (yejet.pt (), 2),  '\t',round (nojet.pt (), 2),  '\t',round (yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0)), 2)
        
        event.matchingCleanYeCHSJets = matchObjectCollection2 (event.cleanYeCHSJets, event.selYeCHSGenJets, 0.25)
        for jet in event.cleanYeCHSJets :
            jet.gen = event.matchingCleanYeCHSJets[ jet ]
        event.matchedCleanYeCHSJets = [jet for jet in event.matchingCleanYeCHSJets if jet.gen != None]

        for jet in event.matchedCleanYeCHSJets:
            self.h_YeCHS_recjetspt_match .Fill (jet.pt ()) ; 
            self.h_YeCHS_recjetseta_match.Fill (jet.eta ()) ;
            self.h_YeCHS_genjetspt_match .Fill (jet.gen.pt ()) ;
            self.h_YeCHS_genjetseta_match.Fill (jet.gen.eta ()) ;

        event.matchingCleanNoCHSJets = matchObjectCollection2 (event.cleanNoCHSJets, event.selNoCHSGenJets, 0.25)
        for jet in event.cleanNoCHSJets :
            jet.gen = event.matchingCleanNoCHSJets[ jet ]
        event.matchedCleanNoCHSJets = [jet for jet in event.matchingCleanNoCHSJets if jet.gen != None]
        
        for jet in event.matchedCleanNoCHSJets:
            self.h_NoCHS_recjetspt_match .Fill (jet.pt ()) ; 
            self.h_NoCHS_recjetseta_match.Fill (jet.eta ()) ;
            self.h_NoCHS_genjetspt_match .Fill (jet.gen.pt ()) ;
            self.h_NoCHS_genjetseta_match.Fill (jet.gen.eta ()) ;
        
        if len (event.vertices) != 10 :
            return ;
        for jet in event.matchedCleanNoCHSJets:
            if (jet.gen.pt () < 20 or jet.gen.pt () > 30 or abs (jet.gen.eta ()) > 1.4) : continue ; 
            self.h_NoCHS_response.Fill ((jet.pt () - jet.gen.pt ()) / jet.gen.pt ()) ;
        for jet in event.matchedCleanYeCHSJets:
            if (jet.gen.pt () < 20 or jet.gen.pt () > 30 or abs (jet.gen.eta ()) > 1.4) : continue ; 
            self.h_YeCHS_response.Fill ((jet.pt () - jet.gen.pt ()) / jet.gen.pt ()) ;
Example #21
0
    def process(self, iEvent, event):
        
        self.readCollections( iEvent )
        cmgJets = self.handles['jets'].product()

        allJets = []
        event.jets = []
        event.bJets = []
        event.cleanJets = []
        event.cleanBJets = []

        leptons = []
        if hasattr(event, 'selectedLeptons'):
            leptons = event.selectedLeptons


        genJets = None
        if self.cfg_comp.isMC:
            genJets = map( GenJet, self.mchandles['genJets'].product() ) 
            
        for cmgJet in cmgJets:
            jet = Jet( cmgJet )
            allJets.append( jet )
            if self.cfg_comp.isMC and hasattr( self.cfg_comp, 'jetScale'):
                scale = random.gauss( self.cfg_comp.jetScale,
                                      self.cfg_comp.jetSmear )
                jet.scaleEnergy( scale )
            if genJets:
                # Use DeltaR = 0.25 matching like JetMET
                pairs = matchObjectCollection( [jet], genJets, 0.25*0.25)
                if pairs[jet] is None:
                    pass
                else:
                    jet.matchedGenJet = pairs[jet] 

            #Add JER correction for MC jets. Requires gen-jet matching. 
            if self.cfg_comp.isMC and hasattr(self.cfg_ana, 'jerCorr') and self.cfg_ana.jerCorr:
                self.jerCorrection(jet)

            #Add JES correction for MC jets.
            if self.cfg_comp.isMC and hasattr(self.cfg_ana, 'jesCorr'):
                self.jesCorrection(jet, self.cfg_ana.jesCorr)
            if self.testJet( jet ):
                event.jets.append(jet)
            if self.testBJet(jet):
                event.bJets.append(jet)


                
        self.counters.counter('jets').inc('all events')

        event.cleanJets, dummy = cleanObjectCollection( event.jets,
                                                        masks = leptons,
                                                        deltaRMin = 0.5 )
        

        event.cleanBJets, dummy = cleanObjectCollection( event.bJets,
                                                         masks = leptons,
                                                         deltaRMin = 0.5 )        

        pairs = matchObjectCollection( leptons, allJets, 0.5*0.5)


        # associating a jet to each lepton
        for lepton in leptons:
            jet = pairs[lepton]
            if jet is None:
                lepton.jet = lepton
            else:
                lepton.jet = jet

        # associating a leg to each clean jet
        invpairs = matchObjectCollection( event.cleanJets, leptons, 99999. )
        for jet in event.cleanJets:
            leg = invpairs[jet]
            jet.leg = leg

        for jet in event.cleanJets:
            jet.matchGenParton=999.0

        if self.cfg_comp.isMC and "BB" in self.cfg_comp.name:
            genParticles = self.mchandles['genParticles'].product()
            event.genParticles = map( GenParticle, genParticles)
            for gen in genParticles:
                if abs(gen.pdgId())==5 and gen.mother() and abs(gen.mother().pdgId())==21:
                    for jet in event.cleanJets:
                        dR=deltaR2(jet.eta(), jet.phi(), gen.eta(), gen.phi() )
                        if dR<jet.matchGenParton:
                            jet.matchGenParton=dR

        event.jets30 = [jet for jet in event.jets if jet.pt()>30]
        event.cleanJets30 = [jet for jet in event.cleanJets if jet.pt()>30]
        
        if len( event.jets30 )>=2:
            self.counters.counter('jets').inc('at least 2 good jets')
               
        if len( event.cleanJets30 )>=2:
            self.counters.counter('jets').inc('at least 2 clean jets')

        if len(event.cleanJets)<2:
            return True

        return True
    def process(self, iEvent, event):
        #read all the handles defined beforehand
        self.readCollections(iEvent)

        jetEtaCut = 4.5

        # get the vertexes
        event.vertices = self.handles['vertices'].product()
        #        self.h_nvtx.Fill (len (event.vertices))

        # get the jets in the jets variable
        jets = self.handles['jets'].product()
        # filter jets with some selections
        event.jets = [
            jet for jet in jets
            if (abs(jet.eta()) < jetEtaCut and jet.pt() > self.cfg_ana.ptCut
                and self.isPFLoose(jet))
        ]

        # get status 2 leptons
        if 'genParticlesPruned' in self.mchandles:
            event.genLeptons = [
                lep for lep in self.mchandles['genParticlesPruned'].product()
                if lep.status() == 2 and (abs(lep.pdgId()) == 11 or abs(
                    lep.pdgId()) == 13 or abs(lep.pdgId()) == 15)
            ]
        else:
            event.genLeptons = [
                lep for lep in self.mchandles['genParticles'].product()
                if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(
                    lep.pdgId()) == 13 or abs(lep.pdgId()) == 15)
            ]
# @ Pasquale: why level 3 and not level 2?
#        event.selGenLeptons = [GenParticle (lep) for lep in event.genLeptons if (lep.pt ()>self.cfg_ana.ptCut and abs (lep.eta ()) < jetEtaCut)]

# get genJets
        event.genJets = map(GenJet, self.mchandles['genJets'].product())
        # filter genjets as for reco jets
        event.selGenJets = [
            GenJet(jet) for jet in event.genJets
            if (jet.pt() > self.cfg_ana.genPtCut)
        ]

        #FIXME why are there cases in which there's 4 or 6 leptons?
        if len(event.genLeptons) != 2:
            return
        # in case I want to filter out taus
        # 11, 13, 15 : e, u, T
#        event.genOneLepton = [GenParticle (part) for part in event.genLeptons if abs (part.pdgId ()) == 15]
# remove leptons from jets if closer than 0.2
        event.cleanJets = cleanObjectCollection(event.jets, event.genLeptons,
                                                0.2)
        event.matchingCleanJets = matchObjectCollection2(
            event.cleanJets, event.selGenJets, 0.25)
        # assign to each jet its gen match (easy life :))
        for jet in event.cleanJets:
            jet.gen = event.matchingCleanJets[jet]

        event.matchedCleanJets = [
            jet for jet in event.matchingCleanJets if jet.gen != None
        ]
        for jet in event.matchedCleanJets:
            self.myntuple.Fill(jet.gen.pt(), jet.pt(), jet.gen.eta(),
                               jet.eta(), jet.gen.phi(), jet.phi(),
                               len(event.vertices))