CMS 3D CMS Logo

KalmanMuonCorrector.py
Go to the documentation of this file.
1 import PhysicsTools.Heppy.loadlibs
2 import ROOT
3 
5  def __init__(self, calibration, isMC, isSync=False, smearMode="none"):
6  self.kamuca = ROOT.KalmanMuonCalibrator(calibration)
7  self.isMC = isMC
8  self.isSync = isSync
9  self.smearMode = smearMode
10  def correct(self, mu, run):
11  newPt = self.kamuca.getCorrectedPt(mu.pt(), mu.eta(), mu.phi(), mu.charge())
12  newPtErr = newPt * self.kamuca.getCorrectedError(newPt, mu.eta(), mu.ptErr()/newPt)
13  if self.isMC: # new we do the smearing
14  if self.isSync:
15  newPt = self.kamuca.smearForSync(newPt, mu.eta())
16  newPtErr = newPt * self.kamuca.getCorrectedErrorAfterSmearing(newPt, mu.eta(), newPtErr/newPt)
17  elif self.smearMode == "none" or self.smearMode == None:
18  pass
19  elif self.smearMode == "basic":
20  newPt = self.kamuca.smear(newPt, mu.eta())
21  newPtErr = newPt * self.kamuca.getCorrectedErrorAfterSmearing(newPt, mu.eta(), newPtErr/newPt)
22  else:
23  newPt = self.kamuca.smearUsingEbE(newPt, mu.eta(), newPtErr/newPt)
24  newPtErr = newPt * self.kamuca.getCorrectedErrorAfterSmearing(newPt, mu.eta(), newPtErr/newPt)
25  newP4 = ROOT.math.PtEtaPhiMLorentzVector(newPt, mu.eta(), mu.phi(), mu.mass())
26  mu.setP4(newP4)
27  mu._ptErr = newPtErr
28 
29  def correct_all(self, mus, run):
30  for mu in mus:
31  self.correct(mu, run)
32 
33 if __name__ == '__main__':
34  kamuka = KalmanMuonCorrector("MC_76X_13TeV", True)
def __init__(self, calibration, isMC, isSync=False, smearMode="none")