File indexing completed on 2024-07-26 17:49:23
0001 import FWCore.ParameterSet.Config as cms
0002
0003
0004 from HLTrigger.Configuration.common import *
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 def customiseHCALFor2018Input(process):
0021 """Customise the HLT to run on Run 2 data/MC using the old readout for the HCAL barel"""
0022
0023 for producer in producers_by_type(process, "HBHEPhase1Reconstructor"):
0024
0025 producer.processQIE8 = True
0026
0027
0028 for producer in producers_by_type(process, "CaloTowersCreator"):
0029 producer.HBThreshold1 = 0.7
0030 producer.HBThreshold2 = 0.7
0031 producer.HBThreshold = 0.7
0032
0033
0034 from RecoParticleFlow.PFClusterProducer.particleFlowClusterHBHE_cfi import _thresholdsHB, _thresholdsHEphase1, _seedingThresholdsHB
0035
0036 logWeightDenominatorHCAL2018 = cms.VPSet(
0037 cms.PSet(
0038 depths = cms.vint32(1, 2, 3, 4),
0039 detector = cms.string('HCAL_BARREL1'),
0040 logWeightDenominator = _thresholdsHB
0041 ),
0042 cms.PSet(
0043 depths = cms.vint32(1, 2, 3, 4, 5, 6, 7),
0044 detector = cms.string('HCAL_ENDCAP'),
0045 logWeightDenominator = _thresholdsHEphase1
0046 )
0047 )
0048
0049 for producer in producers_by_type(process, "PFRecHitProducer"):
0050 if producer.producers[0].name.value() == 'PFHBHERecHitCreator':
0051 producer.producers[0].qualityTests[0].cuts[0].threshold = _thresholdsHB
0052
0053 for producer in producers_by_type(process, "PFClusterProducer"):
0054 if producer.seedFinder.thresholdsByDetector[0].detector.value() == 'HCAL_BARREL1':
0055 producer.seedFinder.thresholdsByDetector[0].seedingThreshold = _seedingThresholdsHB
0056 producer.initialClusteringStep.thresholdsByDetector[0].gatheringThreshold = _thresholdsHB
0057 producer.pfClusterBuilder.recHitEnergyNorms[0].recHitEnergyNorm = _thresholdsHB
0058 producer.pfClusterBuilder.positionCalc.logWeightDenominatorByDetector = logWeightDenominatorHCAL2018
0059 producer.pfClusterBuilder.allCellsPositionCalc.logWeightDenominatorByDetector = logWeightDenominatorHCAL2018
0060
0061 for producer in producers_by_type(process, "PFMultiDepthClusterProducer"):
0062 producer.pfClusterBuilder.allCellsPositionCalc.logWeightDenominatorByDetector = logWeightDenominatorHCAL2018
0063
0064
0065 return process
0066
0067 def customiseFor2017DtUnpacking(process):
0068 """Adapt the HLT to run the legacy DT unpacking
0069 for pre2018 data/MC workflows as the default"""
0070
0071 if hasattr(process,'hltMuonDTDigis'):
0072 process.hltMuonDTDigis = cms.EDProducer( "DTUnpackingModule",
0073 useStandardFEDid = cms.bool( True ),
0074 maxFEDid = cms.untracked.int32( 779 ),
0075 inputLabel = cms.InputTag( "rawDataCollector" ),
0076 minFEDid = cms.untracked.int32( 770 ),
0077 dataType = cms.string( "DDU" ),
0078 readOutParameters = cms.PSet(
0079 localDAQ = cms.untracked.bool( False ),
0080 debug = cms.untracked.bool( False ),
0081 rosParameters = cms.PSet(
0082 localDAQ = cms.untracked.bool( False ),
0083 debug = cms.untracked.bool( False ),
0084 writeSC = cms.untracked.bool( True ),
0085 readDDUIDfromDDU = cms.untracked.bool( True ),
0086 readingDDU = cms.untracked.bool( True ),
0087 performDataIntegrityMonitor = cms.untracked.bool( False )
0088 ),
0089 performDataIntegrityMonitor = cms.untracked.bool( False )
0090 ),
0091 dqmOnly = cms.bool( False )
0092 )
0093
0094 return process
0095
0096 def customisePixelGainForRun2Input(process):
0097 """Customise the HLT to run on Run 2 data/MC using the old definition of the pixel calibrations
0098
0099 Up to 11.0.x, the pixel calibarations were fully specified in the configuration:
0100 VCaltoElectronGain = 47
0101 VCaltoElectronGain_L1 = 50
0102 VCaltoElectronOffset = -60
0103 VCaltoElectronOffset_L1 = -670
0104
0105 Starting with 11.1.x, the calibrations for Run 3 were moved to the conditions, leaving in the configuration only:
0106 VCaltoElectronGain = 1
0107 VCaltoElectronGain_L1 = 1
0108 VCaltoElectronOffset = 0
0109 VCaltoElectronOffset_L1 = 0
0110
0111 Since the conditions for Run 2 have not been updated to the new scheme, the HLT configuration needs to be reverted.
0112 """
0113
0114 for producer in producers_by_type(process, "SiPixelClusterProducer"):
0115 producer.VCaltoElectronGain = 47
0116 producer.VCaltoElectronGain_L1 = 50
0117 producer.VCaltoElectronOffset = -60
0118 producer.VCaltoElectronOffset_L1 = -670
0119
0120 for pluginType in ["SiPixelRawToClusterCUDA", "SiPixelRawToClusterCUDAPhase1", "SiPixelRawToClusterCUDAHIonPhase1"]:
0121 for producer in producers_by_type(process, pluginType):
0122 producer.VCaltoElectronGain = 47
0123 producer.VCaltoElectronGain_L1 = 50
0124 producer.VCaltoElectronOffset = -60
0125 producer.VCaltoElectronOffset_L1 = -670
0126
0127 return process
0128
0129 def customisePixelL1ClusterThresholdForRun2Input(process):
0130
0131 for producer in producers_by_type(process, "SiPixelClusterProducer"):
0132 if hasattr(producer,"ClusterThreshold_L1"):
0133 producer.ClusterThreshold_L1 = 2000
0134 for pluginType in ["SiPixelRawToClusterCUDA", "SiPixelRawToClusterCUDAPhase1", "SiPixelRawToClusterCUDAHIonPhase1"]:
0135 for producer in producers_by_type(process, pluginType):
0136 if hasattr(producer,"clusterThreshold_layer1"):
0137 producer.clusterThreshold_layer1 = 2000
0138 for producer in producers_by_type(process, "SiPixelDigisClustersFromSoA"):
0139 if hasattr(producer,"clusterThreshold_layer1"):
0140 producer.clusterThreshold_layer1 = 2000
0141
0142 return process
0143
0144 def customiseCTPPSFor2018Input(process):
0145 for prod in producers_by_type(process, 'CTPPSGeometryESModule'):
0146 prod.isRun2 = True
0147 for prod in producers_by_type(process, 'CTPPSPixelRawToDigi'):
0148 prod.isRun3 = False
0149
0150 return process
0151
0152 def customiseEGammaRecoFor2018Input(process):
0153 for prod in producers_by_type(process, 'PFECALSuperClusterProducer'):
0154 if hasattr(prod, 'regressionConfig'):
0155 prod.regressionConfig.regTrainedWithPS = cms.bool(False)
0156
0157 return process
0158
0159 def customiseBeamSpotFor2018Input(process):
0160 """Customisation for the HLT BeamSpot when running on Run-2 (2018) data:
0161 - For Run-2 data, disable the use of the BS transient record, in order to read the BS record from SCAL.
0162 - Additionally, remove all instances of OnlineBeamSpotESProducer (not needed if useTransientRecord=False).
0163 - See CMSHLT-2271 and CMSHLT-2300 for further details.
0164 """
0165 for prod in producers_by_type(process, 'BeamSpotOnlineProducer'):
0166 prod.useTransientRecord = False
0167 onlineBeamSpotESPLabels = [prod.label_() for prod in esproducers_by_type(process, 'OnlineBeamSpotESProducer')]
0168 for espLabel in onlineBeamSpotESPLabels:
0169 delattr(process, espLabel)
0170
0171
0172 if not hasattr(process, 'hltScalersRawToDigi') and hasattr(process, 'HLTBeamSpot') and isinstance(process.HLTBeamSpot, cms.Sequence):
0173
0174 if hasattr(process, 'hltOnlineBeamSpot'):
0175 process.hltOnlineBeamSpot.src = 'hltScalersRawToDigi'
0176
0177 if hasattr(process, 'hltPixelTrackerHVOn'):
0178 process.hltPixelTrackerHVOn.DcsStatusLabel = 'hltScalersRawToDigi'
0179
0180 if hasattr(process, 'hltStripTrackerHVOn'):
0181 process.hltStripTrackerHVOn.DcsStatusLabel = 'hltScalersRawToDigi'
0182
0183 process.hltScalersRawToDigi = cms.EDProducer( "ScalersRawToDigi",
0184 scalersInputTag = cms.InputTag( "rawDataCollector" )
0185 )
0186
0187 process.HLTBeamSpot.insert(0, process.hltScalersRawToDigi)
0188
0189 return process
0190
0191 def customiseECALCalibrationsFor2018Input(process):
0192 """Customisation to apply the ECAL Run-2 Ultra-Legacy calibrations (CMSHLT-2339)"""
0193 if hasattr(process, 'GlobalTag'):
0194 if not hasattr(process.GlobalTag, 'toGet'):
0195 process.GlobalTag.toGet = cms.VPSet()
0196 process.GlobalTag.toGet += [
0197 cms.PSet(
0198 record = cms.string('EcalLaserAlphasRcd'),
0199 tag = cms.string('EcalLaserAlphas_UL_Run1_Run2_2018_lastIOV_movedTo1')
0200 ),
0201 cms.PSet(
0202 record = cms.string('EcalIntercalibConstantsRcd'),
0203 tag = cms.string('EcalIntercalibConstants_UL_Run1_Run2_2018_lastIOV_movedTo1')
0204 )
0205 ]
0206 else:
0207 print('# customiseECALCalibrationsFor2018Input -- the process.GlobalTag ESSource does not exist: no customisation applied.')
0208
0209 return process
0210
0211 def customiseFor2018Input(process):
0212 """Customise the HLT to run on Run 2 data/MC"""
0213 process = customisePixelGainForRun2Input(process)
0214 process = customisePixelL1ClusterThresholdForRun2Input(process)
0215 process = customiseHCALFor2018Input(process)
0216 process = customiseCTPPSFor2018Input(process)
0217 process = customiseEGammaRecoFor2018Input(process)
0218 process = customiseBeamSpotFor2018Input(process)
0219 process = customiseECALCalibrationsFor2018Input(process)
0220
0221 return process
0222
0223
0224 def customiseForOffline(process):
0225
0226
0227
0228
0229
0230
0231 for prod in esproducers_by_type(process, 'OnlineBeamSpotESProducer'):
0232 prod.timeThreshold = int(1e6)
0233
0234
0235
0236
0237
0238
0239 if hasattr(process, 'GlobalTag'):
0240
0241 process.GlobalTag.ReconnectEachRun = cms.untracked.bool(False)
0242 process.GlobalTag.RefreshEachRun = cms.untracked.bool(False)
0243
0244 if hasattr(process.GlobalTag, 'toGet'):
0245
0246 process.GlobalTag.toGet = [
0247 pset for pset in process.GlobalTag.toGet
0248 if set(pset.parameterNames_()) != {'record', 'refreshTime'}
0249 ]
0250
0251 return process
0252
0253 def checkHLTfor43774(process):
0254 filt_types = ["HLTEgammaGenericFilter","HLTEgammaGenericQuadraticEtaFilter","HLTEgammaGenericQuadraticFilter","HLTElectronGenericFilter"]
0255 absAbleVar = ["DEta","deta","DetaSeed","Dphi","OneOESuperMinusOneOP","OneOESeedMinusOneOP"]
0256 for filt_type in filt_types:
0257 for filt in filters_by_type(process, filt_type):
0258 if filt.varTag.productInstanceLabel in absAbleVar:
0259 if (filt.useAbs != cms.bool(True)):
0260 print('# TSG WARNING: check value of parameter "useAbs" in',filt,'(expect True but is False)!')
0261
0262 return process
0263
0264 def customizeHLTfor44576(process):
0265 """Ensure TrackerAdditionalParametersPerDetRcd ESProducer is run when needed"""
0266 for esprod in esproducers_by_type(process, 'TrackerGeometricDetESModule'):
0267 process.load("Geometry.TrackerGeometryBuilder.TrackerAdditionalParametersPerDet_cfi")
0268 break
0269 return process
0270
0271 def customizeHLTfor45063(process):
0272 """Assigns value of MuonHLTSeedMVAClassifier mva input file, scales and mean values according to the value of isFromL1"""
0273 for prod in producers_by_type(process, 'MuonHLTSeedMVAClassifier'):
0274 if hasattr(prod, "isFromL1"):
0275 if (prod.isFromL1 == True):
0276 if hasattr(prod, "mvaFileBL1"):
0277 prod.mvaFileB = prod.mvaFileBL1
0278 if hasattr(prod, "mvaFileEL1"):
0279 prod.mvaFileE = prod.mvaFileEL1
0280 if hasattr(prod, "mvaScaleMeanBL1"):
0281 prod.mvaScaleMeanB = prod.mvaScaleMeanBL1
0282 if hasattr(prod, "mvaScaleStdBL1"):
0283 prod.mvaScaleStdB = prod.mvaScaleStdBL1
0284 if hasattr(prod, "mvaScaleMeanEL1"):
0285 prod.mvaScaleMeanE = prod.mvaScaleMeanEL1
0286 if hasattr(prod, "mvaScaleStdEL1"):
0287 prod.mvaScaleStdE = prod.mvaScaleStdEL1
0288 else:
0289 if hasattr(prod, "mvaFileBL2"):
0290 prod.mvaFileB = prod.mvaFileBL2
0291 if hasattr(prod, "mvaFileEL2"):
0292 prod.mvaFileE = prod.mvaFileEL2
0293 if hasattr(prod, "mvaScaleMeanBL2"):
0294 prod.mvaScaleMeanB = prod.mvaScaleMeanBL2
0295 if hasattr(prod, "mvaScaleStdBL2"):
0296 prod.mvaScaleStdB = prod.mvaScaleStdBL2
0297 if hasattr(prod, "mvaScaleMeanEL2"):
0298 prod.mvaScaleMeanE = prod.mvaScaleMeanEL2
0299 if hasattr(prod, "mvaScaleStdEL2"):
0300 prod.mvaScaleStdE = prod.mvaScaleStdEL2
0301
0302 for prod in producers_by_type(process, 'MuonHLTSeedMVAClassifier'):
0303 delattr(prod,"mvaFileBL1")
0304 delattr(prod,"mvaFileEL1")
0305 delattr(prod,"mvaScaleMeanBL1")
0306 delattr(prod,"mvaScaleStdBL1")
0307 delattr(prod,"mvaScaleMeanEL1")
0308 delattr(prod,"mvaScaleStdEL1")
0309 delattr(prod,"mvaFileBL2")
0310 delattr(prod,"mvaFileEL2")
0311 delattr(prod,"mvaScaleMeanBL2")
0312 delattr(prod,"mvaScaleStdBL2")
0313 delattr(prod,"mvaScaleMeanEL2")
0314 delattr(prod,"mvaScaleStdEL2")
0315
0316 return process
0317
0318
0319
0320 def customizeHLTforCMSSW(process, menuType="GRun"):
0321
0322 process = customiseForOffline(process)
0323
0324
0325
0326
0327 process = checkHLTfor43774(process)
0328 process = customizeHLTfor44576(process)
0329 process = customizeHLTfor45063(process)
0330
0331 return process