def makeAllMuons(self, event): """ make a list of all muons, and apply basic corrections to them """ # Start from all muons allmuons = map( Muon, self.handles['muons'].product() ) # Muon scale and resolution corrections (if enabled) if self.cfg_ana.doMuScleFitCorrections: for mu in allmuons: self.muscleCorr.correct(mu, event.run) elif self.cfg_ana.doRochesterCorrections: for mu in allmuons: corp4 = rochcor.corrected_p4(mu, event.run) mu.setP4( corp4 ) # Clean up dulicate muons (note: has no effect unless the muon id is removed) if self.cfg_ana.doSegmentBasedMuonCleaning: isgood = cmgMuonCleanerBySegments.clean( self.handles['muons'].product() ) newmu = [] for i,mu in enumerate(allmuons): if isgood[i]: newmu.append(mu) allmuons = newmu # Attach the vertex to them, for dxy/dz calculation for mu in allmuons: mu.associatedVertex = event.goodVertices[0] # Compute relIso in 0.3 and 0.4 cones for mu in allmuons: mu.absIso03 = (mu.pfIsolationR03().sumChargedHadronPt + max( mu.pfIsolationR03().sumNeutralHadronEt + mu.pfIsolationR03().sumPhotonEt - mu.pfIsolationR03().sumPUPt/2,0.0)) mu.absIso04 = (mu.pfIsolationR04().sumChargedHadronPt + max( mu.pfIsolationR04().sumNeutralHadronEt + mu.pfIsolationR04().sumPhotonEt - mu.pfIsolationR04().sumPUPt/2,0.0)) mu.relIso03 = mu.absIso03/mu.pt() mu.relIso04 = mu.absIso04/mu.pt() return allmuons
def makeAllMuons(self, event): """ make a list of all muons, and apply basic corrections to them """ # Start from all muons allmuons = map( Muon, self.handles['muons'].product() ) # Muon scale and resolution corrections (if enabled) if self.cfg_ana.doMuScleFitCorrections: for mu in allmuons: self.muscleCorr.correct(mu, event.run) elif self.cfg_ana.doRochesterCorrections: for mu in allmuons: corp4 = rochcor.corrected_p4(mu, event.run) mu.setP4( corp4 ) # Clean up dulicate muons (note: has no effect unless the muon id is removed) if self.cfg_ana.doSegmentBasedMuonCleaning: isgood = cmgMuonCleanerBySegments.clean( self.handles['muons'].product() ) newmu = [] for i,mu in enumerate(allmuons): if isgood[i]: newmu.append(mu) allmuons = newmu # Attach EAs for isolation: for mu in allmuons: mu.rho = float(self.handles['rhoMu'].product()[0]) if self.muEffectiveArea == "Data2012": if aeta < 1.0 : mu.EffectiveArea03 = 0.382; elif aeta < 1.47 : mu.EffectiveArea03 = 0.317; elif aeta < 2.0 : mu.EffectiveArea03 = 0.242; elif aeta < 2.2 : mu.EffectiveArea03 = 0.326; elif aeta < 2.3 : mu.EffectiveArea03 = 0.462; else : mu.EffectiveArea03 = 0.372; if aeta < 1.0 : mu.EffectiveArea04 = 0.674; elif aeta < 1.47 : mu.EffectiveArea04 = 0.565; elif aeta < 2.0 : mu.EffectiveArea04 = 0.442; elif aeta < 2.2 : mu.EffectiveArea04 = 0.515; elif aeta < 2.3 : mu.EffectiveArea04 = 0.821; else : mu.EffectiveArea04 = 0.660; elif self.muEffectiveArea == "Phys14_25ns_v1": aeta = abs(mu.eta()) if aeta < 0.800: mu.EffectiveArea03 = 0.0913 elif aeta < 1.300: mu.EffectiveArea03 = 0.0765 elif aeta < 2.000: mu.EffectiveArea03 = 0.0546 elif aeta < 2.200: mu.EffectiveArea03 = 0.0728 else: mu.EffectiveArea03 = 0.1177 if aeta < 0.800: mu.EffectiveArea04 = 0.1564 elif aeta < 1.300: mu.EffectiveArea04 = 0.1325 elif aeta < 2.000: mu.EffectiveArea04 = 0.0913 elif aeta < 2.200: mu.EffectiveArea04 = 0.1212 else: mu.EffectiveArea04 = 0.2085 else: raise RuntimeError, "Unsupported value for mu_effectiveAreas: can only use Data2012 (rho: ?) and Phys14_v1 (rho: fixedGridRhoFastjetAll)" # Attach the vertex to them, for dxy/dz calculation for mu in allmuons: mu.associatedVertex = event.goodVertices[0] if len(event.goodVertices)>0 else event.vertices[0] mu.setTrackForDxyDz(self.cfg_ana.muon_dxydz_track) # Set tight id if specified if hasattr(self.cfg_ana, "mu_tightId"): for mu in allmuons: mu.tightIdResult = mu.muonID(self.cfg_ana.mu_tightId) # Compute relIso in 0.3 and 0.4 cones for mu in allmuons: if self.cfg_ana.mu_isoCorr=="rhoArea" : mu.absIso03 = (mu.pfIsolationR03().sumChargedHadronPt + max( mu.pfIsolationR03().sumNeutralHadronEt + mu.pfIsolationR03().sumPhotonEt - mu.rho * mu.EffectiveArea03,0.0)) mu.absIso04 = (mu.pfIsolationR04().sumChargedHadronPt + max( mu.pfIsolationR04().sumNeutralHadronEt + mu.pfIsolationR04().sumPhotonEt - mu.rho * mu.EffectiveArea04,0.0)) elif self.cfg_ana.mu_isoCorr=="deltaBeta" : mu.absIso03 = (mu.pfIsolationR03().sumChargedHadronPt + max( mu.pfIsolationR03().sumNeutralHadronEt + mu.pfIsolationR03().sumPhotonEt - mu.pfIsolationR03().sumPUPt/2,0.0)) mu.absIso04 = (mu.pfIsolationR04().sumChargedHadronPt + max( mu.pfIsolationR04().sumNeutralHadronEt + mu.pfIsolationR04().sumPhotonEt - mu.pfIsolationR04().sumPUPt/2,0.0)) else : raise RuntimeError, "Unsupported mu_isoCorr name '" + str(self.cfg_ana.mu_isoCorr) + "'! For now only 'rhoArea' and 'deltaBeta' are supported." mu.relIso03 = mu.absIso03/mu.pt() mu.relIso04 = mu.absIso04/mu.pt() return allmuons