CMS 3D CMS Logo

customizeHLTforCMSSW.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 
3 # helper functions
5 
6 # add one customisation function per PR
7 # - put the PR number into the name of the function
8 # - add a short comment
9 # for example:
10 
11 # CCCTF tuning
12 # def customiseFor12718(process):
13 # for pset in process._Process__psets.values():
14 # if hasattr(pset,'ComponentType'):
15 # if (pset.ComponentType == 'CkfBaseTrajectoryFilter'):
16 # if not hasattr(pset,'minGoodStripCharge'):
17 # pset.minGoodStripCharge = cms.PSet(refToPSet_ = cms.string('HLTSiStripClusterChargeCutNone'))
18 # return process
19 
21  """Customise the HLT to run on Run 2 data/MC using the old readout for the HCAL barel"""
22 
23  for producer in producers_by_type(process, "HBHEPhase1Reconstructor"):
24  # switch on the QI8 processing for 2018 HCAL barrel
25  producer.processQIE8 = True
26 
27  # adapt CaloTowers threshold for 2018 HCAL barrel with only one depth
28  for producer in producers_by_type(process, "CaloTowersCreator"):
29  producer.HBThreshold1 = 0.7
30  producer.HBThreshold2 = 0.7
31  producer.HBThreshold = 0.7
32 
33  # adapt Particle Flow threshold for 2018 HCAL barrel with only one depth
34  from RecoParticleFlow.PFClusterProducer.particleFlowClusterHBHE_cfi import _thresholdsHB, _thresholdsHEphase1, _seedingThresholdsHB
35 
36  logWeightDenominatorHCAL2018 = cms.VPSet(
37  cms.PSet(
38  depths = cms.vint32(1, 2, 3, 4),
39  detector = cms.string('HCAL_BARREL1'),
40  logWeightDenominator = _thresholdsHB
41  ),
42  cms.PSet(
43  depths = cms.vint32(1, 2, 3, 4, 5, 6, 7),
44  detector = cms.string('HCAL_ENDCAP'),
45  logWeightDenominator = _thresholdsHEphase1
46  )
47  )
48 
49  for producer in producers_by_type(process, "PFRecHitProducer"):
50  if producer.producers[0].name.value() == 'PFHBHERecHitCreator':
51  producer.producers[0].qualityTests[0].cuts[0].threshold = _thresholdsHB
52 
53  for producer in producers_by_type(process, "PFClusterProducer"):
54  if producer.seedFinder.thresholdsByDetector[0].detector.value() == 'HCAL_BARREL1':
55  producer.seedFinder.thresholdsByDetector[0].seedingThreshold = _seedingThresholdsHB
56  producer.initialClusteringStep.thresholdsByDetector[0].gatheringThreshold = _thresholdsHB
57  producer.pfClusterBuilder.recHitEnergyNorms[0].recHitEnergyNorm = _thresholdsHB
58  producer.pfClusterBuilder.positionCalc.logWeightDenominatorByDetector = logWeightDenominatorHCAL2018
59  producer.pfClusterBuilder.allCellsPositionCalc.logWeightDenominatorByDetector = logWeightDenominatorHCAL2018
60 
61  for producer in producers_by_type(process, "PFMultiDepthClusterProducer"):
62  producer.pfClusterBuilder.allCellsPositionCalc.logWeightDenominatorByDetector = logWeightDenominatorHCAL2018
63 
64  # done
65  return process
66 
68  """Adapt the HLT to run the legacy DT unpacking
69  for pre2018 data/MC workflows as the default"""
70 
71  if hasattr(process,'hltMuonDTDigis'):
72  process.hltMuonDTDigis = cms.EDProducer( "DTUnpackingModule",
73  useStandardFEDid = cms.bool( True ),
74  maxFEDid = cms.untracked.int32( 779 ),
75  inputLabel = cms.InputTag( "rawDataCollector" ),
76  minFEDid = cms.untracked.int32( 770 ),
77  dataType = cms.string( "DDU" ),
78  readOutParameters = cms.PSet(
79  localDAQ = cms.untracked.bool( False ),
80  debug = cms.untracked.bool( False ),
81  rosParameters = cms.PSet(
82  localDAQ = cms.untracked.bool( False ),
83  debug = cms.untracked.bool( False ),
84  writeSC = cms.untracked.bool( True ),
85  readDDUIDfromDDU = cms.untracked.bool( True ),
86  readingDDU = cms.untracked.bool( True ),
87  performDataIntegrityMonitor = cms.untracked.bool( False )
88  ),
89  performDataIntegrityMonitor = cms.untracked.bool( False )
90  ),
91  dqmOnly = cms.bool( False )
92  )
93 
94  return process
95 
97  """Customise the HLT to run on Run 2 data/MC using the old definition of the pixel calibrations
98 
99  Up to 11.0.x, the pixel calibarations were fully specified in the configuration:
100  VCaltoElectronGain = 47
101  VCaltoElectronGain_L1 = 50
102  VCaltoElectronOffset = -60
103  VCaltoElectronOffset_L1 = -670
104 
105  Starting with 11.1.x, the calibrations for Run 3 were moved to the conditions, leaving in the configuration only:
106  VCaltoElectronGain = 1
107  VCaltoElectronGain_L1 = 1
108  VCaltoElectronOffset = 0
109  VCaltoElectronOffset_L1 = 0
110 
111  Since the conditions for Run 2 have not been updated to the new scheme, the HLT configuration needs to be reverted.
112  """
113  # revert the Pixel parameters to be compatible with the Run 2 conditions
114  for producer in producers_by_type(process, "SiPixelClusterProducer"):
115  producer.VCaltoElectronGain = 47
116  producer.VCaltoElectronGain_L1 = 50
117  producer.VCaltoElectronOffset = -60
118  producer.VCaltoElectronOffset_L1 = -670
119 
120  for pluginType in ["SiPixelRawToClusterCUDA", "SiPixelRawToClusterCUDAPhase1", "SiPixelRawToClusterCUDAHIonPhase1"]:
121  for producer in producers_by_type(process, pluginType):
122  producer.VCaltoElectronGain = 47
123  producer.VCaltoElectronGain_L1 = 50
124  producer.VCaltoElectronOffset = -60
125  producer.VCaltoElectronOffset_L1 = -670
126 
127  return process
128 
130  # revert the pixel Layer 1 cluster threshold to be compatible with Run2:
131  for producer in producers_by_type(process, "SiPixelClusterProducer"):
132  if hasattr(producer,"ClusterThreshold_L1"):
133  producer.ClusterThreshold_L1 = 2000
134  for pluginType in ["SiPixelRawToClusterCUDA", "SiPixelRawToClusterCUDAPhase1", "SiPixelRawToClusterCUDAHIonPhase1"]:
135  for producer in producers_by_type(process, pluginType):
136  if hasattr(producer,"clusterThreshold_layer1"):
137  producer.clusterThreshold_layer1 = 2000
138  for producer in producers_by_type(process, "SiPixelDigisClustersFromSoA"):
139  if hasattr(producer,"clusterThreshold_layer1"):
140  producer.clusterThreshold_layer1 = 2000
141 
142  return process
143 
145  for prod in producers_by_type(process, 'CTPPSGeometryESModule'):
146  prod.isRun2 = True
147  for prod in producers_by_type(process, 'CTPPSPixelRawToDigi'):
148  prod.isRun3 = False
149 
150  return process
151 
153  for prod in producers_by_type(process, 'PFECALSuperClusterProducer'):
154  if hasattr(prod, 'regressionConfig'):
155  prod.regressionConfig.regTrainedWithPS = cms.bool(False)
156 
157  return process
158 
160  """Customisation for the HLT BeamSpot when running on Run-2 (2018) data:
161  - For Run-2 data, disable the use of the BS transient record, in order to read the BS record from SCAL.
162  - Additionally, remove all instances of OnlineBeamSpotESProducer (not needed if useTransientRecord=False).
163  - See CMSHLT-2271 and CMSHLT-2300 for further details.
164  """
165  for prod in producers_by_type(process, 'BeamSpotOnlineProducer'):
166  prod.useTransientRecord = False
167  onlineBeamSpotESPLabels = [prod.label_() for prod in esproducers_by_type(process, 'OnlineBeamSpotESProducer')]
168  for espLabel in onlineBeamSpotESPLabels:
169  delattr(process, espLabel)
170 
171  # re-introduce SCAL digis, if missing
172  if not hasattr(process, 'hltScalersRawToDigi') and hasattr(process, 'HLTBeamSpot') and isinstance(process.HLTBeamSpot, cms.Sequence):
173 
174  if hasattr(process, 'hltOnlineBeamSpot'):
175  process.hltOnlineBeamSpot.src = 'hltScalersRawToDigi'
176 
177  if hasattr(process, 'hltPixelTrackerHVOn'):
178  process.hltPixelTrackerHVOn.DcsStatusLabel = 'hltScalersRawToDigi'
179 
180  if hasattr(process, 'hltStripTrackerHVOn'):
181  process.hltStripTrackerHVOn.DcsStatusLabel = 'hltScalersRawToDigi'
182 
183  process.hltScalersRawToDigi = cms.EDProducer( "ScalersRawToDigi",
184  scalersInputTag = cms.InputTag( "rawDataCollector" )
185  )
186 
187  process.HLTBeamSpot.insert(0, process.hltScalersRawToDigi)
188 
189  return process
190 
192  """Customisation to apply the ECAL Run-2 Ultra-Legacy calibrations (CMSHLT-2339)"""
193  if hasattr(process, 'GlobalTag'):
194  if not hasattr(process.GlobalTag, 'toGet'):
195  process.GlobalTag.toGet = cms.VPSet()
196  process.GlobalTag.toGet += [
197  cms.PSet(
198  record = cms.string('EcalLaserAlphasRcd'),
199  tag = cms.string('EcalLaserAlphas_UL_Run1_Run2_2018_lastIOV_movedTo1')
200  ),
201  cms.PSet(
202  record = cms.string('EcalIntercalibConstantsRcd'),
203  tag = cms.string('EcalIntercalibConstants_UL_Run1_Run2_2018_lastIOV_movedTo1')
204  )
205  ]
206  else:
207  print('# customiseECALCalibrationsFor2018Input -- the process.GlobalTag ESSource does not exist: no customisation applied.')
208 
209  return process
210 
212  """Customise the HLT to run on Run 2 data/MC"""
213  process = customisePixelGainForRun2Input(process)
215  process = customiseHCALFor2018Input(process)
216  process = customiseCTPPSFor2018Input(process)
217  process = customiseEGammaRecoFor2018Input(process)
218  process = customiseBeamSpotFor2018Input(process)
219  process = customiseECALCalibrationsFor2018Input(process)
220 
221  return process
222 
223 
224 def customiseForOffline(process):
225  # For running HLT offline on Run-3 Data, use "(OnlineBeamSpotESProducer).timeThreshold = 1e6",
226  # in order to pick the beamspot that was actually used by the HLT (instead of a "fake" beamspot).
227  # These same settings can be used offline for Run-3 Data and Run-3 MC alike.
228  # Note: the products of the OnlineBeamSpotESProducer are used only
229  # if the configuration uses "(BeamSpotOnlineProducer).useTransientRecord = True".
230  # See CMSHLT-2271 and CMSHLT-2300 for further details.
231  for prod in esproducers_by_type(process, 'OnlineBeamSpotESProducer'):
232  prod.timeThreshold = int(1e6)
233 
234  return process
235 
236 
237 def customizeHLTfor43025(process):
238 
239  for producer in producers_by_type(process, "PFClusterProducer"):
240  producer.usePFThresholdsFromDB = cms.bool(True)
241 
242  for producer in producers_by_type(process, "PFMultiDepthClusterProducer"):
243  producer.usePFThresholdsFromDB = cms.bool(True)
244 
245  for producer in producers_by_type(process, "PFRecHitProducer"):
246  if producer.producers[0].name.value() == 'PFHBHERecHitCreator':
247  producer.producers[0].qualityTests[0].usePFThresholdsFromDB = cms.bool(True)
248  if producer.producers[0].name.value() == 'PFHFRecHitCreator':
249  producer.producers[0].qualityTests[1].usePFThresholdsFromDB = cms.bool(False)
250 
251  return process
252 
253 def customizeHLTfor43549(process):
254  """ This customization is related to ticket https://its.cern.ch/jira/browse/CMSHLT-2975
255  If all 3 input tags L1CandTag, InpuLinks and inputMuonCollection are null (hence not consumed)
256  it means that the HLTMuonL3PreFilter should be configured such that the flag requireL3MuonTrajectorySeed is true
257  """
258  for filter in filters_by_type(process, "HLTMuonL3PreFilter"):
259  if (filter.L1CandTag == cms.InputTag("") and filter.InputLinks == cms.InputTag("") and filter.inputMuonCollection == cms.InputTag("")):
260  filter.requireL3MuonTrajectorySeed = cms.bool(True)
261 
262  return process
263 
264 # CMSSW version specific customizations
265 def customizeHLTforCMSSW(process, menuType="GRun"):
266 
267  process = customiseForOffline(process)
268 
269  # add call to action function in proper order: newest last!
270  # process = customiseFor12718(process)
271 
272  process = customizeHLTfor43025(process)
273  process = customizeHLTfor43549(process)
274 
275  return process
def producers_by_type(process, types)
def customisePixelL1ClusterThresholdForRun2Input(process)
def customizeHLTforCMSSW(process, menuType="GRun")
def filters_by_type(process, types)
Definition: common.py:13
def customiseECALCalibrationsFor2018Input(process)
def customiseFor2017DtUnpacking(process)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
def customiseHCALFor2018Input(process)
def customiseCTPPSFor2018Input(process)
def customiseFor2018Input(process)
def customiseEGammaRecoFor2018Input(process)
def customiseBeamSpotFor2018Input(process)
def customisePixelGainForRun2Input(process)
def esproducers_by_type(process, types)
Definition: common.py:21