def getBaseConfig( globaltag, testfile, maxevents, nickname, outputfilename, channel='mm', is_data=None, ): # Config parameters ############################################## cmssw_version = os.environ["CMSSW_VERSION"].split('_') cmssw_version = tuple([int(i) for i in cmssw_version[1:4]] + cmssw_version[4:]) autostr = "" if globaltag.lower() == 'auto': from Configuration.AlCa.autoCond import autoCond globaltag = autoCond['startup'] autostr = " (from autoCond)" if is_data is None: data = any([name in testfile[0] for name in 'SingleMu', 'DoubleMu', 'DoubleElectron', 'MuEG']) else: data = is_data miniaod = False ## print information print "\n------- CONFIGURATION 1 ---------" print "input: ", testfile[0], "... (%d files)" % len(testfile) if len(testfile) > 1 else "" print "file type: ", "miniAOD" if miniaod else "AOD" print "data: ", data print "output: ", outputfilename print "nickname: ", nickname print "global tag: ", globaltag + autostr print "max events: ", maxevents print "cmssw version: ", '.'.join([str(i) for i in cmssw_version]) print "channel: ", channel print "---------------------------------" print ############################################################################ # Basic Process Setup ############################################################################ process = cms.Process("KAPPA") ## MessageLogger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.default = cms.untracked.PSet( ERROR = cms.untracked.PSet(limit = cms.untracked.int32(5)) #suppressError = cms.untracked.vstring("electronIdMVAProducer") ) process.MessageLogger.cerr.FwkReport.reportEvery = 50 ## Options and Output Report process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) ## Source process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring() ) ## Maximal number of Events process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) ) ## Geometry and Detector Conditions (needed for a few patTuple production steps) import Kappa.Skimming.tools as tools cmssw_version_number = tools.get_cmssw_version_number() process.load("Configuration.Geometry.GeometryIdeal_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") from Configuration.AlCa.autoCond import autoCond process.GlobalTag.globaltag = cms.string(autoCond['startup']) # print the global tag until it is clear whether this auto global tag is fine print "GT from autoCond:", process.GlobalTag.globaltag process.load("Configuration.StandardSequences.MagneticField_cff") ############################################################################ # KAPPA ############################################################################ process.load('Kappa.Producers.KTuple_cff') process.kappaTuple = cms.EDAnalyzer('KTuple', process.kappaTupleDefaultsBlock, outputFile = cms.string("kappaTuple.root"), ) process.kappaTuple.active = cms.vstring() process.kappaTuple.outputFile = outputfilename ## name of output file process.kappaTuple.verbose = 0 ## verbosity level process.kappaTuple.profile = cms.bool(False) process.kappaOut = cms.Sequence(process.kappaTuple) process.path = cms.Path() process.source.fileNames = testfile process.maxEvents.input = maxevents ## number of events to be processed (-1 = all in file) if not globaltag.lower() == 'auto' : process.GlobalTag.globaltag = globaltag data = datasetsHelper.isData(nickname) process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) ) ############################################################################ # Basic Objects ############################################################################ process.kappaTuple.active += cms.vstring('VertexSummary') ## save VertexSummary, process.kappaTuple.VertexSummary.whitelist = cms.vstring('goodOfflinePrimaryVertices') #process.kappaTuple.active += cms.vstring('BeamSpot') ## save Beamspot, #process.kappaTuple.active += cms.vstring('TriggerObjects') if data: process.kappaTuple.active+= cms.vstring('DataInfo') ## produce Metadata for data, else: process.kappaTuple.active+= cms.vstring('GenInfo') ## produce Metadata for MC, process.kappaTuple.active+= cms.vstring('GenParticles') #Trigger trigger_dict = { 'mtrigger': ['^HLT_(Double)?Mu([0-9]+)_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$'], 'etrigger': ['HLT_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*'], 'emtrigger': ["HLT_Mu17_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*", "HLT_Mu8_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*",] } channel_dict = { 'ee': ['etrigger'], 'mm': ['mtrigger'], 'eemm': ['etrigger', 'mtrigger'], 'em': ['emtrigger'] } process.kappaTuple.Info.hltWhitelist = cms.vstring("") for triggers in channel_dict[channel]: for trigger in trigger_dict[triggers]: process.kappaTuple.Info.hltWhitelist += cms.vstring(trigger) ############################################################################ # PFCandidates ############################################################################ process.load('Kappa.Skimming.KPFCandidates_cff') process.path *= ( process.goodOfflinePrimaryVertices * process.pfPileUp * process.pfNoPileUp #* process.makePFBRECO #* process.makeKappaPFCandidates ) if 'm' in channel: ############################################################################ # Muons ############################################################################ process.kappaTuple.active += cms.vstring('Muons') ## produce/save KappaMuons process.kappaTuple.Muons.minPt = cms.double(8.0) ## Isodeposits for muons process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi') process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi') process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi') process.pfmuIsoDepositPFCandidates = cms.EDProducer( "CandIsoDepositProducer", src = cms.InputTag("muons"), MultipleDepositsFlag = cms.bool(False), trackType = cms.string('candidate'), ExtractorPSet = cms.PSet( Diff_z = cms.double(99999.99), ComponentName = cms.string('CandViewExtractor'), DR_Max = cms.double(1.0), Diff_r = cms.double(99999.99), inputCandView = cms.InputTag("particleFlow"), DR_Veto = cms.double(1e-05), DepositLabel = cms.untracked.string('') ) ) process.path *= (process.pfmuIsoDepositPFCandidates) process.goodMuons = cms.EDFilter('CandViewSelector', src = cms.InputTag('muons'), cut = cms.string("pt > 15.0"), ) process.oneGoodMuon = cms.EDFilter('CandViewCountFilter', src = cms.InputTag('goodMuons'), minNumber = cms.uint32(1), ) process.twoGoodMuons = cms.EDFilter('CandViewCountFilter', src = cms.InputTag('goodMuons'), minNumber = cms.uint32(2), ) if 'mm' in channel: process.path *= (process.goodMuons * process.twoGoodMuons) if 'e' in channel: ############################################################################ # Electrons ############################################################################ #TODO Add Electron process.load('EgammaAnalysis.ElectronTools.electronIdMVAProducer_cfi') process.load('TrackingTools.TransientTrack.TransientTrackBuilder_cfi') process.load('PhysicsTools.PatAlgos.producersLayer1.electronProducer_cfi') process.patElectrons.electronIDSources = cms.PSet( ## default cut based Id eidRobustLoose = cms.InputTag("eidRobustLoose" ), eidRobustTight = cms.InputTag("eidRobustTight" ), eidLoose = cms.InputTag("eidLoose" ), eidTight = cms.InputTag("eidTight" ), eidRobustHighEnergy = cms.InputTag("eidRobustHighEnergy"), ## MVA based Id idMvaTrigV0 = cms.InputTag("mvaTrigV0" ), idMvaTrigNoIPV0 = cms.InputTag("mvaTrigNoIPV0" ), idMvaNonTrigV0 = cms.InputTag("mvaNonTrigV0" ), ) process.patElectrons.genParticleMatch = "" process.patElectrons.addGenMatch = False process.patElectrons.embedGenMatch = False process.patElectrons.embedGsfElectronCore = True process.patElectrons.embedGsfTrack = True process.patElectrons.embedSuperCluster = True process.patElectrons.embedPflowSuperCluster = True process.patElectrons.embedSeedCluster = True process.patElectrons.embedBasicClusters = True process.patElectrons.embedPreshowerClusters = True process.patElectrons.embedPflowBasicClusters = True process.patElectrons.embedPflowPreshowerClusters = True process.patElectrons.embedPFCandidate = True process.patElectrons.embedTrack = True process.patElectrons.embedRecHits = True process.patElectrons.embedHighLevelSelection.pvSrc = "goodOfflinePrimaryVertices" process.electronIdMVA = cms.Sequence( process.mvaTrigV0+ process.mvaTrigNoIPV0+ process.mvaNonTrigV0 ) process.makeKappaElectrons = cms.Sequence( process.electronIdMVA * process.patElectrons ) process.path *= (process.makeKappaElectrons) ## CALIBRATIONS # momentum corrections process.load('EgammaAnalysis.ElectronTools.electronRegressionEnergyProducer_cfi') process.eleRegressionEnergy.inputElectronsTag = cms.InputTag('patElectrons') process.eleRegressionEnergy.inputCollectionType = cms.uint32(1) process.load("Configuration.StandardSequences.Services_cff") process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService", calibratedPatElectrons = cms.PSet( initialSeed = cms.untracked.uint32(1), engineName = cms.untracked.string('TRandom3') ), ) # calibrate pat electrons process.load("EgammaAnalysis.ElectronTools.calibratedPatElectrons_cfi") if data: inputDataset = "22Jan2013ReReco" else: #inputDataset = "Summer12_DR53X_HCP2012" inputDataset = "Summer12_LegacyPaper" print "Using electron calibration", inputDataset process.calibratedPatElectrons.inputDataset = cms.string(inputDataset) process.calibratedPatElectrons.isMC = cms.bool(not data) ## for cutbased ID from CommonTools.ParticleFlow.Tools.pfIsolation import setupPFElectronIso, setupPFMuonIso process.calibeleIsoSequence = setupPFElectronIso(process, 'calibratedPatElectrons', "PFIsoCal") process.eleIsoSequence = setupPFElectronIso(process, 'patElectrons') process.pfiso = cms.Sequence(process.pfParticleSelectionSequence + process.eleIsoSequence + process.calibeleIsoSequence ) # rho for e isolation from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets process.kt6PFJetsForIsolation = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True ) process.kt6PFJetsForIsolation.Rho_EtaMax = cms.double(2.5) process.path *= ( process.eleRegressionEnergy * process.calibratedPatElectrons * process.pfiso * process.kt6PFJetsForIsolation ) #add to Kappa process.kappaTuple.active += cms.vstring('Electrons') process.kappaTuple.Electrons = cms.PSet( process.kappaNoCut, process.kappaNoRegEx, ids = cms.vstring(), srcIds = cms.string("pat"), electrons = cms.PSet( src = cms.InputTag("patElectrons"), allConversions = cms.InputTag("allConversions"), offlineBeamSpot = cms.InputTag("offlineBeamSpot"), vertexcollection = cms.InputTag("goodOfflinePrimaryVertices"), isoValInputTags = cms.VInputTag( cms.InputTag('elPFIsoValueChargedAll04PFIdPFIso'), cms.InputTag('elPFIsoValueGamma04PFIdPFIso'), cms.InputTag('elPFIsoValueNeutral04PFIdPFIso'), cms.InputTag('elPFIsoValuePU04PFIdPFIso')), rhoIsoInputTag = cms.InputTag("kt6PFJetsForIsolation", "rho"), ), ) process.kappaTuple.Electrons.correlectrons = process.kappaTuple.Electrons.electrons.clone( src = cms.InputTag("calibratedPatElectrons"), isoValInputTags = cms.VInputTag( cms.InputTag('elPFIsoValueChargedAll04PFIdPFIsoCal'), cms.InputTag('elPFIsoValueGamma04PFIdPFIsoCal'), cms.InputTag('elPFIsoValueNeutral04PFIdPFIsoCal'), cms.InputTag('elPFIsoValuePU04PFIdPFIsoCal')), ) #process.kappaTuple.Electrons.ids = cms.VInputTag("mvaTrigV0", "mvaTrigNoIPV0", "mvaNonTrigV0") process.kappaTuple.Electrons.ids = cms.VInputTag('idMvaNonTrigV0', 'idMvaTrigNoIPV0', 'idMvaTrigV0') process.kappaTuple.Electrons.minPt = cms.double(8.0) ### Filter process.goodElectrons = cms.EDFilter('CandViewSelector', src = cms.InputTag('calibratedPatElectrons'), cut = cms.string("pt > 15.0"), ) process.oneGoodElectron = cms.EDFilter('CandViewCountFilter', src = cms.InputTag('goodElectrons'), minNumber = cms.uint32(1), ) process.twoGoodElectrons = cms.EDFilter('CandViewCountFilter', src = cms.InputTag('goodElectrons'), minNumber = cms.uint32(2), ) if 'ee' in channel: process.path *= (process.goodElectrons * process.twoGoodElectrons) if 'em' in channel: process.path *= (process.goodElectrons * process.oneGoodElectron * process.goodMuons * process.oneGoodMuon) ############################################################################ # Jets ############################################################################ process.load('RecoJets.JetProducers.ak5PFJets_cfi') process.ak5PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') process.ak5PFJetsCHS = process.ak5PFJets.clone( src = cms.InputTag('pfNoPileUp') ) process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity') process.kappaTuple.Jets = cms.PSet( process.kappaNoCut, process.kappaNoRegEx, taggers = cms.vstring(), ak5PFJets = cms.PSet( src = cms.InputTag('ak5PFJets'), QGtagger = cms.InputTag('AK5PFJetsQGTagger'), Btagger = cms.InputTag('ak5PF'), PUJetID = cms.InputTag('ak5PFPuJetMva'), PUJetID_full = cms.InputTag('full'), ), ak5PFJetsCHS = cms.PSet( src = cms.InputTag('ak5PFJetsCHS'), QGtagger = cms.InputTag('AK5PFJetsCHSQGTagger'), Btagger = cms.InputTag('ak5PFCHS'), PUJetID = cms.InputTag('ak5PFCHSPuJetMva'), PUJetID_full = cms.InputTag('full'), ), ) process.kappaTuple.Jets.minPt = cms.double(5.0) if not data: process.load('RecoJets.JetProducers.ak5GenJets_cfi') process.path *= ( process.genParticlesForJetsNoNu * process.ak5GenJetsNoNu ) process.kappaTuple.active += cms.vstring('LV') process.kappaTuple.LV.rename = cms.vstring('ak => AK') process.kappaTuple.LV.whitelist = cms.vstring('ak5GenJetsNoNu') # add kt6PFJets, needed for the PileupDensity from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets process.kt6PFJets = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True ) process.kt6PFJets.Rho_EtaMax = cms.double(2.5) process.path *= ( process.ak5PFJets * process.ak5PFJetsCHS * process.kt6PFJets ) ############################################################################ # MET ############################################################################ # MET correction ---------------------------------------------------------- process.load('JetMETCorrections.Type1MET.pfMETCorrectionType0_cfi') process.path *= ( process.type0PFMEtCorrection ) #TODO check type 0 corrections process.kappaTuple.active += cms.vstring('MET') ## produce/save KappaPFMET process.kappaTuple.MET.whitelist = cms.vstring('pfChMet', '_pfMet_') if cmssw_version_number.startswith("5"): # MET correction ---------------------------------------------------------- process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff") process.pfchsMETcorr.src = cms.InputTag('goodOfflinePrimaryVertices') # Type-0 process.pfMETCHS = process.pfType1CorrectedMet.clone( applyType1Corrections = cms.bool(False), applyType0Corrections = cms.bool(True) ) # MET Path process.path *= ( process.producePFMETCorrections * process.pfMETCHS ) process.kappaTuple.MET.whitelist += cms.vstring("pfMETCHS") ############################################################################ # Almost done ... ############################################################################ process.path *= ( process.kappaOut ) return process
def getBaseConfig(globaltag= 'START53_V15A::All', testfile=cms.untracked.vstring(""), maxevents=100, nickname = 'SM_VBFHToTauTau_M_90_powheg_pythia_8TeV', kappaTag = 'Kappa_1_0_0'): from Kappa.Skimming.KSkimming_template_cfg import process process.source.fileNames = testfile process.maxEvents.input = maxevents ## number of events to be processed (-1 = all in file) process.kappaTuple.outputFile = 'kappaTuple.root' ## name of output file process.kappaTuple.verbose = cms.int32(0) ## verbosity level process.kappaTuple.profile = cms.bool(True) if not globaltag.lower() == 'auto' : process.GlobalTag.globaltag = globaltag print "GT (overwritten):", process.GlobalTag.globaltag data = datasetsHelper.isData(nickname) centerOfMassEnergy = datasetsHelper.getCenterOfMassEnergy(nickname) isEmbedded = datasetsHelper.getIsEmbedded(nickname) process.p = cms.Path() ## ------------------------------------------------------------------------ # Configure Metadata describing the file process.kappaTuple.active = cms.vstring('TreeInfo') process.kappaTuple.TreeInfo.parameters = cms.PSet( dataset = cms.string(datasetsHelper.getDatasetName(nickname)), generator = cms.string(datasetsHelper.getGenerator(nickname)), productionProcess = cms.string(datasetsHelper.getProcess(nickname)), globalTag = cms.string(globaltag), prodCampaignGlobalTag = cms.string(datasetsHelper.getProductionCampaignGlobalTag(nickname, centerOfMassEnergy)), runPeriod = cms.string(datasetsHelper.getRunPeriod(nickname)), kappaTag = cms.string(kappaTag), isEmbedded = cms.bool(isEmbedded), jetMultiplicity = cms.int32(datasetsHelper.getJetMultiplicity(nickname)), centerOfMassEnergy = cms.int32(centerOfMassEnergy), puScenario = cms.string(datasetsHelper.getPuScenario(nickname, centerOfMassEnergy)), isData = cms.bool(data), ) ## ------------------------------------------------------------------------ # General configuration process.kappaTuple.active += cms.vstring('VertexSummary') ## save VertexSummary, process.kappaTuple.active += cms.vstring('BeamSpot') ## save Beamspot, process.kappaTuple.active += cms.vstring('TriggerObjects') if not isEmbedded: if data: process.kappaTuple.active+= cms.vstring('DataInfo') ## produce Metadata for data, else: process.kappaTuple.active+= cms.vstring('GenInfo') ## produce Metadata for MC, process.kappaTuple.active+= cms.vstring('GenParticles') ## save GenParticles, process.kappaTuple.active+= cms.vstring('GenTaus') ## save GenParticles, # prune GenParticles if not data: process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") process.prunedGenParticles = cms.EDProducer("GenParticlePruner", src = cms.InputTag("genParticles", "", "SIM"), select = cms.vstring( "drop *", "keep status == 3", # all status 3 "keep++ abs(pdgId) == 23", # Z "keep++ abs(pdgId) == 24", # W "keep++ abs(pdgId) == 25", # H "keep abs(pdgId) == 11 || abs(pdgId) == 13", # charged leptons "keep++ abs(pdgId) == 15" # keep full tau decay chain ) ) process.kappaTuple.Info.hltWhitelist = cms.vstring( ## HLT selection # https://github.com/cms-analysis/HiggsAnalysis-KITHiggsToTauTau/blob/master/data/triggerTables-2011-2012.txt # https://twiki.cern.ch/twiki/bin/viewauth/CMS/HiggsToTauTauWorkingSummer2013 # can be tested at http://regexpal.com # e "^HLT_Ele[0-9]+_CaloIdVT(_CaloIsoT)?_TrkIdT(_TrkIsoT)?_v[0-9]+$", "^HLT_Ele[0-9]+_WP[0-9]+_v[0-9]+$", # m "^HLT_(Iso)?Mu[0-9]+(_eta2p1)?_v[0-9]+$", # ee "^HLT_Ele[0-9]+_CaloId(L|T)(_TrkIdVL)?_CaloIsoVL(_TrkIdVL)?(_TrkIsoVL)?" + "_Ele[0-9]+_CaloId(L|T)(_TrkIdVL)?_CaloIsoVL(_TrkIdVL)?(_TrkIsoVL)?_v[0-9]+$", "^HLT_Ele[0-9]+_Ele[0-9]+_CaloId(L|T)_CaloIsoVL(_TrkIdVL_TrkIsoVL)?_v[0-9]+$", # mm "^HLT_(Double)?Mu[0-9]+(_(Mu|Jet)[0-9]+)?_v[0-9]+$", # em "^HLT_Mu[0-9]+_(Ele|Photon)[0-9]+_CaloId(L|T|VT)(_CaloIsoVL|_IsoT)?(_TrkIdVL_TrkIsoVL)?_v[0-9]+$", # et "^HLT_Ele[0-9]+_CaloIdVT(_Calo(IsoRho|Iso)T)?_TrkIdT(_TrkIsoT)?_(Loose|Medium|Tight)IsoPFTau[0-9]+_v[0-9]+$", "^HLT_Ele[0-9]+_eta2p1_WP[0-9]+(Rho|NoIso)_LooseIsoPFTau[0-9]+_v[0-9]+$", # mt "^HLT_(Iso)?Mu[0-9]+(_eta2p1)?_(Loose|Medium|Tight)IsoPFTau[0-9]+(_Trk[0-9]_eta2p1)?_v[0-9]+$", # tt "^HLT_Double(Medium)?IsoPFTau[0-9]+_Trk(1|5)_eta2p1_(Jet[0-9]+|Prong[0-9])?_v[0-9]+$", "^HLT_Double(Medium)?IsoPFTau[0-9]+_Trk(1|5)(_eta2p1)?_v[0-9]+$", # specials (possible generalization: Mu15, L1ETM20, Photon20, Ele8) "^HLT_Ele[0-9]+_CaloId(L|T|VT)_CaloIso(VL|T|VT)(_TrkIdT)?(_TrkIsoVT)?_(SC|Ele)[0-9](_Mass[0-9]+)?_v[0-9]+$", "^HLT_Ele8_v[0-9]+$", "^HLT_IsoMu15(_eta2p1)?_L1ETM20_v[0-9]+$", "^HLT_Photon20_CaloIdVT_IsoT_Ele8_CaloIdL_CaloIsoVL_v[0-9]+$", # specials for tag and probe and em fakerate studies could be added if enough bits are ensured #"^HLT_Ele[0-9]+_CaloId(L|T|VT)_CaloIso(VL|T|VT)(_TrkIdT_TrkIso(T|VT))?_(SC|Ele)[0-9]+(_Mass[0-9]+)?_v[0-9]+$", #"^HLT_Mu[0-9]+_Photon[0-9]+_CaloIdVT_IsoT_v[0-9]+$", #"^HLT_Ele[0-9]+_CaloId(L|T)(_TrkIdVL)?_CaloIsoVL(_TrkIdVL_TrkIsoVL)?(_TrkIsoVL)?(_Jet[0-9]+|)?_v[0-9]+$", ) process.kappaTuple.Info.hltBlacklist = cms.vstring( "HLT_Mu13_Mu8", # v21 gives errors for the trigger objects ) ## ------------------------------------------------------------------------ # Configure PFCandidates and offline PV process.load("Kappa.Skimming.KPFCandidates_cff") #process.kappaTuple.active += cms.vstring('PFCandidates') ## save PFCandidates for deltaBeta corrected process.kappaTuple.PFCandidates.whitelist = cms.vstring( ## isolation used for electrons and muons. ## "pfNoPileUpChargedHadrons", ## switch to pfAllChargedParticles "pfAllChargedParticles", ## same as pfNoPileUpChargedHadrons +pf_electrons + pf_muons "pfNoPileUpNeutralHadrons", "pfNoPileUpPhotons", "pfPileUpChargedHadrons", ) process.p *= ( process.makePFBRECO * process.makePFCandidatesForDeltaBeta ) ## ------------------------------------------------------------------------ # Configure Muons process.load("Kappa.Skimming.KMuons_cff") process.kappaTuple.active += cms.vstring('Muons') ## produce/save KappaMuons process.kappaTuple.Muons.minPt = cms.double(8.0) process.p *= process.makeKappaMuons ## ------------------------------------------------------------------------ # Configure Electrons process.load("Kappa.Skimming.KElectrons_cff") process.kappaTuple.active += cms.vstring('Electrons') ## produce/save KappaElectrons, process.kappaTuple.Electrons.ids = cms.vstring("mvaTrigV0", "mvaTrigNoIPV0", "mvaNonTrigV0") process.kappaTuple.Electrons.minPt = cms.double(8.0) process.p *= process.makeKappaElectrons ## for electron/muon iso # https://github.com/ajgilbert/ICHiggsTauTau/blob/master/test/higgstautau_cfg.py#L418-L448 from CommonTools.ParticleFlow.Tools.pfIsolation import setupPFElectronIso, setupPFMuonIso process.eleIsoSequence = setupPFElectronIso(process, 'patElectrons') process.muIsoSequence = setupPFMuonIso(process, 'muons') process.eleIsoSequence.remove(process.elPFIsoValueCharged03NoPFIdPFIso) process.eleIsoSequence.remove(process.elPFIsoValueChargedAll03NoPFIdPFIso) process.eleIsoSequence.remove(process.elPFIsoValueGamma03NoPFIdPFIso) process.eleIsoSequence.remove(process.elPFIsoValueNeutral03NoPFIdPFIso) process.eleIsoSequence.remove(process.elPFIsoValuePU03NoPFIdPFIso) process.eleIsoSequence.remove(process.elPFIsoValueCharged04NoPFIdPFIso) process.eleIsoSequence.remove(process.elPFIsoValueChargedAll04NoPFIdPFIso) process.eleIsoSequence.remove(process.elPFIsoValueGamma04NoPFIdPFIso) process.eleIsoSequence.remove(process.elPFIsoValueNeutral04NoPFIdPFIso) process.eleIsoSequence.remove(process.elPFIsoValuePU04NoPFIdPFIso) process.elPFIsoValueGamma04PFIdPFIso.deposits[0].vetos = cms.vstring('EcalEndcaps:ConeVeto(0.08)','EcalBarrel:ConeVeto(0.08)') process.elPFIsoValueNeutral04PFIdPFIso.deposits[0].vetos = cms.vstring() process.elPFIsoValuePU04PFIdPFIso.deposits[0].vetos = cms.vstring() process.elPFIsoValueCharged04PFIdPFIso.deposits[0].vetos = cms.vstring('EcalEndcaps:ConeVeto(0.015)') process.elPFIsoValueChargedAll04PFIdPFIso.deposits[0].vetos = cms.vstring('EcalEndcaps:ConeVeto(0.015)','EcalBarrel:ConeVeto(0.01)') process.pfiso = cms.Sequence(process.pfParticleSelectionSequence + process.eleIsoSequence + process.muIsoSequence) # rho for electron iso from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets process.kt6PFJetsForIsolation = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True ) process.kt6PFJetsForIsolation.Rho_EtaMax = cms.double(2.5) process.p *= (process.pfiso * process.kt6PFJetsForIsolation) ## ------------------------------------------------------------------------ # Configure Taus process.load("Kappa.Skimming.KTaus_cff") process.kappaTuple.active += cms.vstring('Taus') ## produce/save KappaTaus process.kappaTuple.Taus.minPt = cms.double(8.0) process.p *= process.makeKappaTaus ## ------------------------------------------------------------------------ ## Kappa Jets process.load("Kappa.Skimming.KJets_cff") process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity') process.kappaTuple.Jets = cms.PSet( process.kappaNoCut, process.kappaNoRegEx, taggers = cms.vstring( "QGlikelihood", "QGmlp", "TrackCountingHighEffBJetTags", "TrackCountingHighPurBJetTags", "JetProbabilityBJetTags", "JetBProbabilityBJetTags", "SoftElectronBJetTags", "SoftMuonBJetTags", "SoftMuonByIP3dBJetTags", "SoftMuonByPtBJetTags", "SimpleSecondaryVertexBJetTags", "CombinedSecondaryVertexBJetTags", "CombinedSecondaryVertexMVABJetTags", "puJetIDFullDiscriminant", "puJetIDFullLoose", "puJetIDFullMedium", "puJetIDFullTight", "puJetIDCutbasedDiscriminant", "puJetIDCutbasedLoose", "puJetIDCutbasedMedium", "puJetIDCutbasedTight" ), AK5PFTaggedJets = cms.PSet( src = cms.InputTag("ak5PFJets"), QGtagger = cms.InputTag("AK5PFJetsQGTagger"), Btagger = cms.InputTag("ak5PF"), PUJetID = cms.InputTag("ak5PFPuJetMva"), PUJetID_full = cms.InputTag("full"), ), AK5PFTaggedJetsCHS = cms.PSet( src = cms.InputTag("ak5PFJetsCHS"), QGtagger = cms.InputTag("AK5PFJetsCHSQGTagger"), Btagger = cms.InputTag("ak5PFCHS"), PUJetID = cms.InputTag("ak5PFCHSPuJetMva"), PUJetID_full = cms.InputTag("full"), ), ) process.kappaTuple.Jets.minPt = cms.double(10.0) ## ------------------------------------------------------------------------ # Special settings for embedded samples # https://twiki.cern.ch/twiki/bin/viewauth/CMS/MuonTauReplacementWithPFlow if isEmbedded: process.load('RecoBTag/Configuration/RecoBTag_cff') process.load('RecoJets/JetAssociationProducers/ak5JTA_cff') process.ak5PFJetNewTracksAssociatorAtVertex.tracks = "tmfTracks" process.ak5PFCHSNewJetTracksAssociatorAtVertex.tracks = "tmfTracks" process.p *= process.btagging # disable overrideHLTCheck for embedded samples, since it triggers an Kappa error process.kappaTuple.Info.overrideHLTCheck = cms.untracked.bool(True) process.kappaTuple.active+= cms.vstring('DataInfo') process.kappaTuple.active+= cms.vstring('GenParticles') ## save GenParticles, process.kappaTuple.active+= cms.vstring('GenTaus') ## save GenParticles, process.kappaTuple.GenParticles.genParticles.src = cms.InputTag("genParticles","","EmbeddedRECO") process.kappaTuple.Info.isEmbedded = cms.bool(True) # Let Jets run process.p *= ( process.makeKappaTaus * process.makePFJets * process.makePFJetsCHS * process.makeQGTagging * process.makeBTagging * process.makePUJetID ) ## ------------------------------------------------------------------------ ## MET process.load("Kappa.Skimming.KMET_cff") process.kappaTuple.active += cms.vstring('GenMET') ## produce/save KappaMET process.kappaTuple.active += cms.vstring('MET') ## produce/save KappaPFMET process.p *= process.makeKappaMET #""" if not data: process.load('PhysicsTools/JetMCAlgos/TauGenJets_cfi') process.load('PhysicsTools/JetMCAlgos/TauGenJetsDecayModeSelectorAllHadrons_cfi') process.p *= (process.tauGenJets+process.tauGenJetsSelectorAllHadrons) process.kappaTuple.GenJets.whitelist = cms.vstring("tauGenJets") process.kappaTuple.active += cms.vstring('GenJets') # add python config to TreeInfo process.kappaTuple.TreeInfo.parameters.config = cms.string(process.dumpPython()) # add repository revisions to TreeInfo for repo, rev in tools.get_repository_revisions().iteritems(): setattr(process.kappaTuple.TreeInfo.parameters, repo, cms.string(rev)) ## ------------------------------------------------------------------------ ## And let it run process.p *= ( process.kappaOut ) ## ------------------------------------------------------------------------ ## declare edm OutputModule (expects a path 'p'), uncommented if wanted #process.edmOut = cms.OutputModule( # "PoolOutputModule", # fileName = cms.untracked.string('dump.root'), ## name of output file # SelectEvents = cms.untracked.PSet( SelectEvents = cms.vstring('p') ), ## save only events passing the full path # outputCommands = cms.untracked.vstring('drop *', 'keep *_*_*_KAPPA') ## save each edm object that has been produced by process KAPPA # ) #process.ep = cms.EndPath(process.edmOut) return process
def getBaseConfig( globaltag, testfile, maxevents, nickname, outputfilename, kappaverbosity, ): from Kappa.Skimming.KSkimming_template_cfg import process process.source.fileNames = testfile process.maxEvents.input = maxevents ## number of events to be processed (-1 = all in file) process.kappaTuple.outputFile = outputfilename ## name of output file process.kappaTuple.verbose = cms.int32(kappaverbosity) ## verbosity level process.kappaTuple.profile = cms.bool(False) if not globaltag.lower() == 'auto' : process.GlobalTag.globaltag = globaltag data = datasetsHelper.isData(nickname) centerOfMassEnergy = datasetsHelper.getCenterOfMassEnergy(nickname) process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) ) ## some infos print "\n--------CONFIGURATION----------" print "input: ", testfile print "nickname: ", nickname print "global tag: ", process.GlobalTag.globaltag print "max events: ", maxevents print "output filename:", outputfilename print "------------------\n" process.p = cms.Path ( ) ## ------------------------------------------------------------------------ # Configure Metadata describing the file process.kappaTuple.active = cms.vstring('TreeInfo') process.kappaTuple.TreeInfo.parameters = cms.PSet( dataset = cms.string(datasetsHelper.getDatasetName(nickname)), generator = cms.string(datasetsHelper.getGenerator(nickname)), productionProcess = cms.string(datasetsHelper.getProcess(nickname)), globalTag = cms.string(globaltag), prodCampaignGlobalTag = cms.string(datasetsHelper.getProductionCampaignGlobalTag(nickname, centerOfMassEnergy)), runPeriod = cms.string(datasetsHelper.getRunPeriod(nickname)), jetMultiplicity = cms.int32(datasetsHelper.getJetMultiplicity(nickname)), centerOfMassEnergy = cms.int32(centerOfMassEnergy), puScenario = cms.string(datasetsHelper.getPuScenario(nickname, centerOfMassEnergy)), isData = cms.bool(data) ) ## ------------------------------------------------------------------------ # General configuration process.kappaTuple.active += cms.vstring('VertexSummary') ## save VertexSummary, process.kappaTuple.VertexSummary.whitelist = cms.vstring('goodOfflinePrimaryVertices') #process.kappaTuple.active += cms.vstring('BeamSpot') ## save Beamspot, #process.kappaTuple.active += cms.vstring('TriggerObjects') if data: process.kappaTuple.active+= cms.vstring('DataInfo') ## produce Metadata for data, else: process.kappaTuple.active+= cms.vstring('GenInfo') ## produce Metadata for MC, process.kappaTuple.active+= cms.vstring('GenParticles') process.kappaTuple.Info.hltWhitelist = cms.vstring( ## HLT selection # can be tested at http://regexpal.com # matches 'HLT_Mu17_Mu8_v7' etc. '^HLT_(Double)?Mu([0-9]+)_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$', # matches 'HLT_DoubleMu7_v8' etc. '^HLT_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$', ) ## ------------------------------------------------------------------------ # Configure PFCandidates and offline PV # PFCandidates ------------------------------------------------------------ process.load('Kappa.Skimming.KPFCandidates_cff') # Modifications for new particleFlow Pointers #process.pfPileUp.PFCandidates = cms.InputTag('particleFlowPtrs') #process.pfPileUpIso.PFCandidates = cms.InputTag('particleFlowPtrs') #process.pfNoPileUp.bottomCollection = cms.InputTag('particleFlowPtrs') #process.pfNoPileUpIso.bottomCollection = cms.InputTag('particleFlowPtrs') process.pfJetTracksAssociatorAtVertex.jets= cms.InputTag('ak5PFJets') process.p *= (process.goodOfflinePrimaryVertices * process.pfPileUp * process.pfNoPileUp)# process.makePFBRECO * process.makeKappaPFCandidates) ## ------------------------------------------------------------------------ # Configure Muons process.load('Kappa.Skimming.KMuons_cff') process.kappaTuple.active += cms.vstring('Muons') ## produce/save KappaMuons #process.kappaTuple.Muons.minPt = cms.double(8.0) process.goodMuons = cms.EDFilter('CandViewSelector', src = cms.InputTag('muons'), cut = cms.string("pt > 15.0 & abs(eta) < 8.0"),# & isGlobalMuon()"), ) process.twoGoodMuons = cms.EDFilter('CandViewCountFilter', src = cms.InputTag('goodMuons'), minNumber = cms.uint32(2), ) process.p *= (#process.goodMuons * process.twoGoodMuons * process.makeKappaMuons) ## for muon iso # https://github.com/ajgilbert/ICHiggsTauTau/blob/master/test/higgstautau_new_cfg.py#L430-L460 process.load('CommonTools.ParticleFlow.Isolation.pfMuonIsolation_cff') process.muPFIsoValueCharged04PFIso = process.muPFIsoValueCharged04.clone() process.muPFIsoValueChargedAll04PFIso = process.muPFIsoValueChargedAll04.clone() process.muPFIsoValueGamma04PFIso = process.muPFIsoValueGamma04.clone() process.muPFIsoValueNeutral04PFIso = process.muPFIsoValueNeutral04.clone() process.muPFIsoValuePU04PFIso = process.muPFIsoValuePU04.clone() process.muonPFIsolationValuesSequence = cms.Sequence( process.muPFIsoValueCharged04PFIso+ process.muPFIsoValueChargedAll04PFIso+ process.muPFIsoValueGamma04PFIso+ process.muPFIsoValueNeutral04PFIso+ process.muPFIsoValuePU04PFIso ) process.muPFIsoDepositCharged.src = cms.InputTag('muons') process.muPFIsoDepositChargedAll.src = cms.InputTag('muons') process.muPFIsoDepositNeutral.src = cms.InputTag('muons') process.muPFIsoDepositGamma.src = cms.InputTag('muons') process.muPFIsoDepositPU.src = cms.InputTag('muons') ## ------------------------------------------------------------------------ ## KappaJets process.load('Kappa.Skimming.KJets_cff') process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity') process.kappaTuple.Jets = cms.PSet( process.kappaNoCut, process.kappaNoRegEx, taggers = cms.vstring( # 'QGlikelihood', # 'QGmlp', 'TrackCountingHighEffBJetTags', 'TrackCountingHighPurBJetTags', 'JetProbabilityBJetTags', 'JetBProbabilityBJetTags', 'SoftElectronBJetTags', 'SoftMuonBJetTags', 'SoftMuonByIP3dBJetTags', 'SoftMuonByPtBJetTags', 'SimpleSecondaryVertexBJetTags', 'CombinedSecondaryVertexBJetTags', 'CombinedSecondaryVertexMVABJetTags', 'puJetIDFullDiscriminant', 'puJetIDFullLoose', 'puJetIDFullMedium', 'puJetIDFullTight', #'puJetIDCutbasedDiscriminant', #'puJetIDCutbasedLoose', #'puJetIDCutbasedMedium', #'puJetIDCutbasedTight' ), AK5PFTaggedJets = cms.PSet( src = cms.InputTag('ak5PFJets'), #QGtagger = cms.InputTag('AK5PFJetsQGTagger'), QGtagger = cms.InputTag(''), Btagger = cms.InputTag('ak5PF'), PUJetID = cms.InputTag('ak5PFPuJetMva'), PUJetID_full = cms.InputTag('full'), ), AK5PFTaggedJetsCHS = cms.PSet( src = cms.InputTag('ak5PFJetsCHS'), #QGtagger = cms.InputTag('AK5PFJetsCHSQGTagger'), QGtagger = cms.InputTag(''), Btagger = cms.InputTag('ak5PFCHS'), PUJetID = cms.InputTag('ak5PFCHSPuJetMva'), PUJetID_full = cms.InputTag('full'), ), ) #process.kappaTuple.Jets.minPt = cms.double(5.0) if not data: process.kappaTuple.active += cms.vstring('GenJets') process.kappaTuple.GenJets.whitelist = cms.vstring('ak5GenJets') process.kappaTuple.GenJets.rename = cms.vstring('ak => AK') # add kt6PFJets, needed for the PileupDensity from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets process.kt6PFJets = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True ) process.kt6PFJets.Rho_EtaMax = cms.double(2.5) process.p *= ( process.makePFJets * process.makePFJetsCHS * process.kt6PFJets * # process.makeQGTagging * process.makeBTagging * process.makePUJetID ) ## ------------------------------------------------------------------------ ## MET # MET correction ---------------------------------------------------------- process.load('JetMETCorrections.Type1MET.pfMETCorrectionType0_cfi') process.p *= ( process.type0PFMEtCorrection ) #TODO check type 0 corrections process.kappaTuple.active += cms.vstring('MET') ## produce/save KappaPFMET process.kappaTuple.MET.whitelist = cms.vstring('pfChMet', '_pfMet_') #process.kappaTuple.MET.rename = cms.vstring('pfChMet => PFMETCHS', 'pfMet => PFMET') # MET correction ---------------------------------------------------------- process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff") process.pfchsMETcorr.src = cms.InputTag('goodOfflinePrimaryVertices') # Type-0 process.pfMETCHS = process.pfType1CorrectedMet.clone( applyType1Corrections = cms.bool(False), applyType0Corrections = cms.bool(True) ) # MET Path process.p *= ( process.producePFMETCorrections * process.pfMETCHS ) process.kappaTuple.MET.whitelist += cms.vstring("pfMETCHS") ## ------------------------------------------------------------------------ ## And let it run process.p *= ( process.kappaOut ) print process.p return process
def getBaseConfig(globaltag= 'START53_V15A::All', testfile=cms.untracked.vstring(""), maxevents=100, nickname = 'SM_VBFHToTauTau_M_90_powheg_pythia_8TeV', kappaTag = 'Kappa_1_0_0'): print "getBaseConfig", globaltag, testfile, maxevents, nickname, kappaTag from Kappa.Skimming.KSkimming_template_cfg import process process.source.fileNames = testfile process.maxEvents.input = maxevents ## number of events to be processed (-1 = all in file) process.kappaTuple.outputFile = 'kappaTuple.root' ## name of output file process.kappaTuple.verbose = cms.int32(0) ## verbosity level if not globaltag.lower() == 'auto' : process.GlobalTag.globaltag = globaltag print "GT (overwritten):", process.GlobalTag.globaltag data = datasetsHelper.isData(nickname) centerOfMassEnergy = datasetsHelper.getCenterOfMassEnergy(nickname) isEmbedded = datasetsHelper.getIsEmbedded(nickname) process.p = cms.Path ( ) ## ------------------------------------------------------------------------ # Configure Metadata describing the file process.kappaTuple.active = cms.vstring('TreeInfo') process.kappaTuple.TreeInfo.parameters = cms.PSet( dataset = cms.string(datasetsHelper.getDatasetName(nickname)), generator = cms.string(datasetsHelper.getGenerator(nickname)), productionProcess = cms.string(datasetsHelper.getProcess(nickname)), globalTag = cms.string(globaltag), prodCampaignGlobalTag = cms.string(datasetsHelper.getProductionCampaignGlobalTag(nickname, centerOfMassEnergy)), runPeriod = cms.string(datasetsHelper.getRunPeriod(nickname)), kappaTag = cms.string(kappaTag), isEmbedded = cms.bool(isEmbedded), jetMultiplicity = cms.int32(datasetsHelper.getJetMultiplicity(nickname)), centerOfMassEnergy = cms.int32(centerOfMassEnergy), puScenario = cms.string(datasetsHelper.getPuScenario(nickname, centerOfMassEnergy)), isData = cms.bool(data) ) ## ------------------------------------------------------------------------ # General configuration process.kappaTuple.active += cms.vstring('VertexSummary') ## save VertexSummary, process.kappaTuple.active += cms.vstring('BeamSpot') ## save Beamspot, process.kappaTuple.active += cms.vstring('TriggerObjects') if not isEmbedded: if data: process.kappaTuple.active+= cms.vstring('DataMetadata') ## produce Metadata for data, else: process.kappaTuple.active+= cms.vstring('GenMetadata') ## produce Metadata for MC, process.kappaTuple.active+= cms.vstring('GenParticles') ## save GenParticles, process.kappaTuple.active+= cms.vstring('GenTaus') ## save GenParticles, process.kappaTuple.Metadata.hltWhitelist = cms.vstring( ## HLT selection # https://github.com/cms-analysis/HiggsAnalysis-KITHiggsToTauTau/blob/master/data/triggerTables-2011-2012.txt # https://twiki.cern.ch/twiki/bin/viewauth/CMS/HiggsToTauTauWorkingSummer2013 # can be tested at http://regexpal.com # e "^HLT_Ele[0-9]+_CaloIdVT(_CaloIsoT)?_TrkIdT(_TrkIsoT)?_v[0-9]+$", "^HLT_Ele[0-9]+_WP[0-9]+_v[0-9]+$", # m "^HLT_(Iso)?Mu[0-9]+(_eta2p1)?_v[0-9]+$", # ee "^HLT_Ele[0-9]+_CaloId(L|T)(_TrkIdVL)?_CaloIsoVL(_TrkIdVL)?(_TrkIsoVL)?" + "_Ele[0-9]+_CaloId(L|T)(_TrkIdVL)?_CaloIsoVL(_TrkIdVL)?(_TrkIsoVL)?_v[0-9]+$", "^HLT_Ele[0-9]+_Ele[0-9]+_CaloId(L|T)_CaloIsoVL(_TrkIdVL_TrkIsoVL)?_v[0-9]+$", # mm "^HLT_(Double)?Mu[0-9]+(_(Mu|Jet)[0-9]+)?_v[0-9]+$", # em "^HLT_Mu[0-9]+_(Ele|Photon)[0-9]+_CaloId(L|T|VT)(_CaloIsoVL|_IsoT)?(_TrkIdVL_TrkIsoVL)?_v[0-9]+$", # et "^HLT_Ele[0-9]+_CaloIdVT(_Calo(IsoRho|Iso)T)?_TrkIdT(_TrkIsoT)?_(Loose|Medium|Tight)IsoPFTau[0-9]+_v[0-9]+$", "^HLT_Ele[0-9]+_eta2p1_WP[0-9]+(Rho|NoIso)_LooseIsoPFTau[0-9]+_v[0-9]+$", # mt "^HLT_(Iso)?Mu[0-9]+(_eta2p1)?_(Loose|Medium|Tight)IsoPFTau[0-9]+(_Trk[0-9]_eta2p1)?_v[0-9]+$", # tt "^HLT_Double(Medium)?IsoPFTau[0-9]+_Trk(1|5)_eta2p1_(Jet[0-9]+|Prong[0-9])?_v[0-9]+$", "^HLT_Double(Medium)?IsoPFTau[0-9]+_Trk(1|5)(_eta2p1)?_v[0-9]+$", # specials (possible generalization: Mu15, L1ETM20, Photon20, Ele8) "^HLT_Ele[0-9]+_CaloId(L|T|VT)_CaloIso(VL|T|VT)(_TrkIdT)?(_TrkIsoVT)?_(SC|Ele)[0-9](_Mass[0-9]+)?_v[0-9]+$", "^HLT_Ele8_v[0-9]+$", "^HLT_IsoMu15(_eta2p1)?_L1ETM20_v[0-9]+$", "^HLT_Photon20_CaloIdVT_IsoT_Ele8_CaloIdL_CaloIsoVL_v[0-9]+$", # specials for tag and probe and em fakerate studies could be added if enough bits are ensured #"^HLT_Ele[0-9]+_CaloId(L|T|VT)_CaloIso(VL|T|VT)(_TrkIdT_TrkIso(T|VT))?_(SC|Ele)[0-9]+(_Mass[0-9]+)?_v[0-9]+$", #"^HLT_Mu[0-9]+_Photon[0-9]+_CaloIdVT_IsoT_v[0-9]+$", #"^HLT_Ele[0-9]+_CaloId(L|T)(_TrkIdVL)?_CaloIsoVL(_TrkIdVL_TrkIsoVL)?(_TrkIsoVL)?(_Jet[0-9]+|)?_v[0-9]+$", ) process.kappaTuple.Metadata.hltBlacklist = cms.vstring( "HLT_Mu13_Mu8", # v21 gives errors for the trigger objects ) process.kappaTuple.Metadata.hltFailToleranceList = cms.vstring( "hltDoubleL2Tau25eta2p1", "hltDoubleL2Tau30eta2p1", "hltDoubleL2Tau35eta2p1", "hltL2Tau25eta2p1", "hltL2Tau35eta2p1", "hltL2fL1sMu16Eta2p1L1f0L2Filtered16Q", "hltL1sL1DoubleEG137", # problematic in HLT_Mu17_Mu8_v21 "hltL1sL1Mu3p5EG12ORL1MuOpenEG12", # problematic in HLT_Ele22_eta2p1_WP90Rho_LooseIsoPFTau20_v7 "hltL3fL1sMu16Eta2p1L1f0L2f16QL3Filtered40Q", # problematic in HLT_Ele22_eta2p1_WP90Rho_LooseIsoPFTau20_v7 "hltL2fL1sMu16L1f0L2Filtered16Q", # problematic in HLT_IsoMu17_eta2p1_LooseIsoPFTau20_v7 "hltL1sL1SingleMu7", # problematic in HLT_DoubleMediumIsoPFTau30_Trk1_eta2p1_Jet30_v5 "hltL1Mu3p5EG12L2Filtered12", # problematic in HLT_DoubleMediumIsoPFTau30_Trk1_eta2p1_Jet30_v5 "hltTripleL2Jets30eta3", # problematic in HLT_DoubleMediumIsoPFTau30_Trk1_eta2p1_v4 "hltDiMuonGlb17Glb8DzFiltered0p2", # problematic in HLT_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_v18 "hltL1sL1DoubleMu10MuOpenORDoubleMu103p5", # ) ## ------------------------------------------------------------------------ # Configure PFCandidates and offline PV process.load("Kappa.Skimming.KPFCandidates_cff") process.kappaTuple.active += cms.vstring('PFCandidates') ## save PFCandidates for deltaBeta corrected process.kappaTuple.PFCandidates.whitelist = cms.vstring( ## isolation used for electrons and muons. ## "pfNoPileUpChargedHadrons", ## switch to pfAllChargedParticles "pfAllChargedParticles", ## same as pfNoPileUpChargedHadrons +pf_electrons + pf_muons "pfNoPileUpNeutralHadrons", "pfNoPileUpPhotons", "pfPileUpChargedHadrons", ) process.p *= ( process.makePFBRECO * process.makePFCandidatesForDeltaBeta ) ## ------------------------------------------------------------------------ # Configure Muons process.load("Kappa.Skimming.KMuons_cff") process.kappaTuple.active += cms.vstring('Muons') ## produce/save KappaMuons process.p *= process.makeKappaMuons ## ------------------------------------------------------------------------ # Configure Electrons process.load("Kappa.Skimming.KElectrons_cff") process.kappaTuple.active += cms.vstring('Electrons') ## produce/save KappaElectrons, process.p *= process.makeKappaElectrons ## ------------------------------------------------------------------------ # Configure Taus process.load("Kappa.Skimming.KTaus_cff") process.kappaTuple.active += cms.vstring('Taus') ## produce/save KappaTaus process.kappaTuple.PFTaus.hpsPFTaus.binaryDiscrWhitelist = cms.vstring( "hpsPFTauDiscriminationByDecayModeFinding", "hpsPFTauDiscriminationByDecayModeFindingOldDMs", "hpsPFTauDiscriminationByDecayModeFindingNewDMs", #against electrons "hpsPFTauDiscriminationByLooseElectronRejection", "hpsPFTauDiscriminationByMediumElectronRejection", "hpsPFTauDiscriminationByTightElectronRejection", "hpsPFTauDiscriminationByMVA5VLooseElectronRejection", "hpsPFTauDiscriminationByMVA5LooseElectronRejection", "hpsPFTauDiscriminationByMVA5MediumElectronRejection", "hpsPFTauDiscriminationByMVA5TightElectronRejection", "hpsPFTauDiscriminationByMVA5VTightElectronRejection", #against muons "hpsPFTauDiscriminationByMVALooseMuonRejection", "hpsPFTauDiscriminationByMVAMediumMuonRejection", "hpsPFTauDiscriminationByMVATightMuonRejection", "hpsPFTauDiscriminationByLooseMuonRejection3", "hpsPFTauDiscriminationByTightMuonRejection3", #isolation "hpsPFTauDiscriminationByVLooseIsolation", "hpsPFTauDiscriminationByVLooseCombinedIsolationDBSumPtCorr", "hpsPFTauDiscriminationByLooseCombinedIsolationDBSumPtCorr", "hpsPFTauDiscriminationByMediumCombinedIsolationDBSumPtCorr", "hpsPFTauDiscriminationByTightCombinedIsolationDBSumPtCorr", "hpsPFTauDiscriminationByLooseCombinedIsolationDBSumPtCorr3Hits", "hpsPFTauDiscriminationByMediumCombinedIsolationDBSumPtCorr3Hits" "hpsPFTauDiscriminationByTightCombinedIsolationDBSumPtCorr3Hits", "hpsPFTauDiscriminationByVLooseIsolationMVA3oldDMwoLT", "hpsPFTauDiscriminationByLooseIsolationMVA3oldDMwoLT", "hpsPFTauDiscriminationByMediumIsolationMVA3oldDMwoLT", "hpsPFTauDiscriminationByTightIsolationMVA3oldDMwoLT", "hpsPFTauDiscriminationByVTightIsolationMVA3oldDMwoLT", "hpsPFTauDiscriminationByVVTightIsolationMVA3oldDMwoLT", "hpsPFTauDiscriminationByVLooseIsolationMVA3oldDMwLT", "hpsPFTauDiscriminationByLooseIsolationMVA3oldDMwLT", "hpsPFTauDiscriminationByMediumIsolationMVA3oldDMwLT", "hpsPFTauDiscriminationByTightIsolationMVA3oldDMwLT", "hpsPFTauDiscriminationByVTightIsolationMVA3oldDMwLT", "hpsPFTauDiscriminationByVVTightIsolationMVA3oldDMwLT", "hpsPFTauDiscriminationByVLooseIsolationMVA3newDMwoLT", "hpsPFTauDiscriminationByLooseIsolationMVA3newDMwoLT", "hpsPFTauDiscriminationByMediumIsolationMVA3newDMwoLT", "hpsPFTauDiscriminationByTightIsolationMVA3newDMwoLT", "hpsPFTauDiscriminationByVTightIsolationMVA3newDMwoLT", "hpsPFTauDiscriminationByVVTightIsolationMVA3newDMwoLT", "hpsPFTauDiscriminationByVLooseIsolationMVA3newDMwLT", "hpsPFTauDiscriminationByLooseIsolationMVA3newDMwLT", "hpsPFTauDiscriminationByMediumIsolationMVA3newDMwLT", "hpsPFTauDiscriminationByTightIsolationMVA3newDMwLT", "hpsPFTauDiscriminationByVTightIsolationMVA3newDMwLT", "hpsPFTauDiscriminationByVVTightIsolationMVA3newDMwLT", #old (and not in new) #"hpsPFTauDiscriminationByMVA3LooseElectronRejection", #not working #"hpsPFTauDiscriminationByMVA3MediumElectronRejection", #not working "hpsPFTauDiscriminationByLooseMuonRejection", "hpsPFTauDiscriminationByTightMuonRejection", ) process.p *= process.makeKappaTaus ## ------------------------------------------------------------------------ ## KappaPFTaggedJets process.load("Kappa.Skimming.KPFTaggedJets_cff") process.kappaTuple.active += cms.vstring('Jets') ## produce KappaPFTaggedJets process.kappaTuple.PFTaggedJets = cms.PSet( process.kappaNoCut, process.kappaNoRegEx, taggers = cms.vstring( "QGlikelihood", "QGmlp", "TrackCountingHighEffBJetTags", "TrackCountingHighPurBJetTags", "JetProbabilityBJetTags", "JetBProbabilityBJetTags", "SoftElectronBJetTags", "SoftMuonBJetTags", "SoftMuonByIP3dBJetTags", "SoftMuonByPtBJetTags", "SimpleSecondaryVertexBJetTags", "CombinedSecondaryVertexBJetTags", "CombinedSecondaryVertexMVABJetTags", "puJetIDFullLoose", "puJetIDFullMedium", "puJetIDFullTight", "puJetIDCutbasedLoose", "puJetIDCutbasedMedium", "puJetIDCutbasedTight" ), AK5PFTaggedJets = cms.PSet( src = cms.InputTag("ak5PFJets"), QGtagger = cms.InputTag("AK5PFJetsQGTagger"), Btagger = cms.InputTag("ak5PF"), PUJetID = cms.InputTag("ak5PFPuJetMva"), PUJetID_full = cms.InputTag("full"), ), AK5PFTaggedJetsCHS = cms.PSet( src = cms.InputTag("ak5PFJetsCHS"), QGtagger = cms.InputTag("AK5PFJetsCHSQGTagger"), Btagger = cms.InputTag("ak5PFCHS"), PUJetID = cms.InputTag("ak5PFCHSPuJetMva"), PUJetID_full = cms.InputTag("full"), ), ) process.kappaTuple.active += cms.vstring('JetArea') ## ------------------------------------------------------------------------ # Special settings for embedded samples # https://twiki.cern.ch/twiki/bin/viewauth/CMS/MuonTauReplacementWithPFlow if isEmbedded: process.load('RecoBTag/Configuration/RecoBTag_cff') process.load('RecoJets/JetAssociationProducers/ak5JTA_cff') process.ak5PFJetNewTracksAssociatorAtVertex.tracks = "tmfTracks" process.ak5PFCHSNewJetTracksAssociatorAtVertex.tracks = "tmfTracks" process.p *= process.btagging # disable overrideHLTCheck for embedded samples, since it triggers an Kappa error process.kappaTuple.Metadata.overrideHLTCheck = cms.untracked.bool(True) process.kappaTuple.active+= cms.vstring('DataMetadata') process.kappaTuple.active+= cms.vstring('GenParticles') ## save GenParticles, process.kappaTuple.active+= cms.vstring('GenTaus') ## save GenParticles, process.kappaTuple.GenParticles.genParticles.src = cms.InputTag("genParticles","","EmbeddedRECO") process.kappaTuple.Metadata.isEmbedded = cms.bool(True) # Let Jets run process.p *= ( process.makeKappaTaus * process.makePFJets * process.makePFJetsCHS * process.makeQGTagging * process.makeBTagging * process.makePUJetID ) ## ------------------------------------------------------------------------ ## MET process.load("Kappa.Skimming.KMET_mssm_cff") process.kappaTuple.active += cms.vstring('BasicMET') ## produce/save KappaMET process.kappaTuple.active += cms.vstring('MET') ## produce/save KappaPFMET process.p *= process.makeKappaMET ## ------------------------------------------------------------------------ ## And let it run process.p *= ( process.kappaOut ) ## ------------------------------------------------------------------------ ## declare edm OutputModule (expects a path 'p'), uncommented if wanted #process.edmOut = cms.OutputModule( # "PoolOutputModule", # fileName = cms.untracked.string('dump.root'), ## name of output file # SelectEvents = cms.untracked.PSet( SelectEvents = cms.vstring('p') ), ## save only events passing the full path # outputCommands = cms.untracked.vstring('drop *', 'keep *_*_*_KAPPA') ## save each edm object that has been produced by process KAPPA # ) #process.ep = cms.EndPath(process.edmOut) return process
def getBaseConfig( globaltag, testfile, maxevents, nickname, outputfilename, kappaverbosity, channel='mm' ): from Kappa.Skimming.KSkimming_template_cfg import process process.source.fileNames = testfile process.maxEvents.input = maxevents ## number of events to be processed (-1 = all in file) process.kappaTuple.outputFile = outputfilename ## name of output file process.kappaTuple.verbose = cms.int32(kappaverbosity) ## verbosity level process.kappaTuple.profile = cms.bool(False) if not globaltag.lower() == 'auto' : process.GlobalTag.globaltag = globaltag data = datasetsHelper.isData(nickname) centerOfMassEnergy = datasetsHelper.getCenterOfMassEnergy(nickname) process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) ) # TODO is there a better way to do this? cmssw_version = os.environ["CMSSW_RELEASE_BASE"].split('/')[-1] cmssw_version_number = cmssw_version.split("CMSSW_")[1] ## some infos print "\n--------CONFIGURATION----------" print "input: ", testfile print "nickname: ", nickname print "global tag: ", process.GlobalTag.globaltag print "max events: ", maxevents print "output filename:", outputfilename print "cmssw version: ", cmssw_version print "channel: ", channel print "-------------------------------\n" process.p = cms.Path ( ) ## ------------------------------------------------------------------------ # Configure Metadata describing the file process.kappaTuple.active = cms.vstring('TreeInfo') process.kappaTuple.TreeInfo.parameters = cms.PSet( dataset = cms.string(datasetsHelper.getDatasetName(nickname)), generator = cms.string(datasetsHelper.getGenerator(nickname)), productionProcess = cms.string(datasetsHelper.getProcess(nickname)), globalTag = cms.string(globaltag), prodCampaignGlobalTag = cms.string(datasetsHelper.getProductionCampaignGlobalTag(nickname, centerOfMassEnergy)), runPeriod = cms.string(datasetsHelper.getRunPeriod(nickname)), jetMultiplicity = cms.int32(datasetsHelper.getJetMultiplicity(nickname)), centerOfMassEnergy = cms.int32(centerOfMassEnergy), puScenario = cms.string(datasetsHelper.getPuScenario(nickname, centerOfMassEnergy)), isData = cms.bool(data) ) ## ------------------------------------------------------------------------ # General configuration process.kappaTuple.active += cms.vstring('VertexSummary') ## save VertexSummary, process.kappaTuple.VertexSummary.whitelist = cms.vstring('goodOfflinePrimaryVertices') #process.kappaTuple.active += cms.vstring('BeamSpot') ## save Beamspot, #process.kappaTuple.active += cms.vstring('TriggerObjects') if data: process.kappaTuple.active+= cms.vstring('DataInfo') ## produce Metadata for data, else: process.kappaTuple.active+= cms.vstring('GenInfo') ## produce Metadata for MC, process.kappaTuple.active+= cms.vstring('GenParticles') if channel == 'mm': process.kappaTuple.Info.hltWhitelist = cms.vstring( ## HLT selection # can be tested at http://regexpal.com # matches 'HLT_Mu17_Mu8_v7' etc. '^HLT_(Double)?Mu([0-9]+)_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$', # matches 'HLT_DoubleMu7_v8' etc. '^HLT_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$', ) ## ------------------------------------------------------------------------ # Configure PFCandidates and offline PV # PFCandidates ------------------------------------------------------------ # process.load('Kappa.Skimming.KPFCandidates_cff') if cmssw_version_number.startswith("7"): # Modifications for new particleFlow Pointers #process.pfPileUp.PFCandidates = cms.InputTag('particleFlowPtrs') #process.pfPileUpIso.PFCandidates = cms.InputTag('particleFlowPtrs') #process.pfNoPileUp.bottomCollection = cms.InputTag('particleFlowPtrs') #process.pfNoPileUpIso.bottomCollection = cms.InputTag('particleFlowPtrs') process.pfJetTracksAssociatorAtVertex.jets= cms.InputTag('ak5PFJets') #process.p *= (process.goodOfflinePrimaryVertices * process.pfPileUp * process.pfNoPileUp) process.p *= (process.goodOfflinePrimaryVertices * process.pfPileUp * process.pfNoPileUp * process.makePFBRECO * process.makeKappaPFCandidates) ## ------------------------------------------------------------------------ if channel == 'mm': # Configure Muons process.load('Kappa.Skimming.KMuons_cff') process.kappaTuple.active += cms.vstring('Muons') ## produce/save KappaMuons process.kappaTuple.Muons.minPt = cms.double(8.0) process.goodMuons = cms.EDFilter('CandViewSelector', src = cms.InputTag('muons'), cut = cms.string("pt > 15.0 & abs(eta) < 8.0"),# & isGlobalMuon()"), ) process.twoGoodMuons = cms.EDFilter('CandViewCountFilter', src = cms.InputTag('goodMuons'), minNumber = cms.uint32(2), ) process.p *= (process.goodMuons * process.twoGoodMuons * process.makeKappaMuons) ## for muon iso # https://github.com/ajgilbert/ICHiggsTauTau/blob/master/test/higgstautau_new_cfg.py#L430-L460 process.load('CommonTools.ParticleFlow.Isolation.pfMuonIsolation_cff') process.muPFIsoValueCharged04PFIso = process.muPFIsoValueCharged04.clone() process.muPFIsoValueChargedAll04PFIso = process.muPFIsoValueChargedAll04.clone() process.muPFIsoValueGamma04PFIso = process.muPFIsoValueGamma04.clone() process.muPFIsoValueNeutral04PFIso = process.muPFIsoValueNeutral04.clone() process.muPFIsoValuePU04PFIso = process.muPFIsoValuePU04.clone() process.muonPFIsolationValuesSequence = cms.Sequence( process.muPFIsoValueCharged04PFIso+ process.muPFIsoValueChargedAll04PFIso+ process.muPFIsoValueGamma04PFIso+ process.muPFIsoValueNeutral04PFIso+ process.muPFIsoValuePU04PFIso ) process.muPFIsoDepositCharged.src = cms.InputTag('muons') process.muPFIsoDepositChargedAll.src = cms.InputTag('muons') process.muPFIsoDepositNeutral.src = cms.InputTag('muons') process.muPFIsoDepositGamma.src = cms.InputTag('muons') process.muPFIsoDepositPU.src = cms.InputTag('muons') ## ------------------------------------------------------------------------ ## KappaJets process.load('Kappa.Skimming.KJets{0}_cff'.format('_run2' if cmssw_version_number.startswith("7") else '')) process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity') process.kappaTuple.Jets = cms.PSet( process.kappaNoCut, process.kappaNoRegEx, taggers = cms.vstring( # 'QGlikelihood', # 'QGmlp', 'TrackCountingHighEffBJetTags', 'TrackCountingHighPurBJetTags', 'JetProbabilityBJetTags', 'JetBProbabilityBJetTags', 'SoftElectronBJetTags', 'SoftMuonBJetTags', 'SoftMuonByIP3dBJetTags', 'SoftMuonByPtBJetTags', #'SimpleSecondaryVertexBJetTags', 'CombinedSecondaryVertexBJetTags', #'CombinedSecondaryVertexMVABJetTags', 'puJetIDFullDiscriminant', 'puJetIDFullLoose', 'puJetIDFullMedium', 'puJetIDFullTight', #'puJetIDCutbasedDiscriminant', #'puJetIDCutbasedLoose', #'puJetIDCutbasedMedium', #'puJetIDCutbasedTight' ), AK5PFTaggedJets = cms.PSet( src = cms.InputTag('ak5PFJets'), #QGtagger = cms.InputTag('AK5PFJetsQGTagger'), QGtagger = cms.InputTag(''), Btagger = cms.InputTag('ak5PF'), PUJetID = cms.InputTag('ak5PFPuJetMva'), PUJetID_full = cms.InputTag('full'), ), AK5PFTaggedJetsCHS = cms.PSet( src = cms.InputTag('ak5PFJetsCHS'), #QGtagger = cms.InputTag('AK5PFJetsCHSQGTagger'), QGtagger = cms.InputTag(''), Btagger = cms.InputTag('ak5PFCHS'), PUJetID = cms.InputTag('ak5PFCHSPuJetMva'), PUJetID_full = cms.InputTag('full'), ), ) process.kappaTuple.Jets.minPt = cms.double(5.0) if not data: process.kappaTuple.active += cms.vstring('GenJets') process.kappaTuple.GenJets.whitelist = cms.vstring('ak5GenJets') process.kappaTuple.GenJets.rename = cms.vstring('ak => AK') # add kt6PFJets, needed for the PileupDensity from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets process.kt6PFJets = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True ) process.kt6PFJets.Rho_EtaMax = cms.double(2.5) process.p *= ( process.makePFJets * process.makePFJetsCHS * process.kt6PFJets * # process.makeQGTagging * process.makeBTagging * process.makePUJetID ) ## ------------------------------------------------------------------------ ## MET # MET correction ---------------------------------------------------------- process.load('JetMETCorrections.Type1MET.pfMETCorrectionType0_cfi') process.p *= ( process.type0PFMEtCorrection ) #TODO check type 0 corrections process.kappaTuple.active += cms.vstring('MET') ## produce/save KappaPFMET process.kappaTuple.MET.whitelist = cms.vstring('pfChMet', '_pfMet_') if cmssw_version_number.startswith("5"): # MET correction ---------------------------------------------------------- process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff") process.pfchsMETcorr.src = cms.InputTag('goodOfflinePrimaryVertices') # Type-0 process.pfMETCHS = process.pfType1CorrectedMet.clone( applyType1Corrections = cms.bool(False), applyType0Corrections = cms.bool(True) ) # MET Path process.p *= ( process.producePFMETCorrections * process.pfMETCHS ) process.kappaTuple.MET.whitelist += cms.vstring("pfMETCHS") ## ------------------------------------------------------------------------ ## And let it run process.p *= ( process.kappaOut ) return process
def getBaseConfig( globaltag, testfile, maxevents, nickname, outputfilename, channel='mm', is_data=None, ): # Config parameters ############################################## cmssw_version = os.environ["CMSSW_VERSION"].split('_') cmssw_version = tuple([int(i) for i in cmssw_version[1:4]] + cmssw_version[4:]) autostr = "" if globaltag.lower() == 'auto': from Configuration.AlCa.autoCond import autoCond globaltag = autoCond['startup'] autostr = " (from autoCond)" if is_data is None: data = any([name in testfile[0] for name in 'SingleMu', 'DoubleMu', 'DoubleElectron', 'MuEG']) else: data = is_data miniaod = False ## print information print "\n------- CONFIGURATION 1 ---------" print "input: ", testfile[0], "... (%d files)" % len(testfile) if len(testfile) > 1 else "" print "file type: ", "miniAOD" if miniaod else "AOD" print "data: ", data print "output: ", outputfilename print "nickname: ", nickname print "global tag: ", globaltag + autostr print "max events: ", maxevents print "cmssw version: ", '.'.join([str(i) for i in cmssw_version]) print "channel: ", channel print "---------------------------------" print ############################################################################ # Basic Process Setup ############################################################################ process = cms.Process("KAPPA") ## MessageLogger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.default = cms.untracked.PSet( ERROR = cms.untracked.PSet(limit = cms.untracked.int32(5)) #suppressError = cms.untracked.vstring("electronIdMVAProducer") ) process.MessageLogger.cerr.FwkReport.reportEvery = 50 ## Options and Output Report process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) ## Source process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring() ) ## Maximal number of Events process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) ) ## Geometry and Detector Conditions (needed for a few patTuple production steps) import Kappa.Skimming.tools as tools cmssw_version_number = tools.get_cmssw_version_number() process.load("Configuration.Geometry.GeometryIdeal_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") from Configuration.AlCa.autoCond import autoCond process.GlobalTag.globaltag = cms.string(autoCond['startup']) # print the global tag until it is clear whether this auto global tag is fine print "GT from autoCond:", process.GlobalTag.globaltag process.load("Configuration.StandardSequences.MagneticField_cff") ############################################################################ # KAPPA ############################################################################ process.load('Kappa.Producers.KTuple_cff') process.kappaTuple = cms.EDAnalyzer('KTuple', process.kappaTupleDefaultsBlock, outputFile = cms.string("kappaTuple.root"), ) process.kappaTuple.active = cms.vstring() process.kappaTuple.outputFile = outputfilename ## name of output file process.kappaTuple.verbose = 0 ## verbosity level process.kappaTuple.profile = cms.bool(False) process.kappaOut = cms.Sequence(process.kappaTuple) process.path = cms.Path() process.source.fileNames = testfile process.maxEvents.input = maxevents ## number of events to be processed (-1 = all in file) if not globaltag.lower() == 'auto' : process.GlobalTag.globaltag = globaltag data = datasetsHelper.isData(nickname) process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) ) ############################################################################ # Basic Objects ############################################################################ #process.kappaTuple.active += cms.vstring('VertexSummary') ## save VertexSummary, #process.kappaTuple.VertexSummary.whitelist = cms.vstring('goodOfflinePrimaryVertices') #process.kappaTuple.active += cms.vstring('BeamSpot') ## save Beamspot, #process.kappaTuple.active += cms.vstring('TriggerObjects') if data: process.kappaTuple.active+= cms.vstring('DataInfo') ## produce Metadata for data, else: process.kappaTuple.active+= cms.vstring('GenInfo') ## produce Metadata for MC, process.kappaTuple.active+= cms.vstring('GenParticles') #Trigger trigger_dict = { 'mtrigger': ['^HLT_(Double)?Mu([0-9]+)_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$'], 'etrigger': ['HLT_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*'], 'emtrigger': ["HLT_Mu17_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*", "HLT_Mu8_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*",] } channel_dict = { 'ee': ['etrigger'], 'mm': ['mtrigger'], 'eemm': ['etrigger', 'mtrigger'], 'em': ['emtrigger'] } process.kappaTuple.Info.hltWhitelist = cms.vstring("") for triggers in channel_dict[channel]: for trigger in trigger_dict[triggers]: process.kappaTuple.Info.hltWhitelist += cms.vstring(trigger) ############################################################################ # Almost done ... ############################################################################ process.path *= ( process.kappaOut ) return process
def getBaseConfig( globaltag, testfile, maxevents, nickname, outputfilename, channel='mm', is_data=None, ): # Config parameters ############################################## cmssw_version = os.environ["CMSSW_VERSION"].split('_') cmssw_version = tuple([int(i) for i in cmssw_version[1:4]] + cmssw_version[4:]) autostr = "" if globaltag.lower() == 'auto': from Configuration.AlCa.autoCond import autoCond globaltag = autoCond['startup'] autostr = " (from autoCond)" if is_data is None: data = any([ name in testfile[0] for name in 'SingleMu', 'DoubleMu', 'DoubleElectron', 'MuEG' ]) else: data = is_data miniaod = False ## print information print "\n------- CONFIGURATION 1 ---------" print "input: ", testfile[0], "... (%d files)" % len( testfile) if len(testfile) > 1 else "" print "file type: ", "miniAOD" if miniaod else "AOD" print "data: ", data print "output: ", outputfilename print "nickname: ", nickname print "global tag: ", globaltag + autostr print "max events: ", maxevents print "cmssw version: ", '.'.join([str(i) for i in cmssw_version]) print "channel: ", channel print "---------------------------------" print ############################################################################ # Basic Process Setup ############################################################################ process = cms.Process("KAPPA") ## MessageLogger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.default = cms.untracked.PSet( ERROR=cms.untracked.PSet(limit=cms.untracked.int32(5)) #suppressError = cms.untracked.vstring("electronIdMVAProducer") ) process.MessageLogger.cerr.FwkReport.reportEvery = 50 ## Options and Output Report process.options = cms.untracked.PSet(wantSummary=cms.untracked.bool(True)) ## Source process.source = cms.Source("PoolSource", fileNames=cms.untracked.vstring()) ## Maximal number of Events process.maxEvents = cms.untracked.PSet(input=cms.untracked.int32(100)) ## Geometry and Detector Conditions (needed for a few patTuple production steps) import Kappa.Skimming.tools as tools cmssw_version_number = tools.get_cmssw_version_number() process.load("Configuration.Geometry.GeometryIdeal_cff") process.load( "Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") from Configuration.AlCa.autoCond import autoCond process.GlobalTag.globaltag = cms.string(autoCond['startup']) # print the global tag until it is clear whether this auto global tag is fine print "GT from autoCond:", process.GlobalTag.globaltag process.load("Configuration.StandardSequences.MagneticField_cff") ############################################################################ # KAPPA ############################################################################ process.load('Kappa.Producers.KTuple_cff') process.kappaTuple = cms.EDAnalyzer( 'KTuple', process.kappaTupleDefaultsBlock, outputFile=cms.string("kappaTuple.root"), ) process.kappaTuple.active = cms.vstring() process.kappaTuple.outputFile = outputfilename ## name of output file process.kappaTuple.verbose = 0 ## verbosity level process.kappaTuple.profile = cms.bool(False) process.kappaOut = cms.Sequence(process.kappaTuple) process.path = cms.Path() process.source.fileNames = testfile process.maxEvents.input = maxevents ## number of events to be processed (-1 = all in file) if not globaltag.lower() == 'auto': process.GlobalTag.globaltag = globaltag data = datasetsHelper.isData(nickname) process.options = cms.untracked.PSet(wantSummary=cms.untracked.bool(False)) ############################################################################ # Basic Objects ############################################################################ process.kappaTuple.active += cms.vstring( 'VertexSummary') ## save VertexSummary, process.kappaTuple.VertexSummary.whitelist = cms.vstring( 'goodOfflinePrimaryVertices') #process.kappaTuple.active += cms.vstring('BeamSpot') ## save Beamspot, #process.kappaTuple.active += cms.vstring('TriggerObjects') if data: process.kappaTuple.active += cms.vstring( 'DataInfo') ## produce Metadata for data, else: process.kappaTuple.active += cms.vstring( 'GenInfo') ## produce Metadata for MC, process.kappaTuple.active += cms.vstring('GenParticles') #Trigger trigger_dict = { 'mtrigger': ['^HLT_(Double)?Mu([0-9]+)_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$'], 'etrigger': [ 'HLT_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*' ], 'emtrigger': [ "HLT_Mu17_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*", "HLT_Mu8_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*", ] } channel_dict = { 'ee': ['etrigger'], 'mm': ['mtrigger'], 'eemm': ['etrigger', 'mtrigger'], 'em': ['emtrigger'] } process.kappaTuple.Info.hltWhitelist = cms.vstring("") for triggers in channel_dict[channel]: for trigger in trigger_dict[triggers]: process.kappaTuple.Info.hltWhitelist += cms.vstring(trigger) ############################################################################ # PFCandidates ############################################################################ process.load('Kappa.Skimming.KPFCandidates_cff') process.path *= ( process.goodOfflinePrimaryVertices * process.pfPileUp * process.pfNoPileUp #* process.makePFBRECO #* process.makeKappaPFCandidates ) if 'm' in channel: ############################################################################ # Muons ############################################################################ process.kappaTuple.active += cms.vstring( 'Muons') ## produce/save KappaMuons process.kappaTuple.Muons.minPt = cms.double(8.0) ## Isodeposits for muons process.load( 'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi' ) process.load( 'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi' ) process.load( 'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi' ) process.pfmuIsoDepositPFCandidates = cms.EDProducer( "CandIsoDepositProducer", src=cms.InputTag("muons"), MultipleDepositsFlag=cms.bool(False), trackType=cms.string('candidate'), ExtractorPSet=cms.PSet( Diff_z=cms.double(99999.99), ComponentName=cms.string('CandViewExtractor'), DR_Max=cms.double(1.0), Diff_r=cms.double(99999.99), inputCandView=cms.InputTag("particleFlow"), DR_Veto=cms.double(1e-05), DepositLabel=cms.untracked.string(''))) process.path *= (process.pfmuIsoDepositPFCandidates) process.goodMuons = cms.EDFilter( 'CandViewSelector', src=cms.InputTag('muons'), cut=cms.string("pt > 15.0"), ) process.oneGoodMuon = cms.EDFilter( 'CandViewCountFilter', src=cms.InputTag('goodMuons'), minNumber=cms.uint32(1), ) process.twoGoodMuons = cms.EDFilter( 'CandViewCountFilter', src=cms.InputTag('goodMuons'), minNumber=cms.uint32(2), ) if 'mm' in channel: process.path *= (process.goodMuons * process.twoGoodMuons) if 'e' in channel: ############################################################################ # Electrons ############################################################################ #TODO Add Electron process.load('EgammaAnalysis.ElectronTools.electronIdMVAProducer_cfi') process.load('TrackingTools.TransientTrack.TransientTrackBuilder_cfi') process.load( 'PhysicsTools.PatAlgos.producersLayer1.electronProducer_cfi') process.patElectrons.electronIDSources = cms.PSet( ## default cut based Id eidRobustLoose=cms.InputTag("eidRobustLoose"), eidRobustTight=cms.InputTag("eidRobustTight"), eidLoose=cms.InputTag("eidLoose"), eidTight=cms.InputTag("eidTight"), eidRobustHighEnergy=cms.InputTag("eidRobustHighEnergy"), ## MVA based Id idMvaTrigV0=cms.InputTag("mvaTrigV0"), idMvaTrigNoIPV0=cms.InputTag("mvaTrigNoIPV0"), idMvaNonTrigV0=cms.InputTag("mvaNonTrigV0"), ) process.patElectrons.genParticleMatch = "" process.patElectrons.addGenMatch = False process.patElectrons.embedGenMatch = False process.patElectrons.embedGsfElectronCore = True process.patElectrons.embedGsfTrack = True process.patElectrons.embedSuperCluster = True process.patElectrons.embedPflowSuperCluster = True process.patElectrons.embedSeedCluster = True process.patElectrons.embedBasicClusters = True process.patElectrons.embedPreshowerClusters = True process.patElectrons.embedPflowBasicClusters = True process.patElectrons.embedPflowPreshowerClusters = True process.patElectrons.embedPFCandidate = True process.patElectrons.embedTrack = True process.patElectrons.embedRecHits = True process.patElectrons.embedHighLevelSelection.pvSrc = "goodOfflinePrimaryVertices" process.electronIdMVA = cms.Sequence(process.mvaTrigV0 + process.mvaTrigNoIPV0 + process.mvaNonTrigV0) process.makeKappaElectrons = cms.Sequence(process.electronIdMVA * process.patElectrons) process.path *= (process.makeKappaElectrons) ## CALIBRATIONS # momentum corrections process.load( 'EgammaAnalysis.ElectronTools.electronRegressionEnergyProducer_cfi' ) process.eleRegressionEnergy.inputElectronsTag = cms.InputTag( 'patElectrons') process.eleRegressionEnergy.inputCollectionType = cms.uint32(1) process.load("Configuration.StandardSequences.Services_cff") process.RandomNumberGeneratorService = cms.Service( "RandomNumberGeneratorService", calibratedPatElectrons=cms.PSet( initialSeed=cms.untracked.uint32(1), engineName=cms.untracked.string('TRandom3')), ) # calibrate pat electrons process.load("EgammaAnalysis.ElectronTools.calibratedPatElectrons_cfi") if data: inputDataset = "22Jan2013ReReco" else: #inputDataset = "Summer12_DR53X_HCP2012" inputDataset = "Summer12_LegacyPaper" print "Using electron calibration", inputDataset process.calibratedPatElectrons.inputDataset = cms.string(inputDataset) process.calibratedPatElectrons.isMC = cms.bool(not data) ## for cutbased ID from CommonTools.ParticleFlow.Tools.pfIsolation import setupPFElectronIso, setupPFMuonIso process.calibeleIsoSequence = setupPFElectronIso( process, 'calibratedPatElectrons', "PFIsoCal") process.eleIsoSequence = setupPFElectronIso(process, 'patElectrons') process.pfiso = cms.Sequence(process.pfParticleSelectionSequence + process.eleIsoSequence + process.calibeleIsoSequence) # rho for e isolation from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets process.kt6PFJetsForIsolation = kt4PFJets.clone(rParam=0.6, doRhoFastjet=True) process.kt6PFJetsForIsolation.Rho_EtaMax = cms.double(2.5) process.path *= (process.eleRegressionEnergy * process.calibratedPatElectrons * process.pfiso * process.kt6PFJetsForIsolation) #add to Kappa process.kappaTuple.active += cms.vstring('Electrons') process.kappaTuple.Electrons = cms.PSet( process.kappaNoCut, process.kappaNoRegEx, ids=cms.vstring(), srcIds=cms.string("pat"), electrons=cms.PSet( src=cms.InputTag("patElectrons"), allConversions=cms.InputTag("allConversions"), offlineBeamSpot=cms.InputTag("offlineBeamSpot"), vertexcollection=cms.InputTag("goodOfflinePrimaryVertices"), isoValInputTags=cms.VInputTag( cms.InputTag('elPFIsoValueChargedAll04PFIdPFIso'), cms.InputTag('elPFIsoValueGamma04PFIdPFIso'), cms.InputTag('elPFIsoValueNeutral04PFIdPFIso'), cms.InputTag('elPFIsoValuePU04PFIdPFIso')), rhoIsoInputTag=cms.InputTag("kt6PFJetsForIsolation", "rho"), ), ) process.kappaTuple.Electrons.correlectrons = process.kappaTuple.Electrons.electrons.clone( src=cms.InputTag("calibratedPatElectrons"), isoValInputTags=cms.VInputTag( cms.InputTag('elPFIsoValueChargedAll04PFIdPFIsoCal'), cms.InputTag('elPFIsoValueGamma04PFIdPFIsoCal'), cms.InputTag('elPFIsoValueNeutral04PFIdPFIsoCal'), cms.InputTag('elPFIsoValuePU04PFIdPFIsoCal')), ) #process.kappaTuple.Electrons.ids = cms.vstring("mvaTrigV0", "mvaTrigNoIPV0", "mvaNonTrigV0") process.kappaTuple.Electrons.ids = cms.vstring('idMvaNonTrigV0', 'idMvaTrigNoIPV0', 'idMvaTrigV0') process.kappaTuple.Electrons.minPt = cms.double(8.0) ### Filter process.goodElectrons = cms.EDFilter( 'CandViewSelector', src=cms.InputTag('calibratedPatElectrons'), cut=cms.string("pt > 15.0"), ) process.oneGoodElectron = cms.EDFilter( 'CandViewCountFilter', src=cms.InputTag('goodElectrons'), minNumber=cms.uint32(1), ) process.twoGoodElectrons = cms.EDFilter( 'CandViewCountFilter', src=cms.InputTag('goodElectrons'), minNumber=cms.uint32(2), ) if 'ee' in channel: process.path *= (process.goodElectrons * process.twoGoodElectrons) if 'em' in channel: process.path *= (process.goodElectrons * process.oneGoodElectron * process.goodMuons * process.oneGoodMuon) ############################################################################ # Jets ############################################################################ process.load('RecoJets.JetProducers.ak5PFJets_cfi') process.ak5PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') process.ak5PFJetsCHS = process.ak5PFJets.clone( src=cms.InputTag('pfNoPileUp')) process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity') process.kappaTuple.Jets = cms.PSet( process.kappaNoCut, process.kappaNoRegEx, taggers=cms.vstring(), ak5PFJets=cms.PSet( src=cms.InputTag('ak5PFJets'), QGtagger=cms.InputTag('AK5PFJetsQGTagger'), Btagger=cms.InputTag('ak5PF'), PUJetID=cms.InputTag('ak5PFPuJetMva'), PUJetID_full=cms.InputTag('full'), ), ak5PFJetsCHS=cms.PSet( src=cms.InputTag('ak5PFJetsCHS'), QGtagger=cms.InputTag('AK5PFJetsCHSQGTagger'), Btagger=cms.InputTag('ak5PFCHS'), PUJetID=cms.InputTag('ak5PFCHSPuJetMva'), PUJetID_full=cms.InputTag('full'), ), ) process.kappaTuple.Jets.minPt = cms.double(5.0) if not data: process.load('RecoJets.JetProducers.ak5GenJets_cfi') process.path *= (process.genParticlesForJetsNoNu * process.ak5GenJetsNoNu) process.kappaTuple.active += cms.vstring('LV') process.kappaTuple.LV.rename = cms.vstring('ak => AK') process.kappaTuple.LV.whitelist = cms.vstring('ak5GenJetsNoNu') # add kt6PFJets, needed for the PileupDensity from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets process.kt6PFJets = kt4PFJets.clone(rParam=0.6, doRhoFastjet=True) process.kt6PFJets.Rho_EtaMax = cms.double(2.5) process.path *= (process.ak5PFJets * process.ak5PFJetsCHS * process.kt6PFJets) ############################################################################ # MET ############################################################################ # MET correction ---------------------------------------------------------- process.load('JetMETCorrections.Type1MET.pfMETCorrectionType0_cfi') process.path *= (process.type0PFMEtCorrection) #TODO check type 0 corrections process.kappaTuple.active += cms.vstring('MET') ## produce/save KappaPFMET process.kappaTuple.MET.whitelist = cms.vstring('pfChMet', '_pfMet_') if cmssw_version_number.startswith("5"): # MET correction ---------------------------------------------------------- process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff") process.pfchsMETcorr.src = cms.InputTag('goodOfflinePrimaryVertices') # Type-0 process.pfMETCHS = process.pfType1CorrectedMet.clone( applyType1Corrections=cms.bool(False), applyType0Corrections=cms.bool(True)) # MET Path process.path *= (process.producePFMETCorrections * process.pfMETCHS) process.kappaTuple.MET.whitelist += cms.vstring("pfMETCHS") ############################################################################ # Almost done ... ############################################################################ process.path *= (process.kappaOut) return process