diff --git a/Analyzer/MakeHistograms.py b/Analyzer/MakeHistograms.py index f1cbd73..c861101 100644 --- a/Analyzer/MakeHistograms.py +++ b/Analyzer/MakeHistograms.py @@ -15,7 +15,7 @@ # # varNamesToPlot = [ - "jetSel0_dimuon_dphi_norm" + "jetSel0_dilep_dphi_norm" ] def main(sample_name, useSkimNtuples): @@ -58,19 +58,30 @@ def main(sample_name, useSkimNtuples): # Define name for event weight weightName = "evtWeight" - df = df.Define("jetSel0_dimuon_dphi_norm","DeltaPhiNorm(jetSel0_dimuon_dphi)") - df = df.Define("jetSel0_dimuon_ptbalance","dimuon_pt/jetSel0_pt") + ############################################# + # + # Define columns + # + ############################################# + if not useSkimNtuples: + df = df.Define("passOS","lep0_charge * lep1_charge < 0.0") + df = df.Define("passNJetSel","(nJetSelPt30Eta5p0<=1)&&(nJetSelPt30Eta5p0<=1)") + if isMC: + for syst in ak4Systematics: + df = df.Define("passNJetSel_"+syst,"("+sys+"_nJetSelPt30Eta5p0<=1)&&("+sys+"_nJetSelPt30Eta5p0<=1)") + + df = df.Define("jetSel0_dilep_dphi_norm","DeltaPhiNorm(jetSel0_dilep_dphi)") + df = df.Define("jetSel0_dilep_ptbalance","dilep_pt/jetSel0_pt") if isMC: df = df.Define("passGenMatch","jetSel0_gen_match") - ############################################# # # Define Filters # ############################################# df_filters = OrderedDict() - df_filters["passOS"] = df.Filter("mu0_charge * mu1_charge < 0.0") - df_filters["passNJets1"] = df_filters["passOS"].Filter("nJetSel==1") + df_filters["passOS"] = df.Filter("passOS") + df_filters["passNJetSel"] = df_filters["passOS"].Filter("passNJetSel") # # Define jetSel0 eta bins # @@ -112,9 +123,9 @@ def main(sample_name, useSkimNtuples): binNames = [] for eta in etaBins: for pt in ptBins: - cutNameStr = "passNJets1_jetSel0_"+ eta + "_" + pt + cutNameStr = "passNJetSel_jetSel0_"+ eta + "_" + pt filterStr = etaBins[eta] + " && " + ptBins[pt] - df_filters[cutNameStr] = df_filters["passNJets1"].Filter(filterStr) + df_filters[cutNameStr] = df_filters["passNJetSel"].Filter(filterStr) binNames.append(cutNameStr) # # Gen Matching requirement @@ -123,16 +134,16 @@ def main(sample_name, useSkimNtuples): # # Pass # - cutNameStr = "passNJets1_jetSel0_"+ eta + "_" + pt +"_passGenMatch" + cutNameStr = "passNJetSel_jetSel0_"+ eta + "_" + pt +"_passGenMatch" filterStr = etaBins[eta] + " && " + ptBins[pt] + " && (passGenMatch)" - df_filters[cutNameStr] = df_filters["passNJets1"].Filter(filterStr) + df_filters[cutNameStr] = df_filters["passNJetSel"].Filter(filterStr) binNames.append(cutNameStr) # # Fail # - cutNameStr = "passNJets1_jetSel0_"+ eta + "_" + pt +"_failGenMatch" + cutNameStr = "passNJetSel_jetSel0_"+ eta + "_" + pt +"_failGenMatch" filterStr = etaBins[eta] + " && " + ptBins[pt] + " && (!passGenMatch)" - df_filters[cutNameStr] = df_filters["passNJets1"].Filter(filterStr) + df_filters[cutNameStr] = df_filters["passNJetSel"].Filter(filterStr) binNames.append(cutNameStr) # @@ -152,8 +163,8 @@ def main(sample_name, useSkimNtuples): # Define pt balance cuts # ptBalanceCuts = OrderedDict() - ptBalanceCuts["badBal"] = "jetSel0_dimuon_ptbalance<0.5" - ptBalanceCuts["goodBal"] = "(jetSel0_dimuon_ptbalance>=0.5) && (jetSel0_dimuon_ptbalance<1.5)" + ptBalanceCuts["badBal"] = "jetSel0_dilep_ptbalance<0.5" + ptBalanceCuts["goodBal"] = "(jetSel0_dilep_ptbalance>=0.5) && (jetSel0_dilep_ptbalance<1.5)" cutNames=[] for binName in binNames: @@ -194,11 +205,12 @@ def main(sample_name, useSkimNtuples): # # Some exceptions # - if "jetSel0" in varName and "passNJets1" not in cutLevel: continue + if "jetSel0" in varName and "passNJetSel" not in cutLevel: continue # # Define full name for histogram # histoNameFinal = "h_%s_%s" %(cutLevel,varName) + print histoNameFinal histoInfo = (histoNameFinal, histoNameFinal+";"+var.xAxis+";"+var.yAxis, var.nbins, var.xmin, var.xmax) Histograms[histoNameFinal] = df_filters[cutLevel].Histo1D(histoInfo, var.varNameInTree, weightName) # print ("Creating histo: %s" %histoNameFinal) diff --git a/Analyzer/RunLocal_MakeHistograms.sh b/Analyzer/RunLocal_MakeHistograms.sh index 56440f5..4223b1a 100755 --- a/Analyzer/RunLocal_MakeHistograms.sh +++ b/Analyzer/RunLocal_MakeHistograms.sh @@ -8,6 +8,9 @@ MC18_DY_MG MC16_DY_AMCNLO MC17_DY_AMCNLO MC18_DY_AMCNLO +MC16_DY_MG_HW +MC17_DY_MG_HW +MC18_DY_MG_HW Data16B_DoubleMuon Data16C_DoubleMuon Data16D_DoubleMuon @@ -24,6 +27,22 @@ Data18A_DoubleMuon Data18B_DoubleMuon Data18C_DoubleMuon Data18D_DoubleMuon +Data16B_DoubleEG +Data16C_DoubleEG +Data16D_DoubleEG +Data16E_DoubleEG +Data16F_DoubleEG +Data16G_DoubleEG +Data16H_DoubleEG +Data17B_DoubleEG +Data17C_DoubleEG +Data17D_DoubleEG +Data17E_DoubleEG +Data17F_DoubleEG +Data18A_EGamma +Data18B_EGamma +Data18C_EGamma +Data18D_EGamma ) # # Make histograms from ntuples diff --git a/Analyzer/RunLocal_SkimNtuples.sh b/Analyzer/RunLocal_SkimNtuples.sh index 6460427..6d1c9ad 100755 --- a/Analyzer/RunLocal_SkimNtuples.sh +++ b/Analyzer/RunLocal_SkimNtuples.sh @@ -8,6 +8,9 @@ MC18_DY_MG MC16_DY_AMCNLO MC17_DY_AMCNLO MC18_DY_AMCNLO +MC16_DY_MG_HW +MC17_DY_MG_HW +MC18_DY_MG_HW Data16B_DoubleMuon Data16C_DoubleMuon Data16D_DoubleMuon @@ -15,15 +18,31 @@ Data16E_DoubleMuon Data16F_DoubleMuon Data16G_DoubleMuon Data16H_DoubleMuon +Data16B_DoubleEG +Data16C_DoubleEG +Data16D_DoubleEG +Data16E_DoubleEG +Data16F_DoubleEG +Data16G_DoubleEG +Data16H_DoubleEG Data17B_DoubleMuon Data17C_DoubleMuon Data17D_DoubleMuon Data17E_DoubleMuon Data17F_DoubleMuon +Data17B_DoubleEG +Data17C_DoubleEG +Data17D_DoubleEG +Data17E_DoubleEG +Data17F_DoubleEG Data18A_DoubleMuon Data18B_DoubleMuon Data18C_DoubleMuon Data18D_DoubleMuon +Data18A_EGamma +Data18B_EGamma +Data18C_EGamma +Data18D_EGamma ) # # Make skimmed ntuples diff --git a/Analyzer/SampleList.py b/Analyzer/SampleList.py index 17357fe..ccd05a4 100644 --- a/Analyzer/SampleList.py +++ b/Analyzer/SampleList.py @@ -6,11 +6,11 @@ def __init__(self, name="", crabFiles=[], ntupleFiles=[]): self.crabFiles = crabFiles self.ntupleFiles = ntupleFiles -version="DiMuonSkim_v2" +version="DiMuonSkim_v3" EOSURL="root://eoscms.cern.ch/" EOSDIR="/eos/cms/store/group/phys_jetmet/nbinnorj/" CRABDIR="JetPUId_"+version+"/CRABOUTPUT/" -NTUPDIR="JetPUId_"+version+"/ntuples_skim_njet1/" +NTUPDIR="JetPUId_"+version+"/ntuples_skim/" Samples = collections.OrderedDict() ################################################ @@ -37,6 +37,15 @@ def __init__(self, name="", crabFiles=[], ntupleFiles=[]): EOSDIR+NTUPDIR+"ntuple_MC16_DY_AMCNLO.root" ] ) +Samples["MC16_DY_MG_HW"] = Sample( + name="MC16_DY_MG_HW", + crabFiles=[ + EOSDIR+CRABDIR+"DYJetsToLL_M-50_TuneCUETHS1_13TeV-madgraphMLM-herwigpp/JetPUId_MC16NanoAODv6_"+version+"/*/*/tree_*.root", + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_MC16_DY_MG_HW.root" + ] +) Samples["Data16B_DoubleMuon"] = Sample( name="Data16B_DoubleMuon", crabFiles=[ @@ -101,6 +110,71 @@ def __init__(self, name="", crabFiles=[], ntupleFiles=[]): EOSDIR+NTUPDIR+"ntuple_Data16H_DoubleMuon.root" ] ) +Samples["Data16B_DoubleEG"] = Sample( + name="Data16B_DoubleEG", + crabFiles=[ + EOSDIR+CRABDIR+"DoubleEG/JetPUId_Run2016B_ver1-Data16NanoAODv6_ver1-v1_"+version+"/*/*/tree_*.root", + EOSDIR+CRABDIR+"DoubleEG/JetPUId_Run2016B_ver2-Data16NanoAODv6_ver2-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data16B_DoubleEG.root" + ] +) +Samples["Data16C_DoubleEG"] = Sample( + name="Data16C_DoubleEG", + crabFiles=[ + EOSDIR+CRABDIR+"DoubleEG/JetPUId_Run2016C-Data16NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data16C_DoubleEG.root" + ] +) +Samples["Data16D_DoubleEG"] = Sample( + name="Data16D_DoubleEG", + crabFiles=[ + EOSDIR+CRABDIR+"DoubleEG/JetPUId_Run2016D-Data16NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data16D_DoubleEG.root" + ] +) +Samples["Data16E_DoubleEG"] = Sample( + name="Data16E_DoubleEG", + crabFiles=[ + EOSDIR+CRABDIR+"DoubleEG/JetPUId_Run2016E-Data16NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data16E_DoubleEG.root" + ] +) +Samples["Data16F_DoubleEG"] = Sample( + name="Data16F_DoubleEG", + crabFiles=[ + EOSDIR+CRABDIR+"DoubleEG/JetPUId_Run2016F-Data16NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data16F_DoubleEG.root" + ] +) +Samples["Data16G_DoubleEG"] = Sample( + name="Data16G_DoubleEG", + crabFiles=[ + EOSDIR+CRABDIR+"DoubleEG/JetPUId_Run2016G-Data16NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data16G_DoubleEG.root" + ] +) +Samples["Data16H_DoubleEG"] = Sample( + name="Data16H_DoubleEG", + crabFiles=[ + EOSDIR+CRABDIR+"DoubleEG/JetPUId_Run2016H-Data16NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data16H_DoubleEG.root" + ] +) + ################################################ # # 2017 @@ -126,6 +200,15 @@ def __init__(self, name="", crabFiles=[], ntupleFiles=[]): EOSDIR+NTUPDIR+"ntuple_MC17_DY_AMCNLO.root" ] ) +Samples["MC17_DY_MG_HW"] = Sample( + name="MC17_DY_MG_HW", + crabFiles=[ + EOSDIR+CRABDIR+"DYJetsToLL_M-50_TuneCH3_13TeV-madgraphMLM-herwig7/JetPUId_MC17NanoAODv6_"+version+"/*/*/tree_*.root", + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_MC17_DY_MG_HW.root" + ] +) Samples["Data17B_DoubleMuon"] = Sample( name="Data17B_DoubleMuon", crabFiles=[ @@ -171,6 +254,52 @@ def __init__(self, name="", crabFiles=[], ntupleFiles=[]): EOSDIR+NTUPDIR+"ntuple_Data17F_DoubleMuon.root" ] ) +Samples["Data17B_DoubleEG"] = Sample( + name="Data17B_DoubleEG", + crabFiles=[ + EOSDIR+CRABDIR+"DoubleEG/JetPUId_Run2017B-Data17NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data17B_DoubleEG.root" + ] +) +Samples["Data17C_DoubleEG"] = Sample( + name="Data17C_DoubleEG", + crabFiles=[ + EOSDIR+CRABDIR+"DoubleEG/JetPUId_Run2017C-Data17NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data17C_DoubleEG.root" + ] +) +Samples["Data17D_DoubleEG"] = Sample( + name="Data17D_DoubleEG", + crabFiles=[ + EOSDIR+CRABDIR+"DoubleEG/JetPUId_Run2017D-Data17NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data17D_DoubleEG.root" + ] +) +Samples["Data17E_DoubleEG"] = Sample( + name="Data17E_DoubleEG", + crabFiles=[ + EOSDIR+CRABDIR+"DoubleEG/JetPUId_Run2017E-Data17NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data17E_DoubleEG.root" + ] +) +Samples["Data17F_DoubleEG"] = Sample( + name="Data17F_DoubleEG", + crabFiles=[ + EOSDIR+CRABDIR+"DoubleEG/JetPUId_Run2017F-Data17NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data17F_DoubleEG.root" + ] +) + ################################################ # # 2018 @@ -195,6 +324,15 @@ def __init__(self, name="", crabFiles=[], ntupleFiles=[]): EOSDIR+NTUPDIR+"ntuple_MC18_DY_AMCNLO.root" ] ) +Samples["MC18_DY_MG_HW"] = Sample( + name="MC18_DY_MG_HW", + crabFiles=[ + EOSDIR+CRABDIR+"DYJetsToLL_M-50_TuneCH3_13TeV-madgraphMLM-herwig7/JetPUId_MC18NanoAODv6_"+version+"/*/*/tree_*.root", + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_MC18_DY_MG_HW.root" + ] +) Samples["Data18A_DoubleMuon"] = Sample( name="Data18A_DoubleMuon", crabFiles=[ @@ -231,4 +369,40 @@ def __init__(self, name="", crabFiles=[], ntupleFiles=[]): EOSDIR+NTUPDIR+"ntuple_Data18D_DoubleMuon.root" ] ) +Samples["Data18A_EGamma"] = Sample( + name="Data18A_EGamma", + crabFiles=[ + EOSDIR+CRABDIR+"EGamma/JetPUId_Run2018A-Data18NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data18A_EGamma.root" + ] +) +Samples["Data18B_EGamma"] = Sample( + name="Data18B_EGamma", + crabFiles=[ + EOSDIR+CRABDIR+"EGamma/JetPUId_Run2018B-Data18NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data18B_EGamma.root" + ] +) +Samples["Data18C_EGamma"] = Sample( + name="Data18C_EGamma", + crabFiles=[ + EOSDIR+CRABDIR+"EGamma/JetPUId_Run2018C-Data18NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data18C_EGamma.root" + ] +) +Samples["Data18D_EGamma"] = Sample( + name="Data18D_EGamma", + crabFiles=[ + EOSDIR+CRABDIR+"EGamma/JetPUId_Run2018D-Data18NanoAODv6-v1_"+version+"/*/*/tree_*.root" + ], + ntupleFiles=[ + EOSDIR+NTUPDIR+"ntuple_Data18D_EGamma.root" + ] +) diff --git a/Analyzer/SkimNtuples.py b/Analyzer/SkimNtuples.py index c6f6c11..1a54ff6 100644 --- a/Analyzer/SkimNtuples.py +++ b/Analyzer/SkimNtuples.py @@ -38,18 +38,29 @@ def main(sample_name): # "jesTotalDown", # "jerUp" # ] + + ############################################# + # + # Define columns + # + ############################################# + df = df.Define("passOS","lep0_charge * lep1_charge < 0.0") + df = df.Define("passNJetSel","(nJetSelPt30Eta5p0<=1)&&(nJetSelPt30Eta5p0<=1)") + if isMC: + for syst in ak4Systematics: + df = df.Define("passNJetSel_"+syst,"("+sys+"_nJetSelPt30Eta5p0<=1)&&("+sys+"_nJetSelPt30Eta5p0<=1)") + ############################################# # # Define Filters # ############################################# df_filters = OrderedDict() - df_filters["passOS"] = df.Filter("mu0_charge * mu1_charge < 0.0") - df_filters["passNJets1"] = df_filters["passOS"].Filter("nJetSel==1") - + df_filters["passOS"] = df.Filter("passOS") + df_filters["passNJetSel"] = df_filters["passOS"].Filter("passNJetSel") if isMC: for syst in ak4Systematics: - df_filters["passNJets1_"+syst] = df_filters["passOS"].Filter(syst+"_nJetSel==1") + df_filters["passNJetSel_"+syst] = df_filters["passOS"].Filter("passNJetSel_"+syst) ############################################# # @@ -67,14 +78,17 @@ def main(sample_name): prefix=SampleList.EOSURL prefix+=SampleList.EOSDIR prefix+=SampleList.NTUPDIR - + # + # + # + initialCount = df.Count() # # Save events with exactly one jet # outTreeName="Events" outTreeFileName = "%sntuple_%s.root" %(prefix,sample_name) print "Save tree %s in file %s" %(outTreeName,outTreeFileName) - df_filters["passNJets1"].Snapshot(outTreeName, outTreeFileName) + df_filters["passNJetSel"].Snapshot(outTreeName, outTreeFileName) # # Do the same for MC with systematics # @@ -83,7 +97,9 @@ def main(sample_name): outTreeName="Events_"+syst outTreeFileName = "%sntuple_%s_%s.root" %(prefix,sample_name,syst) print "Save tree %s in file %s" %(outTreeName,outTreeFileName) - df_filters["passNJets1_"+syst].Snapshot(outTreeName, outTreeFileName) + df_filters["passNJetSel_"+syst].Snapshot(outTreeName, outTreeFileName) + + print "Initial Events in Tree: ", initialCount.GetValue() if __name__== "__main__": time_start = datetime.datetime.now() diff --git a/Analyzer/VariableList.py b/Analyzer/VariableList.py index 13e5ee4..01e393f 100644 --- a/Analyzer/VariableList.py +++ b/Analyzer/VariableList.py @@ -27,145 +27,145 @@ class Variable: Variables = collections.OrderedDict() -Variables["mu0_pt"] = Variable() -Variables["mu0_pt"].varNameInTree = "mu0_pt" -Variables["mu0_pt"].xAxis = "mu0 p_{T} [GeV]" -Variables["mu0_pt"].yAxis = "Events" -Variables["mu0_pt"].doLogY = False -Variables["mu0_pt"].nbins = 500 -Variables["mu0_pt"].xmin = 0 -Variables["mu0_pt"].xmax = 500 -Variables["mu0_pt"].rebins = [] - -Variables["mu0_eta"] = Variable() -Variables["mu0_eta"].varNameInTree = "mu0_eta" -Variables["mu0_eta"].xAxis = "mu0 #eta" -Variables["mu0_eta"].yAxis = "Events" -Variables["mu0_eta"].doLogY = False -Variables["mu0_eta"].nbins = etabins -Variables["mu0_eta"].xmin = etamin -Variables["mu0_eta"].xmax = etamax -Variables["mu0_eta"].rebins = [] - -Variables["mu0_phi"] = Variable() -Variables["mu0_phi"].varNameInTree = "mu0_phi" -Variables["mu0_phi"].xAxis = "mu0 #phi" -Variables["mu0_phi"].yAxis = "Events" -Variables["mu0_phi"].doLogY = False -Variables["mu0_phi"].nbins = phibins -Variables["mu0_phi"].xmin = phimin -Variables["mu0_phi"].xmax = phimax -Variables["mu0_phi"].rebins = [] - -Variables["mu0_mass"] = Variable() -Variables["mu0_mass"].varNameInTree = "mu0_mass" -Variables["mu0_mass"].xAxis = "mu0_mass [GeV]" -Variables["mu0_mass"].yAxis = "Events" -Variables["mu0_mass"].doLogY = False -Variables["mu0_mass"].nbins = 10 -Variables["mu0_mass"].xmin = 0 -Variables["mu0_mass"].xmax = 0.2 -Variables["mu0_mass"].rebins = [] - -Variables["mu0_charge"] = Variable() -Variables["mu0_charge"].varNameInTree = "mu0_charge" -Variables["mu0_charge"].xAxis = "mu0_charge" -Variables["mu0_charge"].yAxis = "Events" -Variables["mu0_charge"].doLogY = False -Variables["mu0_charge"].nbins = 10 -Variables["mu0_charge"].xmin = -2 -Variables["mu0_charge"].xmax = 2 -Variables["mu0_charge"].rebins = [] - -Variables["mu1_pt"] = Variable() -Variables["mu1_pt"].varNameInTree = "mu1_pt" -Variables["mu1_pt"].xAxis = "mu1 p_{T} [GeV]" -Variables["mu1_pt"].yAxis = "Events" -Variables["mu1_pt"].doLogY = False -Variables["mu1_pt"].nbins = 500 -Variables["mu1_pt"].xmin = 0 -Variables["mu1_pt"].xmax = 500 -Variables["mu1_pt"].rebins = [] - -Variables["mu1_eta"] = Variable() -Variables["mu1_eta"].varNameInTree = "mu1_eta" -Variables["mu1_eta"].xAxis = "mu1 #eta" -Variables["mu1_eta"].yAxis = "Events" -Variables["mu1_eta"].doLogY = False -Variables["mu1_eta"].nbins = etabins -Variables["mu1_eta"].xmin = etamin -Variables["mu1_eta"].xmax = etamax -Variables["mu1_eta"].rebins = [] - -Variables["mu1_phi"] = Variable() -Variables["mu1_phi"].varNameInTree = "mu1_phi" -Variables["mu1_phi"].xAxis = "mu1 #phi" -Variables["mu1_phi"].yAxis = "Events" -Variables["mu1_phi"].doLogY = False -Variables["mu1_phi"].nbins = phibins -Variables["mu1_phi"].xmin = phimin -Variables["mu1_phi"].xmax = phimax -Variables["mu1_phi"].rebins = [] - -Variables["mu1_mass"] = Variable() -Variables["mu1_mass"].varNameInTree = "mu1_mass" -Variables["mu1_mass"].xAxis = "mu1_mass [GeV]" -Variables["mu1_mass"].yAxis = "Events" -Variables["mu1_mass"].doLogY = False -Variables["mu1_mass"].nbins = 10 -Variables["mu1_mass"].xmin = 0 -Variables["mu1_mass"].xmax = 0.2 -Variables["mu1_mass"].rebins = [] - -Variables["mu1_charge"] = Variable() -Variables["mu1_charge"].varNameInTree = "mu1_charge" -Variables["mu1_charge"].xAxis = "mu1_charge" -Variables["mu1_charge"].yAxis = "Events" -Variables["mu1_charge"].doLogY = False -Variables["mu1_charge"].nbins = 10 -Variables["mu1_charge"].xmin = -2 -Variables["mu1_charge"].xmax = 2 -Variables["mu1_charge"].rebins = [] - -Variables["dimuon_pt"] = Variable() -Variables["dimuon_pt"].varNameInTree = "dimuon_pt" -Variables["dimuon_pt"].xAxis = "dimuon p_{T} [GeV]" -Variables["dimuon_pt"].yAxis = "Events" -Variables["dimuon_pt"].doLogY = False -Variables["dimuon_pt"].nbins = 500 -Variables["dimuon_pt"].xmin = 0 -Variables["dimuon_pt"].xmax = 500 -Variables["dimuon_pt"].rebins = [] - -Variables["dimuon_eta"] = Variable() -Variables["dimuon_eta"].varNameInTree = "dimuon_eta" -Variables["dimuon_eta"].xAxis = "dimuon #eta" -Variables["dimuon_eta"].yAxis = "Events" -Variables["dimuon_eta"].doLogY = False -Variables["dimuon_eta"].nbins = etabins -Variables["dimuon_eta"].xmin = etamin -Variables["dimuon_eta"].xmax = etamax -Variables["dimuon_eta"].rebins = [] - -Variables["dimuon_phi"] = Variable() -Variables["dimuon_phi"].varNameInTree = "dimuon_phi" -Variables["dimuon_phi"].xAxis = "dimuon #phi" -Variables["dimuon_phi"].yAxis = "Events" -Variables["dimuon_phi"].doLogY = False -Variables["dimuon_phi"].nbins = phibins -Variables["dimuon_phi"].xmin = phimin -Variables["dimuon_phi"].xmax = phimax -Variables["dimuon_phi"].rebins = [] - -Variables["dimuon_mass"] = Variable() -Variables["dimuon_mass"].varNameInTree = "dimuon_mass" -Variables["dimuon_mass"].xAxis = "dimuon_mass [GeV]" -Variables["dimuon_mass"].yAxis = "Events" -Variables["dimuon_mass"].doLogY = False -Variables["dimuon_mass"].nbins = 80 -Variables["dimuon_mass"].xmin = 70 -Variables["dimuon_mass"].xmax = 110 -Variables["dimuon_mass"].rebins = [] +Variables["lep0_pt"] = Variable() +Variables["lep0_pt"].varNameInTree = "lep0_pt" +Variables["lep0_pt"].xAxis = "lep0 p_{T} [GeV]" +Variables["lep0_pt"].yAxis = "Events" +Variables["lep0_pt"].doLogY = False +Variables["lep0_pt"].nbins = 500 +Variables["lep0_pt"].xmin = 0 +Variables["lep0_pt"].xmax = 500 +Variables["lep0_pt"].rebins = [] + +Variables["lep0_eta"] = Variable() +Variables["lep0_eta"].varNameInTree = "lep0_eta" +Variables["lep0_eta"].xAxis = "lep0 #eta" +Variables["lep0_eta"].yAxis = "Events" +Variables["lep0_eta"].doLogY = False +Variables["lep0_eta"].nbins = etabins +Variables["lep0_eta"].xmin = etamin +Variables["lep0_eta"].xmax = etamax +Variables["lep0_eta"].rebins = [] + +Variables["lep0_phi"] = Variable() +Variables["lep0_phi"].varNameInTree = "lep0_phi" +Variables["lep0_phi"].xAxis = "lep0 #phi" +Variables["lep0_phi"].yAxis = "Events" +Variables["lep0_phi"].doLogY = False +Variables["lep0_phi"].nbins = phibins +Variables["lep0_phi"].xmin = phimin +Variables["lep0_phi"].xmax = phimax +Variables["lep0_phi"].rebins = [] + +Variables["lep0_mass"] = Variable() +Variables["lep0_mass"].varNameInTree = "lep0_mass" +Variables["lep0_mass"].xAxis = "lep0_mass [GeV]" +Variables["lep0_mass"].yAxis = "Events" +Variables["lep0_mass"].doLogY = False +Variables["lep0_mass"].nbins = 10 +Variables["lep0_mass"].xmin = 0 +Variables["lep0_mass"].xmax = 0.2 +Variables["lep0_mass"].rebins = [] + +Variables["lep0_charge"] = Variable() +Variables["lep0_charge"].varNameInTree = "lep0_charge" +Variables["lep0_charge"].xAxis = "lep0_charge" +Variables["lep0_charge"].yAxis = "Events" +Variables["lep0_charge"].doLogY = False +Variables["lep0_charge"].nbins = 10 +Variables["lep0_charge"].xmin = -2 +Variables["lep0_charge"].xmax = 2 +Variables["lep0_charge"].rebins = [] + +Variables["lep1_pt"] = Variable() +Variables["lep1_pt"].varNameInTree = "lep1_pt" +Variables["lep1_pt"].xAxis = "lep1 p_{T} [GeV]" +Variables["lep1_pt"].yAxis = "Events" +Variables["lep1_pt"].doLogY = False +Variables["lep1_pt"].nbins = 500 +Variables["lep1_pt"].xmin = 0 +Variables["lep1_pt"].xmax = 500 +Variables["lep1_pt"].rebins = [] + +Variables["lep1_eta"] = Variable() +Variables["lep1_eta"].varNameInTree = "lep1_eta" +Variables["lep1_eta"].xAxis = "lep1 #eta" +Variables["lep1_eta"].yAxis = "Events" +Variables["lep1_eta"].doLogY = False +Variables["lep1_eta"].nbins = etabins +Variables["lep1_eta"].xmin = etamin +Variables["lep1_eta"].xmax = etamax +Variables["lep1_eta"].rebins = [] + +Variables["lep1_phi"] = Variable() +Variables["lep1_phi"].varNameInTree = "lep1_phi" +Variables["lep1_phi"].xAxis = "lep1 #phi" +Variables["lep1_phi"].yAxis = "Events" +Variables["lep1_phi"].doLogY = False +Variables["lep1_phi"].nbins = phibins +Variables["lep1_phi"].xmin = phimin +Variables["lep1_phi"].xmax = phimax +Variables["lep1_phi"].rebins = [] + +Variables["lep1_mass"] = Variable() +Variables["lep1_mass"].varNameInTree = "lep1_mass" +Variables["lep1_mass"].xAxis = "lep1_mass [GeV]" +Variables["lep1_mass"].yAxis = "Events" +Variables["lep1_mass"].doLogY = False +Variables["lep1_mass"].nbins = 10 +Variables["lep1_mass"].xmin = 0 +Variables["lep1_mass"].xmax = 0.2 +Variables["lep1_mass"].rebins = [] + +Variables["lep1_charge"] = Variable() +Variables["lep1_charge"].varNameInTree = "lep1_charge" +Variables["lep1_charge"].xAxis = "lep1_charge" +Variables["lep1_charge"].yAxis = "Events" +Variables["lep1_charge"].doLogY = False +Variables["lep1_charge"].nbins = 10 +Variables["lep1_charge"].xmin = -2 +Variables["lep1_charge"].xmax = 2 +Variables["lep1_charge"].rebins = [] + +Variables["dilep_pt"] = Variable() +Variables["dilep_pt"].varNameInTree = "dilep_pt" +Variables["dilep_pt"].xAxis = "dilep p_{T} [GeV]" +Variables["dilep_pt"].yAxis = "Events" +Variables["dilep_pt"].doLogY = False +Variables["dilep_pt"].nbins = 500 +Variables["dilep_pt"].xmin = 0 +Variables["dilep_pt"].xmax = 500 +Variables["dilep_pt"].rebins = [] + +Variables["dilep_eta"] = Variable() +Variables["dilep_eta"].varNameInTree = "dilep_eta" +Variables["dilep_eta"].xAxis = "dilep #eta" +Variables["dilep_eta"].yAxis = "Events" +Variables["dilep_eta"].doLogY = False +Variables["dilep_eta"].nbins = etabins +Variables["dilep_eta"].xmin = etamin +Variables["dilep_eta"].xmax = etamax +Variables["dilep_eta"].rebins = [] + +Variables["dilep_phi"] = Variable() +Variables["dilep_phi"].varNameInTree = "dilep_phi" +Variables["dilep_phi"].xAxis = "dilep #phi" +Variables["dilep_phi"].yAxis = "Events" +Variables["dilep_phi"].doLogY = False +Variables["dilep_phi"].nbins = phibins +Variables["dilep_phi"].xmin = phimin +Variables["dilep_phi"].xmax = phimax +Variables["dilep_phi"].rebins = [] + +Variables["dilep_mass"] = Variable() +Variables["dilep_mass"].varNameInTree = "dilep_mass" +Variables["dilep_mass"].xAxis = "dilep_mass [GeV]" +Variables["dilep_mass"].yAxis = "Events" +Variables["dilep_mass"].doLogY = False +Variables["dilep_mass"].nbins = 80 +Variables["dilep_mass"].xmin = 70 +Variables["dilep_mass"].xmax = 110 +Variables["dilep_mass"].rebins = [] Variables["nJetSel"] = Variable() Variables["nJetSel"].varNameInTree = "nJetSel" @@ -207,22 +207,22 @@ class Variable: Variables["jetSel0_phi"].xmax = phimax Variables["jetSel0_phi"].rebins = [] -Variables["jetSel0_dimuon_dphi"] = Variable() -Variables["jetSel0_dimuon_dphi"].varNameInTree = "jetSel0_dimuon_dphi" -Variables["jetSel0_dimuon_dphi"].xAxis = "#Delta#phi(dimuon,jetSel0)" -Variables["jetSel0_dimuon_dphi"].yAxis = "Events" -Variables["jetSel0_dimuon_dphi"].doLogY = False -Variables["jetSel0_dimuon_dphi"].nbins = 80 -Variables["jetSel0_dimuon_dphi"].xmin = -4.0 -Variables["jetSel0_dimuon_dphi"].xmax = 4.0 -Variables["jetSel0_dimuon_dphi"].rebins = [] - -Variables["jetSel0_dimuon_dphi_norm"] = Variable() -Variables["jetSel0_dimuon_dphi_norm"].varNameInTree = "jetSel0_dimuon_dphi_norm" -Variables["jetSel0_dimuon_dphi_norm"].xAxis = "#Delta#phi(dimuon,jetSel0)/#pi" -Variables["jetSel0_dimuon_dphi_norm"].yAxis = "Events" -Variables["jetSel0_dimuon_dphi_norm"].doLogY = False -Variables["jetSel0_dimuon_dphi_norm"].nbins = 100 -Variables["jetSel0_dimuon_dphi_norm"].xmin = 0.0 -Variables["jetSel0_dimuon_dphi_norm"].xmax = 2.0 -Variables["jetSel0_dimuon_dphi_norm"].rebins = [] +Variables["jetSel0_dilep_dphi"] = Variable() +Variables["jetSel0_dilep_dphi"].varNameInTree = "jetSel0_dilep_dphi" +Variables["jetSel0_dilep_dphi"].xAxis = "#Delta#phi(dilep,jetSel0)" +Variables["jetSel0_dilep_dphi"].yAxis = "Events" +Variables["jetSel0_dilep_dphi"].doLogY = False +Variables["jetSel0_dilep_dphi"].nbins = 80 +Variables["jetSel0_dilep_dphi"].xmin = -4.0 +Variables["jetSel0_dilep_dphi"].xmax = 4.0 +Variables["jetSel0_dilep_dphi"].rebins = [] + +Variables["jetSel0_dilep_dphi_norm"] = Variable() +Variables["jetSel0_dilep_dphi_norm"].varNameInTree = "jetSel0_dilep_dphi_norm" +Variables["jetSel0_dilep_dphi_norm"].xAxis = "#Delta#phi(dilep,jetSel0)/#pi" +Variables["jetSel0_dilep_dphi_norm"].yAxis = "Events" +Variables["jetSel0_dilep_dphi_norm"].doLogY = False +Variables["jetSel0_dilep_dphi_norm"].nbins = 100 +Variables["jetSel0_dilep_dphi_norm"].xmin = 0.0 +Variables["jetSel0_dilep_dphi_norm"].xmax = 2.0 +Variables["jetSel0_dilep_dphi_norm"].rebins = [] diff --git a/Analyzer/batchscripts/MakeHistoAtBatch.sh.sub b/Analyzer/batchscripts/MakeHistoAtBatch.sh.sub index 008052e..52b232b 100644 --- a/Analyzer/batchscripts/MakeHistoAtBatch.sh.sub +++ b/Analyzer/batchscripts/MakeHistoAtBatch.sh.sub @@ -6,7 +6,9 @@ log = BatchLog/Histo.$(ClusterId).log stream_output = True stream_error = True -+JobFlavour = "microcentury" + + ++JobFlavour = "longlunch" request_cpus = 4 arguments = $(SAMPLE) 4 queue SAMPLE from ( @@ -18,7 +20,16 @@ MC17_DY_AMCNLO MC18_DY_AMCNLO ) -+JobFlavour = "espresso" ++JobFlavour = "microcentury" +request_cpus = 4 +arguments = $(SAMPLE) 4 +queue SAMPLE from ( +MC16_DY_MG_HW +MC17_DY_MG_HW +MC18_DY_MG_HW +) + ++JobFlavour = "microcentury" request_cpus = 4 arguments = $(SAMPLE) 4 queue SAMPLE from ( @@ -38,4 +49,20 @@ Data18A_DoubleMuon Data18B_DoubleMuon Data18C_DoubleMuon Data18D_DoubleMuon +Data16B_DoubleEG +Data16C_DoubleEG +Data16D_DoubleEG +Data16E_DoubleEG +Data16F_DoubleEG +Data16G_DoubleEG +Data16H_DoubleEG +Data17B_DoubleEG +Data17C_DoubleEG +Data17D_DoubleEG +Data17E_DoubleEG +Data17F_DoubleEG +Data18A_EGamma +Data18B_EGamma +Data18C_EGamma +Data18D_EGamma ) diff --git a/Analyzer/haddHistos.sh b/Analyzer/haddHistos.sh index 294172e..842bcfc 100644 --- a/Analyzer/haddHistos.sh +++ b/Analyzer/haddHistos.sh @@ -1,6 +1,6 @@ # # combine all data histos into one root file # -hadd -f histos/Histo_Data16.root histos/Histo_Data16*_DoubleMuon.root -hadd -f histos/Histo_Data17.root histos/Histo_Data17*_DoubleMuon.root -hadd -f histos/Histo_Data18.root histos/Histo_Data18*_DoubleMuon.root +hadd -f histos/Histo_Data16.root histos/Histo_Data16*.root +hadd -f histos/Histo_Data17.root histos/Histo_Data17*.root +hadd -f histos/Histo_Data18.root histos/Histo_Data18*.root diff --git a/Fitter/RunFit.sh b/Fitter/RunFit.sh index 838fa66..f8beae9 100644 --- a/Fitter/RunFit.sh +++ b/Fitter/RunFit.sh @@ -1,11 +1,11 @@ # # Directory path containing all the histogram rootfiles # -INDIR="./input/DiMuonSkim_v2/" +INDIR="./input/DiMuonSkim_v3/" # # Directory path for the output of the fits # -OUTDIR="./results/" +OUTDIR="./results_v3/" python extract_fit.py --input ${INDIR} --output ${OUTDIR}/2016_WPLoose/ --year 2016 --wp Loose python extract_fit.py --input ${INDIR} --output ${OUTDIR}/2016_WPMedium/ --year 2016 --wp Medium diff --git a/Fitter/extract_fit.py b/Fitter/extract_fit.py index 66cddca..5872ede 100644 --- a/Fitter/extract_fit.py +++ b/Fitter/extract_fit.py @@ -570,31 +570,31 @@ def main(): # # Retrieve histograms: PASS ID, GOOD balance # - h_dphi_mc_genunmatched_PASS = f_mc.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_failGenMatch_goodBal_passPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") - h_dphi_mc_genmatched_PASS = f_mc.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_passGenMatch_goodBal_passPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") - h_dphi_mc_PASS = f_mc.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_goodBal_passPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") - h_dphi_data_PASS = f_data.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_goodBal_passPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") + h_dphi_mc_genunmatched_PASS = f_mc.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_failGenMatch_goodBal_passPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") + h_dphi_mc_genmatched_PASS = f_mc.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_passGenMatch_goodBal_passPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") + h_dphi_mc_PASS = f_mc.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_goodBal_passPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") + h_dphi_data_PASS = f_data.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_goodBal_passPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") # # Retrieve histograms: FAIL ID, GOOD balance # - h_dphi_mc_genunmatched_FAIL = f_mc.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_failGenMatch_goodBal_failPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") - h_dphi_mc_genmatched_FAIL = f_mc.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_passGenMatch_goodBal_failPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") - h_dphi_mc_FAIL = f_mc.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_goodBal_failPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") - h_dphi_data_FAIL = f_data.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_goodBal_failPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") + h_dphi_mc_genunmatched_FAIL = f_mc.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_failGenMatch_goodBal_failPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") + h_dphi_mc_genmatched_FAIL = f_mc.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_passGenMatch_goodBal_failPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") + h_dphi_mc_FAIL = f_mc.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_goodBal_failPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") + h_dphi_data_FAIL = f_data.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_goodBal_failPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") # # Retrieve histograms: PASS ID, BAD balance # - h_dphi_mc_genunmatched_PASS_badbalance = f_mc.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_failGenMatch_badBal_passPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") - h_dphi_mc_genmatched_PASS_badbalance = f_mc.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_passGenMatch_badBal_passPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") - h_dphi_mc_PASS_badbalance = f_mc.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_badBal_passPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") - h_dphi_data_PASS_badbalance = f_data.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_badBal_passPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") + h_dphi_mc_genunmatched_PASS_badbalance = f_mc.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_failGenMatch_badBal_passPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") + h_dphi_mc_genmatched_PASS_badbalance = f_mc.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_passGenMatch_badBal_passPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") + h_dphi_mc_PASS_badbalance = f_mc.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_badBal_passPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") + h_dphi_data_PASS_badbalance = f_data.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_badBal_passPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") # # Retrieve histograms: FAIL ID, BAD balance # - h_dphi_mc_genunmatched_FAIL_badbalance = f_mc.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_failGenMatch_badBal_failPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") - h_dphi_mc_genmatched_FAIL_badbalance = f_mc.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_passGenMatch_badBal_failPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") - h_dphi_mc_FAIL_badbalance = f_mc.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_badBal_failPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") - h_dphi_data_FAIL_badbalance = f_data.Get("h_passNJets1_jetSel0"+etaBinStr+ptBinStr+"_badBal_failPUID"+workingpoint+"_jetSel0_dimuon_dphi_norm") + h_dphi_mc_genunmatched_FAIL_badbalance = f_mc.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_failGenMatch_badBal_failPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") + h_dphi_mc_genmatched_FAIL_badbalance = f_mc.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_passGenMatch_badBal_failPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") + h_dphi_mc_FAIL_badbalance = f_mc.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_badBal_failPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") + h_dphi_data_FAIL_badbalance = f_data.Get("h_passNJetSel_jetSel0"+etaBinStr+ptBinStr+"_badBal_failPUID"+workingpoint+"_jetSel0_dilep_dphi_norm") # # Perform fit on MC # diff --git a/Fitter/input/DiMuonSkim_v3/Histo_Data16.root b/Fitter/input/DiMuonSkim_v3/Histo_Data16.root new file mode 100644 index 0000000..1889ac1 Binary files /dev/null and b/Fitter/input/DiMuonSkim_v3/Histo_Data16.root differ diff --git a/Fitter/input/DiMuonSkim_v3/Histo_Data17.root b/Fitter/input/DiMuonSkim_v3/Histo_Data17.root new file mode 100644 index 0000000..e626fbb Binary files /dev/null and b/Fitter/input/DiMuonSkim_v3/Histo_Data17.root differ diff --git a/Fitter/input/DiMuonSkim_v3/Histo_Data18.root b/Fitter/input/DiMuonSkim_v3/Histo_Data18.root new file mode 100644 index 0000000..07bae22 Binary files /dev/null and b/Fitter/input/DiMuonSkim_v3/Histo_Data18.root differ diff --git a/Fitter/input/DiMuonSkim_v3/Histo_MC16_DY_AMCNLO.root b/Fitter/input/DiMuonSkim_v3/Histo_MC16_DY_AMCNLO.root new file mode 100644 index 0000000..b73df9f Binary files /dev/null and b/Fitter/input/DiMuonSkim_v3/Histo_MC16_DY_AMCNLO.root differ diff --git a/Fitter/input/DiMuonSkim_v3/Histo_MC16_DY_MG.root b/Fitter/input/DiMuonSkim_v3/Histo_MC16_DY_MG.root new file mode 100644 index 0000000..93dd949 Binary files /dev/null and b/Fitter/input/DiMuonSkim_v3/Histo_MC16_DY_MG.root differ diff --git a/Fitter/input/DiMuonSkim_v3/Histo_MC16_DY_MG_HW.root b/Fitter/input/DiMuonSkim_v3/Histo_MC16_DY_MG_HW.root new file mode 100644 index 0000000..08f0f13 Binary files /dev/null and b/Fitter/input/DiMuonSkim_v3/Histo_MC16_DY_MG_HW.root differ diff --git a/Fitter/input/DiMuonSkim_v3/Histo_MC17_DY_AMCNLO.root b/Fitter/input/DiMuonSkim_v3/Histo_MC17_DY_AMCNLO.root new file mode 100644 index 0000000..2b444d6 Binary files /dev/null and b/Fitter/input/DiMuonSkim_v3/Histo_MC17_DY_AMCNLO.root differ diff --git a/Fitter/input/DiMuonSkim_v3/Histo_MC17_DY_MG.root b/Fitter/input/DiMuonSkim_v3/Histo_MC17_DY_MG.root new file mode 100644 index 0000000..27f0fc2 Binary files /dev/null and b/Fitter/input/DiMuonSkim_v3/Histo_MC17_DY_MG.root differ diff --git a/Fitter/input/DiMuonSkim_v3/Histo_MC17_DY_MG_HW.root b/Fitter/input/DiMuonSkim_v3/Histo_MC17_DY_MG_HW.root new file mode 100644 index 0000000..c52b024 Binary files /dev/null and b/Fitter/input/DiMuonSkim_v3/Histo_MC17_DY_MG_HW.root differ diff --git a/Fitter/input/DiMuonSkim_v3/Histo_MC18_DY_AMCNLO.root b/Fitter/input/DiMuonSkim_v3/Histo_MC18_DY_AMCNLO.root new file mode 100644 index 0000000..587c2cb Binary files /dev/null and b/Fitter/input/DiMuonSkim_v3/Histo_MC18_DY_AMCNLO.root differ diff --git a/Fitter/input/DiMuonSkim_v3/Histo_MC18_DY_MG.root b/Fitter/input/DiMuonSkim_v3/Histo_MC18_DY_MG.root new file mode 100644 index 0000000..dba469b Binary files /dev/null and b/Fitter/input/DiMuonSkim_v3/Histo_MC18_DY_MG.root differ diff --git a/Fitter/input/DiMuonSkim_v3/Histo_MC18_DY_MG_HW.root b/Fitter/input/DiMuonSkim_v3/Histo_MC18_DY_MG_HW.root new file mode 100644 index 0000000..88ddd77 Binary files /dev/null and b/Fitter/input/DiMuonSkim_v3/Histo_MC18_DY_MG_HW.root differ diff --git a/Fitter/latex/DumpPlots.tex b/Fitter/latex/DumpPlots.tex index fbd2d9d..8ee66f0 100644 --- a/Fitter/latex/DumpPlots.tex +++ b/Fitter/latex/DumpPlots.tex @@ -29,9 +29,9 @@ \vfill \end{frame} } -\newcommand*{\ResDirLoose}{../results/2016_WPLoose} -\newcommand*{\ResDirMedium}{../results/2016_WPMedium} -\newcommand*{\ResDirTight}{../results/2016_WPTight} +\newcommand*{\ResDirLoose}{../results_v3/2016_WPLoose} +\newcommand*{\ResDirMedium}{../results_v3/2016_WPMedium} +\newcommand*{\ResDirTight}{../results_v3/2016_WPTight} \begin{document} \begin{frame}{Content} diff --git a/Fitter/latex/compile.sh b/Fitter/latex/compile.sh index cdc9480..0b9da93 100644 --- a/Fitter/latex/compile.sh +++ b/Fitter/latex/compile.sh @@ -13,7 +13,7 @@ echo "" pdflatex DumpPlots.tex pdflatex DumpPlots.tex -## cp DumpPlots.pdf ~/EOS/www/PileUpID_LO.pdf +# cp DumpPlots.pdf ~/EOS/www/PileUpID_LO_v3.pdf echo "" echo "Removing other files" diff --git a/Skimmer/RunLocal.sh b/Skimmer/RunLocal.sh index b0e7f75..8561246 100755 --- a/Skimmer/RunLocal.sh +++ b/Skimmer/RunLocal.sh @@ -1,17 +1,25 @@ -MAX_EVENTS=50000 -# +MAX_EVENTS=-1 # # python RunSkimmerLocal.py \ --era="2016" \ ---isMC=1 \ --maxEvents=${MAX_EVENTS} \ ---outDir="./MC16_DYJetsToLL_LO" -# +--outDir="./MC16_DYJetsToLL_NLO" \ +--isMC=1 \ +--dataStream="MC" # # python RunSkimmerLocal.py \ --era="2016" \ +--maxEvents=${MAX_EVENTS} \ +--outDir="./Data16_DoubleMuon" \ --isMC=0 \ +--dataStream="DoubleMuon" +# +# +python RunSkimmerLocal.py \ +--era="2016" \ --maxEvents=${MAX_EVENTS} \ ---outDir="./Data16H_DoubleMuon" +--outDir="./Data16_DoubleEG" \ +--isMC=0 \ +--dataStream="DoubleEG" diff --git a/Skimmer/RunSkimmerCrab.py b/Skimmer/RunSkimmerCrab.py index abf6819..0f19739 100644 --- a/Skimmer/RunSkimmerCrab.py +++ b/Skimmer/RunSkimmerCrab.py @@ -5,84 +5,78 @@ ROOT.PyConfig.IgnoreCommandLineOptions = True from PhysicsTools.NanoAODTools.postprocessing.framework.postprocessor import * - from PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer import puWeight_2016 from PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer import puWeight_2017 from PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer import puWeight_2018 from PhysicsTools.NanoAODTools.postprocessing.modules.jme.jetmetHelperRun2 import * -from PUjetID.Skimmer.SkimmerDiMuon import SkimmerDiMuon_2016_mc -from PUjetID.Skimmer.SkimmerDiMuon import SkimmerDiMuon_2016_data -from PUjetID.Skimmer.SkimmerDiMuon import SkimmerDiMuon_2017_mc -from PUjetID.Skimmer.SkimmerDiMuon import SkimmerDiMuon_2017_data -from PUjetID.Skimmer.SkimmerDiMuon import SkimmerDiMuon_2018_mc -from PUjetID.Skimmer.SkimmerDiMuon import SkimmerDiMuon_2018_data +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2016_mc +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2017_mc +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2018_mc +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2016_data_dielectron +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2017_data_dielectron +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2018_data_dielectron +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2016_data_dimuon +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2017_data_dimuon +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2018_data_dimuon print "RunSkimmerCrab.py START" parser = argparse.ArgumentParser("") -parser.add_argument('-jobNum', '--jobNum', type=int, default=1 ) #NOTE: This will be given by condor on the grid. not by us -parser.add_argument('-isMC', '--isMC', type=int, default=1 ) -parser.add_argument('-era', '--era', type=str, default="") +parser.add_argument('-jobNum','--jobNum', type=int, default=1 ) #NOTE: This will be given by condor on the grid. not by us +parser.add_argument('--era', type=str, default="") +parser.add_argument('--isMC', type=int ,default=0) +parser.add_argument('--dataStream', type=str ,default="") -args = parser.parse_args() -isMC = args.isMC -era = args.era +args = parser.parse_args() +era = args.era +isMC = args.isMC +dataStream = args.dataStream print "args = ", args -print "isMC = ", isMC print "era = ", era +print "isMC = ", isMC +print "dataStream = ", dataStream -varTxtFileIn="branches_in.txt" -varTxtFileOut="branches_out.txt" +isDoubleElecData=False +isDoubleMuonData=False -selection= "nMuon>=1 && Muon_pt[0]>17. && nJet>=1" +if "DoubleEG" in dataStream: + isDoubleElecData = True +if "EGamma" in dataStream: + isDoubleElecData = True +if "DoubleMuon" in dataStream: + isDoubleMuonData = True -modules = [] -jsonInput = None +print "isDoubleElecData = ", isDoubleElecData +print "isDoubleMuonData = ", isDoubleMuonData -CMSSW_BASE = os.getenv('CMSSW_BASE') +if isMC and (isDoubleElecData or isDoubleMuonData): + raise Exception('isMC flag cannot be set to true with isDoubleMuonData or isDoubleElecData. Please check! (isMC={},isDoubleMuonData={},isDoubleElecData={})'.format(isMC,isDoubleMuonData,isDoubleElecData)) +from RunSkimmerHelper import * # -# Modules for jet pt resolution smearing on MC and get uncertainties +# Get JSON # -applyJetPtSmearing=True -if era == "2016": - if isMC: - jetCorr_AK4_MC16 = createJMECorrector(isMC=True, dataYear="2016", runPeriod="", jesUncert="Total", redojec=False, jetType="AK4PFchs", applySmearing=applyJetPtSmearing) -elif era == "2017": - if isMC: - jetCorr_AK4_MC17 = createJMECorrector(isMC=True, dataYear="2017", runPeriod="", jesUncert="Total", redojec=False, jetType="AK4PFchs", applySmearing=applyJetPtSmearing) -elif era == "2018": - if isMC: - jetCorr_AK4_MC18 = createJMECorrector(isMC=True, dataYear="2018", runPeriod="", jesUncert="Total", redojec=False, jetType="AK4PFchs", applySmearing=applyJetPtSmearing) - - +CMSSW_BASE = os.getenv('CMSSW_BASE') +jsonInput = None +if not isMC: + jsonInput = CMSSW_BASE+GetJSON(era) # -# Configure additional selections and modules for each year +# Get selection string # -if era == "2016": - selection += " && (HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ>0)" - if isMC: - modules=[puWeight_2016(), jetCorr_AK4_MC16(), SkimmerDiMuon_2016_mc()] - else: - modules=[SkimmerDiMuon_2016_data()] - jsonInput=CMSSW_BASE+"/src/PUjetID/Skimmer/data/lumi/Cert_271036-284044_13TeV_ReReco_07Aug2017_Collisions16_JSON.txt" -elif era == "2017": - selection += " && (HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8>0)" - if isMC: - modules=[puWeight_2017(), jetCorr_AK4_MC17(), SkimmerDiMuon_2017_mc()] - else: - modules=[SkimmerDiMuon_2017_data()] - jsonInput=CMSSW_BASE+"/src/PUjetID/Skimmer/data/lumi/Cert_294927-306462_13TeV_EOY2017ReReco_Collisions17_JSON.txt" -elif era == "2018": - selection += " && (HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8>0)" - if isMC: - modules=[puWeight_2018(), jetCorr_AK4_MC18(), SkimmerDiMuon_2018_mc()] - else: - modules=[SkimmerDiMuon_2018_data()] - jsonInput=CMSSW_BASE+"/src/PUjetID/Skimmer/data/lumi/Cert_314472-325175_13TeV_17SeptEarlyReReco2018ABC_PromptEraD_Collisions18_JSON.txt" +selection = GetSelection(era) +# +# Get list of modules modules +# +modules = GetModules(era,isMC,dataStream) + +print "\n" +print "Just printout what we will give to the PostProcessor" +print "JSON : ", jsonInput +print "SELECTION : ", selection +print "MODULES : ", modules # # This takes care of converting the input files from CRAB @@ -93,8 +87,8 @@ ".", inputFiles(), cut=selection, - branchsel=varTxtFileIn, - outputbranchsel=varTxtFileOut, + branchsel="branches_in.txt", + outputbranchsel="branches_out.txt", modules=modules, provenance=True, fwkJobReport=True, diff --git a/Skimmer/RunSkimmerHelper.py b/Skimmer/RunSkimmerHelper.py new file mode 100644 index 0000000..0565b78 --- /dev/null +++ b/Skimmer/RunSkimmerHelper.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python + +def GetSelection(era): + # + # Define object preselection. Need to do "Sum$" rather than take the first element because + # the first element is not necessarily the leading in pt. + # + objectSel = "((nMuon>=2 && Sum$(Muon_pt>20.)>=1) || (nElectron>=2 && Sum$(Electron_pt>20.)>=1)) && (nJet>=1)" + # + # Define trigger selection. Need to do "Alt$(trigBranchName,0)" because some trigger paths are not available throughout a given year. + # If it doesn't exist in a period or a run, the branch will not exist in nanoAOD. + # + trigSel2016 = "(Alt$(HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ,0) ||Alt$(HLT_Mu17_TrkIsoVVL_TkMu8_TrkIsoVVL,0) || Alt$(HLT_TkMu17_TrkIsoVVL_TkMu8_TrkIsoVVL,0) || Alt$(HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ,0))" + trigSel2017 = "(Alt$(HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8,0) || Alt$(HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL,0))" + trigSel2018 = "(Alt$(HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8,0) || Alt$(HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL,0))" + + selection = "" + if era == "2016": + selection = " && ".join((objectSel,trigSel2016)) + elif era == "2017": + selection = " && ".join((objectSel,trigSel2017)) + elif era == "2018": + selection = " && ".join((objectSel,trigSel2018)) + + return selection + +def GetJSON(era): + jsonInput="" + + if era == "2016": + jsonInput="/src/PUjetID/Skimmer/data/lumi/Cert_271036-284044_13TeV_ReReco_07Aug2017_Collisions16_JSON.txt" + elif era == "2017": + jsonInput="/src/PUjetID/Skimmer/data/lumi/Cert_294927-306462_13TeV_EOY2017ReReco_Collisions17_JSON.txt" + elif era == "2018": + jsonInput="/src/PUjetID/Skimmer/data/lumi/Cert_314472-325175_13TeV_17SeptEarlyReReco2018ABC_PromptEraD_Collisions18_JSON.txt" + + return jsonInput + +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2016_mc +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2017_mc +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2018_mc +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2016_data_dielectron +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2017_data_dielectron +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2018_data_dielectron +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2016_data_dimuon +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2017_data_dimuon +from PUjetID.Skimmer.SkimmerDiLepton import SkimmerDiLepton_2018_data_dimuon +from PhysicsTools.NanoAODTools.postprocessing.modules.jme.jetmetHelperRun2 import * +from PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer import puWeight_2016 +from PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer import puWeight_2017 +from PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer import puWeight_2018 + +def GetModules(era, isMC, dataStream): + modules = [] + # + # Modules for jet pt resolution smearing on MC and also to retrieve JEC and JER uncertainties + # + applyJetPtSmearing=True + if era == "2016": + if isMC: + jetCorr_AK4_MC16 = createJMECorrector(isMC=True, dataYear="2016", runPeriod="", jesUncert="Total", redojec=False, jetType="AK4PFchs", applySmearing=applyJetPtSmearing) + elif era == "2017": + if isMC: + jetCorr_AK4_MC17 = createJMECorrector(isMC=True, dataYear="2017", runPeriod="", jesUncert="Total", redojec=False, jetType="AK4PFchs", applySmearing=applyJetPtSmearing) + elif era == "2018": + if isMC: + jetCorr_AK4_MC18 = createJMECorrector(isMC=True, dataYear="2018", runPeriod="", jesUncert="Total", redojec=False, jetType="AK4PFchs", applySmearing=applyJetPtSmearing) + # + # Make list of modules + # + if era == "2016": + if isMC: + modules=[puWeight_2016(), jetCorr_AK4_MC16(), SkimmerDiLepton_2016_mc()] + else: + if "DoubleMuon" in dataStream: + modules=[SkimmerDiLepton_2016_data_dimuon()] + elif "DoubleEG" in dataStream: + modules=[SkimmerDiLepton_2016_data_dielectron()] + elif era == "2017": + if isMC: + modules=[puWeight_2017(), jetCorr_AK4_MC17(), SkimmerDiLepton_2017_mc()] + else: + if "DoubleMuon" in dataStream: + modules=[SkimmerDiLepton_2017_data_dimuon()] + elif "DoubleEG" in dataStream: + modules=[SkimmerDiLepton_2017_data_dielectron()] + elif era == "2018": + if isMC: + modules=[puWeight_2018(), jetCorr_AK4_MC18(), SkimmerDiLepton_2018_mc()] + else: + if "DoubleMuon" in dataStream: + modules=[SkimmerDiLepton_2018_data_dimuon()] + elif "EGamma" in dataStream: + modules=[SkimmerDiLepton_2018_data_dielectron()] + + return modules + + diff --git a/Skimmer/RunSkimmerLocal.py b/Skimmer/RunSkimmerLocal.py index 5979cb2..6a6060c 100644 --- a/Skimmer/RunSkimmerLocal.py +++ b/Skimmer/RunSkimmerLocal.py @@ -5,103 +5,89 @@ ROOT.PyConfig.IgnoreCommandLineOptions = True from PhysicsTools.NanoAODTools.postprocessing.framework.postprocessor import * -from PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer import puWeight_2016 -from PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer import puWeight_2017 -from PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer import puWeight_2018 - -from PhysicsTools.NanoAODTools.postprocessing.modules.jme.jetmetHelperRun2 import * - -from PUjetID.Skimmer.SkimmerDiMuon import SkimmerDiMuon_2016_mc -from PUjetID.Skimmer.SkimmerDiMuon import SkimmerDiMuon_2016_data -from PUjetID.Skimmer.SkimmerDiMuon import SkimmerDiMuon_2017_mc -from PUjetID.Skimmer.SkimmerDiMuon import SkimmerDiMuon_2017_data -from PUjetID.Skimmer.SkimmerDiMuon import SkimmerDiMuon_2018_mc -from PUjetID.Skimmer.SkimmerDiMuon import SkimmerDiMuon_2018_data print "RunSkimmerLocal.py START" parser = argparse.ArgumentParser("") -parser.add_argument('-isMC','--isMC', type=int, default=1 ) -parser.add_argument('-era','--era', type=str, default="") -parser.add_argument('-maxEvents','--maxEvents', type=int, default=-1) -parser.add_argument('-outDir','--outDir', type=str, default=".") - -args = parser.parse_args() -isMC = args.isMC -era = args.era +parser.add_argument('--era', type=str, default="") +parser.add_argument('--maxEvents', type=int, default=-1) +parser.add_argument('--outDir', type=str, default=".") +parser.add_argument('--isMC', type=int ,default=0) +parser.add_argument('--dataStream', type=str ,default="") + +args = parser.parse_args() +era = args.era maxEvents = args.maxEvents -outDir = args.outDir +outDir = args.outDir +isMC = args.isMC +dataStream = args.dataStream print "args = ", args -print "isMC = ", isMC print "era = ", era -print "maxEvents = ", maxEvents -print "outDir = ", outDir +print "isMC = ", isMC +print "dataStream = ", dataStream + +isDoubleElecData=False +isDoubleMuonData=False + +if "DoubleEG" in dataStream: + isDoubleElecData = True +if "EGamma" in dataStream: + isDoubleElecData = True +if "DoubleMuon" in dataStream: + isDoubleMuonData = True + +print "isDoubleElecData = ", isDoubleElecData +print "isDoubleMuonData = ", isDoubleMuonData + +if isMC and (isDoubleElecData or isDoubleMuonData): + raise Exception('isMC flag cannot be set to true with isDoubleMuonData or isDoubleElecData. Please check! (isMC={},isDoubleMuonData={},isDoubleElecData={})'.format(isMC,isDoubleMuonData,isDoubleElecData)) -CMSXROOTD="root://xrootd-cms.infn.it/" files=[] if era == "2016": if isMC: files = [ - CMSXROOTD+"/store/mc/RunIISummer16NanoAODv5/DYJetsToLL_M-50_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/NANOAODSIM/PUMoriond17_Nano1June2019_102X_mcRun2_asymptotic_v7_ext1-v1/60000/6EE8EBFD-59F5-7742-ABAF-F4411F449075.root" + "/store/mc/RunIISummer16NanoAODv6/DYJetsToLL_M-50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8/NANOAODSIM/PUMoriond17_Nano25Oct2019_102X_mcRun2_asymptotic_v7_ext2-v1/100000/9706CDAC-CBF7-DA42-B1F1-E199B81A704A.root" ] else: - files = [ - CMSXROOTD+"/store/data/Run2016H/DoubleMuon/NANOAOD/Nano1June2019-v1/40000/7C7656AE-946A-C14F-9C66-53DB7F129C11.root" - ] + if isDoubleMuonData: + files = [ + "/store/data/Run2016H/DoubleMuon/NANOAOD/Nano25Oct2019-v1/40000/8753C889-831B-2A48-AE53-E3EA7910458A.root", + ] + elif isDoubleElecData: + files = [ + "/store/data/Run2016H/DoubleEG/NANOAOD/Nano25Oct2019-v1/260000/82D01E91-EC37-C64D-813B-2439F19BDA5B.root", + ] + +CMSXROOTD="root://xrootd-cms.infn.it/" +files = [CMSXROOTD+file for file in files] varTxtFileIn="./script/branches_in.txt" varTxtFileOut="./script/branches_out.txt" -selection= "nMuon>=1 && Muon_pt[0]>17. && nJet >=1" - -modules = [] -jsonInput = None - -CMSSW_BASE = os.getenv('CMSSW_BASE') - +from RunSkimmerHelper import * # -# Modules for jet pt resolution smearing on MC and get uncertainties -# -applyJetPtSmearing=True -if era == "2016": - if isMC: - jetCorr_AK4_MC16 = createJMECorrector(isMC=True, dataYear="2016", runPeriod="", jesUncert="Total", redojec=False, jetType="AK4PFchs", applySmearing=applyJetPtSmearing) -elif era == "2017": - if isMC: - jetCorr_AK4_MC17 = createJMECorrector(isMC=True, dataYear="2017", runPeriod="", jesUncert="Total", redojec=False, jetType="AK4PFchs", applySmearing=applyJetPtSmearing) -elif era == "2018": - if isMC: - jetCorr_AK4_MC18 = createJMECorrector(isMC=True, dataYear="2018", runPeriod="", jesUncert="Total", redojec=False, jetType="AK4PFchs", applySmearing=applyJetPtSmearing) - +# Get JSON # -# Configure additional selections and modules for each year +CMSSW_BASE = os.getenv('CMSSW_BASE') +jsonInput = None +if not isMC: + jsonInput = CMSSW_BASE+GetJSON(era) # -if era == "2016": - selection += " && HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ" - if isMC: - modules=[puWeight_2016(), jetCorr_AK4_MC16(), SkimmerDiMuon_2016_mc()] - else: - modules=[SkimmerDiMuon_2016_data()] - jsonInput=CMSSW_BASE+"/src/PUjetID/Skimmer/data/lumi/Cert_271036-284044_13TeV_ReReco_07Aug2017_Collisions16_JSON.txt" -elif era == "2017": - selection += " && HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8" - if isMC: - modules=[puWeight_2017(), jetCorr_AK4_MC17(), SkimmerDiMuon_2017_mc()] - else: - modules=[SkimmerDiMuon_2017_data()] - jsonInput=CMSSW_BASE+"/src/PUjetID/Skimmer/data/lumi/Cert_294927-306462_13TeV_EOY2017ReReco_Collisions17_JSON.txt" -elif era == "2018": - selection += " && HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8" - if isMC: - modules=[puWeight_2018(), jetCorr_AK4_MC18(), SkimmerDiMuon_2018_mc()] - else: - modules=[SkimmerDiMuon_2018_data()] - jsonInput=CMSSW_BASE+"/src/PUjetID/Skimmer/data/lumi/Cert_314472-325175_13TeV_17SeptEarlyReReco2018ABC_PromptEraD_Collisions18_JSON.txt" - +# Get selection string # +selection = GetSelection(era) # +# Get list of modules modules # +modules = GetModules(era,isMC,dataStream) + +print "\n" +print "Just printout what we will give to the PostProcessor" +print "JSON : ", jsonInput +print "SELECTION : ", selection +print "MODULES : ", modules + maxEntries=None if maxEvents > 0: maxEntries=maxEvents diff --git a/Skimmer/crab/SOURCEMEFIRST.sh b/Skimmer/crab/SOURCEMEFIRST.sh new file mode 100755 index 0000000..3f6a287 --- /dev/null +++ b/Skimmer/crab/SOURCEMEFIRST.sh @@ -0,0 +1,2 @@ +source /cvmfs/cms.cern.ch/common/crab-setup.sh + diff --git a/Skimmer/crab/SendToCrab.sh b/Skimmer/crab/SendToCrab.sh index df9cfe1..015161c 100755 --- a/Skimmer/crab/SendToCrab.sh +++ b/Skimmer/crab/SendToCrab.sh @@ -1,6 +1,5 @@ - -# python crab_2016_data.py ../samples/NanoAODv6/NanoAODv6_2016_Data.txt -# python crab_2016_mc.py ../samples/NanoAODv6/NanoAODv6_2016_MC.txt +python crab_2016_data.py ../samples/NanoAODv6/NanoAODv6_2016_Data.txt +python crab_2016_mc.py ../samples/NanoAODv6/NanoAODv6_2016_MC.txt python crab_2017_data.py ../samples/NanoAODv6/NanoAODv6_2017_Data.txt python crab_2017_mc.py ../samples/NanoAODv6/NanoAODv6_2017_MC.txt diff --git a/Skimmer/crab/crab_2016_data.py b/Skimmer/crab/crab_2016_data.py index b6fef9d..0242c56 100644 --- a/Skimmer/crab/crab_2016_data.py +++ b/Skimmer/crab/crab_2016_data.py @@ -3,10 +3,10 @@ import helpers crab_common.config.JobType.maxJobRuntimeMin = 480 -crab_common.config.JobType.scriptArgs = [ -'isMC=0', -'era=2016', -] + +def GetDataStream(name): + if "DoubleEG" in name: return "DoubleEG" + if "DoubleMuon" in name: return "DoubleMuon" if __name__ == '__main__': # @@ -26,6 +26,15 @@ print "%d/%d:Sending CRAB job: %s" % (i+1,len(samplelist), dataset) crab_common.config.Data.inputDataset = dataset # + # + # + dataStreamName=GetDataStream(dataset) + crab_common.config.JobType.scriptArgs = [ + 'era=2016', + 'isMC=0', + 'dataStream='+dataStreamName, + ] + # # Have to make unique requestName. # primaryName = dataset.split('/')[1] diff --git a/Skimmer/crab/crab_2016_mc.py b/Skimmer/crab/crab_2016_mc.py index 1b5f3fa..6e50d02 100644 --- a/Skimmer/crab/crab_2016_mc.py +++ b/Skimmer/crab/crab_2016_mc.py @@ -3,9 +3,11 @@ import helpers crab_common.config.JobType.maxJobRuntimeMin = 720 + crab_common.config.JobType.scriptArgs = [ -'isMC=1', -'era=2016', + 'era=2016', + 'isMC=1', + 'dataStream=MC', ] if __name__ == '__main__': @@ -50,4 +52,4 @@ print "requestName: ", requestName print "outputDatasetTag: ", outputDatasetTag crabCommand('submit', config = crab_common.config) - print "" + print "" \ No newline at end of file diff --git a/Skimmer/crab/crab_2017_data.py b/Skimmer/crab/crab_2017_data.py index acf48b3..c38418b 100644 --- a/Skimmer/crab/crab_2017_data.py +++ b/Skimmer/crab/crab_2017_data.py @@ -3,10 +3,10 @@ import helpers crab_common.config.JobType.maxJobRuntimeMin = 480 -crab_common.config.JobType.scriptArgs = [ -'isMC=0', -'era=2017', -] + +def GetDataStream(name): + if "DoubleEG" in name: return "DoubleEG" + if "DoubleMuon" in name: return "DoubleMuon" if __name__ == '__main__': # @@ -26,6 +26,15 @@ print "%d/%d:Sending CRAB job: %s" % (i+1,len(samplelist), dataset) crab_common.config.Data.inputDataset = dataset # + # + # + dataStreamName=GetDataStream(dataset) + crab_common.config.JobType.scriptArgs = [ + 'era=2017', + 'isMC=0', + 'dataStream='+dataStreamName, + ] + # # Have to make unique requestName. # primaryName = dataset.split('/')[1] diff --git a/Skimmer/crab/crab_2017_mc.py b/Skimmer/crab/crab_2017_mc.py index 95777bf..b0047b1 100644 --- a/Skimmer/crab/crab_2017_mc.py +++ b/Skimmer/crab/crab_2017_mc.py @@ -3,9 +3,11 @@ import helpers crab_common.config.JobType.maxJobRuntimeMin = 720 + crab_common.config.JobType.scriptArgs = [ -'isMC=1', -'era=2017', + 'era=2017', + 'isMC=1', + 'dataStream=MC', ] if __name__ == '__main__': diff --git a/Skimmer/crab/crab_2018_data.py b/Skimmer/crab/crab_2018_data.py index 0b3d17f..f2005f7 100644 --- a/Skimmer/crab/crab_2018_data.py +++ b/Skimmer/crab/crab_2018_data.py @@ -3,10 +3,10 @@ import helpers crab_common.config.JobType.maxJobRuntimeMin = 480 -crab_common.config.JobType.scriptArgs = [ -'isMC=0', -'era=2018', -] + +def GetDataStream(name): + if "EGamma" in name: return "EGamma" + if "DoubleMuon" in name: return "DoubleMuon" if __name__ == '__main__': # @@ -26,6 +26,15 @@ print "%d/%d:Sending CRAB job: %s" % (i+1,len(samplelist), dataset) crab_common.config.Data.inputDataset = dataset # + # + # + dataStreamName=GetDataStream(dataset) + crab_common.config.JobType.scriptArgs = [ + 'era=2018', + 'isMC=0', + 'dataStream='+dataStreamName, + ] + # # Have to make unique requestName. # primaryName = dataset.split('/')[1] diff --git a/Skimmer/crab/crab_2018_mc.py b/Skimmer/crab/crab_2018_mc.py index c72da6e..64d32d0 100644 --- a/Skimmer/crab/crab_2018_mc.py +++ b/Skimmer/crab/crab_2018_mc.py @@ -3,9 +3,11 @@ import helpers crab_common.config.JobType.maxJobRuntimeMin = 720 + crab_common.config.JobType.scriptArgs = [ -'isMC=1', -'era=2018', + 'era=2018', + 'isMC=1', + 'dataStream=MC', ] if __name__ == '__main__': diff --git a/Skimmer/crab/crab_common.py b/Skimmer/crab/crab_common.py index 86fdab8..0aa436f 100644 --- a/Skimmer/crab/crab_common.py +++ b/Skimmer/crab/crab_common.py @@ -3,7 +3,7 @@ # # Set version number (CHECK) # -version="DiMuonSkim_v2" +version="DiMuonSkim_v3" # # Set request name prefx # @@ -24,6 +24,7 @@ '../script/branches_in.txt', '../script/branches_out.txt', '../RunSkimmerCrab.py', +'../RunSkimmerHelper.py', '../../../PhysicsTools/NanoAODTools/scripts/haddnano.py' ] # @@ -57,4 +58,4 @@ 'T2_DE_*', 'T2_FR_*', ] -config.Site.whitelist = whitelist_sites +config.Site.whitelist = whitelist_sites \ No newline at end of file diff --git a/Skimmer/crab/crab_script.sh b/Skimmer/crab/crab_script.sh index b768dfa..7acce87 100644 --- a/Skimmer/crab/crab_script.sh +++ b/Skimmer/crab/crab_script.sh @@ -25,5 +25,5 @@ mv module $CMSSW_BASE/module mv python $CMSSW_BASE/python echo Found Proxy in: $X509_USER_PROXY -python RunSkimmerCrab.py --jobNum=$1 --$2 --$3 +python RunSkimmerCrab.py --jobNum=$1 --$2 --$3 --$4 fi diff --git a/Skimmer/python/SkimmerDiLepton.py b/Skimmer/python/SkimmerDiLepton.py new file mode 100644 index 0000000..7dfba8f --- /dev/null +++ b/Skimmer/python/SkimmerDiLepton.py @@ -0,0 +1,578 @@ +import ROOT +ROOT.PyConfig.IgnoreCommandLineOptions = True + +from PhysicsTools.NanoAODTools.postprocessing.framework.datamodel import Collection,Object +from PhysicsTools.NanoAODTools.postprocessing.framework.eventloop import Module +from PhysicsTools.NanoAODTools.postprocessing.tools import * + +import math +import array + +class SkimmerDiLepton(Module): + def __init__(self, isMC, era, isDoubleElecData=False, isDoubleMuonData=False): + self.era = era + self.isMC = isMC + self.maxNSelJetsSaved=1 + self.isDoubleElecData=False + self.isDoubleMuonData=False + if not(self.isMC): + self.isDoubleElecData=isDoubleElecData + self.isDoubleMuonData=isDoubleMuonData + # + # List jet systematics + # + ak4Systematics=[ + "jesTotalUp", + "jesTotalDown", + "jerUp" + ] + self.jetSystsList = [""] # Nominal + if self.isMC: + self.jetSystsList.extend(ak4Systematics) + + def beginJob(self,histFile=None,histDirName=None): + Module.beginJob(self) + + def endJob(self): + Module.endJob(self) + print "SkimmerDiLepton module ended successfully" + pass + + def endFile(self, inputFile, outputFile, inputTree, wrappedOutputTree): + print "File closed successfully" + pass + + def beginFile(self, inputFile, outputFile, inputTree, wrappedOutputTree): + self.out = wrappedOutputTree + self.out.branch("dilep_pt", "F") + self.out.branch("dilep_eta", "F") + self.out.branch("dilep_phi", "F") + self.out.branch("dilep_mass", "F") + self.out.branch("lep0_pt", "F") + self.out.branch("lep0_eta", "F") + self.out.branch("lep0_phi", "F") + self.out.branch("lep0_mass", "F") + self.out.branch("lep0_charge", "I") + self.out.branch("lep0_pdgId", "I") + self.out.branch("lep1_pt", "F") + self.out.branch("lep1_eta", "F") + self.out.branch("lep1_phi", "F") + self.out.branch("lep1_mass", "F") + self.out.branch("lep1_charge", "I") + self.out.branch("lep1_pdgId", "I") + # + # Jet branches + # + for jetSyst in self.jetSystsList: + jetSystPreFix = self.getJetSystBranchPrefix(jetSyst) + self.out.branch(jetSystPreFix+"nJetSel", "I") + self.out.branch(jetSystPreFix+"nJetSelPt30Eta5p0", "I") + self.out.branch(jetSystPreFix+"nJetSelPt20Eta2p4", "I") + for i in xrange(0,self.maxNSelJetsSaved): + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_pt", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_pt_nom", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_pt_nano", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_eta", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_phi", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_mass", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_mass_nom", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_mass_nano", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_jetId", "I") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_puId", "I") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_qgl", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_nConst", "I") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_chEmEF", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_chHEF", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_neEmEF", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_neHEF", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_muEF", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_dilep_dphi", "F") + if(self.isMC): + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_partflav", "I") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_hadflav", "I") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_gen_match", "B") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_gen_pt", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_gen_eta", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_gen_phi", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_gen_mass", "F") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_gen_partflav", "I") + self.out.branch(jetSystPreFix+"jetSel"+str(i)+"_gen_hadflav", "I") + + def getJetSystBranchPrefix(self, jetSyst): + jetSystPreFix = "" if jetSyst == "" else jetSyst+"_" + return jetSystPreFix + + def getJetSystBranchPostfix(self, jetSyst): + jetSystPreFix = "" if jetSyst == "" else "_"+jetSyst + return jetSystPreFix + + def getJetPtAndMassForSyst(self, jetSyst): + + if self.isMC: + jetPt = "pt_nom" if jetSyst == "" else "pt_"+jetSyst + jetMass = "mass_nom" if jetSyst == "" else "mass_"+jetSyst + else: + jetPt = "pt" #NOTE: Not necessarily true. We're not making any corrections to jets in data. + jetMass = "mass" #It has been applied at the NanoAOD production level. + + return jetPt, jetMass + + def analyze(self, event): + """process event, return True (go to next module) or False (fail, go to next event)""" + + if self.passEventPreselection(event) is False: + return False + + # + # Check for trigger selection. Skip event if it doesn't + # even pass one of them + # + passElTrig = self.passElectronTriggerSelection(event) + passMuTrig = self.passMuonTriggerSelection(event) + + if passElTrig is False and passMuTrig is False: + return False + + if self.passZBosonSelection(event) is False: + return False + + self.fillZBosonBranches(event) + + # + # Skip event and don't store in tree if this selection doesn't pass nominal + # and any systematic variations + # + event.passJetSelNomSyst = False + + for jetSyst in self.jetSystsList: + self.resetJetBranches(event, jetSyst) + if self.passJetSelection(event, jetSyst): + event.passJetSelNomSyst |= True + self.fillJetBranches(event, jetSyst) + + if event.passJetSelNomSyst: + return True + else: + return False + + def passEventPreselection(self, event): + ####################### + # + # Pre-selection + # + ####################### + if event.PV_npvsGood < 1: + return False + + event.evtWeight = 1.0 + if self.isMC: + event.evtWeight = event.genWeight + + # Event pass selection + return True + + def passElectronTriggerSelection(self, event): + ############################## + # + # Di-electron trigger selection + # + ############################# + event.passElectronTrig=False + + if self.era == "2016": + if hasattr(event, 'HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ'): + event.passElectronTrig |= event.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ + elif self.era == "2017": + if hasattr(event, 'HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL'): + event.passElectronTrig |= event.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL + elif self.era == "2018": + if hasattr(event, 'HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL'): + event.passElectronTrig |= event.HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL + + return True if event.passElectronTrig else False + + def passMuonTriggerSelection(self, event): + ############################# + # + # Di-muon trigger selection + # + ############################ + event.passMuonTrig=False + + if self.era == "2016": + if hasattr(event, 'HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ'): + event.passMuonTrig |= event.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ + if hasattr(event, 'HLT_Mu17_TrkIsoVVL_TkMu8_TrkIsoVVL'): + event.passMuonTrig |= event.HLT_Mu17_TrkIsoVVL_TkMu8_TrkIsoVVL + if hasattr(event, 'HLT_TkMu17_TrkIsoVVL_TkMu8_TrkIsoVVL'): + event.passMuonTrig |= event.HLT_TkMu17_TrkIsoVVL_TkMu8_TrkIsoVVL + elif self.era == "2017": + if hasattr(event, 'HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8'): + event.passMuonTrig |= event.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8 + elif self.era == "2018": + if hasattr(event, 'HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8'): + event.passMuonTrig |= event.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8 + + return True if event.passMuonTrig else False + + def passZBosonSelection(self, event): + ####################### + # + # Leptons pre-selection + # + ####################### + + event.passPreselNMuon = event.nMuon >= 2 + event.passPreselNElectron = event.nElectron >= 2 + if not (event.passPreselNMuon or event.passPreselNElectron): return False + + ####################### + # + # Muon selection + # + ####################### + event.muonsAll = Collection(event, "Muon") + + # + # Veto muon selection + # + event.muonsVeto = [x for x in event.muonsAll + if x.pt > 10. and x.looseId and abs(x.eta) < 2.4 and x.pfIsoId >= 1 and x.isPFcand + ] + event.muonsVeto.sort(key=lambda x:x.pt,reverse=True) + + # + # Tight muon selection + # + event.muonsTight = [x for x in event.muonsVeto + if x.pt > 20. and x.mediumPromptId and x.pfIsoId >= 4 + ] + + event.pass0VetoMuons = len(event.muonsVeto) == 0 + event.pass2VetoMuons = len(event.muonsVeto) == 2 + event.pass2TightMuons = len(event.muonsTight) == 2 + + ####################### + # + # Electron selection + # + ####################### + event.electronsAll = Collection(event, "Electron") + + # + # Veto electron selection + # + event.electronsVeto = [x for x in event.electronsAll + if x.pt > 10. and x.cutBased>=1 and abs(x.eta) < 2.4 + ] + event.electronsVeto.sort(key=lambda x:x.pt,reverse=True) + + # + # Tight electron selection + # + event.electronsTight = [x for x in event.electronsVeto + if x.pt > 20. and x.mvaFall17V2Iso_WP90 + and abs(x.deltaEtaSC+x.eta) < 2.5 + and not(abs(x.deltaEtaSC+x.eta)>=1.4442) and (abs(x.deltaEtaSC+x.eta)<1.566) # ignore electrons in gap region + ] + + event.pass0VetoElectrons = len(event.electronsVeto) == 0 + event.pass2VetoElectrons = len(event.electronsVeto) == 2 + event.pass2TightElectrons = len(event.electronsTight) == 2 + ##################################################### + # + # Di-lepton (Z-boson) reconstruction and selection + # + #################################################### + event.passLep0TrigMatch = False + event.passLep1TrigMatch = False + event.passLep0TrigThreshold = False + event.passLep1TrigThreshold = False + + event.lep0_p4 = None + event.lep1_p4 = None + event.dilep_p4 = None + event.lep0_pdgId = None + event.lep1_pdgId = None + event.lep0_charge = None + event.lep1_charge = None + #============================================ + # + # Check if pass dimuon selection + # + #============================================ + if event.pass2TightMuons and event.pass2VetoMuons and event.pass0VetoElectrons: + # + # Trigger matching + # + event.trigObjsAll = Collection(event, "TrigObj") + for obj in event.trigObjsAll: + if not(obj.id == 13): + continue + if(event.muonsTight[0].DeltaR(obj) < 0.1): + event.passLep0TrigMatch = True + if(event.muonsTight[1].DeltaR(obj) < 0.1): + event.passLep1TrigMatch = True + # + # Offline cuts should be tighter than trigger thresholds. + # Could probably already be tighter than it is stated here + # but just check it again just to be safe. + # + if event.muonsTight[0].pt > 20: event.passLep0TrigThreshold = True + if event.muonsTight[1].pt > 10: event.passLep1TrigThreshold = True + # + # Assign lepton p4 + # + event.lep0_p4 = event.muonsTight[0].p4() + event.lep1_p4 = event.muonsTight[1].p4() + event.lep0_charge = event.muonsTight[0].charge + event.lep1_charge = event.muonsTight[1].charge + event.lep0_pdgId = event.muonsTight[0].pdgId + event.lep1_pdgId = event.muonsTight[1].pdgId + #============================================ + # + # Check if pass dielectron selection + # + #============================================ + elif event.pass2TightElectrons and event.pass2VetoElectrons and event.pass0VetoMuons: + # + # Trigger matching + # + event.trigObjsAll = Collection(event, "TrigObj") + for obj in event.trigObjsAll: + if not(obj.id == 11): + continue + if(event.electronsTight[0].DeltaR(obj) < 0.1): + event.passLep0TrigMatch = True + if(event.electronsTight[1].DeltaR(obj) < 0.1): + event.passLep1TrigMatch = True + # + # Offline cuts should be tighter than trigger thresholds. + # Could probably already be tighter than it is stated here + # but just check it again just to be safe. + # + if event.electronsTight[0].pt > 25: event.passLep0TrigThreshold = True + if event.electronsTight[1].pt > 15: event.passLep1TrigThreshold = True + # + # Assign lepton p4 + # + event.lep0_p4 = event.electronsTight[0].p4() + event.lep1_p4 = event.electronsTight[1].p4() + event.lep0_charge = event.electronsTight[0].charge + event.lep1_charge = event.electronsTight[1].charge + event.lep0_pdgId = event.electronsTight[0].pdgId + event.lep1_pdgId = event.electronsTight[1].pdgId + #============================================ + # + # Fail both channels + # + #============================================ + else: + return False + + #============================================ + # + # Apply trigger selection based on channel + # + #============================================ + event.passLepTrigSel = False + # + # Check trigger by channel + # + if abs(event.lep0_pdgId) == 13 and abs(event.lep1_pdgId) == 13: + # For MC + if self.isMC: + event.passLepTrigSel = event.passMuonTrig + # For Data + else: + event.passLepTrigSel = event.passMuonTrig if self.isDoubleMuonData else False + elif abs(event.lep0_pdgId) == 11 and abs(event.lep1_pdgId) == 11: + # For MC + if self.isMC: + event.passLepTrigSel = event.passElectronTrig + # For Data + else: + event.passLepTrigSel = event.passElectronTrig if self.isDoubleElecData else False + + if not event.passLepTrigSel: return False + + # + # Each selected offline lepton should be matched to HLT-level object + # + if not(event.passLep0TrigMatch and event.passLep1TrigMatch): return False + + # + # Offline pt cut should be higher than online pt threshold + # + if not(event.passLep0TrigThreshold and event.passLep1TrigThreshold): return False + + #===================================================================================== + # + # Reconstruct di-lepton p4 and select events wit di-lepton mass in Z-boson mass window + # + #====================================================================================== + event.dilep_p4 = event.lep0_p4 + event.lep1_p4 + return True if event.dilep_p4.M() > 70. and event.dilep_p4.M() < 110. else False + + def passJetSelection(self, event, jetSyst=""): + ####################### + # + # Jets selection + # + ####################### + event.jetsAll = Collection(event, "Jet") + # + # Get the name of the jet pt and jet mass branches + # for nominal and systematic shifts + # + jetPtName, jetMassName = self.getJetPtAndMassForSyst(jetSyst) + + event.jetsSel = [x for x in event.jetsAll + if abs(x.eta) < 5. and getattr(x, jetPtName) > 20. + and (x.jetId & (1<<1)) # 'Tight' WP for jet ID + and x.DeltaR(event.lep0_p4) > 0.4 and x.DeltaR(event.lep1_p4) > 0.4 + ] + event.jetsSel.sort(key=lambda x:getattr(x, jetPtName), reverse=True) + event.nJetSel=len(event.jetsSel) + # + # The event must at least have 1 jet anywhere for us to do the analysis + # + event.passAtLeast1Jet = event.nJetSel >= 1 + if not event.passAtLeast1Jet: return False + # + # Match genjets to the selected reco jets + # + if self.isMC: + event.genJetsAll = Collection(event, "GenJet") + event.pair = matchObjectCollection(event.jetsSel, event.genJetsAll, dRmax=0.4) + # + # Check if event passes + # 1. <= 1 jet with pt > 30. GeV, |eta| < 5.0 + # AND + # 2. <= 1 jet with pt > 20. GeV, |eta| < 2.4 + # NOTE: Apply this at analysis level. Save flag + # + event.jetsSelPt30Eta5p0 = [x for x in event.jetsSel + if abs(x.eta) < 5. and getattr(x, jetPtName) > 30. + ] + event.nJetSelPt30Eta5p0=len(event.jetsSelPt30Eta5p0) + + event.jetsSelPt20Eta2p4 = [x for x in event.jetsSel + if abs(x.eta) < 2.4 and getattr(x, jetPtName) > 20. + ] + event.nJetSelPt20Eta2p4=len(event.jetsSelPt20Eta2p4) + # + # The event pass selection + # + return True + + def fillZBosonBranches(self, event): + self.out.fillBranch("dilep_pt", event.dilep_p4.Pt()) + self.out.fillBranch("dilep_eta", event.dilep_p4.Eta()) + self.out.fillBranch("dilep_phi", event.dilep_p4.Phi()) + self.out.fillBranch("dilep_mass", event.dilep_p4.M()) + self.out.fillBranch("lep0_pt", event.lep0_p4.Pt()) + self.out.fillBranch("lep0_eta", event.lep0_p4.Eta()) + self.out.fillBranch("lep0_phi", event.lep0_p4.Phi()) + self.out.fillBranch("lep0_mass", event.lep0_p4.M()) + self.out.fillBranch("lep0_charge", event.lep0_charge) + self.out.fillBranch("lep0_pdgId", event.lep0_pdgId) + self.out.fillBranch("lep1_pt", event.lep1_p4.Pt()) + self.out.fillBranch("lep1_eta", event.lep1_p4.Eta()) + self.out.fillBranch("lep1_phi", event.lep1_p4.Phi()) + self.out.fillBranch("lep1_mass", event.lep1_p4.M()) + self.out.fillBranch("lep1_charge", event.lep1_charge) + self.out.fillBranch("lep1_pdgId", event.lep1_pdgId) + + def resetJetBranches(self, event, jetSyst): + # reset jet branches + jetSystPreFix = self.getJetSystBranchPrefix(jetSyst) + + self.out.fillBranch(jetSystPreFix+"nJetSel", -1) + self.out.fillBranch(jetSystPreFix+"nJetSelPt30Eta5p0", -1) + self.out.fillBranch(jetSystPreFix+"nJetSelPt20Eta2p4", -1) + for i in xrange(0, self.maxNSelJetsSaved): + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_pt", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_pt_nom", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_pt_nano", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_eta", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_phi", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_mass", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_mass_nom",-9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_mass_nano",-9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_jetId", -9) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_puId", -9) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_qgl", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_nConst", -9) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_chEmEF", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_chHEF", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_neEmEF", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_neHEF", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_muEF", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_dilep_dphi",-9.) + if self.isMC: + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_partflav",-9) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_hadflav", -9) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_gen_match", False) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_gen_pt", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_gen_eta", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_gen_phi", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_gen_mass", -9.) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_gen_partflav", -9) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_gen_hadflav", -9) + + def fillJetBranches(self, event, jetSyst): + # fill jet branches + jetSystPreFix = self.getJetSystBranchPrefix(jetSyst) + + # Get the name of the jet pt and jet mass branches + # for nominal and systematic shifts + jetPtName, jetMassName = self.getJetPtAndMassForSyst(jetSyst) + + self.out.fillBranch(jetSystPreFix+"nJetSel", event.nJetSel) + self.out.fillBranch(jetSystPreFix+"nJetSelPt30Eta5p0", event.nJetSelPt30Eta5p0) + self.out.fillBranch(jetSystPreFix+"nJetSelPt20Eta2p4", event.nJetSelPt20Eta2p4) + for i, jet in enumerate(event.jetsSel): + if i >= self.maxNSelJetsSaved: break + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_pt", getattr(jet, jetPtName)) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_pt_nom", getattr(jet, "pt_nom") if self.isMC else jet.pt) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_pt_nano", jet.pt) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_eta", jet.eta) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_phi", jet.phi) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_mass", getattr(jet, jetMassName)) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_mass_nom",getattr(jet, "mass_nom") if self.isMC else jet.mass) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_mass_nano",jet.mass) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_jetId", jet.jetId) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_puId", jet.puId) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_qgl", jet.qgl) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_nConst", jet.nConstituents) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_chEmEF", jet.chEmEF) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_chHEF", jet.chHEF) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_neEmEF", jet.neEmEF) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_neHEF", jet.neHEF) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_muEF", jet.muEF) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_dilep_dphi",event.dilep_p4.DeltaPhi(jet.p4())) + if self.isMC: + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_partflav",jet.partonFlavour) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_hadflav", jet.hadronFlavour) + genJet = event.pair[jet] + if not (genJet==None): + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_gen_match", True) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_gen_pt", genJet.pt) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_gen_eta", genJet.eta) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_gen_phi", genJet.phi) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_gen_mass", genJet.mass) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_gen_partflav", genJet.partonFlavour) + self.out.fillBranch(jetSystPreFix+"jetSel"+str(i)+"_gen_hadflav", genJet.hadronFlavour) + +SkimmerDiLepton_2016_data_dielectron = lambda : SkimmerDiLepton(isMC=False, era="2016", isDoubleElecData=True) +SkimmerDiLepton_2017_data_dielectron = lambda : SkimmerDiLepton(isMC=False, era="2017", isDoubleElecData=True) +SkimmerDiLepton_2018_data_dielectron = lambda : SkimmerDiLepton(isMC=False, era="2018", isDoubleElecData=True) + +SkimmerDiLepton_2016_data_dimuon = lambda : SkimmerDiLepton(isMC=False, era="2016", isDoubleMuonData=True) +SkimmerDiLepton_2017_data_dimuon = lambda : SkimmerDiLepton(isMC=False, era="2017", isDoubleMuonData=True) +SkimmerDiLepton_2018_data_dimuon = lambda : SkimmerDiLepton(isMC=False, era="2018", isDoubleMuonData=True) + +SkimmerDiLepton_2016_mc = lambda : SkimmerDiLepton(isMC=True, era="2016") +SkimmerDiLepton_2017_mc = lambda : SkimmerDiLepton(isMC=True, era="2017") +SkimmerDiLepton_2018_mc = lambda : SkimmerDiLepton(isMC=True, era="2018") diff --git a/Skimmer/python/SkimmerDiMuon.py b/Skimmer/python/SkimmerDiMuon.py index dcbd6af..97ff0a9 100644 --- a/Skimmer/python/SkimmerDiMuon.py +++ b/Skimmer/python/SkimmerDiMuon.py @@ -130,7 +130,8 @@ def analyze(self, event): for jetSyst in self.jetSystsList: self.resetJetBranches(event, jetSyst) - event.passJetSelNomSyst |= self.passJetSelection(event, jetSyst) + if self.passJetSelection(event, jetSyst): + event.passJetSelNomSyst |= True self.fillJetBranches(event, jetSyst) if event.passJetSelNomSyst: @@ -165,7 +166,9 @@ def passTriggerSelection(self, event): event.passPreselTrig=False if self.era == "2016": - event.passPreselTrig = event.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ + event.passPreselTrig |= event.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ + event.passPreselTrig |= event.HLT_Mu17_TrkIsoVVL_TkMu8_TrkIsoVVL + event.passPreselTrig |= event.HLT_TkMu17_TrkIsoVVL_TkMu8_TrkIsoVVL elif self.era == "2017": event.passPreselTrig = event.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8 elif self.era == "2018": @@ -270,17 +273,17 @@ def passJetSelection(self, event, jetSyst=""): event.jetsSel.sort(key=lambda x:getattr(x, jetPtName), reverse=True) event.nJetSel=len(event.jetsSel) # - # Check if event has at least one selected jets - # - event.passAtLeast1Jet = event.nJetSel >= 1 - if not event.passAtLeast1Jet: return False - # # Match genjets to the selected reco jets # if self.isMC: event.genJetsAll = Collection(event, "GenJet") event.pair = matchObjectCollection(event.jetsSel, event.genJetsAll, dRmax=0.4) # + # Check if event has at least one selected jets + # + event.passAtLeast1Jet = event.nJetSel >= 1 + if not event.passAtLeast1Jet: return False + # # The event pass selection # return True diff --git a/Skimmer/samples/NanoAODv6/NanoAODv6_2016_Data.txt b/Skimmer/samples/NanoAODv6/NanoAODv6_2016_Data.txt index a934cf7..159ae3f 100644 --- a/Skimmer/samples/NanoAODv6/NanoAODv6_2016_Data.txt +++ b/Skimmer/samples/NanoAODv6/NanoAODv6_2016_Data.txt @@ -1,7 +1,9 @@ ## ## DATASET=/DoubleMuon/Run2016*Nano25Oct2019*/NANOAOD ## dasgoclient -query="dataset=$DATASET" > NanoAODv6_2016_Data.txt -## +## DATASET=/DoubleEG/Run2016*Nano25Oct2019*/NANOAOD +## dasgoclient -query="dataset=$DATASET" > NanoAODv6_2016_Data.txt +## /DoubleMuon/Run2016B_ver1-Nano25Oct2019_ver1-v1/NANOAOD /DoubleMuon/Run2016B_ver2-Nano25Oct2019_ver2-v1/NANOAOD /DoubleMuon/Run2016C-Nano25Oct2019-v1/NANOAOD @@ -10,3 +12,11 @@ /DoubleMuon/Run2016F-Nano25Oct2019-v1/NANOAOD /DoubleMuon/Run2016G-Nano25Oct2019-v1/NANOAOD /DoubleMuon/Run2016H-Nano25Oct2019-v1/NANOAOD +/DoubleEG/Run2016B_ver1-Nano25Oct2019_ver1-v1/NANOAOD +/DoubleEG/Run2016B_ver2-Nano25Oct2019_ver2-v1/NANOAOD +/DoubleEG/Run2016C-Nano25Oct2019-v1/NANOAOD +/DoubleEG/Run2016D-Nano25Oct2019-v1/NANOAOD +/DoubleEG/Run2016E-Nano25Oct2019-v1/NANOAOD +/DoubleEG/Run2016F-Nano25Oct2019-v1/NANOAOD +/DoubleEG/Run2016G-Nano25Oct2019-v1/NANOAOD +/DoubleEG/Run2016H-Nano25Oct2019-v1/NANOAOD \ No newline at end of file diff --git a/Skimmer/samples/NanoAODv6/NanoAODv6_2016_MC.txt b/Skimmer/samples/NanoAODv6/NanoAODv6_2016_MC.txt index e611725..3f2bb5d 100644 --- a/Skimmer/samples/NanoAODv6/NanoAODv6_2016_MC.txt +++ b/Skimmer/samples/NanoAODv6/NanoAODv6_2016_MC.txt @@ -3,9 +3,13 @@ ## dasgoclient -query="dataset=$DATASET" >> NanoAODv6_2016_MC.txt ## DATASET=/DYJetsToLL_M-50_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISummer16NanoAODv6-*/NANOAODSIM ## dasgoclient -query="dataset=$DATASET" >> NanoAODv6_2016_MC.txt +## DATASET=/DYJetsToLL_M-50_*_13TeV-madgraphMLM-herwig*/RunIISummer16NanoAODv6-*/NANOAODSIM +## dasgoclient -query="dataset=$DATASET" >> NanoAODv6_2016_MC.txt +## +## ## /DYJetsToLL_M-50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8/RunIISummer16NanoAODv6-PUMoriond17_Nano25Oct2019_102X_mcRun2_asymptotic_v7_ext2-v1/NANOAODSIM /DYJetsToLL_M-50_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISummer16NanoAODv6-PUMoriond17_Nano25Oct2019_102X_mcRun2_asymptotic_v7_ext1-v1/NANOAODSIM /DYJetsToLL_M-50_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISummer16NanoAODv6-PUMoriond17_Nano25Oct2019_102X_mcRun2_asymptotic_v7_ext2-v1/NANOAODSIM - - \ No newline at end of file +/DYJetsToLL_M-50_TuneCUETP8M1_13TeV-madgraphMLM-herwigpp_30M/RunIISummer16NanoAODv6-PUMoriond17_Nano25Oct2019_102X_mcRun2_asymptotic_v7-v1/NANOAODSIM +/DYJetsToLL_M-50_TuneCUETHS1_13TeV-madgraphMLM-herwigpp/RunIISummer16NanoAODv6-PUMoriond17_Nano25Oct2019_102X_mcRun2_asymptotic_v7-v1/NANOAODSIM \ No newline at end of file diff --git a/Skimmer/samples/NanoAODv6/NanoAODv6_2017_Data.txt b/Skimmer/samples/NanoAODv6/NanoAODv6_2017_Data.txt index c5d7efc..cdd7edb 100644 --- a/Skimmer/samples/NanoAODv6/NanoAODv6_2017_Data.txt +++ b/Skimmer/samples/NanoAODv6/NanoAODv6_2017_Data.txt @@ -1,9 +1,16 @@ ## ## DATASET=/DoubleMuon/Run2017*Nano25Oct2019*/NANOAOD ## dasgoclient -query="dataset=$DATASET" > NanoAODv6_2017_Data.txt +## DATASET=/DoubleEG/Run2017*Nano25Oct2019*/NANOAOD +## dasgoclient -query="dataset=$DATASET" > NanoAODv6_2017_Data.txt ## /DoubleMuon/Run2017B-Nano25Oct2019-v1/NANOAOD /DoubleMuon/Run2017C-Nano25Oct2019-v1/NANOAOD /DoubleMuon/Run2017D-Nano25Oct2019-v1/NANOAOD /DoubleMuon/Run2017E-Nano25Oct2019-v1/NANOAOD /DoubleMuon/Run2017F-Nano25Oct2019-v1/NANOAOD +/DoubleEG/Run2017B-Nano25Oct2019-v1/NANOAOD +/DoubleEG/Run2017C-Nano25Oct2019-v1/NANOAOD +/DoubleEG/Run2017D-Nano25Oct2019-v1/NANOAOD +/DoubleEG/Run2017E-Nano25Oct2019-v1/NANOAOD +/DoubleEG/Run2017F-Nano25Oct2019-v1/NANOAOD \ No newline at end of file diff --git a/Skimmer/samples/NanoAODv6/NanoAODv6_2017_MC.txt b/Skimmer/samples/NanoAODv6/NanoAODv6_2017_MC.txt index df1b2d5..51a61bd 100644 --- a/Skimmer/samples/NanoAODv6/NanoAODv6_2017_MC.txt +++ b/Skimmer/samples/NanoAODv6/NanoAODv6_2017_MC.txt @@ -3,8 +3,11 @@ ## dasgoclient -query="dataset=$DATASET" >> NanoAODv6_2017_MC.txt ## DATASET=/DYJetsToLL_M-50_TuneCP5_13TeV-madgraphMLM-pythia8/RunIIFall17NanoAODv6-*/NANOAODSIM ## dasgoclient -query="dataset=$DATASET" >> NanoAODv6_2017_MC.txt +## DATASET=/DYJetsToLL_M-50_*_13TeV-madgraphMLM-herwig*/RunIIFall17NanoAODv6-*/NANOAODSIM +## dasgoclient -query="dataset=$DATASET" >> NanoAODv6_2017_MC.txt ## /DYJetsToLL_M-50_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIIFall17NanoAODv6-PU2017_12Apr2018_Nano25Oct2019_new_pmx_102X_mc2017_realistic_v7-v1/NANOAODSIM /DYJetsToLL_M-50_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIIFall17NanoAODv6-PU2017_12Apr2018_Nano25Oct2019_new_pmx_102X_mc2017_realistic_v7_ext1-v1/NANOAODSIM /DYJetsToLL_M-50_TuneCP5_13TeV-madgraphMLM-pythia8/RunIIFall17NanoAODv6-PU2017RECOSIMstep_12Apr2018_Nano25Oct2019_102X_mc2017_realistic_v7-v1/NANOAODSIM /DYJetsToLL_M-50_TuneCP5_13TeV-madgraphMLM-pythia8/RunIIFall17NanoAODv6-PU2017RECOSIMstep_12Apr2018_Nano25Oct2019_102X_mc2017_realistic_v7_ext1-v1/NANOAODSIM +/DYJetsToLL_M-50_TuneCH3_13TeV-madgraphMLM-herwig7/RunIIFall17NanoAODv6-PU2017_12Apr2018_Nano25Oct2019_102X_mc2017_realistic_v7-v1/NANOAODSIM diff --git a/Skimmer/samples/NanoAODv6/NanoAODv6_2018_Data.txt b/Skimmer/samples/NanoAODv6/NanoAODv6_2018_Data.txt index 8cafc6d..ac823c0 100644 --- a/Skimmer/samples/NanoAODv6/NanoAODv6_2018_Data.txt +++ b/Skimmer/samples/NanoAODv6/NanoAODv6_2018_Data.txt @@ -1,8 +1,16 @@ ## ## DATASET=/DoubleMuon/Run2018*Nano25Oct2019*/NANOAOD ## dasgoclient -query="dataset=$DATASET" > NanoAODv6_2018_Data.txt +## DATASET=/EGamma/Run2018*Nano25Oct2019*/NANOAOD +## dasgoclient -query="dataset=$DATASET" ## /DoubleMuon/Run2018A-Nano25Oct2019-v1/NANOAOD /DoubleMuon/Run2018B-Nano25Oct2019-v1/NANOAOD /DoubleMuon/Run2018C-Nano25Oct2019-v1/NANOAOD /DoubleMuon/Run2018D-Nano25Oct2019_ver2-v1/NANOAOD +/EGamma/Run2018A-Nano25Oct2019-v1/NANOAOD +/EGamma/Run2018B-Nano25Oct2019-v1/NANOAOD +/EGamma/Run2018C-Nano25Oct2019-v1/NANOAOD +/EGamma/Run2018D-Nano25Oct2019-v1/NANOAOD + + \ No newline at end of file diff --git a/Skimmer/samples/NanoAODv6/NanoAODv6_2018_MC.txt b/Skimmer/samples/NanoAODv6/NanoAODv6_2018_MC.txt index 220cbda..9988b49 100644 --- a/Skimmer/samples/NanoAODv6/NanoAODv6_2018_MC.txt +++ b/Skimmer/samples/NanoAODv6/NanoAODv6_2018_MC.txt @@ -3,8 +3,10 @@ ## dasgoclient -query="dataset=$DATASET" >> NanoAODv6_2018_MC.txt ## DATASET=/DYJetsToLL_M-50_TuneCP5_13TeV-madgraphMLM-pythia8/RunIIAutumn18NanoAODv6-*/NANOAODSIM ## dasgoclient -query="dataset=$DATASET" >> NanoAODv6_2018_MC.txt -## +## DATASET=/DYJetsToLL_M-50_*_13TeV-madgraphMLM-herwig*/RunIIAutumn18NanoAODv6-*/NANOAODSIM +## dasgoclient -query="dataset=$DATASET" >> NanoAODv6_2017_MC.txt ## /DYJetsToLL_M-50_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIIAutumn18NanoAODv6-Nano25Oct2019_102X_upgrade2018_realistic_v20-v1/NANOAODSIM /DYJetsToLL_M-50_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIIAutumn18NanoAODv6-Nano25Oct2019_102X_upgrade2018_realistic_v20_ext2-v1/NANOAODSIM /DYJetsToLL_M-50_TuneCP5_13TeV-madgraphMLM-pythia8/RunIIAutumn18NanoAODv6-Nano25Oct2019_102X_upgrade2018_realistic_v20-v1/NANOAODSIM +/DYJetsToLL_M-50_TuneCH3_13TeV-madgraphMLM-herwig7/RunIIAutumn18NanoAODv6-Nano25Oct2019_102X_upgrade2018_realistic_v20-v1/NANOAODSIM \ No newline at end of file diff --git a/Skimmer/script/branches_in.txt b/Skimmer/script/branches_in.txt index ddab132..e55df5b 100644 --- a/Skimmer/script/branches_in.txt +++ b/Skimmer/script/branches_in.txt @@ -15,6 +15,8 @@ keep PV_* # keep nMuon keep Muon_* +keep nElectron +keep Electron_* keep nJet keep Jet_* keep nGenJet @@ -23,5 +25,7 @@ keep nTrigObj keep TrigObj_* # keep HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ +keep HLT_Mu17_TrkIsoVVL_TkMu8_TrkIsoVVL +keep HLT_TkMu17_TrkIsoVVL_TkMu8_TrkIsoVVL keep HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8 keep HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8 \ No newline at end of file diff --git a/Skimmer/script/branches_out.txt b/Skimmer/script/branches_out.txt index 42c03e3..b0dc574 100644 --- a/Skimmer/script/branches_out.txt +++ b/Skimmer/script/branches_out.txt @@ -17,9 +17,9 @@ keep PV_* # # Branches added by user # -keep mu0* -keep mu1* -keep dimuon* +keep lep0* +keep lep1* +keep dilep* # # keep *nJetSel*