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

        self.readCollections(event.input)

        try:
            event.hltL2TauPixelIsoTagProducerLegacy = self.handles[
                'hltL2TauPixelIsoTagProducerLegacy'].product()
            event.hltL2TauPixelIsoTagProducer = self.handles[
                'hltL2TauPixelIsoTagProducer'].product()
            event.hltL2TauJetsIso = self.handles['hltL2TauJetsIso'].product()
            event.hltL2TauIsoFilter = self.handles[
                'hltL2TauIsoFilter'].product()
            event.hltL2TausForPixelIsolation = self.handles[
                'hltL2TausForPixelIsolation'].product()
        except:
            pass

        if self.cfg_ana.verbose:

            if hasattr(event, 'hltL2TauPixelIsoTagProducer'      ) or \
               hasattr(event, 'hltL2TauPixelIsoTagProducerLegacy') or \
               hasattr(event, 'hltL2TauJetsIso'                  ) or \
               hasattr(event, 'hltL2TauIsoFilter'                ) or \
               hasattr(event, 'hltL2TausForPixelIsolation'       ):

                print '\n\n===================== event', event.eventId

                for jet in event.hltL2TausForPixelIsolation:
                    print '\t====>\thltL2TausForPixelIsolation      pt, eta, phi     ', jet.pt(
                    ), jet.eta(), jet.phi()

                for j in range(event.hltL2TauPixelIsoTagProducer.size()):
                    jet = event.hltL2TauPixelIsoTagProducer.keyProduct(
                    ).product().at(j)
                    iso = event.hltL2TauPixelIsoTagProducer.value(j)
                    print '\t====>\thltL2TauPixelIsoTagProducer     pt, eta, phi, iso', jet.pt(
                    ), jet.eta(), jet.phi(), iso

                for jet in event.hltL2TauIsoFilter.jetRefs():
                    print '\t====>\thltL2TauIsoFilter               pt, eta, phi     ', jet.pt(
                    ), jet.eta(), jet.phi()

        self.dRmax = 0.5
        if hasattr(self.cfg_ana, 'dR'):
            self.dRmax = self.cfg_ana.dR

        event.L2jets = []

        # stop here if there are no L2 jets
        if not hasattr(event, 'hltL2TauPixelIsoTagProducer'):
            return True

        nL2jets = event.hltL2TauPixelIsoTagProducer.size()

        for l2jIndex in range(nL2jets):
            jet = event.hltL2TauPixelIsoTagProducer.keyProduct().product().at(
                l2jIndex)
            iso = event.hltL2TauPixelIsoTagProducer.value(l2jIndex)
            isolegacy = event.hltL2TauPixelIsoTagProducerLegacy.value(l2jIndex)

            l2jet = Jet(jet)
            l2jet.L2iso = iso
            l2jet.L2isolegacy = isolegacy

            event.L2jets.append(l2jet)

        for ti in event.trigger_infos:
            for to, jet in product(ti.objects, event.L2jets):

                dR = deltaR(jet.eta(), jet.phi(), to.eta(), to.phi())

                if hasattr(to, 'L2dR'):
                    dRmax = to.L2dR
                else:
                    dRmax = self.dRmax

                if dR < dRmax:
                    to.L2 = jet
                    to.L2iso = jet.L2iso
                    to.L2isolegacy = jet.L2isolegacy
                    to.L2dR = dR

        # stop here if there's no diLepton. Useful for rate studies
        if not hasattr(event, 'diLepton'):
            return True

        legs = {
            event.diLepton.leg1(): self.dRmax,
            event.diLepton.leg2(): self.dRmax
        }

        event.diLepton.leg1().L2 = None
        event.diLepton.leg1().L2iso = None
        event.diLepton.leg1().L2isolegacy = None

        event.diLepton.leg2().L2 = None
        event.diLepton.leg2().L2iso = None
        event.diLepton.leg2().L2isolegacy = None

        for leg, l2jIndex in product(legs.keys(), range(nL2jets)):
            dR = deltaR(jet.eta(), jet.phi(), leg.eta(), leg.phi())
            if dR < legs[leg]:
                leg.L2 = jet
                leg.L2iso = jet.L2iso
                leg.L2isolegacy = jet.L2isolegacy
                leg.L2dR = dR
                legs[leg] = dR

        if self.cfg_ana.verbose:

            if event.diLepton.leg1().L2:
                print 'leg1 L2 jet pt, eta, phi, iso, dR', event.diLepton.leg1(
                ).L2.pt(), event.diLepton.leg1().L2.eta(), event.diLepton.leg1(
                ).L2.phi(), event.diLepton.leg1().L2iso, event.diLepton.leg1(
                ).L2dR
            if event.diLepton.leg2().L2:
                print 'leg2 L2 jet pt, eta, phi, iso, dR', event.diLepton.leg2(
                ).L2.pt(), event.diLepton.leg2().L2.eta(), event.diLepton.leg2(
                ).L2.phi(), event.diLepton.leg2().L2iso, event.diLepton.leg2(
                ).L2dR

        return True