def process(self, event): self.tree.reset() jets_trk02 = getattr(event, self.cfg_ana.jets_trk02_1000) jets_pf02 = getattr(event, self.cfg_ana.jets_pf02_1500) jets_pf04 = getattr(event, self.cfg_ana.jets_pf04_1000) jets_pf04_pdg = event.jets_pf04_1000_pdg jets_pf08 = getattr(event, self.cfg_ana.jets_pf08_1500) #gen_particles = event.all_particles jets_pf04_1500 = getattr(event, self.cfg_ana.jets_pf04_1500) jets_trk04 = getattr(event, self.cfg_ana.jets_trk04_1000) jets_trk08 = getattr(event, self.cfg_ana.jets_trk08_1000) electrons = getattr(event, self.cfg_ana.electrons) muons = getattr(event, self.cfg_ana.muons) #self.tree2.reset() ## #label = -1 #part1 = -10000 #part2 = -10000 #index = 0 #part_index = -1 #count = 0 #for j in gen_particles : # # 1st part # if (j.status()==22 or j.status()==23) and count==0: # part1 = j.pdgid() # count += 1 # part_index = index # # 2nd part # if (j.status()==22 or j.status()==23) and count==1 and j.q()+gen_particles[part_index].q()==0: # part2 = j.pdgid() # count += 1 # index += 1 #if abs(part1)==6 and abs(part2)==6 : label = 6 #if abs(part1)==5 and abs(part2)==5 : label = 5 #if abs(part1)==4 and abs(part2)==4 : label = 4 #if abs(part1)==3 and abs(part2)==3 : label = 0 #if abs(part1)==2 and abs(part2)==2 : label = 0 #if abs(part1)==1 and abs(part2)==1 : label = 0 ## missed cases #if label == -1 : # count = 0 # for j in gen_particles : # if count<10 and abs(j.pdgid())==6 : # label = 6 # count += 1 #if label==-1 : print "issue label==-1" ## #self.tree2.fill('label' , label ) #self.tree2.tree.Fill() Jet1_trk02_dR_lep = 999 Jet2_trk02_dR_lep = 999 if ( len(jets_trk02)>=2 and len(jets_pf02)>=2): #self.tree.fill('label' , label ) j1 = ROOT.TLorentzVector(); j2 = ROOT.TLorentzVector() j1.SetPtEtaPhiE(jets_trk02[0].pt(), jets_trk02[0].eta(), jets_trk02[0].phi(), jets_trk02[0].e()) j2.SetPtEtaPhiE(jets_trk02[1].pt(), jets_trk02[1].eta(), jets_trk02[1].phi(), jets_trk02[1].e()) if ( len(electrons)!=0 and len(muons)==0 ): e = ROOT.TLorentzVector() e.SetPtEtaPhiE(electrons[0].pt(), electrons[0].eta(), electrons[0].phi(), electrons[0].e()) Jet1_dR = j1.DeltaR(e) Jet2_dR = j2.DeltaR(e) if ( len(electrons)==0 and len(muons)!=0 ): m = ROOT.TLorentzVector() m.SetPtEtaPhiE(muons[0].pt(), muons[0].eta(), muons[0].phi(), muons[0].e()) Jet1_dR = j1.DeltaR(m) Jet2_dR = j2.DeltaR(m) if ( len(electrons)!=0 and len(muons)!=0 ): isElectron = False; isMuon = False if ( electrons[0].pt() > muons[0].pt() ): isElectron = True else: isMuon = True l = ROOT.TLorentzVector() if isElectron: l.SetPtEtaPhiE(electrons[0].pt(), electrons[0].eta(), electrons[0].phi(), electrons[0].e()) if isMuon: l.SetPtEtaPhiE(muons[0].pt(), muons[0].eta(), muons[0].phi(), muons[0].e()) Jet1_trk02_dR_lep = j1.DeltaR(l) Jet2_trk02_dR_lep = j2.DeltaR(l) self.tree.fill('Jet1_trk02_dR_lep' , Jet1_trk02_dR_lep ) self.tree.fill('Jet2_trk02_dR_lep' , Jet2_trk02_dR_lep ) #had_hadsemilep_lep_decays self.tree.fill('weight' , event.weight ) self.tree.fill('missingET', event.met.pt()) self.tree.fill('numberOfElectrons', len(electrons)) self.tree.fill('numberOfMuons', len(muons)) self.tree.fill('rapiditySeparation_trk02', abs(jets_trk02[0].eta() - jets_trk02[1].eta())) self.tree.fill('transverseMomentumAsymmetry_trk02', (jets_trk02[0].pt() - jets_trk02[1].pt())/(jets_trk02[0].pt() + jets_trk02[1].pt())) self.tree.fill('Jet1_trk02_tau1' , jets_trk02[0].tau1 ) self.tree.fill('Jet1_trk02_tau2' , jets_trk02[0].tau2 ) self.tree.fill('Jet1_trk02_tau3' , jets_trk02[0].tau3 ) self.tree.fill('Jet2_trk02_tau1' , jets_trk02[1].tau1 ) self.tree.fill('Jet2_trk02_tau2' , jets_trk02[1].tau2 ) self.tree.fill('Jet2_trk02_tau3' , jets_trk02[1].tau3 ) Jet1_trk02_tau31 = -999.0 Jet1_trk02_tau21 = -999.0 Jet1_trk02_tau32 = -999.0 Jet2_trk02_tau31 = -999.0 Jet2_trk02_tau21 = -999.0 Jet2_trk02_tau32 = -999.0 if (jets_trk02[0].tau1 != 0.0): Jet1_trk02_tau31 = jets_trk02[0].tau3/jets_trk02[0].tau1 Jet1_trk02_tau21 = jets_trk02[0].tau2/jets_trk02[0].tau1 if (jets_trk02[0].tau2 != 0.0): Jet1_trk02_tau32 = jets_trk02[0].tau3/jets_trk02[0].tau2 if (jets_trk02[1].tau1 != 0.0): Jet2_trk02_tau31 = jets_trk02[1].tau3/jets_trk02[1].tau1 Jet2_trk02_tau21 = jets_trk02[1].tau2/jets_trk02[1].tau1 if (jets_trk02[1].tau2 != 0.0): Jet2_trk02_tau32 = jets_trk02[1].tau3/jets_trk02[1].tau2 self.tree.fill('Jet1_trk02_tau31', Jet1_trk02_tau31) self.tree.fill('Jet1_trk02_tau21', Jet1_trk02_tau21) self.tree.fill('Jet1_trk02_tau32', Jet1_trk02_tau32) self.tree.fill('Jet2_trk02_tau31', Jet2_trk02_tau31) self.tree.fill('Jet2_trk02_tau21', Jet2_trk02_tau21) self.tree.fill('Jet2_trk02_tau32', Jet2_trk02_tau32) # here is btag, need matching in DR Jet1_trk02_dR_pf04 = 999 Jet2_trk02_dR_pf04 = 999 for j in jets_pf04: pf04= ROOT.TLorentzVector() pf04.SetPtEtaPhiE(j.pt(), j.eta(), j.phi(), j.e()) if j.tags['bf'] > 0: if pf04.DeltaR(j1)<Jet1_trk02_dR_pf04: Jet1_trk02_dR_pf04=pf04.DeltaR(j1) if pf04.DeltaR(j2)<Jet2_trk02_dR_pf04: Jet2_trk02_dR_pf04=pf04.DeltaR(j2) #print 'dr j1 ',Jet1_trk02_dR_pf04 #print 'dr j2 ',Jet2_trk02_dR_pf04 pdg1 = 0 pdg2 = 0 if Jet1_trk02_dR_pf04 < 0.3: pdg1 = 5 if Jet2_trk02_dR_pf04 < 0.3: pdg2 = 5 # TRF / truth b-tagging -> need at least 2 jets_pf04 use_DELPHES=False weight_1tagex=0. weight_2tagex=0. jet=[] ipdg=0 for i in range(len(jets_pf04)): if use_DELPHES==True: ipdg = jets_pf04[i].tags['flav'] if ipdg!=4 and ipdg!=5 : ipdg=0 else: ipdg = jets_pf04_pdg[i].flavour jet.append([jets_pf04[i],ipdg]) if (len(jet)>0): weight_1tagex=getNbTagEx(1,jet,2) if (len(jet)>1): weight_2tagex=getNbTagEx(2,jet,2) weight_1tagin=weight_1tagex+weight_2tagex self.tree.fill('weight_1tagex', weight_1tagex) self.tree.fill('weight_2tagex', weight_2tagex) self.tree.fill('weight_1tagin', weight_1tagin) #MATCHING PF02 and trk02 for CORRECTION Jet1_trk02_dR_pf02 = 999 Jet2_trk02_dR_pf02 = 999 Jet1_pf02 = None Jet2_pf02 = None for j in jets_pf02: pf02= ROOT.TLorentzVector() pf02.SetPtEtaPhiE(j.pt(), j.eta(), j.phi(), j.e()) if pf02.DeltaR(j1)<Jet1_trk02_dR_pf02: Jet1_trk02_dR_pf02=pf02.DeltaR(j1) Jet1_pf02=j if pf02.DeltaR(j2)<Jet2_trk02_dR_pf02: Jet2_trk02_dR_pf02=pf02.DeltaR(j2) Jet2_pf02=j #print 'jet1 dr ',Jet1_trk02_dR_pf02,' pf02 ',Jet1_pf02,' trk02 ',jets_trk02[0] #print 'jet2 dr ',Jet2_trk02_dR_pf02,' pf02 ',Jet2_pf02,' trk02 ',jets_trk02[1] corr1 = Jet1_pf02.p4().Pt()/j1.Pt() corr2 = Jet2_pf02.p4().Pt()/j2.Pt() #print 'corr 1 ',corr1,' corr2 ',corr2 #NORMAL TRK02 SD corrected jet p4sd1 = ROOT.TLorentzVector(); p4sd2 = ROOT.TLorentzVector() p4sd1.SetPtEtaPhiM(jets_trk02[0].subjetsSoftDrop[0].p4().Pt()*corr1, jets_trk02[0].eta(), jets_trk02[0].phi(), jets_trk02[0].subjetsSoftDrop[0].p4().M()*corr1) p4sd2.SetPtEtaPhiM(jets_trk02[1].subjetsSoftDrop[0].p4().Pt()*corr2, jets_trk02[1].eta(), jets_trk02[1].phi(), jets_trk02[1].subjetsSoftDrop[0].p4().M()*corr2) sdjet1_corr = Particle(pdg1, 0, p4sd1, 1) sdjet2_corr = Particle(pdg2, 0, p4sd2, 1) fillParticle(self.tree, 'Jet1_trk02_SD_Corr', sdjet1_corr) fillParticle(self.tree, 'Jet2_trk02_SD_Corr', sdjet2_corr) #NORMAL TRK02 SD jet #sdjet1 = Particle(pdg1, 0, jets_trk02[0].subjetsSoftDrop[0].p4(), 1) #sdjet2 = Particle(pdg2, 0, jets_trk02[1].subjetsSoftDrop[0].p4(), 1) #fillParticle(self.tree, 'Jet1_trk02_SD', sdjet1) #fillParticle(self.tree, 'Jet2_trk02_SD', sdjet2) #CORRECTED TRK02 jet p4jet1_corr = ROOT.TLorentzVector(); p4jet2_corr = ROOT.TLorentzVector() p4jet1_corr.SetPtEtaPhiM(jets_trk02[0].pt()*corr1, jets_trk02[0].eta(), jets_trk02[0].phi(), jets_trk02[0].m()*corr1) p4jet2_corr.SetPtEtaPhiM(jets_trk02[1].pt()*corr2, jets_trk02[1].eta(), jets_trk02[1].phi(), jets_trk02[1].m()*corr2) jet1_corr = Particle(pdg1, 0, p4jet1_corr, 1) jet2_corr = Particle(pdg2, 0, p4jet2_corr, 1) #fillParticle(self.tree, 'Jet1_trk02_Corr', jet1_corr) #fillParticle(self.tree, 'Jet2_trk02_Corr', jet2_corr) # associate MET to one jet or another based on softdrop sdjetmet1, sdjetmet2 = self.corrMET(jets_trk02[0].subjetsSoftDrop[0], pdg1, jets_trk02[1].subjetsSoftDrop[0], pdg2, event.met) fillParticle(self.tree, 'Jet1_trk02_SD_MetCorr', sdjetmet1) fillParticle(self.tree, 'Jet2_trk02_SD_MetCorr', sdjetmet2) sdjetmet1, sdjetmet2 = self.corrMET(sdjet1_corr, pdg1, sdjet2_corr, pdg2, event.met) fillParticle(self.tree, 'Jet1_trk02_SD_Corr_MetCorr', sdjetmet1) fillParticle(self.tree, 'Jet2_trk02_SD_Corr_MetCorr', sdjetmet2) ###################### # trkjet04 mass info # ###################### #MATCHING PF04 and trk04 for CORRECTION Jet1_trk04_dR_pf04 = 999 Jet2_trk04_dR_pf04 = 999 Jet1_pf04 = None Jet2_pf04 = None for j in jets_pf04_1500: pf04= ROOT.TLorentzVector() pf04.SetPtEtaPhiE(j.pt(), j.eta(), j.phi(), j.e()) if pf04.DeltaR(j1)<Jet1_trk04_dR_pf04: Jet1_trk04_dR_pf04=pf04.DeltaR(j1) Jet1_pf04=j if pf04.DeltaR(j2)<Jet2_trk04_dR_pf04: Jet2_trk04_dR_pf04=pf04.DeltaR(j2) Jet2_pf04=j corr1_04 = Jet1_pf04.p4().Pt()/j1.Pt() corr2_04 = Jet2_pf04.p4().Pt()/j2.Pt() #NORMAL TRK04 SD corrected jet p4sd1_04 = ROOT.TLorentzVector(); p4sd2_04 = ROOT.TLorentzVector() Jet1_trk04_SD_Corr_m = -1000. ; Jet2_trk04_SD_Corr_m = -1000. if len(jets_trk04)>=1 : p4sd1_04.SetPtEtaPhiM(jets_trk04[0].subjetsSoftDrop[0].p4().Pt()*corr1_04, jets_trk04[0].eta(), jets_trk04[0].phi(), jets_trk04[0].subjetsSoftDrop[0].p4().M()*corr1_04) pdg1 = 0 sdjet1_corr_04 = Particle(pdg1, 0, p4sd1_04, 1) Jet1_trk04_SD_Corr_m = sdjet1_corr_04.p4().M() if len(jets_trk04)>=2 : p4sd2_04.SetPtEtaPhiM(jets_trk04[1].subjetsSoftDrop[0].p4().Pt()*corr2_04, jets_trk04[1].eta(), jets_trk04[1].phi(), jets_trk04[1].subjetsSoftDrop[0].p4().M()*corr2_04) pdg2 = 0 sdjet2_corr_04 = Particle(pdg2, 0, p4sd2_04, 1) Jet2_trk04_SD_Corr_m = sdjet2_corr_04.p4().M() self.tree.fill('Jet1_trk04_SD_Corr_m', Jet1_trk04_SD_Corr_m) self.tree.fill('Jet2_trk04_SD_Corr_m', Jet2_trk04_SD_Corr_m) ###################### # trkjet08 mass info # ###################### #MATCHING PF08 and trk08 for CORRECTION Jet1_trk08_dR_pf08 = 999 Jet2_trk08_dR_pf08 = 999 Jet1_pf08 = None Jet2_pf08 = None for j in jets_pf08: pf08= ROOT.TLorentzVector() pf08.SetPtEtaPhiE(j.pt(), j.eta(), j.phi(), j.e()) if pf08.DeltaR(j1)<Jet1_trk08_dR_pf08: Jet1_trk08_dR_pf08=pf08.DeltaR(j1) Jet1_pf08=j if pf08.DeltaR(j2)<Jet2_trk08_dR_pf08: Jet2_trk08_dR_pf08=pf08.DeltaR(j2) Jet2_pf08=j corr1_08 = Jet1_pf08.p4().Pt()/j1.Pt() corr2_08 = Jet2_pf08.p4().Pt()/j2.Pt() #NORMAL TRK08 SD corrected jet p4sd1_08 = ROOT.TLorentzVector(); p4sd2_08 = ROOT.TLorentzVector() Jet1_trk08_SD_Corr_m = -1000. ; Jet2_trk08_SD_Corr_m = -1000. if len(jets_trk08)>=1 : p4sd1_08.SetPtEtaPhiM(jets_trk08[0].subjetsSoftDrop[0].p4().Pt()*corr1_08, jets_trk08[0].eta(), jets_trk08[0].phi(), jets_trk08[0].subjetsSoftDrop[0].p4().M()*corr1_08) pdg1 = 0 sdjet1_corr_08 = Particle(pdg1, 0, p4sd1_08, 1) Jet1_trk08_SD_Corr_m = sdjet1_corr_08.p4().M() if len(jets_trk08)>=2 : p4sd2_08.SetPtEtaPhiM(jets_trk08[1].subjetsSoftDrop[0].p4().Pt()*corr2_08, jets_trk08[1].eta(), jets_trk08[1].phi(), jets_trk08[1].subjetsSoftDrop[0].p4().M()*corr2_08) pdg2 = 0 sdjet2_corr_08 = Particle(pdg2, 0, p4sd2_08, 1) Jet2_trk08_SD_Corr_m = sdjet2_corr_08.p4().M() self.tree.fill('Jet1_trk08_SD_Corr_m', Jet1_trk08_SD_Corr_m) self.tree.fill('Jet2_trk08_SD_Corr_m', Jet2_trk08_SD_Corr_m) if (len(jets_trk02)>1): self.tree.fill( 'Mj1j2_trk02',self.fillMass(jets_trk02[0],jets_trk02[1])) self.tree.fill( 'Mj1j2_trk02_Corr',self.fillMass(jet1_corr,jet2_corr)) jetmet1, jetmet2 = self.corrMET(jets_trk02[0], pdg1, jets_trk02[1], pdg2, event.met) self.tree.fill( 'Mj1j2_trk02_MetCorr',self.fillMass(jetmet1,jetmet2)) #fillParticle(self.tree, 'Jet1_trk02_MetCorr', jetmet1) #fillParticle(self.tree, 'Jet2_trk02_MetCorr', jetmet2) jetmet1, jetmet2 = self.corrMET(jet1_corr, pdg1, jet2_corr, pdg2, event.met) self.tree.fill( 'Mj1j2_trk02_Corr_MetCorr',self.fillMass(jetmet1,jetmet2)) fillParticle(self.tree, 'Jet1_trk02_Corr_MetCorr', jetmet1) fillParticle(self.tree, 'Jet2_trk02_Corr_MetCorr', jetmet2) if (len(jets_pf02)>1): self.tree.fill( 'Mj1j2_pf02', self.fillMass(jets_pf02[0],jets_pf02[1])) jetmet1, jetmet2 = self.corrMET(jets_pf02[0], pdg1, jets_pf02[1], pdg2, event.met) self.tree.fill( 'Mj1j2_pf02_MetCorr', self.fillMass(jetmet1,jetmet2)) if (len(jets_pf04)>1): self.tree.fill( 'Mj1j2_pf04', self.fillMass(jets_pf04[0],jets_pf04[1])) jetmet1, jetmet2 = self.corrMET(jets_pf04[0], pdg1, jets_pf04[1], pdg2, event.met) self.tree.fill( 'Mj1j2_pf04_MetCorr', self.fillMass(jetmet1,jetmet2)) if (len(jets_pf08)>1): self.tree.fill( 'Mj1j2_pf08', self.fillMass(jets_pf08[0],jets_pf08[1])) jetmet1, jetmet2 = self.corrMET(jets_pf08[0], pdg1, jets_pf08[1], pdg2, event.met) self.tree.fill( 'Mj1j2_pf08_MetCorr', self.fillMass(jetmet1,jetmet2)) if ( len(electrons) >=1 ): fillParticle(self.tree, 'Electron1', electrons[0]) if ( len(electrons) >=2 ): fillParticle(self.tree, 'Electron2', electrons[1]) if ( len(muons) >=1 ): fillParticle(self.tree, 'Muon1', muons[0]) if ( len(muons) >=2 ): fillParticle(self.tree, 'Muon2', muons[1]) ################################### #TMVA Stuff Starts! ################################### self.bdt_Jet_trk02_tau1[0] = jets_trk02[0].tau1 self.bdt_Jet_trk02_tau2[0] = jets_trk02[0].tau2 self.bdt_Jet_trk02_tau3[0] = jets_trk02[0].tau3 self.bdt_Jet_trk02_tau21[0] = Jet1_trk02_tau21 self.bdt_Jet_trk02_tau31[0] = Jet1_trk02_tau31 self.bdt_Jet_trk02_tau32[0] = Jet1_trk02_tau32 self.bdt_Jet_trk02_SD_Corr_m[0] = sdjet1_corr.p4().M() if len(jets_trk04)>=1 : self.bdt_Jet_trk04_SD_Corr_m[0] = sdjet1_corr_04.p4().M() else : self.bdt_Jet_trk04_SD_Corr_m[0] = -1000. if len(jets_trk08)>=1 : self.bdt_Jet_trk08_SD_Corr_m[0] = sdjet1_corr_08.p4().M() else : self.bdt_Jet_trk08_SD_Corr_m[0] = -1000. mva_value = self.reader.EvaluateMVA("BDT") self.tree.fill( 'Jet1_thad_vs_QCD_tagger', mva_value) # self.bdt_Jet_trk02_tau1[0] = jets_trk02[1].tau1 self.bdt_Jet_trk02_tau2[0] = jets_trk02[1].tau2 self.bdt_Jet_trk02_tau3[0] = jets_trk02[1].tau3 self.bdt_Jet_trk02_tau21[0] = Jet2_trk02_tau21 self.bdt_Jet_trk02_tau31[0] = Jet2_trk02_tau31 self.bdt_Jet_trk02_tau32[0] = Jet2_trk02_tau32 self.bdt_Jet_trk02_SD_Corr_m[0] = sdjet2_corr.p4().M() if len(jets_trk04)>=2 : self.bdt_Jet_trk04_SD_Corr_m[0] = sdjet2_corr_04.p4().M() else : self.bdt_Jet_trk04_SD_Corr_m[0] = -1000. if len(jets_trk08)>=2 : self.bdt_Jet_trk08_SD_Corr_m[0] = sdjet2_corr_08.p4().M() else : self.bdt_Jet_trk08_SD_Corr_m[0] = -1000. mva_value = self.reader.EvaluateMVA("BDT") self.tree.fill( 'Jet2_thad_vs_QCD_tagger', mva_value) self.tree.tree.Fill()
def process(self, event): self.tree.reset() jets_trk02 = getattr(event, self.cfg_ana.jets_trk02_1000) jets_pf02 = getattr(event, self.cfg_ana.jets_pf02_1500) jets_pf04 = getattr(event, self.cfg_ana.jets_pf04_1000) jets_pf08 = getattr(event, self.cfg_ana.jets_pf08_1500) jets_pf04_1500 = getattr(event, self.cfg_ana.jets_pf04_1500) jets_trk04 = getattr(event, self.cfg_ana.jets_trk04_1000) jets_trk08 = getattr(event, self.cfg_ana.jets_trk08_1000) electrons = getattr(event, self.cfg_ana.electrons) muons = getattr(event, self.cfg_ana.muons) if (len(jets_trk02) >= 2 and len(jets_pf02) >= 2): self.tree.fill('weight', event.weight) self.tree.fill('rapiditySeparation_trk02', abs(jets_trk02[0].eta() - jets_trk02[1].eta())) self.tree.fill('transverseMomentumAsymmetry_trk02', (jets_trk02[0].pt() - jets_trk02[1].pt()) / (jets_trk02[0].pt() + jets_trk02[1].pt())) self.tree.fill('Jet1_trk02_tau1', jets_trk02[0].tau1) self.tree.fill('Jet1_trk02_tau2', jets_trk02[0].tau2) self.tree.fill('Jet1_trk02_tau3', jets_trk02[0].tau3) self.tree.fill('Jet2_trk02_tau1', jets_trk02[1].tau1) self.tree.fill('Jet2_trk02_tau2', jets_trk02[1].tau2) self.tree.fill('Jet2_trk02_tau3', jets_trk02[1].tau3) self.tree.fill('numberOfElectrons', len(electrons)) self.tree.fill('numberOfMuons', len(muons)) if (len(muons) >= 1): fillParticle(self.tree, 'Muon1', muons[0]) if (len(muons) >= 2): fillParticle(self.tree, 'Muon2', muons[1]) Jet1_trk02_tau31 = -9.0 Jet1_trk02_tau21 = -9.0 Jet1_trk02_tau32 = -9.0 Jet2_trk02_tau31 = -9.0 Jet2_trk02_tau21 = -9.0 Jet2_trk02_tau32 = -9.0 if (jets_trk02[0].tau1 != 0.0): Jet1_trk02_tau31 = jets_trk02[0].tau3 / jets_trk02[0].tau1 Jet1_trk02_tau21 = jets_trk02[0].tau2 / jets_trk02[0].tau1 if (jets_trk02[0].tau2 != 0.0): Jet1_trk02_tau32 = jets_trk02[0].tau3 / jets_trk02[0].tau2 if (jets_trk02[1].tau1 != 0.0): Jet2_trk02_tau31 = jets_trk02[1].tau3 / jets_trk02[1].tau1 Jet2_trk02_tau21 = jets_trk02[1].tau2 / jets_trk02[1].tau1 if (jets_trk02[1].tau2 != 0.0): Jet2_trk02_tau32 = jets_trk02[1].tau3 / jets_trk02[1].tau2 self.tree.fill('Jet1_trk02_tau31', Jet1_trk02_tau31) self.tree.fill('Jet1_trk02_tau21', Jet1_trk02_tau21) self.tree.fill('Jet1_trk02_tau32', Jet1_trk02_tau32) self.tree.fill('Jet2_trk02_tau31', Jet2_trk02_tau31) self.tree.fill('Jet2_trk02_tau21', Jet2_trk02_tau21) self.tree.fill('Jet2_trk02_tau32', Jet2_trk02_tau32) j1 = ROOT.TLorentzVector() j2 = ROOT.TLorentzVector() j1.SetPtEtaPhiE(jets_trk02[0].pt(), jets_trk02[0].eta(), jets_trk02[0].phi(), jets_trk02[0].e()) j2.SetPtEtaPhiE(jets_trk02[1].pt(), jets_trk02[1].eta(), jets_trk02[1].phi(), jets_trk02[1].e()) #MATCHING PF02 and trk02 for CORRECTION Jet1_trk02_dR_pf02 = 999 Jet2_trk02_dR_pf02 = 999 Jet1_pf02 = None Jet2_pf02 = None for j in jets_pf02: pf02 = ROOT.TLorentzVector() pf02.SetPtEtaPhiE(j.pt(), j.eta(), j.phi(), j.e()) if pf02.DeltaR(j1) < Jet1_trk02_dR_pf02: Jet1_trk02_dR_pf02 = pf02.DeltaR(j1) Jet1_pf02 = j if pf02.DeltaR(j2) < Jet2_trk02_dR_pf02: Jet2_trk02_dR_pf02 = pf02.DeltaR(j2) Jet2_pf02 = j #print 'jet1 dr ',Jet1_trk02_dR_pf02,' pf02 ',Jet1_pf02,' trk02 ',jets_trk02[0] #print 'jet2 dr ',Jet2_trk02_dR_pf02,' pf02 ',Jet2_pf02,' trk02 ',jets_trk02[1] corr1 = Jet1_pf02.p4().Pt() / j1.Pt() corr2 = Jet2_pf02.p4().Pt() / j2.Pt() #print 'corr 1 ',corr1,' corr2 ',corr2 #NORMAL TRK02 SD corrected jet p4sd1 = ROOT.TLorentzVector() p4sd2 = ROOT.TLorentzVector() p4sd1.SetPtEtaPhiM( jets_trk02[0].subjetsSoftDrop[0].p4().Pt() * corr1, jets_trk02[0].eta(), jets_trk02[0].phi(), jets_trk02[0].subjetsSoftDrop[0].p4().M() * corr1) p4sd2.SetPtEtaPhiM( jets_trk02[1].subjetsSoftDrop[0].p4().Pt() * corr2, jets_trk02[1].eta(), jets_trk02[1].phi(), jets_trk02[1].subjetsSoftDrop[0].p4().M() * corr2) pdg1 = 0 pdg2 = 0 sdjet1_corr = Particle(pdg1, 0, p4sd1, 1) sdjet2_corr = Particle(pdg2, 0, p4sd2, 1) fillParticle(self.tree, 'Jet1_trk02_SD_Corr', sdjet1_corr) fillParticle(self.tree, 'Jet2_trk02_SD_Corr', sdjet2_corr) ###################### # trkjet04 mass info # ###################### #MATCHING PF04 and trk04 for CORRECTION Jet1_trk04_dR_pf04 = 999 Jet2_trk04_dR_pf04 = 999 Jet1_pf04 = None Jet2_pf04 = None for j in jets_pf04_1500: pf04 = ROOT.TLorentzVector() pf04.SetPtEtaPhiE(j.pt(), j.eta(), j.phi(), j.e()) if pf04.DeltaR(j1) < Jet1_trk04_dR_pf04: Jet1_trk04_dR_pf04 = pf04.DeltaR(j1) Jet1_pf04 = j if pf04.DeltaR(j2) < Jet2_trk04_dR_pf04: Jet2_trk04_dR_pf04 = pf04.DeltaR(j2) Jet2_pf04 = j corr1_04 = Jet1_pf04.p4().Pt() / j1.Pt() corr2_04 = Jet2_pf04.p4().Pt() / j2.Pt() #NORMAL TRK04 SD corrected jet p4sd1_04 = ROOT.TLorentzVector() p4sd2_04 = ROOT.TLorentzVector() Jet1_trk04_SD_Corr_m = -1000. Jet2_trk04_SD_Corr_m = -1000. if len(jets_trk04) >= 1: p4sd1_04.SetPtEtaPhiM( jets_trk04[0].subjetsSoftDrop[0].p4().Pt() * corr1_04, jets_trk04[0].eta(), jets_trk04[0].phi(), jets_trk04[0].subjetsSoftDrop[0].p4().M() * corr1_04) pdg1 = 0 sdjet1_corr_04 = Particle(pdg1, 0, p4sd1_04, 1) Jet1_trk04_SD_Corr_m = sdjet1_corr_04.p4().M() if len(jets_trk04) >= 2: p4sd2_04.SetPtEtaPhiM( jets_trk04[1].subjetsSoftDrop[0].p4().Pt() * corr2_04, jets_trk04[1].eta(), jets_trk04[1].phi(), jets_trk04[1].subjetsSoftDrop[0].p4().M() * corr2_04) pdg2 = 0 sdjet2_corr_04 = Particle(pdg2, 0, p4sd2_04, 1) Jet2_trk04_SD_Corr_m = sdjet2_corr_04.p4().M() self.tree.fill('Jet1_trk04_SD_Corr_m', Jet1_trk04_SD_Corr_m) self.tree.fill('Jet2_trk04_SD_Corr_m', Jet2_trk04_SD_Corr_m) ###################### # trkjet08 mass info # ###################### #MATCHING PF08 and trk08 for CORRECTION Jet1_trk08_dR_pf08 = 999 Jet2_trk08_dR_pf08 = 999 Jet1_pf08 = None Jet2_pf08 = None for j in jets_pf08: pf08 = ROOT.TLorentzVector() pf08.SetPtEtaPhiE(j.pt(), j.eta(), j.phi(), j.e()) if pf08.DeltaR(j1) < Jet1_trk08_dR_pf08: Jet1_trk08_dR_pf08 = pf08.DeltaR(j1) Jet1_pf08 = j if pf08.DeltaR(j2) < Jet2_trk08_dR_pf08: Jet2_trk08_dR_pf08 = pf08.DeltaR(j2) Jet2_pf08 = j corr1_08 = Jet1_pf08.p4().Pt() / j1.Pt() corr2_08 = Jet2_pf08.p4().Pt() / j2.Pt() #NORMAL TRK08 SD corrected jet p4sd1_08 = ROOT.TLorentzVector() p4sd2_08 = ROOT.TLorentzVector() Jet1_trk08_SD_Corr_m = -1000. Jet2_trk08_SD_Corr_m = -1000. if len(jets_trk08) >= 1: p4sd1_08.SetPtEtaPhiM( jets_trk08[0].subjetsSoftDrop[0].p4().Pt() * corr1_08, jets_trk08[0].eta(), jets_trk08[0].phi(), jets_trk08[0].subjetsSoftDrop[0].p4().M() * corr1_08) pdg1 = 0 sdjet1_corr_08 = Particle(pdg1, 0, p4sd1_08, 1) Jet1_trk08_SD_Corr_m = sdjet1_corr_08.p4().M() if len(jets_trk08) >= 2: p4sd2_08.SetPtEtaPhiM( jets_trk08[1].subjetsSoftDrop[0].p4().Pt() * corr2_08, jets_trk08[1].eta(), jets_trk08[1].phi(), jets_trk08[1].subjetsSoftDrop[0].p4().M() * corr2_08) pdg2 = 0 sdjet2_corr_08 = Particle(pdg2, 0, p4sd2_08, 1) Jet2_trk08_SD_Corr_m = sdjet2_corr_08.p4().M() self.tree.fill('Jet1_trk08_SD_Corr_m', Jet1_trk08_SD_Corr_m) self.tree.fill('Jet2_trk08_SD_Corr_m', Jet2_trk08_SD_Corr_m) #CORRECTED TRK02 jet p4jet1_corr = ROOT.TLorentzVector() p4jet2_corr = ROOT.TLorentzVector() p4jet1_corr.SetPtEtaPhiM(jets_trk02[0].pt() * corr1, jets_trk02[0].eta(), jets_trk02[0].phi(), jets_trk02[0].m() * corr1) p4jet2_corr.SetPtEtaPhiM(jets_trk02[1].pt() * corr2, jets_trk02[1].eta(), jets_trk02[1].phi(), jets_trk02[1].m() * corr2) jet1_corr = Particle(pdg1, 0, p4jet1_corr, 1) jet2_corr = Particle(pdg2, 0, p4jet2_corr, 1) if (len(jets_trk02) > 1): self.tree.fill('Mj1j2_trk02', self.fillMass(jets_trk02[0], jets_trk02[1])) self.tree.fill('Mj1j2_trk02_Corr', self.fillMass(jet1_corr, jet2_corr)) if (len(jets_pf02) > 1): self.tree.fill('Mj1j2_pf02', self.fillMass(jets_pf02[0], jets_pf02[1])) if (len(jets_pf04) > 1): self.tree.fill('Mj1j2_pf04', self.fillMass(jets_pf04[0], jets_pf04[1])) if (len(jets_pf08) > 1): self.tree.fill('Mj1j2_pf08', self.fillMass(jets_pf08[0], jets_pf08[1])) #Flow n,5 ############################################################################# #REQUIRES THE FOLLOWING IN heppy/analyzers/fcc/Reader.py AFTER LINE 151: # particle_relations = defaultdict(list) # for tjet in store.get(self.cfg_ana.fatjets): # for i in range(tjet.particles_size()): # particle_relations[Jet(tjet)].append(Particle(tjet.particles(i))) # for fatjet, particles in particle_relations.items(): # fatjets[fatjet].jetConstituents = particles ############################################################################# #R = 0.8 # init R = 0.05 flow_Jet1 = [0] * 5 flow_Jet2 = [0] * 5 if len(jets_pf08) < 2: return jet1_ungroomed = ROOT.TLorentzVector() jet2_ungroomed = ROOT.TLorentzVector() jet1_ungroomed.SetPtEtaPhiE(jets_pf08[0].pt(), jets_pf08[0].eta(), jets_pf08[0].phi(), jets_pf08[0].e()) jet2_ungroomed.SetPtEtaPhiE(jets_pf08[1].pt(), jets_pf08[1].eta(), jets_pf08[1].phi(), jets_pf08[1].e()) constituent_vector = ROOT.TLorentzVector() for n in range(1, 5 + 1): for constituent in jets_pf08[0].jetConstituents[1:]: constituent_vector.SetPtEtaPhiE(constituent.pt(), constituent.eta(), constituent.phi(), constituent.e()) dR = jet1_ungroomed.DeltaR(constituent_vector) if ((dR >= (n - 1) / 5 * R) and (dR < n / 5 * R)): flow_Jet1[n - 1] += abs(constituent.pt()) / abs( jets_pf08[0].pt()) for constituent in jets_pf08[1].jetConstituents[1:]: constituent_vector.SetPtEtaPhiE(constituent.pt(), constituent.eta(), constituent.phi(), constituent.e()) dR = jet2_ungroomed.DeltaR(constituent_vector) if ((dR >= (n - 1) / 5 * R) and (dR < n / 5 * R)): flow_Jet2[n - 1] += abs(constituent.pt()) / abs( jets_pf08[1].pt()) self.tree.fill('Jet1_Flow15', flow_Jet1[0]) self.tree.fill('Jet2_Flow15', flow_Jet2[0]) self.tree.fill('Jet1_Flow25', flow_Jet1[1]) self.tree.fill('Jet2_Flow25', flow_Jet2[1]) self.tree.fill('Jet1_Flow35', flow_Jet1[2]) self.tree.fill('Jet2_Flow35', flow_Jet2[2]) self.tree.fill('Jet1_Flow45', flow_Jet1[3]) self.tree.fill('Jet2_Flow45', flow_Jet2[3]) self.tree.fill('Jet1_Flow55', flow_Jet1[4]) self.tree.fill('Jet2_Flow55', flow_Jet2[4]) ################################### #TMVA Stuff Starts! ################################### self.bdt_Jet_trk02_tau1[0] = jets_trk02[0].tau1 self.bdt_Jet_trk02_tau2[0] = jets_trk02[0].tau2 self.bdt_Jet_trk02_tau3[0] = jets_trk02[0].tau3 self.bdt_Jet_trk02_tau21[0] = Jet1_trk02_tau21 self.bdt_Jet_trk02_tau31[0] = Jet1_trk02_tau31 self.bdt_Jet_trk02_tau32[0] = Jet1_trk02_tau32 self.bdt_Jet_trk02_SD_Corr_m[0] = sdjet1_corr.p4().M() if len(jets_trk04) >= 1: self.bdt_Jet_trk04_SD_Corr_m[0] = sdjet1_corr_04.p4().M() else: self.bdt_Jet_trk04_SD_Corr_m[0] = -1000. if len(jets_trk08) >= 1: self.bdt_Jet_trk08_SD_Corr_m[0] = sdjet1_corr_08.p4().M() else: self.bdt_Jet_trk08_SD_Corr_m[0] = -1000. self.bdt_Jet_Flow15[0] = flow_Jet1[0] self.bdt_Jet_Flow25[0] = flow_Jet1[1] self.bdt_Jet_Flow35[0] = flow_Jet1[2] self.bdt_Jet_Flow45[0] = flow_Jet1[3] self.bdt_Jet_Flow55[0] = flow_Jet1[4] mva_value = self.reader.EvaluateMVA("BDT") self.tree.fill('Jet1_Whad_vs_QCD_tagger', mva_value) # self.bdt_Jet_trk02_tau1[0] = jets_trk02[1].tau1 self.bdt_Jet_trk02_tau2[0] = jets_trk02[1].tau2 self.bdt_Jet_trk02_tau3[0] = jets_trk02[1].tau3 self.bdt_Jet_trk02_tau21[0] = Jet2_trk02_tau21 self.bdt_Jet_trk02_tau31[0] = Jet2_trk02_tau31 self.bdt_Jet_trk02_tau32[0] = Jet2_trk02_tau32 self.bdt_Jet_trk02_SD_Corr_m[0] = sdjet2_corr.p4().M() if len(jets_trk04) >= 2: self.bdt_Jet_trk04_SD_Corr_m[0] = sdjet2_corr_04.p4().M() else: self.bdt_Jet_trk04_SD_Corr_m[0] = -1000. if len(jets_trk08) >= 2: self.bdt_Jet_trk08_SD_Corr_m[0] = sdjet2_corr_08.p4().M() else: self.bdt_Jet_trk08_SD_Corr_m[0] = -1000. self.bdt_Jet_Flow15[0] = flow_Jet2[0] self.bdt_Jet_Flow25[0] = flow_Jet2[1] self.bdt_Jet_Flow35[0] = flow_Jet2[2] self.bdt_Jet_Flow45[0] = flow_Jet2[3] self.bdt_Jet_Flow55[0] = flow_Jet2[4] mva_value = self.reader.EvaluateMVA("BDT") self.tree.fill('Jet2_Whad_vs_QCD_tagger', mva_value) self.tree.tree.Fill()
def process(self, event): self.tree.reset() jets_trk02 = getattr(event, self.cfg_ana.jets_trk02_1000) jets_pf02 = getattr(event, self.cfg_ana.jets_pf02_1500) jets_pf04 = getattr(event, self.cfg_ana.jets_pf04_1000) jets_pf04_pdg = event.jets_pf04_1000_pdg jets_pf08 = getattr(event, self.cfg_ana.jets_pf08_1500) #gen_particles = event.all_particles jets_pf04_1500 = getattr(event, self.cfg_ana.jets_pf04_1500) jets_trk04 = getattr(event, self.cfg_ana.jets_trk04_1000) jets_trk08 = getattr(event, self.cfg_ana.jets_trk08_1000) electrons = getattr(event, self.cfg_ana.electrons) muons = getattr(event, self.cfg_ana.muons) Jet1_trk02_dR_lep = 999 Jet2_trk02_dR_lep = 999 Jet1_trk02_dR_Jet2_trk02 = 999 if (len(jets_trk02) >= 2 and len(jets_pf02) >= 2): j1 = ROOT.TLorentzVector() j2 = ROOT.TLorentzVector() j1.SetPtEtaPhiE(jets_trk02[0].pt(), jets_trk02[0].eta(), jets_trk02[0].phi(), jets_trk02[0].e()) j2.SetPtEtaPhiE(jets_trk02[1].pt(), jets_trk02[1].eta(), jets_trk02[1].phi(), jets_trk02[1].e()) if (len(electrons) != 0 and len(muons) == 0): e = ROOT.TLorentzVector() e.SetPtEtaPhiE(electrons[0].pt(), electrons[0].eta(), electrons[0].phi(), electrons[0].e()) Jet1_dR = j1.DeltaR(e) Jet2_dR = j2.DeltaR(e) if (len(electrons) == 0 and len(muons) != 0): m = ROOT.TLorentzVector() m.SetPtEtaPhiE(muons[0].pt(), muons[0].eta(), muons[0].phi(), muons[0].e()) Jet1_dR = j1.DeltaR(m) Jet2_dR = j2.DeltaR(m) if (len(electrons) != 0 and len(muons) != 0): isElectron = False isMuon = False if (electrons[0].pt() > muons[0].pt()): isElectron = True else: isMuon = True l = ROOT.TLorentzVector() if isElectron: l.SetPtEtaPhiE(electrons[0].pt(), electrons[0].eta(), electrons[0].phi(), electrons[0].e()) if isMuon: l.SetPtEtaPhiE(muons[0].pt(), muons[0].eta(), muons[0].phi(), muons[0].e()) Jet1_trk02_dR_lep = j1.DeltaR(l) Jet2_trk02_dR_lep = j2.DeltaR(l) self.tree.fill('Jet1_trk02_dR_lep', Jet1_trk02_dR_lep) self.tree.fill('Jet2_trk02_dR_lep', Jet2_trk02_dR_lep) Jet1_trk02_dR_Jet2_trk02 = j1.DeltaR(j2) self.tree.fill('Jet1_trk02_dR_Jet2_trk02', Jet1_trk02_dR_Jet2_trk02) # jets and leptons Jet1_lepclose = False Jet2_lepclose = False dR_close = 0.7 for i in xrange(len(electrons)): l = ROOT.TLorentzVector() l.SetPtEtaPhiE(electrons[i].pt(), electrons[i].eta(), electrons[i].phi(), electrons[i].e()) # do not use leptons with pTl/pTj<0.15 (our definiton of a semi-lep decay) if j1.DeltaR(l) < dR_close and l.Pt() / j1.Pt() > 0.15: Jet1_lepclose = True if j2.DeltaR(l) < dR_close and l.Pt() / j2.Pt() > 0.15: Jet2_lepclose = True for i in xrange(len(muons)): l = ROOT.TLorentzVector() l.SetPtEtaPhiE(muons[i].pt(), muons[i].eta(), muons[i].phi(), muons[i].e()) # do not use leptons with pTl/pTj<0.15 (our definiton of a semi-lep decay) if j1.DeltaR(l) < dR_close and l.Pt() / j1.Pt() > 0.15: Jet1_lepclose = True if j2.DeltaR(l) < dR_close and l.Pt() / j2.Pt() > 0.15: Jet2_lepclose = True # lepton_iso = False dR_match = 0.2 for i in xrange(len(electrons)): l = ROOT.TLorentzVector() l.SetPtEtaPhiE(electrons[i].pt(), electrons[i].eta(), electrons[i].phi(), electrons[i].e()) if lepton_iso == False: n_match = 0 for j in xrange(len(jets_trk02)): j1 = ROOT.TLorentzVector() j1.SetPtEtaPhiE(jets_trk02[j].pt(), jets_trk02[j].eta(), jets_trk02[j].phi(), jets_trk02[j].e()) if j1.DeltaR(l) < dR_match: n_match += 1 if n_match == 0: lepton_iso = True for i in xrange(len(muons)): l = ROOT.TLorentzVector() l.SetPtEtaPhiE(muons[i].pt(), muons[i].eta(), muons[i].phi(), muons[i].e()) if lepton_iso == False: n_match = 0 for j in xrange(len(jets_trk02)): j1 = ROOT.TLorentzVector() j1.SetPtEtaPhiE(jets_trk02[j].pt(), jets_trk02[j].eta(), jets_trk02[j].phi(), jets_trk02[j].e()) if j1.DeltaR(l) < dR_match: n_match += 1 if n_match == 0: lepton_iso = True # self.tree.fill('Jet1_lepclose', Jet1_lepclose) self.tree.fill('Jet2_lepclose', Jet2_lepclose) self.tree.fill('lepton_iso', lepton_iso) self.tree.fill('weight', event.weight) self.tree.fill('missingET', event.met.pt()) self.tree.fill('numberOfElectrons', len(electrons)) self.tree.fill('numberOfMuons', len(muons)) self.tree.fill('rapiditySeparation_trk02', abs(jets_trk02[0].eta() - jets_trk02[1].eta())) self.tree.fill('transverseMomentumAsymmetry_trk02', (jets_trk02[0].pt() - jets_trk02[1].pt()) / (jets_trk02[0].pt() + jets_trk02[1].pt())) self.tree.fill('Jet1_trk02_tau1', jets_trk02[0].tau1) self.tree.fill('Jet1_trk02_tau2', jets_trk02[0].tau2) self.tree.fill('Jet1_trk02_tau3', jets_trk02[0].tau3) self.tree.fill('Jet2_trk02_tau1', jets_trk02[1].tau1) self.tree.fill('Jet2_trk02_tau2', jets_trk02[1].tau2) self.tree.fill('Jet2_trk02_tau3', jets_trk02[1].tau3) Jet1_trk02_tau31 = -999.0 Jet1_trk02_tau21 = -999.0 Jet1_trk02_tau32 = -999.0 Jet2_trk02_tau31 = -999.0 Jet2_trk02_tau21 = -999.0 Jet2_trk02_tau32 = -999.0 if (jets_trk02[0].tau1 != 0.0): Jet1_trk02_tau31 = jets_trk02[0].tau3 / jets_trk02[0].tau1 Jet1_trk02_tau21 = jets_trk02[0].tau2 / jets_trk02[0].tau1 if (jets_trk02[0].tau2 != 0.0): Jet1_trk02_tau32 = jets_trk02[0].tau3 / jets_trk02[0].tau2 if (jets_trk02[1].tau1 != 0.0): Jet2_trk02_tau31 = jets_trk02[1].tau3 / jets_trk02[1].tau1 Jet2_trk02_tau21 = jets_trk02[1].tau2 / jets_trk02[1].tau1 if (jets_trk02[1].tau2 != 0.0): Jet2_trk02_tau32 = jets_trk02[1].tau3 / jets_trk02[1].tau2 self.tree.fill('Jet1_trk02_tau31', Jet1_trk02_tau31) self.tree.fill('Jet1_trk02_tau21', Jet1_trk02_tau21) self.tree.fill('Jet1_trk02_tau32', Jet1_trk02_tau32) self.tree.fill('Jet2_trk02_tau31', Jet2_trk02_tau31) self.tree.fill('Jet2_trk02_tau21', Jet2_trk02_tau21) self.tree.fill('Jet2_trk02_tau32', Jet2_trk02_tau32) # here is btag, need matching in DR Jet1_trk02_dR_pf04 = 999 Jet2_trk02_dR_pf04 = 999 for j in jets_pf04: pf04 = ROOT.TLorentzVector() pf04.SetPtEtaPhiE(j.pt(), j.eta(), j.phi(), j.e()) if j.tags['bf'] > 0: if pf04.DeltaR(j1) < Jet1_trk02_dR_pf04: Jet1_trk02_dR_pf04 = pf04.DeltaR(j1) if pf04.DeltaR(j2) < Jet2_trk02_dR_pf04: Jet2_trk02_dR_pf04 = pf04.DeltaR(j2) #print 'dr j1 ',Jet1_trk02_dR_pf04 #print 'dr j2 ',Jet2_trk02_dR_pf04 pdg1 = 0 pdg2 = 0 if Jet1_trk02_dR_pf04 < 0.3: pdg1 = 5 if Jet2_trk02_dR_pf04 < 0.3: pdg2 = 5 # TRF / truth b-tagging -> need at least 2 jets_pf04 use_DELPHES = False jet = [] ipdg = 0 for i in range(len(jets_pf04)): if use_DELPHES == True: ipdg = jets_pf04[i].tags['flav'] if ipdg != 4 and ipdg != 5: ipdg = 0 else: ipdg = jets_pf04_pdg[i].flavour jet.append([jets_pf04[i], ipdg]) weight_1tagex = getNbTagEx(1, jet, 2) weight_1tagexJet1 = getNbTagEx(1, jet, 2, 0) weight_1tagexJet2 = getNbTagEx(1, jet, 2, 1) weight_2tagex = getNbTagEx(2, jet, 2) self.tree.fill('weight_1tagex', weight_1tagex) self.tree.fill('weight_2tagex', weight_2tagex) self.tree.fill('weight_1tagexJet1', weight_1tagexJet1) self.tree.fill('weight_1tagexJet2', weight_1tagexJet2) #MATCHING PF02 and trk02 for CORRECTION Jet1_trk02_dR_pf02 = 999 Jet2_trk02_dR_pf02 = 999 Jet1_pf02 = None Jet2_pf02 = None for j in jets_pf02: pf02 = ROOT.TLorentzVector() pf02.SetPtEtaPhiE(j.pt(), j.eta(), j.phi(), j.e()) if pf02.DeltaR(j1) < Jet1_trk02_dR_pf02: Jet1_trk02_dR_pf02 = pf02.DeltaR(j1) Jet1_pf02 = j if pf02.DeltaR(j2) < Jet2_trk02_dR_pf02: Jet2_trk02_dR_pf02 = pf02.DeltaR(j2) Jet2_pf02 = j #print 'jet1 dr ',Jet1_trk02_dR_pf02,' pf02 ',Jet1_pf02,' trk02 ',jets_trk02[0] #print 'jet2 dr ',Jet2_trk02_dR_pf02,' pf02 ',Jet2_pf02,' trk02 ',jets_trk02[1] corr1 = Jet1_pf02.p4().Pt() / j1.Pt() corr2 = Jet2_pf02.p4().Pt() / j2.Pt() #print 'corr 1 ',corr1,' corr2 ',corr2 #NORMAL TRK02 SD corrected jet p4sd1 = ROOT.TLorentzVector() p4sd2 = ROOT.TLorentzVector() p4sd1.SetPtEtaPhiM( jets_trk02[0].subjetsSoftDrop[0].p4().Pt() * corr1, jets_trk02[0].eta(), jets_trk02[0].phi(), jets_trk02[0].subjetsSoftDrop[0].p4().M() * corr1) p4sd2.SetPtEtaPhiM( jets_trk02[1].subjetsSoftDrop[0].p4().Pt() * corr2, jets_trk02[1].eta(), jets_trk02[1].phi(), jets_trk02[1].subjetsSoftDrop[0].p4().M() * corr2) sdjet1_corr = Particle(pdg1, 0, p4sd1, 1) sdjet2_corr = Particle(pdg2, 0, p4sd2, 1) fillParticle(self.tree, 'Jet1_trk02_SD_Corr', sdjet1_corr) fillParticle(self.tree, 'Jet2_trk02_SD_Corr', sdjet2_corr) #NORMAL TRK02 SD jet #sdjet1 = Particle(pdg1, 0, jets_trk02[0].subjetsSoftDrop[0].p4(), 1) #sdjet2 = Particle(pdg2, 0, jets_trk02[1].subjetsSoftDrop[0].p4(), 1) #fillParticle(self.tree, 'Jet1_trk02_SD', sdjet1) #fillParticle(self.tree, 'Jet2_trk02_SD', sdjet2) #CORRECTED TRK02 jet p4jet1_corr = ROOT.TLorentzVector() p4jet2_corr = ROOT.TLorentzVector() p4jet1_corr.SetPtEtaPhiM(jets_trk02[0].pt() * corr1, jets_trk02[0].eta(), jets_trk02[0].phi(), jets_trk02[0].m() * corr1) p4jet2_corr.SetPtEtaPhiM(jets_trk02[1].pt() * corr2, jets_trk02[1].eta(), jets_trk02[1].phi(), jets_trk02[1].m() * corr2) jet1_corr = Particle(pdg1, 0, p4jet1_corr, 1) jet2_corr = Particle(pdg2, 0, p4jet2_corr, 1) #fillParticle(self.tree, 'Jet1_trk02_Corr', jet1_corr) #fillParticle(self.tree, 'Jet2_trk02_Corr', jet2_corr) # associate MET to one jet or another based on softdrop sdjetmet1, sdjetmet2 = self.corrMET( jets_trk02[0].subjetsSoftDrop[0], pdg1, jets_trk02[1].subjetsSoftDrop[0], pdg2, event.met) fillParticle(self.tree, 'Jet1_trk02_SD_MetCorr', sdjetmet1) fillParticle(self.tree, 'Jet2_trk02_SD_MetCorr', sdjetmet2) sdjetmet1, sdjetmet2 = self.corrMET(sdjet1_corr, pdg1, sdjet2_corr, pdg2, event.met) fillParticle(self.tree, 'Jet1_trk02_SD_Corr_MetCorr', sdjetmet1) fillParticle(self.tree, 'Jet2_trk02_SD_Corr_MetCorr', sdjetmet2) ###################### # trkjet04 mass info # ###################### #MATCHING PF04 and trk04 for CORRECTION Jet1_trk04_dR_pf04 = 999 Jet2_trk04_dR_pf04 = 999 Jet1_pf04 = None Jet2_pf04 = None for j in jets_pf04_1500: pf04 = ROOT.TLorentzVector() pf04.SetPtEtaPhiE(j.pt(), j.eta(), j.phi(), j.e()) if pf04.DeltaR(j1) < Jet1_trk04_dR_pf04: Jet1_trk04_dR_pf04 = pf04.DeltaR(j1) Jet1_pf04 = j if pf04.DeltaR(j2) < Jet2_trk04_dR_pf04: Jet2_trk04_dR_pf04 = pf04.DeltaR(j2) Jet2_pf04 = j corr1_04 = Jet1_pf04.p4().Pt() / j1.Pt() corr2_04 = Jet2_pf04.p4().Pt() / j2.Pt() #NORMAL TRK04 SD corrected jet p4sd1_04 = ROOT.TLorentzVector() p4sd2_04 = ROOT.TLorentzVector() Jet1_trk04_SD_Corr_m = -1000. Jet2_trk04_SD_Corr_m = -1000. if len(jets_trk04) >= 1: p4sd1_04.SetPtEtaPhiM( jets_trk04[0].subjetsSoftDrop[0].p4().Pt() * corr1_04, jets_trk04[0].eta(), jets_trk04[0].phi(), jets_trk04[0].subjetsSoftDrop[0].p4().M() * corr1_04) pdg1 = 0 sdjet1_corr_04 = Particle(pdg1, 0, p4sd1_04, 1) Jet1_trk04_SD_Corr_m = sdjet1_corr_04.p4().M() if len(jets_trk04) >= 2: p4sd2_04.SetPtEtaPhiM( jets_trk04[1].subjetsSoftDrop[0].p4().Pt() * corr2_04, jets_trk04[1].eta(), jets_trk04[1].phi(), jets_trk04[1].subjetsSoftDrop[0].p4().M() * corr2_04) pdg2 = 0 sdjet2_corr_04 = Particle(pdg2, 0, p4sd2_04, 1) Jet2_trk04_SD_Corr_m = sdjet2_corr_04.p4().M() self.tree.fill('Jet1_trk04_SD_Corr_m', Jet1_trk04_SD_Corr_m) self.tree.fill('Jet2_trk04_SD_Corr_m', Jet2_trk04_SD_Corr_m) ###################### # trkjet08 mass info # ###################### #MATCHING PF08 and trk08 for CORRECTION Jet1_trk08_dR_pf08 = 999 Jet2_trk08_dR_pf08 = 999 Jet1_pf08 = None Jet2_pf08 = None for j in jets_pf08: pf08 = ROOT.TLorentzVector() pf08.SetPtEtaPhiE(j.pt(), j.eta(), j.phi(), j.e()) if pf08.DeltaR(j1) < Jet1_trk08_dR_pf08: Jet1_trk08_dR_pf08 = pf08.DeltaR(j1) Jet1_pf08 = j if pf08.DeltaR(j2) < Jet2_trk08_dR_pf08: Jet2_trk08_dR_pf08 = pf08.DeltaR(j2) Jet2_pf08 = j corr1_08 = Jet1_pf08.p4().Pt() / j1.Pt() corr2_08 = Jet2_pf08.p4().Pt() / j2.Pt() #NORMAL TRK08 SD corrected jet p4sd1_08 = ROOT.TLorentzVector() p4sd2_08 = ROOT.TLorentzVector() Jet1_trk08_SD_Corr_m = -1000. Jet2_trk08_SD_Corr_m = -1000. if len(jets_trk08) >= 1: p4sd1_08.SetPtEtaPhiM( jets_trk08[0].subjetsSoftDrop[0].p4().Pt() * corr1_08, jets_trk08[0].eta(), jets_trk08[0].phi(), jets_trk08[0].subjetsSoftDrop[0].p4().M() * corr1_08) pdg1 = 0 sdjet1_corr_08 = Particle(pdg1, 0, p4sd1_08, 1) Jet1_trk08_SD_Corr_m = sdjet1_corr_08.p4().M() if len(jets_trk08) >= 2: p4sd2_08.SetPtEtaPhiM( jets_trk08[1].subjetsSoftDrop[0].p4().Pt() * corr2_08, jets_trk08[1].eta(), jets_trk08[1].phi(), jets_trk08[1].subjetsSoftDrop[0].p4().M() * corr2_08) pdg2 = 0 sdjet2_corr_08 = Particle(pdg2, 0, p4sd2_08, 1) Jet2_trk08_SD_Corr_m = sdjet2_corr_08.p4().M() self.tree.fill('Jet1_trk08_SD_Corr_m', Jet1_trk08_SD_Corr_m) self.tree.fill('Jet2_trk08_SD_Corr_m', Jet2_trk08_SD_Corr_m) if (len(jets_trk02) > 1): self.tree.fill('Mj1j2_trk02', self.fillMass(jets_trk02[0], jets_trk02[1])) self.tree.fill('Mj1j2_trk02_Corr', self.fillMass(jet1_corr, jet2_corr)) jetmet1, jetmet2 = self.corrMET(jets_trk02[0], pdg1, jets_trk02[1], pdg2, event.met) self.tree.fill('Mj1j2_trk02_MetCorr', self.fillMass(jetmet1, jetmet2)) #fillParticle(self.tree, 'Jet1_trk02_MetCorr', jetmet1) #fillParticle(self.tree, 'Jet2_trk02_MetCorr', jetmet2) jetmet1, jetmet2 = self.corrMET(jet1_corr, pdg1, jet2_corr, pdg2, event.met) self.tree.fill('Mj1j2_trk02_Corr_MetCorr', self.fillMass(jetmet1, jetmet2)) fillParticle(self.tree, 'Jet1_trk02_Corr_MetCorr', jetmet1) fillParticle(self.tree, 'Jet2_trk02_Corr_MetCorr', jetmet2) if (len(jets_pf02) > 1): self.tree.fill('Mj1j2_pf02', self.fillMass(jets_pf02[0], jets_pf02[1])) jetmet1, jetmet2 = self.corrMET(jets_pf02[0], pdg1, jets_pf02[1], pdg2, event.met) self.tree.fill('Mj1j2_pf02_MetCorr', self.fillMass(jetmet1, jetmet2)) if (len(jets_pf04) > 1): self.tree.fill('Mj1j2_pf04', self.fillMass(jets_pf04[0], jets_pf04[1])) jetmet1, jetmet2 = self.corrMET(jets_pf04[0], pdg1, jets_pf04[1], pdg2, event.met) self.tree.fill('Mj1j2_pf04_MetCorr', self.fillMass(jetmet1, jetmet2)) if (len(jets_pf08) > 1): self.tree.fill('Mj1j2_pf08', self.fillMass(jets_pf08[0], jets_pf08[1])) jetmet1, jetmet2 = self.corrMET(jets_pf08[0], pdg1, jets_pf08[1], pdg2, event.met) self.tree.fill('Mj1j2_pf08_MetCorr', self.fillMass(jetmet1, jetmet2)) if (len(electrons) >= 1): fillParticle(self.tree, 'Electron1', electrons[0]) if (len(electrons) >= 2): fillParticle(self.tree, 'Electron2', electrons[1]) if (len(muons) >= 1): fillParticle(self.tree, 'Muon1', muons[0]) if (len(muons) >= 2): fillParticle(self.tree, 'Muon2', muons[1]) ################################### #TMVA Stuff Starts! ################################### self.bdt_Jet_trk02_tau1[0] = jets_trk02[0].tau1 self.bdt_Jet_trk02_tau2[0] = jets_trk02[0].tau2 self.bdt_Jet_trk02_tau3[0] = jets_trk02[0].tau3 self.bdt_Jet_trk02_tau21[0] = Jet1_trk02_tau21 self.bdt_Jet_trk02_tau31[0] = Jet1_trk02_tau31 self.bdt_Jet_trk02_tau32[0] = Jet1_trk02_tau32 self.bdt_Jet_trk02_SD_Corr_m[0] = sdjet1_corr.p4().M() if len(jets_trk04) >= 1: self.bdt_Jet_trk04_SD_Corr_m[0] = sdjet1_corr_04.p4().M() else: self.bdt_Jet_trk04_SD_Corr_m[0] = -1000. if len(jets_trk08) >= 1: self.bdt_Jet_trk08_SD_Corr_m[0] = sdjet1_corr_08.p4().M() else: self.bdt_Jet_trk08_SD_Corr_m[0] = -1000. mva_value = self.reader.EvaluateMVA("BDT") self.tree.fill('Jet1_thad_vs_QCD_tagger', mva_value) # self.bdt_Jet_trk02_tau1[0] = jets_trk02[1].tau1 self.bdt_Jet_trk02_tau2[0] = jets_trk02[1].tau2 self.bdt_Jet_trk02_tau3[0] = jets_trk02[1].tau3 self.bdt_Jet_trk02_tau21[0] = Jet2_trk02_tau21 self.bdt_Jet_trk02_tau31[0] = Jet2_trk02_tau31 self.bdt_Jet_trk02_tau32[0] = Jet2_trk02_tau32 self.bdt_Jet_trk02_SD_Corr_m[0] = sdjet2_corr.p4().M() if len(jets_trk04) >= 2: self.bdt_Jet_trk04_SD_Corr_m[0] = sdjet2_corr_04.p4().M() else: self.bdt_Jet_trk04_SD_Corr_m[0] = -1000. if len(jets_trk08) >= 2: self.bdt_Jet_trk08_SD_Corr_m[0] = sdjet2_corr_08.p4().M() else: self.bdt_Jet_trk08_SD_Corr_m[0] = -1000. mva_value = self.reader.EvaluateMVA("BDT") self.tree.fill('Jet2_thad_vs_QCD_tagger', mva_value) self.tree.tree.Fill()
def process(self, event): self.tree.reset() htatas = getattr(event, self.cfg_ana.htatas) hbbs = getattr(event, self.cfg_ana.hbbs) met = event.met htatas.sort(key=lambda x: abs(x.m() - 125.)) hbbs.sort(key=lambda x: abs(x.m() - 125.)) bs = event.selected_bs selected_taus = event.selected_taus lights = event.selected_lights leptons = event.selected_leptons #print '-------------------' #print len(htatas), len(hbbs) #print len(taus), len(bs) #for tau in taus: # print tau.charge #print ROOT.return2() #f = Foo() #f.bar() #and you will see "Hello" on the screen ''' mVisA = 10.; # mass of visible object on side A. Must be >=0. pxA = 20.; # x momentum of visible object on side A. pyA = 30.; # y momentum of visible object on side A. mVisB = 10.; # mass of visible object on side B. Must be >=0. pxB = -20.; # x momentum of visible object on side B. pyB = -30.; # y momentum of visible object on side B. pxMiss = -5.; # x component of missing transverse momentum. pyMiss = -5.; # y component of missing transverse momentum. chiA = 4.; # hypothesised mass of invisible on side A. Must be >=0. chiB = 7.; # hypothesised mass of invisible on side B. Must be >=0. desiredPrecisionOnMt2 = 0.; # Must be >=0. If 0 alg aims for machine precision. if >0, MT2 computed to supplied absolute precision. useDeciSectionsInitially=True asymm_mt2 = asymm_mt2_lester_bisect() print '-----------------------------------------' MT2 = asymm_mt2.get_mT2( mVisA, pxA, pyA, mVisB, pxB, pyB, pxMiss, pyMiss, chiA, chiB, desiredPrecisionOnMt2, useDeciSectionsInitially) print 'MT2', MT2 ''' # semileptonic selection if len(selected_taus) > 0 and len(bs) > 1 and len(leptons) == 1: self.tree.fill('weight', event.weight) #print event.weight taus = [] taus.append(selected_taus[0]) taus.append(leptons[0]) fillParticle(self.tree, 'ta1', taus[0]) fillParticle(self.tree, 'ta2', taus[1]) fillParticle(self.tree, 'b1', bs[0]) fillParticle(self.tree, 'b2', bs[1]) ''' def mTsq(bT, cT, mB, mC): eB = math.sqrt(mB*mB+ bT*bT) eC = math.sqrt(mC*mC+ cT*cT) return mB*mB+mC*mC+2*(eB*eC - bT*cT) def smT2(bt1, bt2): return max(math.sqrt(bt1),math.sqrt(bt2)) mTsq1 = mTsq(taus[0].p4().Vect().XYvector(), bs[0].p4().Vect().XYvector(), taus[0].p4().M(), bs[0].p4().M()) mTsq2 = mTsq(taus[1].p4().Vect().XYvector(), bs[1].p4().Vect().XYvector(), taus[1].p4().M(), bs[1].p4().M()) smTsq = smT2(mTsq1, mTsq2) #print mTsq1, mTsq2, smTsq ''' mVisA = bs[0].p4().M() # mass of visible object on side A. Must be >=0. pxA = bs[0].p4().Px() # x momentum of visible object on side A. pyA = bs[0].p4().Py() # y momentum of visible object on side A. mVisB = bs[1].p4().M() # mass of visible object on side A. Must be >=0. pxB = bs[1].p4().Px() # x momentum of visible object on side A. pyB = bs[1].p4().Py() # y momentum of visible object on side A. pxMiss = taus[0].p4().Px() + taus[1].p4().Px() + met.p4().Px( ) # x component of missing transverse momentum. pyMiss = taus[0].p4().Py() + taus[1].p4().Py() + met.p4().Py( ) # x component of missing transverse momentum. chiA = taus[0].p4().M() # hypothesised mass of invisible on side A. Must be >=0. chiB = taus[1].p4().M() # hypothesised mass of invisible on side B. Must be >=0. desiredPrecisionOnMt2 = 0. # Must be >=0. If 0 alg aims for machine precision. if >0, MT2 computed to supplied absolute precision. useDeciSectionsInitially = True asymm_mt2 = asymm_mt2_lester_bisect() MT2 = asymm_mt2.get_mT2(mVisA, pxA, pyA, mVisB, pxB, pyB, pxMiss, pyMiss, chiA, chiB, desiredPrecisionOnMt2, useDeciSectionsInitially) #print 'MT2', MT2 self.tree.fill('mT2', MT2) if len(lights) > 0: fillParticle(self.tree, 'j1', lights[0]) if len(lights) > 1: fillParticle(self.tree, 'j2', lights[1]) def computeMT(taup4, metp4): scalar_prod = taup4.Px() * metp4.Px() + taup4.Py() * metp4.Py() return math.sqrt(2 * (taup4.Pt() * metp4.Pt() - scalar_prod)) mt1 = computeMT(taus[0].p4(), met.p4()) mt2 = computeMT(taus[1].p4(), met.p4()) self.tree.fill('ta1_mt', mt1) self.tree.fill('ta2_mt', mt2) st = taus[0].p4().Pt() + taus[1].p4().Pt() + bs[0].p4().Pt( ) + bs[0].p4().Pt() + met.p4().Pt() self.tree.fill('sT', st) fillMet(self.tree, 'met', met) #fillParticle(self.tree, 'htata', htatas[0]) htata_p4 = taus[0].p4() + taus[1].p4() htata = Particle(25, 0, htata_p4, 1) fillParticle(self.tree, 'htata', htata) fillParticle(self.tree, 'hbb', hbbs[0]) htata_metcorr_p4 = taus[0].p4() + taus[1].p4() + met.p4() htata_metcorr = Particle(25, 0, htata_metcorr_p4, 1) fillParticle(self.tree, 'htata_metcorr', htata_metcorr) hh = Resonance(htata, hbbs[0], 25) hh_metcorr = Resonance(htata_metcorr, hbbs[0], 25) fillParticle(self.tree, 'hh', hh) fillParticle(self.tree, 'hh_metcorr', hh_metcorr) self.tree.fill('nbjets', len(event.selected_bs)) self.tree.fill('nljets', len(event.selected_lights)) self.tree.fill( 'njets', len(event.selected_lights) + len(event.selected_bs) + len(event.selected_taus)) self.tree.fill('nlep', len(event.selected_leptons)) self.tree.fill('ntajets', len(event.selected_taus)) drbb = deltaR(bs[0], bs[1]) drtata = deltaR(taus[0], taus[1]) self.tree.fill('drtata', drtata) self.tree.fill('drbb', drbb) # here fill all variables for BDT self.bdt_ta1_pt[0] = taus[0].p4().Pt() self.bdt_ta1_eta[0] = taus[0].p4().Eta() self.bdt_ta1_phi[0] = taus[0].p4().Phi() self.bdt_ta2_pt[0] = taus[1].p4().Pt() self.bdt_ta2_eta[0] = taus[1].p4().Eta() self.bdt_ta2_phi[0] = taus[1].p4().Phi() self.bdt_b1_pt[0] = bs[0].p4().Pt() self.bdt_b1_eta[0] = bs[0].p4().Eta() self.bdt_b1_phi[0] = bs[0].p4().Phi() self.bdt_b2_pt[0] = bs[1].p4().Pt() self.bdt_b2_eta[0] = bs[1].p4().Eta() self.bdt_b2_phi[0] = bs[1].p4().Phi() self.bdt_met_pt[0] = met.p4().Pt() self.bdt_met_phi[0] = met.p4().Phi() self.bdt_met_px[0] = met.p4().Px() self.bdt_met_py[0] = met.p4().Py() self.bdt_htata_pt[0] = htata.p4().Pt() self.bdt_htata_eta[0] = htata.p4().Eta() self.bdt_htata_phi[0] = htata.p4().Phi() self.bdt_htata_m[0] = htata.p4().M() self.bdt_hbb_pt[0] = hbbs[0].p4().Pt() self.bdt_hbb_eta[0] = hbbs[0].p4().Eta() self.bdt_hbb_phi[0] = hbbs[0].p4().Phi() self.bdt_hbb_m[0] = hbbs[0].p4().M() self.bdt_hh_pt[0] = hh.p4().Pt() self.bdt_hh_eta[0] = hh.p4().Eta() self.bdt_hh_phi[0] = hh.p4().Phi() self.bdt_hh_m[0] = hh.p4().M() self.bdt_ta1_mt[0] = mt1 self.bdt_ta2_mt[0] = mt2 self.bdt_mT2[0] = MT2 self.bdt_sT[0] = st self.bdt_njets[0] = len(event.selected_lights) + len( event.selected_bs) + len(event.selected_taus) self.bdt_nbjets[0] = len(event.selected_bs) self.bdt_ntajets[0] = len(event.selected_taus) #self.bdt_nlep [0] = len(event.selected_leptons) #print MT2, ",", s ,",", len(event.selected_lights) + len(event.selected_bs) + len(event.selected_taus), ",", len(event.selected_bs) ,",", len(event.selected_taus) ,",", len(event.selected_leptons)t #print MT2, ",", s ,",", len(event.selected_lights) + len(event.selected_bs) + len(event.selected_taus), ",", len(event.selected_bs) ,",", len(event.selected_taus) ,",", len(event.selected_leptons)t mva_value = self.reader.EvaluateMVA("BDT") #print mva_value self.tree.fill('tmva_bdt', mva_value) self.tree.tree.Fill()