def process(self, iEvent, event):
        event.isFake = 0
        if not self.cfg_comp.isMC:
            return True
        result = super(DYJetsFakeAnalyzer, self).process(iEvent, event)

        # check if it is a Z->tau tau event.
        tauDaus, bosonPresent = bosonToX(event.genParticles, 23, 15)
        if not bosonPresent:
            event.isFake = 0
        else:
            # isZtautau = len( tauDaus )==2
            taus = filter(lambda x: x.status() == 3 and abs(x.pdgId()) == 15, event.genParticles)
            isZtautau = len(taus) == 2

            hadronicTaus = [tau for tau in taus if self.isHadronicTau(tau)]

            # print '-'*50
            # print map(str, taus)
            # print isZtautau

            # Updated recipe Aug 2013: match both electrons and muons regardless of status
            # with pt > 8
            genLeptons = filter(
                lambda x: x.pt() > 8.0 and (abs(x.pdgId()) == 11 or abs(x.pdgId()) == 13), event.genParticles
            )
            # genLegs, dummy = bosonToX( event.genParticles, 23,
            # self.cfg_ana.leptonType )
            # import pdb; pdb.set_trace()
            lepPairs = matchObjectCollection([event.diLepton.leg1(), event.diLepton.leg2()], genLeptons, 0.5 ** 2)
            tauPairs = matchObjectCollection([event.diLepton.leg1(), event.diLepton.leg2()], hadronicTaus, 0.5 ** 2)

            # if lepPairs[event.diLepton.leg1()] and lepPairs[event.diLepton.leg2()]:

            # Updated recipe: Only match tau leg, not lepton leg
            # This assumes that leg 1 is the hadronic tau!
            if isZtautau and not lepPairs[event.diLepton.leg1()] and tauPairs[event.diLepton.leg1()]:
                event.isFake = 0
            elif isZtautau and lepPairs[event.diLepton.leg1()]:
                event.isFake = 3
            elif not isZtautau and lepPairs[event.diLepton.leg1()]:
                # import pdb; pdb.set_trace()
                # print 'fake1',event.diLepton.leg1().pdgId(), event.diLepton.leg2().pdgId()
                event.isFake = 1
            # Keep this explicitly, but would be covered by global else below
            elif isZtautau and not tauPairs[event.diLepton.leg1()]:
                event.isFake = 2
            elif not isZtautau and not lepPairs[event.diLepton.leg1()]:
                event.isFake = 2
            else:
                print "WARNING: Logic issue, no assignment in DY jets fake analyzer"
        if self.cfg_ana.verbose:
            # import pdb; pdb.set_trace()
            print event.diLepton
            print "isFake = ", event.isFake
        return True
Beispiel #2
0
    def process(self, iEvent, event):
        self.readCollections(iEvent)

        ## Read jets, if necessary recalibrate
        allJets = map(Jet, self.handles['jets'].product())
        if self.cfg_ana.recalibrateJets:
            #print "\nCalibrating jets %s for lumi %d, event %d" % (self.cfg_ana.jetCol, event.lumi, event.eventId)
            rho = float(self.handles['rho'].product()[0])
            corr = self.jetReCalibratorCHS if 'CHS' in self.cfg_ana.jetCol else self.jetReCalibrator
            for j in allJets:
                corr.correct(j, rho, delta=self.shiftJEC)

        ## If using a different collection for MVA, set it up
        allJets4MVA = []
        if self.cfg_ana.jetCol4MVA != self.cfg_ana.jetCol:
            allJets4MVA = map(Jet, self.handles['jets4MVA'].product())
            if self.cfg_ana.recalibrateJets:
                #print "\nCalibrating jets %s for lumi %d, event %d" % (self.cfg_ana.jetCol4MVA, event.lumi, event.eventId)
                rho = float(self.handles['rho'].product()[0])
                corr = self.jetReCalibratorCHS if 'CHS' in self.cfg_ana.jetCol4MVA else self.jetReCalibrator
                for j in allJets4MVA:
                    corr.correct(j, rho, delta=self.shiftJEC)
        else:
            allJets4MVA = allJets[:]

        ## Apply jet selection
        event.jets = []
        event.jetsFailId = []
        for jet in allJets:
            if self.testJetNoID(jet):
                if self.testJetID(jet):
                    event.jets.append(jet)
                else:
                    event.jetsFailId.append(jet)

        ## Clean Jets from leptons
        leptons = event.selectedLeptons
        #event.cleanJets, dummy = cleanObjectCollection( event.jets,
        #                                                masks = leptons,
        #                                                deltaRMin = 0.5 )
        event.cleanJetsAll = cleanNearestJetOnly(event.jets, leptons, 0.5)
        event.cleanJets = [
            j for j in event.cleanJetsAll
            if abs(j.eta()) < self.cfg_ana.jetEtaCentral
        ]
        event.cleanJetsFwd = [
            j for j in event.cleanJetsAll
            if abs(j.eta()) >= self.cfg_ana.jetEtaCentral
        ]

        ## Associate jets to leptons
        jlpairs = matchObjectCollection(leptons, allJets4MVA, 0.5 * 0.5)
        for lep in leptons:
            jet = jlpairs[lep]
            if jet is None:
                lep.jet = lep
            else:
                lep.jet = jet

        return True
Beispiel #3
0
    def process(self, iEvent, event):
        self.readCollections( iEvent )

        ## Read jets, if necessary recalibrate
        allJets = map(Jet, self.handles['jets'].product()) 
        if self.cfg_ana.recalibrateJets:
            #print "\nCalibrating jets %s for lumi %d, event %d" % (self.cfg_ana.jetCol, event.lumi, event.eventId)
            rho  = float(self.handles['rho'].product()[0])
            corr = self.jetReCalibratorCHS if 'CHS' in self.cfg_ana.jetCol else self.jetReCalibrator
            for j in allJets: corr.correct(j, rho, delta=self.shiftJEC)
       
        ## If using a different collection for MVA, set it up 
        allJets4MVA = []
        if self.cfg_ana.jetCol4MVA != self.cfg_ana.jetCol:
            allJets4MVA = map(Jet, self.handles['jets4MVA'].product())
            if self.cfg_ana.recalibrateJets:
                #print "\nCalibrating jets %s for lumi %d, event %d" % (self.cfg_ana.jetCol4MVA, event.lumi, event.eventId)
                rho  = float(self.handles['rho'].product()[0])
                corr = self.jetReCalibratorCHS if 'CHS' in self.cfg_ana.jetCol4MVA else self.jetReCalibrator
                for j in allJets4MVA: corr.correct(j, rho, delta=self.shiftJEC)
        else:
            allJets4MVA = allJets[:]

        ## Apply jet selection
        event.jets = []
        event.jetsFailId = []
        for jet in allJets:
            if self.testJetNoID( jet ): 
                if self.testJetID (jet ):
                    event.jets.append(jet)
                else:
                    event.jetsFailId.append(jet)
        
        ## Clean Jets from leptons
        leptons = event.selectedLeptons
        #event.cleanJets, dummy = cleanObjectCollection( event.jets,
        #                                                masks = leptons,
        #                                                deltaRMin = 0.5 )
        event.cleanJetsAll = cleanNearestJetOnly(event.jets, leptons, 0.5)
        event.cleanJets    = [j for j in event.cleanJetsAll if abs(j.eta()) <  self.cfg_ana.jetEtaCentral ]
        event.cleanJetsFwd = [j for j in event.cleanJetsAll if abs(j.eta()) >= self.cfg_ana.jetEtaCentral ]

        ## Associate jets to leptons
        jlpairs = matchObjectCollection( leptons, allJets4MVA, 0.5*0.5)
        for lep in leptons:
            jet = jlpairs[lep]
            if jet is None:
                lep.jet = lep
            else:
                lep.jet = jet

        return True
Beispiel #4
0
    def process(self, iEvent, event ):
        self.readCollections(iEvent)

        event.gen = []
        for genp in self.mchandles['gen'].product():
            if abs(genp.pdgId())!= self.cfg_ana.gen_pdgId:
                continue
            event.gen.append( GenParticle(genp) )

        event.col1 =  map(PhysicsObject, self.handles['col1'].product())
        event.col2 =  map(PhysicsObject, self.handles['col2'].product())

        for p in event.col1:
            if hasattr( self.cfg_ana, 'sel1'):
                p.selected = self.cfg_ana.sel1( p )
            else:
                p.selected = True
                
        for p in event.col2:
            if hasattr( self.cfg_ana, 'sel2'):
                p.selected = self.cfg_ana.sel2( p )
            else:
                p.selected = True
                
                
            
        # first collection is taken as a pivot.
        # will store in the tree all instances in col1, and each time,
        # the closest object in col2

        event.pairs = matchObjectCollection( event.col1, event.col2,
                                             self.cfg_ana.deltaR )

        event.pairsG1 = matchObjectCollection( event.gen, event.col1,
                                               self.cfg_ana.deltaR )

        event.pairsG2 = matchObjectCollection( event.gen, event.col2,
                                               self.cfg_ana.deltaR )
    def process(self, iEvent, event):
        self.readCollections(iEvent)

        event.gen = []
        for genp in self.mchandles['gen'].product():
            if abs(genp.pdgId()) != self.cfg_ana.gen_pdgId:
                continue
            event.gen.append(GenParticle(genp))

        event.col1 = map(PhysicsObject, self.handles['col1'].product())
        event.col2 = map(PhysicsObject, self.handles['col2'].product())

        for p in event.col1:
            if hasattr(self.cfg_ana, 'sel1'):
                p.selected = self.cfg_ana.sel1(p)
            else:
                p.selected = True

        for p in event.col2:
            if hasattr(self.cfg_ana, 'sel2'):
                p.selected = self.cfg_ana.sel2(p)
            else:
                p.selected = True

        # first collection is taken as a pivot.
        # will store in the tree all instances in col1, and each time,
        # the closest object in col2

        event.pairs = matchObjectCollection(event.col1, event.col2,
                                            self.cfg_ana.deltaR)

        event.pairsG1 = matchObjectCollection(event.gen, event.col1,
                                              self.cfg_ana.deltaR)

        event.pairsG2 = matchObjectCollection(event.gen, event.col2,
                                              self.cfg_ana.deltaR)
Beispiel #6
0
    def process(self, iEvent, event):
        event.isFake = 0
        if not self.cfg_comp.isMC:
            return True
        result = super(DYJetsFakeAnalyzer, self).process(iEvent, event)
        
        # check if it is a Z->tau tau event.
        tauDaus, bosonPresent = bosonToX( event.genParticles, 23, 15)
        if not bosonPresent:
            event.isFake = 0
        else:
            # isZtautau = len( tauDaus )==2
            taus = filter(lambda x: x.status()==3 and abs(x.pdgId())==15,
                          event.genParticles)
            isZtautau = len(taus)==2
            # print '-'*50
            # print map(str, taus)
            # print isZtautau

            # Updated recipe Aug 2013: match both electrons and muons regardless of status 
            # with pt > 8
            genLeptons = filter(lambda x: x.pt() > 8. and (abs(x.pdgId()) == 11 or abs(x.pdgId()) == 13), event.genParticles)
            # genLegs, dummy = bosonToX( event.genParticles, 23,
                                       # self.cfg_ana.leptonType )
            # import pdb; pdb.set_trace()
            pairs = matchObjectCollection( [event.diLepton.leg1(),
                                            event.diLepton.leg2()],
                                           genLeptons, 0.5**2 )
            # if pairs[event.diLepton.leg1()] and pairs[event.diLepton.leg2()]:

            # Updated recipe: Only match tau leg, not lepton leg
            # This assumes that leg 1 is the hadronic tau!
            if isZtautau and not pairs[event.diLepton.leg1()]:
                event.isFake = 0
            elif isZtautau and pairs[event.diLepton.leg1()]:
                event.isFake = 3
            elif pairs[event.diLepton.leg1()]:
                # import pdb; pdb.set_trace()
                # print 'fake1',event.diLepton.leg1().pdgId(), event.diLepton.leg2().pdgId()
                event.isFake = 1
            else:
                event.isFake = 2
        if self.cfg_ana.verbose:
            # import pdb; pdb.set_trace()
            print event.diLepton
            print 'isFake = ', event.isFake
        return True
 def process(self, iEvent, event):
     event.isFake = 0
     if not self.cfg_comp.isMC:
         return True
     result = super(DYJetsFakeAnalyzer, self).process(iEvent, event)
     
     # check if it is a Z->tau tau event.
     tauDaus, bosonPresent = bosonToX( event.genParticles, 23, 15)
     if not bosonPresent:
         event.isFake = 0
     else:
         # isZtautau = len( tauDaus )==2
         taus = filter(lambda x: x.status()==3 and abs(x.pdgId())==15,
                       event.genParticles)
         isZtautau = len(taus)==2
         # print '-'*50
         # print map(str, taus)
         # print isZtautau
         if isZtautau:
             event.isFake = 0
         else:
             genLegs, dummy = bosonToX( event.genParticles, 23,
                                        self.cfg_ana.leptonType )
             # import pdb; pdb.set_trace()
             pairs = matchObjectCollection( [event.diLepton.leg1(),
                                             event.diLepton.leg2()],
                                            genLegs, 0.3**2 )
             if pairs[event.diLepton.leg1()] and pairs[event.diLepton.leg2()]:
                 # import pdb; pdb.set_trace()
                 # print 'fake1',event.diLepton.leg1().pdgId(), event.diLepton.leg2().pdgId()
                 event.isFake = 1
             else:
                 event.isFake = 2
     if self.cfg_ana.verbose:
         # import pdb; pdb.set_trace()
         print event.diLepton
         print 'isFake = ', event.isFake
     return True
Beispiel #8
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
Beispiel #9
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
Beispiel #10
0
    def process(self, iEvent, event):
        event.isFake = 0
        if not self.cfg_comp.isMC:
            return True
        result = super(DYJetsFakeAnalyzer, self).process(iEvent, event)

        # check if it is a Z->tau tau event.
        tauDaus, bosonPresent = bosonToX(event.genParticles, 23, 15)
        if not bosonPresent:
            event.isFake = 0
        else:
            # isZtautau = len( tauDaus )==2
            taus = filter(lambda x: x.status() == 3 and abs(x.pdgId()) == 15,
                          event.genParticles)
            isZtautau = len(taus) == 2

            hadronicTaus = [tau for tau in taus if self.isHadronicTau(tau)]

            # print '-'*50
            # print map(str, taus)
            # print isZtautau

            # Updated recipe Aug 2013: match both electrons and muons regardless of status
            # with pt > 8
            genLeptons = filter(
                lambda x: x.pt() > 8. and
                (abs(x.pdgId()) == 11 or abs(x.pdgId()) == 13),
                event.genParticles)
            # genLegs, dummy = bosonToX( event.genParticles, 23,
            # self.cfg_ana.leptonType )
            # import pdb; pdb.set_trace()
            lepPairs = matchObjectCollection(
                [event.diLepton.leg1(),
                 event.diLepton.leg2()], genLeptons, 0.5**2)
            tauPairs = matchObjectCollection(
                [event.diLepton.leg1(),
                 event.diLepton.leg2()], hadronicTaus, 0.5**2)

            # if lepPairs[event.diLepton.leg1()] and lepPairs[event.diLepton.leg2()]:

            # Updated recipe: Only match tau leg, not lepton leg
            # This assumes that leg 1 is the hadronic tau!
            if isZtautau and not lepPairs[event.diLepton.leg1()] and tauPairs[
                    event.diLepton.leg1()]:
                event.isFake = 0
            elif isZtautau and lepPairs[event.diLepton.leg1()]:
                event.isFake = 3
            elif not isZtautau and lepPairs[event.diLepton.leg1()]:
                # import pdb; pdb.set_trace()
                # print 'fake1',event.diLepton.leg1().pdgId(), event.diLepton.leg2().pdgId()
                event.isFake = 1
            # Keep this explicitly, but would be covered by global else below
            elif isZtautau and not tauPairs[event.diLepton.leg1()]:
                event.isFake = 2
            elif not isZtautau and not lepPairs[event.diLepton.leg1()]:
                event.isFake = 2
            else:
                print 'WARNING: Logic issue, no assignment in DY jets fake analyzer'
        if self.cfg_ana.verbose:
            # import pdb; pdb.set_trace()
            print event.diLepton
            print 'isFake = ', event.isFake
        return True
Beispiel #11
0
    def process(self, iEvent, event):
        
        self.readCollections( iEvent )
        cmgJets = self.handles['jets'].product()

        print 'cmgJets = ', len(cmgJets)

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

#        import pdb; pdb.set_trace();

        leptons = []
        if hasattr(event, 'selectedLeptons'):
            leptons = event.selectedLeptons
#        elif hasattr(event, 'muoncand'):
##            leptons = event.muoncand + event.electroncand + event.taucand
#            leptons = event.muon + event.electron + event.tau
#            print '# of leptons = ', len(leptons)

        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')

#        print 'check =', len(event.muon), len(event,electron), len(event.tau)


#        if isinstance(event.muoncand, list):
#            event.cleanBJets, dummy = cleanObjectCollection( event.bJets,
#                                                             masks = event.muoncand,
#                                                             deltaRMin = 0.4 )
#
#            event.cleanJets, dummy = cleanObjectCollection( event.jets,
#                                                            masks = event.muoncand,
#                                                            deltaRMin = 0.4 )
#
#        else:
#            event.cleanBJets, dummy = cleanObjectCollection( event.bJets,
#                                                             masks = [event.muoncand],
#                                                             deltaRMin = 0.4 )
#            
#            event.cleanJets, dummy = cleanObjectCollection( event.jets,
#                                                            masks = [event.muoncand],
#                                                            deltaRMin = 0.4 )
#
#        if isinstance(event.electroncand, list):
#            event.cleanBJets, dummy = cleanObjectCollection( event.cleanBJets,
#                                                             masks = event.electroncand,
#                                                             deltaRMin = 0.4 )
#
#            event.cleanJets, dummy = cleanObjectCollection( event.cleanJets,
#                                                            masks = event.electroncand,
#                                                            deltaRMin = 0.4 )
#
#        else:
#            event.cleanBJets, dummy = cleanObjectCollection( event.cleanBJets,
#                                                             masks = [event.electroncand],
#                                                             deltaRMin = 0.4 )
#            
#            
#            event.cleanJets, dummy = cleanObjectCollection( event.cleanJets,
#                                                            masks = [event.electroncand],
#                                                            deltaRMin = 0.4 )
#
#
#        if isinstance(event.taucand, list):
#            event.cleanBJets, dummy = cleanObjectCollection( event.cleanBJets,
#                                                             masks = event.taucand,
#                                                             deltaRMin = 0.4 )
#
#            event.cleanJets, dummy = cleanObjectCollection( event.cleanJets,
#                                                            masks = event.taucand,
#                                                            deltaRMin = 0.4 )
#
#        else:
#            event.cleanBJets, dummy = cleanObjectCollection( event.cleanBJets,
#                                                             masks = [event.taucand],
#                                                             deltaRMin = 0.4 )
#            
#            
#            event.cleanJets, dummy = cleanObjectCollection( event.cleanJets,
#                                                            masks = [event.taucand],
#                                                            deltaRMin = 0.4 )


        
        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')

        event.cleanJets = event.jets
        event.cleanBJets = event.bJets

#        print 'cleanJets = ', len(event.jets)
#        print 'clean_bJets = ', len(event.bJets)

#        if len(event.bJets)>0:
#        if len(event.cleanBJets)>0:
#            import pdb; pdb.set_trace()
#            return False

        self.counters.counter('jets').inc('No b jets')
        return True
Beispiel #12
0
    def process(self, iEvent, event):
        self.readCollections( iEvent )

        event.pusi = map( PileUpSummaryInfo, self.mchandles['pusi'].product() )
        event.vertices = self.handles['vertices'].product()
        
        event.rec = self.handles['rec'].product()
        event.gen = self.mchandles['gen'].product()

        # if refselFun is given, this function is applied to select reconstructed objects
        # to be used as a reference
        refselFun = None
        if hasattr( self.cfg_ana, 'refselFun'):
            refselFun = self.cfg_ana.refselFun
        if refselFun is not None:
            event.refsel = [ PhysicsObject(obj) for obj in event.rec if refselFun(obj)]
        else:
            event.refsel = event.gen


        # if recselfun is given, this function is applied to select reconstructed objects
        # for which we want to measure the efficiency w/r to the reference
        recselFun = None
        if hasattr( self.cfg_ana, 'recselFun'):
            recselFun = self.cfg_ana.recselFun
        if recselFun is not None:
            if recselFun == 'trigObjs':
                event.recsel = selTriggerObjects( event.triggerObjects,
                                                  event.hltPath,
                                                  self.filterForPath( event.hltPath ))
            else:
                event.recsel = [ PhysicsObject(obj) for obj in event.rec if recselFun(obj)]
        else:
            event.recsel = event.rec


        # selecting gen objects
        genpdgid = self.cfg_ana.genPdgId
        event.gensel = []
        for obj in event.gen:
            # print obj.pdgId()
            if abs(obj.pdgId())!=genpdgid: continue
            if self.cfg_ana.genTrigMatch and \
               not self.trigMatched( obj, event): continue
            event.gensel.append( obj )

        if len(event.gensel ) == 0:
            return False
            
        # gen objects matched to a reference lepton
        # DON'T NEED THIS MATCHING IF NO REFSEL
        event.genmatchedRef = event.gen
        if event.refsel is not None:
            pairs = matchObjectCollection( event.gensel, event.refsel, 0.1)
            event.genmatchedRef = [ gen for gen,ref in pairs.iteritems() if ref is not None]

        # and gen objects wich are in addition matched to a
        # selected lepton
        pairs = matchObjectCollection( event.genmatchedRef, event.recsel, 0.1)
        event.genmatched = [ gen for gen,rec in pairs.iteritems() if rec is not None]

        # reweighting OOTPU in chamonix samples to the OOTPU observed in Fall11 samples
        weight = 1
        if self.cfg_comp.name.find('Chamonix')!=-1:
            weight = ootPUReweighter.getWeight( event.pusi[1].nPU(), event.pusi[2].nPU())
        
        for space in self.phaseSpaces:        
            space.denomHistos.fillParticles( event.genmatchedRef, event, weight)
            space.numHistos.fillParticles( event.genmatched, event, weight)
            # space.counter.inc('passed')

        self.counters.counter( self.name ).inc( 'All particles', len(event.genmatchedRef) )
        self.counters.counter( self.name ).inc( 'Passing particles', len(event.genmatched) )
Beispiel #13
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