Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-01-28 23:24:24

0001 import FWCore.ParameterSet.Config as cms
0002 from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer
0003 from DQMServices.Core.DQMEDHarvester import DQMEDHarvester
0004 
0005 from DQMOffline.RecoB.bTagMiniDQMTaggers import DeepCSVDiscriminators
0006 from DQMOffline.RecoB.bTagMiniDQMTaggers import DeepFlavourDiscriminators
0007 from DQMOffline.RecoB.bTagMiniDQMTaggers import ParticleNetPuppiCentralDiscriminators
0008 from DQMOffline.RecoB.bTagMiniDQMTaggers import ParticleNetPuppiForwardDiscriminators
0009 from DQMOffline.RecoB.bTagMiniDQMTaggers import UParTDiscriminators
0010 
0011 from PhysicsTools.PatAlgos.producersLayer1.jetProducer_cff import patJets
0012 
0013 # add jets with pfSecondaryVertexTagInfos
0014 patJetsSVInfo = patJets.clone(
0015     tagInfoSources = ['pfSecondaryVertexTagInfos'],
0016     addTagInfos = True
0017 )
0018 patJetsSVInfoTask = cms.Task(patJetsSVInfo)
0019 
0020 
0021 bTagSVDQM = DQMEDAnalyzer('MiniAODSVAnalyzer', cms.PSet(
0022     JetTag = cms.InputTag('patJetsSVInfo'),
0023     svTagInfo = cms.string('pfSecondaryVertex'),
0024     ptMin = cms.double(30.),
0025     etaMax = cms.double(2.5),
0026    )
0027 )
0028 
0029 bTagMiniDQMGlobal = cms.PSet(
0030     JetTag = cms.InputTag('slimmedJetsPuppi'),
0031     MClevel = cms.int32(0),
0032     differentialPlots = cms.bool(True),
0033     ptActive = cms.bool(False),
0034     ptMin = cms.double(30.),
0035     ptMax = cms.double(40000.),
0036 )
0037 bTagMiniValidationGlobal = bTagMiniDQMGlobal.clone(
0038     MClevel = 1 # produce flavour plots for b, c ,light (dusg)
0039 )
0040 bTagMiniValidationGlobalUParT = bTagMiniDQMGlobal.clone(
0041     MClevel = 4 # produce flavour plots for b, c ,light (dusg)
0042 )
0043 
0044 # Eta regions
0045 Etaregions = {
0046     'Global': cms.PSet(
0047         etaActive = cms.bool(False),
0048         etaMin = cms.double(0.),
0049         etaMax = cms.double(2.5),
0050     ),
0051     'Barrel': cms.PSet(
0052         etaActive = cms.bool(True),
0053         etaMin = cms.double(0.),
0054         etaMax = cms.double(1.4),
0055     ),
0056     'Endcap': cms.PSet(
0057         etaActive = cms.bool(True),
0058         etaMin = cms.double(1.4),
0059         etaMax = cms.double(2.5),
0060     ),
0061 }
0062 
0063 
0064 # For DQM
0065 bTagMiniDQMSource = cms.Sequence(bTagSVDQM, patJetsSVInfoTask)
0066 bTagMiniDQMHarvesting = cms.Sequence()
0067 
0068 # For Validation
0069 bTagMiniValidationSource = cms.Sequence(bTagSVDQM, patJetsSVInfoTask)
0070 bTagMiniValidationHarvesting = cms.Sequence()
0071 
0072 #####################################################################################
0073 #
0074 # Setup DQM and Validation plots for DeepJet, ParticleNet and UParT taggers' outputs
0075 #
0076 #####################################################################################
0077 def addSequences(Analyzer, Harvester, discriminators, regions, globalPSet, label='bTag'):
0078     for discr in discriminators.keys():
0079         for region in regions.keys():
0080             name = label + discr + region
0081 
0082             globals()[name + 'Analyzer'] = DQMEDAnalyzer('MiniAODTaggerAnalyzer',    cms.PSet(globalPSet, discriminators[discr], regions[region]))
0083             globals()[name + 'Harvester'] = DQMEDHarvester('MiniAODTaggerHarvester', cms.PSet(globalPSet, discriminators[discr], regions[region]))
0084 
0085             Analyzer.insert(-1, globals()[name + 'Analyzer'])
0086             Harvester.insert(-1, globals()[name + 'Harvester'])
0087 
0088 taggersToAnalyze = {
0089     'bTagDeepFlavour': {
0090         'discriminators': DeepFlavourDiscriminators,
0091         'regions':Etaregions
0092     },
0093     'bTagDeepCSV': {
0094         'discriminators': DeepCSVDiscriminators,
0095         'regions':Etaregions
0096     },
0097     'bTagParticleNetCentral': {
0098         'discriminators': ParticleNetPuppiCentralDiscriminators,
0099         'regions': Etaregions
0100     },
0101     'bTagParticleNetForward': {
0102         'discriminators': ParticleNetPuppiForwardDiscriminators,
0103         'regions': {
0104             'Forward': cms.PSet(
0105                 etaActive = cms.bool(True),
0106                 etaMin = cms.double(2.5),
0107                 etaMax = cms.double(5.0),
0108             ),
0109         },
0110     },
0111     'bTagUParT': {
0112         'discriminators': UParTDiscriminators,
0113         'regions': Etaregions
0114     }
0115 }
0116 
0117 for tagger in taggersToAnalyze:
0118     # DQM
0119     addSequences(bTagMiniDQMSource,
0120                  bTagMiniDQMHarvesting,
0121                  discriminators=taggersToAnalyze[tagger]['discriminators'],
0122                  regions=taggersToAnalyze[tagger]['regions'],
0123                  globalPSet=bTagMiniDQMGlobal,
0124                  label=tagger+'DQM')
0125 
0126     # Validation
0127     addSequences(bTagMiniValidationSource,
0128                  bTagMiniValidationHarvesting,
0129                  discriminators=taggersToAnalyze[tagger]['discriminators'],
0130                  regions=taggersToAnalyze[tagger]['regions'],
0131                  globalPSet=bTagMiniValidationGlobalUParT if "UParT" in tagger else bTagMiniValidationGlobal,
0132                  label=tagger+'Validation')
0133 
0134 #####################################################################################
0135 #
0136 # Setup Validation plots for DeepJet, ParticleNet and UParT taggers' inputs
0137 #
0138 #####################################################################################
0139 # Jets in the tracker-coverage region
0140 patJetsPuppiTagInfoAnalyzerDQM = DQMEDAnalyzer('MiniAODTagInfoAnalyzer', cms.PSet(
0141     jets = cms.InputTag('updatedPatJetsSlimmedPuppiWithDeepTags'),
0142     jetTagInfos = cms.vstring(
0143         "pfDeepFlavourTagInfosSlimmedPuppiWithDeepTags",
0144         "pfParticleNetFromMiniAODAK4PuppiCentralTagInfosSlimmedPuppiWithDeepTags",
0145         "pfUnifiedParticleTransformerAK4TagInfosSlimmedPuppiWithDeepTags",
0146     ),
0147     ptMin = cms.double(30.),
0148     absEtaMin = cms.double(0.0),
0149     absEtaMax = cms.double(2.5),
0150     jetPartonFlavour = cms.int32(-1),#Inclusive flavour since DQM is for data
0151    )
0152 )
0153 bTagMiniDQMSource += patJetsPuppiTagInfoAnalyzerDQM
0154 
0155 # Jets outside tracker-coverage region. Only ParticleNet
0156 patJetsPuppiForwardTagInfoAnalyzerDQM = patJetsPuppiTagInfoAnalyzerDQM.clone(
0157     jetTagInfos = cms.vstring(
0158         "pfParticleNetFromMiniAODAK4PuppiForwardTagInfosSlimmedPuppiWithDeepTags",
0159     ),
0160     absEtaMin = cms.double(2.5),
0161     absEtaMax = cms.double(5.0),
0162     jetPartonFlavour = cms.int32(-1),#Inclusive flavour since DQM is for data
0163 )
0164 bTagMiniDQMSource += patJetsPuppiForwardTagInfoAnalyzerDQM
0165 
0166 #####################################################################################
0167 #
0168 # Setup Validation plots for DeepJet, ParticleNet and UParT taggers' inputs
0169 #
0170 #####################################################################################
0171 # Jets in the tracker-coverage region (Inclusive flavour)
0172 patJetsPuppiTagInfoAnalyzerValidation = patJetsPuppiTagInfoAnalyzerDQM.clone()
0173 bTagMiniValidationSource += patJetsPuppiTagInfoAnalyzerValidation
0174 
0175 # Jets in the tracker-coverage region (B flavour)
0176 patJetsPuppiTagInfoAnalyzerBJetsValidation = patJetsPuppiTagInfoAnalyzerValidation.clone(jetPartonFlavour=5)
0177 bTagMiniValidationSource += patJetsPuppiTagInfoAnalyzerBJetsValidation
0178 
0179 # Jets in the tracker-coverage region (C flavour)
0180 patJetsPuppiTagInfoAnalyzerCJetsValidation = patJetsPuppiTagInfoAnalyzerValidation.clone(jetPartonFlavour=4)
0181 bTagMiniValidationSource += patJetsPuppiTagInfoAnalyzerCJetsValidation
0182 
0183 # Jets in the tracker-coverage region (L flavour: uds+g)
0184 patJetsPuppiTagInfoAnalyzerLJetsValidation = patJetsPuppiTagInfoAnalyzerValidation.clone(jetPartonFlavour=1)
0185 bTagMiniValidationSource += patJetsPuppiTagInfoAnalyzerLJetsValidation
0186 
0187 # Jets outside tracker-coverage region (Inclusive flavour). Only ParticleNet
0188 patJetsPuppiForwardTagInfoAnalyzerValidation = patJetsPuppiForwardTagInfoAnalyzerDQM.clone()
0189 bTagMiniValidationSource += patJetsPuppiForwardTagInfoAnalyzerValidation
0190 #####################################################################################
0191 #
0192 # Setup modifiers here
0193 #
0194 #####################################################################################
0195 from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA
0196 from Configuration.ProcessModifiers.miniAOD_skip_trackExtras_cff import miniAOD_skip_trackExtras
0197 
0198 toExcludeDQMSource_pp_on_AA = [
0199     bTagSVDQM,
0200     patJetsSVInfoTask,
0201     patJetsPuppiTagInfoAnalyzerDQM,
0202     patJetsPuppiForwardTagInfoAnalyzerDQM,
0203 ]
0204 
0205 toExcludeValidationSource_pp_on_AA = [
0206     bTagSVDQM,
0207     patJetsSVInfoTask,
0208     patJetsPuppiTagInfoAnalyzerValidation,
0209     patJetsPuppiTagInfoAnalyzerBJetsValidation,
0210     patJetsPuppiTagInfoAnalyzerCJetsValidation,
0211     patJetsPuppiTagInfoAnalyzerLJetsValidation,
0212     patJetsPuppiForwardTagInfoAnalyzerValidation
0213 ]
0214 
0215 _mAOD = (pp_on_AA | miniAOD_skip_trackExtras)
0216 _mAOD.toReplaceWith(bTagMiniDQMSource, bTagMiniDQMSource.copyAndExclude(toExcludeDQMSource_pp_on_AA))
0217 _mAOD.toReplaceWith(bTagMiniValidationSource, bTagMiniValidationSource.copyAndExclude(toExcludeValidationSource_pp_on_AA))
0218