Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-05-09 22:40:13

0001 import FWCore.ParameterSet.Config as cms
0002 from PhysicsTools.NanoAOD.common_cff import *
0003 from PhysicsTools.NanoAOD.simplePATMuonFlatTableProducer_cfi import simplePATMuonFlatTableProducer
0004 
0005 Path=["HLT_DoubleMu4_3_LowMass"]
0006 
0007 # Takes slimmedMuons, apply basic preselection and trigger match. Devides muon in
0008 # SelectedMuons (trigger matched) and AllMuons collections
0009 muonBPH = cms.EDProducer("MuonTriggerSelector",
0010     muonCollection = cms.InputTag("slimmedMuons"),                                                        
0011     bits           = cms.InputTag("TriggerResults", "", "HLT"),
0012     prescales      = cms.InputTag("patTrigger"),
0013     objects        = cms.InputTag("slimmedPatTrigger"),
0014     maxdR_matching = cms.double(0.3), # For the output trigger matched collection
0015     muonSelection  = cms.string("pt > 2 && abs(eta) < 2.4"), # Preselection
0016     HLTPaths       = cms.vstring(Path)
0017 )
0018 
0019 # Cuts minimun number in B both mu
0020 countTrgMuons = cms.EDFilter("PATCandViewCountFilter",
0021     minNumber = cms.uint32(2),
0022     maxNumber = cms.uint32(999999),
0023     src       = cms.InputTag("muonBPH", "SelectedMuons")
0024 )
0025 
0026 # Table containing triggering muons, to interface with signal reconstruction
0027 # Contains variable mostly used for signal reconstruction and analysis
0028 TrgMatchMuonTable = simplePATMuonFlatTableProducer.clone(
0029     src  = cms.InputTag("muonBPH:SelectedMuons"), # Could this be removed and simply select userInt('isTriggering')==1
0030     cut  = cms.string(""), # We should not filter on cross linked collections
0031     name = cms.string("TrgMatchMuon"),
0032     doc  = cms.string("slimmedMuons after basic selection and trigger match"),
0033     singleton = cms.bool(False), # the number of entries is variable
0034     extension = cms.bool(False), # this is the main table for the muons
0035     variables = cms.PSet(
0036         CandVars,
0037         ptErr   = Var("bestTrack().ptError()", float, doc="ptError of the muon track", precision=10),
0038         covQopQop = Var("bestTrack().covariance(0, 0)", float, doc="Cov of q/p with q/p", precision=10),
0039         covLamLam = Var("bestTrack().covariance(1, 1)", float, doc="Cov of lambda with lambda", precision=10),
0040         covPhiPhi = Var("bestTrack().covariance(2, 2)", float, doc="Cov of phi with phi", precision=10),
0041         covQopLam = Var("bestTrack().covariance(0, 1)", float, doc="Cov of q/p with lambda", precision=10),
0042         covQopPhi = Var("bestTrack().covariance(0, 2)", float, doc="Cov of q/p with phi", precision=10),
0043         covLamPhi = Var("bestTrack().covariance(1, 2)", float, doc="Cov of lambda with phi", precision=10),
0044         dz      = Var("dB('PVDZ')", float, doc="dz (with sign) wrt PV[0] [cm]", precision=10),
0045         dzErr   = Var("abs(edB('PVDZ'))", float, doc="dz uncertainty [cm]", precision=10),
0046         dxy     = Var("dB('PV2D')", float, doc="dxy (with sign) wrt PV[0] [cm]", precision=10),
0047         dxyErr  = Var("edB('PV2D')", float, doc="dxy uncertainty [cm]", precision=10),
0048         ip3d    = Var("abs(dB('PV3D'))", float, doc="3D impact parameter wrt PV[0] [cm]", precision=10),
0049         sip3d   = Var("abs(dB('PV3D')/edB('PV3D'))", float, doc="3D impact parameter significance wrt PV[0]", precision=10),
0050         pfRelIso03_all = Var("(pfIsolationR03().sumChargedHadronPt + max(pfIsolationR03().sumNeutralHadronEt + pfIsolationR03().sumPhotonEt - pfIsolationR03().sumPUPt/2,0.0))/pt", float, doc="PF relative isolation dR=0.3, total (deltaBeta corrections)", precision=10),
0051         pfRelIso04_all = Var("(pfIsolationR04().sumChargedHadronPt + max(pfIsolationR04().sumNeutralHadronEt + pfIsolationR04().sumPhotonEt - pfIsolationR04().sumPUPt/2,0.0))/pt", float, doc="PF relative isolation dR=0.4, total (deltaBeta corrections)", precision=10),
0052         isPFcand    = Var("isPFMuon", bool, doc="muon is PF candidate"),
0053         isGlobal    = Var("isGlobalMuon", bool, doc="muon is global muon"),
0054         isTracker   = Var("isTrackerMuon", bool, doc="muon is tracker muon"),
0055         looseId     = Var("passed('CutBasedIdLoose')", bool, doc="cut-based ID, medium WP"),
0056         mediumId    = Var("passed('CutBasedIdMedium')", bool, doc="cut-based ID, medium WP"),
0057         # tightId     = Var("passed('CutBasedIdTight')", bool, doc="cut-based ID, tight WP"),
0058         triggerIdLoose  = Var("passed('TriggerIdLoose')", bool, doc="TriggerIdLoose ID"),
0059         softId = Var("passed('SoftCutBasedId')",bool,doc="soft cut-based ID"),
0060         softMvaId = Var("passed('SoftMvaId')",bool,doc="soft MVA ID"),
0061         softMva = Var("softMvaValue()",float,doc="soft MVA ID score",precision=6),
0062         softMvaRun3 = Var("softMvaRun3Value()",float,doc="soft MVA Run3 ID score",precision=6),
0063         isTriggering    = Var("userInt('isTriggering')", bool, doc="flag the reco muon if matched to HLT object"),
0064         matched_dr      = Var("userFloat('trgDR')", float, doc="dr with the matched triggering muon", precision=10),
0065         matched_dpt     = Var("userFloat('trgDPT')", float, doc="dpt/pt with the matched triggering muon", precision=10), #comma
0066         # fired_HLT_DoubleMu4_3_LowMass = Var("userInt('HLT_DoubleMu4_3_LowMass')", int, doc="reco muon fired this trigger"),
0067         # fired_HLT_DoubleMu4_LowMass_Displaced = Var("userInt('HLT_DoubleMu4_LowMass_Displaced')", int, doc="reco muon fired this trigger")
0068     ),
0069 )
0070 
0071 # Producer for MC matching
0072 muonBPHMCMatch = cms.EDProducer("MCMatcher",                  # cut on deltaR, deltaPt/Pt; pick best by deltaR
0073     src         = TrgMatchMuonTable.src,                      # final reco collection
0074     matched     = cms.InputTag("finalGenParticlesBPH"),       # final mc-truth particle collection
0075     mcPdgId     = cms.vint32(13),                             # one or more PDG ID (13 = mu); absolute values (see below)
0076     checkCharge = cms.bool(False),                            # True = require RECO and MC objects to have the same charge
0077     mcStatus    = cms.vint32(1),                              # PYTHIA status code (1 = stable, 2 = shower, 3 = hard scattering)
0078     maxDeltaR   = cms.double(0.05),                           # Minimum deltaR for the match
0079     maxDPtRel   = cms.double(0.5),                            # Minimum deltaPt/Pt for the match
0080     resolveAmbiguities    = cms.bool(True),                   # Forbid two RECO objects to match to the same GEN object
0081     resolveByMatchQuality = cms.bool(True),                   # False = just match input in order; True = pick lowest deltaR pair first
0082 )
0083 
0084 # Table for MC matching
0085 MCMuonTable = cms.EDProducer("CandMCMatchTableProducer",
0086     src = TrgMatchMuonTable.src,
0087     mcMap       = cms.InputTag("muonBPHMCMatch"),
0088     objName     = TrgMatchMuonTable.name,
0089     objType     = cms.string("Muon"),
0090     branchName = cms.string("genPart"),
0091     docString   = cms.string("MC matching to status==1 muons"),
0092 )
0093 
0094 
0095 muonBPHSequence   = cms.Sequence(muonBPH)
0096 muonBPHSequenceMC = cms.Sequence(muonBPH + muonBPHMCMatch)
0097 muonBPHTables   = cms.Sequence(TrgMatchMuonTable)
0098 muonBPHTablesMC = cms.Sequence(TrgMatchMuonTable + MCMuonTable)
0099