def autoConfig(selectedComponents, sequence, services=[], xrd_aggressive=2): import PhysicsTools.HeppyCore.framework.config as cfg from PhysicsTools.HeppyCore.framework.eventsfwlite import Events from CMGTools.TTHAnalysis.tools.EOSEventsWithDownload import EOSEventsWithDownload event_class = EOSEventsWithDownload EOSEventsWithDownload.aggressive = xrd_aggressive if getHeppyOption("nofetch") or getHeppyOption("isCrab"): event_class = Events return cfg.Config(components=selectedComponents, sequence=sequence, services=services, events_class=event_class)
jetana = cfg.Analyzer(JetAnalyzer, ) from Colin.PFSim.analyzers.JetTreeProducer import JetTreeProducer tree = cfg.Analyzer(JetTreeProducer, tree_name='events', tree_title='jets') # definition of a sequence of analyzers, # the analyzers will process each event in this order sequence = cfg.Sequence([reader, pfsim, jets, genjets, pfjets, jetana, tree]) # finalization of the configuration object. from PhysicsTools.HeppyCore.framework.eventsfwlite import Events config = cfg.Config(components=selectedComponents, sequence=sequence, services=[], events_class=Events) if __name__ == '__main__': import sys from PhysicsTools.HeppyCore.framework.looper import Looper import logging # next 2 lines necessary to deal with reimports from ipython logging.shutdown() reload(logging) logging.basicConfig(level=logging.INFO) import random random.seed(0xdeadbeef)
selectedComponents = [yt_tWZ_filter] # test new MC #GluGluToZZTo2e2mu.files = ['root://cms-xrd-global.cern.ch//store/mc/RunIISummer16MiniAODv2/GluGluToContinToZZTo2e2mu_13TeV_MCFM701_pythia8/MINIAODSIM/PUMoriond17_80X_mcRun2_asymptotic_2016_TrancheIV_v6-v1/70000/A669DB9C-B8BD-E611-B462-001E67E33C60.root'] #selectedComponents = [GluGluToZZTo2e2mu] #selectedComponents = [ttZ0j_ll] #selectedComponents = [WZTo3LNu] #selectedComponents = [JetHT_Run2016B_03Feb2017_v2] for comp in selectedComponents: comp.files = comp.files[:1] print comp.files comp.splitFactor = 10 from CMGTools.TTHAnalysis.tools.EOSEventsWithDownload import EOSEventsWithDownload from PhysicsTools.HeppyCore.framework.eventsfwlite import Events event_class = Events if getHeppyOption("fetch"): event_class = EOSEventsWithDownload preprocessorFile = "$CMSSW_BASE/python/CMGTools/StopsDilepton/preprocessor/runBTaggingSlimPreprocessor_cfg.py" from PhysicsTools.Heppy.utils.cmsswPreprocessor import CmsswPreprocessor preprocessor = CmsswPreprocessor(preprocessorFile) jetAna.jetCol = 'selectedUpdatedPatJets' config = cfg.Config( components = selectedComponents, sequence = sequence, services = [], preprocessor=preprocessor, events_class = event_class)
#comp.files = comp.files[:1] #comp.files = comp.files[57:58] # to process only file [57] #comp.triggers = triggers_HT900 + triggers_HTMET # to apply trigger skimming # ------------------------------------------------------------------------------------------- # from PhysicsTools.HeppyCore.framework.services.tfile import TFileService output_service = cfg.Service( TFileService, 'outputfile', name="outputfile", fname='mt2.root', option='recreate' ) # the following is declared in case this cfg is used in input to the heppy.py script from PhysicsTools.HeppyCore.framework.eventsfwlite import Events from CMGTools.TTHAnalysis.tools.EOSEventsWithDownload import EOSEventsWithDownload event_class = EOSEventsWithDownload if getHeppyOption("nofetch"): event_class = Events config = cfg.Config( components = selectedComponents, sequence = sequence, services = [output_service], events_class = event_class) # events_class = Events) #printComps(config.components, True)
testfiles = miniAodFiles() sample = cfg.Component( #specify the file you want to run on # files = ["/scratch/arizzi/Hbb/CMSSW_7_2_2_patch2/src/VHbbAnalysis/Heppy/test/ZLL-8A345C56-6665-E411-9C25-1CC1DE04DF20.root"], files=testfiles, name="SingleSample", isMC=False, isEmbed=False) from PhysicsTools.Heppy.utils.cmsswPreprocessor import CmsswPreprocessor preprocessor = CmsswPreprocessor("makeAK5Jets.py") # the following is declared in case this cfg is used in input to the heppy.py script from PhysicsTools.HeppyCore.framework.eventsfwlite import Events selectedComponents = [sample] config = cfg.Config( components=selectedComponents, sequence=sequence, services=[output_service], preprocessor= preprocessor, #this would run cmsRun makeAK5Jets.py before running Heppy events_class=Events) # and the following runs the process directly if running as with python filename.py if __name__ == '__main__': from PhysicsTools.HeppyCore.framework.looper import Looper looper = Looper('Loop', config, nPrint=5, nEvents=300) looper.loop() looper.write()
################################################### ### SET BATCH OR LOCAL ### ################################################### if not production: comp = data_list[0] if data else sync_list[0] # comp = SMS # comp = samples_susy[1] selectedComponents = [comp] comp.splitFactor = 4 comp.fineSplitFactor = 1 # comp.files = comp.files[13:20] preprocessor = None if cmssw: sequence.append(fileCleaner) cfg_name = "$CMSSW_BASE/src/CMGTools/H2TauTau/prod/h2TauTauMiniAOD_ditau_data_cfg.py" if data else "$CMSSW_BASE/src/CMGTools/H2TauTau/prod/h2TauTauMiniAOD_ditau_cfg.py" preprocessor = CmsswPreprocessor(cfg_name, addOrigAsSecondary=False) # the following is declared in case this cfg is used in input to the # heppy.py script from PhysicsTools.HeppyCore.framework.eventsfwlite import Events config = cfg.Config(components=selectedComponents, sequence=sequence, services=outputService, preprocessor=preprocessor, events_class=Events) printComps(config.components, True)
# ------------------------------------------------------------------------------------------- # from PhysicsTools.HeppyCore.framework.services.tfile import TFileService output_service = cfg.Service(TFileService, 'outputfile', name="outputfile", fname='mt2.root', option='recreate') from PhysicsTools.HeppyCore.framework.eventsfwlite import Events config = cfg.Config( components=selectedComponents, sequence=sequence, services=[output_service], # events_class = event_class) events_class=Events) ##------------------------------------------------------------------------------ ## DON'T KNOW WHAT THIS IS FOR ##------------------------------------------------------------------------------ # -------------------- Running Download from EOS # the following is declared in case this cfg is used in input to the heppy.py script from CMGTools.TTHAnalysis.tools.EOSEventsWithDownload import EOSEventsWithDownload event_class = EOSEventsWithDownload if getHeppyOption("nofetch"): event_class = Events
preprocessorFile = "$CMSSW_BASE/tmp/MetType1_jec_%s.py" % (jecEra) extraArgs = [] if isData: extraArgs.append('--isData') GT = '74X_dataRun2_Prompt_v1' else: GT = 'MCRUN2_74_V9A' if removeResiduals: extraArgs.append('--removeResiduals') args = ['python', os.path.expandvars('$CMSSW_BASE/python/CMGTools/ObjectStudies/corMETMiniAOD_cfgCreator.py'),\ '--GT='+GT, '--outputFile='+preprocessorFile, '--jecDBFile='+jecDBFile, '--uncFile='+uncFile, '--jecEra='+jecEra ] + extraArgs #print "Making pre-processorfile:" #print " ".join(args) subprocess.call(args) from PhysicsTools.Heppy.utils.cmsswPreprocessor import CmsswPreprocessor preprocessor = CmsswPreprocessor(preprocessorFile) from PhysicsTools.HeppyCore.framework.eventsfwlite import Events config = cfg.Config( components=selectedComponents, sequence=sequence, services=[], #preprocessor=preprocessor, # comment if pre-processor non needed events_class=Events)
def generateKeyConfigs(samples,production, promptLeptonType, L1L2LeptonType, isData, isSignal): import os from collections import OrderedDict import PhysicsTools.HeppyCore.framework.config as cfg from PhysicsTools.HeppyCore.framework.config import printComps from PhysicsTools.HeppyCore.framework.heppy_loop import getHeppyOption from PhysicsTools.Heppy.utils.cmsswPreprocessor import CmsswPreprocessor from CMGTools.RootTools.utils.splitFactor import splitFactor # import Heppy analyzers: from PhysicsTools.Heppy.analyzers.core.JSONAnalyzer import JSONAnalyzer from PhysicsTools.Heppy.analyzers.core.SkimAnalyzerCount import SkimAnalyzerCount from PhysicsTools.Heppy.analyzers.core.EventSelector import EventSelector from PhysicsTools.Heppy.analyzers.objects.VertexAnalyzer import VertexAnalyzer from PhysicsTools.Heppy.analyzers.core.PileUpAnalyzer import PileUpAnalyzer from PhysicsTools.Heppy.analyzers.gen.GeneratorAnalyzer import GeneratorAnalyzer from PhysicsTools.Heppy.analyzers.gen.LHEWeightAnalyzer import LHEWeightAnalyzer from CMGTools.H2TauTau.proto.analyzers.TriggerAnalyzer import TriggerAnalyzer # import HNL analyzers: from CMGTools.HNL.analyzers.HNLAnalyzer import HNLAnalyzer from CMGTools.HNL.analyzers.HNLTreeProducer import HNLTreeProducer from CMGTools.HNL.analyzers.HNLGenTreeAnalyzer import HNLGenTreeAnalyzer from CMGTools.HNL.analyzers.RecoGenAnalyzer import RecoGenAnalyzer from CMGTools.HNL.analyzers.TriggerAnalyzer import TriggerAnalyzer from CMGTools.HNL.analyzers.JetAnalyzer import JetAnalyzer from CMGTools.HNL.analyzers.METFilter import METFilter from CMGTools.HNL.analyzers.LeptonWeighter import LeptonWeighter from pdb import set_trace ################################################### ### OPTIONS ### ################################################### # Get all heppy options; set via "-o production" or "-o production=True" # production = True run on batch, production = False (or unset) run locally production = getHeppyOption('production' , production) pick_events = getHeppyOption('pick_events', False) promptLeptonType = promptLeptonType # choose from 'ele' or 'mu' L1L2LeptonType = L1L2LeptonType #choose from 'ee', 'mm', 'em' ################################################### ### HANDLE SAMPLES ### ################################################### #samples = [comp for comp in samples if comp.name=='TTJets_amcat'] if promptLeptonType == 'ele': for sample in samples: sample.triggers = ['HLT_Ele27_WPTight_Gsf_v%d' %i for i in range(1, 15)] #electron trigger sample.triggers += ['HLT_Ele32_WPTight_Gsf_v%d' %i for i in range(1, 15)] #electron trigger sample.triggers += ['HLT_Ele35_WPTight_Gsf_v%d' %i for i in range(1, 15)] #electron trigger sample.triggers += ['HLT_Ele115_CaloIdVT_GsfTrkIdT_v%d' %i for i in range(1, 15)] #electron trigger sample.triggers += ['HLT_Ele135_CaloIdVT_GsfTrkIdT_v%d' %i for i in range(1, 15)] #electron trigger sample.splitFactor = splitFactor(sample, 1e5) if promptLeptonType == 'mu': for sample in samples: sample.triggers = ['HLT_IsoMu24_v%d' %i for i in range(1, 15)] #muon trigger sample.triggers += ['HLT_IsoMu27_v%d' %i for i in range(1, 15)] #muon trigger sample.triggers += ['HLT_Mu50_v%d' %i for i in range(1, 15)] #muon trigger sample.splitFactor = splitFactor(sample, 1e5) selectedComponents = samples ################################################### ### ANALYZERS ### ################################################### eventSelector = cfg.Analyzer( EventSelector, name='EventSelector', toSelect=[326] ) lheWeightAna = cfg.Analyzer( LHEWeightAnalyzer, name="LHEWeightAnalyzer", useLumiInfo=False ) jsonAna = cfg.Analyzer( JSONAnalyzer, name='JSONAnalyzer', ) skimAna = cfg.Analyzer( SkimAnalyzerCount, name='SkimAnalyzerCount' ) triggerAna = cfg.Analyzer( TriggerAnalyzer, name='TriggerAnalyzer', addTriggerObjects=True, requireTrigger=True, usePrescaled=False, unpackLabels=True, ) vertexAna = cfg.Analyzer( VertexAnalyzer, name='VertexAnalyzer', fixedWeight=1, keepFailingEvents=False, verbose=False ) pileUpAna = cfg.Analyzer( PileUpAnalyzer, name='PileUpAnalyzer', true=True ) metFilter = cfg.Analyzer( METFilter, name='METFilter', processName='PAT', #mschoene: Filters very much do exist in MC and most of them should be applied to MC as well, but not all! fallbackProcessName = 'RECO', triggers=[ 'Flag_goodVertices', 'Flag_globalSuperTightHalo2016Filter', 'Flag_HBHENoiseFilter', 'Flag_HBHENoiseIsoFilter', 'Flag_EcalDeadCellTriggerPrimitiveFilter', 'Flag_BadPFMuonFilter', 'Flag_BadChargedCandidateFilter', 'Flag_eeBadScFilter', 'Flag_ecalBadCalibFilter', ] ) HNLTreeProducer = cfg.Analyzer( HNLTreeProducer, name='HNLTreeProducer', L1L2LeptonType=L1L2LeptonType, promptLepType=promptLeptonType, ) HNLGenTreeAnalyzer = cfg.Analyzer( HNLGenTreeAnalyzer, name='HNLGenTreeAnalyzer', ) RecoGenAnalyzer = cfg.Analyzer( RecoGenAnalyzer, name='RecoGenAnalyzer', ) genAna = GeneratorAnalyzer.defaultConfig genAna.allGenTaus = True # save in event.gentaus *ALL* taus, regardless whether hadronic / leptonic decay # for each path specify which filters you want the electrons/muons to match to triggers_and_filters = OrderedDict() if promptLeptonType == 'ele': triggers_and_filters['HLT_Ele27_WPTight_Gsf'] = 'hltEle27WPTightGsfTrackIsoFilter' triggers_and_filters['HLT_Ele32_WPTight_Gsf'] = 'hltEle32WPTightGsfTrackIsoFilter' triggers_and_filters['HLT_Ele35_WPTight_Gsf'] = 'hltEle35noerWPTightGsfTrackIsoFilter' triggers_and_filters['HLT_Ele115_CaloIdVT_GsfTrkIdT'] = 'hltEle115CaloIdVTGsfTrkIdTGsfDphiFilter' triggers_and_filters['HLT_Ele135_CaloIdVT_GsfTrkIdT'] = 'hltEle135CaloIdVTGsfTrkIdTGsfDphiFilter' if promptLeptonType == 'mu': triggers_and_filters['HLT_IsoMu24'] = 'hltL3crIsoL1sSingleMu22L1f0L2f10QL3f24QL3trkIsoFiltered0p07' triggers_and_filters['HLT_IsoMu27'] = 'hltL3crIsoL1sMu22Or25L1f0L2f10QL3f27QL3trkIsoFiltered0p07' triggers_and_filters['HLT_Mu50'] = 'hltL3fL1sMu22Or25L1f0L2f10QL3Filtered50Q' # TODO: add (HLT_IsoTkMu24_v*) and (HLT_TkMu50_v*); but only later for 2016 dataset HNLAnalyzer = cfg.Analyzer( HNLAnalyzer, name='HNLAnalyzer', promptLepton=promptLeptonType, L1L2LeptonType=L1L2LeptonType, triggersAndFilters=triggers_and_filters, candidate_selection='maxpt', ) if promptLeptonType == 'ele': Weighter_l0 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l0', scaleFactorFiles={ 'trigger' :('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'e_trg_SingleEle_Ele32OREle35_desy'), 'idiso' :('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'e_id'), 'tracking':('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'e_iso'), }, dataEffFiles={ # 'trigger':('$CMSSW_BASE/src/CMGTools/H2TauTau/data/htt_scalefactors_v16_2.root', 'm_trgIsoMu22orTkIsoMu22_desy'), }, getter = lambda event : event.the_3lep_cand.l0(), disable=False ) if promptLeptonType == 'mu': Weighter_l0 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l0', scaleFactorFiles={ 'trigger' :('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'm_trg_SingleMu_Mu24ORMu27_desy'), 'idiso' :('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'm_id'), 'tracking':('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'm_iso'), }, dataEffFiles={ # 'trigger':('$CMSSW_BASE/src/CMGTools/H2TauTau/data/htt_scalefactors_v16_2.root', 'm_trgIsoMu22orTkIsoMu22_desy'), }, getter = lambda event : event.the_3lep_cand.l0(), disable=False ) if L1L2LeptonType == 'mm': Weighter_l1 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l1', scaleFactorFiles={ 'idiso' :('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'm_id'), 'tracking':('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'm_iso'), }, dataEffFiles={ # 'trigger':('$CMSSW_BASE/src/CMGTools/H2TauTau/data/htt_scalefactors_v16_2.root', 'm_trgIsoMu22orTkIsoMu22_desy'), }, getter = lambda event : event.the_3lep_cand.l1(), disable=True ) Weighter_l2 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l2', scaleFactorFiles={ 'idiso' :('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'm_id'), 'tracking':('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'm_iso'), }, dataEffFiles={ # 'trigger':('$CMSSW_BASE/src/CMGTools/H2TauTau/data/htt_scalefactors_v16_2.root', 'm_trgIsoMu22orTkIsoMu22_desy'), }, getter = lambda event : event.the_3lep_cand.l2(), disable=True ) if L1L2LeptonType == 'em': Weighter_l1 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l1', scaleFactorFiles={ 'idiso' :('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'e_id'), 'tracking':('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'e_iso'), }, dataEffFiles={ # 'trigger':('$CMSSW_BASE/src/CMGTools/H2TauTau/data/htt_scalefactors_v16_2.root', 'm_trgIsoMu22orTkIsoMu22_desy'), }, getter = lambda event : event.the_3lep_cand.l1(), disable=True ) Weighter_l2 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l2', scaleFactorFiles={ 'idiso' :('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'm_id'), 'tracking':('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'm_iso'), }, dataEffFiles={ # 'trigger':('$CMSSW_BASE/src/CMGTools/H2TauTau/data/htt_scalefactors_v16_2.root', 'm_trgIsoMu22orTkIsoMu22_desy'), }, getter = lambda event : event.the_3lep_cand.l2(), disable=True ) if L1L2LeptonType == 'ee': Weighter_l1 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l1', scaleFactorFiles={ 'idiso' :('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'e_id'), 'tracking':('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'e_iso'), }, dataEffFiles={ # 'trigger':('$CMSSW_BASE/src/CMGTools/H2TauTau/data/htt_scalefactors_v16_2.root', 'm_trgIsoMu22orTkIsoMu22_desy'), }, getter = lambda event : event.the_3lep_cand.l1(), disable=True ) Weighter_l2 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l2', scaleFactorFiles={ 'idiso' :('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'e_id'), 'tracking':('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_v17_1.root', 'e_iso'), }, dataEffFiles={ # 'trigger':('$CMSSW_BASE/src/CMGTools/H2TauTau/data/htt_scalefactors_v16_2.root', 'm_trgIsoMu22orTkIsoMu22_desy'), }, getter = lambda event : event.the_3lep_cand.l2(), disable=True ) # see SM HTT TWiki # https://twiki.cern.ch/twiki/bin/viewauth/CMS/SMTauTau2016#Jet_Energy_Corrections jetAna = cfg.Analyzer( JetAnalyzer, name = 'JetAnalyzer', jetCol = 'slimmedJets', jetPt = 20., jetEta = 5., relaxJetId = False, # relax = do not apply jet ID relaxPuJetId = True, # relax = do not apply pileup jet ID jerCorr = False, puJetIDDisc = 'pileupJetId:fullDiscriminant', recalibrateJets = False, applyL2L3Residual = 'MC', # RM: FIXME! check the GTs # mcGT = '94X_mc2017_realistic_v14', # dataGT = '94X_dataRun2_v6', #jesCorr = 1., # Shift jet energy scale in terms of uncertainties (1 = +1 sigma) ) ################################################### ### SEQUENCE ### ################################################### if isData == True: sequence = cfg.Sequence([ # eventSelector, jsonAna, skimAna, triggerAna, vertexAna, pileUpAna, HNLAnalyzer, jetAna, metFilter, HNLTreeProducer, ]) if isData == False: if isSignal == True: sequence = cfg.Sequence([ # eventSelector, lheWeightAna, # les houches jsonAna, skimAna, triggerAna, vertexAna, pileUpAna, genAna, HNLGenTreeAnalyzer, # RecoGenAnalyzer, HNLAnalyzer, Weighter_l0, Weighter_l1, Weighter_l2, jetAna, metFilter, HNLTreeProducer, ]) if isSignal == False: sequence = cfg.Sequence([ # eventSelector, lheWeightAna, # les houches jsonAna, skimAna, triggerAna, vertexAna, pileUpAna, genAna, HNLGenTreeAnalyzer, HNLAnalyzer, Weighter_l0, Weighter_l1, Weighter_l2, jetAna, metFilter, HNLTreeProducer, ]) ################################################### ### SET BATCH OR LOCAL ### ################################################### if not production: # comp = HN3L_M_2p5_V_0p0173205080757_e_onshell # comp = HN3L_M_2p5_V_0p00707106781187_e_onshell # comp = all_signals_e[0] # comp = DYJetsToLL_M50 comp = samples[0] # comp = samples # comp = ttbar # comp = bkg selectedComponents = [comp] comp.splitFactor = 1 comp.fineSplitFactor = 1 comp.files = comp.files[:1] ################################################### ### PREPROCESSOR ### ################################################### preprocessor = None #temporary copy remote files using xrd from PhysicsTools.HeppyCore.framework.eventsfwlite import Events from CMGTools.HNL.utils.EOSEventsWithDownload import EOSEventsWithDownload event_class = EOSEventsWithDownload if not preprocessor else Events EOSEventsWithDownload.aggressive = 2 # always fetch if running on Wigner EOSEventsWithDownload.long_cache = getHeppyOption('long_cache', False) if preprocessor: preprocessor.prefetch = prefetch # if extrap_muons_to_L1: # fname = '$CMSSW_BASE/src/CMGTools/WTau3Mu/prod/muon_extrapolator_cfg.py' # sequence.append(fileCleaner) # preprocessor = CmsswPreprocessor(fname, addOrigAsSecondary=False) # if compute_mvamet: # fname = '$CMSSW_BASE/src/CMGTools/WTau3Mu/prod/compute_mva_met_data_cfg.py' # sequence.append(fileCleaner) # preprocessor = CmsswPreprocessor(fname, addOrigAsSecondary=False) # the following is declared in case this cfg is used in input to the heppy.py script config = cfg.Config( components = selectedComponents, sequence = sequence, services = [], preprocessor = preprocessor, events_class = event_class ) printComps(config.components, True) return config
def generateKeyConfigs( samples, promptLeptonType, L1L2LeptonType, isData, isSignal, prefetch=False, year=2018, toSelect=[], saveBigTree=True, ): import os from copy import deepcopy as dc from collections import OrderedDict import PhysicsTools.HeppyCore.framework.config as cfg from PhysicsTools.HeppyCore.framework.config import printComps from PhysicsTools.HeppyCore.framework.heppy_loop import getHeppyOption from PhysicsTools.Heppy.utils.cmsswPreprocessor import CmsswPreprocessor from PhysicsTools.HeppyCore.framework.eventsfwlite import Events from CMGTools.HNL.utils.EOSEventsWithDownload import EOSEventsWithDownload from CMGTools.RootTools.utils.splitFactor import splitFactor # import Heppy analyzers: from PhysicsTools.Heppy.analyzers.core.EventSelector import EventSelector from PhysicsTools.Heppy.analyzers.objects.VertexAnalyzer import VertexAnalyzer from PhysicsTools.Heppy.analyzers.gen.GeneratorAnalyzer import GeneratorAnalyzer # from PhysicsTools.Heppy.analyzers.gen.LHEWeightAnalyzer import LHEWeightAnalyzer # import HNL analyzers: from CMGTools.HNL.analyzers.PileUpAnalyzer import PileUpAnalyzer from CMGTools.HNL.analyzers.JSONAnalyzer import JSONAnalyzer from CMGTools.HNL.analyzers.SkimAnalyzerCount import SkimAnalyzerCount from CMGTools.HNL.analyzers.HNLAnalyzer import HNLAnalyzer from CMGTools.HNL.analyzers.HNLTreeProducer import HNLTreeProducer from CMGTools.HNL.analyzers.HNLTreeProducerBase import HNLTreeProducerBase from CMGTools.HNL.analyzers.HNLGenTreeAnalyzer import HNLGenTreeAnalyzer from CMGTools.HNL.analyzers.HNLSignalReweighter import HNLSignalReweighter from CMGTools.HNL.analyzers.RecoGenAnalyzer import RecoGenAnalyzer from CMGTools.HNL.analyzers.TriggerAnalyzer import TriggerAnalyzer from CMGTools.HNL.analyzers.JetAnalyzer import JetAnalyzer from CMGTools.HNL.analyzers.METFilter import METFilter from CMGTools.HNL.analyzers.LeptonWeighter import LeptonWeighter from pdb import set_trace ################################################### ### OPTIONS ### ################################################### # Get all heppy options; set via "-o production" or "-o production=True" # production = True run on batch, production = False (or unset) run locally pick_events = getHeppyOption('pick_events', False) if year == 2017: SF_FILE = 'htt_scalefactors_v17_1.root' # Electron corrections, valid for l1 and l2 ELE_SFS = OrderedDict() ELE_SFS['idiso'] = ('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/' + SF_FILE, 'e_id') ELE_SFS['tracking'] = ('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/' + SF_FILE, 'e_iso') # Add trigger corrections for the prompt lepton l0 ELE_PROMPT_SFS = ELE_SFS ELE_PROMPT_SFS['trigger'] = ( '$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/' + SF_FILE, 'e_trg_SingleEle_Ele32OREle35_desy') # Muon corrections, valid for l1 and l2 MU_SFS = OrderedDict() MU_SFS['idiso'] = ('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/' + SF_FILE, 'm_id') MU_SFS['tracking'] = ('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/' + SF_FILE, 'm_iso') # Add trigger corrections for the prompt lepton l0 MU_PROMPT_SFS = MU_SFS MU_PROMPT_SFS['trigger'] = ( '$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/' + SF_FILE, 'm_trg_SingleMu_Mu24ORMu27_desy') if year == 2018: SF_FILE = 'htt_scalefactors_2018_v1.root' # Electron corrections, valid for l1 and l2 ELE_SFS = OrderedDict() ELE_SFS['idiso'] = ('$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/' + SF_FILE, 'e_idiso_desy') # Add trigger corrections for the prompt lepton l0 ELE_PROMPT_SFS = dc(ELE_SFS) ELE_PROMPT_SFS['trigger'] = ( '$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/' + SF_FILE, 'e_trgEle32orEle35_desy') # Muon corrections, valid for l1 and l2 MU_SFS = OrderedDict() MU_SFS['idiso'] = ( '$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_2018_v1.root', 'm_idiso_desy') # Add trigger corrections for the prompt lepton l0 MU_PROMPT_SFS = dc(MU_SFS) MU_PROMPT_SFS['trigger'] = ( '$CMSSW_BASE/src/CMGTools/HNL/data/leptonsf/htt_scalefactors_2018_v1.root', 'm_trgIsoMu24orIsoMu27_desy') ################################################### ### HANDLE SAMPLES ### ################################################### # FIXME! are trigger names and filters correct regardless of the year? if promptLeptonType == 'e': for sample in samples: sample.triggers = [ 'HLT_Ele27_WPTight_Gsf_v%d' % i for i in range(1, 15) ] #electron trigger sample.triggers += [ 'HLT_Ele32_WPTight_Gsf_v%d' % i for i in range(1, 15) ] #electron trigger sample.triggers += [ 'HLT_Ele35_WPTight_Gsf_v%d' % i for i in range(1, 15) ] #electron trigger sample.triggers += [ 'HLT_Ele115_CaloIdVT_GsfTrkIdT_v%d' % i for i in range(1, 15) ] #electron trigger sample.triggers += [ 'HLT_Ele135_CaloIdVT_GsfTrkIdT_v%d' % i for i in range(1, 15) ] #electron trigger sample.splitFactor = splitFactor(sample, 1e6) # triggers same for 2018: https://tomc.web.cern.ch/tomc/triggerPrescales/2018//?match=Ele if promptLeptonType == 'm': for sample in samples: sample.triggers = ['HLT_IsoMu24_v%d' % i for i in range(1, 15)] #muon trigger sample.triggers += ['HLT_IsoMu27_v%d' % i for i in range(1, 15)] #muon trigger sample.triggers += ['HLT_Mu50_v%d' % i for i in range(1, 15)] #muon trigger sample.splitFactor = splitFactor(sample, 1e6) # triggers same for 2018: https://tomc.web.cern.ch/tomc/triggerPrescales/2018//?match=Ele selectedComponents = samples ################################################### ### ANALYZERS ### ################################################### eventSelector = cfg.Analyzer( EventSelector, name='EventSelector', toSelect=toSelect, ) # lheWeightAna = cfg.Analyzer( # LHEWeightAnalyzer, name="LHEWeightAnalyzer", # useLumiInfo=False # ) jsonAna = cfg.Analyzer( JSONAnalyzer, name='JSONAnalyzer', ) skimAna = cfg.Analyzer(SkimAnalyzerCount, name='SkimAnalyzerCount') signalReweighAna = cfg.Analyzer(HNLSignalReweighter, name='HNLSignalReweighter') triggerAna = cfg.Analyzer( TriggerAnalyzer, name='TriggerAnalyzer', addTriggerObjects=True, requireTrigger=True, usePrescaled=False, unpackLabels=True, ) vertexAna = cfg.Analyzer(VertexAnalyzer, name='VertexAnalyzer', fixedWeight=1, keepFailingEvents=False, verbose=False) pileUpAna = cfg.Analyzer(PileUpAnalyzer, name='PileUpAnalyzer', true=True) metFilter = cfg.Analyzer( METFilter, name='METFilter', processName= 'PAT', #mschoene: Filters very much do exist in MC and most of them should be applied to MC as well, but not all! fallbackProcessName='RECO', triggers=[ 'Flag_goodVertices', 'Flag_globalSuperTightHalo2016Filter', 'Flag_HBHENoiseFilter', 'Flag_HBHENoiseIsoFilter', 'Flag_EcalDeadCellTriggerPrimitiveFilter', 'Flag_BadPFMuonFilter', 'Flag_BadChargedCandidateFilter', 'Flag_eeBadScFilter', 'Flag_ecalBadCalibFilter', ]) HNLTreeProducer = cfg.Analyzer( HNLTreeProducer, name='HNLExtendedTreeProducer', L1L2LeptonType=L1L2LeptonType, promptLepType=promptLeptonType, ) HNLTreeProducerBase = cfg.Analyzer( HNLTreeProducerBase, name='HNLTreeProducer', L1L2LeptonType=L1L2LeptonType, promptLepType=promptLeptonType, skimFunction= 'event.the_3lep_cand.charge12()==0 and event.the_3lep_cand.mass12()<12 and event.recoSv.disp2DFromBS_cos>0.' ) HNLGenTreeAnalyzer = cfg.Analyzer( HNLGenTreeAnalyzer, name='HNLGenTreeAnalyzer', ) RecoGenAnalyzer = cfg.Analyzer( RecoGenAnalyzer, name='RecoGenAnalyzer', ) genAna = GeneratorAnalyzer.defaultConfig genAna.allGenTaus = True # save in event.gentaus *ALL* taus, regardless whether hadronic / leptonic decay # for each path specify which filters you want the electrons/muons to match to triggers_and_filters = OrderedDict() if promptLeptonType == 'e': triggers_and_filters[ 'HLT_Ele27_WPTight_Gsf'] = 'hltEle27WPTightGsfTrackIsoFilter' triggers_and_filters[ 'HLT_Ele32_WPTight_Gsf'] = 'hltEle32WPTightGsfTrackIsoFilter' triggers_and_filters[ 'HLT_Ele35_WPTight_Gsf'] = 'hltEle35noerWPTightGsfTrackIsoFilter' triggers_and_filters[ 'HLT_Ele115_CaloIdVT_GsfTrkIdT'] = 'hltEle115CaloIdVTGsfTrkIdTGsfDphiFilter' triggers_and_filters[ 'HLT_Ele135_CaloIdVT_GsfTrkIdT'] = 'hltEle135CaloIdVTGsfTrkIdTGsfDphiFilter' if promptLeptonType == 'm': triggers_and_filters[ 'HLT_IsoMu24'] = 'hltL3crIsoL1sSingleMu22L1f0L2f10QL3f24QL3trkIsoFiltered0p07' triggers_and_filters[ 'HLT_IsoMu27'] = 'hltL3crIsoL1sMu22Or25L1f0L2f10QL3f27QL3trkIsoFiltered0p07' triggers_and_filters[ 'HLT_Mu50'] = 'hltL3fL1sMu22Or25L1f0L2f10QL3Filtered50Q' # TODO: add (HLT_IsoTkMu24_v*) and (HLT_TkMu50_v*); but only later for 2016 dataset # Here we define the baseline selection for muons and electrons. # These are the minimal requirements that leptons need to satisfy to be considered # in building HNL candidates and be saved in the ntuples def preselect_mu(imu): if imu.pt() < 5.: return False if abs(imu.eta()) > 2.4: return False if imu.relIsoFromEA(0.3) > 10: return False if not (imu.isSoftMuon(imu.associatedVertex) or \ imu.muonID('POG_ID_Loose') or \ imu.Medium == 1): return False return True def preselect_ele(iele): if iele.pt() < 5.: return False if abs(iele.eta()) > 2.5: return False if iele.relIsoFromEA(0.3) > 10: return False if not (iele.LooseNoIsoID or \ iele.electronID("MVA_ID_nonIso_Fall17_Loose")): return False return True HNLAnalyzer = cfg.Analyzer( HNLAnalyzer, name='HNLAnalyzer', promptLepton=promptLeptonType, L1L2LeptonType=L1L2LeptonType, triggersAndFilters=triggers_and_filters, candidate_selection='maxpt', muon_preselection=preselect_mu, ele_preselection=preselect_ele, ) if promptLeptonType == 'e': Weighter_l0 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l0', scaleFactorFiles=ELE_PROMPT_SFS, dataEffFiles={}, getter=lambda event: event.the_3lep_cand.l0(), disable=False) if promptLeptonType == 'm': Weighter_l0 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l0', scaleFactorFiles=MU_PROMPT_SFS, dataEffFiles={}, getter=lambda event: event.the_3lep_cand.l0(), disable=False) if L1L2LeptonType == 'mm': Weighter_l1 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l1', scaleFactorFiles=MU_SFS, dataEffFiles={}, getter=lambda event: event.the_3lep_cand.l1(), disable=False, ) Weighter_l2 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l2', scaleFactorFiles=MU_SFS, dataEffFiles={}, getter=lambda event: event.the_3lep_cand.l2(), disable=False, ) if L1L2LeptonType == 'em': Weighter_l1 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l1', scaleFactorFiles=ELE_SFS, dataEffFiles={}, getter=lambda event: event.the_3lep_cand.l1(), disable=False, ) Weighter_l2 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l2', scaleFactorFiles=MU_SFS, dataEffFiles={}, getter=lambda event: event.the_3lep_cand.l2(), disable=False) if L1L2LeptonType == 'ee': Weighter_l1 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l1', scaleFactorFiles=ELE_SFS, dataEffFiles={}, getter=lambda event: event.the_3lep_cand.l1(), disable=False) Weighter_l2 = cfg.Analyzer( LeptonWeighter, name='LeptonWeighter_l2', scaleFactorFiles=ELE_SFS, dataEffFiles={}, getter=lambda event: event.the_3lep_cand.l2(), disable=False) # see SM HTT TWiki # https://twiki.cern.ch/twiki/bin/viewauth/CMS/SMTauTau2016#Jet_Energy_Corrections jetAna = cfg.Analyzer( JetAnalyzer, name='JetAnalyzer', jetCol='slimmedJets', jetPt=20., jetEta=5., relaxJetId=False, # relax = do not apply jet ID relaxPuJetId=True, # relax = do not apply pileup jet ID jerCorr=False, puJetIDDisc='pileupJetId:fullDiscriminant', recalibrateJets=False, applyL2L3Residual='MC', # RM: FIXME! check the GTs # mcGT = '94X_mc2017_realistic_v14', # dataGT = '94X_dataRun2_v6', #jesCorr = 1., # Shift jet energy scale in terms of uncertainties (1 = +1 sigma) ) ################################################### ### SEQUENCE ### ################################################### if isData == True: sequence = cfg.Sequence([ jsonAna, # skimAna, triggerAna, vertexAna, # pileUpAna, HNLAnalyzer, jetAna, metFilter, HNLTreeProducerBase, ]) if isData == False: if isSignal == True: sequence = cfg.Sequence([ # lheWeightAna, # les houches #jsonAna, skimAna, signalReweighAna, triggerAna, vertexAna, pileUpAna, genAna, HNLGenTreeAnalyzer, # RecoGenAnalyzer, HNLAnalyzer, Weighter_l0, Weighter_l1, Weighter_l2, jetAna, metFilter, HNLTreeProducerBase, ]) if isSignal == False: sequence = cfg.Sequence([ # lheWeightAna, # les houches #jsonAna, skimAna, triggerAna, vertexAna, pileUpAna, genAna, HNLGenTreeAnalyzer, HNLAnalyzer, Weighter_l0, Weighter_l1, Weighter_l2, jetAna, metFilter, HNLTreeProducerBase, ]) if saveBigTree: sequence.insert(-1, HNLTreeProducer) if len(toSelect): print 'Cherry picking the following events to process:' for iev in toSelect: print '\t', iev sequence.insert(0, eventSelector) ################################################### ### PREPROCESSOR ### ################################################### # temporary copy remote files using xrd # event_class = EOSEventsWithDownload if prefetch else Events # FIXME! for some reason, Events doesn't work anymore in 10_4 event_class = EOSEventsWithDownload if prefetch: EOSEventsWithDownload.aggressive = 2 # always fetch if running on Wigner EOSEventsWithDownload.long_cache = getHeppyOption('long_cache', False) # the following is declared in case this cfg is used in input to the heppy.py script # from PhysicsTools.HeppyCore.framework.eventsfwlite import Events config = cfg.Config(components=selectedComponents, sequence=sequence, services=[], preprocessor=None, events_class=event_class) printComps(config.components, True) return config
scribbler_options = dict(datamc = datamc, pd = True, gen_process = False) buildEventSelection_options = dict(path_cfg = event_selection_path_cfg_tree_production) sequence = buildSequence(datamc, scribbler_options, buildEventSelection_options, bunchSpacing = '25ns', runPreProcessor = runPreProcessor ) sequence = cfg.Sequence(sequence) ##__________________________________________________________________|| if runPreProcessor: from PhysicsTools.Heppy.utils.cmsswPreprocessor import CmsswPreprocessor preprocessorFile = "$CMSSW_BASE/src/CMGTools/RA1/python/preprocessorConfigs/runBTaggingSlimPreprocessor_cfg.py" preprocessor = CmsswPreprocessor(preprocessorFile) else: preprocessor = None ##__________________________________________________________________|| # the following is declared in case this cfg is used in input to the # heppy.py script from CMGTools.RA1.framework.AtEvents import AtEvents config = cfg.Config(components = components, sequence = sequence, preprocessor = preprocessor, services = [], events_class = AtEvents) ##__________________________________________________________________||
output_service = cfg.Service(TFileService, 'outputfile', name="outputfile", fname='tree.root', option='recreate') #finalization of the configuration object. from PhysicsTools.HeppyCore.framework.chain import Chain as Events config = cfg.Config( #Run across these inputs components=[], #Using this sequence sequence=sequence, #save output to these services services=[output_service], #This defines how events are loaded events_class=Events) if __name__ == "__main__": print "Running MEAnalysis heppy main loop" #input component #several input components can be declared, #and added to the list of selected components def prepareInputSamples(sampleFile=conf.general["sampleFile"]): print "loading samples from", sampleFile samplefile = imp.load_source("samplefile", sampleFile)
elif os.environ.get("SAMPLE", "tth") == "ttjets": fns = map(getSitePrefix, [ "/store/user/jpata/tth/Sep29_v1/TTToSemilepton_TuneCUETP8M2_ttHtranche3_13TeV-powheg-pythia8/Sep29_v1/161005_125253/0000/tree_1.root" ]) dataset = "TTToSemilepton_TuneCUETP8M2_ttHtranche3_13TeV-powheg-pythia8" firstEvent = 0 nEvents = 1000 print "files", fns config = cfg.Config( #Run across these inputs components=[ cfg.MCComponent( dataset, files=fns, tree_name="vhbb/tree", ) ], sequence=sequence, services=[output_service], events_class=Events, ) from PhysicsTools.HeppyCore.framework.looper import Looper looper = Looper( 'Loop', config, nPrint=0, firstEvent=firstEvent, nEvents=nEvents, ) looper.loop()
import imp handle = open("heppy_config.py", 'r') cfo = imp.load_source("heppy_config", "heppy_config.py", handle) #config = cfo.config cfg = cfo.cfg seq = cfo.sequence pre = cfo.preprocessor handle.close() from PhysicsTools.HeppyCore.framework.eventsfwlite import Events print "creating config with ", [comp], seq config = cfg.Config(components=[comp], sequence=seq, preprocessor=pre, services=[], events_class=Events) #replace files with crab ones config.components[0].files = crabFiles print crabFiles # # transfer lumisToProcess parameter to heppy config, if present # if hasattr(PSet.process.source, "lumisToProcess"): print "Found CRAB lumi mask: ", PSet.process.source.lumisToProcess.value() from FWCore.PythonUtilities.LumiList import LumiList compList = {}