def main(): ROOT.PyConfig.IgnoreCommandLineOptions = True ROOT.gROOT.SetBatch(True) postprocessor = PostProcessor( # The output directory is the current working directory. outputDir='.', # Any and all command line arguments are taken to be an input file path. inputFiles=sys.argv[1:], # The skimming selection string. cut=( '(Sum$(Electron_pt > 20 && Electron_mvaSpring16GP_WP90) >= 2' ' || Sum$(Muon_pt > 20) >= 2' ' || Sum$(Electron_pt > 20 && Electron_mvaSpring16GP_WP80) >= 1' ' || Sum$(Muon_pt > 20 && Muon_tightId) >= 1' ' || (Sum$(Muon_pt > 20) == 0 && Sum$(Electron_pt > 20 && Electron_mvaSpring16GP_WP90) == 0 && MET_pt > 80))' '&& Sum$(abs(Jet_eta) < 2.5 && Jet_pt > 20 && Jet_jetId) >= 2' ), # The path to a text file describing which branches to keep and drop. branchsel='keep_and_drop.txt', # Additional postprocessing modules which add additional selections and branches. {% if is_data %} modules=[vhbb()], {% else %} modules=[btagSFProducer('cmva'), jecUncertAll_cppOut(), vhbb()], {% endif %} # Preserve input file provenance information. provenance=True, ) postprocessor.run()
algostring='k_httTT_Hj', csv_looseWP=0.5426, csv_mediumWP=0.8484, selection=[ lambda leps, jets, event: len(leps) >= 2 and len(jets) >= 3, lambda leps, jets, event: leps[0].conePt > 20 and leps[1].conePt > 10, ]) from CMGTools.TTHAnalysis.tools.finalMVA_DNN import finalMVA_DNN finalMVA = lambda: finalMVA_DNN() from PhysicsTools.NanoAODTools.postprocessing.modules.btv.btagSFProducer import btagSFProducer btagSF2016_dj = lambda: btagSFProducer("Legacy2016", 'deepjet', collName="JetSel_Recl", storeOutput=False, perJesComponents=True) btagSF2017_dj = lambda: btagSFProducer("2017", 'deepjet', collName="JetSel_Recl", storeOutput=False, perJesComponents=True) btagSF2018_dj = lambda: btagSFProducer("2018", 'deepjet', collName="JetSel_Recl", storeOutput=False, perJesComponents=True) from CMGTools.TTHAnalysis.tools.nanoAOD.BtagSFs import BtagSFs bTagSFs = lambda: BtagSFs(
def main(args): isdata = len(args.dataEra) > 0 isfastsim = args.isFastSim isSUSY = args.sampleName.startswith("SMS_") if isdata and isfastsim: print "ERROR: It is impossible to have a dataset that is both data and fastsim" exit(0) if isdata: dataType = "Data" if not args.era + args.dataEra in DataDepInputs[dataType].keys(): print "ERROR: Era \"" + args.era + "\" not recognized" exit(0) elif isfastsim: dataType = "FASTSIM" if not args.era + args.dataEra in DataDepInputs[dataType].keys(): print "ERROR: Era \"" + args.era + "\" not recognized" exit(0) else: dataType = "MC" if not args.era in DataDepInputs[dataType].keys(): print "ERROR: Era \"" + args.era + "\" not recognized" exit(0) mods = [] #~~~~~ Common modules for Data and MC ~~~~~ taggerWorkingDirectory = os.environ[ "CMSSW_BASE"] + "/src/PhysicsTools/NanoSUSYTools/python/processors/" + DataDepInputs[ dataType][args.era if not isdata else (args.era + args.dataEra)]["taggerWD"] mods += [ #Stop0lObjectsProducer(args.era), #DeepTopProducer(args.era, taggerWorkingDirectory, sampleName=args.sampleName, isFastSim=isfastsim, isData=isdata), #Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim), SoftBDeepAK8SFProducer(args.era, taggerWorkingDirectory, isData=isdata, isFastSim=isfastsim, sampleName=args.sampleName), ] #~~~~~ Modules for MC Only ~~~~ if not isdata: ## Major modules for MC mods += [ btagSFProducer(args.era, algo="deepcsv"), BtagSFWeightProducer(DataDepInputs[dataType][args.era]["bTagEff"], args.sampleName, DeepCSVMediumWP[args.era], isfastsim=isfastsim), #TopReweightProducer(args.era, args.sampleName, isData=isdata), #DeepTopProducer(args.era, taggerWorkingDirectory, "JESUp", sampleName=args.sampleName, isFastSim=isfastsim, isData=isdata), #DeepTopProducer(args.era, taggerWorkingDirectory, "JESDown", sampleName=args.sampleName, isFastSim=isfastsim, isData=isdata), #Stop0lObjectsProducer(args.era, "JESUp"), #Stop0lObjectsProducer(args.era, "JESDown"), #Stop0lObjectsProducer(args.era, "METUnClustUp"), #Stop0lObjectsProducer(args.era, "METUnClustDown"), #Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim, applyUncert="JESUp"), #Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim, applyUncert="JESDown"), #Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim, applyUncert="METUnClustUp"), #Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim, applyUncert="METUnClustDown"), ] #============================================================================# #------------------------- Run PostProcessor ------------------------# #============================================================================# files = [] if len(args.inputfile) > 5 and args.inputfile[0:5] == "file:": #This is just a single test input file files.append(args.inputfile[5:]) else: #this is a file list with open(args.inputfile) as f: files = [line.strip() for line in f] p = PostProcessor(args.outputfile, files, cut=None, branchsel=None, postfix="", outputbranchsel=None, modules=mods, provenance=False, maxEvents=args.maxEvents) p.run()
def main(args): isdata = len(args.dataEra) > 0 isfastsim = args.isFastSim isSUSY = args.sampleName.startswith("SMS_") if isdata and isfastsim: print "ERROR: It is impossible to have a dataset that is both data and fastsim" exit(0) if isdata: dataType = "Data" if not args.era + args.dataEra in DataDepInputs[dataType].keys(): print "ERROR: Era \"" + args.era + "\" not recognized" exit(0) elif isfastsim: dataType = "FASTSIM" if not args.era + args.dataEra in DataDepInputs[dataType].keys(): print "ERROR: Era \"" + args.era + "\" not recognized" exit(0) else: dataType = "MC" if not args.era in DataDepInputs[dataType].keys(): print "ERROR: Era \"" + args.era + "\" not recognized" exit(0) mods = [] #~~~~~ Different modules for Data and MC ~~~~~ # These modules must be run first in order to update JEC and MET approperiately for future modules # The MET update module must also be run before the JEC update modules if args.era == "2017": # EE noise mitigation in PF MET # https://hypernews.cern.ch/HyperNews/CMS/get/JetMET/1865.html mods.append(UpdateMETProducer("METFixEE2017")) if args.era == "2018": # The 2018 JetID came after our production mods.append(UpdateJetID(args.era)) if isdata: # Apply resediual JEC on Data if DataDepInputs[dataType][args.era + args.dataEra]["redoJEC"]: mods.append( jetRecalib(DataDepInputs[dataType][args.era + args.dataEra]["JEC"])) else: # JetMET uncertainty ? mods += [ jetmetUncertaintiesProducer( args.era, DataDepInputs[dataType][args.era]["JECMC"], jerTag=DataDepInputs[dataType][args.era]["JERMC"], redoJEC=DataDepInputs[dataType][args.era]["redoJEC"], doSmearing=False, doL2L3=not isfastsim) ] #~~~~~ Common modules for Data and MC ~~~~~ mods += [ eleMiniCutID(), Stop0lObjectsProducer(args.era), TopTaggerProducer(recalculateFromRawInputs=True, topDiscCut=DeepResovledDiscCut, cfgWD=os.environ["CMSSW_BASE"] + "/src/PhysicsTools/NanoSUSYTools/python/processors"), DeepTopProducer(args.era), Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim), Stop0l_trigger(args.era), UpdateEvtWeight(isdata, args.crossSection, args.nEvents, args.sampleName) ] #~~~~~ Modules for MC Only ~~~~~ if not isdata: pufile_data = "%s/src/PhysicsTools/NanoSUSYTools/data/pileup/%s" % ( os.environ['CMSSW_BASE'], DataDepInputs[dataType][args.era]["pileup_Data"]) pufile_mc = "%s/src/PhysicsTools/NanoSUSYTools/data/pileup/%s" % ( os.environ['CMSSW_BASE'], DataDepInputs[dataType][args.era]["pileup_MC"]) ## TODO: ZW don't understand this part, So this is for fullsim? ## Isn't jetmetUncertaintiesProducer included jecUncertProducer if not isfastsim: mods += [ jecUncertProducer(DataDepInputs[dataType][args.era]["JECMC"]), ] ## Major modules for MC mods += [ TopTaggerProducer( recalculateFromRawInputs=True, suffix="JESUp", AK4JetInputs=("Jet_pt_jesTotalUp", "Jet_eta", "Jet_phi", "Jet_mass_jesTotalUp"), topDiscCut=DeepResovledDiscCut, cfgWD=os.environ["CMSSW_BASE"] + "/src/PhysicsTools/NanoSUSYTools/python/processors"), TopTaggerProducer( recalculateFromRawInputs=True, suffix="JESDown", AK4JetInputs=("Jet_pt_jesTotalDown", "Jet_eta", "Jet_phi", "Jet_mass_jesTotalDown"), topDiscCut=DeepResovledDiscCut, cfgWD=os.environ["CMSSW_BASE"] + "/src/PhysicsTools/NanoSUSYTools/python/processors"), DeepTopProducer(args.era, "JESUp"), DeepTopProducer(args.era, "JESDown"), Stop0lObjectsProducer(args.era, "JESUp"), Stop0lObjectsProducer(args.era, "JESDown"), Stop0lObjectsProducer(args.era, "METUnClustUp"), Stop0lObjectsProducer(args.era, "METUnClustDown"), Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim, applyUncert="JESUp"), Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim, applyUncert="JESDown"), Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim, applyUncert="METUnClustUp"), Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim, applyUncert="METUnClustDown"), PDFUncertiantyProducer(isdata, isSUSY), lepSFProducer(args.era), lepSFProducer(args.era, muonSelectionTag="Medium", electronSelectionTag="Medium", photonSelectionTag="Medium"), puWeightProducer(pufile_mc, pufile_data, args.sampleName, "pileup"), btagSFProducer(era=args.era, algo="deepcsv"), BtagSFWeightProducer("allInOne_bTagEff_deepCSVb_med.root", args.sampleName, DeepCSVMediumWP[args.era]), # statusFlag 0x2100 corresponds to "isLastCopy and fromHardProcess" # statusFlag 0x2080 corresponds to "IsLastCopy and isHardProcess" GenPartFilter(statusFlags=[0x2100, 0x2080, 0x2000], pdgIds=[0, 0, 22], statuses=[0, 0, 1]), # TODO: first implemtation, need double check ISRSFWeightProducer(args.era, isSUSY, "allInOne_ISRWeight.root", args.sampleName), ] # Special PU reweighting for 2017 separately if args.era == "2017": pufile_dataBtoE = "%s/src/PhysicsTools/NanoSUSYTools/data/pileup/Collisions17_BtoE.root" % os.environ[ 'CMSSW_BASE'] pufile_dataF = "%s/src/PhysicsTools/NanoSUSYTools/data/pileup/Collisions17_F.root" % os.environ[ 'CMSSW_BASE'] mods += [ puWeightProducer(pufile_mc, pufile_dataBtoE, args.sampleName, "pileup", name="17BtoEpuWeight"), puWeightProducer(pufile_mc, pufile_dataF, args.sampleName, "pileup", name="17FpuWeight") ] # 2016 and 2017 L1 ECal prefiring reweighting if args.era == "2016" or args.era == "2017": mods.append(PrefCorr(args.era)) #============================================================================# #------------------------- Run PostProcessor ------------------------# #============================================================================# files = [] if len(args.inputfile) > 5 and args.inputfile[0:5] == "file:": #This is just a single test input file files.append(args.inputfile[5:]) else: #this is a file list with open(args.inputfile) as f: files = [line.strip() for line in f] p = PostProcessor(args.outputfile, files, cut=None, branchsel=None, outputbranchsel="keep_and_drop.txt", modules=mods, provenance=False, maxEvents=args.maxEvents) p.run()
Stop0lObjectsProducer(args.era, "JESUp"), Stop0lObjectsProducer(args.era, "JESDown"), Stop0lObjectsProducer(args.era, "METUnClustUp"), Stop0lObjectsProducer(args.era, "METUnClustDown"), Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim, applyUncert="JESUp"), Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim, applyUncert="JESDown"), Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim, applyUncert="METUnClustUp"), Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim, applyUncert="METUnClustDown"), PDFUncertiantyProducer(isdata, isSUSY), lepSFProducer(args.era), lepSFProducer(args.era, muonSelectionTag="Medium", electronSelectionTag="Medium", photonSelectionTag="Medium", tauSelectionTag="Tight"), puWeightProducer(pufile_mc, pufile_data, args.sampleName,"pileup"), btagSFProducer(era=args.era, algo="deepcsv"), BtagSFWeightProducer("allInOne_bTagEff_deepCSVb_med.root", args.sampleName, DeepCSVMediumWP[args.era]), # statusFlag 0x2100 corresponds to "isLastCopy and fromHardProcess" # statusFlag 0x2080 corresponds to "IsLastCopy and isHardProcess" GenPartFilter(statusFlags = [0x2100, 0x2080, 0x2000], pdgIds = [0, 0, 22], statuses = [0, 0, 1]), # TODO: first implemtation, need double check ISRSFWeightProducer(args.era, isSUSY, "allInOne_ISRWeight.root", args.sampleName), ] # Special PU reweighting for 2017 separately if args.era == "2017": pufile_dataBtoE = "%s/src/PhysicsTools/NanoSUSYTools/data/pileup/Collisions17_BtoE.root" % os.environ['CMSSW_BASE'] pufile_dataF = "%s/src/PhysicsTools/NanoSUSYTools/data/pileup/Collisions17_F.root" % os.environ['CMSSW_BASE'] mods += [ puWeightProducer(pufile_mc, pufile_dataBtoE, args.sampleName,"pileup", name="17BtoEpuWeight"), puWeightProducer(pufile_mc, pufile_dataF, args.sampleName,"pileup", name="17FpuWeight") ]
from VBFHToInv.NanoAODTools.postprocessing.modules.metCleaning import * from VBFHToInv.NanoAODTools.postprocessing.modules.crCreator import * from VBFHToInv.NanoAODTools.postprocessing.modules.crDiLepCreator import * from VBFHToInv.NanoAODTools.postprocessing.modules.crSingleLepCreator import * from VBFHToInv.NanoAODTools.postprocessing.modules.selectionCreator import * from VBFHToInv.NanoAODTools.postprocessing.modules.lepSFProducer import lepSFtight from VBFHToInv.NanoAODTools.postprocessing.modules.lepSFProducer import lepSFveto from VBFHToInv.NanoAODTools.postprocessing.modules.nloSFProducer import nloSF from VBFHToInv.NanoAODTools.postprocessing.modules.bosonDecayFinder import bosonDecay from VBFHToInv.NanoAODTools.postprocessing.modules.trigger_selection import TriggerSelectionConstructor from VBFHToInv.NanoAODTools.postprocessing.modules.objectCleaning import * #btagging weights - give event weight automatically based on jets discri (so all working points automatically) from PhysicsTools.NanoAODTools.postprocessing.modules.btv.btagSFProducer import btagSFProducer btagSF2017deepCSV = lambda: btagSFProducer("2017", 'deepcsv') #pu weight - data file is hardcoded !!! from PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer import puWeightProducer pufile_data = "%s/src/VBFHToInv/NanoAODTools/data/pileup/RerecoData2017withSysts.root" % os.environ[ 'CMSSW_BASE'] puWeight2017 = lambda: puWeightProducer( 'auto', pufile_data, "pu_mc", "pileup", verbose=False) #how to change data and MC files ?? #pufile_data2017="%s/src/VBFHToInv/NanoAODTools/python/postprocessing/data/pileup/pileup_Cert_294927-306462_13TeV_PromptReco_Collisions17_withVar.root" % os.environ['CMSSW_BASE'] #pufile_mcFall17="%s/src/VBFHToInv/NanoAODTools/python/postprocessing/data/pileup/" % os.environ['CMSSW_BASE'] #puWeight2017 = lambda : puWeightProducer(pufile_mcFall17,pufile_data2017,"pu_mc","pileup",verbose=False) #lepton SF #from PhysicsTools.NanoAODTools.postprocessing.modules.common.lepSFProducer import lepSF
def main(args): isdata = len(args.dataEra) > 0 if isdata: dataType = "Data" if not args.era + args.dataEra in DataDepInputs[dataType]: print "ERROR: Era \"" + args.era + "\" not recognized" exit(0) else: dataType = "MC" if not args.era in DataDepInputs[dataType].keys(): print "ERROR: Era \"" + args.era + "\" not recognized" exit(0) mods = [] #~~~~~ Different modules for Data and MC ~~~~~ # These modules must be run first in order to update JEC and MET approperiately for future modules # The MET update module must also be run before the JEC update modules if args.era == "2017": # EE noise mitigation in PF MET # https://hypernews.cern.ch/HyperNews/CMS/get/JetMET/1865.html mods.append(UpdateMETProducer("METFixEE2017")) if isdata: # Apply resediual JEC on Data mods.append( createJMECorrector(isMC=False, dataYear=int(args.era), runPeriod=args.dataEra, jetType="AK8PFPuppi")()) else: mods.append( createJMECorrector( isMC=True, dataYear=int(args.era), jesUncert="Merged", applyHEMfix=(True if args.era == '2018' else False))()) mods.append( createJMECorrector( isMC=True, dataYear=int(args.era), jesUncert="Merged", jetType="AK8PFPuppi", applyHEMfix=(True if args.era == '2018' else False))()) #~~~~~ Common modules for Data and MC ~~~~~ mods.append(eleMiniCutID()) #~~~~~ Modules for MC Only ~~~~ if not isdata: pufile_data = "{0}/src/PhysicsTools/NanoAODTools/python/postprocessing/data/pileup/{1}".format( os.environ['CMSSW_BASE'], DataDepInputs[dataType][args.era]["pileup_Data"]) pufile_mc = "{0}/src/PhysicsTools/NanoAODTools/python/postprocessing/data/pileup/{1}".format( os.environ['CMSSW_BASE'], DataDepInputs[dataType][args.era]["pileup_MC"]) ## Major modules for MC mods += [ PDFUncertaintyProducer(isdata), puWeightProducer(pufile_mc, pufile_data, "pu_mc", "pileup"), btagSFProducer(args.era if args.era != '2016' else 'Legacy2016', algo="deepcsv", verbose=0), #btagSFProducer(args.era, algo="deepjet", verbose=0), BtagSFWeightProducer(args.era), #''' #statusFlag 0x2100 corresponds to "isLastCopy and fromHardProcess" #statusFlag 0x2080 corresponds to "IsLastCopy and isHardProcess" #''' GenPartFilter(statusFlags=[0x2100, 0x2080, 0x2000, 0], pdgIds=[0, 0, 22, 0], statuses=[0, 0, 1, 23]), ] # 2016 and 2017 L1 ECal prefiring reweighting if args.era == "2016" or args.era == "2017": era_map = {'2016': 'H', '2017': 'F'} prefargs = { "jetroot": "L1prefiring_jetpt_{0}Bto{1}.root".format( args.era, era_map[args.era]), "jetmapname": "L1prefiring_jetpt_{0}Bto{1}".format(args.era, era_map[args.era]), "photonroot": "L1prefiring_photonpt_{0}Bto{1}.root".format( args.era, era_map[args.era]), "photonmapname": "L1prefiring_photonpt_{0}Bto{1}".format( args.era, era_map[args.era]) } mods.append(PrefCorr(**prefargs)) #============================================================================# #------------------------- Run PostProcessor ------------------------# #============================================================================# files = [] if len(args.inputfile) > 5 and args.inputfile[0:5] == "file:": #This is just a single test input file files.append(args.inputfile[5:]) else: #this is a file list with open(args.inputfile) as f: files = [line.strip() for line in f] p = PostProcessor(args.outputfile, files, cut=None, branchsel=None, outputbranchsel="keep_and_drop.txt", modules=mods, provenance=False, maxEntries=args.maxEvents, prefetch=True) p.run()
from PhysicsTools.NanoAODTools.postprocessing.modules.btv.btagSFProducer import btagSFProducer btagSF_deep_2018 = lambda: btagSFProducer(era='2018', algo='deepcsv') btagSF_deepFlav_2018 = lambda: btagSFProducer(era='2018', algo='deepjet') btagSF_deep_2017 = lambda: btagSFProducer(era='2017', algo='deepcsv') btagSF_deepFlav_2017 = lambda: btagSFProducer(era='2017', algo='deepjet') btagSF_csvv2_2017 = lambda: btagSFProducer(era='2017', algo='csvv2') # legacy btagSF_deep_2016_TuneCP5 = lambda: btagSFProducer(era='2016_TuneCP5', algo='deepcsv') btagSF_deepFlav_2016_TuneCP5 = lambda: btagSFProducer(era='2016_TuneCP5', algo='deepjet') btagSF_deep_2016 = lambda: btagSFProducer(era='2016', algo='deepcsv') btagSF_deepFlav_2016 = lambda: btagSFProducer(era='2016', algo='deepjet') btagSF_csvv2_2016 = lambda: btagSFProducer(era='2016', algo='csvv2') # legacy btagSF_cmva_2016 = lambda: btagSFProducer(era='2016', algo='cmva') # legacy btagSF_deep_2018_LSLoose = lambda: btagSFProducer( era='2018', algo='deepcsv', jetCollectionName='JetAK4LSLoose') btagSF_deepFlav_2018_LSLoose = lambda: btagSFProducer( era='2018', algo='deepjet', jetCollectionName='JetAK4LSLoose') btagSF_deep_2017_LSLoose = lambda: btagSFProducer( era='2017', algo='deepcsv', jetCollectionName='JetAK4LSLoose') btagSF_deepFlav_2017_LSLoose = lambda: btagSFProducer( era='2017', algo='deepjet', jetCollectionName='JetAK4LSLoose') btagSF_csvv2_2017_LSLoose = lambda: btagSFProducer( era='2017', algo='csvv2', jetCollectionName='JetAK4LSLoose') # legacy btagSF_deep_2016_TuneCP5_LSLoose = lambda: btagSFProducer(
p = PostProcessor( ".", files, cut=selection, branchsel=None, modules=[ Grafter(["baseW/F=1."]), GenericFormulaAdder('data/formulasToAdd_MC.py'), PromptParticlesGenVarsProducer(), #wwNLLcorrectionWeightProducer(), #MetUnclusteredTreeMaker(), lepMergerLatino(), GenLeptonMatchProducer("Lepton"), # GenVarProducer(), # #l2KinProducer(), #l3KinProducer(), #l4KinProducer() btagSFProducer(era='2016', algo='cmva'), BTagEventWeightProducer() ], provenance=True, fwkJobReport=True) p.run() print "DONE" os.system("ls -lR")