def analyze(self, event): # Read branches that may be created by previous step in the chain # It's important to read them like this in case they # are created by the step before in a PostProcessor chain. event = mappedEvent(event, mapname=self._branch_map) self.vbs_category = event.VBS_category self.rawJet_coll = Collection(event, 'Jet') self.Jet_coll = Collection(event, 'CleanJet') self.JetNotFat_coll = Collection(event, 'CleanJetNotFat') lepton_raw = Object(event, "Lepton", index=0) met_raw = Object(event, self.metType) category = int(self.vbs_category) # Check if VBS category if category not in [0, 1]: output = vbs_vars.getDefault() # Fill the branches for var, val in output.items(): self.out.fillBranch(var, val) return True lep = TLorentzVector() lep.SetPtEtaPhiE(lepton_raw.pt, lepton_raw.eta, lepton_raw.phi, lepton_raw.pt * cosh(lepton_raw.eta)) met = TLorentzVector() met.SetPtEtaPhiE(met_raw.pt, 0., met_raw.phi, met_raw.pt) # Reconstruct neutrino from lepton and met reco_neutrino = RecoNeutrino.reconstruct_neutrino(lep, met, mode="central") # Extract the jets four momenta using only JetNotFat but keeping # a reference to the CleanJet index. jets, jets_ids = self.get_jets_vectors() vbsjets = [] vjets = [] other_jets = [] other_jets_ind = [] for jet, jetind in zip(jets, jets_ids): if jetind in event[self.VBS_jets_var[category]]: vbsjets.append(jet) elif jetind in event[self.V_jets_var[category]]: vjets.append(jet) else: other_jets.append(jet) other_jets_ind.append(jetind) # Check Mjj_vbs and deltaeta_vbs cuts if ((vbsjets[0]+vbsjets[1]).M() < self.mjj_vbs_cut or \ abs(vbsjets[0].Eta() - vbsjets[1].Eta()) < self.deltaeta_vbs_cut): return False output = None if category == 0: ##################### # Boosted category fatjet = Object(event, "CleanFatJet", index=0) # CleanFatJet collection mass is Softdrop PUPPI mass output = vbs_vars.getVBSkin_boosted(vbsjets, fatjet.p4(), lep, met, reco_neutrino, other_jets, other_jets_ind, debug=self.debug) elif category == 1: ##################### # Resolved category output = vbs_vars.getVBSkin_resolved(vbsjets, vjets, lep, met, reco_neutrino, other_jets, other_jets_ind, debug=self.debug) # Fill the branches for var, val in output.items(): self.out.fillBranch(var, val) """return True (go to next module) or False (fail, go to next event)""" return True
def analyze(self, event): # Read branches that may be created by previous step in the chain # It's important to read them like this in case they # are created by the step before in a PostProcessor chain. self.vbs_category = event.VBS_category self.rawJet_coll = Collection(event, 'Jet') self.Jet_coll = Collection(event, 'CleanJet') self.JetNotFat_coll = Collection(event, 'CleanJetNotFat') # # do this check at every event, as other modules might have read further branches # if event._tree._ttreereaderversion > self._ttreereaderversion: # self.initReaders(event._tree) lepton_raw = Object(event, "Lepton", index=0) puppiMET = Object(event, "PuppiMET") category = int(self.vbs_category) lep = TLorentzVector() lep.SetPtEtaPhiE(lepton_raw.pt, lepton_raw.eta, lepton_raw.phi, lepton_raw.pt * cosh(lepton_raw.eta)) puppimet = TLorentzVector() puppimet.SetPtEtaPhiE(puppiMET.pt, 0., puppiMET.phi, puppiMET.pt) # Trick for ArrayRead -> list # vbs_jets_index = [self.vbs_jets[0], self.vbs_jets[1]] # v_jets_index = [self.v_jets[0], self.v_jets[1]] jets, jets_ids = self.get_jets_vectors(self.minptjet) output = None if category == 0: ##################### # Boosted category v_jets_index = [ event[self.V_jets_var[0]][0], event[self.V_jets_var[0]][1] ] vbs_jets_index = [ event[self.VBS_jets_var[0]][0], event[self.VBS_jets_var[0]][1] ] fatjet = Object(event, "CleanFatJet", index=0) other_jets = [] vbsjets = [] # N.B. VBsjets and VJets indexes refers to the original CleanJet collection # the jets list is loaded with the NotFatJet mask. We have to compare original ids. for jet, jetind in zip(jets, jets_ids): if jetind in vbs_jets_index: vbsjets.append(jet) else: other_jets.append(jet) # CleanFatJet collection mass is Softdrop PUPPI mass output = vbs_vars.getVBSkin_boosted(vbsjets, fatjet.p4(), lep, puppimet, other_jets, debug=self.debug) elif category == 1: ##################### # Resolved category v_jets_index = [ event[self.V_jets_var[1]][0], event[self.V_jets_var[1]][1] ] vbs_jets_index = [ event[self.VBS_jets_var[1]][0], event[self.VBS_jets_var[1]][1] ] other_jets = [] vbsjets = [] vjets = [] for jet, jetind in zip(jets, jets_ids): if jetind in vbs_jets_index: vbsjets.append(jet) elif jetind in v_jets_index: vjets.append(jet) else: other_jets.append(jet) output = vbs_vars.getVBSkin_resolved(vbsjets, vjets, lep, puppimet, other_jets, debug=self.debug) # elif category == 2: # ############################## # # Missing jet (3-jet) category # if self.debug: print "Category 2: Missing one jet" # output = vbs_vars.getDefault() # Fill the branches for var, val in output.items(): self.out.fillBranch(var, val) """return True (go to next module) or False (fail, go to next event)""" return True