def appendMCweightsSequence(self): ################################################ PU #pu reweight modules puWeightProducer_allData = puWeight_UL2016_allData puWeightProducer = puWeight_UL2016_postVFP if self.eraVFP == "postVFP" else puWeight_UL2016_preVFP if self.dataYear == 2017: puWeightProducer = puWeight_2017 elif self.dataYear == 2018: puWeightProducer = puWeight_2018 ################################################PREFIRE Weights jetROOT = 'L1prefiring_jetpt_2016BtoH' photonROOT = 'L1prefiring_photonpt_2016BtoH' if self.dataYear == 2017: jetROOT = 'L1prefiring_jetpt_2017BtoF' photonROOT = 'L1prefiring_photonpt_2017BtoF' prefireCorr = lambda: PrefCorr(jetroot=jetROOT + '.root', jetmapname=jetROOT, photonroot=photonROOT + '.root', photonmapname=photonROOT) ################################################ mcweights = [ puWeightProducer_allData(), puWeightProducer(), prefireCorr(), ] return mcweights
def multiplier(fileList, hName=None, fName="def.root", NLeps=None, maxevt=10000): hName = None hDirName = None p=PostProcessor(".", fileList, modules=[puWeightProducer("auto",pufile_data2017,"pu_mc","pileup",verbose=True), Trigger(triggers), BaselineSelector(isData=True, era="2017", btagging=['DeepCSV','M'], lepPt=25, MET=50, HT=500, invertZWindow=False, GenTop_LepSelection=None), # MCTreePlot(maxevt=maxevt, filterNLeps=NLeps) ], haddFileName=fName, noOut=False, # histFileName=hName, # histDirName=hDirName, ) p.run()
def main(args): # isdata = False # isfastsim = False if "False" in args.isData: isdata = False else: isdata = True if "False" in args.isFastSim: isfastsim = False else: isfastsim = True mods = [ eleMiniCutID(), Stop0lObjectsProducer(args.era), DeepTopProducer(args.era), Stop0lBaselineProducer(args.era, isData=isdata, isFastSim=isfastsim), UpdateGenWeight(isdata, args.crossSection, args.nEvents) ] if args.era == "2018": mods.append(UpdateJetID(args.era)) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For MC ~~~~~ if not isdata: pufile = "%s/src/PhysicsTools/NanoSUSYTools/data/pileup/%s" % ( os.environ['CMSSW_BASE'], DataDepInputs[args.era]["pileup"]) mods += [ lepSFProducer(args.era), puWeightProducer("auto", pufile, "pu_mc", "pileup", verbose=False) ] files = [] lines = open(args.inputfile).readlines() for line in lines: files.append(line.strip()) p = PostProcessor(args.outputfile, files, cut=None, branchsel=None, outputbranchsel="keep_and_drop.txt", modules=mods, provenance=False) p.run()
import os from PhysicsTools.NanoAODTools.postprocessing.framework.postprocessor import * #this takes care of converting the input files from CRAB from PhysicsTools.NanoAODTools.postprocessing.framework.crabhelper import inputFiles, runsAndLumis from PhysicsTools.NanoAODTools.postprocessing.wzAnalysis.wzAnalysisModule import * from PhysicsTools.NanoAODTools.postprocessing.modules.jme.jecUncertainties import * from PhysicsTools.NanoAODTools.postprocessing.modules.jme.jetmetUncertainties import * from PhysicsTools.NanoAODTools.postprocessing.modules.common.puWeightProducer import * p = PostProcessor(".", inputFiles(), "", modules=[ wzAnalysisProducer(), jetmetUncertainties2017(), puWeightProducer("auto", pufile_data2017, "pu_mc", "pileup", verbose=False) ], provenance=True, fwkJobReport=True, jsonInput=runsAndLumis()) p.run() print "DONE" os.system("ls -lR")
jetType="AK8PFPuppi", isFastSim=o_isFastSim, metBranchName=o_metBranchName) # ----------------------- Pileup Weights ------------------------ if o_dataYear == "2016": puWeightProducer = puWeight_2016 elif o_dataYear == "2017": puWeightProducer = puWeight_2017 elif o_dataYear == "2018": puWeightProducer = puWeight_2018 # ----------------------- Postprocessor ------------------------- modules = [jetmetCorrector(), fatjetCorrector()] if o_isMC: modules.append(puWeightProducer()) p = PostProcessor(".", infnames, "", None, modules, provenance=True, prefetch=options.prefetch, maxEntries=options.maxEntries) p.run() if os.path.exists( os.path.basename(infnames[0]).replace(".root", "_Skim.root")): os.rename( os.path.basename(infnames[0]).replace(".root", "_Skim.root"), outfname)
from PhysicsTools.NanoAODTools.postprocessing.framework.crabhelper import inputFiles, runsAndLumis ##Function parameters ##(isMC=True, dataYear=2016, runPeriod="B", jesUncert="Total", redojec=False, jetType = "AK4PFchs", noGroom=False) ##All other parameters will be set in the helper module jmeCorrections = createJMECorrector(True, "2017", "B", "Total", True, "AK4PFchs", False) # b tag scale-factors btagSF2017_1 = lambda: btagSFProducer( era="2017", algo="deepjet", selectedWPs=["L", "M", "shape_corr"]) # PU weights puWeight_2017_1 = lambda: puWeightProducer(pufile_mc2017, pufile_data2017, "pu_mc", "pileup", verbose=False, doSysVar=True) p = PostProcessor( ".", inputFiles(), "", modules=[puWeight_2017_1(), jmeCorrections(), btagSF2017_1()], provenance=True, fwkJobReport=True, jsonInput=runsAndLumis()) p.run()
datasetFile = Dataset(args.fileName) inFileName = datasetFile.fileName print("inFileName: %s" % inFileName) print("self.type = %s" % datasetFile.type) OutDir = args.outDirectory + "/" + datasetFile.type + "/" + datasetFile.primaryName thePostFix = args.postfix moduleCache = [] pufilePath = "%s/src/PhysicsTools/NanoAODTools/python/postprocessing/data/pileup/" % os.environ[ 'CMSSW_BASE'] if args.era == "2017": moduleCache.append( puWeightProducer( pufilePath + "mcPileup2017.root", pufilePath + "PileupHistogram-goldenJSON-13tev-2017-99bins_withVar.root", "pu_mc", "pileup", verbose=False, doSysVar=True)) elif args.era == "2018": moduleCache.append( puWeightProducer( pufilePath + "mcPileup2018.root", pufilePath + "PileupHistogram-goldenJSON-13tev-2018-100bins_withVar.root", "pu_mc", "pileup", verbose=False, doSysVar=True)) if args.maxEntries < 0: args.maxEntries = None
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()
FastsimVarProducer(isfastsim, "METUnClustDown"), 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")
ifileDATA = "/data/Run2016C/SingleMuon/NANOAOD/Nano25Oct2019-v1/40000/F7FC207B-943C-3B48-9147-D83B838BE473.root" elif dataYear == 2017: ifileDATA = "data/Run2017F/BTagCSV/NANOAOD/Nano1June2019-v1/40000/030D3C6F-240B-3247-961D-1A7C0922DC1F.root" elif dataYear == 2018: ifileDATA = "data/Run2018B/DoubleMuon/NANOAOD/Nano1June2019-v1/40000/20FCA3B4-6778-7441-B63C-307A21C7C2F0.root" input_files = [] modules = [] if isMC: if inputFile == '': #this will run on the hardcoded file above input_files.append(input_dir + ifileMC) else: input_files.append(inputFile) if (not genOnly and not trigOnly): modules = [ puWeightProducer(), preSelection(isMC=isMC, passall=passall, dataYear=dataYear), prefireCorr(), jmeCorrections(), genLeptonSelectModule(), CSAngleModule(), WproducerModule(), flattenLheWeightsModule(), ] # add before recoZproducer if muonScaleRes != None: modules.insert(3, muonScaleRes()) elif genOnly: modules = [genLeptonSelectModule(), CSAngleModule(), WproducerModule()] elif trigOnly: modules = [ puWeightProducer(),
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()
if nEvents == (nEventsNegative + nEventsPositive): weight = lumi * 1000 * crossSection / (nEventsPositive - nEventsNegative) else: weight = lumi * 1000 * crossSection / nEvents subera = None else: weight = 1 # print("era= {}\t subera={}\t isData={}\t TriggerChannel={}\t weight={}".format(era, subera, str(isData), channel, weight)) modules = [] if not isData: if era == "2017": modules.append( puWeightProducer(pufile_mc2017, pufile_data2017, "pu_mc", "pileup", verbose=False, doSysVar=True)) elif era == "2018": modules.append( puWeightProducer(pufile_mc2018, pufile_data2018, "pu_mc", "pileup", verbose=False, doSysVar=True)) modules.append( TriggerAndLeptonLogic(passLevel='baseline', era=era, subera=subera, isData=isData,
def multiplier( fileList, hName=None, NLeps=None, theEra=["2017", "NONE"], theBTagger=['CSVv2', 'M'], evtConfig=[True, 1, 1, 1, 1], maxevt=-1 ): #evtConfig=[isData, genEquivalentLuminosity, genXS, genNEvents] if hName == None: hDirName = None else: hName = hName hDirName = "plots" modulesMC = [ puWeightProducer("auto", pufile_data2017, "pu_mc", "pileup", verbose=False), Trigger(triggers), jetmetUncertaintiesProducer("2017", "Fall17_17Nov2017_V32_MC", ["All"], redoJEC=True), btagSFProducer(theEra[0], algo=theBTagger[0]), BaselineSelector(maxevt=maxevt, probEvt=None, isData=evtConfig[0], genEquivalentLuminosity=evtConfig[1], genXS=evtConfig[2], genNEvents=evtConfig[3], genSumWeights=evtConfig[4], era=theEra[0], btagging=theBTagger, lepPt=25, MET=50, HT=500, invertZWindow=False, invertZWindowEarlyReturn=False, GenTop_LepSelection=None, jetPtVar="pt_nom", jetMVar="mass_nom"), ] dataRecalib = { '2017': { 'B': jetRecalib("Fall17_17Nov2017B_V32_DATA", "Fall17_17Nov2017_V32_DATA"), 'C': jetRecalib("Fall17_17Nov2017C_V32_DATA", "Fall17_17Nov2017_V32_DATA"), 'D': jetRecalib("Fall17_17Nov2017DE_V32_DATA", "Fall17_17Nov2017_V32_DATA"), 'E': jetRecalib("Fall17_17Nov2017DE_V32_DATA", "Fall17_17Nov2017_V32_DATA"), 'F': jetRecalib("Fall17_17Nov2017F_V32_DATA", "Fall17_17Nov2017_V32_DATA"), 'NONE': 'NothingToSeeHere' } } modulesData = [ Trigger(triggers), dataRecalib[theEra[0]][theEra[1]], BaselineSelector(maxevt=maxevt, probEvt=None, isData=evtConfig[0], genEquivalentLuminosity=evtConfig[1], genXS=evtConfig[2], genNEvents=evtConfig[3], era=theEra[0], btagging=theBTagger, lepPt=25, MET=50, HT=500, invertZWindow=False, invertZWindowEarlyReturn=False, GenTop_LepSelection=None, jetPtVar="pt_nom", jetMVar="mass_nom"), ] if evtConfig[0] == True: theModules = modulesData else: theModules = modulesMC p = PostProcessor( "/tmp/nmangane", #"./"+theEra+"/"+theBTagger[0], fileList, modules=theModules, noOut=False, postfix=hName, haddFileName="Tree_" + hName, histFileName=hName, histDirName=hDirName, ) p.run()