Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:23:45

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('chHadMultiplicity','chHadMultiplicity', 10,  0, 40,'(Puppi-weighted) number of charged hadrons in the jet'),
0024     Plot1D('neHadMultiplicity','neHadMultiplicity', 10,  0, 40,'(Puppi-weighted) number of neutral hadrons in the jet'),
0025     Plot1D('phoMultiplicity','phoMultiplicity', 10,  0, 40,'(Puppi-weighted) number of photons in the jet'),
0026     Plot1D('elMultiplicity','elMultiplicity', 5, 0, 10,'(Puppi-weighted) number of electrons in the jet'),
0027     Plot1D('muMultiplicity','muMultiplicity', 5, 0, 10,'(Puppi-weighted) number of muons in the jet'),
0028     Plot1D('hfEMMultiplicity','hfEMMultiplicity', 5, 0, 10,'(Puppi-weighted) number of HF EMs in the jet'),
0029     Plot1D('hfHadMultiplicity','hfHadMultiplicity', 5,  0, 10,'(Puppi-weighted) 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 ])
0055 
0056 #============================================
0057 #
0058 # Setup for AK4 CHS jets
0059 #
0060 #============================================
0061 _ak4chsplots = cms.VPSet(
0062     Count1D('_size', 20, -0.5, 19.5, 'AK4 PF CHS jets with JECs applied.')
0063 )
0064 for plot in _ak4puppiplots:
0065     if plot.name.value()=="_size": continue
0066     _ak4chsplots.append(plot)
0067     _ak4chsplots.extend([
0068         Plot1D('chFPV1EF', 'chFPV1EF', 20, 0, 2, 'charged fromPV==1 Energy Fraction (component of the total charged Energy Fraction).'),
0069         Plot1D('chFPV2EF', 'chFPV2EF', 20, 0, 2, 'charged fromPV==2 Energy Fraction (component of the total charged Energy Fraction).'),
0070         Plot1D('chFPV3EF', 'chFPV3EF', 20, 0, 2, 'charged fromPV==3 Energy Fraction (component of the total charged Energy Fraction).'),
0071     ])
0072 
0073 #============================================
0074 #
0075 # Setup all extra AK4 collections. Will remove
0076 # collection depending on era.
0077 #
0078 #============================================
0079 nanojmeDQM.vplots.Jet.plots = _ak4puppiplots #Puppi is default "Jet collection" for Run-3
0080 nanojmeDQM.vplots.JetPuppi = cms.PSet( # This is for the Run-2 extra "JetPuppi" collection
0081     sels = nanojmeDQM.vplots.Jet.sels,
0082     plots = _ak4puppiplots
0083 )
0084 nanojmeDQM.vplots.JetCHS = cms.PSet( # This is for the Run-3 extra "JetCHS" collection
0085     sels = nanojmeDQM.vplots.Jet.sels,
0086     plots = _ak4chsplots
0087 )
0088 
0089 
0090 
0091 #============================================
0092 #
0093 # Add more variables for AK8 Puppi jets
0094 #
0095 #============================================
0096 nanojmeDQM.vplots.FatJet.plots.extend([
0097     Plot1D('chHadMultiplicity','chHadMultiplicity', 10,  0, 40,'(Puppi-weighted) number of charged hadrons in the jet'),
0098     Plot1D('neHadMultiplicity','neHadMultiplicity', 10,  0, 40,'(Puppi-weighted) number of neutral hadrons in the jet'),
0099     Plot1D('phoMultiplicity','phoMultiplicity', 10,  0, 40,'(Puppi-weighted) number of photons in the jet'),
0100     Plot1D('elMultiplicity','elMultiplicity', 5, 0, 10,'(Puppi-weighted) number of electrons in the jet'),
0101     Plot1D('muMultiplicity','muMultiplicity', 5, 0, 10,'(Puppi-weighted) number of muons in the jet'),
0102     Plot1D('hfEMMultiplicity','hfEMMultiplicity', 5, 0, 10,'(Puppi-weighted) number of HF EMs in the jet'),
0103     Plot1D('hfHadMultiplicity','hfHadMultiplicity', 5,  0, 10,'(Puppi-weighted) number of HF hadrons in the jet'),
0104     Plot1D('neEmEF','neEmEF',20, 0, 1,'neutral Electromagnetic Energy Fraction'),
0105     Plot1D('neHEF','neHEF',20, 0, 1,'neutral Hadron Energy Fraction'),
0106 ])
0107 
0108 #============================================
0109 #
0110 # Setup for AK8 Puppi jets for JEC studies
0111 #
0112 #============================================
0113 nanojmeDQM.vplots.FatJetForJEC = cms.PSet(
0114     sels = cms.PSet(
0115         CentralPt30 = cms.string('abs(eta) < 2.4 && pt > 30'),
0116         ForwardPt30 = cms.string('abs(eta) > 2.4 && pt > 30')
0117     ),
0118     plots = cms.VPSet(
0119         Count1D('_size', 20, -0.5, 19.5, 'AK8 PF Puppi jets with JECs applied. Reclustered for JEC studies so only minimal info stored.'),
0120         Plot1D('area', 'area', 20, 0.2, 0.8, 'jet catchment area, for JECs'),
0121         Plot1D('eta', 'eta', 20, -6, 6, 'eta'),
0122         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'),
0123         Plot1D('mass', 'mass', 20, 0, 200, 'mass'),
0124         Plot1D('phi', 'phi', 20, -3.14159, 3.14159, 'phi'),
0125         Plot1D('pt', 'pt', 20, 0, 400, 'pt'),
0126         Plot1D('rawFactor', 'rawFactor', 20, -0.5, 0.5, '1 - Factor to get back to raw pT'),
0127         Plot1D('chHadMultiplicity','chHadMultiplicity', 10,  0, 40,'(Puppi-weighted) number of charged hadrons in the jet'),
0128         Plot1D('neHadMultiplicity','neHadMultiplicity', 10,  0, 40,'(Puppi-weighted) number of neutral hadrons in the jet'),
0129         Plot1D('phoMultiplicity','phoMultiplicity', 10,  0, 40,'(Puppi-weighted) number of photons in the jet'),
0130         Plot1D('elMultiplicity','elMultiplicity', 5, 0, 10,'(Puppi-weighted) number of electrons in the jet'),
0131         Plot1D('muMultiplicity','muMultiplicity', 5, 0, 10,'(Puppi-weighted) number of muons in the jet'),
0132         Plot1D('hfEMMultiplicity','hfEMMultiplicity', 5, 0, 10,'(Puppi-weighted) number of HF EMs in the jet'),
0133         Plot1D('hfHadMultiplicity','hfHadMultiplicity', 5,  0, 10,'(Puppi-weighted) number of HF hadrons in the jet'),
0134         Plot1D('nElectrons', 'nElectrons', 5, -0.5, 4.5, 'number of electrons in the jet'),
0135         Plot1D('nMuons', 'nMuons', 4, -0.5, 3.5, 'number of muons in the jet'),
0136         Plot1D('hadronFlavour', 'hadronFlavour', 6, -0.5, 5.5, 'flavour from hadron ghost clustering'),
0137         Plot1D('partonFlavour', 'partonFlavour', 40, -9.5, 30.5, 'flavour from parton matching'),
0138         Plot1D('chEmEF', 'chEmEF', 20, 0, 1, 'charged Electromagnetic Energy Fraction'),
0139         Plot1D('chHEF', 'chHEF', 20, 0, 2, 'charged Hadron Energy Fraction'),
0140         Plot1D('neEmEF', 'neEmEF', 20, 0.3, 0.4, 'neutral Electromagnetic Energy Fraction'),
0141         Plot1D('neHEF', 'neHEF', 20, 0.01, 0.2, 'neutral Hadron Energy Fraction'),
0142         Plot1D('hfEmEF', 'hfEmEF', 20, 0, 1, 'electromagnetic energy fraction in HF'),
0143         Plot1D('hfHEF', 'hfHEF', 20, 0, 1, 'hadronic energy fraction in HF'),
0144         Plot1D('muEF', 'muEF', 20, -1, 1, 'muon Energy Fraction'),
0145         NoPlot('genJetIdx'),
0146     ),
0147 )
0148 
0149 #============================================
0150 #
0151 # Setup for AK4 Calo jets
0152 #
0153 #============================================
0154 nanojmeDQM.vplots.JetCalo = cms.PSet(
0155     sels = cms.PSet(
0156         CentralPt30 = cms.string('abs(eta) < 2.4 && pt > 30'),
0157         ForwardPt30 = cms.string('abs(eta) > 2.4 && pt > 30')
0158     ),
0159     plots = cms.VPSet(
0160         Count1D('_size', 20, -0.5, 19.5, 'AK4 Calo jets (slimmedCaloJets)'),
0161         Plot1D('area', 'area', 20, 0.2, 0.8, 'jet catchment area'),
0162         Plot1D('eta', 'eta', 20, -6, 6, 'eta'),
0163         Plot1D('mass', 'mass', 20, 0, 200, 'mass'),
0164         Plot1D('phi', 'phi', 20, -3.14159, 3.14159, 'phi'),
0165         Plot1D('pt', 'pt', 20, 0, 400, 'pt'),
0166         Plot1D('rawFactor', 'rawFactor', 20, -0.5, 0.5, '1 - Factor to get back to raw pT'),
0167         Plot1D('emf', 'emf', 20, 0, 1, 'electromagnetic energy fraction'),
0168         Plot1D('hadronFlavour', 'hadronFlavour', 6, -0.5, 5.5, 'flavour from hadron ghost clustering'),
0169         Plot1D('partonFlavour', 'partonFlavour', 40, -9.5, 30.5, 'flavour from parton matching'),
0170         NoPlot('genJetIdx'),
0171     ),
0172 )
0173 
0174 ##MC
0175 nanojmeDQMMC = nanojmeDQM.clone()
0176 #nanojmeDQMMC.vplots.Electron.sels.Prompt = cms.string("genPartFlav == 1")
0177 nanojmeDQMMC.vplots.LowPtElectron.sels.Prompt = cms.string("genPartFlav == 1")
0178 nanojmeDQMMC.vplots.Muon.sels.Prompt = cms.string("genPartFlav == 1")
0179 nanojmeDQMMC.vplots.Photon.sels.Prompt = cms.string("genPartFlav == 1")
0180 nanojmeDQMMC.vplots.Tau.sels.Prompt = cms.string("genPartFlav == 5")
0181 nanojmeDQMMC.vplots.Jet.sels.Prompt = cms.string("genJetIdx != 1")
0182 nanojmeDQMMC.vplots.Jet.sels.PromptB = cms.string("genJetIdx != 1 && hadronFlavour == 5")
0183 
0184 #============================================
0185 #
0186 # Era dependent customization
0187 #
0188 #============================================
0189 #
0190 # Run 3
0191 #
0192 (~run2_nanoAOD_ANY).toModify(
0193     nanojmeDQM.vplots.Jet,
0194     plots = _ak4puppiplots,
0195 ).toModify(
0196     nanojmeDQM.vplots,
0197     JetPuppi = None # Remove "JetPuppi" from DQM
0198 )
0199 (~run2_nanoAOD_ANY).toModify(
0200     nanojmeDQMMC.vplots.JetCHS.sels,
0201     Prompt = nanojmeDQMMC.vplots.Jet.sels.Prompt,
0202     PromptB = nanojmeDQMMC.vplots.Jet.sels.PromptB
0203 )
0204 #
0205 # Run 2
0206 #
0207 run2_nanoAOD_ANY.toModify(
0208     nanojmeDQM.vplots.Jet,
0209     plots = _ak4chsplots, #
0210 ).toModify(
0211     nanojmeDQM.vplots,
0212     JetCHS = None # Remove "JetCHS" from DQM
0213 )
0214 run2_nanoAOD_ANY.toModify(
0215     nanojmeDQMMC.vplots.JetPuppi.sels,
0216     Prompt = nanojmeDQMMC.vplots.Jet.sels.Prompt,
0217     PromptB = nanojmeDQMMC.vplots.Jet.sels.PromptB
0218 )
0219 
0220 from DQMServices.Core.DQMQualityTester import DQMQualityTester
0221 nanoDQMQTester = DQMQualityTester(
0222     qtList = cms.untracked.FileInPath('PhysicsTools/NanoAOD/test/dqmQualityTests.xml'),
0223     prescaleFactor = cms.untracked.int32(1),
0224     testInEventloop = cms.untracked.bool(False),
0225     qtestOnEndLumi = cms.untracked.bool(False),
0226     verboseQT =  cms.untracked.bool(True)
0227 )
0228 
0229 nanojmeHarvest = cms.Sequence( nanoDQMQTester )