CMS 3D CMS Logo

upgradeWorkflowComponents.py
Go to the documentation of this file.
1 from copy import deepcopy
2 from collections import OrderedDict
3 import six
4 from .MatrixUtil import merge
5 
6 # DON'T CHANGE THE ORDER, only append new keys. Otherwise the numbering for the runTheMatrix tests will change.
7 
8 upgradeKeys = {}
9 
10 upgradeKeys[2017] = [
11  '2017',
12  '2017PU',
13  '2017Design',
14  '2017DesignPU',
15  '2018',
16  '2018PU',
17  '2018Design',
18  '2018DesignPU',
19  '2021',
20  '2021PU',
21  '2021Design',
22  '2021DesignPU',
23  '2023',
24  '2023PU',
25  '2024',
26  '2024PU',
27 ]
28 
29 upgradeKeys[2026] = [
30  '2026D35',
31  '2026D35PU',
32  '2026D41',
33  '2026D41PU',
34  '2026D43',
35  '2026D43PU',
36  '2026D44',
37  '2026D44PU',
38  '2026D45',
39  '2026D45PU',
40  '2026D46',
41  '2026D46PU',
42  '2026D47',
43  '2026D47PU',
44  '2026D48',
45  '2026D48PU',
46  '2026D49',
47  '2026D49PU',
48 ]
49 
50 # pre-generation of WF numbers
51 numWFStart={
52  2017: 10000,
53  2026: 20000,
54 }
55 numWFSkip=200
56 # temporary measure to keep other WF numbers the same
57 numWFConflict = [[25000,26000],[50000,51000]]
58 numWFAll={
59  2017: [],
60  2026: []
61 }
62 
63 for year in upgradeKeys:
64  for i in range(0,len(upgradeKeys[year])):
65  numWFtmp = numWFStart[year] if i==0 else (numWFAll[year][i-1] + numWFSkip)
66  for conflict in numWFConflict:
67  if numWFtmp>=conflict[0] and numWFtmp<conflict[1]:
68  numWFtmp = conflict[1]
69  break
70  numWFAll[year].append(numWFtmp)
71 
72 # workflows for baseline and for variations
73 # setup() automatically loops over all steps and applies any customizations specified in setup_() -> called in relval_steps.py
74 # workflow() adds a concrete workflow to the list based on condition() -> called in relval_upgrade.py
75 # every special workflow gets its own derived class, which must then be added to the global dict upgradeWFs
77  def __init__(self,steps,PU,suffix,offset):
78  self.steps = steps
79  self.PU = PU
80  self.suffix = suffix
81  self.offset = offset
82  if self.offset < 0.0 or self.offset > 1.0:
83  raise ValueError("Special workflow offset must be between 0.0 and 1.0")
84  def init(self, stepDict):
85  for step in self.steps:
86  stepName = step + self.suffix
87  stepDict[stepName] = {}
88  for step in self.PU:
89  stepName = step + 'PU' + self.suffix
90  stepDict[stepName] = {}
91  stepNamePmx = step + 'PUPRMX' + self.suffix
92  stepDict[stepNamePmx] = {}
93  stepDict[stepNamePmx+'Combined'] = {}
94  def setup(self, stepDict, k, properties):
95  for step in self.steps:
96  stepName = step + self.suffix
97  self.setup_(step, stepName, stepDict, k, properties)
98  def setup_(self, step, stepName, stepDict, k, properties):
99  pass
100  def workflow(self, workflows, num, fragment, stepList, key, hasHarvest):
101  if self.condition(fragment, stepList, key, hasHarvest):
102  self.workflow_(workflows, num, fragment, stepList)
103  def workflow_(self, workflows, num, fragment, stepList):
104  workflows[num+self.offset] = [ fragment, stepList ]
105  def condition(self, fragment, stepList, key, hasHarvest):
106  return False
107 upgradeWFs = OrderedDict()
108 
110  def setup_(self, step, stepName, stepDict, k, properties):
111  cust=properties.get('Custom', None)
112  era=properties.get('Era', None)
113  if cust is not None: stepDict[stepName][k]['--customise']=cust
114  if era is not None: stepDict[stepName][k]['--era']=era
115  def condition(self, fragment, stepList, key, hasHarvest):
116  return True
117 upgradeWFs['baseline'] = UpgradeWorkflow_baseline(
118  steps = [
119  'GenSimFull',
120  'GenSimHLBeamSpotFull',
121  'GenSimHLBeamSpotFull14',
122  'DigiFull',
123  'DigiFullTrigger',
124  'RecoFullLocal',
125  'RecoFull',
126  'RecoFullGlobal',
127  'HARVESTFull',
128  'FastSim',
129  'HARVESTFast',
130  'HARVESTFullGlobal',
131  'ALCAFull',
132  'NanoFull',
133  'MiniAODFullGlobal',
134  ],
135  PU = [
136  'DigiFullTrigger',
137  'RecoFullLocal',
138  'RecoFullGlobal',
139  'DigiFull',
140  'RecoFull',
141  'HARVESTFull',
142  'HARVESTFullGlobal',
143  'MiniAODFullGlobal',
144  'NanoFull',
145  ],
146  suffix = '',
147  offset = 0.0,
148 )
149 
150 # some commonalities among tracking WFs
152  def condition(self, fragment, stepList, key, hasHarvest):
153  result = (fragment=="TTbar_13" or fragment=="TTbar_14TeV") and not 'PU' in key and hasHarvest and self.condition_(fragment, stepList, key, hasHarvest)
154  if result:
155  # skip ALCA and Nano
156  skipList = [s for s in stepList if (("ALCA" in s) or ("Nano" in s))]
157  for skip in skipList:
158  stepList.remove(skip)
159  return result
160  def condition_(self, fragment, stepList, key, hasHarvest):
161  return True
162 
164  def setup_(self, step, stepName, stepDict, k, properties):
165  if 'Reco' in step: stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
166  elif 'HARVEST' in step: stepDict[stepName][k] = merge([{'-s': 'HARVESTING:@trackingOnlyValidation+@trackingOnlyDQM'}, stepDict[step][k]])
167 upgradeWFs['trackingOnly'] = UpgradeWorkflow_trackingOnly(
168  steps = [
169  'RecoFull',
170  'HARVESTFull',
171  'RecoFullGlobal',
172  'HARVESTFullGlobal',
173  ],
174  PU = [],
175  suffix = '_trackingOnly',
176  offset = 0.1,
177 )
178 upgradeWFs['trackingOnly'].step3 = {
179  '-s': 'RAW2DIGI,RECO:reconstruction_trackingOnly,VALIDATION:@trackingOnlyValidation,DQM:@trackingOnlyDQM',
180  '--datatier':'GEN-SIM-RECO,DQMIO',
181  '--eventcontent':'RECOSIM,DQM',
182 }
183 # used outside of upgrade WFs
184 step3_trackingOnly = upgradeWFs['trackingOnly'].step3
185 
187  def setup_(self, step, stepName, stepDict, k, properties):
188  if 'Reco' in step and stepDict[step][k]['--era']=='Run2_2017':
189  stepDict[stepName][k] = merge([{'--era': 'Run2_2017_trackingRun2'}, stepDict[step][k]])
190  def condition_(self, fragment, stepList, key, hasHarvest):
191  return '2017' in key
192 upgradeWFs['trackingRun2'] = UpgradeWorkflow_trackingRun2(
193  steps = [
194  'RecoFull',
195  ],
196  PU = [],
197  suffix = '_trackingRun2',
198  offset = 0.2,
199 )
200 
202  def setup_(self, step, stepName, stepDict, k, properties):
203  if 'Reco' in step and stepDict[step][k]['--era']=='Run2_2017':
204  stepDict[stepName][k] = merge([{'--era': 'Run2_2017_trackingRun2'}, self.step3, stepDict[step][k]])
205  elif 'HARVEST' in step: stepDict[stepName][k] = merge([{'-s': 'HARVESTING:@trackingOnlyValidation+@trackingOnlyDQM'}, stepDict[step][k]])
206  def condition_(self, fragment, stepList, key, hasHarvest):
207  return '2017' in key
208 upgradeWFs['trackingOnlyRun2'] = UpgradeWorkflow_trackingOnlyRun2(
209  steps = [
210  'RecoFull',
211  'HARVESTFull',
212  ],
213  PU = [],
214  suffix = '_trackingOnlyRun2',
215  offset = 0.3,
216 )
217 upgradeWFs['trackingOnlyRun2'].step3 = upgradeWFs['trackingOnly'].step3
218 
220  def setup_(self, step, stepName, stepDict, k, properties):
221  if 'Reco' in step and stepDict[step][k]['--era']=='Run2_2017':
222  stepDict[stepName][k] = merge([{'--era': 'Run2_2017_trackingLowPU'}, stepDict[step][k]])
223  def condition_(self, fragment, stepList, key, hasHarvest):
224  return '2017' in key
225 upgradeWFs['trackingLowPU'] = UpgradeWorkflow_trackingLowPU(
226  steps = [
227  'RecoFull',
228  ],
229  PU = [],
230  suffix = '_trackingLowPU',
231  offset = 0.4,
232 )
233 
235  def setup_(self, step, stepName, stepDict, k, properties):
236  if 'Reco' in step: stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
237  elif 'HARVEST' in step: stepDict[stepName][k] = merge([{'-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'}, stepDict[step][k]])
238  def condition_(self, fragment, stepList, key, hasHarvest):
239  return '2017' in key or '2018' in key
240 upgradeWFs['pixelTrackingOnly'] = UpgradeWorkflow_pixelTrackingOnly(
241  steps = [
242  'RecoFull',
243  'HARVESTFull',
244  'RecoFullGlobal',
245  'HARVESTFullGlobal',
246  ],
247  PU = [],
248  suffix = '_pixelTrackingOnly',
249  offset = 0.5,
250 )
251 upgradeWFs['pixelTrackingOnly'].step3 = {
252  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
253  '--datatier': 'GEN-SIM-RECO,DQMIO',
254  '--eventcontent': 'RECOSIM,DQM',
255 }
256 
258  def setup_(self, step, stepName, stepDict, k, properties):
259  if 'Reco' in step: stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
260  def condition_(self, fragment, stepList, key, hasHarvest):
261  return '2017' in key or '2021' in key
262 upgradeWFs['trackingMkFit'] = UpgradeWorkflow_trackingMkFit(
263  steps = [
264  'RecoFull',
265  'RecoFullGlobal',
266  ],
267  PU = [],
268  suffix = '_trackingMkFit',
269  offset = 0.7,
270 )
271 upgradeWFs['trackingMkFit'].step3 = {
272  '--customise': 'RecoTracker/MkFit/customizeInitialStepToMkFit.customizeInitialStepToMkFit'
273 }
274 
276  def setup_(self, step, stepName, stepDict, k, properties):
277  if 'Reco' in step:
278  stepDict[stepName][k] = merge([{'-s': 'RAW2DIGI,L1Reco,RECO,RECOSIM', '--datatier':'AODSIM', '--eventcontent':'AODSIM'}, stepDict[step][k]])
279  elif 'MiniAOD' in step:
280  # the separate miniAOD step is used here
281  stepDict[stepName][k] = deepcopy(stepDict[step][k])
282  if 'HARVEST' in step:
283  # remove step
284  stepDict[stepName][k] = None
285  def condition(self, fragment, stepList, key, hasHarvest):
286  return fragment=="TTbar_14TeV" and '2026' in key
287 upgradeWFs['ProdLike'] = UpgradeWorkflow_ProdLike(
288  steps = [
289  'RecoFullGlobal',
290  'HARVESTFullGlobal',
291  'MiniAODFullGlobal',
292  ],
293  PU = [
294  'RecoFullGlobal',
295  'HARVESTFullGlobal',
296  'MiniAODFullGlobal',
297  ],
298  suffix = '_ProdLike',
299  offset = 0.21,
300 )
301 
303  def setup_(self, step, stepName, stepDict, k, properties):
304  if 'GenSim' in step:
305  custNew = "SimG4Core/Application/NeutronBGforMuonsXS_cff.customise"
306  else:
307  custNew = "SLHCUpgradeSimulations/Configuration/customise_mixing.customise_Mix_LongLived_Neutrons"
308  stepDict[stepName][k] = deepcopy(stepDict[step][k])
309  if '--customise' in stepDict[stepName][k].keys():
310  stepDict[stepName][k]['--customise'] += ","+custNew
311  else:
312  stepDict[stepName][k]['--customise'] = custNew
313  def condition(self, fragment, stepList, key, hasHarvest):
314  return any(fragment==nfrag for nfrag in self.neutronFrags) and any(nkey in key for nkey in self.neutronKeys)
315 upgradeWFs['Neutron'] = UpgradeWorkflow_Neutron(
316  steps = [
317  'GenSimFull',
318  'GenSimHLBeamSpotFull',
319  'GenSimHLBeamSpotFull14',
320  'DigiFull',
321  'DigiFullTrigger',
322  ],
323  PU = [
324  'DigiFull',
325  'DigiFullTrigger',
326  ],
327  suffix = '_Neutron',
328  offset = 0.12,
329 )
330 # add some extra info
331 upgradeWFs['Neutron'].neutronKeys = [x for x in upgradeKeys[2026] if 'PU' not in x]
332 upgradeWFs['Neutron'].neutronFrags = ['ZMM_14','MinBias_14TeV']
333 
335  def setup_(self, step, stepName, stepDict, k, properties):
336  stepDict[stepName][k] = merge([{'--procModifiers': 'run2_HECollapse_2018'}, stepDict[step][k]])
337  def condition(self, fragment, stepList, key, hasHarvest):
338  return fragment=="TTbar_13" and '2018' in key
339 upgradeWFs['heCollapse'] = UpgradeWorkflow_heCollapse(
340  steps = [
341  'GenSimFull',
342  'DigiFull',
343  'RecoFull',
344  'HARVESTFull',
345  'ALCAFull',
346  ],
347  PU = [
348  'DigiFull',
349  'RecoFull',
350  'HARVESTFull',
351  ],
352  suffix = '_heCollapse',
353  offset = 0.6,
354 )
355 
357  def setup_(self, step, stepName, stepDict, k, properties):
358  if 'Reco' in step and 'Run2_2018' in stepDict[step][k]['--era']:
359  stepDict[stepName][k] = merge([{'--era': 'Run2_2018,bParking'}, stepDict[step][k]])
360  def condition(self, fragment, stepList, key, hasHarvest):
361  return fragment=="TTbar_13" and '2018' in key
362 upgradeWFs['ParkingBPH'] = UpgradeWorkflow_ParkingBPH(
363  steps = [
364  'RecoFull',
365  ],
366  PU = [],
367  suffix = '_ParkingBPH',
368  offset = 0.8,
369 )
370 
372  def setup_(self, step, stepName, stepDict, k, properties):
373  if 'Reco' in step: stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
374  def condition(self, fragment, stepList, key, hasHarvest):
375  result = (fragment=="CloseByParticleGun") and ('2026' in key)
376  if result:
377  skipList = [s for s in stepList if ("HARVEST" in s)]
378  for skip in skipList:
379  stepList.remove(skip)
380  return result
381 upgradeWFs['TICLOnly'] = UpgradeWorkflow_TICLOnly(
382  steps = [
383  'RecoFull',
384  'RecoFullGlobal',
385  ],
386  PU = [],
387  suffix = '_TICLOnly',
388  offset = 0.51,
389 )
390 upgradeWFs['TICLOnly'].step3 = {
391  '--customise' : 'RecoHGCal/TICL/ticl_iterations.TICL_iterations'
392 }
393 
395  def setup_(self, step, stepName, stepDict, k, properties):
396  if 'Reco' in step: stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
397  def condition(self, fragment, stepList, key, hasHarvest):
398  return (fragment=="CloseByParticleGun") and ('2026' in key)
399 upgradeWFs['TICLFullReco'] = UpgradeWorkflow_TICLFullReco(
400  steps = [
401  'RecoFull',
402  'RecoFullGlobal',
403  ],
404  PU = [],
405  suffix = '_TICLFullReco',
406  offset = 0.52,
407 )
408 upgradeWFs['TICLFullReco'].step3 = {
409  '--customise' : 'RecoHGCal/TICL/ticl_iterations.TICL_iterations_withReco'
410 }
411 
412 # common operations for aging workflows
414  def setup_(self, step, stepName, stepDict, k, properties):
415  if 'Digi' in step or 'Reco' in step:
416  stepDict[stepName][k] = merge([{'--customise': 'SLHCUpgradeSimulations/Configuration/aging.customise_aging_'+self.lumi}, stepDict[step][k]])
417  def condition(self, fragment, stepList, key, hasHarvest):
418  return fragment=="TTbar_14TeV" and '2026' in key
419 # define several of them
420 upgradeWFs['Aging1000'] = UpgradeWorkflowAging(
421  steps = [
422  'DigiFull',
423  'DigiFullTrigger',
424  'RecoFullLocal',
425  'RecoFull',
426  'RecoFullGlobal',
427  ],
428  PU = [
429  'DigiFull',
430  'DigiFullTrigger',
431  'RecoFullLocal',
432  'RecoFull',
433  'RecoFullGlobal',
434  ],
435  suffix = 'Aging1000',
436  offset = 0.101,
437 )
438 upgradeWFs['Aging1000'].lumi = '1000'
439 upgradeWFs['Aging3000'] = deepcopy(upgradeWFs['Aging1000'])
440 upgradeWFs['Aging3000'].suffix = 'Aging3000'
441 upgradeWFs['Aging3000'].offset = 0.103
442 upgradeWFs['Aging3000'].lumi = '3000'
443 
444 # for premix, just use base class to store information
445 # actual operations happen in relval_steps.py and relval_upgrade.py
446 upgradeWFs['Premix'] = UpgradeWorkflow(
447  steps = [],
448  PU = [
449  'PremixFull',
450  'PremixHLBeamSpotFull',
451  'PremixHLBeamSpotFull14',
452  ],
453  suffix = '_Premix',
454  offset = 0.97,
455 )
456 # Premix stage2 is derived from baseline+PU in relval_upgrade.py
457 upgradeWFs['premixS2'] = UpgradeWorkflow(
458  steps = [],
459  PU = [],
460  suffix = '_premixS2',
461  offset = 0.98,
462 )
463 # Premix combined stage1+stage2 is derived for Premix+PU and baseline+PU in relval_upgrade.py
464 upgradeWFs['premixS1S2'] = UpgradeWorkflow(
465  steps = [],
466  PU = [],
467  suffix = '_premixS1S2',
468  offset = 0.99,
469 )
470 
471 # check for duplicate offsets
472 offsets = [specialWF.offset for specialType,specialWF in six.iteritems(upgradeWFs)]
473 seen = set()
474 dups = set(x for x in offsets if x in seen or seen.add(x))
475 if len(dups)>0:
476  raise ValueError("Duplicate special workflow offsets not allowed: "+','.join([str(x) for x in dups]))
477 
478 upgradeProperties = {}
479 
480 upgradeProperties[2017] = {
481  '2017' : {
482  'Geom' : 'DB:Extended',
483  'GT' : 'auto:phase1_2017_realistic',
484  'HLTmenu': '@relval2017',
485  'Era' : 'Run2_2017',
486  'ScenToRun' : ['GenSimFull','DigiFull','RecoFull','HARVESTFull','ALCAFull','NanoFull'],
487  },
488  '2017Design' : {
489  'Geom' : 'DB:Extended',
490  'GT' : 'auto:phase1_2017_design',
491  'HLTmenu': '@relval2017',
492  'Era' : 'Run2_2017',
493  'BeamSpot': 'GaussSigmaZ4cm',
494  'ScenToRun' : ['GenSimFull','DigiFull','RecoFull','HARVESTFull'],
495  },
496  '2018' : {
497  'Geom' : 'DB:Extended',
498  'GT' : 'auto:phase1_2018_realistic',
499  'HLTmenu': '@relval2018',
500  'Era' : 'Run2_2018',
501  'BeamSpot': 'Realistic25ns13TeVEarly2018Collision',
502  'ScenToRun' : ['GenSimFull','DigiFull','RecoFull','HARVESTFull','ALCAFull','NanoFull'],
503  },
504  '2018Design' : {
505  'Geom' : 'DB:Extended',
506  'GT' : 'auto:phase1_2018_design',
507  'HLTmenu': '@relval2018',
508  'Era' : 'Run2_2018',
509  'BeamSpot': 'GaussSigmaZ4cm',
510  'ScenToRun' : ['GenSimFull','DigiFull','RecoFull','HARVESTFull'],
511  },
512  '2021' : {
513  'Geom' : 'DB:Extended',
514  'GT' : 'auto:phase1_2021_realistic',
515  'HLTmenu': '@relval2021',
516  'Era' : 'Run3',
517  'BeamSpot': 'Run3RoundOptics25ns13TeVLowSigmaZ',
518  'ScenToRun' : ['GenSimFull','DigiFull','RecoFull','HARVESTFull','ALCAFull'],
519  },
520  '2021Design' : {
521  'Geom' : 'DB:Extended',
522  'GT' : 'auto:phase1_2021_design',
523  'HLTmenu': '@relval2021',
524  'Era' : 'Run3',
525  'BeamSpot': 'GaussSigmaZ4cm',
526  'ScenToRun' : ['GenSimFull','DigiFull','RecoFull','HARVESTFull'],
527  },
528  '2023' : {
529  'Geom' : 'DB:Extended',
530  'GT' : 'auto:phase1_2023_realistic',
531  'HLTmenu': '@relval2021',
532  'Era' : 'Run3',
533  'BeamSpot': 'Run3RoundOptics25ns13TeVLowSigmaZ',
534  'ScenToRun' : ['GenSimFull','DigiFull','RecoFull','HARVESTFull','ALCAFull'],
535  },
536  '2024' : {
537  'Geom' : 'DB:Extended',
538  'GT' : 'auto:phase1_2024_realistic',
539  'HLTmenu': '@relval2021',
540  'Era' : 'Run3',
541  'BeamSpot': 'Run3RoundOptics25ns13TeVLowSigmaZ',
542  'ScenToRun' : ['GenSimFull','DigiFull','RecoFull','HARVESTFull','ALCAFull'],
543  },
544 }
545 
546 # standard PU sequences
547 for key in list(upgradeProperties[2017].keys()):
548  upgradeProperties[2017][key+'PU'] = deepcopy(upgradeProperties[2017][key])
549  upgradeProperties[2017][key+'PU']['ScenToRun'] = ['GenSimFull','DigiFullPU','RecoFullPU','HARVESTFullPU'] + \
550  (['NanoFull'] if 'Design' not in key else [])
551 
552 upgradeProperties[2026] = {
553  '2026D35' : {
554  'Geom' : 'Extended2026D35',
555  'HLTmenu': '@fake2',
556  'GT' : 'auto:phase2_realistic_T6',
557  'Era' : 'Phase2C4',
558  'ScenToRun' : ['GenSimHLBeamSpotFull','DigiFullTrigger','RecoFullGlobal', 'HARVESTFullGlobal'],
559  },
560  '2026D41' : {
561  'Geom' : 'Extended2026D41',
562  'HLTmenu': '@fake2',
563  'GT' : 'auto:phase2_realistic_T14',
564  'Era' : 'Phase2C8',
565  'ScenToRun' : ['GenSimHLBeamSpotFull','DigiFullTrigger','RecoFullGlobal', 'HARVESTFullGlobal'],
566  },
567  '2026D43' : {
568  'Geom' : 'Extended2026D43',
569  'HLTmenu': '@fake2',
570  'GT' : 'auto:phase2_realistic_T14',
571  'Era' : 'Phase2C4',
572  'ScenToRun' : ['GenSimHLBeamSpotFull','DigiFullTrigger','RecoFullGlobal', 'HARVESTFullGlobal'],
573  },
574  '2026D44' : {
575  'Geom' : 'Extended2026D44',
576  'HLTmenu': '@fake2',
577  'GT' : 'auto:phase2_realistic_T14',
578  'Era' : 'Phase2C6',
579  'ScenToRun' : ['GenSimHLBeamSpotFull','DigiFullTrigger','RecoFullGlobal', 'HARVESTFullGlobal'],
580  },
581  '2026D45' : {
582  'Geom' : 'Extended2026D45',
583  'HLTmenu': '@fake2',
584  'GT' : 'auto:phase2_realistic_T15',
585  'Era' : 'Phase2C8',
586  'ScenToRun' : ['GenSimHLBeamSpotFull','DigiFullTrigger','RecoFullGlobal', 'HARVESTFullGlobal'],
587  },
588  '2026D46' : {
589  'Geom' : 'Extended2026D46',
590  'HLTmenu': '@fake2',
591  'GT' : 'auto:phase2_realistic_T15',
592  'Era' : 'Phase2C9',
593  'ScenToRun' : ['GenSimHLBeamSpotFull','DigiFullTrigger','RecoFullGlobal', 'HARVESTFullGlobal'],
594  },
595  '2026D47' : {
596  'Geom' : 'Extended2026D47',
597  'HLTmenu': '@fake2',
598  'GT' : 'auto:phase2_realistic_T15',
599  'Era' : 'Phase2C10',
600  'ScenToRun' : ['GenSimHLBeamSpotFull','DigiFullTrigger','RecoFullGlobal', 'HARVESTFullGlobal'],
601  },
602  '2026D48' : {
603  'Geom' : 'Extended2026D48',
604  'HLTmenu': '@fake2',
605  'GT' : 'auto:phase2_realistic_T15',
606  'Era' : 'Phase2C9',
607  'ScenToRun' : ['GenSimHLBeamSpotFull','DigiFullTrigger','RecoFullGlobal', 'HARVESTFullGlobal'],
608  },
609  '2026D49' : {
610  'Geom' : 'Extended2026D49',
611  'HLTmenu': '@fake2',
612  'GT' : 'auto:phase2_realistic_T15',
613  'Era' : 'Phase2C9',
614  'ScenToRun' : ['GenSimHLBeamSpotFull','DigiFullTrigger','RecoFullGlobal', 'HARVESTFullGlobal'],
615  },
616 }
617 
618 # standard PU sequences
619 for key in list(upgradeProperties[2026].keys()):
620  upgradeProperties[2026][key+'PU'] = deepcopy(upgradeProperties[2026][key])
621  upgradeProperties[2026][key+'PU']['ScenToRun'] = ['GenSimHLBeamSpotFull','DigiFullTriggerPU','RecoFullGlobalPU', 'HARVESTFullGlobalPU']
622 
623 # for relvals
624 defaultDataSets = {}
625 for year in upgradeKeys:
626  for key in upgradeKeys[year]:
627  if 'PU' in key: continue
628  defaultDataSets[key] = ''
629 
631 
633  def __init__(self, howMuch, dataset):
634  self.howMuch = howMuch
635  self.dataset = dataset
636 
637 upgradeFragments = OrderedDict([
638  ('FourMuPt_1_200_pythia8_cfi', UpgradeFragment(Kby(10,100),'FourMuPt1_200')),
639  ('SingleElectronPt10_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleElectronPt10')),
640  ('SingleElectronPt35_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleElectronPt35')),
641  ('SingleElectronPt1000_pythia8_cfi', UpgradeFragment(Kby(9,50),'SingleElectronPt1000')),
642  ('SingleGammaPt10_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleGammaPt10')),
643  ('SingleGammaPt35_pythia8_cfi', UpgradeFragment(Kby(9,50),'SingleGammaPt35')),
644  ('SingleMuPt1_pythia8_cfi', UpgradeFragment(Kby(25,100),'SingleMuPt1')),
645  ('SingleMuPt10_pythia8_cfi', UpgradeFragment(Kby(25,100),'SingleMuPt10')),
646  ('SingleMuPt100_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt100')),
647  ('SingleMuPt1000_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt1000')),
648  ('FourMuExtendedPt_1_200_pythia8_cfi', UpgradeFragment(Kby(10,100),'FourMuExtendedPt1_200')),
649  ('TenMuExtendedE_0_200_pythia8_cfi', UpgradeFragment(Kby(10,100),'TenMuExtendedE_0_200')),
650  ('DoubleElectronPt10Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleElectronPt10Extended')),
651  ('DoubleElectronPt35Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleElectronPt35Extended')),
652  ('DoubleElectronPt1000Extended_pythia8_cfi', UpgradeFragment(Kby(9,50),'SingleElectronPt1000Extended')),
653  ('DoubleGammaPt10Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleGammaPt10Extended')),
654  ('DoubleGammaPt35Extended_pythia8_cfi', UpgradeFragment(Kby(9,50),'SingleGammaPt35Extended')),
655  ('DoubleMuPt1Extended_pythia8_cfi', UpgradeFragment(Kby(25,100),'SingleMuPt1Extended')),
656  ('DoubleMuPt10Extended_pythia8_cfi', UpgradeFragment(Kby(25,100),'SingleMuPt10Extended')),
657  ('DoubleMuPt100Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt100Extended')),
658  ('DoubleMuPt1000Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt1000Extended')),
659  ('TenMuE_0_200_pythia8_cfi', UpgradeFragment(Kby(10,100),'TenMuE_0_200')),
660  ('SinglePiE50HCAL_pythia8_cfi', UpgradeFragment(Kby(50,500),'SinglePiE50HCAL')),
661  ('MinBias_13TeV_pythia8_TuneCUETP8M1_cfi', UpgradeFragment(Kby(90,100),'MinBias_13')),
662  ('TTbar_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'TTbar_13')),
663  ('ZEE_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'ZEE_13')),
664  ('QCD_Pt_600_800_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QCD_Pt_600_800_13')),
665  ('Wjet_Pt_80_120_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'Wjet_Pt_80_120_14TeV')),
666  ('Wjet_Pt_3000_3500_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'Wjet_Pt_3000_3500_14TeV')),
667  ('LM1_sfts_14TeV_cfi', UpgradeFragment(Kby(9,100),'LM1_sfts_14TeV')),
668  ('QCD_Pt_3000_3500_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QCD_Pt_3000_3500_14TeV')),
669  ('QCD_Pt_80_120_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'QCD_Pt_80_120_14TeV')),
670  ('H200ChargedTaus_Tauola_14TeV_cfi', UpgradeFragment(Kby(9,100),'Higgs200ChargedTaus_14TeV')),
671  ('JpsiMM_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(66,100),'JpsiMM_14TeV')),
672  ('TTbar_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'TTbar_14TeV')),
673  ('WE_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'WE_14TeV')),
674  ('ZTT_Tauola_All_hadronic_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'ZTT_14TeV')),
675  ('H130GGgluonfusion_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'H130GGgluonfusion_14TeV')),
676  ('PhotonJet_Pt_10_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'PhotonJets_Pt_10_14TeV')),
677  ('QQH1352T_Tauola_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'QQH1352T_Tauola_14TeV')),
678  ('MinBias_14TeV_pythia8_TuneCUETP8M1_cfi', UpgradeFragment(Kby(90,100),'MinBias_14TeV')),
679  ('WM_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'WM_14TeV')),
680  ('ZMM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(18,100),'ZMM_13')),
681  ('QCDForPF_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(50,100),'QCD_FlatPt_15_3000HS_14')),
682  ('DYToLL_M-50_14TeV_pythia8_cff', UpgradeFragment(Kby(9,100),'DYToLL_M_50_14TeV')),
683  ('DYToTauTau_M-50_14TeV_pythia8_tauola_cff', UpgradeFragment(Kby(9,100),'DYtoTauTau_M_50_14TeV')),
684  ('ZEE_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'ZEE_14')),
685  ('QCD_Pt_80_120_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'QCD_Pt_80_120_13')),
686  ('H125GGgluonfusion_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'H125GGgluonfusion_13')),
687  ('QCD_Pt-20toInf_MuEnrichedPt15_TuneCUETP8M1_14TeV_pythia8_cff', UpgradeFragment(Kby(9,100),'QCD_Pt-20toInf_MuEnrichedPt15_14TeV')),
688  ('ZMM_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(18,100),'ZMM_14')),
689  ('QCD_Pt-15To7000_TuneCUETP8M1_Flat_14TeV-pythia8_cff', UpgradeFragment(Kby(9,50),'QCD_Pt-15To7000_Flat_14TeV')),
690  ('H125GGgluonfusion_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'H125GGgluonfusion_14')),
691  ('QCD_Pt_600_800_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QCD_Pt_600_800_14')),
692  ('UndergroundCosmicSPLooseMu_cfi', UpgradeFragment(Kby(9,50),'CosmicsSPLoose')),
693  ('BeamHalo_13TeV_cfi', UpgradeFragment(Kby(9,50),'BeamHalo_13')),
694  ('H200ChargedTaus_Tauola_13TeV_cfi', UpgradeFragment(Kby(9,50),'Higgs200ChargedTaus_13')),
695  ('ADDMonoJet_13TeV_d3MD3_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ADDMonoJet_d3MD3_13')),
696  ('ZpMM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZpMM_13')),
697  ('QCD_Pt_3000_3500_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QCD_Pt_3000_3500_13')),
698  ('WpM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'WpM_13')),
699  ('SingleNuE10_cfi.py', UpgradeFragment(Kby(9,50),'NuGun')),
700  ('TTbarLepton_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'TTbarLepton_13')),
701  ('WE_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'WE_13')),
702  ('WM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'WM_13')),
703  ('ZTT_All_hadronic_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZTT_13')),
704  ('PhotonJet_Pt_10_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'PhotonJets_Pt_10_13')),
705  ('QQH1352T_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QQH1352T_13')),
706  ('Wjet_Pt_80_120_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'Wjet_Pt_80_120_13')),
707  ('Wjet_Pt_3000_3500_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'Wjet_Pt_3000_3500_13')),
708  ('SMS-T1tttt_mGl-1500_mLSP-100_13TeV-pythia8_cfi', UpgradeFragment(Kby(9,50),'SMS-T1tttt_mGl-1500_mLSP-100_13')),
709  ('QCDForPF_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(50,100),'QCD_FlatPt_15_3000HS_13')),
710  ('PYTHIA8_PhiToMuMu_TuneCUETP8M1_13TeV_cff', UpgradeFragment(Kby(9,50),'PhiToMuMu_13')),
711  ('RSKKGluon_m3000GeV_13TeV_TuneCUETP8M1_cff', UpgradeFragment(Kby(9,50),'RSKKGluon_m3000GeV_13')),
712  ('ZpMM_2250_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZpMM_2250_13')),
713  ('ZpEE_2250_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZpEE_2250_13')),
714  ('ZpTT_1500_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZpTT_1500_13')),
715  ('Upsilon1SToMuMu_forSTEAM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'Upsilon1SToMuMu_13')),
716  ('EtaBToJpsiJpsi_forSTEAM_TuneCUEP8M1_13TeV_cfi', UpgradeFragment(Kby(9,50),'EtaBToJpsiJpsi_13')),
717  ('JpsiMuMu_Pt-8_forSTEAM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(3100,100000),'JpsiMuMu_Pt-8')),
718  ('BuMixing_BMuonFilter_forSTEAM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(900,10000),'BuMixing_13')),
719  ('HSCPstop_M_200_TuneCUETP8M1_13TeV_pythia8_cff', UpgradeFragment(Kby(9,50),'HSCPstop_M_200_13')),
720  ('RSGravitonToGammaGamma_kMpl01_M_3000_TuneCUETP8M1_13TeV_pythia8_cfi', UpgradeFragment(Kby(9,50),'RSGravitonToGaGa_13')),
721  ('WprimeToENu_M-2000_TuneCUETP8M1_13TeV-pythia8_cff', UpgradeFragment(Kby(9,50),'WpToENu_M-2000_13')),
722  ('DisplacedSUSY_stopToBottom_M_300_1000mm_TuneCUETP8M1_13TeV_pythia8_cff', UpgradeFragment(Kby(9,50),'DisplacedSUSY_stopToBottom_M_300_1000mm_13')),
723  ('TenE_E_0_200_pythia8_cfi', UpgradeFragment(Kby(9,100),'TenE_0_200')),
724  ('FlatRandomPtAndDxyGunProducer_cfi', UpgradeFragment(Kby(9,100),'DisplacedMuonsDxy_0_500')),
725  ('TenTau_E_15_500_pythia8_cfi', UpgradeFragment(Kby(9,100),'TenTau_15_500')),
726  ('SinglePiPt25Eta1p7_2p7_cfi', UpgradeFragment(Kby(9,100),'SinglePiPt25Eta1p7_2p7')),
727  ('SingleMuPt15Eta1p7_2p7_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt15Eta1p7_2p7')),
728  ('SingleGammaPt25Eta1p7_2p7_cfi', UpgradeFragment(Kby(9,100),'SingleGammaPt25Eta1p7_2p7')),
729  ('SingleElectronPt15Eta1p7_2p7_cfi', UpgradeFragment(Kby(9,100),'SingleElectronPt15Eta1p7_2p7')),
730  ('ZTT_All_hadronic_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZTT_14')),
731  ('CloseByParticle_Photon_ERZRanges_cfi', UpgradeFragment(Kby(9,100),'CloseByParticleGun')),
732  ('CE_E_Front_300um_cfi', UpgradeFragment(Kby(9,100),'CloseByParticleGun_CE_E_Front_300um')),
733  ('CE_E_Front_200um_cfi', UpgradeFragment(Kby(9,100),'CloseByParticleGun_CE_E_Front_200um')),
734  ('CE_E_Front_120um_cfi', UpgradeFragment(Kby(9,100),'CloseByParticleGun_CE_E_Front_120um')),
735  ('CE_H_Fine_300um_cfi', UpgradeFragment(Kby(9,100),'CloseByParticleGun_CE_H_Fine_300um')),
736  ('CE_H_Fine_200um_cfi', UpgradeFragment(Kby(9,100),'CloseByParticleGun_CE_H_Fine_200um')),
737  ('CE_H_Fine_120um_cfi', UpgradeFragment(Kby(9,100),'CloseByParticleGun_CE_H_Fine_120um')),
738  ('CE_H_Coarse_Scint_cfi', UpgradeFragment(Kby(9,100),'CloseByParticleGun_CE_H_Coarse_Scint')),
739  ('CE_H_Coarse_300um_cfi', UpgradeFragment(Kby(9,100),'CloseByParticleGun_CE_H_Coarse_300um')),
740 ])
Definition: merge.py:1
def setup_(self, step, stepName, stepDict, k, properties)
bool any(const std::vector< T > &v, const T &what)
Definition: ECalSD.cc:40
def condition(self, fragment, stepList, key, hasHarvest)
def condition_(self, fragment, stepList, key, hasHarvest)
def setup_(self, step, stepName, stepDict, k, properties)
def setup_(self, step, stepName, stepDict, k, properties)
def setup_(self, step, stepName, stepDict, k, properties)
def condition(self, fragment, stepList, key, hasHarvest)
def setup_(self, step, stepName, stepDict, k, properties)
def condition_(self, fragment, stepList, key, hasHarvest)
def condition(self, fragment, stepList, key, hasHarvest)
def workflow(self, workflows, num, fragment, stepList, key, hasHarvest)
def setup_(self, step, stepName, stepDict, k, properties)
def setup_(self, step, stepName, stepDict, k, properties)
def condition(self, fragment, stepList, key, hasHarvest)
def setup_(self, step, stepName, stepDict, k, properties)
def setup_(self, step, stepName, stepDict, k, properties)
def setup_(self, step, stepName, stepDict, k, properties)
def setup_(self, step, stepName, stepDict, k, properties)
def condition(self, fragment, stepList, key, hasHarvest)
def condition_(self, fragment, stepList, key, hasHarvest)
def condition_(self, fragment, stepList, key, hasHarvest)
static std::string join(char **cmd)
Definition: RemoteFile.cc:17
def setup_(self, step, stepName, stepDict, k, properties)
def setup(self, stepDict, k, properties)
def condition(self, fragment, stepList, key, hasHarvest)
def condition(self, fragment, stepList, key, hasHarvest)
def condition_(self, fragment, stepList, key, hasHarvest)
def workflow_(self, workflows, num, fragment, stepList)
def setup_(self, step, stepName, stepDict, k, properties)
def condition(self, fragment, stepList, key, hasHarvest)
def condition(self, fragment, stepList, key, hasHarvest)
def condition_(self, fragment, stepList, key, hasHarvest)
def setup_(self, step, stepName, stepDict, k, properties)
def Kby(N, s)
Standard release validation samples ####.
Definition: MatrixUtil.py:224
def __init__(self, steps, PU, suffix, offset)
#define str(s)
def setup_(self, step, stepName, stepDict, k, properties)
def condition(self, fragment, stepList, key, hasHarvest)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run