def test_acoplanarity(self): '''test acoplanarity w/r to Patricks implementation ''' ptc1 = Particle(11, -1, TLorentzVector(1, 2, 3, 7)) ptc2 = Particle(-11, 1, TLorentzVector(2, 3, 4, 10)) reso = Resonance(ptc1, ptc2, 23) self.assertEqual(reso.cross(), acop_patrick(reso.leg1(), reso.leg2()))
def test_deltaR2(self): """Test that the deltaR2 method properly uses either eta or theta depending on the collider configuration """ Collider.BEAMS = 'pp' tlv1 = TLorentzVector() tlv1.SetPtEtaPhiM(10, 1.1, 0, 0) tlv2 = TLorentzVector() tlv2.SetPtEtaPhiM(10, 1.2, 0, 0) ptc1 = Particle(1, 1, tlv1) ptc2 = Particle(1, 1, tlv2) dR = math.sqrt( deltaR2(ptc1, ptc2)) self.assertAlmostEqual(dR, 0.1) Collider.BEAMS = 'ee' tlv1 = TLorentzVector() tlv1.SetPtEtaPhiM(10, 1.1, 0, 0) tlv1.SetTheta(1.1) tlv2 = TLorentzVector() tlv2.SetPtEtaPhiM(10, 1.2, 0, 0) tlv2.SetTheta(1.2) ptc1 = Particle(1, 1, tlv1) ptc2 = Particle(1, 1, tlv2) dR = math.sqrt( deltaR2(ptc1, ptc2)) self.assertAlmostEqual(dR, 0.1)
def test_printout(self): '''Test that the particle printout is adapted to the collider beams.''' ptc = TlvParticle(1, 1, TLorentzVector()) Collider.BEAMS = 'pp' self.assertIn('pt', ptc.__repr__()) Collider.BEAMS = 'ee' self.assertIn('theta', ptc.__repr__()) Collider.BEAMS = 'pp'
def test_resonance(self): ptc1 = Particle(11, -1, TLorentzVector(1, 0, 0, 1)) ptc2 = Particle(-11, 1, TLorentzVector(2, 0, 0, 2)) reso = Resonance(ptc1, ptc2, 23) self.assertEqual(reso._pid, 23) self.assertEqual(reso.e(), 3) self.assertEqual(reso.leg1(), ptc1) self.assertEqual(reso.leg2(), ptc2) self.assertEqual(reso.q(), 0) self.assertEqual(reso.p4(), TLorentzVector(3, 0, 0, 3))
def process(self, event): #sqrts = self.cfg_ana.sqrts sqrts = 240. #sqrts = random.gauss(240.,240.*0.0012) #sqrts = random.gauss(240.,10.) jets = getattr(event, self.cfg_ana.input_jets) misenergy = getattr(event, self.cfg_ana.misenergy) # solving the equation vis_p4 = TLorentzVector(0, 0, 0, 0) for jet in jets: vis_p4 += jet.p4() vis = Recoil(0, 0, vis_p4, 1) # m=m_Z constrain a = vis.e() * sqrts / (vis.m()**2) b = a**2 - (sqrts**2 - 91.**2) / (vis.m()**2) # sf stands for scaling factor if b < 0: sf = 1 setattr(event, self.cfg_ana.det, 1) else: #sf2 corresponds to the solution where the missing energy is negative therefore sf is the scaling factor that makes sense from a physics pov. sf = a - math.sqrt(b) sf2 = a + math.sqrt(b) setattr(event, self.cfg_ana.det, 2) ######test #visscaled1=TLorentzVector(0,0,0,0) #visscaled2=TLorentzVector(0,0,0,0) #for jet in jets: # visscaled1+=jet.p4()*sf # visscaled2+=jet.p4()*sf2 #cms=TLorentzVector(0,0,0,240) #v1=cms-visscaled1 #v2=cms-visscaled2 #print v1.E(),v2.E() setattr(event, self.cfg_ana.scalingfac, sf) setattr(event, self.cfg_ana.scalingfac2, sf2) scale_factors = [sf] * 2 output = [] for jet, factor in zip(jets, scale_factors): # the jets should not be deepcopied # as they are heavy objects containing # in particular a list of consistuent particles scaled_jet = copy.copy(jet) scaled_jet._tlv = copy.deepcopy(jet._tlv) scaled_jet._tlv *= factor output.append(scaled_jet) setattr(event, self.cfg_ana.output_jets, output)
def particle(pdgid, thetamin, thetamax, ptmin, ptmax, flat_pt=False): '''Create and return a particle in a given phase space @param pdgid: the pdg ID code @param thetamin: min theta @param thetamax: max theta @param ptmin: min pt @param ptmax: max pt @param flat_pt: False by default, indicating that the pt of the particle should be chosen from a uniform distribution between ptmin and ptmax. if set to true, the energy of the particle is drawn from a uniform distribution between ptmin and ptmax (then considered as Emin and Emax). ''' mass, charge = particle_data[pdgid] theta = random.uniform(thetamin, thetamax) phi = random.uniform(-math.pi, math.pi) energy = random.uniform(ptmin, ptmax) costheta = math.cos(math.pi / 2. - theta) sintheta = math.sin(math.pi / 2. - theta) tantheta = sintheta / costheta cosphi = math.cos(phi) sinphi = math.sin(phi) if flat_pt: pt = energy momentum = pt / sintheta energy = math.sqrt(momentum**2 + mass**2) else: energy = max([energy, mass]) momentum = math.sqrt(energy**2 - mass**2) tlv = TLorentzVector(momentum * sintheta * cosphi, momentum * sintheta * sinphi, momentum * costheta, energy) return Particle(pdgid, charge, tlv)
def process(self, event): initial = TLorentzVector() initial.SetXYZM(0, 0, 0, self.cfg_ana.sqrts) particles = getattr(event, self.cfg_ana.particles) visible_p4 = TLorentzVector() for ptc in particles: if ptc.status() > 1: #PF cand status=0 in CMS raise ValueError('are you sure? status=' + str(ptc.status())) visible_p4 += ptc.p4() recoil_p4 = initial - visible_p4 recoil = Particle(0, 0, recoil_p4) visible = Particle(0, 0, visible_p4) setattr(event, '_'.join(['recoil', self.cfg_ana.instance_label]), recoil) setattr(event, '_'.join(['recoil_visible', self.cfg_ana.instance_label]), visible)
def test_iso1(self): p4 = TLorentzVector() p4.SetPtEtaPhiM(10, 0, 0, 0.105) lepton = Particle(13, 1, p4) p4 = TLorentzVector() p4.SetPtEtaPhiM(1, 0, 0, 0.105) ptc = Particle(211, 1, p4) # test iso calc computer = IsolationComputer([EtaPhiCircle(0.4)]) iso = computer.compute(lepton, [ptc,ptc]) self.assertEqual(iso.sumpt, 2*ptc.pt()) self.assertEqual(iso.sume, 2*ptc.e()) self.assertEqual(iso.num, 2) # test IsolationInfo addition iso2 = copy.copy(iso) iso2 += iso self.assertEqual(iso2.sumpt, 4*ptc.pt()) self.assertEqual(iso2.sume, 4*ptc.e()) self.assertEqual(iso2.num, 4) # test veto computer = IsolationComputer([EtaPhiCircle(0.4)], [EtaPhiCircle(0.1)]) iso = computer.compute(lepton, [ptc]) self.assertEqual(iso.sumpt, 0.)
def setUp(self): """maps the space with particles""" self.ptcs = {} for eta in range(-30, 30, 2): eta /= 10. for phi in range(-30, 30, 2): phi /= 10. tlv = TLorentzVector() tlv.SetPtEtaPhiM(10, eta, phi, 0) self.ptcs[(eta, phi)] = Particle(1, 0, tlv)
def corrMET2(self, jet1, jet2, met): metp4 = ROOT.TLorentzVector() px = met.p4().Px() py = met.p4().Py() if (jet1.p4().Pt() < jet2.p4().Pt()): pz = jet1.p4().Pz() / 2. e = math.sqrt(px**2 + py**2 + pz**2) metp4.SetPxPyPzE(px, py, pz, e) jetcorr1 = Particle(15, 0, jet1.p4() + metp4, 1) jetcorr2 = Particle(15, 0, jet2.p4(), 1) else: pz = jet2.p4().Pz() / 2. e = math.sqrt(px**2 + py**2 + pz**2) metp4.SetPxPyPzE(px, py, pz, e) jetcorr1 = Particle(15, 0, jet1.p4(), 1) jetcorr2 = Particle(15, 0, jet2.p4() + metp4, 1) return jetcorr1, jetcorr2
def corrMET(self, jet1, jet2, met): dphi1 = abs(jet1.p4().DeltaPhi(met.p4())) dphi2 = abs(jet2.p4().DeltaPhi(met.p4())) metp4 = ROOT.TLorentzVector() px = met.p4().Px() py = met.p4().Py() if (dphi1 < dphi2): pz = jet1.p4().Pz() / 2. e = math.sqrt(px**2 + py**2 + pz**2) metp4.SetPxPyPzE(px, py, pz, e) jetcorr1 = Particle(15, 0, jet1.p4() + metp4, 1) jetcorr2 = Particle(15, 0, jet2.p4(), 1) else: pz = jet2.p4().Pz() / 2. e = math.sqrt(px**2 + py**2 + pz**2) metp4.SetPxPyPzE(px, py, pz, e) jetcorr1 = Particle(15, 0, jet1.p4(), 1) jetcorr2 = Particle(15, 0, jet2.p4() + metp4, 1) return jetcorr1, jetcorr2
def process(self, event): ptcs = getattr(event, self.cfg_ana.particles) sump3 = TVector3() charge = 0 sume = 0 for ptc in ptcs: sump3 += ptc.p3() charge += ptc.q() p4 = TLorentzVector() p4.SetVectM(-sump3, 0) missing = Particle(0, charge, p4) setattr(event, self.instance_label, missing)
def test_many(self): nzeds = 100 masses = np.linspace(80, 100, nzeds) boosts = np.linspace(1, 50, nzeds) thetas = np.linspace(1, math.pi, nzeds) for mass, boost, theta in zip(masses, boosts, thetas): energy = mass / 2. ptc1 = Particle(11, -1, TLorentzVector(0, energy, 0, energy)) ptc2 = Particle(11, 1, TLorentzVector(0, -energy, 0, energy)) resonance = Resonance(ptc1, ptc2, 23) p3_lab = TVector3() p3_lab.SetMagThetaPhi(boost, theta, 0.1) p4_lab = TLorentzVector() p4_lab.SetVectM(p3_lab, mass) bp4 = copy.deepcopy(resonance.p4()) boost_vector = p4_lab.BoostVector() bp4.Boost(boost_vector) places = 8 self.assertAlmostEqual(bp4.Vect().Mag(), boost, places) self.assertAlmostEqual(bp4.M(), mass, places) resonance.boost(boost_vector) self.assertAlmostEqual(bp4.E(), resonance.e(), places)
def process(self, event): '''Process event. The event must contain: - self.cfg_ana.particles: the input collection of particles. ''' p4 = TLorentzVector() charge = 0 pdgid = 0 ptcs = getattr(event, self.cfg_ana.particles) for ptc in ptcs: p4 += ptc.p4() charge += ptc.q() sumptc = Particle(pdgid, charge, p4) setattr(event, self.cfg_ana.output, sumptc)
def process(self, event): p4 = TLorentzVector() charge = 0 pdgid = 0 ptcs = getattr(event, self.cfg_ana.particles) jet = Jet(p4) constituents = JetConstituents() for ptc in ptcs: p4 += ptc.p4() charge += ptc.q() constituents.append(ptc) sumptc = Particle(pdgid, charge, p4) jet = Jet(p4) jet.constituents = constituents jet.constituents.sort() setattr(event, self.cfg_ana.output, jet)
def process(self, event): pivot = getattr(event, self.cfg_ana.pivot)[0] ptcs = getattr(event, self.cfg_ana.particles) dR = self.cfg_ana.dR cone_ptcs = inConeCollection(pivot, ptcs, dR, 0.) for ptc in cone_ptcs: setattr(ptc, 'dR', deltaR(pivot, ptc)) tlv = TLorentzVector(pivot.p4()) tlv.SetPhi(pivot.p4().Phi() + math.pi) tlv_theta = math.pi - pivot.p4().Theta() if tlv_theta >= math.pi: tlv_theta -= math.pi tlv.SetTheta(tlv_theta) control_pivot = Particle(pivot.pdgid(), pivot.charge(), tlv) control_cone_ptcs = inConeCollection(control_pivot, ptcs, dR, 0.) setattr(event, self.cfg_ana.output, cone_ptcs) setattr(event, self.cfg_ana.control_output, control_cone_ptcs)
def process(self, event): particles = getattr(event, self.cfg_ana.particles) leptons = getattr(event, self.cfg_ana.leptons) dressed = [] for lepton in leptons: sump4 = TLorentzVector() for particle in particles: if self.cfg_ana.area.is_inside(lepton.eta(), lepton.phi(), particle.eta(), particle.phi()): sump4 += particle.p4() sump4 += lepton.p4() dressed.append(Particle(lepton.pdgid(), lepton.q(), sump4)) setattr(event, self.cfg_ana.output, dressed)
def process(self, event): '''Process event. The event must contain: - self.cfg_ana.particles: the input collection of particles. ''' p4 = TLorentzVector() charge = 0 pdgid = 0 ptcs = getattr(event, self.cfg_ana.particles) jet = Jet(p4) constituents = JetConstituents() for ptc in ptcs: p4 += ptc.p4() charge += ptc.q() constituents.append(ptc) sumptc = Particle(pdgid, charge, p4) jet = Jet(p4) jet.constituents = constituents jet.constituents.sort() setattr(event, self.cfg_ana.output, jet)
def particle(pdgid, thetamin, thetamax, ptmin, ptmax, flat_pt=False): mass, charge = particle_data[pdgid] theta = random.uniform(thetamin, thetamax) phi = random.uniform(-math.pi, math.pi) energy = random.uniform(ptmin, ptmax) costheta = math.cos(math.pi / 2. - theta) sintheta = math.sin(math.pi / 2. - theta) tantheta = sintheta / costheta cosphi = math.cos(phi) sinphi = math.sin(phi) if flat_pt: pt = energy momentum = pt / sintheta energy = math.sqrt(momentum**2 + mass**2) else: energy = max([energy, mass]) momentum = math.sqrt(energy**2 - mass**2) tlv = TLorentzVector(momentum * sintheta * cosphi, momentum * sintheta * sinphi, momentum * costheta, energy) return Particle(pdgid, charge, tlv)
def process(self, event): self.tree.reset() jets_trk08 = getattr(event, self.cfg_ana.jets_trk08_20) jets_pf04 = getattr(event, self.cfg_ana.jets_pf04) jets_pf04_pdg = event.jets_pf04_pdg jets_pf08 = getattr(event, self.cfg_ana.jets_pf08_30) electrons = getattr(event, self.cfg_ana.electrons) muons = getattr(event, self.cfg_ana.muons) Ht = 0 SSee = 0 SSem = 0 SSmm = 0 SSeee = 0 SSeem = 0 SSemm = 0 SSmmm = 0 SS4l = 0 # pt cut on lepton collections in analysis.py ##################################################################################### ##### selection for the SSML channel ##################################################################################### # flag if this is a same-sign lepton or a multilepton events nlep = len(electrons) + len(muons) if (nlep >= 2): if (len(electrons) > 2): SSeee = 1 if (len(electrons) == 2 and len(muons) > 0): SSeem = 1 if (len(electrons) == 2 and len(muons) == 0): if (electrons[0].pdgid() * electrons[1].pdgid() > 0): SSee = 1 if (len(electrons) == 1 and len(muons) == 1): if (electrons[0].pdgid() * muons[0].pdgid() > 0): SSem = 1 if (len(muons) == 2 and len(electrons) == 0): if (muons[0].pdgid() * muons[1].pdgid() > 0): SSmm = 1 if (len(electrons) == 1 and len(muons) > 1): SSemm = 1 if (len(muons) > 2 and SSeee == 0 and SSeem == 0 and SSemm == 0): SSmmm = 1 # sum = SSeee+SSeem+SSemm+SSmmm+SSee+SSem+SSmm # if (sum>1): # print 'SSeee:',SSeee,' SSeem:',SSeem,' SSemm:',SSemm,' SSmmm:',SSmmm, ' SSee:',SSee,' SSem:', SSem, ' SSmm:',SSmm if (nlep >= 4): SS4l = 1 for el in electrons: Ht += el.pt() for mu in muons: Ht += mu.pt() # number of jets and b-jets (pt cut on jet collection in analysis.py) njets = len(jets_pf04) nbjets = 0 for jet in jets_pf04: Ht += jet.pt() if (jet.tags['bf'] > 0): nbjets += 1 # minimum number of jets and b-jets if (njets >= 5 and nbjets >= 2): self.tree.fill('numberOfLeptons', nlep) self.tree.fill('SSee', SSee) self.tree.fill('SSem', SSem) self.tree.fill('SSmm', SSmm) self.tree.fill('SSeee', SSeee) self.tree.fill('SSeem', SSeem) self.tree.fill('SSemm', SSemm) self.tree.fill('SSmmm', SSmmm) self.tree.fill('SS4l', SS4l) if (len(electrons) >= 2): fillParticle(self.tree, 'Electron2', electrons[1]) if (len(electrons) >= 3): fillParticle(self.tree, 'Electron3', electrons[2]) if (len(muons) >= 1): fillParticle(self.tree, 'Muon1', muons[0]) if (len(muons) >= 2): fillParticle(self.tree, 'Muon2', muons[1]) if (len(muons) >= 3): fillParticle(self.tree, 'Muon3', muons[2]) for jet in jets_pf04: self.tree.fill('Jet_pt', jet.pt()) for el in electrons: self.tree.fill('Lep_pt', el.pt()) for mu in muons: self.tree.fill('Lep_pt', mu.pt()) self.tree.fill('Ht', Ht) self.tree.fill('numberOfJets', njets) self.tree.fill('numberOfBJets', nbjets) 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)) Jet_dR = [] for i_jet in range(5): the_Jet_dR = 999 j = ROOT.TLorentzVector() j.SetPtEtaPhiE(jets_pf04[i_jet].pt(), jets_pf04[i_jet].eta(), jets_pf04[i_jet].phi(), jets_pf04[i_jet].e()) for i_e in range(len(electrons)): e = ROOT.TLorentzVector() e.SetPtEtaPhiE(electrons[i_e].pt(), electrons[i_e].eta(), electrons[i_e].phi(), electrons[i_e].e()) if j.DeltaR(e) < the_Jet_dR: the_Jet_dR = j.DeltaR(e) for i_m in range(len(muons)): m = ROOT.TLorentzVector() m.SetPtEtaPhiE(muons[i_m].pt(), muons[i_m].eta(), muons[i_m].phi(), muons[i_m].e()) if j.DeltaR(m) < the_Jet_dR: the_Jet_dR = j.DeltaR(m) Jet_dR.append(the_Jet_dR) self.tree.fill('Jet1_dR_lep', Jet_dR[0]) self.tree.fill('Jet2_dR_lep', Jet_dR[1]) self.tree.fill('Jet3_dR_lep', Jet_dR[2]) self.tree.fill('Jet4_dR_lep', Jet_dR[3]) self.tree.fill('Jet5_dR_lep', Jet_dR[4]) pdg1 = 0 pdg2 = 0 pdg3 = 0 pdg4 = 0 pdg5 = 0 if (jets_pf04[0].tags['bf'] > 0): pdg1 = 5 if (jets_pf04[1].tags['bf'] > 0): pdg2 = 5 if (jets_pf04[2].tags['bf'] > 0): pdg3 = 5 if (jets_pf04[3].tags['bf'] > 0): pdg4 = 5 if (jets_pf04[4].tags['bf'] > 0): pdg5 = 5 myjet1 = Particle(pdg1, 0, jets_pf04[0].p4(), 1) myjet2 = Particle(pdg2, 0, jets_pf04[1].p4(), 1) myjet3 = Particle(pdg3, 0, jets_pf04[2].p4(), 1) myjet4 = Particle(pdg4, 0, jets_pf04[3].p4(), 1) myjet5 = Particle(pdg5, 0, jets_pf04[4].p4(), 1) fillParticle(self.tree, 'Jet1', myjet1) fillParticle(self.tree, 'Jet2', myjet2) fillParticle(self.tree, 'Jet3', myjet3) fillParticle(self.tree, 'Jet4', myjet4) fillParticle(self.tree, 'Jet5', myjet5) # TRF / truth b-tagging -> need at least 2 jets_pf04 use_DELPHES = False weight_0tagex = 0. weight_1tagex = 0. weight_2tagex = 0. weight_3tagex = 0. weight_4tagex = 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]) weight_0tagex = getNbTagEx(0, jet, 4) weight_1tagex = getNbTagEx(1, jet, 4) weight_2tagex = getNbTagEx(2, jet, 4) weight_3tagex = getNbTagEx(3, jet, 4) weight_4tagex = getNbTagEx(4, jet, 4) self.tree.fill('weight_0tagex', weight_0tagex) self.tree.fill('weight_1tagex', weight_1tagex) self.tree.fill('weight_2tagex', weight_2tagex) self.tree.fill('weight_3tagex', weight_3tagex) self.tree.fill('weight_4tagex', weight_4tagex) ##################################################################################### ##### selection for the lepton+jets channel ##################################################################################### if (len(jets_trk08) >= 4 and len(jets_pf08) >= 4): if jets_trk08[0].pt() > 200.: #print len(jets_trk08), len(jets_pf08), len(electrons), len(muons) j1 = ROOT.TLorentzVector() j2 = ROOT.TLorentzVector() j3 = ROOT.TLorentzVector() j4 = ROOT.TLorentzVector() j1.SetPtEtaPhiE(jets_trk08[0].pt(), jets_trk08[0].eta(), jets_trk08[0].phi(), jets_trk08[0].e()) j2.SetPtEtaPhiE(jets_trk08[1].pt(), jets_trk08[1].eta(), jets_trk08[1].phi(), jets_trk08[1].e()) j3.SetPtEtaPhiE(jets_trk08[2].pt(), jets_trk08[2].eta(), jets_trk08[2].phi(), jets_trk08[2].e()) j4.SetPtEtaPhiE(jets_trk08[3].pt(), jets_trk08[3].eta(), jets_trk08[3].phi(), jets_trk08[3].e()) # compute the closest lepton/jet dR Jet_dR = [] for i_jet in range(4): the_Jet_dR = 999 j = ROOT.TLorentzVector() j.SetPtEtaPhiE(jets_trk08[i_jet].pt(), jets_trk08[i_jet].eta(), jets_trk08[i_jet].phi(), jets_trk08[i_jet].e()) for i_e in range(len(electrons)): e = ROOT.TLorentzVector() e.SetPtEtaPhiE(electrons[i_e].pt(), electrons[i_e].eta(), electrons[i_e].phi(), electrons[i_e].e()) if j.DeltaR(e) < the_Jet_dR: the_Jet_dR = j.DeltaR(e) for i_m in range(len(muons)): m = ROOT.TLorentzVector() m.SetPtEtaPhiE(muons[i_m].pt(), muons[i_m].eta(), muons[i_m].phi(), muons[i_m].e()) if j.DeltaR(m) < the_Jet_dR: the_Jet_dR = j.DeltaR(m) Jet_dR.append(the_Jet_dR) self.tree.fill('Jet1_trk08_dR_lep', Jet_dR[0]) self.tree.fill('Jet2_trk08_dR_lep', Jet_dR[1]) self.tree.fill('Jet3_trk08_dR_lep', Jet_dR[2]) self.tree.fill('Jet4_trk08_dR_lep', Jet_dR[3]) 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_trk08_j1j2', abs(jets_trk08[0].eta() - jets_trk08[1].eta())) self.tree.fill('rapiditySeparation_trk08_j1j3', abs(jets_trk08[0].eta() - jets_trk08[2].eta())) self.tree.fill('rapiditySeparation_trk08_j1j4', abs(jets_trk08[0].eta() - jets_trk08[3].eta())) self.tree.fill('transverseMomentumAsymmetry_trk08_j1j2', (jets_trk08[0].pt() - jets_trk08[1].pt()) / (jets_trk08[0].pt() + jets_trk08[1].pt())) self.tree.fill('transverseMomentumAsymmetry_trk08_j1j3', (jets_trk08[0].pt() - jets_trk08[2].pt()) / (jets_trk08[0].pt() + jets_trk08[2].pt())) self.tree.fill('transverseMomentumAsymmetry_trk08_j1j4', (jets_trk08[0].pt() - jets_trk08[3].pt()) / (jets_trk08[0].pt() + jets_trk08[3].pt())) self.tree.fill('Jet1_trk08_tau1', jets_trk08[0].tau1) self.tree.fill('Jet1_trk08_tau2', jets_trk08[0].tau2) self.tree.fill('Jet1_trk08_tau3', jets_trk08[0].tau3) self.tree.fill('Jet2_trk08_tau1', jets_trk08[1].tau1) self.tree.fill('Jet2_trk08_tau2', jets_trk08[1].tau2) self.tree.fill('Jet2_trk08_tau3', jets_trk08[1].tau3) self.tree.fill('Jet3_trk08_tau1', jets_trk08[2].tau1) self.tree.fill('Jet3_trk08_tau2', jets_trk08[2].tau2) self.tree.fill('Jet3_trk08_tau3', jets_trk08[2].tau3) self.tree.fill('Jet4_trk08_tau1', jets_trk08[3].tau1) self.tree.fill('Jet4_trk08_tau2', jets_trk08[3].tau2) self.tree.fill('Jet4_trk08_tau3', jets_trk08[3].tau3) Jet1_trk08_tau31 = -999.0 Jet1_trk08_tau21 = -999.0 Jet1_trk08_tau32 = -999.0 Jet2_trk08_tau31 = -999.0 Jet2_trk08_tau21 = -999.0 Jet2_trk08_tau32 = -999.0 Jet3_trk08_tau31 = -999.0 Jet3_trk08_tau21 = -999.0 Jet3_trk08_tau32 = -999.0 Jet4_trk08_tau31 = -999.0 Jet4_trk08_tau21 = -999.0 Jet4_trk08_tau32 = -999.0 if (jets_trk08[0].tau1 != 0.0): Jet1_trk08_tau31 = jets_trk08[0].tau3 / jets_trk08[0].tau1 Jet1_trk08_tau21 = jets_trk08[0].tau2 / jets_trk08[0].tau1 if (jets_trk08[0].tau2 != 0.0): Jet1_trk08_tau32 = jets_trk08[0].tau3 / jets_trk08[0].tau2 if (jets_trk08[1].tau1 != 0.0): Jet2_trk08_tau31 = jets_trk08[1].tau3 / jets_trk08[1].tau1 Jet2_trk08_tau21 = jets_trk08[1].tau2 / jets_trk08[1].tau1 if (jets_trk08[1].tau2 != 0.0): Jet2_trk08_tau32 = jets_trk08[1].tau3 / jets_trk08[1].tau2 if (jets_trk08[2].tau1 != 0.0): Jet3_trk08_tau31 = jets_trk08[2].tau3 / jets_trk08[2].tau1 Jet3_trk08_tau21 = jets_trk08[2].tau2 / jets_trk08[2].tau1 if (jets_trk08[2].tau2 != 0.0): Jet3_trk08_tau32 = jets_trk08[2].tau3 / jets_trk08[2].tau2 if (jets_trk08[3].tau1 != 0.0): Jet4_trk08_tau31 = jets_trk08[3].tau3 / jets_trk08[3].tau1 Jet4_trk08_tau21 = jets_trk08[3].tau2 / jets_trk08[3].tau1 if (jets_trk08[3].tau2 != 0.0): Jet4_trk08_tau32 = jets_trk08[3].tau3 / jets_trk08[3].tau2 self.tree.fill('Jet1_trk08_tau31', Jet1_trk08_tau31) self.tree.fill('Jet1_trk08_tau21', Jet1_trk08_tau21) self.tree.fill('Jet1_trk08_tau32', Jet1_trk08_tau32) self.tree.fill('Jet2_trk08_tau31', Jet2_trk08_tau31) self.tree.fill('Jet2_trk08_tau21', Jet2_trk08_tau21) self.tree.fill('Jet2_trk08_tau32', Jet2_trk08_tau32) self.tree.fill('Jet3_trk08_tau31', Jet3_trk08_tau31) self.tree.fill('Jet3_trk08_tau21', Jet3_trk08_tau21) self.tree.fill('Jet3_trk08_tau32', Jet3_trk08_tau32) self.tree.fill('Jet4_trk08_tau31', Jet4_trk08_tau31) self.tree.fill('Jet4_trk08_tau21', Jet4_trk08_tau21) self.tree.fill('Jet4_trk08_tau32', Jet4_trk08_tau32) # here is btag, need matching in DR Jet1_trk08_dR_pf04 = 999 Jet2_trk08_dR_pf04 = 999 Jet3_trk08_dR_pf04 = 999 Jet4_trk08_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_trk08_dR_pf04: Jet1_trk08_dR_pf04 = pf04.DeltaR(j1) if pf04.DeltaR(j2) < Jet2_trk08_dR_pf04: Jet2_trk08_dR_pf04 = pf04.DeltaR(j2) if pf04.DeltaR(j3) < Jet3_trk08_dR_pf04: Jet3_trk08_dR_pf04 = pf04.DeltaR(j3) if pf04.DeltaR(j4) < Jet4_trk08_dR_pf04: Jet4_trk08_dR_pf04 = pf04.DeltaR(j4) pdg1 = 0 pdg2 = 0 pdg3 = 0 pdg4 = 0 if Jet1_trk08_dR_pf04 < 0.3: pdg1 = 5 if Jet2_trk08_dR_pf04 < 0.3: pdg2 = 5 if Jet3_trk08_dR_pf04 < 0.3: pdg3 = 5 if Jet4_trk08_dR_pf04 < 0.3: pdg4 = 5 # TRF / truth b-tagging -> need at least 2 jets_pf04 use_DELPHES = False weight_0tagex = 0. weight_1tagex = 0. weight_2tagex = 0. weight_3tagex = 0. weight_4tagex = 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]) weight_0tagex = getNbTagEx(0, jet, 4) weight_1tagex = getNbTagEx(1, jet, 4) weight_2tagex = getNbTagEx(2, jet, 4) weight_3tagex = getNbTagEx(3, jet, 4) weight_4tagex = getNbTagEx(4, jet, 4) self.tree.fill('weight_0tagex', weight_0tagex) self.tree.fill('weight_1tagex', weight_1tagex) self.tree.fill('weight_2tagex', weight_2tagex) self.tree.fill('weight_3tagex', weight_3tagex) self.tree.fill('weight_4tagex', weight_4tagex) ###################### # trkjet08 mass info # ###################### #MATCHING PF08 and trk08 for CORRECTION Jet1_trk08_dR_pf08 = 999 Jet2_trk08_dR_pf08 = 999 Jet3_trk08_dR_pf08 = 999 Jet4_trk08_dR_pf08 = 999 Jet1_pf08 = None Jet2_pf08 = None Jet3_pf08 = None Jet4_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 if pf08.DeltaR(j3) < Jet3_trk08_dR_pf08: Jet3_trk08_dR_pf08 = pf08.DeltaR(j3) Jet3_pf08 = j if pf08.DeltaR(j4) < Jet4_trk08_dR_pf08: Jet4_trk08_dR_pf08 = pf08.DeltaR(j4) Jet4_pf08 = j #print 'jet1 dr ',Jet1_trk08_dR_pf08,' pf08 ',Jet1_pf08,' trk08 ',jets_trk08[0] #print 'jet2 dr ',Jet2_trk08_dR_pf08,' pf08 ',Jet2_pf08,' trk08 ',jets_trk08[1] corr1 = Jet1_pf08.p4().Pt() / j1.Pt() corr2 = Jet2_pf08.p4().Pt() / j2.Pt() corr3 = Jet3_pf08.p4().Pt() / j3.Pt() corr4 = Jet4_pf08.p4().Pt() / j4.Pt() #print 'corr 1 ',corr1,' corr2 ',corr2 #NORMAL TRK08 SD corrected jet p4sd1 = ROOT.TLorentzVector() p4sd2 = ROOT.TLorentzVector() p4sd3 = ROOT.TLorentzVector() p4sd4 = ROOT.TLorentzVector() p4sd1.SetPtEtaPhiM( jets_trk08[0].subjetsSoftDrop[0].p4().Pt() * corr1, jets_trk08[0].eta(), jets_trk08[0].phi(), jets_trk08[0].subjetsSoftDrop[0].p4().M() * corr1) p4sd2.SetPtEtaPhiM( jets_trk08[1].subjetsSoftDrop[0].p4().Pt() * corr2, jets_trk08[1].eta(), jets_trk08[1].phi(), jets_trk08[1].subjetsSoftDrop[0].p4().M() * corr2) p4sd3.SetPtEtaPhiM( jets_trk08[2].subjetsSoftDrop[0].p4().Pt() * corr3, jets_trk08[2].eta(), jets_trk08[2].phi(), jets_trk08[2].subjetsSoftDrop[0].p4().M() * corr3) p4sd4.SetPtEtaPhiM( jets_trk08[3].subjetsSoftDrop[0].p4().Pt() * corr4, jets_trk08[3].eta(), jets_trk08[3].phi(), jets_trk08[3].subjetsSoftDrop[0].p4().M() * corr4) sdjet1_corr = Particle(pdg1, 0, p4sd1, 1) sdjet2_corr = Particle(pdg2, 0, p4sd2, 1) sdjet3_corr = Particle(pdg3, 0, p4sd3, 1) sdjet4_corr = Particle(pdg4, 0, p4sd4, 1) fillParticle(self.tree, 'Jet1_trk08_SD_Corr', sdjet1_corr) fillParticle(self.tree, 'Jet2_trk08_SD_Corr', sdjet2_corr) fillParticle(self.tree, 'Jet3_trk08_SD_Corr', sdjet3_corr) fillParticle(self.tree, 'Jet4_trk08_SD_Corr', sdjet4_corr) #NORMAL TRK08 SD jet #sdjet1 = Particle(pdg1, 0, jets_trk08[0].subjetsSoftDrop[0].p4(), 1) #sdjet2 = Particle(pdg2, 0, jets_trk08[1].subjetsSoftDrop[0].p4(), 1) #fillParticle(self.tree, 'Jet1_trk08_SD', sdjet1) #fillParticle(self.tree, 'Jet2_trk08_SD', sdjet2) #CORRECTED TRK08 jet p4jet1_corr = ROOT.TLorentzVector() p4jet2_corr = ROOT.TLorentzVector() p4jet3_corr = ROOT.TLorentzVector() p4jet4_corr = ROOT.TLorentzVector() p4jet1_corr.SetPtEtaPhiM(jets_trk08[0].pt() * corr1, jets_trk08[0].eta(), jets_trk08[0].phi(), jets_trk08[0].m() * corr1) p4jet2_corr.SetPtEtaPhiM(jets_trk08[1].pt() * corr2, jets_trk08[1].eta(), jets_trk08[1].phi(), jets_trk08[1].m() * corr2) p4jet3_corr.SetPtEtaPhiM(jets_trk08[2].pt() * corr3, jets_trk08[2].eta(), jets_trk08[2].phi(), jets_trk08[2].m() * corr3) p4jet4_corr.SetPtEtaPhiM(jets_trk08[3].pt() * corr4, jets_trk08[3].eta(), jets_trk08[3].phi(), jets_trk08[3].m() * corr4) jet1_corr = Particle(pdg1, 0, p4jet1_corr, 1) jet2_corr = Particle(pdg2, 0, p4jet2_corr, 1) jet3_corr = Particle(pdg3, 0, p4jet3_corr, 1) jet4_corr = Particle(pdg4, 0, p4jet4_corr, 1) #fillParticle(self.tree, 'Jet1_trk08_Corr', jet1_corr) #fillParticle(self.tree, 'Jet2_trk08_Corr', jet2_corr) # associate MET to one jet or another based on softdrop sdjetmet1, sdjetmet2, sdjetmet3, sdjetmet4 = self.corrMET( jets_trk08[0].subjetsSoftDrop[0], pdg1, jets_trk08[1].subjetsSoftDrop[0], pdg2, jets_trk08[2].subjetsSoftDrop[0], pdg3, jets_trk08[3].subjetsSoftDrop[0], pdg4, event.met) fillParticle(self.tree, 'Jet1_trk08_SD_MetCorr', sdjetmet1) fillParticle(self.tree, 'Jet2_trk08_SD_MetCorr', sdjetmet2) fillParticle(self.tree, 'Jet3_trk08_SD_MetCorr', sdjetmet3) fillParticle(self.tree, 'Jet4_trk08_SD_MetCorr', sdjetmet4) sdjetmet1, sdjetmet2, sdjetmet3, sdjetmet4 = self.corrMET( sdjet1_corr, pdg1, sdjet2_corr, pdg2, sdjet3_corr, pdg3, sdjet4_corr, pdg4, event.met) fillParticle(self.tree, 'Jet1_trk08_SD_Corr_MetCorr', sdjetmet1) fillParticle(self.tree, 'Jet2_trk08_SD_Corr_MetCorr', sdjetmet2) fillParticle(self.tree, 'Jet3_trk08_SD_Corr_MetCorr', sdjetmet3) fillParticle(self.tree, 'Jet4_trk08_SD_Corr_MetCorr', sdjetmet4) # form masses self.tree.fill( 'Mj1j2j3j4_trk08', self.fillMass(jets_trk08[0], jets_trk08[1], jets_trk08[2], jets_trk08[3])) self.tree.fill( 'Mj1j2j3j4_trk08_Corr', self.fillMass(jet1_corr, jet2_corr, jet3_corr, jet4_corr)) jetmet1, jetmet2, jetmet3, jetmet4 = self.corrMET( jets_trk08[0], pdg1, jets_trk08[1], pdg2, jets_trk08[2], pdg3, jets_trk08[3], pdg4, event.met) self.tree.fill( 'Mj1j2j3j4_trk08_MetCorr', self.fillMass(jetmet1, jetmet2, jetmet3, jetmet4)) #fillParticle(self.tree, 'Jet1_trk08_MetCorr', jetmet1) jetmet1, jetmet2, jetmet3, jetmet4 = self.corrMET( jet1_corr, pdg1, jet2_corr, pdg2, jet3_corr, pdg3, jet4_corr, pdg4, event.met) self.tree.fill( 'Mj1j2j3j4_trk08_Corr_MetCorr', self.fillMass(jetmet1, jetmet2, jetmet3, jetmet4)) fillParticle(self.tree, 'Jet1_trk08_Corr_MetCorr', jetmet1) fillParticle(self.tree, 'Jet2_trk08_Corr_MetCorr', jetmet2) fillParticle(self.tree, 'Jet3_trk08_Corr_MetCorr', jetmet3) fillParticle(self.tree, 'Jet4_trk08_Corr_MetCorr', jetmet4) self.tree.fill( 'Mj1j2j3j4_pf08', self.fillMass(jets_pf08[0], jets_pf08[1], jets_pf08[2], jets_pf08[3])) jetmet1, jetmet2, jetmet3, jetmet4 = self.corrMET( jets_pf08[0], pdg1, jets_pf08[1], pdg2, jets_pf08[2], pdg3, jets_pf08[3], pdg4, event.met) self.tree.fill( 'Mj1j2j3j4_pf08_MetCorr', self.fillMass(jetmet1, jetmet2, jetmet3, jetmet4)) if (len(electrons) >= 1): fillParticle(self.tree, 'Electron1', electrons[0]) if (len(electrons) >= 2): fillParticle(self.tree, 'Electron2', electrons[1]) if (len(electrons) >= 3): fillParticle(self.tree, 'Electron3', electrons[2]) if (len(muons) >= 1): fillParticle(self.tree, 'Muon1', muons[0]) if (len(muons) >= 2): fillParticle(self.tree, 'Muon2', muons[1]) if (len(muons) >= 3): fillParticle(self.tree, 'Muon3', muons[2]) self.tree.tree.Fill()
def corrMET(self, jet1, pdg1, jet2, pdg2, jet3, pdg3, jet4, pdg4, met): dphi1 = abs(jet1.p4().DeltaPhi(met.p4())) dphi2 = abs(jet2.p4().DeltaPhi(met.p4())) dphi3 = abs(jet3.p4().DeltaPhi(met.p4())) dphi4 = abs(jet4.p4().DeltaPhi(met.p4())) metp4 = ROOT.TLorentzVector() px = met.p4().Px() py = met.p4().Py() dphi_min = min(dphi1, dphi2, dphi3, dphi4) if (dphi_min == dphi1): pz = jet1.p4().Pz() / 2. e = math.sqrt(px**2 + py**2 + pz**2) metp4.SetPxPyPzE(px, py, pz, e) jetcorr1 = Particle(pdg1, 0, jet1.p4() + metp4, 1) jetcorr2 = Particle(pdg2, 0, jet2.p4(), 1) jetcorr3 = Particle(pdg3, 0, jet3.p4(), 1) jetcorr4 = Particle(pdg4, 0, jet4.p4(), 1) elif (dphi_min == dphi2): pz = jet2.p4().Pz() / 2. e = math.sqrt(px**2 + py**2 + pz**2) metp4.SetPxPyPzE(px, py, pz, e) jetcorr1 = Particle(pdg1, 0, jet1.p4(), 1) jetcorr2 = Particle(pdg2, 0, jet2.p4() + metp4, 1) jetcorr3 = Particle(pdg3, 0, jet3.p4(), 1) jetcorr4 = Particle(pdg4, 0, jet4.p4(), 1) elif (dphi_min == dphi3): pz = jet3.p4().Pz() / 2. e = math.sqrt(px**2 + py**2 + pz**2) metp4.SetPxPyPzE(px, py, pz, e) jetcorr1 = Particle(pdg1, 0, jet1.p4(), 1) jetcorr2 = Particle(pdg2, 0, jet2.p4(), 1) jetcorr3 = Particle(pdg3, 0, jet3.p4() + metp4, 1) jetcorr4 = Particle(pdg4, 0, jet4.p4(), 1) else: pz = jet4.p4().Pz() / 2. e = math.sqrt(px**2 + py**2 + pz**2) metp4.SetPxPyPzE(px, py, pz, e) jetcorr1 = Particle(pdg1, 0, jet1.p4(), 1) jetcorr2 = Particle(pdg2, 0, jet2.p4(), 1) jetcorr3 = Particle(pdg3, 0, jet3.p4(), 1) jetcorr4 = Particle(pdg4, 0, jet4.p4() + metp4, 1) return jetcorr1, jetcorr2, jetcorr3, jetcorr4
def process(self, event): self.tree.reset() jets_trk08 = getattr(event, self.cfg_ana.jets_trk08_20) jets_pf04 = getattr(event, self.cfg_ana.jets_pf04_20) jets_pf04_pdg = event.jets_pf04_20_pdg jets_pf08 = getattr(event, self.cfg_ana.jets_pf08_30) electrons = getattr(event, self.cfg_ana.electrons) muons = getattr(event, self.cfg_ana.muons) if (len(jets_trk08) >= 4 and len(jets_pf08) >= 4): if jets_trk08[0].pt() > 200.: #print len(jets_trk08), len(jets_pf08), len(electrons), len(muons) j1 = ROOT.TLorentzVector() j2 = ROOT.TLorentzVector() j3 = ROOT.TLorentzVector() j4 = ROOT.TLorentzVector() j1.SetPtEtaPhiE(jets_trk08[0].pt(), jets_trk08[0].eta(), jets_trk08[0].phi(), jets_trk08[0].e()) j2.SetPtEtaPhiE(jets_trk08[1].pt(), jets_trk08[1].eta(), jets_trk08[1].phi(), jets_trk08[1].e()) j3.SetPtEtaPhiE(jets_trk08[2].pt(), jets_trk08[2].eta(), jets_trk08[2].phi(), jets_trk08[2].e()) j4.SetPtEtaPhiE(jets_trk08[3].pt(), jets_trk08[3].eta(), jets_trk08[3].phi(), jets_trk08[3].e()) # compute the closest lepton/jet dR Jet_dR = [] for i_jet in range(4): the_Jet_dR = 999 j = ROOT.TLorentzVector() j.SetPtEtaPhiE(jets_trk08[i_jet].pt(), jets_trk08[i_jet].eta(), jets_trk08[i_jet].phi(), jets_trk08[i_jet].e()) for i_e in range(len(electrons)): e = ROOT.TLorentzVector() e.SetPtEtaPhiE(electrons[i_e].pt(), electrons[i_e].eta(), electrons[i_e].phi(), electrons[i_e].e()) if j.DeltaR(e) < the_Jet_dR: the_Jet_dR = j.DeltaR(e) for i_m in range(len(muons)): m = ROOT.TLorentzVector() m.SetPtEtaPhiE(muons[i_m].pt(), muons[i_m].eta(), muons[i_m].phi(), muons[i_m].e()) if j.DeltaR(m) < the_Jet_dR: the_Jet_dR = j.DeltaR(m) Jet_dR.append(the_Jet_dR) self.tree.fill('Jet1_trk08_dR_lep', Jet_dR[0]) self.tree.fill('Jet2_trk08_dR_lep', Jet_dR[1]) self.tree.fill('Jet3_trk08_dR_lep', Jet_dR[2]) self.tree.fill('Jet4_trk08_dR_lep', Jet_dR[3]) 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_trk08_j1j2', abs(jets_trk08[0].eta() - jets_trk08[1].eta())) self.tree.fill('rapiditySeparation_trk08_j1j3', abs(jets_trk08[0].eta() - jets_trk08[2].eta())) self.tree.fill('rapiditySeparation_trk08_j1j4', abs(jets_trk08[0].eta() - jets_trk08[3].eta())) self.tree.fill('transverseMomentumAsymmetry_trk08_j1j2', (jets_trk08[0].pt() - jets_trk08[1].pt()) / (jets_trk08[0].pt() + jets_trk08[1].pt())) self.tree.fill('transverseMomentumAsymmetry_trk08_j1j3', (jets_trk08[0].pt() - jets_trk08[2].pt()) / (jets_trk08[0].pt() + jets_trk08[2].pt())) self.tree.fill('transverseMomentumAsymmetry_trk08_j1j4', (jets_trk08[0].pt() - jets_trk08[3].pt()) / (jets_trk08[0].pt() + jets_trk08[3].pt())) self.tree.fill('Jet1_trk08_tau1', jets_trk08[0].tau1) self.tree.fill('Jet1_trk08_tau2', jets_trk08[0].tau2) self.tree.fill('Jet1_trk08_tau3', jets_trk08[0].tau3) self.tree.fill('Jet2_trk08_tau1', jets_trk08[1].tau1) self.tree.fill('Jet2_trk08_tau2', jets_trk08[1].tau2) self.tree.fill('Jet2_trk08_tau3', jets_trk08[1].tau3) self.tree.fill('Jet3_trk08_tau1', jets_trk08[2].tau1) self.tree.fill('Jet3_trk08_tau2', jets_trk08[2].tau2) self.tree.fill('Jet3_trk08_tau3', jets_trk08[2].tau3) self.tree.fill('Jet4_trk08_tau1', jets_trk08[3].tau1) self.tree.fill('Jet4_trk08_tau2', jets_trk08[3].tau2) self.tree.fill('Jet4_trk08_tau3', jets_trk08[3].tau3) Jet1_trk08_tau31 = -999.0 Jet1_trk08_tau21 = -999.0 Jet1_trk08_tau32 = -999.0 Jet2_trk08_tau31 = -999.0 Jet2_trk08_tau21 = -999.0 Jet2_trk08_tau32 = -999.0 Jet3_trk08_tau31 = -999.0 Jet3_trk08_tau21 = -999.0 Jet3_trk08_tau32 = -999.0 Jet4_trk08_tau31 = -999.0 Jet4_trk08_tau21 = -999.0 Jet4_trk08_tau32 = -999.0 if (jets_trk08[0].tau1 != 0.0): Jet1_trk08_tau31 = jets_trk08[0].tau3 / jets_trk08[0].tau1 Jet1_trk08_tau21 = jets_trk08[0].tau2 / jets_trk08[0].tau1 if (jets_trk08[0].tau2 != 0.0): Jet1_trk08_tau32 = jets_trk08[0].tau3 / jets_trk08[0].tau2 if (jets_trk08[1].tau1 != 0.0): Jet2_trk08_tau31 = jets_trk08[1].tau3 / jets_trk08[1].tau1 Jet2_trk08_tau21 = jets_trk08[1].tau2 / jets_trk08[1].tau1 if (jets_trk08[1].tau2 != 0.0): Jet2_trk08_tau32 = jets_trk08[1].tau3 / jets_trk08[1].tau2 if (jets_trk08[2].tau1 != 0.0): Jet3_trk08_tau31 = jets_trk08[2].tau3 / jets_trk08[2].tau1 Jet3_trk08_tau21 = jets_trk08[2].tau2 / jets_trk08[2].tau1 if (jets_trk08[2].tau2 != 0.0): Jet3_trk08_tau32 = jets_trk08[2].tau3 / jets_trk08[2].tau2 if (jets_trk08[3].tau1 != 0.0): Jet4_trk08_tau31 = jets_trk08[3].tau3 / jets_trk08[3].tau1 Jet4_trk08_tau21 = jets_trk08[3].tau2 / jets_trk08[3].tau1 if (jets_trk08[3].tau2 != 0.0): Jet4_trk08_tau32 = jets_trk08[3].tau3 / jets_trk08[3].tau2 self.tree.fill('Jet1_trk08_tau31', Jet1_trk08_tau31) self.tree.fill('Jet1_trk08_tau21', Jet1_trk08_tau21) self.tree.fill('Jet1_trk08_tau32', Jet1_trk08_tau32) self.tree.fill('Jet2_trk08_tau31', Jet2_trk08_tau31) self.tree.fill('Jet2_trk08_tau21', Jet2_trk08_tau21) self.tree.fill('Jet2_trk08_tau32', Jet2_trk08_tau32) self.tree.fill('Jet3_trk08_tau31', Jet3_trk08_tau31) self.tree.fill('Jet3_trk08_tau21', Jet3_trk08_tau21) self.tree.fill('Jet3_trk08_tau32', Jet3_trk08_tau32) self.tree.fill('Jet4_trk08_tau31', Jet4_trk08_tau31) self.tree.fill('Jet4_trk08_tau21', Jet4_trk08_tau21) self.tree.fill('Jet4_trk08_tau32', Jet4_trk08_tau32) # here is btag, need matching in DR Jet1_trk08_dR_pf04 = 999 Jet2_trk08_dR_pf04 = 999 Jet3_trk08_dR_pf04 = 999 Jet4_trk08_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_trk08_dR_pf04: Jet1_trk08_dR_pf04 = pf04.DeltaR(j1) if pf04.DeltaR(j2) < Jet2_trk08_dR_pf04: Jet2_trk08_dR_pf04 = pf04.DeltaR(j2) if pf04.DeltaR(j3) < Jet3_trk08_dR_pf04: Jet3_trk08_dR_pf04 = pf04.DeltaR(j3) if pf04.DeltaR(j4) < Jet4_trk08_dR_pf04: Jet4_trk08_dR_pf04 = pf04.DeltaR(j4) pdg1 = 0 pdg2 = 0 pdg3 = 0 pdg4 = 0 if Jet1_trk08_dR_pf04 < 0.3: pdg1 = 5 if Jet2_trk08_dR_pf04 < 0.3: pdg2 = 5 if Jet3_trk08_dR_pf04 < 0.3: pdg3 = 5 if Jet4_trk08_dR_pf04 < 0.3: pdg4 = 5 # TRF / truth b-tagging -> need at least 2 jets_pf04 use_DELPHES = False weight_0tagex = 0. weight_1tagex = 0. weight_2tagex = 0. weight_3tagex = 0. weight_4tagex = 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]) weight_0tagex = getNbTagEx(0, jet, 4) weight_1tagex = getNbTagEx(1, jet, 4) weight_2tagex = getNbTagEx(2, jet, 4) weight_3tagex = getNbTagEx(3, jet, 4) weight_4tagex = getNbTagEx(4, jet, 4) self.tree.fill('weight_0tagex', weight_0tagex) self.tree.fill('weight_1tagex', weight_1tagex) self.tree.fill('weight_2tagex', weight_2tagex) self.tree.fill('weight_3tagex', weight_3tagex) self.tree.fill('weight_4tagex', weight_4tagex) ###################### # trkjet08 mass info # ###################### #MATCHING PF08 and trk08 for CORRECTION Jet1_trk08_dR_pf08 = 999 Jet2_trk08_dR_pf08 = 999 Jet3_trk08_dR_pf08 = 999 Jet4_trk08_dR_pf08 = 999 Jet1_pf08 = None Jet2_pf08 = None Jet3_pf08 = None Jet4_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 if pf08.DeltaR(j3) < Jet3_trk08_dR_pf08: Jet3_trk08_dR_pf08 = pf08.DeltaR(j3) Jet3_pf08 = j if pf08.DeltaR(j4) < Jet4_trk08_dR_pf08: Jet4_trk08_dR_pf08 = pf08.DeltaR(j4) Jet4_pf08 = j #print 'jet1 dr ',Jet1_trk08_dR_pf08,' pf08 ',Jet1_pf08,' trk08 ',jets_trk08[0] #print 'jet2 dr ',Jet2_trk08_dR_pf08,' pf08 ',Jet2_pf08,' trk08 ',jets_trk08[1] corr1 = Jet1_pf08.p4().Pt() / j1.Pt() corr2 = Jet2_pf08.p4().Pt() / j2.Pt() corr3 = Jet3_pf08.p4().Pt() / j3.Pt() corr4 = Jet4_pf08.p4().Pt() / j4.Pt() #print 'corr 1 ',corr1,' corr2 ',corr2 #NORMAL TRK08 SD corrected jet p4sd1 = ROOT.TLorentzVector() p4sd2 = ROOT.TLorentzVector() p4sd3 = ROOT.TLorentzVector() p4sd4 = ROOT.TLorentzVector() p4sd1.SetPtEtaPhiM( jets_trk08[0].subjetsSoftDrop[0].p4().Pt() * corr1, jets_trk08[0].eta(), jets_trk08[0].phi(), jets_trk08[0].subjetsSoftDrop[0].p4().M() * corr1) p4sd2.SetPtEtaPhiM( jets_trk08[1].subjetsSoftDrop[0].p4().Pt() * corr2, jets_trk08[1].eta(), jets_trk08[1].phi(), jets_trk08[1].subjetsSoftDrop[0].p4().M() * corr2) p4sd3.SetPtEtaPhiM( jets_trk08[2].subjetsSoftDrop[0].p4().Pt() * corr3, jets_trk08[2].eta(), jets_trk08[2].phi(), jets_trk08[2].subjetsSoftDrop[0].p4().M() * corr3) p4sd4.SetPtEtaPhiM( jets_trk08[3].subjetsSoftDrop[0].p4().Pt() * corr4, jets_trk08[3].eta(), jets_trk08[3].phi(), jets_trk08[3].subjetsSoftDrop[0].p4().M() * corr4) sdjet1_corr = Particle(pdg1, 0, p4sd1, 1) sdjet2_corr = Particle(pdg2, 0, p4sd2, 1) sdjet3_corr = Particle(pdg3, 0, p4sd3, 1) sdjet4_corr = Particle(pdg4, 0, p4sd4, 1) fillParticle(self.tree, 'Jet1_trk08_SD_Corr', sdjet1_corr) fillParticle(self.tree, 'Jet2_trk08_SD_Corr', sdjet2_corr) fillParticle(self.tree, 'Jet3_trk08_SD_Corr', sdjet3_corr) fillParticle(self.tree, 'Jet4_trk08_SD_Corr', sdjet4_corr) #NORMAL TRK08 SD jet #sdjet1 = Particle(pdg1, 0, jets_trk08[0].subjetsSoftDrop[0].p4(), 1) #sdjet2 = Particle(pdg2, 0, jets_trk08[1].subjetsSoftDrop[0].p4(), 1) #fillParticle(self.tree, 'Jet1_trk08_SD', sdjet1) #fillParticle(self.tree, 'Jet2_trk08_SD', sdjet2) #CORRECTED TRK08 jet p4jet1_corr = ROOT.TLorentzVector() p4jet2_corr = ROOT.TLorentzVector() p4jet3_corr = ROOT.TLorentzVector() p4jet4_corr = ROOT.TLorentzVector() p4jet1_corr.SetPtEtaPhiM(jets_trk08[0].pt() * corr1, jets_trk08[0].eta(), jets_trk08[0].phi(), jets_trk08[0].m() * corr1) p4jet2_corr.SetPtEtaPhiM(jets_trk08[1].pt() * corr2, jets_trk08[1].eta(), jets_trk08[1].phi(), jets_trk08[1].m() * corr2) p4jet3_corr.SetPtEtaPhiM(jets_trk08[2].pt() * corr3, jets_trk08[2].eta(), jets_trk08[2].phi(), jets_trk08[2].m() * corr3) p4jet4_corr.SetPtEtaPhiM(jets_trk08[3].pt() * corr4, jets_trk08[3].eta(), jets_trk08[3].phi(), jets_trk08[3].m() * corr4) jet1_corr = Particle(pdg1, 0, p4jet1_corr, 1) jet2_corr = Particle(pdg2, 0, p4jet2_corr, 1) jet3_corr = Particle(pdg3, 0, p4jet3_corr, 1) jet4_corr = Particle(pdg4, 0, p4jet4_corr, 1) #fillParticle(self.tree, 'Jet1_trk08_Corr', jet1_corr) #fillParticle(self.tree, 'Jet2_trk08_Corr', jet2_corr) # associate MET to one jet or another based on softdrop sdjetmet1, sdjetmet2, sdjetmet3, sdjetmet4 = self.corrMET( jets_trk08[0].subjetsSoftDrop[0], pdg1, jets_trk08[1].subjetsSoftDrop[0], pdg2, jets_trk08[2].subjetsSoftDrop[0], pdg3, jets_trk08[3].subjetsSoftDrop[0], pdg4, event.met) fillParticle(self.tree, 'Jet1_trk08_SD_MetCorr', sdjetmet1) fillParticle(self.tree, 'Jet2_trk08_SD_MetCorr', sdjetmet2) fillParticle(self.tree, 'Jet3_trk08_SD_MetCorr', sdjetmet3) fillParticle(self.tree, 'Jet4_trk08_SD_MetCorr', sdjetmet4) sdjetmet1, sdjetmet2, sdjetmet3, sdjetmet4 = self.corrMET( sdjet1_corr, pdg1, sdjet2_corr, pdg2, sdjet3_corr, pdg3, sdjet4_corr, pdg4, event.met) fillParticle(self.tree, 'Jet1_trk08_SD_Corr_MetCorr', sdjetmet1) fillParticle(self.tree, 'Jet2_trk08_SD_Corr_MetCorr', sdjetmet2) fillParticle(self.tree, 'Jet3_trk08_SD_Corr_MetCorr', sdjetmet3) fillParticle(self.tree, 'Jet4_trk08_SD_Corr_MetCorr', sdjetmet4) # form masses self.tree.fill( 'Mj1j2j3j4_trk08', self.fillMass(jets_trk08[0], jets_trk08[1], jets_trk08[2], jets_trk08[3])) self.tree.fill( 'Mj1j2j3j4_trk08_Corr', self.fillMass(jet1_corr, jet2_corr, jet3_corr, jet4_corr)) jetmet1, jetmet2, jetmet3, jetmet4 = self.corrMET( jets_trk08[0], pdg1, jets_trk08[1], pdg2, jets_trk08[2], pdg3, jets_trk08[3], pdg4, event.met) self.tree.fill( 'Mj1j2j3j4_trk08_MetCorr', self.fillMass(jetmet1, jetmet2, jetmet3, jetmet4)) #fillParticle(self.tree, 'Jet1_trk08_MetCorr', jetmet1) jetmet1, jetmet2, jetmet3, jetmet4 = self.corrMET( jet1_corr, pdg1, jet2_corr, pdg2, jet3_corr, pdg3, jet4_corr, pdg4, event.met) self.tree.fill( 'Mj1j2j3j4_trk08_Corr_MetCorr', self.fillMass(jetmet1, jetmet2, jetmet3, jetmet4)) fillParticle(self.tree, 'Jet1_trk08_Corr_MetCorr', jetmet1) fillParticle(self.tree, 'Jet2_trk08_Corr_MetCorr', jetmet2) fillParticle(self.tree, 'Jet3_trk08_Corr_MetCorr', jetmet3) fillParticle(self.tree, 'Jet4_trk08_Corr_MetCorr', jetmet4) self.tree.fill( 'Mj1j2j3j4_pf08', self.fillMass(jets_pf08[0], jets_pf08[1], jets_pf08[2], jets_pf08[3])) jetmet1, jetmet2, jetmet3, jetmet4 = self.corrMET( jets_pf08[0], pdg1, jets_pf08[1], pdg2, jets_pf08[2], pdg3, jets_pf08[3], pdg4, event.met) self.tree.fill( 'Mj1j2j3j4_pf08_MetCorr', self.fillMass(jetmet1, jetmet2, jetmet3, jetmet4)) if (len(electrons) >= 1): fillParticle(self.tree, 'Electron1', electrons[0]) if (len(electrons) >= 2): fillParticle(self.tree, 'Electron2', electrons[1]) if (len(electrons) >= 3): fillParticle(self.tree, 'Electron3', electrons[2]) if (len(muons) >= 1): fillParticle(self.tree, 'Muon1', muons[0]) if (len(muons) >= 2): fillParticle(self.tree, 'Muon2', muons[1]) if (len(muons) >= 3): fillParticle(self.tree, 'Muon3', muons[2]) 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) #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_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() 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) electrons = getattr(event, self.cfg_ana.electrons) muons = getattr(event, self.cfg_ana.muons) Jet1_trk02_dR_lep = 999 Jet2_trk02_dR_lep = 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) 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 #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) 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! ################################### ################################### #qcd Background >>>>>>>>>>>>>>>>> ################################### # varlist = [ # "Jet1_tau32", # "Jet2_tau32", # "Jet1_tau21", # "Jet2_tau21", # "softDroppedJet1_m", # "softDroppedJet2_m", # "Jet1_trimmedProngMaxPtRatio", # "Jet1_trimmedProngMinPtRatio", # "Jet2_trimmedProngMaxPtRatio", # "Jet2_trimmedProngMinPtRatio", # ] # # inputs = ROOT.vector('string')() # for v in varlist: # inputs.push_back(v) # # mva = ROOT.ReadQCD(inputs) # values = ROOT.vector('double')() # # values.push_back(Jet1_tau32) # values.push_back(Jet2_tau32) # values.push_back(Jet1_tau21) # values.push_back(Jet2_tau21) # values.push_back(jets[0].subjetsSoftDrop[0].m()) # values.push_back(jets[1].subjetsSoftDrop[0].m()) # values.push_back(Jet1_trimmedProngMaxPtRatio) # values.push_back(Jet1_trimmedProngMinPtRatio) # values.push_back(Jet2_trimmedProngMaxPtRatio) # values.push_back(Jet2_trimmedProngMinPtRatio) # # mva_value=mva.GetMvaValue(values) # self.tree.fill('BDTvariable_qcd', mva_value) ################################### #TMVA Stuff Ends! ################################### self.tree.tree.Fill()
def process(self, event): leptons = getattr(event, self.cfg_ana.leptons) jets = getattr(event, self.cfg_ana.jets) sqrts = self.cfg_ana.sqrts w_mass = self.cfg_ana.w_mass top_mass = self.cfg_ana.top_mass jets_p4 = [] btags = [] for jet in jets: jets_p4.append(jet.p4()) btags.append(jet.logbtag) if len(leptons) == 0: event.success = -1 else: myTopConstrainer = topConstrainer(jets_p4, btags, leptons[0].p4(), sqrts, w_mass, top_mass) succeded, chi2 = myTopConstrainer.rescale(1E-4) if succeded: pRec = myTopConstrainer.p_ini tophadRec = Particle(top_pdgid, top_charge, (pRec[0]+pRec[1]+pRec[2]) ) whadRec = Particle(w_pdgid, w_charge, (pRec[0]+pRec[1]) ) toplepRec = Particle(top_pdgid, top_charge, (pRec[3]+pRec[4]+pRec[5]) ) wlepRec = Particle(w_pdgid, w_charge, (pRec[4]+pRec[5]) ) missingMassRec = Particle( 0, 0, pRec[5] ) pFit = myTopConstrainer.p_out tophadFit = Particle(top_pdgid, top_charge, (pFit[0]+pFit[1]+pFit[2]) ) whadFit = Particle(w_pdgid, w_charge, (pFit[0]+pFit[1]) ) toplepFit = Particle(top_pdgid, top_charge, (pFit[3]+pFit[4]+pFit[5]) ) wlepFit = Particle(w_pdgid, w_charge, (pFit[4]+pFit[5]) ) missingMassFit = Particle( 0, 0, pFit[5] ) chi2_tophadRec = ( (tophadRec.m() - self.cfg_ana.tophadRec_m) / self.cfg_ana.tophadRec_w )**2 chi2_whadRec = ( (whadRec.m() - self.cfg_ana.whadRec_m) / self.cfg_ana.whadRec_w )**2 chi2_toplepRec = ( (toplepRec.m() - self.cfg_ana.toplepRec_m) / self.cfg_ana.toplepRec_w )**2 chi2_wlepRec = ( (wlepRec.m() - self.cfg_ana.wlepRec_m) / self.cfg_ana.wlepRec_w )**2 chi2_top_constrainer = chi2_tophadRec + chi2_whadRec + chi2_toplepRec + chi2_wlepRec setattr(event, 'success', 1) setattr(event, 'chi2_algorithm', chi2) setattr(event, 'tophadRec', tophadRec) setattr(event, 'whadRec', whadRec) setattr(event, 'toplepRec', toplepRec) setattr(event, 'wlepRec', wlepRec) setattr(event, 'missingMassRec', missingMassRec) setattr(event, 'tophadFit', tophadFit) setattr(event, 'whadFit', whadFit) setattr(event, 'toplepFit', toplepFit) setattr(event, 'wlepFit', wlepFit) setattr(event, 'missingMassFit', missingMassFit) setattr(event, 'chi2_tophadRec', chi2_tophadRec) setattr(event, 'chi2_whadRec', chi2_whadRec) setattr(event, 'chi2_toplepRec', chi2_toplepRec) setattr(event, 'chi2_wlepRec', chi2_wlepRec) setattr(event, 'chi2_top_constrainer', chi2_top_constrainer) else: event.success = 0
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 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 ''' # fully hadronic selection if len(taus) > 1 and len(bs) > 1 and len(leptons) == 0: self.tree.fill('weight', event.weight) #print event.weight 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]) 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(htatas[0], 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] = htatas[0].p4().Pt() self.bdt_htata_eta[0] = htatas[0].p4().Eta() self.bdt_htata_phi[0] = htatas[0].p4().Phi() self.bdt_htata_m[0] = htatas[0].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 mva_value = self.reader.EvaluateMVA("BDT") #print mva_value self.tree.fill('tmva_bdt', mva_value) self.tree.tree.Fill()