CMS 3D CMS Logo

upgradeWorkflowComponents.py
Go to the documentation of this file.
1 from copy import copy, deepcopy
2 from collections import OrderedDict
3 import six
4 from .MatrixUtil import merge, Kby
5 import re
6 
7 # DON'T CHANGE THE ORDER, only append new keys. Otherwise the numbering for the runTheMatrix tests will change.
8 
9 upgradeKeys = {}
10 
11 upgradeKeys[2017] = [
12  '2017',
13  '2017PU',
14  '2017Design',
15  '2017DesignPU',
16  '2018',
17  '2018PU',
18  '2018Design',
19  '2018DesignPU',
20  '2021',
21  '2021PU',
22  '2021Design',
23  '2021DesignPU',
24  '2023',
25  '2023PU',
26  '2024',
27  '2024PU',
28 ]
29 
30 upgradeKeys[2026] = [
31  '2026D49',
32  '2026D49PU',
33  '2026D60',
34  '2026D60PU',
35  '2026D68',
36  '2026D68PU',
37  '2026D70',
38  '2026D70PU',
39  '2026D76',
40  '2026D76PU',
41  '2026D77',
42  '2026D77PU',
43  '2026D78',
44  '2026D78PU',
45  '2026D79',
46  '2026D79PU',
47  '2026D80',
48  '2026D80PU',
49  '2026D81',
50  '2026D81PU',
51  '2026D82',
52  '2026D82PU',
53  '2026D83',
54  '2026D83PU',
55 ]
56 
57 # pre-generation of WF numbers
58 numWFStart={
59  2017: 10000,
60  2026: 20000,
61 }
62 numWFSkip=200
63 # temporary measure to keep other WF numbers the same
64 numWFConflict = [[20000,23200],[23600,28200],[28600,31400],[31800,32200],[32600,34600],[50000,51000]]
65 numWFAll={
66  2017: [],
67  2026: []
68 }
69 
70 for year in upgradeKeys:
71  for i in range(0,len(upgradeKeys[year])):
72  numWFtmp = numWFStart[year] if i==0 else (numWFAll[year][i-1] + numWFSkip)
73  for conflict in numWFConflict:
74  if numWFtmp>=conflict[0] and numWFtmp<conflict[1]:
75  numWFtmp = conflict[1]
76  break
77  numWFAll[year].append(numWFtmp)
78 
79 # workflows for baseline and for variations
80 # setup() automatically loops over all steps and applies any customizations specified in setup_() -> called in relval_steps.py
81 # setupPU() and setupPU_() operate similarly -> called in relval_steps.py *after* merging PUDataSets w/ regular steps
82 # workflow() adds a concrete workflow to the list based on condition() -> called in relval_upgrade.py
83 # every special workflow gets its own derived class, which must then be added to the global dict upgradeWFs
84 preventReuseKeyword = 'NOREUSE'
86  def __init__(self,steps,PU,suffix,offset):
87  self.steps = steps
88  self.PU = PU
89  self.allowReuse = True
90 
91  # ensure all PU steps are in normal step list
92  for step in self.PU:
93  if not step in self.steps:
94  self.steps.append(step)
95 
96  self.suffix = suffix
97  if len(self.suffix)>0 and self.suffix[0]!='_': self.suffix = '_'+self.suffix
98  self.offset = offset
99  if self.offset < 0.0 or self.offset > 1.0:
100  raise ValueError("Special workflow offset must be between 0.0 and 1.0")
101  def getStepName(self, step, extra=""):
102  stepName = step + self.suffix + extra
103  return stepName
104  def getStepNamePU(self, step, extra=""):
105  stepNamePU = step + 'PU' + self.suffix + extra
106  return stepNamePU
107  def init(self, stepDict):
108  for step in self.steps:
109  stepDict[self.getStepName(step)] = {}
110  if not self.allowReuse: stepDict[self.getStepName(step,preventReuseKeyword)] = {}
111  for step in self.PU:
112  stepDict[self.getStepNamePU(step)] = {}
113  if not self.allowReuse: stepDict[self.getStepNamePU(step,preventReuseKeyword)] = {}
114  def setup(self, stepDict, k, properties):
115  for step in self.steps:
116  self.setup_(step, self.getStepName(step), stepDict, k, properties)
117  if not self.allowReuse: self.preventReuse(self.getStepName(step,preventReuseKeyword), stepDict, k)
118  def setupPU(self, stepDict, k, properties):
119  for step in self.PU:
120  self.setupPU_(step, self.getStepNamePU(step), stepDict, k, properties)
121  if not self.allowReuse: self.preventReuse(self.getStepNamePU(step,preventReuseKeyword), stepDict, k)
122  def setup_(self, step, stepName, stepDict, k, properties):
123  pass
124  def setupPU_(self, step, stepName, stepDict, k, properties):
125  pass
126  def workflow(self, workflows, num, fragment, stepList, key, hasHarvest):
127  if self.condition(fragment, stepList, key, hasHarvest):
128  self.workflow_(workflows, num, fragment, stepList, key)
129  def workflow_(self, workflows, num, fragment, stepList, key):
130  fragmentTmp = [fragment, key]
131  if len(self.suffix)>0: fragmentTmp.append(self.suffix)
132  workflows[num+self.offset] = [ fragmentTmp, stepList ]
133  def condition(self, fragment, stepList, key, hasHarvest):
134  return False
135  def preventReuse(self, stepName, stepDict, k):
136  if "Sim" in stepName:
137  stepDict[stepName][k] = None
138 upgradeWFs = OrderedDict()
139 
141  def setup_(self, step, stepName, stepDict, k, properties):
142  cust=properties.get('Custom', None)
143  era=properties.get('Era', None)
144  modifier=properties.get('ProcessModifier',None)
145  if cust is not None: stepDict[stepName][k]['--customise']=cust
146  if era is not None: stepDict[stepName][k]['--era']=era
147  if modifier is not None: stepDict[stepName][k]['--procModifier']=modifier
148  def condition(self, fragment, stepList, key, hasHarvest):
149  return True
150 upgradeWFs['baseline'] = UpgradeWorkflow_baseline(
151  steps = [
152  'GenSim',
153  'GenSimHLBeamSpot',
154  'GenSimHLBeamSpot14',
155  'Digi',
156  'DigiTrigger',
157  'RecoLocal',
158  'Reco',
159  'RecoFakeHLT',
160  'RecoGlobal',
161  'HARVEST',
162  'HARVESTFakeHLT',
163  'FastSim',
164  'HARVESTFast',
165  'HARVESTGlobal',
166  'ALCA',
167  'Nano',
168  'MiniAOD',
169  ],
170  PU = [
171  'DigiTrigger',
172  'RecoLocal',
173  'RecoGlobal',
174  'Digi',
175  'Reco',
176  'RecoFakeHLT',
177  'HARVEST',
178  'HARVESTFakeHLT',
179  'HARVESTGlobal',
180  'MiniAOD',
181  'Nano',
182  ],
183  suffix = '',
184  offset = 0.0,
185 )
186 
187 # some commonalities among tracking WFs
189  def condition(self, fragment, stepList, key, hasHarvest):
190  result = (fragment=="TTbar_13" or fragment=="TTbar_14TeV") and not 'PU' in key and hasHarvest and self.condition_(fragment, stepList, key, hasHarvest)
191  if result:
192  # skip ALCA and Nano
193  skipList = [s for s in stepList if (("ALCA" in s) or ("Nano" in s))]
194  for skip in skipList:
195  stepList.remove(skip)
196  return result
197  def condition_(self, fragment, stepList, key, hasHarvest):
198  return True
199 
201  def setup_(self, step, stepName, stepDict, k, properties):
202  if 'Reco' in step: stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
203  elif 'HARVEST' in step: stepDict[stepName][k] = merge([{'-s': 'HARVESTING:@trackingOnlyValidation+@trackingOnlyDQM'}, stepDict[step][k]])
204 upgradeWFs['trackingOnly'] = UpgradeWorkflow_trackingOnly(
205  steps = [
206  'Reco',
207  'HARVEST',
208  'RecoGlobal',
209  'HARVESTGlobal',
210  ],
211  PU = [],
212  suffix = '_trackingOnly',
213  offset = 0.1,
214 )
215 upgradeWFs['trackingOnly'].step3 = {
216  '-s': 'RAW2DIGI,RECO:reconstruction_trackingOnly,VALIDATION:@trackingOnlyValidation,DQM:@trackingOnlyDQM',
217  '--datatier':'GEN-SIM-RECO,DQMIO',
218  '--eventcontent':'RECOSIM,DQM',
219 }
220 # used outside of upgrade WFs
221 step3_trackingOnly = upgradeWFs['trackingOnly'].step3
222 
224  def setup_(self, step, stepName, stepDict, k, properties):
225  if 'Reco' in step and stepDict[step][k]['--era']=='Run2_2017':
226  stepDict[stepName][k] = merge([{'--era': 'Run2_2017_trackingRun2'}, stepDict[step][k]])
227  def condition_(self, fragment, stepList, key, hasHarvest):
228  return '2017' in key
229 upgradeWFs['trackingRun2'] = UpgradeWorkflow_trackingRun2(
230  steps = [
231  'Reco',
232  ],
233  PU = [],
234  suffix = '_trackingRun2',
235  offset = 0.2,
236 )
237 
239  def setup_(self, step, stepName, stepDict, k, properties):
240  if 'Reco' in step and stepDict[step][k]['--era']=='Run2_2017':
241  stepDict[stepName][k] = merge([{'--era': 'Run2_2017_trackingRun2'}, self.step3, stepDict[step][k]])
242  elif 'HARVEST' in step: stepDict[stepName][k] = merge([{'-s': 'HARVESTING:@trackingOnlyValidation+@trackingOnlyDQM'}, stepDict[step][k]])
243  def condition_(self, fragment, stepList, key, hasHarvest):
244  return '2017' in key
245 upgradeWFs['trackingOnlyRun2'] = UpgradeWorkflow_trackingOnlyRun2(
246  steps = [
247  'Reco',
248  'HARVEST',
249  ],
250  PU = [],
251  suffix = '_trackingOnlyRun2',
252  offset = 0.3,
253 )
254 upgradeWFs['trackingOnlyRun2'].step3 = upgradeWFs['trackingOnly'].step3
255 
257  def setup_(self, step, stepName, stepDict, k, properties):
258  if 'Reco' in step and stepDict[step][k]['--era']=='Run2_2017':
259  stepDict[stepName][k] = merge([{'--era': 'Run2_2017_trackingLowPU'}, stepDict[step][k]])
260  def condition_(self, fragment, stepList, key, hasHarvest):
261  return '2017' in key
262 upgradeWFs['trackingLowPU'] = UpgradeWorkflow_trackingLowPU(
263  steps = [
264  'Reco',
265  ],
266  PU = [],
267  suffix = '_trackingLowPU',
268  offset = 0.4,
269 )
270 
272  def setup_(self, step, stepName, stepDict, k, properties):
273  if 'Reco' in step: stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
274  elif 'HARVEST' in step: stepDict[stepName][k] = merge([{'-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'}, stepDict[step][k]])
275  def condition_(self, fragment, stepList, key, hasHarvest):
276  return '2017' in key or '2018' in key or '2021' in key
277 upgradeWFs['pixelTrackingOnly'] = UpgradeWorkflow_pixelTrackingOnly(
278  steps = [
279  'Reco',
280  'HARVEST',
281  'RecoGlobal',
282  'HARVESTGlobal',
283  ],
284  PU = [],
285  suffix = '_pixelTrackingOnly',
286  offset = 0.5,
287 )
288 upgradeWFs['pixelTrackingOnly'].step3 = {
289  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
290  '--datatier': 'GEN-SIM-RECO,DQMIO',
291  '--eventcontent': 'RECOSIM,DQM',
292 }
293 
295  def setup_(self, step, stepName, stepDict, k, properties):
296  if 'Reco' in step: stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
297  def condition_(self, fragment, stepList, key, hasHarvest):
298  return '2017' in key or '2021' in key
299 upgradeWFs['trackingMkFit'] = UpgradeWorkflow_trackingMkFit(
300  steps = [
301  'Reco',
302  'RecoGlobal',
303  ],
304  PU = [],
305  suffix = '_trackingMkFit',
306  offset = 0.7,
307 )
308 upgradeWFs['trackingMkFit'].step3 = {
309  '--procModifiers': 'trackingMkFit'
310 }
311 
312 #DeepCore seeding for JetCore iteration workflow
314  def setup_(self, step, stepName, stepDict, k, properties):
315  if 'Reco' in step or 'HARVEST' in step: stepDict[stepName][k] = merge([{'--procModifiers': 'seedingDeepCore'}, stepDict[step][k]])
316  def condition(self, fragment, stepList, key, hasHarvest):
317  result = (fragment=="QCD_Pt_1800_2400_14" or fragment=="TTbar_14TeV" ) and ('2021' in key or '2024' in key) and hasHarvest
318  if result:
319  # skip ALCA and Nano
320  skipList = [s for s in stepList if (("ALCA" in s) or ("Nano" in s))]
321  for skip in skipList:
322  stepList.remove(skip)
323  return result
324 upgradeWFs['seedingDeepCore'] = UpgradeWorkflow_seedingDeepCore(
325  steps = [
326  'Reco',
327  'HARVEST',
328  'RecoGlobal',
329  'HARVESTGlobal',
330  ],
331  PU = [],
332  suffix = '_seedingDeepCore',
333  offset = 0.17,
334 )
335 
336 # Vector Hits workflows
338  def setup_(self, step, stepName, stepDict, k, properties):
339  stepDict[stepName][k] = merge([{'--procModifiers': 'vectorHits'}, stepDict[step][k]])
340  def condition(self, fragment, stepList, key, hasHarvest):
341  return fragment=="TTbar_14TeV" and '2026' in key
342 upgradeWFs['vectorHits'] = UpgradeWorkflow_vectorHits(
343  steps = [
344  'RecoGlobal',
345  ],
346  PU = [
347  'RecoGlobal',
348  ],
349  suffix = '_vectorHits',
350  offset = 0.9,
351 )
352 
353 
354 # Track DNN workflows
356  def setup_(self, step, stepName, stepDict, k, properties):
357  stepDict[stepName][k] = merge([{'--procModifiers': 'trackdnn'}, stepDict[step][k]])
358 
359  def condition(self, fragment, stepList, key, hasHarvest):
360  return fragment=="TTbar_14TeV" and '2021' in key
361 upgradeWFs['trackdnn'] = UpgradeWorkflow_trackdnn(
362  steps = [
363  'Reco',
364  ],
365  PU = [
366  'Reco',
367  ],
368  suffix = '_trackdnn',
369  offset = 0.91,
370 )
371 
372 
373 # MLPF workflows
375  def setup_(self, step, stepName, stepDict, k, properties):
376  if 'Reco' in step:
377  stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
378  def condition(self, fragment, stepList, key, hasHarvest):
379  return fragment=="TTbar_14TeV" and '2021' in key
380 
381 upgradeWFs['mlpf'] = UpgradeWorkflow_mlpf(
382  steps = [
383  'Reco',
384  ],
385  PU = [
386  'Reco',
387  ],
388  suffix = '_mlpf',
389  offset = 0.13,
390 )
391 upgradeWFs['mlpf'].step3 = {
392  '--datatier': 'GEN-SIM-RECO,RECOSIM,MINIAODSIM,DQMIO',
393  '--eventcontent': 'FEVTDEBUGHLT,RECOSIM,MINIAODSIM,DQM',
394  '--procModifiers': 'mlpf'
395 }
396 
397 # Patatrack workflows:
398 # - 2018 conditions, TTbar
399 # - 2018 conditions, Z->mumu,
400 # - 2021 conditions, TTbar
401 # - 2021 conditions, Z->mumu,
403  def __init__(self, reco, harvest, **kwargs):
404  # adapt the parameters for the UpgradeWorkflow init method
405  super(PatatrackWorkflow, self).__init__(
406  steps = [
407  'Reco',
408  'HARVEST',
409  'RecoFakeHLT',
410  'HARVESTFakeHLT',
411  'RecoGlobal',
412  'HARVESTGlobal',
413  ],
414  PU = [],
415  **kwargs)
416  self.__reco = reco
417  self.__reco.update({
418  '--datatier': 'GEN-SIM-RECO,DQMIO',
419  '--eventcontent': 'RECOSIM,DQM'
420  })
421  self.__harvest = harvest
422 
423  def condition(self, fragment, stepList, key, hasHarvest):
424  # select only a subset of the workflows
425  selected = [
426  ('2018' in key and fragment == "TTbar_13"),
427  ('2021' in key and fragment == "TTbar_14TeV"),
428  ('2018' in key and fragment == "ZMM_13"),
429  ('2021' in key and fragment == "ZMM_14"),
430  ]
431  result = any(selected) and hasHarvest
432 
433  # skip ALCA and Nano steps
434  for skip in copy(stepList):
435  if ("ALCA" in skip) or ("Nano" in skip):
436  stepList.remove(skip)
437  return result
438 
439  def setup_(self, step, stepName, stepDict, k, properties):
440  if 'Reco' in step:
441  stepDict[stepName][k] = merge([self.__reco, stepDict[step][k]])
442  elif 'HARVEST' in step:
443  stepDict[stepName][k] = merge([self.__harvest, stepDict[step][k]])
444 
445 
446 upgradeWFs['PatatrackPixelOnlyCPU'] = PatatrackWorkflow(
447  reco = {
448  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
449  '--procModifiers': 'pixelNtupletFit'
450  },
451  harvest = {
452  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'
453  },
454  suffix = 'Patatrack_PixelOnlyCPU',
455  offset = 0.501,
456 )
457 
458 upgradeWFs['PatatrackPixelOnlyGPU'] = PatatrackWorkflow(
459  reco = {
460  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
461  '--procModifiers': 'pixelNtupletFit,gpu'
462  },
463  harvest = {
464  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'
465  },
466  suffix = 'Patatrack_PixelOnlyGPU',
467  offset = 0.502,
468 )
469 
470 upgradeWFs['PatatrackPixelOnlyTripletsCPU'] = PatatrackWorkflow(
471  reco = {
472  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
473  '--procModifiers': 'pixelNtupletFit',
474  '--customise' : 'RecoPixelVertexing/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets'
475  },
476  harvest = {
477  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'
478  },
479  suffix = 'Patatrack_PixelOnlyTripletsCPU',
480  offset = 0.505,
481 )
482 
483 upgradeWFs['PatatrackPixelOnlyTripletsGPU'] = PatatrackWorkflow(
484  reco = {
485  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
486  '--procModifiers': 'pixelNtupletFit,gpu',
487  '--customise': 'RecoPixelVertexing/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets'
488  },
489  harvest = {
490  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'
491  },
492  suffix = 'Patatrack_PixelOnlyTripletsGPU',
493  offset = 0.506,
494 )
495 
496 upgradeWFs['PatatrackECALOnlyCPU'] = PatatrackWorkflow(
497  reco = {
498  '-s': 'RAW2DIGI:RawToDigi_ecalOnly,RECO:reconstruction_ecalOnly,VALIDATION:@ecalOnlyValidation,DQM:@ecalOnly',
499  },
500  harvest = {
501  '-s': 'HARVESTING:@ecalOnlyValidation+@ecal'
502  },
503  suffix = 'Patatrack_ECALOnlyCPU',
504  offset = 0.511,
505 )
506 
507 upgradeWFs['PatatrackECALOnlyGPU'] = PatatrackWorkflow(
508  reco = {
509  '-s': 'RAW2DIGI:RawToDigi_ecalOnly,RECO:reconstruction_ecalOnly,VALIDATION:@ecalOnlyValidation,DQM:@ecalOnly',
510  '--procModifiers': 'gpu'
511  },
512  harvest = {
513  '-s': 'HARVESTING:@ecalOnlyValidation+@ecal'
514  },
515  suffix = 'Patatrack_ECALOnlyGPU',
516  offset = 0.512,
517 )
518 
519 upgradeWFs['PatatrackHCALOnlyCPU'] = PatatrackWorkflow(
520  reco = {
521  '-s': 'RAW2DIGI:RawToDigi_hcalOnly,RECO:reconstruction_hcalOnly,VALIDATION:@hcalOnlyValidation,DQM:@hcalOnly+@hcal2Only',
522  },
523  harvest = {
524  '-s': 'HARVESTING:@hcalOnlyValidation+@hcalOnly+@hcal2Only'
525  },
526  suffix = 'Patatrack_HCALOnlyCPU',
527  offset = 0.521,
528 )
529 
530 upgradeWFs['PatatrackHCALOnlyGPU'] = PatatrackWorkflow(
531  reco = {
532  '-s': 'RAW2DIGI:RawToDigi_hcalOnly,RECO:reconstruction_hcalOnly,VALIDATION:@hcalOnlyValidation,DQM:@hcalOnly+@hcal2Only',
533  '--procModifiers': 'gpu'
534  },
535  harvest = {
536  '-s': 'HARVESTING:@hcalOnlyValidation+@hcalOnly+@hcal2Only'
537  },
538  suffix = 'Patatrack_HCALOnlyGPU',
539  offset = 0.522,
540 )
541 
542 # end of Patatrack workflows
543 
545  def setup_(self, step, stepName, stepDict, k, properties):
546  if 'Digi' in step and 'Trigger' not in step:
547  stepDict[stepName][k] = merge([{'-s': 'DIGI,L1,DIGI2RAW,HLT:@relval2021', '--datatier':'GEN-SIM-DIGI-RAW', '--eventcontent':'RAWSIM'}, stepDict[step][k]])
548  elif 'DigiTrigger' in step: # for Phase-2
549  stepDict[stepName][k] = merge([{'-s': 'DIGI,L1TrackTrigger,L1,DIGI2RAW,HLT:@fake2'}, stepDict[step][k]])
550  elif 'Reco' in step:
551  stepDict[stepName][k] = merge([{'-s': 'RAW2DIGI,L1Reco,RECO,RECOSIM', '--datatier':'AODSIM', '--eventcontent':'AODSIM'}, stepDict[step][k]])
552  elif 'MiniAOD' in step:
553  # the separate miniAOD step is used here
554  stepDict[stepName][k] = deepcopy(stepDict[step][k])
555  if 'ALCA' in step or 'HARVEST' in step:
556  # remove step
557  stepDict[stepName][k] = None
558  if 'Nano' in step:
559  stepDict[stepName][k] = merge([{'--filein':'file:step4.root'}, stepDict[step][k]])
560  def condition(self, fragment, stepList, key, hasHarvest):
561  return fragment=="TTbar_14TeV" and ('2026' in key or '2021' in key)
562 upgradeWFs['ProdLike'] = UpgradeWorkflow_ProdLike(
563  steps = [
564  'Digi',
565  'DigiTrigger',
566  'Reco',
567  'RecoGlobal',
568  'HARVEST',
569  'HARVESTGlobal',
570  'MiniAOD',
571  'ALCA',
572  'Nano',
573  ],
574  PU = [
575  'Digi',
576  'DigiTrigger',
577  'Reco',
578  'RecoGlobal',
579  'HARVEST',
580  'HARVESTGlobal',
581  'MiniAOD',
582  'ALCA',
583  'Nano',
584  ],
585  suffix = '_ProdLike',
586  offset = 0.21,
587 )
588 
590  def setup_(self, step, stepName, stepDict, k, properties):
591  if 'GenSim' in step:
592  custNew = "SimG4Core/Application/NeutronBGforMuonsXS_cff.customise"
593  else:
594  custNew = "SLHCUpgradeSimulations/Configuration/customise_mixing.customise_Mix_LongLived_Neutrons"
595  stepDict[stepName][k] = deepcopy(stepDict[step][k])
596  if '--customise' in stepDict[stepName][k].keys():
597  stepDict[stepName][k]['--customise'] += ","+custNew
598  else:
599  stepDict[stepName][k]['--customise'] = custNew
600  def condition(self, fragment, stepList, key, hasHarvest):
601  return any(fragment==nfrag for nfrag in self.neutronFrags) and any(nkey in key for nkey in self.neutronKeys)
602 upgradeWFs['Neutron'] = UpgradeWorkflow_Neutron(
603  steps = [
604  'GenSim',
605  'GenSimHLBeamSpot',
606  'GenSimHLBeamSpot14',
607  'Digi',
608  'DigiTrigger',
609  ],
610  PU = [
611  'Digi',
612  'DigiTrigger',
613  ],
614  suffix = '_Neutron',
615  offset = 0.12,
616 )
617 # add some extra info
618 upgradeWFs['Neutron'].neutronKeys = [x for x in upgradeKeys[2026] if 'PU' not in x]
619 upgradeWFs['Neutron'].neutronFrags = ['ZMM_14','MinBias_14TeV']
620 
622  def setup_(self, step, stepName, stepDict, k, properties):
623  stepDict[stepName][k] = merge([{'--procModifiers': 'run2_HECollapse_2018'}, stepDict[step][k]])
624  def condition(self, fragment, stepList, key, hasHarvest):
625  return fragment=="TTbar_13" and '2018' in key
626 upgradeWFs['heCollapse'] = UpgradeWorkflow_heCollapse(
627  steps = [
628  'GenSim',
629  'Digi',
630  'Reco',
631  'HARVEST',
632  'ALCA',
633  ],
634  PU = [
635  'Digi',
636  'Reco',
637  'HARVEST',
638  ],
639  suffix = '_heCollapse',
640  offset = 0.6,
641 )
642 
644  def setup_(self, step, stepName, stepDict, k, properties):
645  # temporarily remove trigger & downstream steps
646  mods = {'--era': stepDict[step][k]['--era']+',phase2_ecal_devel'}
647  if 'Digi' in step:
648  mods['-s'] = 'DIGI:pdigi_valid'
649  stepDict[stepName][k] = merge([mods, stepDict[step][k]])
650  def condition(self, fragment, stepList, key, hasHarvest):
651  return fragment=="TTbar_14TeV" and '2026' in key
652 upgradeWFs['ecalDevel'] = UpgradeWorkflow_ecalDevel(
653  steps = [
654  'DigiTrigger',
655  'RecoGlobal',
656  'HARVESTGlobal',
657  ],
658  PU = [
659  'DigiTrigger',
660  'RecoGlobal',
661  'HARVESTGlobal',
662  ],
663  suffix = '_ecalDevel',
664  offset = 0.61,
665 )
666 
668  def setup_(self, step, stepName, stepDict, k, properties):
669  myGT=stepDict[step][k]['--conditions']
670  myGT+="_0T"
671  stepDict[stepName][k] = merge([{'-n':'1','--magField':'0T','--conditions':myGT}, stepDict[step][k]])
672  def condition(self, fragment, stepList, key, hasHarvest):
673  return (fragment=="TTbar_13" or fragment=="TTbar_14TeV") and ('2017' in key or '2018' in key or '2021' in key)
674 upgradeWFs['0T'] = UpgradeWorkflow_0T(
675  steps = [
676  'GenSim',
677  'Digi',
678  'Reco',
679  'HARVEST',
680  'ALCA',
681  ],
682  PU = [
683  'Digi',
684  'Reco',
685  'HARVEST',
686  ],
687  suffix = '_0T',
688  offset = 0.24,
689 )
690 
692  def setup_(self, step, stepName, stepDict, k, properties):
693  if 'Reco' in step and 'Run2_2018' in stepDict[step][k]['--era']:
694  stepDict[stepName][k] = merge([{'--era': 'Run2_2018,bParking'}, stepDict[step][k]])
695  def condition(self, fragment, stepList, key, hasHarvest):
696  return fragment=="TTbar_13" and '2018' in key
697 upgradeWFs['ParkingBPH'] = UpgradeWorkflow_ParkingBPH(
698  steps = [
699  'Reco',
700  ],
701  PU = [],
702  suffix = '_ParkingBPH',
703  offset = 0.8,
704 )
705 
707  def setup_(self, step, stepName, stepDict, k, properties):
708  if 'Nano' in step:
709  stepDict[stepName][k] = merge([{'--customise': 'PhysicsTools/NanoAOD/custom_jme_cff.PrepJMECustomNanoAOD_MC'}, stepDict[step][k]])
710  def condition(self, fragment, stepList, key, hasHarvest):
711  return fragment=="TTbar_13" and ('2017' in key or '2018' in key)
712 upgradeWFs['JMENano'] = UpgradeWorkflow_JMENano(
713  steps = [
714  'Nano',
715  ],
716  PU = [],
717  suffix = '_JMENano',
718  offset = 0.15,
719 )
720 
721 
722 # common operations for aging workflows
724  def setup_(self, step, stepName, stepDict, k, properties):
725  if 'Digi' in step or 'Reco' in step:
726  stepDict[stepName][k] = merge([{'--customise': 'SLHCUpgradeSimulations/Configuration/aging.customise_aging_'+self.lumi}, stepDict[step][k]])
727  def condition(self, fragment, stepList, key, hasHarvest):
728  return fragment=="TTbar_14TeV" and '2026' in key
729 # define several of them
730 upgradeWFs['Aging1000'] = UpgradeWorkflowAging(
731  steps = [
732  'Digi',
733  'DigiTrigger',
734  'RecoLocal',
735  'Reco',
736  'RecoGlobal',
737  ],
738  PU = [
739  'Digi',
740  'DigiTrigger',
741  'RecoLocal',
742  'Reco',
743  'RecoGlobal',
744  ],
745  suffix = 'Aging1000',
746  offset = 0.101,
747 )
748 upgradeWFs['Aging1000'].lumi = '1000'
749 upgradeWFs['Aging3000'] = deepcopy(upgradeWFs['Aging1000'])
750 upgradeWFs['Aging3000'].suffix = 'Aging3000'
751 upgradeWFs['Aging3000'].offset = 0.103
752 upgradeWFs['Aging3000'].lumi = '3000'
753 
754 # Specifying explicitly the --filein is not nice but that was the
755 # easiest way to "skip" the output of step2 (=premixing stage1) for
756 # filein (as it goes to pileup_input). It works (a bit accidentally
757 # though) also for "-i all" because in that case the --filein for DAS
758 # input is after this one in the list of command line arguments to
759 # cmsDriver, and gets then used in practice.
760 digiPremixLocalPileup = {
761  "--filein": "file:step1.root",
762  "--pileup_input": "file:step2.root"
763 }
764 
765 # for premix
767  def setup_(self, step, stepName, stepDict, k, properties):
768  # just copy steps
769  stepDict[stepName][k] = merge([stepDict[step][k]])
770  def setupPU_(self, step, stepName, stepDict, k, properties):
771  # setup for stage 1
772  if "GenSim" in stepName:
773  stepNamePmx = stepName.replace('GenSim','Premix')
774  if not stepNamePmx in stepDict: stepDict[stepNamePmx] = {}
775  stepDict[stepNamePmx][k] = merge([
776  {
777  '-s': 'GEN,SIM,DIGI:pdigi_valid',
778  '--datatier': 'PREMIX',
779  '--eventcontent': 'PREMIX',
780  '--procModifiers': 'premix_stage1'
781  },
782  stepDict[stepName][k]
783  ])
784  # setup for stage 2
785  elif "Digi" in step or "Reco" in step:
786  # go back to non-PU step version
787  d = merge([stepDict[self.getStepName(step)][k]])
788  if d is None: return
789  if "Digi" in step:
790  tmpsteps = []
791  for s in d["-s"].split(","):
792  if s == "DIGI" or "DIGI:" in s:
793  tmpsteps.extend([s, "DATAMIX"])
794  else:
795  tmpsteps.append(s)
796  d = merge([{"-s" : ",".join(tmpsteps),
797  "--datamix" : "PreMix",
798  "--procModifiers": "premix_stage2"},
799  d])
800  # for combined stage1+stage2
801  if "_PMXS1S2" in self.suffix:
802  d = merge([digiPremixLocalPileup, d])
803  elif "Reco" in step:
804  if "--procModifiers" in d:
805  d["--procModifiers"] += ",premix_stage2"
806  else:
807  d["--procModifiers"] = "premix_stage2"
808  stepDict[stepName][k] = d
809  # Increase the input file step number by one for Nano in combined stage1+stage2
810  elif "Nano" in step:
811  # go back to non-PU step version
812  d = merge([stepDict[self.getStepName(step)][k]])
813  if "--filein" in d:
814  filein = d["--filein"]
815  m = re.search("step(?P<ind>\d+)_", filein)
816  if m:
817  d["--filein"] = filein.replace(m.group(), "step%d_"%(int(m.group("ind"))+1))
818  stepDict[stepName][k] = d
819  # run2/3 WFs use Nano (not NanoPU) in PU WF
820  stepDict[self.getStepName(step)][k] = merge([d])
821  def condition(self, fragment, stepList, key, hasHarvest):
822  if not 'PU' in key:
823  return False
824  if not any(y in key for y in ['2021', '2023', '2024', '2026']):
825  return False
826  if self.suffix.endswith("S1"):
827  return "NuGun" in fragment
828  return True
829  def workflow_(self, workflows, num, fragment, stepList, key):
830  fragmentTmp = fragment
831  if self.suffix.endswith("S1"):
832  fragmentTmp = 'PREMIXUP' + key[2:].replace("PU", "").replace("Design", "") + '_PU25'
833  super(UpgradeWorkflowPremix,self).workflow_(workflows, num, fragmentTmp, stepList, key)
834 # Premix stage1
835 upgradeWFs['PMXS1'] = UpgradeWorkflowPremix(
836  steps = [
837  ],
838  PU = [
839  'GenSim',
840  'GenSimHLBeamSpot',
841  'GenSimHLBeamSpot14',
842  ],
843  suffix = '_PMXS1',
844  offset = 0.97,
845 )
846 # Premix stage2
847 upgradeWFs['PMXS2'] = UpgradeWorkflowPremix(
848  steps = [],
849  PU = [
850  'Digi',
851  'DigiTrigger',
852  'RecoLocal',
853  'Reco',
854  'RecoGlobal',
855  'Nano',
856  ],
857  suffix = '_PMXS2',
858  offset = 0.98,
859 )
860 # Premix combined stage1+stage2
861 upgradeWFs['PMXS1S2'] = UpgradeWorkflowPremix(
862  steps = [],
863  PU = [
864  'GenSim',
865  'GenSimHLBeamSpot',
866  'GenSimHLBeamSpot14',
867  'Digi',
868  'DigiTrigger',
869  'RecoLocal',
870  'Reco',
871  'RecoGlobal',
872  'Nano',
873  ],
874  suffix = '_PMXS1S2',
875  offset = 0.99,
876 )
877 # Alternative version of above w/ less PU for PR tests
879  def setupPU_(self, step, stepName, stepDict, k, properties):
880  # adjust first, so it gets copied into new Premix step
881  if '--pileup' in stepDict[stepName][k]:
882  stepDict[stepName][k]['--pileup'] = 'AVE_50_BX_25ns_m3p3'
883  super(UpgradeWorkflowAdjustPU,self).setupPU_(step, stepName, stepDict, k, properties)
884  def condition(self, fragment, stepList, key, hasHarvest):
885  # restrict to phase2
886  return super(UpgradeWorkflowAdjustPU,self).condition(fragment, stepList, key, hasHarvest) and '2026' in key
887 upgradeWFs['PMXS1S2PR'] = UpgradeWorkflowAdjustPU(
888  steps = [],
889  PU = [
890  'GenSim',
891  'GenSimHLBeamSpot',
892  'GenSimHLBeamSpot14',
893  'Digi',
894  'DigiTrigger',
895  'RecoLocal',
896  'Reco',
897  'RecoGlobal',
898  'Nano',
899  'HARVEST',
900  'HARVESTGlobal',
901  ],
902  suffix = '_PMXS1S2PR',
903  offset = 0.999,
904 )
905 
907  def setup_(self, step, stepName, stepDict, k, properties):
908  # copy steps, then apply specializations
909  UpgradeWorkflowPremix.setup_(self, step, stepName, stepDict, k, properties)
910  UpgradeWorkflow_ProdLike.setup_(self, step, stepName, stepDict, k, properties)
911  #
912  if 'Digi' in step:
913  d = merge([stepDict[self.getStepName(step)][k]])
914  tmpsteps = []
915  for s in d["-s"].split(","):
916  if "DIGI:pdigi_valid" in s:
917  tmpsteps.append("DIGI")
918  else:
919  tmpsteps.append(s)
920  d = merge([{"-s" : ",".join(tmpsteps)},d])
921  stepDict[stepName][k] = d
922  def condition(self, fragment, stepList, key, hasHarvest):
923  # use both conditions
924  return UpgradeWorkflowPremix.condition(self, fragment, stepList, key, hasHarvest) and UpgradeWorkflow_ProdLike.condition(self, fragment, stepList, key, hasHarvest)
925 # premix stage2
926 upgradeWFs['PMXS2ProdLike'] = UpgradeWorkflowPremixProdLike(
927  steps = [],
928  PU = [
929  'Digi',
930  'DigiTrigger',
931  'RecoLocal',
932  'Reco',
933  'RecoGlobal',
934  'Nano',
935  'HARVEST',
936  'HARVESTGlobal',
937  'MiniAOD',
938  'ALCA',
939  ],
940  suffix = '_PMXS2ProdLike',
941  offset = 0.9821,
942 )
943 # premix combined stage1+stage2
944 upgradeWFs['PMXS1S2ProdLike'] = UpgradeWorkflowPremixProdLike(
945  steps = [],
946  PU = [
947  'GenSim',
948  'GenSimHLBeamSpot',
949  'GenSimHLBeamSpot14',
950  'Digi',
951  'DigiTrigger',
952  'RecoLocal',
953  'Reco',
954  'RecoGlobal',
955  'Nano',
956  'HARVEST',
957  'HARVESTGlobal',
958  'MiniAOD',
959  'ALCA',
960  ],
961  suffix = '_PMXS1S2ProdLike',
962  offset = 0.9921,
963 )
964 
966  def setup_(self, step, stepName, stepDict, k, properties):
967  if 'Run3' in stepDict[step][k]['--era']:
968  stepDict[stepName][k] = merge([{'--geometry': 'DD4hepExtended2021', '--procModifiers': 'dd4hep'}, stepDict[step][k]])
969  elif 'Phase2' in stepDict[step][k]['--era']:
970  dd4hepGeom="DD4hep"
971  dd4hepGeom+=stepDict[step][k]['--geometry']
972  stepDict[stepName][k] = merge([{'--geometry' : dd4hepGeom, '--procModifiers': 'dd4hep'}, stepDict[step][k]])
973  def condition(self, fragment, stepList, key, hasHarvest):
974  return '2021' in key or '2026' in key
975 upgradeWFs['DD4hep'] = UpgradeWorkflow_DD4hep(
976  steps = [
977  'GenSim',
978  'GenSimHLBeamSpot',
979  'GenSimHLBeamSpot14',
980  'Digi',
981  'DigiTrigger',
982  'Reco',
983  'RecoGlobal',
984  'HARVEST',
985  'HARVESTGlobal',
986  'ALCA',
987  ],
988  PU = [],
989  suffix = '_DD4hep',
990  offset = 0.911,
991 )
992 upgradeWFs['DD4hep'].allowReuse = False
993 
995  def setup_(self, step, stepName, stepDict, k, properties):
996  stepDict[stepName][k] = merge([{'--procModifiers': 'allSonicTriton'}, stepDict[step][k]])
997  def condition(self, fragment, stepList, key, hasHarvest):
998  return (fragment=='TTbar_13' and '2021' in key) \
999  or (fragment=='TTbar_14TeV' and '2026' in key)
1000 upgradeWFs['SonicTriton'] = UpgradeWorkflow_SonicTriton(
1001  steps = [
1002  'GenSim',
1003  'GenSimHLBeamSpot',
1004  'GenSimHLBeamSpot14',
1005  'Digi',
1006  'DigiTrigger',
1007  'Reco',
1008  'RecoGlobal',
1009  'HARVEST',
1010  'HARVESTGlobal',
1011  'ALCA',
1012  ],
1013  PU = [
1014  'GenSim',
1015  'GenSimHLBeamSpot',
1016  'GenSimHLBeamSpot14',
1017  'Digi',
1018  'DigiTrigger',
1019  'Reco',
1020  'RecoGlobal',
1021  'HARVEST',
1022  'HARVESTGlobal',
1023  'ALCA',
1024  ],
1025  suffix = '_SonicTriton',
1026  offset = 0.9001,
1027 )
1028 
1029 # check for duplicate offsets
1030 offsets = [specialWF.offset for specialType,specialWF in six.iteritems(upgradeWFs)]
1031 seen = set()
1032 dups = set(x for x in offsets if x in seen or seen.add(x))
1033 if len(dups)>0:
1034  raise ValueError("Duplicate special workflow offsets not allowed: "+','.join([str(x) for x in dups]))
1035 
1036 upgradeProperties = {}
1037 
1038 upgradeProperties[2017] = {
1039  '2017' : {
1040  'Geom' : 'DB:Extended',
1041  'GT' : 'auto:phase1_2017_realistic',
1042  'HLTmenu': '@relval2017',
1043  'Era' : 'Run2_2017',
1044  'ScenToRun' : ['GenSim','Digi','RecoFakeHLT','HARVESTFakeHLT','ALCA','Nano'],
1045  },
1046  '2017Design' : {
1047  'Geom' : 'DB:Extended',
1048  'GT' : 'auto:phase1_2017_design',
1049  'HLTmenu': '@relval2017',
1050  'Era' : 'Run2_2017',
1051  'BeamSpot': 'GaussSigmaZ4cm',
1052  'ScenToRun' : ['GenSim','Digi','RecoFakeHLT','HARVESTFakeHLT'],
1053  },
1054  '2018' : {
1055  'Geom' : 'DB:Extended',
1056  'GT' : 'auto:phase1_2018_realistic',
1057  'HLTmenu': '@relval2018',
1058  'Era' : 'Run2_2018',
1059  'BeamSpot': 'Realistic25ns13TeVEarly2018Collision',
1060  'ScenToRun' : ['GenSim','Digi','RecoFakeHLT','HARVESTFakeHLT','ALCA','Nano'],
1061  },
1062  '2018Design' : {
1063  'Geom' : 'DB:Extended',
1064  'GT' : 'auto:phase1_2018_design',
1065  'HLTmenu': '@relval2018',
1066  'Era' : 'Run2_2018',
1067  'BeamSpot': 'GaussSigmaZ4cm',
1068  'ScenToRun' : ['GenSim','Digi','RecoFakeHLT','HARVESTFakeHLT'],
1069  },
1070  '2021' : {
1071  'Geom' : 'DB:Extended',
1072  'GT' : 'auto:phase1_2021_realistic',
1073  'HLTmenu': '@relval2021',
1074  'Era' : 'Run3',
1075  'BeamSpot': 'Run3RoundOptics25ns13TeVLowSigmaZ',
1076  'ScenToRun' : ['GenSim','Digi','Reco','HARVEST','ALCA'],
1077  },
1078  '2021Design' : {
1079  'Geom' : 'DB:Extended',
1080  'GT' : 'auto:phase1_2021_design',
1081  'HLTmenu': '@relval2021',
1082  'Era' : 'Run3',
1083  'BeamSpot': 'GaussSigmaZ4cm',
1084  'ScenToRun' : ['GenSim','Digi','Reco','HARVEST'],
1085  },
1086  '2023' : {
1087  'Geom' : 'DB:Extended',
1088  'GT' : 'auto:phase1_2023_realistic',
1089  'HLTmenu': '@relval2021',
1090  'Era' : 'Run3',
1091  'BeamSpot': 'Run3RoundOptics25ns13TeVLowSigmaZ',
1092  'ScenToRun' : ['GenSim','Digi','Reco','HARVEST','ALCA'],
1093  },
1094  '2024' : {
1095  'Geom' : 'DB:Extended',
1096  'GT' : 'auto:phase1_2024_realistic',
1097  'HLTmenu': '@relval2021',
1098  'Era' : 'Run3',
1099  'BeamSpot': 'Run3RoundOptics25ns13TeVLowSigmaZ',
1100  'ScenToRun' : ['GenSim','Digi','Reco','HARVEST','ALCA'],
1101  },
1102 }
1103 
1104 # standard PU sequences
1105 for key in list(upgradeProperties[2017].keys()):
1106  upgradeProperties[2017][key+'PU'] = deepcopy(upgradeProperties[2017][key])
1107  upgradeProperties[2017][key+'PU']['ScenToRun'] = ['GenSim','DigiPU'] + \
1108  (['RecoPU','HARVESTPU'] if '202' in key else ['RecoFakeHLTPU','HARVESTFakeHLTPU']) + \
1109  (['Nano'] if 'Design' not in key else [])
1110 
1111 upgradeProperties[2026] = {
1112  '2026D49' : {
1113  'Geom' : 'Extended2026D49',
1114  'HLTmenu': '@fake2',
1115  'GT' : 'auto:phase2_realistic_T15',
1116  'Era' : 'Phase2C9',
1117  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'],
1118  },
1119  '2026D60' : {
1120  'Geom' : 'Extended2026D60',
1121  'HLTmenu': '@fake2',
1122  'GT' : 'auto:phase2_realistic_T15',
1123  'Era' : 'Phase2C10',
1124  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'],
1125  },
1126  '2026D68' : {
1127  'Geom' : 'Extended2026D68',
1128  'HLTmenu': '@fake2',
1129  'GT' : 'auto:phase2_realistic_T21',
1130  'Era' : 'Phase2C11',
1131  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'],
1132  },
1133  '2026D70' : {
1134  'Geom' : 'Extended2026D70',
1135  'HLTmenu': '@fake2',
1136  'GT' : 'auto:phase2_realistic_T21',
1137  'Era' : 'Phase2C11',
1138  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'],
1139  },
1140  '2026D76' : {
1141  'Geom' : 'Extended2026D76',
1142  'HLTmenu': '@fake2',
1143  'GT' : 'auto:phase2_realistic_T21',
1144  'Era' : 'Phase2C11I13M9',
1145  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'],
1146  },
1147  '2026D77' : {
1148  'Geom' : 'Extended2026D77',
1149  'HLTmenu': '@fake2',
1150  'GT' : 'auto:phase2_realistic_T21',
1151  'Era' : 'Phase2C11I13M9',
1152  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'],
1153  },
1154  '2026D78' : {
1155  'Geom' : 'Extended2026D78', # N.B.: Geometry with square 50x50 um2 pixels in the Inner Tracker.
1156  'HLTmenu': '@fake2',
1157  'GT' : 'auto:phase2_realistic_T22',
1158  'ProcessModifier': 'PixelCPEGeneric', # This swaps template reco CPE for generic reco CPE
1159  'Era' : 'Phase2C11I13T22M9', # customized for square pixels and Muon M9
1160  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'],
1161  },
1162  '2026D79' : {
1163  'Geom' : 'Extended2026D79', # N.B.: Geometry with 3D pixels in the Inner Tracker.
1164  'HLTmenu': '@fake2',
1165  'GT' : 'auto:phase2_realistic_T23',
1166  'Era' : 'Phase2C11I13T23M9', # customizes for 3D Pixels and Muon M9
1167  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'],
1168  },
1169  '2026D80' : {
1170  'Geom' : 'Extended2026D80', # N.B.: Geometry with 3D pixels in the Inner Tracker L1.
1171  'HLTmenu': '@fake2',
1172  'GT' : 'auto:phase2_realistic_T25',
1173  'Era' : 'Phase2C11I13T25M9', # customized for 3D pixels and Muon M9
1174  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'],
1175  },
1176  '2026D81' : {
1177  'Geom' : 'Extended2026D81', # N.B.: Geometry with 3D pixels (TBPX,L1) and square 50x50 um2 pixels (TFPX+TEPX) in the Inner Tracker.
1178  'HLTmenu': '@fake2',
1179  'GT' : 'auto:phase2_realistic_T26',
1180  'Era' : 'Phase2C11I13T26M9', # customized for square pixels and Muon M9
1181  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'],
1182  },
1183  '2026D82' : {
1184  'Geom' : 'Extended2026D82',
1185  'HLTmenu': '@fake2',
1186  'GT' : 'auto:phase2_realistic_T21',
1187  'Era' : 'Phase2C11I13M9',
1188  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'],
1189  },
1190  '2026D83' : {
1191  'Geom' : 'Extended2026D83',
1192  'HLTmenu': '@fake2',
1193  'GT' : 'auto:phase2_realistic_T21',
1194  'Era' : 'Phase2C11I13M9',
1195  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal'],
1196  },
1197 }
1198 
1199 # standard PU sequences
1200 for key in list(upgradeProperties[2026].keys()):
1201  upgradeProperties[2026][key+'PU'] = deepcopy(upgradeProperties[2026][key])
1202  upgradeProperties[2026][key+'PU']['ScenToRun'] = ['GenSimHLBeamSpot','DigiTriggerPU','RecoGlobalPU', 'HARVESTGlobalPU']
1203 
1204 # for relvals
1205 defaultDataSets = {}
1206 for year in upgradeKeys:
1207  for key in upgradeKeys[year]:
1208  if 'PU' in key: continue
1209  defaultDataSets[key] = ''
1210 
1211 
1213  def __init__(self, howMuch, dataset):
1214  self.howMuch = howMuch
1215  self.dataset = dataset
1216 
1217 upgradeFragments = OrderedDict([
1218  ('FourMuPt_1_200_pythia8_cfi', UpgradeFragment(Kby(10,100),'FourMuPt1_200')),
1219  ('SingleElectronPt10_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleElectronPt10')),
1220  ('SingleElectronPt35_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleElectronPt35')),
1221  ('SingleElectronPt1000_pythia8_cfi', UpgradeFragment(Kby(9,50),'SingleElectronPt1000')),
1222  ('SingleGammaPt10_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleGammaPt10')),
1223  ('SingleGammaPt35_pythia8_cfi', UpgradeFragment(Kby(9,50),'SingleGammaPt35')),
1224  ('SingleMuPt1_pythia8_cfi', UpgradeFragment(Kby(25,100),'SingleMuPt1')),
1225  ('SingleMuPt10_Eta2p85_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt10')),
1226  ('SingleMuPt100_Eta2p85_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt100')),
1227  ('SingleMuPt1000_Eta2p85_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt1000')),
1228  ('FourMuExtendedPt_1_200_pythia8_cfi', UpgradeFragment(Kby(10,100),'FourMuExtendedPt1_200')),
1229  ('TenMuExtendedE_0_200_pythia8_cfi', UpgradeFragment(Kby(10,100),'TenMuExtendedE_0_200')),
1230  ('DoubleElectronPt10Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleElPt10Extended')),
1231  ('DoubleElectronPt35Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleElPt35Extended')),
1232  ('DoubleElectronPt1000Extended_pythia8_cfi', UpgradeFragment(Kby(9,50),'SingleElPt1000Extended')),
1233  ('DoubleGammaPt10Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleGammaPt10Extended')),
1234  ('DoubleGammaPt35Extended_pythia8_cfi', UpgradeFragment(Kby(9,50),'SingleGammaPt35Extended')),
1235  ('DoubleMuPt1Extended_pythia8_cfi', UpgradeFragment(Kby(25,100),'SingleMuPt1Extended')),
1236  ('DoubleMuPt10Extended_pythia8_cfi', UpgradeFragment(Kby(25,100),'SingleMuPt10Extended')),
1237  ('DoubleMuPt100Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt100Extended')),
1238  ('DoubleMuPt1000Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt1000Extended')),
1239  ('TenMuE_0_200_pythia8_cfi', UpgradeFragment(Kby(10,100),'TenMuE_0_200')),
1240  ('SinglePiE50HCAL_pythia8_cfi', UpgradeFragment(Kby(50,500),'SinglePiE50HCAL')),
1241  ('MinBias_13TeV_pythia8_TuneCUETP8M1_cfi', UpgradeFragment(Kby(90,100),'MinBias_13')),
1242  ('TTbar_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'TTbar_13')),
1243  ('ZEE_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'ZEE_13')),
1244  ('QCD_Pt_600_800_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QCD_Pt_600_800_13')),
1245  ('Wjet_Pt_80_120_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'Wjet_Pt_80_120_14TeV')),
1246  ('Wjet_Pt_3000_3500_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'Wjet_Pt_3000_3500_14TeV')),
1247  ('LM1_sfts_14TeV_cfi', UpgradeFragment(Kby(9,100),'LM1_sfts_14TeV')),
1248  ('QCD_Pt_3000_3500_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QCD_Pt_3000_3500_14TeV')),
1249  ('QCD_Pt_80_120_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'QCD_Pt_80_120_14TeV')),
1250  ('H200ChargedTaus_Tauola_14TeV_cfi', UpgradeFragment(Kby(9,100),'Higgs200ChargedTaus_14TeV')),
1251  ('JpsiMM_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(66,100),'JpsiMM_14TeV')),
1252  ('TTbar_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,100),'TTbar_14TeV')),
1253  ('WE_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'WE_14TeV')),
1254  ('ZTT_Tauola_All_hadronic_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,100),'ZTT_14TeV')),
1255  ('H130GGgluonfusion_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'H130GGgluonfusion_14TeV')),
1256  ('PhotonJet_Pt_10_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'PhotonJets_Pt_10_14TeV')),
1257  ('QQH1352T_Tauola_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'QQH1352T_Tauola_14TeV')),
1258  ('MinBias_14TeV_pythia8_TuneCP5_cfi', UpgradeFragment(Kby(90,100),'MinBias_14TeV')),
1259  ('WM_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'WM_14TeV')),
1260  ('ZMM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(18,100),'ZMM_13')),
1261  ('QCDForPF_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(50,100),'QCD_FlatPt_15_3000HS_14')),
1262  ('DYToLL_M-50_14TeV_pythia8_cff', UpgradeFragment(Kby(9,100),'DYToLL_M_50_14TeV')),
1263  ('DYToTauTau_M-50_14TeV_pythia8_tauola_cff', UpgradeFragment(Kby(9,100),'DYtoTauTau_M_50_14TeV')),
1264  ('ZEE_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,100),'ZEE_14')),
1265  ('QCD_Pt_80_120_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'QCD_Pt_80_120_13')),
1266  ('H125GGgluonfusion_13TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,50),'H125GGgluonfusion_13')),
1267  ('QCD_Pt20toInf_MuEnrichedPt15_14TeV_TuneCP5_cff', UpgradeFragment(Kby(19565, 217391),'QCD_Pt20toInfMuEnrichPt15_14')), # effi = 4.6e-4, local=8.000e-04
1268  ('ZMM_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(18,100),'ZMM_14')),
1269  ('QCD_Pt15To7000_Flat_14TeV_TuneCP5_cff', UpgradeFragment(Kby(9,50),'QCD_Pt15To7000_Flat_14')),
1270  ('H125GGgluonfusion_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,50),'H125GGgluonfusion_14')),
1271  ('QCD_Pt_600_800_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QCD_Pt_600_800_14')),
1272  ('UndergroundCosmicSPLooseMu_cfi', UpgradeFragment(Kby(9,50),'CosmicsSPLoose')),
1273  ('BeamHalo_13TeV_cfi', UpgradeFragment(Kby(9,50),'BeamHalo_13')),
1274  ('H200ChargedTaus_Tauola_13TeV_cfi', UpgradeFragment(Kby(9,50),'Higgs200ChargedTaus_13')),
1275  ('ADDMonoJet_13TeV_d3MD3_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ADDMonoJet_d3MD3_13')),
1276  ('ZpMM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZpMM_13')),
1277  ('QCD_Pt_3000_3500_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QCD_Pt_3000_3500_13')),
1278  ('WpM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'WpM_13')),
1279  ('SingleNuE10_cfi', UpgradeFragment(Kby(9,50),'NuGun')),
1280  ('TTbarLepton_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'TTbarLepton_13')),
1281  ('WE_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'WE_13')),
1282  ('WM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'WM_13')),
1283  ('ZTT_All_hadronic_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZTT_13')),
1284  ('PhotonJet_Pt_10_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'PhotonJets_Pt_10_13')),
1285  ('QQH1352T_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QQH1352T_13')),
1286  ('Wjet_Pt_80_120_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'Wjet_Pt_80_120_13')),
1287  ('Wjet_Pt_3000_3500_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'Wjet_Pt_3000_3500_13')),
1288  ('SMS-T1tttt_mGl-1500_mLSP-100_13TeV-pythia8_cfi', UpgradeFragment(Kby(9,50),'SMS-T1tttt_mGl-1500_mLSP-100_13')),
1289  ('QCDForPF_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(50,100),'QCD_FlatPt_15_3000HS_13')),
1290  ('PYTHIA8_PhiToMuMu_TuneCUETP8M1_13TeV_cff', UpgradeFragment(Kby(9,50),'PhiToMuMu_13')),
1291  ('RSKKGluon_m3000GeV_13TeV_TuneCUETP8M1_cff', UpgradeFragment(Kby(9,50),'RSKKGluon_m3000GeV_13')),
1292  ('ZpMM_2250_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZpMM_2250_13')),
1293  ('ZpEE_2250_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZpEE_2250_13')),
1294  ('ZpTT_1500_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZpTT_1500_13')),
1295  ('Upsilon1SToMuMu_forSTEAM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'Upsilon1SToMuMu_13')),
1296  ('EtaBToJpsiJpsi_forSTEAM_TuneCUEP8M1_13TeV_cfi', UpgradeFragment(Kby(9,50),'EtaBToJpsiJpsi_13')),
1297  ('JpsiMuMu_Pt-8_forSTEAM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(3100,100000),'JpsiMuMu_Pt-8')),
1298  ('BuMixing_BMuonFilter_forSTEAM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(900,10000),'BuMixing_13')),
1299  ('HSCPstop_M_200_TuneCUETP8M1_13TeV_pythia8_cff', UpgradeFragment(Kby(9,50),'HSCPstop_M_200_13')),
1300  ('RSGravitonToGammaGamma_kMpl01_M_3000_TuneCUETP8M1_13TeV_pythia8_cfi', UpgradeFragment(Kby(9,50),'RSGravitonToGaGa_13')),
1301  ('WprimeToENu_M-2000_TuneCUETP8M1_13TeV-pythia8_cff', UpgradeFragment(Kby(9,50),'WpToENu_M-2000_13')),
1302  ('DisplacedSUSY_stopToBottom_M_800_500mm_TuneCP5_13TeV_pythia8_cff', UpgradeFragment(Kby(9,50),'DisplacedSUSY_stopToB_M_800_500mm_13')),
1303  ('TenE_E_0_200_pythia8_cfi', UpgradeFragment(Kby(9,100),'TenE_0_200')),
1304  ('FlatRandomPtAndDxyGunProducer_cfi', UpgradeFragment(Kby(9,100),'DisplacedMuonsDxy_0_500')),
1305  ('TenTau_E_15_500_pythia8_cfi', UpgradeFragment(Kby(9,100),'TenTau_15_500')),
1306  ('SinglePiPt25Eta1p7_2p7_cfi', UpgradeFragment(Kby(9,100),'SinglePiPt25Eta1p7_2p7')),
1307  ('SingleMuPt15Eta1p7_2p7_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt15Eta1p7_2p7')),
1308  ('SingleGammaPt25Eta1p7_2p7_cfi', UpgradeFragment(Kby(9,100),'SingleGammaPt25Eta1p7_2p7')),
1309  ('SingleElectronPt15Eta1p7_2p7_cfi', UpgradeFragment(Kby(9,100),'SingleElectronPt15Eta1p7_2p7')),
1310  ('ZTT_All_hadronic_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,50),'ZTT_14')),
1311  ('CloseByParticle_Photon_ERZRanges_cfi', UpgradeFragment(Kby(9,100),'CloseByParticleGun')),
1312  ('CE_E_Front_300um_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_E_Front_300um')),
1313  ('CE_E_Front_200um_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_E_Front_200um')),
1314  ('CE_E_Front_120um_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_E_Front_120um')),
1315  ('CE_H_Fine_300um_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_H_Fine_300um')),
1316  ('CE_H_Fine_200um_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_H_Fine_200um')),
1317  ('CE_H_Fine_120um_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_H_Fine_120um')),
1318  ('CE_H_Coarse_Scint_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_H_Coarse_Scint')),
1319  ('CE_H_Coarse_300um_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_H_Coarse_300um')),
1320  ('SingleElectronFlatPt2To100_cfi', UpgradeFragment(Kby(9,100),'SingleEFlatPt2To100')),
1321  ('SingleMuFlatPt0p7To10_cfi', UpgradeFragment(Kby(9,100),'SingleMuFlatPt0p7To10')),
1322  ('SingleMuFlatPt2To100_cfi', UpgradeFragment(Kby(9,100),'SingleMuFlatPt2To100')),
1323  ('SingleGammaFlatPt8To150_cfi', UpgradeFragment(Kby(9,100),'SingleGammaFlatPt8To150')),
1324  ('SinglePiFlatPt0p7To10_cfi', UpgradeFragment(Kby(9,100),'SinglePiFlatPt0p7To10')),
1325  ('SingleTauFlatPt2To150_cfi', UpgradeFragment(Kby(9,100),'SingleTauFlatPt2To150')),
1326  ('FlatRandomPtAndDxyGunProducer_MuPt2To10_cfi', UpgradeFragment(Kby(9,100),'DisplacedMuPt2To10')),
1327  ('FlatRandomPtAndDxyGunProducer_MuPt10To30_cfi', UpgradeFragment(Kby(9,100),'DisplacedMuPt10To30')),
1328  ('FlatRandomPtAndDxyGunProducer_MuPt30To100_cfi', UpgradeFragment(Kby(9,100),'DisplacedMuPt30To100')),
1329  ('B0ToKstarMuMu_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(304,3030),'B0ToKstarMuMu_14TeV')), # 3.3%
1330  ('BsToEleEle_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(223,2222),'BsToEleEle_14TeV')), # 4.5%
1331  ('BsToJpsiGamma_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(2500,25000),'BsToJpsiGamma_14TeV')), # 0.4%
1332  ('BsToJpsiPhi_mumuKK_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(910,9090),'BsToJpsiPhi_mumuKK_14TeV')), # 1.1%
1333  ('BsToMuMu_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(313,3125),'BsToMuMu_14TeV')), # 3.2%
1334  ('BsToPhiPhi_KKKK_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(556,5555),'BsToPhiPhi_KKKK_14TeV')), # 1.8%
1335  ('TauToMuMuMu_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(18939,189393),'TauToMuMuMu_14TeV')), # effi = 5.280e-04
1336  ('BdToKstarEleEle_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(206,2061),'BdToKstarEleEle_14TeV')), #effi = 4.850e-02
1337  ('ZpTT_1500_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,50),'ZpTT_1500_14')),
1338  ('BuMixing_BMuonFilter_forSTEAM_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(900,10000),'BuMixing_14')),
1339  ('Upsilon1SToMuMu_forSTEAM_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,50),'Upsilon1SToMuMu_14')),
1340  ('TenTau_E_15_500_Eta3p1_pythia8_cfi', UpgradeFragment(Kby(9,100),'TenTau_15_500_Eta3p1')),
1341  ('QCD_Pt_1800_2400_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,50), 'QCD_Pt_1800_2400_14')),
1342  ('DisplacedSUSY_stopToBottom_M_800_500mm_TuneCP5_14TeV_pythia8_cff', UpgradeFragment(Kby(9,50),'DisplacedSUSY_14TeV')),
1343  ('GluGluTo2Jets_M_300_2000_14TeV_Exhume_cff',UpgradeFragment(Kby(9,100),'GluGluTo2Jets_14TeV')),
1344 ])
upgradeWorkflowComponents.UpgradeWorkflow_trackingRun2.condition_
def condition_(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:227
upgradeWorkflowComponents.UpgradeWorkflow_vectorHits.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:340
upgradeWorkflowComponents.UpgradeWorkflow.preventReuse
def preventReuse(self, stepName, stepDict, k)
Definition: upgradeWorkflowComponents.py:135
upgradeWorkflowComponents.UpgradeWorkflow.offset
offset
Definition: upgradeWorkflowComponents.py:98
upgradeWorkflowComponents.UpgradeWorkflow_trackingMkFit.condition_
def condition_(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:297
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
upgradeWorkflowComponents.UpgradeWorkflow_JMENano.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:710
resolutioncreator_cfi.object
object
Definition: resolutioncreator_cfi.py:4
upgradeWorkflowComponents.UpgradeWorkflow_DD4hep.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:966
upgradeWorkflowComponents.UpgradeWorkflow.suffix
suffix
Definition: upgradeWorkflowComponents.py:96
upgradeWorkflowComponents.UpgradeWorkflow.steps
steps
Definition: upgradeWorkflowComponents.py:87
upgradeWorkflowComponents.UpgradeWorkflow.setup
def setup(self, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:114
upgradeWorkflowComponents.UpgradeWorkflow_ProdLike.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:545
upgradeWorkflowComponents.UpgradeWorkflow_trackingOnly
Definition: upgradeWorkflowComponents.py:200
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
upgradeWorkflowComponents.UpgradeWorkflow_Neutron.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:600
upgradeWorkflowComponents.UpgradeWorkflow_trackingOnlyRun2.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:239
upgradeWorkflowComponents.UpgradeWorkflow.getStepName
def getStepName(self, step, extra="")
Definition: upgradeWorkflowComponents.py:101
upgradeWorkflowComponents.UpgradeFragment
Definition: upgradeWorkflowComponents.py:1212
upgradeWorkflowComponents.UpgradeWorkflow_baseline
Definition: upgradeWorkflowComponents.py:140
upgradeWorkflowComponents.UpgradeWorkflow_vectorHits
Definition: upgradeWorkflowComponents.py:337
upgradeWorkflowComponents.UpgradeWorkflow.setupPU_
def setupPU_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:124
upgradeWorkflowComponents.UpgradeWorkflow_ecalDevel
Definition: upgradeWorkflowComponents.py:643
upgradeWorkflowComponents.UpgradeWorkflowAdjustPU
Definition: upgradeWorkflowComponents.py:878
join
static std::string join(char **cmd)
Definition: RemoteFile.cc:17
upgradeWorkflowComponents.UpgradeWorkflow_0T
Definition: upgradeWorkflowComponents.py:667
upgradeWorkflowComponents.UpgradeFragment.dataset
dataset
Definition: upgradeWorkflowComponents.py:1215
upgradeWorkflowComponents.UpgradeWorkflow_trackdnn.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:356
relativeConstraints.keys
keys
Definition: relativeConstraints.py:89
upgradeWorkflowComponents.UpgradeWorkflow_Neutron
Definition: upgradeWorkflowComponents.py:589
upgradeWorkflowComponents.UpgradeWorkflowAdjustPU.setupPU_
def setupPU_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:879
upgradeWorkflowComponents.UpgradeWorkflow_ParkingBPH
Definition: upgradeWorkflowComponents.py:691
upgradeWorkflowComponents.UpgradeWorkflow_seedingDeepCore
Definition: upgradeWorkflowComponents.py:313
upgradeWorkflowComponents.UpgradeWorkflowPremixProdLike
Definition: upgradeWorkflowComponents.py:906
upgradeWorkflowComponents.UpgradeWorkflowAging
Definition: upgradeWorkflowComponents.py:723
upgradeWorkflowComponents.PatatrackWorkflow
Definition: upgradeWorkflowComponents.py:402
upgradeWorkflowComponents.UpgradeWorkflow_pixelTrackingOnly.condition_
def condition_(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:275
upgradeWorkflowComponents.UpgradeWorkflow_trackdnn
Definition: upgradeWorkflowComponents.py:355
upgradeWorkflowComponents.UpgradeWorkflow_trackdnn.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:359
any
bool any(const std::vector< T > &v, const T &what)
Definition: ECalSD.cc:38
upgradeWorkflowComponents.UpgradeWorkflow.init
def init(self, stepDict)
Definition: upgradeWorkflowComponents.py:107
upgradeWorkflowComponents.UpgradeWorkflow_Neutron.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:590
upgradeWorkflowComponents.UpgradeWorkflow_trackingOnly.step3
step3
Definition: upgradeWorkflowComponents.py:215
upgradeWorkflowComponents.UpgradeWorkflow_DD4hep.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:973
submitPVValidationJobs.split
def split(sequence, size)
Definition: submitPVValidationJobs.py:352
upgradeWorkflowComponents.UpgradeWorkflow.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:133
upgradeWorkflowComponents.UpgradeWorkflowAging.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:727
upgradeWorkflowComponents.UpgradeWorkflow.getStepNamePU
def getStepNamePU(self, step, extra="")
Definition: upgradeWorkflowComponents.py:104
upgradeWorkflowComponents.UpgradeWorkflow_trackingOnlyRun2.condition_
def condition_(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:243
upgradeWorkflowComponents.UpgradeWorkflow_SonicTriton.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:997
upgradeWorkflowComponents.UpgradeWorkflow_ecalDevel.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:644
str
#define str(s)
Definition: TestProcessor.cc:52
upgradeWorkflowComponents.UpgradeWorkflow_heCollapse
Definition: upgradeWorkflowComponents.py:621
upgradeWorkflowComponents.UpgradeWorkflowAdjustPU.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:884
upgradeWorkflowComponents.UpgradeWorkflow_trackingLowPU.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:257
upgradeWorkflowComponents.UpgradeWorkflow.__init__
def __init__(self, steps, PU, suffix, offset)
Definition: upgradeWorkflowComponents.py:86
upgradeWorkflowComponents.UpgradeWorkflow_mlpf.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:378
upgradeWorkflowComponents.UpgradeWorkflow_trackingOnly.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:201
upgradeWorkflowComponents.UpgradeWorkflow_trackingRun2
Definition: upgradeWorkflowComponents.py:223
upgradeWorkflowComponents.UpgradeWorkflow_ProdLike
Definition: upgradeWorkflowComponents.py:544
upgradeWorkflowComponents.UpgradeWorkflow_mlpf.step3
step3
Definition: upgradeWorkflowComponents.py:391
upgradeWorkflowComponents.UpgradeFragment.__init__
def __init__(self, howMuch, dataset)
Definition: upgradeWorkflowComponents.py:1213
upgradeWorkflowComponents.UpgradeWorkflow_mlpf
Definition: upgradeWorkflowComponents.py:374
upgradeWorkflowComponents.UpgradeWorkflow_heCollapse.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:622
upgradeWorkflowComponents.UpgradeWorkflow_trackingLowPU
Definition: upgradeWorkflowComponents.py:256
upgradeWorkflowComponents.UpgradeWorkflow_trackingMkFit.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:295
upgradeWorkflowComponents.UpgradeWorkflow_SonicTriton.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:995
upgradeWorkflowComponents.UpgradeWorkflowPremix.setupPU_
def setupPU_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:770
upgradeWorkflowComponents.UpgradeWorkflowPremixProdLike.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:922
upgradeWorkflowComponents.UpgradeWorkflow_trackingMkFit
Definition: upgradeWorkflowComponents.py:294
upgradeWorkflowComponents.PatatrackWorkflow.__init__
def __init__(self, reco, harvest, **kwargs)
Definition: upgradeWorkflowComponents.py:403
upgradeWorkflowComponents.UpgradeWorkflowTracking
Definition: upgradeWorkflowComponents.py:188
mps_setup.append
append
Definition: mps_setup.py:85
upgradeWorkflowComponents.UpgradeFragment.howMuch
howMuch
Definition: upgradeWorkflowComponents.py:1214
upgradeWorkflowComponents.UpgradeWorkflow.PU
PU
Definition: upgradeWorkflowComponents.py:88
upgradeWorkflowComponents.UpgradeWorkflow.setupPU
def setupPU(self, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:118
upgradeWorkflowComponents.PatatrackWorkflow.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:439
upgradeWorkflowComponents.UpgradeWorkflowPremix.workflow_
def workflow_(self, workflows, num, fragment, stepList, key)
Definition: upgradeWorkflowComponents.py:829
upgradeWorkflowComponents.UpgradeWorkflow_0T.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:668
upgradeWorkflowComponents.UpgradeWorkflow_trackingOnlyRun2
Definition: upgradeWorkflowComponents.py:238
upgradeWorkflowComponents.UpgradeWorkflow_baseline.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:141
createfilelist.int
int
Definition: createfilelist.py:10
upgradeWorkflowComponents.UpgradeWorkflow.workflow_
def workflow_(self, workflows, num, fragment, stepList, key)
Definition: upgradeWorkflowComponents.py:129
upgradeWorkflowComponents.UpgradeWorkflow_heCollapse.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:624
upgradeWorkflowComponents.UpgradeWorkflowPremix.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:767
upgradeWorkflowComponents.UpgradeWorkflowPremixProdLike.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:907
upgradeWorkflowComponents.UpgradeWorkflowTracking.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:189
upgradeWorkflowComponents.UpgradeWorkflowAging.lumi
lumi
Definition: upgradeWorkflowComponents.py:748
upgradeWorkflowComponents.UpgradeWorkflow
Definition: upgradeWorkflowComponents.py:85
upgradeWorkflowComponents.UpgradeWorkflow_0T.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:672
upgradeWorkflowComponents.UpgradeWorkflow_pixelTrackingOnly.step3
step3
Definition: upgradeWorkflowComponents.py:288
upgradeWorkflowComponents.UpgradeWorkflow_JMENano
Definition: upgradeWorkflowComponents.py:706
upgradeWorkflowComponents.UpgradeWorkflow_ecalDevel.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:650
upgradeWorkflowComponents.UpgradeWorkflowPremix
Definition: upgradeWorkflowComponents.py:766
upgradeWorkflowComponents.UpgradeWorkflow_trackingOnlyRun2.step3
step3
Definition: upgradeWorkflowComponents.py:254
upgradeWorkflowComponents.UpgradeWorkflow_Neutron.neutronKeys
neutronKeys
Definition: upgradeWorkflowComponents.py:618
upgradeWorkflowComponents.PatatrackWorkflow.__reco
__reco
Definition: upgradeWorkflowComponents.py:416
upgradeWorkflowComponents.PatatrackWorkflow.__harvest
__harvest
Definition: upgradeWorkflowComponents.py:421
upgradeWorkflowComponents.UpgradeWorkflow.allowReuse
allowReuse
Definition: upgradeWorkflowComponents.py:89
upgradeWorkflowComponents.UpgradeWorkflow_trackingRun2.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:224
upgradeWorkflowComponents.UpgradeWorkflow_ProdLike.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:560
upgradeWorkflowComponents.UpgradeWorkflowAging.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:724
upgradeWorkflowComponents.UpgradeWorkflowPremix.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:821
upgradeWorkflowComponents.UpgradeWorkflow_seedingDeepCore.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:316
upgradeWorkflowComponents.UpgradeWorkflow_SonicTriton
Definition: upgradeWorkflowComponents.py:994
upgradeWorkflowComponents.UpgradeWorkflow.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:122
upgradeWorkflowComponents.UpgradeWorkflow_baseline.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:148
upgradeWorkflowComponents.UpgradeWorkflow_trackingLowPU.condition_
def condition_(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:260
upgradeWorkflowComponents.UpgradeWorkflow_trackingMkFit.step3
step3
Definition: upgradeWorkflowComponents.py:308
upgradeWorkflowComponents.UpgradeWorkflow.workflow
def workflow(self, workflows, num, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:126
upgradeWorkflowComponents.UpgradeWorkflow_ParkingBPH.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:692
upgradeWorkflowComponents.UpgradeWorkflow_DD4hep
Definition: upgradeWorkflowComponents.py:965
upgradeWorkflowComponents.UpgradeWorkflow_mlpf.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:375
upgradeWorkflowComponents.UpgradeWorkflow_pixelTrackingOnly.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:272
upgradeWorkflowComponents.UpgradeWorkflow_vectorHits.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:338
upgradeWorkflowComponents.UpgradeWorkflow_seedingDeepCore.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:314
upgradeWorkflowComponents.UpgradeWorkflow_JMENano.setup_
def setup_(self, step, stepName, stepDict, k, properties)
Definition: upgradeWorkflowComponents.py:707
upgradeWorkflowComponents.PatatrackWorkflow.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:423
upgradeWorkflowComponents.UpgradeWorkflow_Neutron.neutronFrags
neutronFrags
Definition: upgradeWorkflowComponents.py:619
MatrixUtil.Kby
def Kby(N, s)
Standard release validation samples ####.
Definition: MatrixUtil.py:231
merge
Definition: merge.py:1
update
#define update(a, b)
Definition: TrackClassifier.cc:10
upgradeWorkflowComponents.UpgradeWorkflow_ParkingBPH.condition
def condition(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:695
python.rootplot.root2matplotlib.replace
def replace(string, replacements)
Definition: root2matplotlib.py:444
upgradeWorkflowComponents.UpgradeWorkflow_pixelTrackingOnly
Definition: upgradeWorkflowComponents.py:271
upgradeWorkflowComponents.UpgradeWorkflowTracking.condition_
def condition_(self, fragment, stepList, key, hasHarvest)
Definition: upgradeWorkflowComponents.py:197