def process(self, event):
        self.readCollections(event.input)
        jets = self.handles['jets'].product()
        output_jets = []
        if self.cfg_ana.year == '2016':
            for jet in jets:
                hjet = Jet(jet)
                output_jets.append(hjet)
        else:
            for jet in jets:
                hjet = Jet(jet)
                if not hasattr(self.cfg_ana, 'selection'):
                    continue
                elif self.cfg_ana.selection(hjet):
                    output_jets.append(hjet)

        if self.cfg_ana.do_jec:
            event.metShift = [0., 0.]
            event.type1METCorr = [0., 0., 0.]
            self.jet_calibrator.correctAll(output_jets,
                                           event.rho,
                                           delta=0.,
                                           addCorr=True,
                                           addShifts=True,
                                           metShift=event.metShift,
                                           type1METCorr=event.type1METCorr)
        setattr(event, self.cfg_ana.output, output_jets)
Beispiel #2
0
    def pfcand_clustered_unclustered(self, event):
        # CandViewMerger, pfcandidateClustered
        if not hasattr(event, 'photons'):  # fast construction of photons list
            event.photons = [p for p in self.handles['photons'].product()]

        jets = [Jet(jet) for jet in self.handles['jets'].product()]

        pfcandidateClustered = event.electrons + event.muons \
            + event.taus  + event.photons + jets

        pfcandidateClustered_ptcs = []
        for ptc in event.electrons:
            for assPFcand in ptc.physObj.associatedPackedPFCandidates():
                pfcandidateClustered_ptcs.append(assPFcand.get())
        for ptc in event.muons + event.taus:
            for k in range(ptc.physObj.numberOfSourceCandidatePtrs()):
                pfcandidateClustered_ptcs.append(
                    ptc.physObj.sourceCandidatePtr(k).get())
        for ptc in event.photons:
            for k in range(ptc.numberOfSourceCandidatePtrs()):
                pfcandidateClustered_ptcs.append(
                    ptc.sourceCandidatePtr(k).get())
        for ptc in jets:
            pfcandidateClustered_ptcs += get_final_ptcs(ptc)

        # "packedPFCandidates"
        cands = [c for c in self.handles['packedPFCandidates'].product()]
        pfcandidateForUnclusteredUnc = [
            c for c in cands if c not in pfcandidateClustered_ptcs
        ]

        return pfcandidateClustered_ptcs, pfcandidateForUnclusteredUnc
Beispiel #3
0
    def runFixEE2017(self, event):
        '''Run the raw met computation including the cleaning of the noisy ECAL endcap in 2017 data and MC.
        '''
        pt_cut = 50.0
        eta_min = 2.65
        eta_max = 3.139

        # BadPFCandidateJetsEEnoiseProducer
        bad_jets = []
        good_jets = []
        jets = [Jet(jet) for jet in self.handles['jets'].product()]
        for x in jets:
            if (x.correctedJet("Uncorrected").pt() > pt_cut
                    or abs(x.eta()) < eta_min or abs(x.eta()) > eta_max):
                good_jets.append(x)
            else:
                bad_jets.append(x)

        pfcandidateClustered_ptcs, pfcandidateForUnclusteredUnc = self.pfcand_clustered_unclustered(
            event)

        badUnclustered = []
        for x in pfcandidateForUnclusteredUnc:
            if (abs(x.eta()) > eta_min and abs(x.eta()) < eta_max):
                badUnclustered.append(x)

        superbad = [ptc for ptc in badUnclustered]
        for jet in bad_jets:
            superbad += get_final_ptcs(jet)

        # "packedPFCandidates"
        cands = [c for c in self.handles['packedPFCandidates'].product()]

        pfCandidatesGoodEE2017 = [c for c in cands if c not in superbad]

        my_met = LorentzVector(0., 0., 0., 0.)

        # calc raw met no fix ee 2017
        for ptc in pfCandidatesGoodEE2017:
            my_met -= ptc.p4()

        return my_met
Beispiel #4
0
    def runFixEE2017(self, event):
        '''Run the raw met computation including the cleaning of the noisy ECAL endcap in 2017 data and MC.
        '''
        pt_cut = 50.0
        eta_min = 2.65
        eta_max = 3.139

        # BadPFCandidateJetsEEnoiseProducer
        bad_jets = []
        good_jets = []
        jets = [Jet(jet) for jet in self.handles['jets'].product()]
        for x in jets:
            if (x.correctedJet("Uncorrected").pt() > pt_cut
                    or abs(x.eta()) < eta_min or abs(x.eta()) > eta_max):
                good_jets.append(x)
            else:
                bad_jets.append(x)

        # CandViewMerger, pfcandidateClustered
        if not hasattr(event, 'photons'):  # fast construction of photons list
            event.photons = [p for p in self.handles['photons'].product()]
        if not hasattr(event, 'taus'):  # fast construction of taus list
            event.taus = [p for p in self.handles['taus'].product()]

        pfcandidateClustered = event.electrons + event.muons \
            + event.taus  + event.photons + jets

        pfcandidateClustered_ptcs = []
        for ptc in event.electrons:
            for assPFcand in ptc.physObj.associatedPackedPFCandidates():
                pfcandidateClustered_ptcs.append(assPFcand.get())
        for ptc in event.muons:
            for k in range(ptc.physObj.numberOfSourceCandidatePtrs()):
                pfcandidateClustered_ptcs.append(
                    ptc.physObj.sourceCandidatePtr(k).get())
        for ptc in event.taus:
            for k in range(ptc.numberOfSourceCandidatePtrs()):
                pfcandidateClustered_ptcs.append(
                    ptc.sourceCandidatePtr(k).get())
        for ptc in event.photons:
            for k in range(ptc.numberOfSourceCandidatePtrs()):
                pfcandidateClustered_ptcs.append(
                    ptc.sourceCandidatePtr(k).get())
        for ptc in jets:
            pfcandidateClustered_ptcs += get_final_ptcs(ptc)

        # "packedPFCandidates"
        cands = [c for c in self.handles['packedPFCandidates'].product()]
        pfcandidateForUnclusteredUnc = [
            c for c in cands if c not in pfcandidateClustered_ptcs
        ]
        badUnclustered = []
        for x in pfcandidateForUnclusteredUnc:
            if (abs(x.eta()) > eta_min and abs(x.eta()) < eta_max):
                badUnclustered.append(x)

        superbad = [ptc for ptc in badUnclustered]
        for jet in bad_jets:
            superbad += get_final_ptcs(jet)

        pfCandidatesGoodEE2017 = [c for c in cands if c not in superbad]

        LorentzVector = ROOT.Math.LorentzVector(ROOT.Math.PxPyPzE4D("double"))
        my_met = LorentzVector(0., 0., 0., 0.)

        # calc raw met no fix ee 2017
        for ptc in pfCandidatesGoodEE2017:
            my_met -= ptc.p4()

        return my_met