Пример #1
0
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)
Пример #3
0
# 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
Пример #4
0
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)
Пример #5
0
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
Пример #8
0
    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")