def addTauIdAnalyses(process, dataVersion, prefix, prototype, commonSequence, additionalCounters): from HiggsAnalysis.HeavyChHiggsToTauNu.HChTools import addAnalysis import HiggsAnalysis.HeavyChHiggsToTauNu.HChMetCorrection as MetCorrection selections = tauSelections[:] names = tauSelectionNames[:] # Remove TCTau from list tctauIndex = selections.index(tauSelectionCaloTauCutBased) del selections[tctauIndex] del names[tctauIndex] # Remove PF shrinking cone from list pfShrinkingConeIndex = selections.index(tauSelectionShrinkingConeCutBased) del selections[pfShrinkingConeIndex] del names[pfShrinkingConeIndex] # Remove TaNC from list tancIndex = selections.index(tauSelectionShrinkingConeTaNCBased) del selections[tancIndex] del names[tancIndex] # HPS loose hpsLoose = selections.index(tauSelectionHPSLooseTauBased) #del selections[hpsLoose] #del names[hpsLoose] # TCTau can be missing in tau embedding case try: caloTauIndex = selections.index(tauSelectionCaloTauCutBased) del selections[caloTauIndex] del names[caloTauIndex] except ValueError: pass # Remove combined HPS TaNC from list combinedHPSTaNCIndex = selections.index( tauSelectionCombinedHPSTaNCTauBased) del selections[combinedHPSTaNCIndex] del names[combinedHPSTaNCIndex] for selection, name in zip(selections, names): module = prototype.clone() module.tauSelection = selection.clone() # Calculate type 1 MET (type1Sequence, type1Met) = MetCorrection.addCorrectedMet(process, dataVersion, module.tauSelection, module.jetSelection, postfix=name) module.MET.type1Src = type1Met seq = cms.Sequence(commonSequence * type1Sequence) setattr(process, "commonSequence" + name, seq) addAnalysis(process, prefix + name, module, preSequence=seq, additionalCounters=additionalCounters)
def addTauIdAnalyses(process, dataVersion, prefix, prototype, commonSequence, additionalCounters): from HiggsAnalysis.HeavyChHiggsToTauNu.HChTools import addAnalysis import HiggsAnalysis.HeavyChHiggsToTauNu.HChMetCorrection as MetCorrection selections = tauSelections[:] names = tauSelectionNames[:] # Remove TCTau from list tctauIndex = selections.index(tauSelectionCaloTauCutBased) del selections[tctauIndex] del names[tctauIndex] # Remove PF shrinking cone from list pfShrinkingConeIndex = selections.index(tauSelectionShrinkingConeCutBased) del selections[pfShrinkingConeIndex] del names[pfShrinkingConeIndex] # Remove TaNC from list tancIndex = selections.index(tauSelectionShrinkingConeTaNCBased) del selections[tancIndex] del names[tancIndex] # HPS loose hpsLoose = selections.index(tauSelectionHPSLooseTauBased) #del selections[hpsLoose] #del names[hpsLoose] # TCTau can be missing in tau embedding case try: caloTauIndex = selections.index(tauSelectionCaloTauCutBased) del selections[caloTauIndex] del names[caloTauIndex] except ValueError: pass # Remove combined HPS TaNC from list combinedHPSTaNCIndex = selections.index(tauSelectionCombinedHPSTaNCTauBased) del selections[combinedHPSTaNCIndex] del names[combinedHPSTaNCIndex] for selection, name in zip(selections, names): module = prototype.clone() module.tauSelection = selection.clone() # Calculate type 1 MET (type1Sequence, type1Met) = MetCorrection.addCorrectedMet(process, dataVersion, module.tauSelection, module.jetSelection, postfix=name) module.MET.type1Src = type1Met seq = cms.Sequence( commonSequence * type1Sequence ) setattr(process, "commonSequence"+name, seq) addAnalysis(process, prefix+name, module, preSequence=seq, additionalCounters=additionalCounters)
# process.QCDMeasurement.factorization = cms.untracked.PSet() # mettableCoeff.METTableFactorizationCoefficients.METTables_Coefficients = cms.untracked.vdouble( *( # 0.0, 0.0, 0.0223602484, 0.0263059, 0.0210332103, 0.016273393, 0.018639329, 0.0176211454, 0.0183615819, 0.0159055926, 0.025789813, 0.0652346858 # ) ) mettableCoeff.METTableFactorizationCoefficients.factorizationSourceName = cms.untracked.string( "PMET70_afterJetSelection_fromData_v3" ) process.QCDMeasurement.factorization = mettables.METTableParameters process.QCDMeasurement.factorization.factorizationTables = mettableCoeff.METTableFactorizationCoefficients # Type 1 MET import HiggsAnalysis.HeavyChHiggsToTauNu.HChMetCorrection as MetCorrection (sequence, type1Met) = MetCorrection.addCorrectedMet( process, dataVersion, process.QCDMeasurement.tauSelection, process.QCDMeasurement.jetSelection ) process.commonSequence *= sequence process.QCDMeasurement.MET.type1Src = type1Met # Prescale fetching done automatically for data if dataVersion.isData() and not disablePrescales: process.load("HiggsAnalysis.HeavyChHiggsToTauNu.HPlusPrescaleWeightProducer_cfi") process.hplusPrescaleWeightProducer.prescaleWeightTriggerResults.setProcessName(dataVersion.getTriggerProcess()) process.hplusPrescaleWeightProducer.prescaleWeightHltPaths = param.trigger.triggers.value() process.commonSequence *= process.hplusPrescaleWeightProducer process.QCDMeasurement.prescaleSource = cms.untracked.InputTag("hplusPrescaleWeightProducer") # Print output print "\nVertexWeight:", process.QCDMeasurement.vertexWeight print "\nTrigger:", process.QCDMeasurement.trigger
def addJESVariationAnalysis(process, dataVersion, prefix, name, prototype, additionalCounters, variation, etaVariation, unclusteredEnergyVariationForMET, doJetVariation=True): variationName = name tauVariationName = name+"TauVariation" jetVariationName = name+"JetVariation" jetsForMetVariation = name+"JetsForMetVariation" rawMetVariationName = name+"RawMetVariation" type1MetVariationName = name+"Type1MetVariation" analysisName = prefix+name countersName = analysisName+"Counters" pathName = analysisName+"Path" # Tau variation tauv = tauVariation.clone( src = prototype.tauSelection.src.value(), energyVariation = variation, energyEtaVariation = etaVariation, ) setattr(process, tauVariationName, tauv) # Recompute type 1 MET on the basis of variated tau. However, use # the non-variated jets, because the jet variation is taken into # account in the MET variation. The tau variation is taken into # account here, because the variation can change the decision of # which tau to select, and that tau is needed for the jet cleaning # in the type 1 MET calculation. tauSelection = prototype.tauSelection.clone(src=tauVariationName) (type1sequence, type1Met) = MetCorrection.addCorrectedMet(process, dataVersion, tauSelection, prototype.jetSelection, postfix=name) tauForMetVariation = "selectedPatTausForMetCorr"+name # Jet variation jetv = jetVariation.clone( src = prototype.jetSelection.src.value(), defaultPlusVariation = variation > 0, doVariation = doJetVariation, ) setattr(process, jetVariationName, jetv) # Select (type I like) jets for MET variation, clean the selected tau from these cutstr = process.selectedPatJetsForMETtype1p2Corr.cut.value() cutstr += "&& pt() > %f" % process.patPFJetMETtype1p2Corr.type1JetPtThreshold.value() jetsForMetv = cms.EDFilter("PATJetSelector", src = cms.InputTag(jetVariationName), cut = cms.string(cutstr), checkOverlaps = cms.PSet( taus = cms.PSet( src = cms.InputTag(tauForMetVariation), algorithm = cms.string("byDeltaR"), preselection = cms.string(""), deltaR = cms.double(0.1), checkRecoComponents = cms.bool(False), pairCut = cms.string(""), requireNoOverlaps = cms.bool(True), ) ) ) setattr(process, jetsForMetVariation, jetsForMetv) # MET variation # Use the same code for now (although this is not according to the # latest recipe for raw). Use the selected tau, and cleaned jets # passing the type1 selection (both tau and jet inputs should be # the variated ones) metrawv = metVariation.clone( metSrc = prototype.MET.rawSrc.value(), tauSrc = tauForMetVariation, jetSrc = jetsForMetVariation, unclusteredVariation = unclusteredEnergyVariationForMET ) setattr(process, rawMetVariationName, metrawv) mettype1v = metVariation.clone( metSrc = type1Met, tauSrc = tauForMetVariation, jetSrc = jetsForMetVariation, unclusteredVariation = unclusteredEnergyVariationForMET ) setattr(process, type1MetVariationName, mettype1v) # Construct the signal analysis module for this variation # Use variated taus, jets and MET analysis = prototype.clone() analysis.tauSelection.src = tauVariationName analysis.jetSelection.src = jetVariationName analysis.MET.rawSrc = rawMetVariationName analysis.MET.type1Src = type1MetVariationName setattr(process, analysisName, analysis) # Construct the counters module counters = cms.EDAnalyzer("HPlusEventCountAnalyzer", counterNames = cms.untracked.InputTag(analysisName, "counterNames"), counterInstances = cms.untracked.InputTag(analysisName, "counterInstances") ) if len(additionalCounters) > 0: counters.counters = cms.untracked.VInputTag([cms.InputTag(c) for c in additionalCounters]) setattr(process, countersName, counters) # Construct the path path = cms.Path( process.commonSequence * tauv * type1sequence * jetv * jetsForMetv * metrawv * mettype1v * analysis * counters ) setattr(process, pathName, path)
import HiggsAnalysis.HeavyChHiggsToTauNu.HChMetTableFactorization_cfi as mettables import HiggsAnalysis.HeavyChHiggsToTauNu.METTableFactorization_NoFactorization_cfi as mettableCoeff #process.QCDMeasurement.factorization = cms.untracked.PSet() #mettableCoeff.METTableFactorizationCoefficients.METTables_Coefficients = cms.untracked.vdouble( *( #0.0, 0.0, 0.0223602484, 0.0263059, 0.0210332103, 0.016273393, 0.018639329, 0.0176211454, 0.0183615819, 0.0159055926, 0.025789813, 0.0652346858 #) ) mettableCoeff.METTableFactorizationCoefficients.factorizationSourceName = cms.untracked.string( 'PMET70_afterJetSelection_fromData_v3') process.QCDMeasurement.factorization = mettables.METTableParameters process.QCDMeasurement.factorization.factorizationTables = mettableCoeff.METTableFactorizationCoefficients # Type 1 MET import HiggsAnalysis.HeavyChHiggsToTauNu.HChMetCorrection as MetCorrection (sequence, type1Met) = MetCorrection.addCorrectedMet(process, dataVersion, process.QCDMeasurement.tauSelection, process.QCDMeasurement.jetSelection) process.commonSequence *= sequence process.QCDMeasurement.MET.type1Src = type1Met # Prescale fetching done automatically for data if dataVersion.isData() and not disablePrescales: process.load( "HiggsAnalysis.HeavyChHiggsToTauNu.HPlusPrescaleWeightProducer_cfi") process.hplusPrescaleWeightProducer.prescaleWeightTriggerResults.setProcessName( dataVersion.getTriggerProcess()) process.hplusPrescaleWeightProducer.prescaleWeightHltPaths = param.trigger.triggers.value( ) process.commonSequence *= process.hplusPrescaleWeightProducer process.QCDMeasurement.prescaleSource = cms.untracked.InputTag( "hplusPrescaleWeightProducer")
def addJESVariationAnalysis(process, dataVersion, prefix, name, prototype, additionalCounters, variation, etaVariation, unclusteredEnergyVariationForMET, doJetVariation=True): variationName = name tauVariationName = name + "TauVariation" jetVariationName = name + "JetVariation" jetsForMetVariation = name + "JetsForMetVariation" rawMetVariationName = name + "RawMetVariation" type1MetVariationName = name + "Type1MetVariation" analysisName = prefix + name countersName = analysisName + "Counters" pathName = analysisName + "Path" # Tau variation tauv = tauVariation.clone( src=prototype.tauSelection.src.value(), energyVariation=variation, energyEtaVariation=etaVariation, ) setattr(process, tauVariationName, tauv) # Recompute type 1 MET on the basis of variated tau. However, use # the non-variated jets, because the jet variation is taken into # account in the MET variation. The tau variation is taken into # account here, because the variation can change the decision of # which tau to select, and that tau is needed for the jet cleaning # in the type 1 MET calculation. tauSelection = prototype.tauSelection.clone(src=tauVariationName) (type1sequence, type1Met) = MetCorrection.addCorrectedMet(process, dataVersion, tauSelection, prototype.jetSelection, postfix=name) tauForMetVariation = "selectedPatTausForMetCorr" + name # Jet variation jetv = jetVariation.clone( src=prototype.jetSelection.src.value(), defaultPlusVariation=variation > 0, doVariation=doJetVariation, ) setattr(process, jetVariationName, jetv) # Select (type I like) jets for MET variation, clean the selected tau from these cutstr = process.selectedPatJetsForMETtype1p2Corr.cut.value() cutstr += "&& pt() > %f" % process.patPFJetMETtype1p2Corr.type1JetPtThreshold.value( ) jetsForMetv = cms.EDFilter("PATJetSelector", src=cms.InputTag(jetVariationName), cut=cms.string(cutstr), checkOverlaps=cms.PSet(taus=cms.PSet( src=cms.InputTag(tauForMetVariation), algorithm=cms.string("byDeltaR"), preselection=cms.string(""), deltaR=cms.double(0.1), checkRecoComponents=cms.bool(False), pairCut=cms.string(""), requireNoOverlaps=cms.bool(True), ))) setattr(process, jetsForMetVariation, jetsForMetv) # MET variation # Use the same code for now (although this is not according to the # latest recipe for raw). Use the selected tau, and cleaned jets # passing the type1 selection (both tau and jet inputs should be # the variated ones) metrawv = metVariation.clone( metSrc=prototype.MET.rawSrc.value(), tauSrc=tauForMetVariation, jetSrc=jetsForMetVariation, unclusteredVariation=unclusteredEnergyVariationForMET) setattr(process, rawMetVariationName, metrawv) mettype1v = metVariation.clone( metSrc=type1Met, tauSrc=tauForMetVariation, jetSrc=jetsForMetVariation, unclusteredVariation=unclusteredEnergyVariationForMET) setattr(process, type1MetVariationName, mettype1v) # Construct the signal analysis module for this variation # Use variated taus, jets and MET analysis = prototype.clone() analysis.tauSelection.src = tauVariationName analysis.jetSelection.src = jetVariationName analysis.MET.rawSrc = rawMetVariationName analysis.MET.type1Src = type1MetVariationName setattr(process, analysisName, analysis) # Construct the counters module counters = cms.EDAnalyzer( "HPlusEventCountAnalyzer", counterNames=cms.untracked.InputTag(analysisName, "counterNames"), counterInstances=cms.untracked.InputTag(analysisName, "counterInstances")) if len(additionalCounters) > 0: counters.counters = cms.untracked.VInputTag( [cms.InputTag(c) for c in additionalCounters]) setattr(process, countersName, counters) # Construct the path path = cms.Path(process.commonSequence * tauv * type1sequence * jetv * jetsForMetv * metrawv * mettype1v * analysis * counters) setattr(process, pathName, path)
tauSelection = param.tauSelectionHPSTightTauBased, jetSelection = param.jetSelection, MET = param.MET, bTagging = param.bTagging, fakeMETVeto = param.fakeMETVeto, jetTauInvMass = param.jetTauInvMass, topSelection = param.topSelection, forwardJetVeto = param.forwardJetVeto, transverseMassCut = param.transverseMassCut, EvtTopology = param.EvtTopology, vertexWeight = param.vertexWeight, GenParticleAnalysis = param.GenParticleAnalysis, Tree = param.tree, ) import HiggsAnalysis.HeavyChHiggsToTauNu.HChMetCorrection as MetCorrection (sequence, type1Met) = MetCorrection.addCorrectedMet(process, dataVersion, process.signalAnalysis.tauSelection, process.signalAnalysis.jetSelection) process.commonSequence *= sequence process.signalAnalysis.MET.type1Src = type1Met # Prescale fetching done automatically for data if dataVersion.isData() and options.tauEmbeddingInput == 0: process.load("HiggsAnalysis.HeavyChHiggsToTauNu.HPlusPrescaleWeightProducer_cfi") process.hplusPrescaleWeightProducer.prescaleWeightTriggerResults.setProcessName(dataVersion.getTriggerProcess()) process.hplusPrescaleWeightProducer.prescaleWeightHltPaths = param.trigger.triggers.value() process.commonSequence *= process.hplusPrescaleWeightProducer process.signalAnalysis.prescaleSource = cms.untracked.InputTag("hplusPrescaleWeightProducer") # Print output print "Trigger:", process.signalAnalysis.trigger print "Trigger scale factor mode:", process.signalAnalysis.triggerEfficiencyScaleFactor.mode print "VertexWeight:",process.signalAnalysis.vertexWeight
param.MET.METCut = cms.untracked.double(0.0) param.bTagging.discriminatorCut = cms.untracked.double(-999) param.GlobalMuonVeto.MuonPtCut = cms.untracked.double(999) # Signal analysis module for the "golden analysis" import HiggsAnalysis.HeavyChHiggsToTauNu.signalAnalysis as signalAnalysis process.signalAnalysis = signalAnalysis.createEDFilter(param) # process.signalAnalysis.GlobalMuonVeto = param.NonIsolatedMuonVeto # Change default tau algorithm here if needed #process.signalAnalysis.tauSelection.tauSelectionHPSTightTauBased # HPS Tight is the default # Add type 1 MET import HiggsAnalysis.HeavyChHiggsToTauNu.HChMetCorrection as MetCorrection (sequence, type1Met) = MetCorrection.addCorrectedMet(process, dataVersion, process.signalAnalysis.tauSelection, process.signalAnalysis.jetSelection) process.commonSequence *= sequence process.signalAnalysis.MET.type1Src = type1Met # Prescale fetching done automatically for data if dataVersion.isData() and options.tauEmbeddingInput == 0: process.load( "HiggsAnalysis.HeavyChHiggsToTauNu.HPlusPrescaleWeightProducer_cfi") process.hplusPrescaleWeightProducer.prescaleWeightTriggerResults.setProcessName( dataVersion.getTriggerProcess()) process.hplusPrescaleWeightProducer.prescaleWeightHltPaths = param.trigger.triggers.value( ) process.commonSequence *= process.hplusPrescaleWeightProducer process.signalAnalysis.prescaleSource = cms.untracked.InputTag( "hplusPrescaleWeightProducer")