Ejemplo n.º 1
0
def addEScaleSmearing2018(process):
    process.calibratedPatElectrons102X = calibratedPatElectrons.clone(
        produceCalibratedObjs=False,
        correctionFile=cms.string(
            "tthAnalysis/NanoAOD/data/ScalesSmearings/Run2018_Step2Closure_CoarseEtaR9Gain_v2"
        ),
    )
    run2_nanoAOD_102Xv1.toModify(
        process.slimmedElectronsWithUserData.userFloats,
        ecalTrkEnergyErrPostCorrNew=cms.InputTag("calibratedPatElectrons102X",
                                                 "ecalTrkEnergyErrPostCorr"),
        ecalTrkEnergyPreCorrNew=cms.InputTag("calibratedPatElectrons102X",
                                             "ecalTrkEnergyPreCorr"),
        ecalTrkEnergyPostCorrNew=cms.InputTag("calibratedPatElectrons102X",
                                              "ecalTrkEnergyPostCorr"),
    )
    run2_nanoAOD_102Xv1.toModify(
        process.electronTable.variables,
        pt=Var(
            "pt*userFloat('ecalTrkEnergyPostCorrNew')/userFloat('ecalTrkEnergyPreCorrNew')",
            float,
            precision=-1,
            doc="p_{T}"),
        energyErr=Var("userFloat('ecalTrkEnergyErrPostCorrNew')",
                      float,
                      precision=10,
                      doc="energy error of the cluster-track combination"),
        eCorr=Var(
            "userFloat('ecalTrkEnergyPostCorrNew')/userFloat('ecalTrkEnergyPreCorrNew')",
            float,
            doc="ratio of the calibrated energy/miniaod energy"),
    )
    _with102XScale_sequence = process.electronSequence.copy()
    _with102XScale_sequence.replace(
        process.slimmedElectronsWithUserData,
        process.calibratedPatElectrons102X +
        process.slimmedElectronsWithUserData)
    run2_nanoAOD_102Xv1.toReplaceWith(process.electronSequence,
                                      _with102XScale_sequence)
Ejemplo n.º 2
0
def setupCustomizedAK8(process, runOnMC=False, path=None):
    # recluster Puppi jets, add N-Subjettiness and ECF
    bTagDiscriminators = [
        'pfCombinedInclusiveSecondaryVertexV2BJetTags',
        'pfBoostedDoubleSecondaryVertexAK8BJetTags',
        'pfMassIndependentDeepDoubleBvLJetTags:probHbb',
        'pfMassIndependentDeepDoubleCvLJetTags:probHcc',
        'pfMassIndependentDeepDoubleCvBJetTags:probHcc',
    ]
    subjetBTagDiscriminators = [
        'pfCombinedInclusiveSecondaryVertexV2BJetTags',
        'pfDeepCSVJetTags:probb',
        'pfDeepCSVJetTags:probbb',
    ]
    JETCorrLevels = ['L2Relative', 'L3Absolute', 'L2L3Residual']

    from PhysicsTools.NanoHRT.jetToolbox_cff import jetToolbox
    jetToolbox(process,
               'ak8',
               'dummySeq',
               'out',
               associateTask=False,
               PUMethod='Puppi',
               JETCorrPayload='AK8PFPuppi',
               JETCorrLevels=JETCorrLevels,
               Cut='pt > 170.0 && abs(rapidity()) < 2.4',
               miniAOD=True,
               runOnMC=runOnMC,
               addNsub=True,
               maxTau=4,
               addEnergyCorrFunc=True,
               GetSubjetMCFlavour=False,
               GetJetMCFlavour=False,
               addSoftDrop=True,
               addSoftDropSubjets=True,
               subJETCorrPayload='AK4PFPuppi',
               subJETCorrLevels=JETCorrLevels,
               bTagDiscriminators=bTagDiscriminators,
               subjetBTagDiscriminators=subjetBTagDiscriminators)

    if runOnMC:
        process.ak8GenJetsNoNu.jetPtMin = 100
        process.ak8GenJetsNoNuSoftDrop.jetPtMin = 100

    # DeepAK8
    from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection
    from RecoBTag.MXNet.pfDeepBoostedJet_cff import _pfDeepBoostedJetTagsProbs, _pfMassDecorrelatedDeepBoostedJetTagsProbs

    Bdiscs = [
        'pfDeepFlavourJetTags:probb', 'pfDeepFlavourJetTags:probbb',
        'pfDeepFlavourJetTags:probuds', 'pfDeepFlavourJetTags:probg',
        'pfDeepFlavourJetTags:problepb', 'pfDeepFlavourJetTags:probc',
        'pfCombinedInclusiveSecondaryVertexV2BJetTags'
    ]

    from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection

    jetToolbox(process,
               'ak8',
               'ak8JetSubs',
               'out',
               associateTask=False,
               updateCollection='packedPatJetsAK8PFPuppiSoftDrop',
               JETCorrPayload='AK8PFPuppi',
               JETCorrLevels=JETCorrLevels,
               Cut='pt > 170.0 && abs(rapidity()) < 2.4',
               miniAOD=True,
               runOnMC=runOnMC,
               bTagDiscriminators=bTagDiscriminators +
               _pfDeepBoostedJetTagsProbs +
               _pfMassDecorrelatedDeepBoostedJetTagsProbs,
               updateCollectionSubjets=
               'selectedPatJetsAK8PFPuppiSoftDropPacked:SubJets',
               subjetBTagDiscriminators=Bdiscs,
               subJETCorrPayload='AK4PFPuppi',
               subJETCorrLevels=JETCorrLevels,
               postFix='AK8WithPuppiDaughters')

    process.imageJetsAK8Puppi = cms.EDProducer(
        'ImageProducer',
        src=cms.InputTag(
            'selectedUpdatedPatJetsAK8PFPuppiAK8WithPuppiDaughters'),
        sj=cms.InputTag(
            'selectedUpdatedPatJetsAK8PFPuppiAK8WithPuppiDaughtersSoftDropPacked'
        ),
        sdmcoll=cms.string('ak8PFJetsPuppiSoftDropMass'),
        pb_path=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/top_MC_output.pb'),
        pb_pathMD=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/top_MD_output.pb'),
        pb_pathPhoflessMD=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/pho_MD_flavorless_output.pb'),
        pb_pathPhoMD=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/pho_nolep_MD_doubleB_output.pb'),
        pb_pathW=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/w_MC_output.pb'),
        pb_pathWMD=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/w_MD_output.pb'),
        pb_pathH=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/hbb_nolep_MC_doubleB_output.pb'),
        pb_pathHMD=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/hbb_nolep_MD_doubleB_output.pb'),
        pb_pathHflessMD=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/hbb_MD_flavorless_output.pb'),
        pb_pathZ=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/z_nolep_MC_doubleB_output.pb'),
        pb_pathZflessMD=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/z_MD_flavorless_output.pb'),
        pb_pathZMD=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/z_nolep_MD_doubleB_output.pb'),
        pb_pathWWMD=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/ww_MD_output.pb'),
        pb_pathWWlepMD=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/wwlep_MD_output.pb'),
        pb_pathHWWMD=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/hww_MD_output.pb'),
        pb_pathHWWlepMD=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/hwwlep_MD_output.pb'),
        pb_pathMDHOT=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/top_MD_HOT_output.pb'),
        pb_pathWWlepMDHOT=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/wwlep_MD_HOT_output.pb'),
        pb_pathWWMDHOT=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/ww_MD_HOT_output.pb'),
        pb_pathHWWlepMDHOT=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/hwwlep_MD_HOT_output.pb'),
        pb_pathHWWMDHOT=cms.untracked.FileInPath(
            'PhysicsTools/NanoHRT/data/Image/hww_MD_HOT_output.pb'),
        extex=cms.string(''),
        isHotVR=cms.bool(False),
    )

    # src
    srcJets = cms.InputTag('imageJetsAK8Puppi')

    # jetID
    process.looseJetIdCustomAK8 = cms.EDProducer(
        "PatJetIDValueMapProducer",
        filterParams=cms.PSet(
            version=cms.string('WINTER16'),
            quality=cms.string('LOOSE'),
        ),
        src=srcJets)

    process.tightJetIdCustomAK8 = cms.EDProducer(
        "PatJetIDValueMapProducer",
        filterParams=cms.PSet(
            version=cms.string('WINTER17PUPPI'),
            quality=cms.string('TIGHT'),
        ),
        src=srcJets)
    run2_miniAOD_80XLegacy.toModify(process.tightJetIdCustomAK8.filterParams,
                                    version="WINTER16")

    process.tightJetIdLepVetoCustomAK8 = cms.EDProducer(
        "PatJetIDValueMapProducer",
        filterParams=cms.PSet(
            version=cms.string('WINTER17PUPPI'),
            quality=cms.string('TIGHTLEPVETO'),
        ),
        src=srcJets)

    for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
        modifier.toModify(process.tightJetIdCustomAK8.filterParams,
                          version="WINTER16")
        modifier.toModify(process.tightJetIdLepVetoCustomAK8.filterParams,
                          version="WINTER16")
    run2_nanoAOD_102Xv1.toModify(process.tightJetIdCustomAK8.filterParams,
                                 version="SUMMER18PUPPI")
    run2_nanoAOD_102Xv1.toModify(
        process.tightJetIdLepVetoCustomAK8.filterParams,
        version="SUMMER18PUPPI")

    process.customAK8WithUserData = cms.EDProducer(
        "PATJetUserDataEmbedder",
        src=srcJets,
        userFloats=cms.PSet(),
        userInts=cms.PSet(
            tightId=cms.InputTag("tightJetIdCustomAK8"),
            tightIdLepVeto=cms.InputTag("tightJetIdLepVetoCustomAK8"),
        ),
    )
    run2_miniAOD_80XLegacy.toModify(
        process.customAK8WithUserData.userInts,
        looseId=cms.InputTag("looseJetIdCustomAK8"),
        tightIdLepVeto=None,
    )

    process.customAK8Table = cms.EDProducer(
        "SimpleCandidateFlatTableProducer",
        src=cms.InputTag("customAK8WithUserData"),
        name=cms.string("CustomAK8Puppi"),
        cut=cms.string(""),
        doc=cms.string("customized ak8 puppi jets for HRT"),
        singleton=cms.bool(False),  # the number of entries is variable
        extension=cms.bool(False),  # this is the main table for the jets
        variables=cms.PSet(
            P4Vars,
            jetId=Var(
                "userInt('tightId')*2+4*userInt('tightIdLepVeto')",
                int,
                doc=
                "Jet ID flags bit1 is loose (always false in 2017 since it does not exist), bit2 is tight, bit3 is tightLepVeto"
            ),
            area=Var("jetArea()",
                     float,
                     doc="jet catchment area, for JECs",
                     precision=10),
            rawFactor=Var("1.-jecFactor('Uncorrected')",
                          float,
                          doc="1 - Factor to get back to raw pT",
                          precision=6),
            tau1=Var("userFloat('NjettinessAK8Puppi:tau1')",
                     float,
                     doc="Nsubjettiness (1 axis)",
                     precision=10),
            tau2=Var("userFloat('NjettinessAK8Puppi:tau2')",
                     float,
                     doc="Nsubjettiness (2 axis)",
                     precision=10),
            tau3=Var("userFloat('NjettinessAK8Puppi:tau3')",
                     float,
                     doc="Nsubjettiness (3 axis)",
                     precision=10),
            tau4=Var("userFloat('NjettinessAK8Puppi:tau4')",
                     float,
                     doc="Nsubjettiness (4 axis)",
                     precision=10),
            n2b1=Var(
                "userFloat('ak8PFJetsPuppiSoftDropValueMap:nb1AK8PuppiSoftDropN2')",
                float,
                doc="N2 with beta=1",
                precision=10),
            n3b1=Var(
                "userFloat('ak8PFJetsPuppiSoftDropValueMap:nb1AK8PuppiSoftDropN3')",
                float,
                doc="N3 with beta=1",
                precision=10),
            msoftdrop=Var("groomedMass()",
                          float,
                          doc="Corrected soft drop mass with PUPPI",
                          precision=10),
            #btagDeepB = Var("bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')",float,doc="DeepCSV b+bb tag discriminator",precision=10),
            #btagCSVV2=Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')", float, doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)", precision=10),
            btagHbb=Var(
                "bDiscriminator('pfBoostedDoubleSecondaryVertexAK8BJetTags')",
                float,
                doc="old Higgs to BB tagger discriminator",
                precision=10),
            btagDDBvL=Var(
                "bDiscriminator('pfMassIndependentDeepDoubleBvLJetTags:probHbb')",
                float,
                doc=
                "DeepDoubleX (mass-decorrelated) discriminator for H(Z)->bb vs QCD",
                precision=10),
            btagDDCvL=Var(
                "bDiscriminator('pfMassIndependentDeepDoubleCvLJetTags:probHcc')",
                float,
                doc=
                "DeepDoubleX (mass-decorrelated) discriminator for H(Z)->cc vs QCD",
                precision=10),
            btagDDCvB=Var(
                "bDiscriminator('pfMassIndependentDeepDoubleCvBJetTags:probHcc')",
                float,
                doc=
                "DeepDoubleX (mass-decorrelated) discriminator for H(Z)->cc vs H(Z)->bb",
                precision=10),
            subJetIdx1=Var(
                "?nSubjetCollections()>0 && subjets().size()>0?subjets()[0].key():-1",
                int,
                doc="index of first subjet"),
            subJetIdx2=Var(
                "?nSubjetCollections()>0 && subjets().size()>1?subjets()[1].key():-1",
                int,
                doc="index of second subjet"),
            nBHadrons=Var("jetFlavourInfo().getbHadrons().size()",
                          int,
                          doc="number of b-hadrons"),
            nCHadrons=Var("jetFlavourInfo().getcHadrons().size()",
                          int,
                          doc="number of c-hadrons"),
            iW=Var("userFloat('Image:w')",
                   float,
                   doc="Image w tagger score",
                   precision=-1),
            iMDW=Var("userFloat('ImageMD:w')",
                     float,
                     doc="Image MD w tagger score",
                     precision=-1),
            iMDH=Var("userFloat('ImageMD:h')",
                     float,
                     doc="Image MD h tagger score",
                     precision=-1),
            iMDHfless=Var("userFloat('ImageMD:hfless')",
                          float,
                          doc="Image MD h tagger score (without b tagging)",
                          precision=-1),
            iMDHWW=Var("userFloat('ImageMD:hww')",
                       float,
                       doc="Image MD h->ww->qqqq tagger score",
                       precision=-1),
            iMDHWWlep=Var("userFloat('ImageMD:hwwlep')",
                          float,
                          doc="Image MD h->ww->lnuqq tagger score",
                          precision=-1),
            itopmass=Var("userFloat('Image:mass')",
                         float,
                         doc="Image tagger groomed mass",
                         precision=-1),
        ))

    #run2_miniAOD_80XLegacy.toModify( fatJetTable.variables, n2b1 = None)
    #run2_miniAOD_80XLegacy.toModify( fatJetTable.variables, n3b1 = None)
    run2_miniAOD_80XLegacy.toModify(
        process.customAK8Table.variables,
        jetId=Var("userInt('tightId')*2+userInt('looseId')",
                  int,
                  doc="Jet ID flags bit1 is loose, bit2 is tight"))
    process.customAK8Table.variables.pt.precision = 10

    _pfDeepBoostedJetTagsProbs_new = [
        'pfDeepBoostedJetTags:probWcq', 'pfDeepBoostedJetTags:probWqq',
        'pfDeepBoostedJetTags:probZbb', 'pfDeepBoostedJetTags:probZcc',
        'pfDeepBoostedJetTags:probZqq', 'pfDeepBoostedJetTags:probHbb',
        'pfDeepBoostedJetTags:probHcc', 'pfDeepBoostedJetTags:probHqqqq',
        'pfDeepBoostedJetTags:probQCDbb', 'pfDeepBoostedJetTags:probQCDcc'
    ]

    _pfMassDecorrelatedDeepBoostedJetTagsProbs_new = [
        'pfMassDecorrelatedDeepBoostedJetTags:probWcq',
        'pfMassDecorrelatedDeepBoostedJetTags:probWqq',
        'pfMassDecorrelatedDeepBoostedJetTags:probZbb',
        'pfMassDecorrelatedDeepBoostedJetTags:probZcc',
        'pfMassDecorrelatedDeepBoostedJetTags:probZqq',
        'pfMassDecorrelatedDeepBoostedJetTags:probHbb',
        'pfMassDecorrelatedDeepBoostedJetTags:probHcc',
        'pfMassDecorrelatedDeepBoostedJetTags:probHqqqq',
        'pfMassDecorrelatedDeepBoostedJetTags:probQCDbb',
        'pfMassDecorrelatedDeepBoostedJetTags:probQCDcc'
    ]

    # add DeepAK8 scores: nominal
    for prob in _pfDeepBoostedJetTagsProbs_new:
        name = prob.split(':')[1].replace('prob', 'deepTag')
        setattr(
            process.customAK8Table.variables, name,
            Var("bDiscriminator('%s')" % prob, float, doc=prob, precision=-1))

    # add DeepAK8 scores: mass decorrelated
    for prob in _pfMassDecorrelatedDeepBoostedJetTagsProbs_new:
        name = prob.split(':')[1].replace('prob', 'deepTagMD')
        setattr(
            process.customAK8Table.variables, name,
            Var("bDiscriminator('%s')" % prob, float, doc=prob, precision=-1))

    process.customAK8SubJetTable = cms.EDProducer(
        "SimpleCandidateFlatTableProducer",
        src=cms.InputTag("selectedPatJetsAK8PFPuppiSoftDropPacked", "SubJets"),
        cut=cms.string(""),
        name=cms.string("CustomAK8PuppiSubJet"),
        doc=cms.string("customized ak8 puppi subjets for HRT"),
        singleton=cms.bool(False),  # the number of entries is variable
        extension=cms.bool(False),  # this is the main table for the jets
        variables=cms.PSet(
            P4Vars,
            btagDeepB=Var(
                "bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')",
                float,
                doc="DeepCSV b+bb tag discriminator",
                precision=10),
            btagCSVV2=Var(
                "bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",
                float,
                doc=
                " pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",
                precision=10),
            rawFactor=Var("1.-jecFactor('Uncorrected')",
                          float,
                          doc="1 - Factor to get back to raw pT",
                          precision=6),
            area=Var("jetArea()",
                     float,
                     doc="jet catchment area, for JECs",
                     precision=10),
            nBHadrons=Var("jetFlavourInfo().getbHadrons().size()",
                          int,
                          doc="number of b-hadrons"),
            nCHadrons=Var("jetFlavourInfo().getcHadrons().size()",
                          int,
                          doc="number of c-hadrons"),
        ))
    process.customAK8SubJetTable.variables.pt.precision = 10

    process.customAK8Constituents = cms.EDProducer(
        "PatJetConstituentPtrSelector",
        #src = cms.InputTag("updatedJetsAK8"),
        src=cms.InputTag("customAK8WithUserData"),
        cut=cms.string("pt > 170.0"))

    process.customAK8ConstituentsTable = cms.EDProducer(
        "SimpleCandidateFlatTableProducer",
        src=cms.InputTag("customAK8Constituents", "constituents"),
        cut=cms.string(""),  #we should not filter after pruning
        name=cms.string("PFCandsAK8"),
        doc=cms.string("interesting particles from AK8 jets"),
        singleton=cms.bool(False),  # the number of entries is variable
        extension=cms.bool(
            False),  # this is the main table for the AK8 constituents
        variables=cms.PSet(
            CandVars,
            puppiWeight=Var("puppiWeight()",
                            float,
                            doc="Puppi weight",
                            precision=10),
            puppiWeightNoLep=Var("puppiWeightNoLep()",
                                 float,
                                 doc="Puppi weight removing leptons",
                                 precision=10),
            vtxChi2=Var("?hasTrackDetails()?vertexChi2():-1",
                        float,
                        doc="vertex chi2",
                        precision=10),
            trkChi2=Var("?hasTrackDetails()?pseudoTrack().normalizedChi2():-1",
                        float,
                        doc="normalized trk chi2",
                        precision=10),
            dz=Var("?hasTrackDetails()?dz():-1",
                   float,
                   doc="pf dz",
                   precision=10),
            d0=Var("?hasTrackDetails()?dxy():-1",
                   float,
                   doc="pf d0",
                   precision=10),
            d0Err=Var("?hasTrackDetails()?dxyError():-1",
                      float,
                      doc="pf d0 err",
                      precision=10),
        ))

    process.customizedAK8Task = cms.Task(
        process.imageJetsAK8Puppi,
        process.tightJetIdCustomAK8,
        process.tightJetIdLepVetoCustomAK8,
        process.customAK8WithUserData,
        process.customAK8Table,
        process.customAK8SubJetTable,
        process.customAK8Constituents,
        process.customAK8ConstituentsTable,
    )

    if runOnMC:
        process.customGenJetAK8Table = cms.EDProducer(
            "SimpleCandidateFlatTableProducer",
            src=cms.InputTag("ak8GenJetsNoNu"),
            cut=cms.string("pt > 100."),
            name=cms.string("CustomGenJetAK8"),
            doc=cms.string("AK8 GenJets made with visible genparticles"),
            singleton=cms.bool(False),  # the number of entries is variable
            extension=cms.bool(
                False),  # this is the main table for the genjets
            variables=cms.PSet(
                P4Vars,
                #msoftdrop = Var("groomedMass('SoftDropPuppi')",float, doc="Corrected soft drop mass with PUPPI",precision=10), #wishlist
            ))
        process.customGenJetAK8Table.variables.pt.precision = 10

        process.customGenSubJetAK8Table = cms.EDProducer(
            "SimpleCandidateFlatTableProducer",
            src=cms.InputTag("ak8GenJetsNoNuSoftDrop", "SubJets"),
            cut=cms.string(""),
            name=cms.string("CustomGenSubJetAK8"),
            doc=cms.string("AK8 Gen-SubJets made with visible genparticles"),
            singleton=cms.bool(False),  # the number of entries is variable
            extension=cms.bool(
                False),  # this is the main table for the genjets
            variables=cms.PSet(P4Vars, ))
        process.customGenSubJetAK8Table.variables.pt.precision = 10

        process.customGenJetAK8Constituents = cms.EDProducer(
            "GenJetPackedConstituentPtrSelector",
            #src = cms.InputTag("slimmedGenJetsAK8"),
            src=cms.InputTag("ak8GenJetsNoNu"),
            cut=cms.string("pt > 100.0"))

        process.customGenJetAK8ParticleTable = cms.EDProducer(
            "SimpleCandidateFlatTableProducer",
            src=cms.InputTag("customGenJetAK8Constituents", "constituents"),
            cut=cms.string(""),  #we should not filter after pruning
            name=cms.string("GenPartAK8"),
            doc=cms.string("interesting gen particles from AK8 jets"),
            singleton=cms.bool(False),  # the number of entries is variable
            extension=cms.bool(
                False),  # this is the main table for the AK8 constituents
            variables=cms.PSet(CandVars, ))

        #process.customizedAK8Task.add(process.customGenJetAK8Table)
        #process.customizedAK8Task.add(process.customGenSubJetAK8Table)

        #process.customizedAK8Task.add(process.customGenJetAK8Constituents)
        #process.customizedAK8Task.add(process.customGenJetAK8ParticleTable)

    _customizedAK8Task_80X = process.customizedAK8Task.copy()
    _customizedAK8Task_80X.replace(process.tightJetIdLepVetoCustomAK8,
                                   process.looseJetIdCustomAK8)
    run2_miniAOD_80XLegacy.toReplaceWith(process.customizedAK8Task,
                                         _customizedAK8Task_80X)

    if path is None:
        process.schedule.associate(process.customizedAK8Task)
    else:
        getattr(process, path).associate(process.customizedAK8Task)
Ejemplo n.º 3
0
                      doc="TTH MVA lepton ID score",
                      precision=14),
        mvaLowPt=ExtVar(cms.InputTag("muonMVALowPt"),
                        float,
                        doc="Low pt muon ID score",
                        precision=14),
        fsrPhotonIdx=ExtVar(cms.InputTag("muonFSRassociation:fsrIndex"),
                            int,
                            doc="Index of the associated FSR photon"),
    ),
)

for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
    modifier.toModify(muonTable.variables, puppiIsoId=None, softMva=None)

run2_nanoAOD_102Xv1.toModify(muonTable.variables, puppiIsoId=None)

muonsMCMatchForTable = cms.EDProducer(
    "MCMatcher",  # cut on deltaR, deltaPt/Pt; pick best by deltaR
    src=muonTable.src,  # final reco collection
    matched=cms.InputTag(
        "finalGenParticles"),  # final mc-truth particle collection
    mcPdgId=cms.vint32(
        13),  # one or more PDG ID (13 = mu); absolute values (see below)
    checkCharge=cms.bool(
        False),  # True = require RECO and MC objects to have the same charge
    mcStatus=cms.vint32(
        1),  # PYTHIA status code (1 = stable, 2 = shower, 3 = hard scattering)
    maxDeltaR=cms.double(0.3),  # Minimum deltaR for the match
    maxDPtRel=cms.double(0.5),  # Minimum deltaPt/Pt for the match
    resolveAmbiguities=cms.bool(
Ejemplo n.º 4
0
calibratedPatElectrons94X = RecoEgamma.EgammaTools.calibratedEgammas_cff.calibratedPatElectrons.clone(
    produceCalibratedObjs=False,
    correctionFile=cms.string(
        "EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2017_17Nov2017_v1_ele_unc"
    ),
)
for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_94X2016:
    modifier.toModify(calibratedPatElectrons94X, src="slimmedElectronsTo106X")

calibratedPatElectrons102X = RecoEgamma.EgammaTools.calibratedEgammas_cff.calibratedPatElectrons.clone(
    produceCalibratedObjs=False,
    correctionFile=cms.string(
        "EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2018_Step2Closure_CoarseEtaR9Gain_v2"
    ),
)
run2_nanoAOD_102Xv1.toModify(calibratedPatElectrons102X,
                             src="slimmedElectronsTo106X")

slimmedElectronsWithUserData = cms.EDProducer(
    "PATElectronUserDataEmbedder",
    src=cms.InputTag("slimmedElectrons"),
    userFloats=cms.PSet(
        mvaFall17V1Iso=cms.InputTag(
            "electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17IsoV1Values"
        ),
        mvaFall17V1noIso=cms.InputTag(
            "electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17NoIsoV1Values"
        ),
        mvaFall17V2Iso=cms.InputTag(
            "electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17IsoV2Values"
        ),
        mvaFall17V2noIso=cms.InputTag(
Ejemplo n.º 5
0
                                       "ecalEnergyPostCorr"),
)
run2_nanoAOD_94XMiniAODv1.toModify(
    slimmedPhotonsWithUserData.userFloats,
    ecalEnergyErrPostCorrNew=cms.InputTag("calibratedPatPhotons94Xv1",
                                          "ecalEnergyErrPostCorr"),
    ecalEnergyPreCorrNew=cms.InputTag("calibratedPatPhotons94Xv1",
                                      "ecalEnergyPreCorr"),
    ecalEnergyPostCorrNew=cms.InputTag("calibratedPatPhotons94Xv1",
                                       "ecalEnergyPostCorr"),
)
run2_nanoAOD_102Xv1.toModify(
    slimmedPhotonsWithUserData.userFloats,
    ecalEnergyErrPostCorrNew=cms.InputTag("calibratedPatPhotons102Xv1",
                                          "ecalEnergyErrPostCorr"),
    ecalEnergyPreCorrNew=cms.InputTag("calibratedPatPhotons102Xv1",
                                      "ecalEnergyPreCorr"),
    ecalEnergyPostCorrNew=cms.InputTag("calibratedPatPhotons102Xv1",
                                       "ecalEnergyPostCorr"),
)

finalPhotons = cms.EDFilter("PATPhotonRefSelector",
                            src=cms.InputTag("slimmedPhotonsWithUserData"),
                            cut=cms.string("pt > 5 "))

photonTable = cms.EDProducer(
    "SimpleCandidateFlatTableProducer",
    src=cms.InputTag("linkedObjects", "photons"),
    cut=cms.string(""),  #we should not filter on cross linked collections
    name=cms.string("Photon"),
    doc=cms.string("slimmedPhotons after basic selection (" +
Ejemplo n.º 6
0
    mvaIDV1_WP80 = None,
)

run2_miniAOD_80XLegacy.toModify(slimmedPhotonsWithUserData.userFloats,
    ecalEnergyErrPostCorrNew = cms.InputTag("calibratedPatPhotons80XLegacy","ecalEnergyErrPostCorr"),
    ecalEnergyPreCorrNew     = cms.InputTag("calibratedPatPhotons80XLegacy","ecalEnergyPreCorr"),
    ecalEnergyPostCorrNew    = cms.InputTag("calibratedPatPhotons80XLegacy","ecalEnergyPostCorr"),
)
run2_nanoAOD_94XMiniAODv1.toModify(slimmedPhotonsWithUserData.userFloats,
    ecalEnergyErrPostCorrNew = cms.InputTag("calibratedPatPhotons94Xv1","ecalEnergyErrPostCorr"),
    ecalEnergyPreCorrNew     = cms.InputTag("calibratedPatPhotons94Xv1","ecalEnergyPreCorr"),
    ecalEnergyPostCorrNew    = cms.InputTag("calibratedPatPhotons94Xv1","ecalEnergyPostCorr"),
)
run2_nanoAOD_102Xv1.toModify(slimmedPhotonsWithUserData.userFloats,
    ecalEnergyErrPostCorrNew = cms.InputTag("calibratedPatPhotons102Xv1","ecalEnergyErrPostCorr"),
    ecalEnergyPreCorrNew     = cms.InputTag("calibratedPatPhotons102Xv1","ecalEnergyPreCorr"),
    ecalEnergyPostCorrNew    = cms.InputTag("calibratedPatPhotons102Xv1","ecalEnergyPostCorr"),
)

finalPhotons = cms.EDFilter("PATPhotonRefSelector",
    src = cms.InputTag("slimmedPhotonsWithUserData"),
    cut = cms.string("pt > 5 ")
)

photonTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
    src = cms.InputTag("linkedObjects","photons"),
    cut = cms.string(""), #we should not filter on cross linked collections
    name= cms.string("Photon"),
    doc = cms.string("slimmedPhotons after basic selection (" + finalPhotons.cut.value()+")"),
    singleton = cms.bool(False), # the number of entries is variable
    extension = cms.bool(False), # this is the main table for the photons
Ejemplo n.º 7
0
def setupCustomizedAK8(process, runOnMC=False, path=None):
    # recluster Puppi jets, add N-Subjettiness and ECF
    bTagDiscriminators = [
        'pfCombinedInclusiveSecondaryVertexV2BJetTags',
        'pfBoostedDoubleSecondaryVertexAK8BJetTags',
        'pfMassIndependentDeepDoubleBvLJetTags:probHbb',
        'pfMassIndependentDeepDoubleCvLJetTags:probHcc',
        'pfMassIndependentDeepDoubleCvBJetTags:probHcc',
    ]
    subjetBTagDiscriminators = [
        'pfCombinedInclusiveSecondaryVertexV2BJetTags',
        'pfDeepCSVJetTags:probb',
        'pfDeepCSVJetTags:probbb',
    ]
    JETCorrLevels = ['L2Relative', 'L3Absolute', 'L2L3Residual']

    from PhysicsTools.Pancakes.jetToolbox_cff import jetToolbox
    jetToolbox(process,
               'ak8',
               'dummySeq',
               'out',
               associateTask=False,
               PUMethod='Puppi',
               JETCorrPayload='AK8PFPuppi',
               JETCorrLevels=JETCorrLevels,
               Cut='pt > 170.0 && abs(rapidity()) < 2.4',
               miniAOD=True,
               runOnMC=runOnMC,
               addNsub=True,
               maxTau=4,
               addEnergyCorrFunc=True,
               GetSubjetMCFlavour=False,
               GetJetMCFlavour=False,
               addSoftDrop=True,
               addSoftDropSubjets=True,
               subJETCorrPayload='AK4PFPuppi',
               subJETCorrLevels=JETCorrLevels,
               bTagDiscriminators=bTagDiscriminators,
               subjetBTagDiscriminators=subjetBTagDiscriminators)

    if runOnMC:
        process.ak8GenJetsNoNu.jetPtMin = 100
        process.ak8GenJetsNoNuSoftDrop.jetPtMin = 100

    # DeepAK8
    from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection
    from RecoBTag.MXNet.pfDeepBoostedJet_cff import _pfDeepBoostedJetTagsProbs, _pfMassDecorrelatedDeepBoostedJetTagsProbs

    Bdiscs = [
        'pfDeepFlavourJetTags:probb', 'pfDeepFlavourJetTags:probbb',
        'pfDeepFlavourJetTags:probuds', 'pfDeepFlavourJetTags:probg',
        'pfDeepFlavourJetTags:problepb', 'pfDeepFlavourJetTags:probc',
        'pfCombinedInclusiveSecondaryVertexV2BJetTags'
    ]

    from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection

    jetToolbox(process,
               'ak8',
               'ak8JetSubs',
               'out',
               associateTask=False,
               updateCollection='packedPatJetsAK8PFPuppiSoftDrop',
               JETCorrPayload='AK8PFPuppi',
               JETCorrLevels=JETCorrLevels,
               Cut='pt > 170.0 && abs(rapidity()) < 2.4',
               miniAOD=True,
               runOnMC=runOnMC,
               bTagDiscriminators=bTagDiscriminators +
               _pfDeepBoostedJetTagsProbs +
               _pfMassDecorrelatedDeepBoostedJetTagsProbs,
               updateCollectionSubjets=
               'selectedPatJetsAK8PFPuppiSoftDropPacked:SubJets',
               subjetBTagDiscriminators=Bdiscs,
               subJETCorrPayload='AK4PFPuppi',
               subJETCorrLevels=JETCorrLevels,
               postFix='AK8WithPuppiDaughters')

    # src
    srcJets = cms.InputTag(
        'selectedUpdatedPatJetsAK8PFPuppiAK8WithPuppiDaughters')

    # jetID
    process.looseJetIdCustomAK8 = cms.EDProducer(
        "PatJetIDValueMapProducer",
        filterParams=cms.PSet(
            version=cms.string('WINTER16'),
            quality=cms.string('LOOSE'),
        ),
        src=srcJets)

    process.tightJetIdCustomAK8 = cms.EDProducer(
        "PatJetIDValueMapProducer",
        filterParams=cms.PSet(
            version=cms.string('WINTER17PUPPI'),
            quality=cms.string('TIGHT'),
        ),
        src=srcJets)
    run2_miniAOD_80XLegacy.toModify(process.tightJetIdCustomAK8.filterParams,
                                    version="WINTER16")

    process.tightJetIdLepVetoCustomAK8 = cms.EDProducer(
        "PatJetIDValueMapProducer",
        filterParams=cms.PSet(
            version=cms.string('WINTER17PUPPI'),
            quality=cms.string('TIGHTLEPVETO'),
        ),
        src=srcJets)

    for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
        modifier.toModify(process.tightJetIdCustomAK8.filterParams,
                          version="WINTER16")
        modifier.toModify(process.tightJetIdLepVetoCustomAK8.filterParams,
                          version="WINTER16")
    run2_nanoAOD_102Xv1.toModify(process.tightJetIdCustomAK8.filterParams,
                                 version="SUMMER18PUPPI")
    run2_nanoAOD_102Xv1.toModify(
        process.tightJetIdLepVetoCustomAK8.filterParams,
        version="SUMMER18PUPPI")

    process.lepInJetVars = cms.EDProducer(
        "LepInJetProducer",
        src=srcJets,
        srcEle=cms.InputTag("finalElectrons"),
        srcMu=cms.InputTag("finalMuons"))

    jetToolbox(
        process,
        'ak8',
        'leptonSubtractedJetSeq',
        'out',
        associateTask=False,
        newPFCollection=True,
        nameNewPFCollection='lepInJetVars:pfCandsNoLep',
        PUMethod='Puppi',
        JETCorrPayload='AK8PFPuppi',
        JETCorrLevels=JETCorrLevels,
        Cut='pt > 170.0 && abs(rapidity()) < 2.4',
        miniAOD=True,
        runOnMC=runOnMC,
        addNsub=True,
        maxTau=4,
        addEnergyCorrFunc=True,
        GetSubjetMCFlavour=False,
        GetJetMCFlavour=False,
        addSoftDrop=True,
        addSoftDropSubjets=True,
        subJETCorrPayload='AK4PFPuppi',
        subJETCorrLevels=JETCorrLevels,
        bTagDiscriminators=bTagDiscriminators,
        subjetBTagDiscriminators=subjetBTagDiscriminators,
        postFix='LeptonSubtracted',
    )

    leptonSubtractedToEmbed = {
        'tau1': 'userFloat("NjettinessAK8PuppiLeptonSubtracted:tau1")',
        'tau2': 'userFloat("NjettinessAK8PuppiLeptonSubtracted:tau2")',
        'tau3': 'userFloat("NjettinessAK8PuppiLeptonSubtracted:tau3")',
        'tau4': 'userFloat("NjettinessAK8PuppiLeptonSubtracted:tau4")',
        'n2b1':
        'userFloat("ak8PFJetsPuppiLeptonSubtractedSoftDropValueMap:nb1AK8PuppiLeptonSubtractedSoftDropN2")',
        'n3b1':
        'userFloat("ak8PFJetsPuppiLeptonSubtractedSoftDropValueMap:nb1AK8PuppiLeptonSubtractedSoftDropN3")',
        'msoftdrop': 'groomedMass()',
        'msoftdropraw':
        'userFloat("ak8PFJetsPuppiLeptonSubtractedSoftDropMass")',
        'subJet1btagDeepB':
        '?nSubjetCollections()>0 && subjets().size()>0?subjets()[0].get().bDiscriminator("pfDeepCSVJetTags:probb")+subjets()[0].get().bDiscriminator("pfDeepCSVJetTags:probbb"):-2',
        'subJet2btagDeepB':
        '?nSubjetCollections()>0 && subjets().size()>1?subjets()[1].get().bDiscriminator("pfDeepCSVJetTags:probb")+subjets()[1].get().bDiscriminator("pfDeepCSVJetTags:probbb"):-2',
        'pt': 'pt()',
    }
    process.matchLeptonSubtracted = cms.EDProducer(
        "PatJetDeltaRValueMapProducer",
        src=srcJets,
        matched=cms.InputTag(
            'packedPatJetsAK8PFPuppiLeptonSubtractedSoftDrop'),
        distMax=cms.double(0.8),
        values=cms.vstring(list(leptonSubtractedToEmbed.values())),
        valueLabels=cms.vstring(list(leptonSubtractedToEmbed.keys())),
    )

    process.customAK8WithUserData = cms.EDProducer(
        "PATJetUserDataEmbedder",
        src=srcJets,
        userFloats=cms.PSet(lsf3=cms.InputTag("lepInJetVars:lsf3"),
                            dRLep=cms.InputTag("lepInJetVars:dRLep"),
                            **{('leptonSubtracted:' + k):
                               cms.InputTag("matchLeptonSubtracted:" + k)
                               for k in leptonSubtractedToEmbed.keys()}),
        userInts=cms.PSet(
            tightId=cms.InputTag("tightJetIdCustomAK8"),
            tightIdLepVeto=cms.InputTag("tightJetIdLepVetoCustomAK8"),
            muonIdx3SJ=cms.InputTag("lepInJetVars:muIdx3SJ"),
            electronIdx3SJ=cms.InputTag("lepInJetVars:eleIdx3SJ"),
            idLep=cms.InputTag("lepInJetVars:idLep"),
        ),
    )
    run2_miniAOD_80XLegacy.toModify(
        process.customAK8WithUserData.userInts,
        looseId=cms.InputTag("looseJetIdCustomAK8"),
        tightIdLepVeto=None,
    )

    process.customAK8Table = cms.EDProducer(
        "SimpleCandidateFlatTableProducer",
        src=cms.InputTag("customAK8WithUserData"),
        name=cms.string("FatJet"),
        cut=cms.string(""),
        doc=cms.string("customized ak8 puppi jets for HRT"),
        singleton=cms.bool(False),  # the number of entries is variable
        extension=cms.bool(False),  # this is the main table for the jets
        variables=cms.PSet(
            P4Vars,
            jetId=Var(
                "userInt('tightId')*2+4*userInt('tightIdLepVeto')",
                int,
                doc=
                "Jet ID flags bit1 is loose (always false in 2017 since it does not exist), bit2 is tight, bit3 is tightLepVeto"
            ),
            area=Var("jetArea()",
                     float,
                     doc="jet catchment area, for JECs",
                     precision=10),
            rawFactor=Var("1.-jecFactor('Uncorrected')",
                          float,
                          doc="1 - Factor to get back to raw pT",
                          precision=6),
            tau1=Var("userFloat('NjettinessAK8Puppi:tau1')",
                     float,
                     doc="Nsubjettiness (1 axis)",
                     precision=10),
            tau2=Var("userFloat('NjettinessAK8Puppi:tau2')",
                     float,
                     doc="Nsubjettiness (2 axis)",
                     precision=10),
            tau3=Var("userFloat('NjettinessAK8Puppi:tau3')",
                     float,
                     doc="Nsubjettiness (3 axis)",
                     precision=10),
            tau4=Var("userFloat('NjettinessAK8Puppi:tau4')",
                     float,
                     doc="Nsubjettiness (4 axis)",
                     precision=10),
            n2b1=Var(
                "userFloat('ak8PFJetsPuppiSoftDropValueMap:nb1AK8PuppiSoftDropN2')",
                float,
                doc="N2 with beta=1",
                precision=10),
            n3b1=Var(
                "userFloat('ak8PFJetsPuppiSoftDropValueMap:nb1AK8PuppiSoftDropN3')",
                float,
                doc="N3 with beta=1",
                precision=10),
            msoftdrop=Var("groomedMass()",
                          float,
                          doc="Corrected soft drop mass with PUPPI",
                          precision=10),
            rawmsoftdrop=Var("userFloat('ak8PFJetsPuppiSoftDropMass')",
                             float,
                             doc="Raw soft drop mass with PUPPI",
                             precision=10),
            #btagDeepB = Var("bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')",float,doc="DeepCSV b+bb tag discriminator",precision=10),
            #btagCSVV2=Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')", float, doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)", precision=10),
            btagHbb=Var(
                "bDiscriminator('pfBoostedDoubleSecondaryVertexAK8BJetTags')",
                float,
                doc="old Higgs to BB tagger discriminator",
                precision=10),
            btagDDBvL=Var(
                "bDiscriminator('pfMassIndependentDeepDoubleBvLJetTags:probHbb')",
                float,
                doc=
                "DeepDoubleX (mass-decorrelated) discriminator for H(Z)->bb vs QCD",
                precision=10),
            btagDDCvL=Var(
                "bDiscriminator('pfMassIndependentDeepDoubleCvLJetTags:probHcc')",
                float,
                doc=
                "DeepDoubleX (mass-decorrelated) discriminator for H(Z)->cc vs QCD",
                precision=10),
            btagDDCvB=Var(
                "bDiscriminator('pfMassIndependentDeepDoubleCvBJetTags:probHcc')",
                float,
                doc=
                "DeepDoubleX (mass-decorrelated) discriminator for H(Z)->cc vs H(Z)->bb",
                precision=10),
            subJetIdx1=Var(
                "?nSubjetCollections()>0 && subjets().size()>0?subjets()[0].key():-1",
                int,
                doc="index of first subjet"),
            subJetIdx2=Var(
                "?nSubjetCollections()>0 && subjets().size()>1?subjets()[1].key():-1",
                int,
                doc="index of second subjet"),
            nPFConstituents=Var("numberOfDaughters()",
                                int,
                                doc="Number of PF daughter constituents"),
            nBHadrons=Var("jetFlavourInfo().getbHadrons().size()",
                          int,
                          doc="number of b-hadrons"),
            nCHadrons=Var("jetFlavourInfo().getcHadrons().size()",
                          int,
                          doc="number of c-hadrons"),
            lsf3=Var("userFloat('lsf3')",
                     float,
                     doc="LSF (3 subjets)",
                     precision=10),
            dRLep=Var("userFloat('dRLep')",
                      float,
                      doc="dR(lep,jet)",
                      precision=10),
            muonIdx3SJ=Var("userInt('muonIdx3SJ')",
                           int,
                           doc="index of muon matched (3 subjets)"),
            electronIdx3SJ=Var("userInt('electronIdx3SJ')",
                               int,
                               doc="index of electron matched (3 subjets)"),
            idLep=Var(
                "userInt('idLep')",
                int,
                doc="id of pf particle matched to that reco electron or muon"),
            LStau1=Var(
                "userFloat('leptonSubtracted:tau1')",
                float,
                doc=
                "Nsubjettiness, after subtracting highest pt lepton from jet",
                precision=10),
            LStau2=Var(
                "userFloat('leptonSubtracted:tau2')",
                float,
                doc=
                "Nsubjettiness, after subtracting highest pt lepton from jet",
                precision=10),
            LStau3=Var(
                "userFloat('leptonSubtracted:tau3')",
                float,
                doc=
                "Nsubjettiness, after subtracting highest pt lepton from jet",
                precision=10),
            LStau4=Var(
                "userFloat('leptonSubtracted:tau4')",
                float,
                doc=
                "Nsubjettiness, after subtracting highest pt lepton from jet",
                precision=10),
            LSn2b1=Var(
                "userFloat('leptonSubtracted:n2b1')",
                float,
                doc=
                "N2 with beta=1, after subtracting highest pt lepton from jet",
                precision=10),
            LSn3b1=Var(
                "userFloat('leptonSubtracted:n3b1')",
                float,
                doc=
                "N3 with beta=1, after subtracting highest pt lepton from jet",
                precision=10),
            LSmsoftdrop=Var(
                "userFloat('leptonSubtracted:msoftdrop')",
                float,
                doc=
                "Softdrop mass with PUPPI, after subtracting highest pt lepton from jet",
                precision=10),
            LSrawmsoftdrop=Var(
                "userFloat('leptonSubtracted:msoftdropraw')",
                float,
                doc=
                "Softdrop mass with PUPPI, after subtracting highest pt lepton from jet",
                precision=10),
            LSsubJet1btagDeepB=Var(
                "userFloat('leptonSubtracted:subJet1btagDeepB')",
                float,
                doc=
                "Subjet DeepCSV b-tag score (b+bb), after subtracting highest pt lepton from jet",
                precision=10),
            LSsubJet2btagDeepB=Var(
                "userFloat('leptonSubtracted:subJet2btagDeepB')",
                float,
                doc=
                "Subjet DeepCSV b-tag score (b+bb), after subtracting highest pt lepton from jet",
                precision=10),
            LSpt=Var("userFloat('leptonSubtracted:pt')",
                     float,
                     doc="Jet pt after sub",
                     precision=10),
        ))

    #run2_miniAOD_80XLegacy.toModify( fatJetTable.variables, n2b1 = None)
    #run2_miniAOD_80XLegacy.toModify( fatJetTable.variables, n3b1 = None)
    run2_miniAOD_80XLegacy.toModify(
        process.customAK8Table.variables,
        jetId=Var("userInt('tightId')*2+userInt('looseId')",
                  int,
                  doc="Jet ID flags bit1 is loose, bit2 is tight"))
    process.customAK8Table.variables.pt.precision = 10

    _pfDeepBoostedJetTagsProbs_new = [
        'pfDeepBoostedJetTags:probWcq', 'pfDeepBoostedJetTags:probWqq',
        'pfDeepBoostedJetTags:probZbb', 'pfDeepBoostedJetTags:probZcc',
        'pfDeepBoostedJetTags:probZqq', 'pfDeepBoostedJetTags:probHbb',
        'pfDeepBoostedJetTags:probHcc', 'pfDeepBoostedJetTags:probHqqqq',
        'pfDeepBoostedJetTags:probQCDbb', 'pfDeepBoostedJetTags:probQCDcc'
    ]

    _pfMassDecorrelatedDeepBoostedJetTagsProbs_new = [
        'pfMassDecorrelatedDeepBoostedJetTags:probWcq',
        'pfMassDecorrelatedDeepBoostedJetTags:probWqq',
        'pfMassDecorrelatedDeepBoostedJetTags:probZbb',
        'pfMassDecorrelatedDeepBoostedJetTags:probZcc',
        'pfMassDecorrelatedDeepBoostedJetTags:probZqq',
        'pfMassDecorrelatedDeepBoostedJetTags:probHbb',
        'pfMassDecorrelatedDeepBoostedJetTags:probHcc',
        'pfMassDecorrelatedDeepBoostedJetTags:probHqqqq',
        'pfMassDecorrelatedDeepBoostedJetTags:probQCDbb',
        'pfMassDecorrelatedDeepBoostedJetTags:probQCDcc'
    ]

    # add DeepAK8 scores: nominal
    for prob in _pfDeepBoostedJetTagsProbs_new:
        name = prob.split(':')[1].replace('prob', 'deepTag')
        setattr(
            process.customAK8Table.variables, name,
            Var("bDiscriminator('%s')" % prob, float, doc=prob, precision=-1))

    # add DeepAK8 scores: mass decorrelated
    for prob in _pfMassDecorrelatedDeepBoostedJetTagsProbs_new:
        name = prob.split(':')[1].replace('prob', 'deepTagMD')
        setattr(
            process.customAK8Table.variables, name,
            Var("bDiscriminator('%s')" % prob, float, doc=prob, precision=-1))

    process.customAK8SubJetTable = cms.EDProducer(
        "SimpleCandidateFlatTableProducer",
        src=cms.InputTag("selectedPatJetsAK8PFPuppiSoftDropPacked", "SubJets"),
        cut=cms.string(""),
        name=cms.string("SubJet"),
        doc=cms.string("customized ak8 puppi subjets for HRT"),
        singleton=cms.bool(False),  # the number of entries is variable
        extension=cms.bool(False),  # this is the main table for the jets
        variables=cms.PSet(
            P4Vars,
            btagDeepB=Var(
                "bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')",
                float,
                doc="DeepCSV b+bb tag discriminator",
                precision=10),
            btagCSVV2=Var(
                "bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",
                float,
                doc=
                " pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",
                precision=10),
            rawFactor=Var("1.-jecFactor('Uncorrected')",
                          float,
                          doc="1 - Factor to get back to raw pT",
                          precision=6),
            area=Var("jetArea()",
                     float,
                     doc="jet catchment area, for JECs",
                     precision=10),
            nBHadrons=Var("jetFlavourInfo().getbHadrons().size()",
                          int,
                          doc="number of b-hadrons"),
            nCHadrons=Var("jetFlavourInfo().getcHadrons().size()",
                          int,
                          doc="number of c-hadrons"),
        ))
    process.customAK8SubJetTable.variables.pt.precision = 10

    process.customizedAK8Task = cms.Task(
        process.tightJetIdCustomAK8,
        process.tightJetIdLepVetoCustomAK8,
        process.lepInJetVars,
        process.matchLeptonSubtracted,
        process.customAK8WithUserData,
        process.customAK8Table,
        process.customAK8SubJetTable,
    )

    if runOnMC:
        process.customGenJetAK8Table = cms.EDProducer(
            "SimpleCandidateFlatTableProducer",
            src=cms.InputTag("ak8GenJetsNoNu"),
            cut=cms.string("pt > 100."),
            name=cms.string("CustomGenJetAK8"),
            doc=cms.string("AK8 GenJets made with visible genparticles"),
            singleton=cms.bool(False),  # the number of entries is variable
            extension=cms.bool(
                False),  # this is the main table for the genjets
            variables=cms.PSet(
                P4Vars,
                #msoftdrop = Var("groomedMass('SoftDropPuppi')",float, doc="Corrected soft drop mass with PUPPI",precision=10), #wishlist
            ))
        process.customGenJetAK8Table.variables.pt.precision = 10

        process.customGenSubJetAK8Table = cms.EDProducer(
            "SimpleCandidateFlatTableProducer",
            src=cms.InputTag("ak8GenJetsNoNuSoftDrop", "SubJets"),
            cut=cms.string(""),
            name=cms.string("CustomGenSubJetAK8"),
            doc=cms.string("AK8 Gen-SubJets made with visible genparticles"),
            singleton=cms.bool(False),  # the number of entries is variable
            extension=cms.bool(
                False),  # this is the main table for the genjets
            variables=cms.PSet(P4Vars, ))
        process.customGenSubJetAK8Table.variables.pt.precision = 10

        process.customGenJetAK8Constituents = cms.EDProducer(
            "GenJetPackedConstituentPtrSelector",
            #src = cms.InputTag("slimmedGenJetsAK8"),
            src=cms.InputTag("ak8GenJetsNoNu"),
            cut=cms.string("pt > 100.0"))

        process.customGenJetAK8ParticleTable = cms.EDProducer(
            "SimpleCandidateFlatTableProducer",
            src=cms.InputTag("customGenJetAK8Constituents", "constituents"),
            cut=cms.string(""),  #we should not filter after pruning
            name=cms.string("GenPartAK8"),
            doc=cms.string("interesting gen particles from AK8 jets"),
            singleton=cms.bool(False),  # the number of entries is variable
            extension=cms.bool(
                False),  # this is the main table for the AK8 constituents
            variables=cms.PSet(CandVars, ))

        #process.customizedAK8Task.add(process.customGenJetAK8Table)
        #process.customizedAK8Task.add(process.customGenSubJetAK8Table)

        #process.customizedAK8Task.add(process.customGenJetAK8Constituents)
        #process.customizedAK8Task.add(process.customGenJetAK8ParticleTable)

    _customizedAK8Task_80X = process.customizedAK8Task.copy()
    _customizedAK8Task_80X.replace(process.tightJetIdLepVetoCustomAK8,
                                   process.looseJetIdCustomAK8)
    run2_miniAOD_80XLegacy.toReplaceWith(process.customizedAK8Task,
                                         _customizedAK8Task_80X)

    # Bacon 15 config, deprecated
    # process.pfInclusiveSecondaryVertexFinderAK8TagInfosAK8PFPuppiAK8WithPuppiDaughters.extSVDeltaRToJet = cms.double(0.3)
    # process.pfInclusiveSecondaryVertexFinderAK8TagInfosAK8PFPuppiAK8WithPuppiDaughters.trackSelection.jetDeltaRMax = cms.double(0.3)
    # process.pfInclusiveSecondaryVertexFinderAK8TagInfosAK8PFPuppiAK8WithPuppiDaughters.vertexCuts.maxDeltaRToJetAxis = cms.double(0.4)
    # process.pfImpactParameterAK8TagInfosAK8PFPuppiAK8WithPuppiDaughters.computeProbabilities = cms.bool(True)

    if path is None:
        process.schedule.associate(process.customizedAK8Task)
    else:
        getattr(process, path).associate(process.customizedAK8Task)
Ejemplo n.º 8
0
        multiIsoId = Var("?passed('MultiIsoMedium')?2:passed('MultiIsoLoose')","uint8",doc="MultiIsoId from miniAOD selector (1=MultiIsoLoose, 2=MultiIsoMedium)"),
        puppiIsoId = Var("passed('PuppiIsoLoose')+passed('PuppiIsoMedium')+passed('PuppiIsoTight')", "uint8", doc="PuppiIsoId from miniAOD selector (1=Loose, 2=Medium, 3=Tight)"),
        triggerIdLoose = Var("passed('TriggerIdLoose')",bool,doc="TriggerIdLoose ID"), 
        inTimeMuon = Var("passed('InTimeMuon')",bool,doc="inTimeMuon ID"),
        ),
    externalVariables = cms.PSet(
        mvaTTH = ExtVar(cms.InputTag("muonMVATTH"),float, doc="TTH MVA lepton ID score",precision=14),
        mvaLowPt = ExtVar(cms.InputTag("muonMVALowPt"),float, doc="Low pt muon ID score",precision=14),
    ),
)


for modifier in  run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
    modifier.toModify(muonTable.variables, puppiIsoId = None, softMva = None)

run2_nanoAOD_102Xv1.toModify(muonTable.variables, puppiIsoId = None)


muonsMCMatchForTable = cms.EDProducer("MCMatcher",       # cut on deltaR, deltaPt/Pt; pick best by deltaR
    src         = muonTable.src,                         # final reco collection
    matched     = cms.InputTag("finalGenParticles"),     # final mc-truth particle collection
    mcPdgId     = cms.vint32(13),               # one or more PDG ID (13 = mu); absolute values (see below)
    checkCharge = cms.bool(False),              # True = require RECO and MC objects to have the same charge
    mcStatus    = cms.vint32(1),                # PYTHIA status code (1 = stable, 2 = shower, 3 = hard scattering)
    maxDeltaR   = cms.double(0.3),              # Minimum deltaR for the match
    maxDPtRel   = cms.double(0.5),              # Minimum deltaPt/Pt for the match
    resolveAmbiguities    = cms.bool(True),     # Forbid two RECO objects to match to the same GEN object
    resolveByMatchQuality = cms.bool(True),    # False = just match input in order; True = pick lowest deltaR pair first
)

muonMCTable = cms.EDProducer("CandMCMatchTableProducer",
Ejemplo n.º 9
0
                          src = cms.InputTag("updatedJets")
)
tightJetIdLepVeto = cms.EDProducer("PatJetIDValueMapProducer",
			  filterParams=cms.PSet(
			    version = cms.string('RUN2ULCHS'),
			    quality = cms.string('TIGHTLEPVETO'),
			  ),
                          src = cms.InputTag("updatedJets")
)
for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
  modifier.toModify( tightJetId.filterParams, version = "WINTER16" )
  modifier.toModify( tightJetIdLepVeto.filterParams, version = "WINTER16" )
for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
  modifier.toModify( tightJetId.filterParams, version = "WINTER17" )
  modifier.toModify( tightJetIdLepVeto.filterParams, version = "WINTER17" )
run2_nanoAOD_102Xv1.toModify( tightJetId.filterParams, version = "SUMMER18" )
run2_nanoAOD_102Xv1.toModify( tightJetIdLepVeto.filterParams, version = "SUMMER18" )


looseJetIdAK8 = cms.EDProducer("PatJetIDValueMapProducer",
			  filterParams=cms.PSet(
			    version = cms.string('WINTER16'),
			    quality = cms.string('LOOSE'),
			  ),
                          src = cms.InputTag("updatedJetsAK8")
)
tightJetIdAK8 = cms.EDProducer("PatJetIDValueMapProducer",
			  filterParams=cms.PSet(
			    version = cms.string('RUN2ULPUPPI'),
			    quality = cms.string('TIGHT'),
			  ),