Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 11:16:09

0001 import FWCore.ParameterSet.Config as cms
0002 import copy
0003 
0004 from PhysicsTools.NanoAOD.nanoDQM_cfi import nanoDQM
0005 from PhysicsTools.NanoAOD.nanoDQM_tools_cff import *
0006 from PhysicsTools.NanoAOD.nano_eras_cff import *
0007 
0008 nanojmeDQM = nanoDQM.clone()
0009 
0010 #============================================
0011 #
0012 # Add more variables for AK4 Puppi jets
0013 #
0014 #============================================
0015 _ak4puppiplots = cms.VPSet(
0016     Count1D('_size', 20, -0.5, 19.5, 'AK4 PF Puppi jets with JECs applied.')
0017 )
0018 for plot in nanojmeDQM.vplots.Jet.plots:
0019     if plot.name.value()=="_size": continue
0020     _ak4puppiplots.append(plot)
0021 
0022 _ak4puppiplots.extend([
0023     Plot1D('nConstChHads','nConstChHads', 10,  0, 40,'number of charged hadrons in the jet'),
0024     Plot1D('nConstNeuHads','nConstNeuHads', 10,  0, 40,'number of neutral hadrons in the jet'),
0025     Plot1D('nConstPhotons','nConstPhotons', 10,  0, 40,'number of photons in the jet'),
0026     Plot1D('nConstElecs','nConstElecs', 5, 0, 10,'number of electrons in the jet'),
0027     Plot1D('nConstMuons','nConstMuons', 5, 0, 10,'number of muons in the jet'),
0028     Plot1D('nConstHFEMs','nConstHFEMs', 5, 0, 10,'number of HF EMs in the jet'),
0029     Plot1D('nConstHFHads','nConstHFHads', 5,  0, 10,'number of HF Hadrons in the jet'),
0030     Plot1D('puId_dR2Mean','puId_dR2Mean',20, 0, 0.2,"pT^2-weighted average square distance of jet constituents from the jet axis (PileUp ID BDT input variable)"),
0031     Plot1D('puId_majW','puId_majW',10, 0, 0.5, "major axis of jet ellipsoid in eta-phi plane (PileUp ID BDT input variable)"),
0032     Plot1D('puId_minW','puId_minW',10, 0, 0.5, "minor axis of jet ellipsoid in eta-phi plane (PileUp ID BDT input variable)"),
0033     Plot1D('puId_frac01','puId_frac01',10, 0, 1, "fraction of constituents' pT contained within dR <0.1 (PileUp ID BDT input variable)"),
0034     Plot1D('puId_frac02','puId_frac02',10, 0, 1, "fraction of constituents' pT contained within 0.1< dR <0.2 (PileUp ID BDT input variable)"),
0035     Plot1D('puId_frac03','puId_frac03',10, 0, 1, "fraction of constituents' pT contained within 0.2< dR <0.3 (PileUp ID BDT input variable)"),
0036     Plot1D('puId_frac04','puId_frac04',10, 0, 1, "fraction of constituents' pT contained within 0.3< dR <0.4 (PileUp ID BDT input variable)"),
0037     Plot1D('puId_ptD','puId_ptD',10, 0, 1, "pT-weighted average pT of constituents (PileUp ID BDT input variable)"),
0038     Plot1D('puId_beta','puId_beta',10, 0, 1, "fraction of pT of charged constituents associated to PV (PileUp ID BDT input variable)"),
0039     Plot1D('puId_pull','puId_pull',10, 0, 0.05, "magnitude of pull vector (PileUp ID BDT input variable)"),
0040     Plot1D('puId_jetR','puId_jetR',10, 0, 1, "fraction of jet pT carried by the leading constituent (PileUp ID BDT input variable)"),
0041     Plot1D('puId_jetRchg','puId_jetRchg',10, 0, 1, "fraction of jet pT carried by the leading charged constituent (PileUp ID BDT input variable)"),
0042     Plot1D('puId_nCharged','puId_nCharged',10, 0, 40, "number of charged constituents (PileUp ID BDT input variable)"),
0043     Plot1D('qgl_axis2','qgl_axis2',10, 0, 0.4, "ellipse minor jet axis (Quark vs Gluon likelihood input variable)"),
0044     Plot1D('qgl_ptD','qgl_ptD',10, 0, 1, "pT-weighted average pT of constituents (Quark vs Gluon likelihood input variable)"),
0045     Plot1D('qgl_mult','qgl_mult', 10, 0, 50, "PF candidates multiplicity (Quark vs Gluon likelihood input variable)"),
0046     Plot1D('btagDeepFlavG','btagDeepFlavG',20, -1, 1, "DeepFlavour gluon tag raw score"),
0047     Plot1D('btagDeepFlavUDS','btagDeepFlavUDS',20, -1, 1, "DeepFlavour uds tag raw score"),
0048     Plot1D('particleNetAK4_B','particleNetAK4_B',20, -1, 1, "ParticleNetAK4 tagger b vs all (udsg, c) discriminator"),
0049     Plot1D('particleNetAK4_CvsL','particleNetAK4_CvsL',20, -1, 1,"ParticleNetAK4 tagger c vs udsg discriminator"),
0050     Plot1D('particleNetAK4_CvsB','particleNetAK4_CvsB',20, -1, 1,"ParticleNetAK4 tagger c vs b discriminator"),
0051     Plot1D('particleNetAK4_QvsG','particleNetAK4_QvsG',20, -1, 1,"ParticleNetAK4 tagger uds vs g discriminator"),
0052     Plot1D('particleNetAK4_G','particleNetAK4_G',20, -1, 1, "ParticleNetAK4 tagger g raw score"),
0053     Plot1D('particleNetAK4_puIdDisc','particleNetAK4_puIdDisc',20, -1, 1,"ParticleNetAK4 tagger pileup jet discriminator"),
0054     Plot1D('hfEmEF','hfEmEF', 20, 0, 1,'electromagnetic energy fraction in HF'),
0055     Plot1D('hfHEF','hfHEF', 20, 0, 1,'hadronic energy fraction in HF'),
0056 ])
0057 
0058 #============================================
0059 #
0060 # Setup for AK4 CHS jets
0061 #
0062 #============================================
0063 _ak4chsplots = cms.VPSet(
0064     Count1D('_size', 20, -0.5, 19.5, 'AK4 PF CHS jets with JECs applied.')
0065 )
0066 for plot in _ak4puppiplots:
0067     if plot.name.value()=="_size": continue
0068     _ak4chsplots.append(plot)
0069     _ak4chsplots.extend([
0070         Plot1D('chFPV1EF', 'chFPV1EF', 20, 0, 2, 'charged fromPV==1 Energy Fraction (component of the total charged Energy Fraction).'),
0071         Plot1D('chFPV2EF', 'chFPV2EF', 20, 0, 2, 'charged fromPV==2 Energy Fraction (component of the total charged Energy Fraction).'),
0072         Plot1D('chFPV3EF', 'chFPV3EF', 20, 0, 2, 'charged fromPV==3 Energy Fraction (component of the total charged Energy Fraction).'),
0073     ])
0074 
0075 #============================================
0076 #
0077 # Setup all extra AK4 collections. Will remove
0078 # collection depending on era.
0079 #
0080 #============================================
0081 nanojmeDQM.vplots.Jet.plots = _ak4puppiplots #Puppi is default "Jet collection" for Run-3
0082 nanojmeDQM.vplots.JetPuppi = cms.PSet( # This is for the Run-2 extra "JetPuppi" collection
0083     sels = nanojmeDQM.vplots.Jet.sels,
0084     plots = _ak4puppiplots
0085 )
0086 nanojmeDQM.vplots.JetCHS = cms.PSet( # This is for the Run-3 extra "JetCHS" collection
0087     sels = nanojmeDQM.vplots.Jet.sels,
0088     plots = _ak4chsplots
0089 )
0090 
0091 
0092 
0093 #============================================
0094 #
0095 # Add more variables for AK8 Puppi jets
0096 #
0097 #============================================
0098 nanojmeDQM.vplots.FatJet.plots.extend([
0099     Plot1D('nConstChHads','nConstChHads',10,0,40,'number of charged hadrons in the jet'),
0100     Plot1D('nConstNeuHads','nConstNeuHads',10,0,40,'number of neutral hadrons in the jet'),
0101     Plot1D('nConstPhotons','nConstPhotons',10,0,40,'number of photons in the jet'),
0102     Plot1D('nConstElecs','nConstElecs',5,0,10,'number of electrons in the jet'),
0103     Plot1D('nConstMuons','nConstMuons',5,0,10,'number of muons in the jet'),
0104     Plot1D('nConstHFEMs','nConstHFEMs',5,0,10,'number of HF EMs in the jet'),
0105     Plot1D('nConstHFHads','nConstHFHads',5,0,10,'number of HF Hadrons in the jet'),
0106     Plot1D('neEmEF','neEmEF',20, 0, 1,'neutral Electromagnetic Energy Fraction'),
0107     Plot1D('neHEF','neHEF',20, 0, 1,'neutral Hadron Energy Fraction'),
0108 ])
0109 
0110 #============================================
0111 #
0112 # Setup for AK8 Puppi jets for JEC studies
0113 #
0114 #============================================
0115 nanojmeDQM.vplots.FatJetForJEC = cms.PSet(
0116     sels = cms.PSet(
0117         CentralPt30 = cms.string('abs(eta) < 2.4 && pt > 30'),
0118         ForwardPt30 = cms.string('abs(eta) > 2.4 && pt > 30')
0119     ),
0120     plots = cms.VPSet(
0121         Count1D('_size', 20, -0.5, 19.5, 'AK8 PF Puppi jets with JECs applied. Reclustered for JEC studies so only minimal info stored.'),
0122         Plot1D('area', 'area', 20, 0.2, 0.8, 'jet catchment area, for JECs'),
0123         Plot1D('eta', 'eta', 20, -6, 6, 'eta'),
0124         Plot1D('jetId', 'jetId', 8, -0.5, 7.5, 'Jet ID flags bit1 is loose (always false in 2017 since it does not exist), bit2 is tight, bit3 is tightLepVeto'),
0125         Plot1D('mass', 'mass', 20, 0, 200, 'mass'),
0126         Plot1D('phi', 'phi', 20, -3.14159, 3.14159, 'phi'),
0127         Plot1D('pt', 'pt', 20, 0, 400, 'pt'),
0128         Plot1D('rawFactor', 'rawFactor', 20, -0.5, 0.5, '1 - Factor to get back to raw pT'),
0129         Plot1D('nConstChHads','nConstChHads', 10,  0, 40,'number of charged hadrons in the jet'),
0130         Plot1D('nConstNeuHads','nConstNeuHads', 10,  0, 40,'number of neutral hadrons in the jet'),
0131         Plot1D('nConstPhotons','nConstPhotons', 10,  0, 40,'number of photons in the jet'),
0132         Plot1D('nConstElecs','nConstElecs', 5, 0, 10,'number of electrons in the jet'),
0133         Plot1D('nConstMuons','nConstMuons', 5, 0, 10,'number of muons in the jet'),
0134         Plot1D('nConstHFEMs','nConstHFEMs', 5, 0, 10,'number of HF EMs in the jet'),
0135         Plot1D('nConstHFHads','nConstHFHads', 5,  0, 10,'number of HF Hadrons in the jet'),
0136         Plot1D('nElectrons', 'nElectrons', 5, -0.5, 4.5, 'number of electrons in the jet'),
0137         Plot1D('nMuons', 'nMuons', 4, -0.5, 3.5, 'number of muons in the jet'),
0138         Plot1D('hadronFlavour', 'hadronFlavour', 6, -0.5, 5.5, 'flavour from hadron ghost clustering'),
0139         Plot1D('partonFlavour', 'partonFlavour', 40, -9.5, 30.5, 'flavour from parton matching'),
0140         Plot1D('chEmEF', 'chEmEF', 20, 0, 1, 'charged Electromagnetic Energy Fraction'),
0141         Plot1D('chHEF', 'chHEF', 20, 0, 2, 'charged Hadron Energy Fraction'),
0142         Plot1D('neEmEF', 'neEmEF', 20, 0.3, 0.4, 'neutral Electromagnetic Energy Fraction'),
0143         Plot1D('neHEF', 'neHEF', 20, 0.01, 0.2, 'neutral Hadron Energy Fraction'),
0144         Plot1D('hfEmEF', 'hfEmEF', 20, 0, 1, 'electromagnetic energy fraction in HF'),
0145         Plot1D('hfHEF', 'hfHEF', 20, 0, 1, 'hadronic energy fraction in HF'),
0146         Plot1D('muEF', 'muEF', 20, -1, 1, 'muon Energy Fraction'),
0147         NoPlot('genJetIdx'),
0148     ),
0149 )
0150 
0151 #============================================
0152 #
0153 # Setup for AK8 CHS jets
0154 #
0155 #============================================
0156 _ak8chsplots = cms.VPSet(
0157     Count1D('_size', 20, -0.5, 19.5, 'AK8 CHS jets with JECs applied.')
0158 )
0159 for plot in nanojmeDQM.vplots.FatJetForJEC.plots:
0160     if plot.name.value()=="_size": continue
0161     _ak8chsplots.append(plot)
0162 
0163 nanojmeDQM.vplots.FatJetCHS = cms.PSet(
0164     sels = nanojmeDQM.vplots.FatJetForJEC.sels,
0165     plots = _ak8chsplots,
0166 )
0167 
0168 #============================================
0169 #
0170 # Setup for AK4 Calo jets
0171 #
0172 #============================================
0173 nanojmeDQM.vplots.JetCalo = cms.PSet(
0174     sels = cms.PSet(
0175         CentralPt30 = cms.string('abs(eta) < 2.4 && pt > 30'),
0176         ForwardPt30 = cms.string('abs(eta) > 2.4 && pt > 30')
0177     ),
0178     plots = cms.VPSet(
0179         Count1D('_size', 20, -0.5, 19.5, 'AK4 Calo jets (slimmedCaloJets)'),
0180         Plot1D('area', 'area', 20, 0.2, 0.8, 'jet catchment area'),
0181         Plot1D('eta', 'eta', 20, -6, 6, 'eta'),
0182         Plot1D('mass', 'mass', 20, 0, 200, 'mass'),
0183         Plot1D('phi', 'phi', 20, -3.14159, 3.14159, 'phi'),
0184         Plot1D('pt', 'pt', 20, 0, 400, 'pt'),
0185         Plot1D('rawFactor', 'rawFactor', 20, -0.5, 0.5, '1 - Factor to get back to raw pT'),
0186         Plot1D('emf', 'emf', 20, 0, 1, 'electromagnetic energy fraction'),
0187         Plot1D('hadronFlavour', 'hadronFlavour', 6, -0.5, 5.5, 'flavour from hadron ghost clustering'),
0188         Plot1D('partonFlavour', 'partonFlavour', 40, -9.5, 30.5, 'flavour from parton matching'),
0189         NoPlot('genJetIdx'),
0190     ),
0191 )
0192 
0193 ##MC
0194 nanojmeDQMMC = nanojmeDQM.clone()
0195 #nanojmeDQMMC.vplots.Electron.sels.Prompt = cms.string("genPartFlav == 1")
0196 nanojmeDQMMC.vplots.LowPtElectron.sels.Prompt = cms.string("genPartFlav == 1")
0197 nanojmeDQMMC.vplots.Muon.sels.Prompt = cms.string("genPartFlav == 1")
0198 nanojmeDQMMC.vplots.Photon.sels.Prompt = cms.string("genPartFlav == 1")
0199 nanojmeDQMMC.vplots.Tau.sels.Prompt = cms.string("genPartFlav == 5")
0200 nanojmeDQMMC.vplots.Jet.sels.Prompt = cms.string("genJetIdx != 1")
0201 nanojmeDQMMC.vplots.Jet.sels.PromptB = cms.string("genJetIdx != 1 && hadronFlavour == 5")
0202 
0203 #============================================
0204 #
0205 # Era dependent customization
0206 #
0207 #============================================
0208 #
0209 # Run 3
0210 #
0211 (~run2_nanoAOD_ANY).toModify(
0212     nanojmeDQM.vplots.Jet, 
0213     plots = _ak4puppiplots,
0214 ).toModify(
0215     nanojmeDQM.vplots, 
0216     JetPuppi = None # Remove "JetPuppi" from DQM
0217 )
0218 (~run2_nanoAOD_ANY).toModify(
0219     nanojmeDQMMC.vplots.JetCHS.sels,
0220     Prompt = nanojmeDQMMC.vplots.Jet.sels.Prompt,
0221     PromptB = nanojmeDQMMC.vplots.Jet.sels.PromptB
0222 )
0223 #
0224 # Run 2
0225 #
0226 run2_nanoAOD_ANY.toModify(
0227     nanojmeDQM.vplots.Jet, 
0228     plots = _ak4chsplots, #
0229 ).toModify(
0230     nanojmeDQM.vplots, 
0231     JetCHS = None # Remove "JetCHS" from DQM
0232 )
0233 run2_nanoAOD_ANY.toModify(
0234     nanojmeDQMMC.vplots.JetPuppi.sels, 
0235     Prompt = nanojmeDQMMC.vplots.Jet.sels.Prompt,
0236     PromptB = nanojmeDQMMC.vplots.Jet.sels.PromptB
0237 )
0238 
0239 from DQMServices.Core.DQMQualityTester import DQMQualityTester
0240 nanoDQMQTester = DQMQualityTester(
0241     qtList = cms.untracked.FileInPath('PhysicsTools/NanoAOD/test/dqmQualityTests.xml'),
0242     prescaleFactor = cms.untracked.int32(1),                               
0243     testInEventloop = cms.untracked.bool(False),
0244     qtestOnEndLumi = cms.untracked.bool(False),
0245     verboseQT =  cms.untracked.bool(True)
0246 )
0247 
0248 nanojmeHarvest = cms.Sequence( nanoDQMQTester )