def __init__(self): path = os.path.join(os.path.dirname(__file__), 'CombinedMethod_ScaleFactors_RecoIdIsoSip.root') self.e_rtfile = rt.TFile(path, 'READ') self.e_hist = self.e_rtfile.Get("h_electronScaleFactor_RecoIdIsoSip") path = os.path.join(os.path.dirname(__file__), 'MuonScaleFactors_2011_2012.root') self.m_rtfile = rt.TFile(path, 'READ') self.m_hist = self.m_rtfile.Get("TH2D_ALL_2012") self.muPOGId = MuonPOGCorrections.make_muon_pog_PFTight_2012() self.muPOGIso = MuonPOGCorrections.make_muon_pog_PFRelIsoDB012_2012() m_id_file = open(os.path.join(os.path.dirname(__file__),'MuonEfficiencies_Run2012ReReco_53X.pkl'),'r') self.m_id_dict = pickle.load(m_id_file) m_iso_file = open(os.path.join(os.path.dirname(__file__),'MuonEfficiencies_ISO_Run_2012ReReco_53X.pkl'),'r') self.m_iso_dict = pickle.load(m_iso_file)
################################################################################ #### MC-DATA and PU corrections ################################################ ################################################################################ # Determine MC-DATA corrections is7TeV = bool('7TeV' in os.environ['jobid']) print "Is 7TeV:", is7TeV # Make PU corrector from expected data PU distribution # PU corrections .root files from pileupCalc.py pu_distributions = glob.glob( os.path.join('inputs', os.environ['jobid'], 'data_DoubleMu*pu.root')) pu_corrector = PileupWeight.PileupWeight('S6' if is7TeV else 'S7', *pu_distributions) muon_pog_PFTight_2011 = MuonPOGCorrections.make_muon_pog_PFTight_2011() muon_pog_PFTight_2012 = MuonPOGCorrections.make_muon_pog_PFTight_2012() muon_pog_PFRelIsoDB02_2011 = MuonPOGCorrections.make_muon_pog_PFRelIsoDB02_2011( ) muon_pog_PFRelIsoDB02_2012 = MuonPOGCorrections.make_muon_pog_PFRelIsoDB02_2012( ) muon_pog_Mu17Mu8_Mu17_2012 = MuonPOGCorrections.make_muon_pog_Mu17Mu8_Mu17_2012( ) muon_pog_Mu17Mu8_Mu8_2012 = MuonPOGCorrections.make_muon_pog_Mu17Mu8_Mu8_2012() # takes etas of muons muon_pog_Mu17Mu8_2011 = MuonPOGCorrections.muon_pog_Mu17Mu8_eta_eta_2011
) ################################################################################ #### MC-DATA and PU corrections ################################################ ################################################################################ # Determine MC-DATA corrections is7TeV = bool("7TeV" in os.environ["jobid"]) print "Is 7TeV:", is7TeV # Make PU corrector from expected data PU distribution # PU corrections .root files from pileupCalc.py pu_distributions = glob.glob(os.path.join("inputs", os.environ["jobid"], "data_DoubleMu*pu.root")) pu_corrector = PileupWeight.PileupWeight("S6" if is7TeV else "S7", *pu_distributions) muon_pog_PFTight_2011 = MuonPOGCorrections.make_muon_pog_PFTight_2011() muon_pog_PFTight_2012 = MuonPOGCorrections.make_muon_pog_PFTight_2012() muon_pog_PFRelIsoDB02_2011 = MuonPOGCorrections.make_muon_pog_PFRelIsoDB02_2011() muon_pog_PFRelIsoDB02_2012 = MuonPOGCorrections.make_muon_pog_PFRelIsoDB02_2012() muon_pog_Mu17Mu8_Mu17_2012 = MuonPOGCorrections.make_muon_pog_Mu17Mu8_Mu17_2012() muon_pog_Mu17Mu8_Mu8_2012 = MuonPOGCorrections.make_muon_pog_Mu17Mu8_Mu8_2012() # takes etas of muons muon_pog_Mu17Mu8_2011 = MuonPOGCorrections.muon_pog_Mu17Mu8_eta_eta_2011 # Get object ID and trigger corrector functions def mc_corrector_2011(row): if row.run > 2: return 1
#### MC-DATA and PU corrections ################################################ ################################################################################ # Determine MC-DATA corrections is7TeV = bool('7TeV' in os.environ['jobid']) if is7TeV: print "This code is not setup for 7TeV!:", is7TeV # Make PU corrector from expected data PU distribution # PU corrections .root files from pileupCalc.py pu_distributions = glob.glob(os.path.join( 'inputs', os.environ['jobidPU'], 'data_SingleMu*pu.root')) pu_corrector = PileupWeight.PileupWeight( 'S6' if is7TeV else 'S10', *pu_distributions) muon_pog_PFTight_2012 = MuonPOGCorrections.make_muon_pog_PFTight_2012ABCD() muon_pog_PFRelIsoDB012_2012 = MuonPOGCorrections.make_muon_pog_PFRelIsoDB012_2012ABCD() muon_pog_IsoMu24eta2p1_2012 = MuonPOGCorrections.make_muon_pog_IsoMu24eta2p1_2012() # Note: This should be updated, we are using the prompt-reco corrections def mc_corrector_2012(row): if row.run > 2: return 1 pu = pu_corrector(row.nTruePU) m1id = muon_pog_PFTight_2012(row.mPt, row.mEta) m1iso = muon_pog_PFRelIsoDB012_2012(row.mPt, row.mEta) m_trg = muon_pog_IsoMu24eta2p1_2012(row.mPt, row.mAbsEta) return pu*m1id*m1iso*m_trg mc_corrector = mc_corrector_2012
# Determine MC-DATA corrections is7TeV = bool('7TeV' in os.environ['jobid']) print "Is 7TeV:", is7TeV # Make PU corrector from expected data PU distribution # PU corrections .root files from pileupCalc.py pu_distributions = { 'singlemu' : glob.glob(os.path.join( 'inputs', os.environ['jobid'], 'data_SingleMu*pu.root')), } mc_pu_tag = 'S6' if is7TeV else 'S10' #################### #2012 Corrections ################### muon_pog_IsoMu24eta2p1_2012 = MuonPOGCorrections.make_muon_pog_IsoMu24eta2p1_2012() #trigger muon_pog_PFTight_2012 = MuonPOGCorrections.make_muon_pog_PFTight_2012() #ID muon_pog_Iso_2012 = MuonPOGCorrections.make_muon_pog_PFRelIsoDB012_2012() #Iso muon_pog_IsoMu24eta2p1 = muon_pog_IsoMu24eta2p1_2012 muon_pog_PFTight = muon_pog_PFTight_2012 muon_pog_Iso = muon_pog_Iso_2012 ##################### # PU Corrections ##################### def make_puCorrector(dataset, kind=None): 'makes PU reweighting according to the pu distribution of the reference data and the MC, MC distribution can be forced' if not kind: kind = mc_pu_tag
correct_double_electron = H2TauCorrections.correct_double_electron_trg_2011 if is7TeV else H2TauCorrections.correct_double_electron_trg_2012 def double_electron_trigger(row): return correct_double_electron( row.e1Pt, row.e1Eta, row.e2Pt, row.e2Eta ) ######################################################################## ## ## ID/ISO ## ######################################################################## #Makes appropriate correction function for electrons or muons according to run period mu_pog_2011_id = MuonPOGCorrections.make_muon_pog_PFTight_2011() mu_pog_2011_iso = MuonPOGCorrections.make_muon_pog_PFRelIsoDB02_2011() muon_pog_IsoID = (lambda pt, eta: mu_pog_2011_id(pt,eta)*mu_pog_2011_iso(pt,eta)) if is7TeV else H2TauCorrections.correct_mu_idiso_2012 electron_corrections = H2TauCorrections.correct_e_idiso_2011 if is7TeV else H2TauCorrections.correct_e_idiso_2012 electron_tight_corrections = H2TauCorrections.correct_e_TIGHTidiso_2011 if is7TeV else H2TauCorrections.correct_e_TIGHTidiso_2012 def get_muon_corrections(row,*args): 'makes corrections to iso and id of muons' ret = 1. for arg in args: eta = getattr(row, '%sEta' % arg) pt = getattr(row, '%sPt' % arg) #print muon_pog_IsoID.__name__ ret *= muon_pog_IsoID( pt, eta) return ret
# Determine MC-DATA corrections is7TeV = bool('7TeV' in os.environ['jobid']) print "Is 7TeV:", is7TeV # Make PU corrector from expected data PU distribution # PU corrections .root files from pileupCalc.py pu_distributions_doublemu = glob.glob(os.path.join( 'inputs', os.environ['jobid'], 'data_DoubleMu*pu.root')) pu_distributions_doublee = glob.glob(os.path.join( 'inputs', os.environ['jobid'], 'data_DoubleElectron*pu.root')) #pu_corrector = PileupWeight.PileupWeight( 'S6' if is7TeV else 'S10', *pu_distributions) #mu_pog_2011_id = MuonPOGCorrections.make_muon_pog_PFTight_2011() #mu_pog_2011_iso = MuonPOGCorrections.make_muon_pog_PFRelIsoDB02_2011() #muon_pog_IsoID = (lambda pt, eta: mu_pog_2011_id(pt,eta)*mu_pog_2011_iso(pt,eta)) if is7TeV else H2TauCorrections.correct_mu_idiso_2012 #electron_corrections = H2TauCorrections.correct_e_idiso_2011 if is7TeV else H2TauCorrections.correct_e_idiso_2012 muon_pog_Mu17Mu8_Mu17_2012 = MuonPOGCorrections.make_muon_pog_Mu17Mu8_Mu17_2012() muon_pog_Mu17Mu8_Mu8_2012 = MuonPOGCorrections.make_muon_pog_Mu17Mu8_Mu8_2012() #muon_pog_Mu17Mu8_2011 = MuonPOGCorrections.muon_pog_Mu17Mu8_eta_eta_2011 # takes etas of muons def make_puCorrector(dataset, kind=None): if not kind: kind = 'S6' if is7TeV else 'S10' if dataset is 'doublemu': return PileupWeight.PileupWeight( 'S6' if is7TeV else 'S10', *pu_distributions_doublemu) elif dataset is 'doublee': return PileupWeight.PileupWeight( 'S6' if is7TeV else 'S10', *pu_distributions_doublee) return None ## def force_pu_distribution(kind): ## pu_corrector = PileupWeight.PileupWeight( kind, *pu_distributions)
#Double electrons scale factors correct_double_electron = H2TauCorrections.correct_double_electron_trg_2011 if is7TeV else H2TauCorrections.correct_double_electron_trg_2012 def double_electron_trigger(row): return correct_double_electron(row.e1Pt, row.e1Eta, row.e2Pt, row.e2Eta) ######################################################################## ## ## ID/ISO ## ######################################################################## #Makes appropriate correction function for electrons or muons according to run period mu_pog_2011_id = MuonPOGCorrections.make_muon_pog_PFTight_2011() mu_pog_2011_iso = MuonPOGCorrections.make_muon_pog_PFRelIsoDB02_2011() muon_pog_IsoID = (lambda pt, eta: mu_pog_2011_id(pt, eta) * mu_pog_2011_iso( pt, eta)) if is7TeV else H2TauCorrections.correct_mu_idiso_2012 electron_corrections = H2TauCorrections.correct_e_idiso_2011 if is7TeV else H2TauCorrections.correct_e_idiso_2012 electron_tight_corrections = H2TauCorrections.correct_e_TIGHTidiso_2011 if is7TeV else H2TauCorrections.correct_e_TIGHTidiso_2012 def get_muon_corrections(row, *args): 'makes corrections to iso and id of muons' ret = 1. for arg in args: eta = getattr(row, '%sEta' % arg) pt = getattr(row, '%sPt' % arg) #print muon_pog_IsoID.__name__ ret *= muon_pog_IsoID(pt, eta)