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 from .MatrixUtil import merge, Kby, Mby, check_dups
4 import re
5 
6 U2000by1={'--relval': '2000,1'}
7 
8 # DON'T CHANGE THE ORDER, only append new keys. Otherwise the numbering for the runTheMatrix tests will change.
9 
10 upgradeKeys = {}
11 
12 upgradeKeys[2017] = [
13  '2017',
14  '2017PU',
15  '2017Design',
16  '2017DesignPU',
17  '2018',
18  '2018PU',
19  '2018Design',
20  '2018DesignPU',
21  '2021',
22  '2021PU',
23  '2021Design',
24  '2021DesignPU',
25  '2023',
26  '2023PU',
27  '2024',
28  '2024PU',
29  '2021FS',
30  '2021FSPU',
31  '2021postEE',
32  '2021postEEPU',
33  '2023FS',
34  '2023FSPU',
35  '2022HI',
36  '2022HIRP', #RawPrime
37  '2023HI',
38  '2023HIRP', #RawPrime
39  '2024HLTOnDigi',
40  '2024HLTOnDigiPU',
41  '2024GenOnly',
42  '2024SimOnGen',
43  '2024FS',
44  '2024FSPU',
45 ]
46 
47 upgradeKeys[2026] = [
48  '2026D95',
49  '2026D95PU',
50  '2026D96',
51  '2026D96PU',
52  '2026D98',
53  '2026D98PU',
54  '2026D99',
55  '2026D99PU',
56  '2026D100',
57  '2026D100PU',
58  '2026D101',
59  '2026D101PU',
60  '2026D102',
61  '2026D102PU',
62  '2026D103',
63  '2026D103PU',
64  '2026D104',
65  '2026D104PU',
66  '2026D105',
67  '2026D105PU',
68  '2026D106',
69  '2026D106PU',
70  '2026D107',
71  '2026D107PU',
72  '2026D108',
73  '2026D108PU',
74  '2026D109',
75  '2026D109PU',
76  '2026D110',
77  '2026D110PU',
78  '2026D111',
79  '2026D111PU',
80  '2026D112',
81  '2026D112PU',
82  '2026D113',
83  '2026D113PU',
84  '2026D114',
85  '2026D114PU',
86  '2026D110GenOnly',
87  '2026D110SimOnGen',
88  '2026D115',
89  '2026D115PU',
90 ]
91 
92 # pre-generation of WF numbers
93 numWFStart={
94  2017: 10000,
95  2026: 23600,
96 }
97 numWFSkip=200
98 # temporary measure to keep other WF numbers the same
99 numWFConflict = [[14400,14800], #2022ReReco, 2022ReRecoPU (in 12_4)
100  [24400,24800], #D97
101  [50000,51000]]
102 numWFAll={
103  2017: [],
104  2026: []
105 }
106 
107 for year in upgradeKeys:
108  for i in range(0,len(upgradeKeys[year])):
109  numWFtmp = numWFStart[year] if i==0 else (numWFAll[year][i-1] + numWFSkip)
110  for conflict in numWFConflict:
111  if numWFtmp>=conflict[0] and numWFtmp<conflict[1]:
112  numWFtmp = conflict[1]
113  break
114  numWFAll[year].append(numWFtmp)
115 
116 # workflows for baseline and for variations
117 # setup() automatically loops over all steps and applies any customizations specified in setup_() -> called in relval_steps.py
118 # setupPU() and setupPU_() operate similarly -> called in relval_steps.py *after* merging PUDataSets w/ regular steps
119 # workflow() adds a concrete workflow to the list based on condition() -> called in relval_upgrade.py
120 # every special workflow gets its own derived class, which must then be added to the global dict upgradeWFs
121 preventReuseKeyword = 'NOREUSE'
123  def __init__(self,steps,PU,suffix,offset):
124  self.steps = steps
125  self.PU = PU
126  self.allowReuse = True
127 
128  # ensure all PU steps are in normal step list
129  for step in self.PU:
130  if not step in self.steps:
131  self.steps.append(step)
132 
133  self.suffix = suffix
134  if len(self.suffix)>0 and self.suffix[0]!='_': self.suffix = '_'+self.suffix
135  self.offset = offset
136  if self.offset < 0.0 or self.offset > 1.0:
137  raise ValueError("Special workflow offset must be between 0.0 and 1.0")
138  def getStepName(self, step, extra=""):
139  stepName = step + self.suffix + extra
140  return stepName
141  def getStepNamePU(self, step, extra=""):
142  stepNamePU = step + 'PU' + self.suffix + extra
143  return stepNamePU
144  def init(self, stepDict):
145  for step in self.steps:
146  stepDict[self.getStepName(step)] = {}
147  if not self.allowReuse: stepDict[self.getStepName(step,preventReuseKeyword)] = {}
148  for step in self.PU:
149  stepDict[self.getStepNamePU(step)] = {}
150  if not self.allowReuse: stepDict[self.getStepNamePU(step,preventReuseKeyword)] = {}
151  def setup(self, stepDict, k, properties):
152  for step in self.steps:
153  self.setup_(step, self.getStepName(step), stepDict, k, properties)
154  if not self.allowReuse: self.preventReuse(self.getStepName(step,preventReuseKeyword), stepDict, k)
155  def setupPU(self, stepDict, k, properties):
156  for step in self.PU:
157  self.setupPU_(step, self.getStepNamePU(step), stepDict, k, properties)
158  if not self.allowReuse: self.preventReuse(self.getStepNamePU(step,preventReuseKeyword), stepDict, k)
159  def setup_(self, step, stepName, stepDict, k, properties):
160  pass
161  def setupPU_(self, step, stepName, stepDict, k, properties):
162  pass
163  def workflow(self, workflows, num, fragment, stepList, key, hasHarvest):
164  if self.condition(fragment, stepList, key, hasHarvest):
165  self.workflow_(workflows, num, fragment, stepList, key)
166  def workflow_(self, workflows, num, fragment, stepList, key):
167  fragmentTmp = [fragment, key]
168  if len(self.suffix)>0: fragmentTmp.append(self.suffix)
169  # avoid spurious workflows (no steps modified)
170  if self.offset==0 or workflows[num][1]!=stepList:
171  workflows[num+self.offset] = [ fragmentTmp, stepList ]
172  def condition(self, fragment, stepList, key, hasHarvest):
173  return False
174  def preventReuse(self, stepName, stepDict, k):
175  if "Sim" in stepName and stepName != "Sim":
176  stepDict[stepName][k] = None
177  if "Gen" in stepName:
178  stepDict[stepName][k] = None
179 upgradeWFs = OrderedDict()
180 
182  def setup_(self, step, stepName, stepDict, k, properties):
183  cust=properties.get('Custom', None)
184  era=properties.get('Era', None)
185  modifier=properties.get('ProcessModifier',None)
186  if cust is not None: stepDict[stepName][k]['--customise']=cust
187  if era is not None:
188  stepDict[stepName][k]['--era']=era
189  if modifier is not None: stepDict[stepName][k]['--procModifier']=modifier
190  def condition(self, fragment, stepList, key, hasHarvest):
191  return True
192 upgradeWFs['baseline'] = UpgradeWorkflow_baseline(
193  steps = [
194  'Gen',
195  'GenHLBeamSpot',
196  'GenHLBeamSpot14',
197  'Sim',
198  'GenSim',
199  'GenSimHLBeamSpot',
200  'GenSimHLBeamSpot14',
201  'GenSimHLBeamSpotHGCALCloseBy',
202  'Digi',
203  'DigiNoHLT',
204  'DigiTrigger',
205  'HLTRun3',
206  'HLTOnly',
207  'RecoLocal',
208  'Reco',
209  'RecoFakeHLT',
210  'RecoGlobal',
211  'RecoNano',
212  'RecoNanoFakeHLT',
213  'HARVEST',
214  'HARVESTFakeHLT',
215  'HARVESTNano',
216  'HARVESTNanoFakeHLT',
217  'FastSim',
218  'HARVESTFast',
219  'HARVESTGlobal',
220  'ALCA',
221  'ALCAPhase2',
222  'Nano',
223  'MiniAOD',
224  'HLT75e33',
225  'FastSimRun3',
226  'HARVESTFastRun3',
227  ],
228  PU = [
229  'DigiTrigger',
230  'RecoLocal',
231  'RecoGlobal',
232  'Digi',
233  'DigiNoHLT',
234  'HLTOnly',
235  'Reco',
236  'RecoFakeHLT',
237  'RecoNano',
238  'RecoNanoFakeHLT',
239  'HARVEST',
240  'HARVESTFakeHLT',
241  'HARVESTNano',
242  'HARVESTNanoFakeHLT',
243  'HARVESTGlobal',
244  'MiniAOD',
245  'Nano',
246  'HLT75e33',
247  'FastSimRun3',
248  'HARVESTFastRun3',
249  ],
250  suffix = '',
251  offset = 0.0,
252 )
253 
254 
256  def setup_(self, step, stepName, stepDict, k, properties):
257  if stepDict[step][k] != None:
258  if 'ALCA' in step:
259  stepDict[stepName][k] = None
260  if 'RecoNano' in step:
261  stepDict[stepName][k] = merge([{'--filein': 'file:step3.root', '--secondfilein': 'file:step2.root'}, stepDict[step][k]])
262  if 'Digi' in step and 'NoHLT' not in step:
263  stepDict[stepName][k] = merge([{'-s': re.sub(',HLT.*', '', stepDict[step][k]['-s'])}, stepDict[step][k]])
264  def condition(self, fragment, stepList, key, hasHarvest):
265  if ('TTbar_14TeV' in fragment and '2021' == key):
266  stepList.insert(stepList.index('Digi_DigiNoHLT_2021')+1, 'HLTRun3_2021')
267  return ('TTbar_14TeV' in fragment and '2021' == key)
268 upgradeWFs['DigiNoHLT'] = UpgradeWorkflow_DigiNoHLT(
269  steps = [
270  'Digi',
271  'RecoNano',
272  'RecoNanoFakeHLT',
273  'ALCA'
274  ],
275  PU = [],
276  suffix = '_DigiNoHLT',
277  offset = 0.601,
278 )
279 
280 # some commonalities among tracking WFs
282 
283  def __init__(self, steps, PU, suffix, offset):
284  # always include some steps that will be skipped
285  steps = steps + ["ALCA","Nano"]
286  super().__init__(steps, PU, suffix, offset)
287  def condition(self, fragment, stepList, key, hasHarvest):
288  result = (fragment=="TTbar_13" or fragment=="TTbar_14TeV" or 'Hydjet' in fragment) and not 'PU' in key and hasHarvest and self.condition_(fragment, stepList, key, hasHarvest)
289  return result
290  def condition_(self, fragment, stepList, key, hasHarvest):
291  return True
292  def setup_(self, step, stepName, stepDict, k, properties):
293  # skip ALCA and Nano steps (but not RecoNano or HARVESTNano for Run3)
294  if 'ALCA' in step or 'Nano'==step:
295  stepDict[stepName][k] = None
296  self.setup__(step, stepName, stepDict, k, properties)
297  # subordinate function for inherited classes
298  def setup__(self, step, stepName, stepDict, k, properties):
299  pass
300 
301 class UpgradeWorkflow_trackingOnly(UpgradeWorkflowTracking):
302  def setup__(self, step, stepName, stepDict, k, properties):
303  if 'Reco' in step: stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
304  elif 'HARVEST' in step: stepDict[stepName][k] = merge([{'-s': 'HARVESTING:@trackingOnlyValidation+@trackingOnlyDQM'}, stepDict[step][k]])
305 
306  def condition(self, fragment, stepList, key, hasHarvest):
307  result = (fragment=="TTbar_13" or fragment=="TTbar_14TeV") and hasHarvest and self.condition_(fragment, stepList, key, hasHarvest)
308  return result
309 
310 
311 
312 upgradeWFs['trackingOnly'] = UpgradeWorkflow_trackingOnly(
313  steps = [
314  'Reco',
315  'RecoFakeHLT',
316  'HARVEST',
317  'HARVESTFakeHLT',
318  'RecoGlobal',
319  'HARVESTGlobal',
320  'RecoNano',
321  'RecoNanoFakeHLT',
322  'HARVESTNano',
323  'HARVESTNanoFakeHLT',
324  ],
325  PU = [
326  'Reco',
327  'RecoFakeHLT',
328  'HARVEST',
329  'HARVESTFakeHLT',
330  'RecoGlobal',
331  'HARVESTGlobal',
332  'RecoNano',
333  'RecoNanoFakeHLT',
334  'HARVESTNano',
335  'HARVESTNanoFakeHLT',
336  ],
337 
338 
339  suffix = '_trackingOnly',
340  offset = 0.1,
341 )
342 upgradeWFs['trackingOnly'].step3 = {
343  '-s': 'RAW2DIGI,RECO:reconstruction_trackingOnly,VALIDATION:@trackingOnlyValidation,DQM:@trackingOnlyDQM',
344  '--datatier':'GEN-SIM-RECO,DQMIO',
345  '--eventcontent':'RECOSIM,DQM',
346 }
347 # used outside of upgrade WFs
348 step3_trackingOnly = upgradeWFs['trackingOnly'].step3
349 
351  def setup__(self, step, stepName, stepDict, k, properties):
352  if 'Reco' in step and stepDict[step][k]['--era']=='Run2_2017':
353  stepDict[stepName][k] = merge([{'--era': 'Run2_2017_trackingRun2'}, stepDict[step][k]])
354  def condition_(self, fragment, stepList, key, hasHarvest):
355  return '2017' in key
356 upgradeWFs['trackingRun2'] = UpgradeWorkflow_trackingRun2(
357  steps = [
358  'Reco',
359  'RecoFakeHLT',
360  ],
361  PU = [],
362  suffix = '_trackingRun2',
363  offset = 0.2,
364 )
365 
367  def setup__(self, step, stepName, stepDict, k, properties):
368  if 'Reco' in step and stepDict[step][k]['--era']=='Run2_2017':
369  stepDict[stepName][k] = merge([{'--era': 'Run2_2017_trackingRun2'}, self.step3, stepDict[step][k]])
370  elif 'HARVEST' in step: stepDict[stepName][k] = merge([{'-s': 'HARVESTING:@trackingOnlyValidation+@trackingOnlyDQM'}, stepDict[step][k]])
371  def condition_(self, fragment, stepList, key, hasHarvest):
372  return '2017' in key
373 upgradeWFs['trackingOnlyRun2'] = UpgradeWorkflow_trackingOnlyRun2(
374  steps = [
375  'Reco',
376  'RecoFakeHLT',
377  'HARVEST',
378  'HARVESTFakeHLT',
379  ],
380  PU = [],
381  suffix = '_trackingOnlyRun2',
382  offset = 0.3,
383 )
384 upgradeWFs['trackingOnlyRun2'].step3 = upgradeWFs['trackingOnly'].step3
385 
387  def setup__(self, step, stepName, stepDict, k, properties):
388  if 'Reco' in step and stepDict[step][k]['--era']=='Run2_2017':
389  stepDict[stepName][k] = merge([{'--era': 'Run2_2017_trackingLowPU'}, stepDict[step][k]])
390  def condition_(self, fragment, stepList, key, hasHarvest):
391  return '2017' in key
392 upgradeWFs['trackingLowPU'] = UpgradeWorkflow_trackingLowPU(
393  steps = [
394  'Reco',
395  'RecoFakeHLT',
396  ],
397  PU = [],
398  suffix = '_trackingLowPU',
399  offset = 0.4,
400 )
401 
403  def setup__(self, step, stepName, stepDict, k, properties):
404  if 'Reco' in step: stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
405  # skip ALCA step as products might not be available
406  elif 'ALCA' in step: stepDict[stepName][k] = None
407  elif 'HARVEST' in step: stepDict[stepName][k] = merge([{'-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'}, stepDict[step][k]])
408  def condition_(self, fragment, stepList, key, hasHarvest):
409  return ('2022' in key or '2023' in key or '2024' in key or '2026' in key or 'HI' in key) and ('FS' not in key)
410 upgradeWFs['pixelTrackingOnly'] = UpgradeWorkflow_pixelTrackingOnly(
411  steps = [
412  'Reco',
413  'RecoFakeHLT',
414  'HARVEST',
415  'HARVESTFakeHLT',
416  'RecoGlobal',
417  'HARVESTGlobal',
418  'RecoNano',
419  'RecoNanoFakeHLT',
420  'HARVESTNano',
421  'HARVESTNanoFakeHLT',
422  'ALCA',
423  'ALCAPhase2'
424  ],
425  PU = [],
426  suffix = '_pixelTrackingOnly',
427  offset = 0.5,
428 )
429 upgradeWFs['pixelTrackingOnly'].step3 = {
430  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
431  '--datatier': 'GEN-SIM-RECO,DQMIO',
432  '--eventcontent': 'RECOSIM,DQM',
433 }
434 
436  def setup__(self, step, stepName, stepDict, k, properties):
437  if ('Digi' in step and 'NoHLT' not in step) or ('HLTOnly' in step): stepDict[stepName][k] = merge([self.step2, stepDict[step][k]])
438  if 'Reco' in step: stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
439  def condition_(self, fragment, stepList, key, hasHarvest):
440  return ('2017' in key or '2021' in key or '2023' in key or '2024' in key) and ('FS' not in key)
441 upgradeWFs['trackingMkFit'] = UpgradeWorkflow_trackingMkFit(
442  steps = [
443  'Digi',
444  'HLTOnly',
445  'DigiTrigger',
446  'Reco',
447  'RecoFakeHLT',
448  'RecoGlobal',
449  'RecoNano',
450  'RecoNanoFakeHLT',
451  ],
452  PU = [],
453  suffix = '_trackingMkFit',
454  offset = 0.7,
455 )
456 upgradeWFs['trackingMkFit'].step2 = {
457  '--customise': 'RecoTracker/MkFit/customizeHLTIter0ToMkFit.customizeHLTIter0ToMkFit'
458 }
459 upgradeWFs['trackingMkFit'].step3 = {
460  '--procModifiers': 'trackingMkFitDevel'
461 }
462 
463 # mkFit for phase-2 initialStep tracking
465  def setup__(self, step, stepName, stepDict, k, properties):
466  if 'Reco' in step: stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
467  def condition_(self, fragment, stepList, key, hasHarvest):
468  return ('2026' in key)
469 upgradeWFs['trackingMkFitPhase2'] = UpgradeWorkflow_trackingMkFitPhase2(
470  steps = [
471  'Reco',
472  'RecoFakeHLT',
473  'RecoGlobal',
474  'RecoNano',
475  'RecoNanoFakeHLT',
476  ],
477  PU = [],
478  suffix = '_trackingMkFitPhase2',
479  offset = 0.702,
480 )
481 upgradeWFs['trackingMkFitPhase2'].step3 = {
482  '--procModifiers': 'trackingMkFitCommon,trackingMkFitInitialStep'
483 }
484 
485 #DeepCore seeding for JetCore iteration workflow
487  def setup_(self, step, stepName, stepDict, k, properties):
488  # skip ALCA and Nano steps (but not RecoNano or HARVESTNano for Run3)
489  if 'ALCA' in step or 'Nano'==step:
490  stepDict[stepName][k] = None
491  elif 'Reco' in step or 'HARVEST' in step: stepDict[stepName][k] = merge([{'--procModifiers': 'seedingDeepCore'}, stepDict[step][k]])
492  def condition(self, fragment, stepList, key, hasHarvest):
493  result = (fragment=="QCD_Pt_1800_2400_14" or fragment=="TTbar_14TeV" ) and ('2021' in key or '2024' in key) and hasHarvest
494  return result
495 upgradeWFs['seedingDeepCore'] = UpgradeWorkflow_seedingDeepCore(
496  steps = [
497  'Reco',
498  'RecoFakeHLT',
499  'HARVEST',
500  'HARVESTFakeHLT',
501  'RecoGlobal',
502  'HARVESTGlobal',
503  'RecoNano',
504  'RecoNanoFakeHLT',
505  'HARVESTNano',
506  'HARVESTNanoFakeHLT',
507  'Nano',
508  'ALCA',
509  ],
510  PU = [
511  'Reco',
512  'RecoFakeHLT',
513  'RecoGlobal',
514  'HARVESTGlobal',
515  'RecoNano',
516  'RecoNanoFakeHLT',
517  'HARVESTNano',
518  'HARVESTNanoFakeHLT',
519  ],
520  suffix = '_seedingDeepCore',
521  offset = 0.17,
522 )
523 
524 #Workflow to enable displacedRegionalStep tracking iteration
526  def setup__(self, step, stepName, stepDict, k, properties):
527  if 'Reco' in step: stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
528  def condition_(self, fragment, stepList, key, hasHarvest):
529  return ('2021' in key or '2023' in key or '2024' in key)
530 upgradeWFs['displacedRegional'] = UpgradeWorkflow_displacedRegional(
531  steps = [
532  'Reco',
533  'RecoFakeHLT',
534  'RecoGlobal',
535  'RecoNano',
536  'RecoNanoFakeHLT',
537  ],
538  PU = [],
539  suffix = '_displacedRegional',
540  offset = 0.701,
541 )
542 upgradeWFs['displacedRegional'].step3 = {
543  '--procModifiers': 'displacedRegionalTracking'
544 }
545 
546 # Vector Hits workflows
548  def setup_(self, step, stepName, stepDict, k, properties):
549  stepDict[stepName][k] = merge([{'--procModifiers': 'vectorHits'}, stepDict[step][k]])
550  def condition(self, fragment, stepList, key, hasHarvest):
551  return (fragment=="TTbar_14TeV" or fragment=="SingleMuPt10Extended") and '2026' in key
552 upgradeWFs['vectorHits'] = UpgradeWorkflow_vectorHits(
553  steps = [
554  'RecoGlobal',
555  'HARVESTGlobal'
556  ],
557  PU = [
558  'RecoGlobal',
559  'HARVESTGlobal'
560  ],
561  suffix = '_vectorHits',
562  offset = 0.9,
563 )
564 
565 # WeightedMeanFitter vertexing workflows
567  def __init__(self, **kwargs):
568  # adapt the parameters for the UpgradeWorkflow init method
569  super(UpgradeWorkflow_weightedVertex, self).__init__(
570  steps = [
571  'Reco',
572  'RecoFakeHLT',
573  'HARVEST',
574  'HARVESTFakeHLT',
575  'RecoGlobal',
576  'HARVESTGlobal',
577  'RecoNano',
578  'RecoNanoFakeHLT',
579  'HARVESTNano',
580  'HARVESTNanoFakeHLT',
581  ],
582  PU = [
583  'Reco',
584  'RecoFakeHLT',
585  'HARVEST',
586  'HARVESTFakeHLT',
587  'RecoGlobal',
588  'HARVESTGlobal',
589  'RecoNano',
590  'RecoNanoFakeHLT',
591  'HARVESTNano',
592  'HARVESTNanoFakeHLT',
593  ],
594  **kwargs)
595 
596  def setup_(self, step, stepName, stepDict, k, properties):
597  # temporarily remove trigger & downstream steps
598  if 'Reco' in step:
599  mod = {'--procModifiers': 'weightedVertexing,vertexInBlocks', '--datatier':'GEN-SIM-RECO,DQMIO',
600  '--eventcontent':'RECOSIM,DQM'}
601  stepDict[stepName][k] = merge([mod,self.step3, stepDict[step][k]])
602  if 'HARVEST' in step:
603  stepDict[stepName][k] = merge([self.step4,stepDict[step][k]])
604 
605  def condition(self, fragment, stepList, key, hasHarvest):
606  # select only a subset of the workflows
607  selected = [
608  ('2021' in key and fragment == "TTbar_14TeV" and 'FS' not in key),
609  ('2024' in key and fragment == "TTbar_14TeV"),
610  ('2026' in key and fragment == "TTbar_14TeV")
611  ]
612  result = any(selected) and hasHarvest
613 
614  return result
615 
616 
617 upgradeWFs['weightedVertex'] = UpgradeWorkflow_weightedVertex(
618  suffix = '_weightedVertex',
619  offset = 0.278,
620 )
621 
622 upgradeWFs['weightedVertex'].step3 = {}
623 upgradeWFs['weightedVertex'].step4 = {}
624 
625 upgradeWFs['weightedVertexTrackingOnly'] = UpgradeWorkflow_weightedVertex(
626  suffix = '_weightedVertexTrackingOnly',
627  offset = 0.279,
628 )
629 
630 upgradeWFs['weightedVertexTrackingOnly'].step3 = {
631  '-s': 'RAW2DIGI,RECO:reconstruction_trackingOnly,VALIDATION:@trackingOnlyValidation,DQM:@trackingOnlyDQM',
632  '--datatier':'GEN-SIM-RECO,DQMIO',
633  '--eventcontent':'RECOSIM,DQM',
634 }
635 
636 upgradeWFs['weightedVertexTrackingOnly'].step4 = {
637  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'
638 }
639 
640 # Special TICL Pattern recognition Workflows
642  def setup_(self, step, stepName, stepDict, k, properties):
643  if 'RecoGlobal' in step:
644  stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
645  if 'HARVESTGlobal' in step:
646  stepDict[stepName][k] = merge([self.step4, stepDict[step][k]])
647  def condition(self, fragment, stepList, key, hasHarvest):
648  return (fragment=="TTbar_14TeV" or 'CloseByPGun_CE' in fragment) and '2026' in key
649 upgradeWFs['ticl_clue3D'] = UpgradeWorkflow_ticl_clue3D(
650  steps = [
651  'RecoGlobal',
652  'HARVESTGlobal'
653  ],
654  PU = [
655  'RecoGlobal',
656  'HARVESTGlobal'
657  ],
658  suffix = '_ticl_clue3D',
659  offset = 0.201,
660 )
661 upgradeWFs['ticl_clue3D'].step3 = {'--procModifiers': 'clue3D'}
662 upgradeWFs['ticl_clue3D'].step4 = {'--procModifiers': 'clue3D'}
663 
665  def setup_(self, step, stepName, stepDict, k, properties):
666  if 'RecoGlobal' in step:
667  stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
668  if 'HARVESTGlobal' in step:
669  stepDict[stepName][k] = merge([self.step4, stepDict[step][k]])
670  def condition(self, fragment, stepList, key, hasHarvest):
671  return (fragment=="TTbar_14TeV" or 'CloseByPGun_CE' in fragment) and '2026' in key
672 upgradeWFs['ticl_FastJet'] = UpgradeWorkflow_ticl_FastJet(
673  steps = [
674  'RecoGlobal',
675  'HARVESTGlobal'
676  ],
677  PU = [
678  'RecoGlobal',
679  'HARVESTGlobal'
680  ],
681  suffix = '_ticl_FastJet',
682  offset = 0.202,
683 )
684 upgradeWFs['ticl_FastJet'].step3 = {'--procModifiers': 'fastJetTICL'}
685 upgradeWFs['ticl_FastJet'].step4 = {'--procModifiers': 'fastJetTICL'}
686 
688  def setup_(self, step, stepName, stepDict, k, properties):
689  if ('Digi' in step and 'NoHLT' not in step) or ('HLTOnly' in step):
690  stepDict[stepName][k] = merge([self.step2, stepDict[step][k]])
691  if 'RecoGlobal' in step:
692  stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
693  if 'HARVESTGlobal' in step:
694  stepDict[stepName][k] = merge([self.step4, stepDict[step][k]])
695  def condition(self, fragment, stepList, key, hasHarvest):
696  return (fragment=="TTbar_14TeV" or 'CloseByP' in fragment or 'Eta1p7_2p7' in fragment) and '2026' in key
697 
698 upgradeWFs['ticl_v5'] = UpgradeWorkflow_ticl_v5(
699  steps = [
700  'HLTOnly',
701  'DigiTrigger',
702  'RecoGlobal',
703  'HARVESTGlobal'
704  ],
705  PU = [
706  'HLTOnly',
707  'DigiTrigger',
708  'RecoGlobal',
709  'HARVESTGlobal'
710  ],
711  suffix = '_ticl_v5',
712  offset = 0.203,
713 )
714 upgradeWFs['ticl_v5'].step2 = {'--procModifiers': 'ticl_v5'}
715 upgradeWFs['ticl_v5'].step3 = {'--procModifiers': 'ticl_v5'}
716 upgradeWFs['ticl_v5'].step4 = {'--procModifiers': 'ticl_v5'}
717 
719  def setup_(self, step, stepName, stepDict, k, properties):
720  if ('Digi' in step and 'NoHLT' not in step) or ('HLTOnly' in step):
721  stepDict[stepName][k] = merge([self.step2, stepDict[step][k]])
722  if 'RecoGlobal' in step:
723  stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
724  if 'HARVESTGlobal' in step:
725  stepDict[stepName][k] = merge([self.step4, stepDict[step][k]])
726  def condition(self, fragment, stepList, key, hasHarvest):
727  return (fragment=="ZEE_14" or 'Eta1p7_2p7' in fragment) and '2026' in key
728 upgradeWFs['ticl_v5_superclustering_mustache_ticl'] = UpgradeWorkflow_ticl_v5_superclustering(
729  steps = [
730  'HLTOnly',
731  'DigiTrigger',
732  'RecoGlobal',
733  'HARVESTGlobal'
734  ],
735  PU = [
736  'HLTOnly',
737  'DigiTrigger',
738  'RecoGlobal',
739  'HARVESTGlobal'
740  ],
741  suffix = '_ticl_v5_mustache',
742  offset = 0.204,
743 )
744 upgradeWFs['ticl_v5_superclustering_mustache_ticl'].step2 = {'--procModifiers': 'ticl_v5,ticl_superclustering_mustache_ticl'}
745 upgradeWFs['ticl_v5_superclustering_mustache_ticl'].step3 = {'--procModifiers': 'ticl_v5,ticl_superclustering_mustache_ticl'}
746 upgradeWFs['ticl_v5_superclustering_mustache_ticl'].step4 = {'--procModifiers': 'ticl_v5,ticl_superclustering_mustache_ticl'}
747 
748 upgradeWFs['ticl_v5_superclustering_mustache_pf'] = UpgradeWorkflow_ticl_v5_superclustering(
749  steps = [
750  'RecoGlobal',
751  'HARVESTGlobal'
752  ],
753  PU = [
754  'RecoGlobal',
755  'HARVESTGlobal'
756  ],
757  suffix = '_ticl_v5_mustache_pf',
758  offset = 0.205,
759 )
760 upgradeWFs['ticl_v5_superclustering_mustache_pf'].step3 = {'--procModifiers': 'ticl_v5,ticl_superclustering_mustache_pf'}
761 upgradeWFs['ticl_v5_superclustering_mustache_pf'].step4 = {'--procModifiers': 'ticl_v5,ticl_superclustering_mustache_pf'}
762 
763 # Track DNN workflows
765  def setup_(self, step, stepName, stepDict, k, properties):
766  stepDict[stepName][k] = merge([{'--procModifiers': 'trackdnn'}, stepDict[step][k]])
767 
768  def condition(self, fragment, stepList, key, hasHarvest):
769  return fragment=="TTbar_14TeV" and '2021' in key
770 upgradeWFs['trackdnn'] = UpgradeWorkflow_trackdnn(
771  steps = [
772  'Reco',
773  'RecoFakeHLT',
774  'RecoNano',
775  'RecoNanoFakeHLT',
776  ],
777  PU = [
778  'Reco',
779  'RecoFakeHLT',
780  'RecoNano',
781  'RecoNanoFakeHLT',
782  ],
783  suffix = '_trackdnn',
784  offset = 0.91,
785 )
786 
787 
788 # MLPF workflows
790  def setup_(self, step, stepName, stepDict, k, properties):
791  if 'Reco' in step:
792  stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
793  def condition(self, fragment, stepList, key, hasHarvest):
794  return (fragment=="TTbar_14TeV" or fragment=="QCD_FlatPt_15_3000HS_14") and '2021PU' in key
795 
796 upgradeWFs['mlpf'] = UpgradeWorkflow_mlpf(
797  steps = [
798  'Reco',
799  'RecoFakeHLT',
800  'RecoNano',
801  'RecoNanoFakeHLT',
802  ],
803  PU = [
804  'Reco',
805  'RecoFakeHLT',
806  'RecoNano',
807  'RecoNanoFakeHLT',
808  ],
809  suffix = '_mlpf',
810  offset = 0.13,
811 )
812 upgradeWFs['mlpf'].step3 = {
813  '--datatier': 'GEN-SIM-RECO,RECOSIM,MINIAODSIM,NANOAODSIM,DQMIO',
814  '--eventcontent': 'FEVTDEBUGHLT,RECOSIM,MINIAODSIM,NANOEDMAODSIM,DQM',
815  '--procModifiers': 'mlpf'
816 }
817 
818 
819 # ECAL DeepSC clustering studies workflow
821  def setup_(self, step, stepName, stepDict, k, properties):
822  if 'Reco' in step:
823  stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
824  def condition(self, fragment, stepList, key, hasHarvest):
825  return (fragment=="ZEE_14" or fragment=="TTbar_14TeV" or fragment=="WprimeTolNu_M3000_13TeV_pythia8"
826  or fragment=="DisplacedSUSY_stopToBottom_M_300_1000mm_13" or fragment=="RunEGamma2018D" )
827 
828 upgradeWFs['ecalDeepSC'] = UpgradeWorkflow_ecalclustering(
829  steps = [
830  'Reco',
831  'RecoFakeHLT',
832  'RecoNano',
833  'RecoNanoFakeHLT',
834  ],
835  PU = [
836  'Reco',
837  'RecoFakeHLT',
838  'RecoNano',
839  'RecoNanoFakeHLT',
840  ],
841  suffix = '_ecalDeepSC',
842  offset = 0.19,
843 )
844 upgradeWFs['ecalDeepSC'].step3 = {
845  '--datatier': 'RECOSIM,MINIAODSIM,NANOAODSIM,DQMIO',
846  '--eventcontent': 'RECOSIM,MINIAODSIM,NANOEDMAODSIM,DQM',
847  '--procModifiers': 'ecal_deepsc'
848 }
849 
850 
851 # photonDRN workflows
853  def setup_(self, step, stepName, stepDict, k, properties):
854  if 'Reco' in step:
855  stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
856  def condition(self, fragment, stepList, key, hasHarvest):
857  return '2018' in key and "SingleGamma" in fragment
858 
859 upgradeWFs['photonDRN'] = UpgradeWorkflow_photonDRN(
860  steps = [
861  'RecoFakeHLT',
862  'RecoNanoFakeHLT',
863  ],
864  PU = [
865  'RecoFakeHLT',
866  'RecoNanoFakeHLT',
867  ],
868  suffix = '_photonDRN',
869  offset = 0.31,
870 )
871 upgradeWFs['photonDRN'].step3 = {
872  '--procModifiers': 'enableSonicTriton,photonDRN'
873 }
874 
875 
876 # Patatrack workflows (NoPU and PU):
877 # - TTbar_14, ZMM_14", ZEE_14, ZTT_14, NuGun, SingleMu, QCD_Pt15To7000_Flat for
878 # > 2021, 2022, 2023, 2024 and 2026 conditions, TTbar
879 # - Hydjet for HI conditions
881  def __init__(self, digi = {}, reco = {}, mini = {}, harvest = {}, **kwargs):
882  # adapt the parameters for the UpgradeWorkflow init method
883  super(PatatrackWorkflow, self).__init__(
884  steps = [
885  'Digi',
886  'HLTOnly',
887  'DigiTrigger',
888  'Reco',
889  'RecoFakeHLT',
890  'HARVEST',
891  'HARVESTFakeHLT',
892  'RecoGlobal',
893  'HARVESTGlobal',
894  'RecoNano',
895  'RecoNanoFakeHLT',
896  'HARVESTNano',
897  'HARVESTNanoFakeHLT',
898  'MiniAOD',
899  'Nano',
900  'ALCA',
901  'ALCAPhase2'
902  ],
903  PU = [
904  'Digi',
905  'HLTOnly',
906  'DigiTrigger',
907  'Reco',
908  'RecoFakeHLT',
909  'HARVEST',
910  'HARVESTFakeHLT',
911  'RecoGlobal',
912  'HARVESTGlobal',
913  'RecoNano',
914  'RecoNanoFakeHLT',
915  'HARVESTNano',
916  'HARVESTNanoFakeHLT',
917  'MiniAOD',
918  'Nano',
919  'ALCA',
920  'ALCAPhase2'
921  ],
922  **kwargs)
923  self.__digi = digi
924  self.__reco = reco
925  if 'DQM' in self.__reco:
926  self.__reco.update({
927  '--datatier': 'GEN-SIM-RECO,DQMIO',
928  '--eventcontent': 'RECOSIM,DQM'
929  })
930  self.__mini = mini
931  self.__harvest = harvest
932 
933  def condition(self, fragment, stepList, key, hasHarvest):
934  # select only a subset of the workflows
935  years = ['2021','2023','2024','2026']
936  fragments = ["TTbar_14","ZMM_14","ZEE_14","ZTT_14","NuGun","SingleMu","QCD_Pt15To7000_Flat"]
937  selected = [
938  (any(y in key for y in years) and ('FS' not in key) and any( f in fragment for f in fragments)),
939  (('HI' in key) and ('Hydjet' in fragment) and ("PixelOnly" in self.suffix) )
940  ]
941  result = any(selected) and hasHarvest
942 
943  return result
944 
945  def setup_(self, step, stepName, stepDict, k, properties):
946  # skip ALCA and Nano steps (but not RecoNano or HARVESTNano for Run3)
947  if 'ALCA' in step or 'Nano'==step:
948  stepDict[stepName][k] = None
949  elif ('Digi' in step and "NoHLT" not in step) or 'HLTOnly' in step:
950  if self.__digi is None:
951  stepDict[stepName][k] = None
952  else:
953  stepDict[stepName][k] = merge([self.__digi, stepDict[step][k]])
954  elif 'Reco' in step:
955  if self.__reco is None:
956  stepDict[stepName][k] = None
957  else:
958  stepDict[stepName][k] = merge([self.__reco, stepDict[step][k]])
959  if 'Phase2' in stepDict[stepName][k]['--era']:
960  if 'DQM:@standardDQM+@ExtraHLT' in stepDict[stepName][k]['-s']:
961  stepDict[stepName][k]['-s'] = stepDict[stepName][k]['-s'].replace('DQM:@standardDQM+@ExtraHLT','DQM:@phase2')
962  if 'VALIDATION:@standardValidation' in stepDict[stepName][k]['-s']:
963  stepDict[stepName][k]['-s'] = stepDict[stepName][k]['-s'].replace('VALIDATION:@standardValidation','VALIDATION:@phase2Validation')
964 
965 
966  elif 'MiniAOD' in step:
967  if self.__mini is None:
968  stepDict[stepName][k] = None
969  else:
970  stepDict[stepName][k] = merge([self.__mini, stepDict[step][k]])
971  elif 'HARVEST' in step:
972  if self.__harvest is None:
973  stepDict[stepName][k] = None
974  else:
975  stepDict[stepName][k] = merge([self.__harvest, stepDict[step][k]])
976 
977 # Pixel-only quadruplets workflow running on CPU
978 # - HLT on CPU
979 # - Pixel-only reconstruction on CPU, with DQM and validation
980 # - harvesting
981 
982 upgradeWFs['PatatrackPixelOnlyCPU'] = PatatrackWorkflow(
983  digi = {
984  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
985  },
986  reco = {
987  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
988  '--procModifiers': 'pixelNtupletFit'
989  },
990  harvest = {
991  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'
992  },
993  suffix = 'Patatrack_PixelOnlyCPU',
994  offset = 0.501,
995 )
996 
997 # Pixel-only quadruplets workflow running on CPU or GPU
998 # - HLT on GPU (optional)
999 # - Pixel-only reconstruction on GPU (optional), with DQM and validation
1000 # - harvesting
1001 upgradeWFs['PatatrackPixelOnlyGPU'] = PatatrackWorkflow(
1002  digi = {
1003  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1004  '--procModifiers': 'gpu'
1005  },
1006  reco = {
1007  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
1008  '--procModifiers': 'pixelNtupletFit,gpu'
1009  },
1010  harvest = {
1011  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'
1012  },
1013  suffix = 'Patatrack_PixelOnlyGPU',
1014  offset = 0.502,
1015 )
1016 
1017 # Pixel-only quadruplets workflow running on CPU and GPU
1018 # - HLT on GPU (required)
1019 # - Pixel-only reconstruction on both CPU and GPU, with DQM and validation for GPU-vs-CPU comparisons
1020 # - harvesting
1021 upgradeWFs['PatatrackPixelOnlyGPUValidation'] = PatatrackWorkflow(
1022  digi = {
1023  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1024  '--accelerators': 'gpu-nvidia',
1025  '--procModifiers': 'gpu'
1026  },
1027  reco = {
1028  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
1029  '--accelerators': 'gpu-nvidia',
1030  '--procModifiers': 'pixelNtupletFit,gpuValidation'
1031  },
1032  harvest = {
1033  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM',
1034  '--procModifiers': 'gpuValidation'
1035  },
1036  suffix = 'Patatrack_PixelOnlyGPU_Validation',
1037  offset = 0.503,
1038 )
1039 
1040 # Pixel-only quadruplets workflow running on CPU or GPU, trimmed down for benchmarking
1041 # - HLT on GPU (optional)
1042 # - Pixel-only reconstruction on GPU (optional)
1043 upgradeWFs['PatatrackPixelOnlyGPUProfiling'] = PatatrackWorkflow(
1044  digi = {
1045  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1046  '--procModifiers': 'gpu'
1047  },
1048  reco = {
1049  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly',
1050  '--procModifiers': 'pixelNtupletFit,gpu',
1051  '--customise' : 'RecoTracker/Configuration/customizePixelOnlyForProfiling.customizePixelOnlyForProfilingGPUOnly'
1052  },
1053  harvest = None,
1054  suffix = 'Patatrack_PixelOnlyGPU_Profiling',
1055  offset = 0.504,
1056 )
1057 
1058 # Pixel-only triplets workflow running on CPU
1059 # - HLT on CPU
1060 # - Pixel-only reconstruction on CPU, with DQM and validation
1061 # - harvesting
1062 upgradeWFs['PatatrackPixelOnlyTripletsCPU'] = PatatrackWorkflow(
1063  digi = {
1064  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1065  },
1066  reco = {
1067  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
1068  '--procModifiers': 'pixelNtupletFit',
1069  '--customise' : 'RecoTracker/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets'
1070  },
1071  harvest = {
1072  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'
1073  },
1074  suffix = 'Patatrack_PixelOnlyTripletsCPU',
1075  offset = 0.505,
1076 )
1077 
1078 # Pixel-only triplets workflow running on CPU or GPU
1079 # - HLT on GPU (optional)
1080 # - Pixel-only reconstruction on GPU (optional), with DQM and validation
1081 # - harvesting
1082 upgradeWFs['PatatrackPixelOnlyTripletsGPU'] = PatatrackWorkflow(
1083  digi = {
1084  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1085  '--procModifiers': 'gpu'
1086  },
1087  reco = {
1088  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
1089  '--procModifiers': 'pixelNtupletFit,gpu',
1090  '--customise': 'RecoTracker/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets'
1091  },
1092  harvest = {
1093  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'
1094  },
1095  suffix = 'Patatrack_PixelOnlyTripletsGPU',
1096  offset = 0.506,
1097 )
1098 
1099 # Pixel-only triplets workflow running on CPU and GPU
1100 # - HLT on GPU (required)
1101 # - Pixel-only reconstruction on both CPU and GPU, with DQM and validation for GPU-vs-CPU comparisons
1102 # - harvesting
1103 upgradeWFs['PatatrackPixelOnlyTripletsGPUValidation'] = PatatrackWorkflow(
1104  digi = {
1105  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1106  '--accelerators': 'gpu-nvidia',
1107  '--procModifiers': 'gpu'
1108  },
1109  reco = {
1110  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
1111  '--accelerators': 'gpu-nvidia',
1112  '--procModifiers': 'pixelNtupletFit,gpuValidation',
1113  '--customise': 'RecoTracker/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets'
1114  },
1115  harvest = {
1116  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM',
1117  '--procModifiers': 'gpuValidation',
1118  },
1119  suffix = 'Patatrack_PixelOnlyTripletsGPU_Validation',
1120  offset = 0.507,
1121 )
1122 
1123 # Pixel-only triplets workflow running on CPU or GPU, trimmed down for benchmarking
1124 # - HLT on GPU (optional)
1125 # - Pixel-only reconstruction on GPU (optional)
1126 upgradeWFs['PatatrackPixelOnlyTripletsGPUProfiling'] = PatatrackWorkflow(
1127  digi = {
1128  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1129  '--procModifiers': 'gpu'
1130  },
1131  reco = {
1132  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly',
1133  '--procModifiers': 'pixelNtupletFit,gpu',
1134  '--customise': 'RecoTracker/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets,RecoTracker/Configuration/customizePixelOnlyForProfiling.customizePixelOnlyForProfilingGPUOnly'
1135  },
1136  harvest = None,
1137  suffix = 'Patatrack_PixelOnlyTripletsGPU_Profiling',
1138  offset = 0.508,
1139 )
1140 
1141 # ECAL-only workflow running on CPU or GPU with Alpaka code
1142 # - HLT with Alpaka
1143 # - ECAL-only reconstruction with Alpaka, with DQM and validation
1144 # - harvesting
1145 upgradeWFs['PatatrackECALOnlyAlpaka'] = PatatrackWorkflow(
1146  digi = {
1147  # customize the ECAL Local Reco part of the HLT menu for Alpaka
1148  '--procModifiers': 'alpaka',
1149  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1150  },
1151  reco = {
1152  '-s': 'RAW2DIGI:RawToDigi_ecalOnly,RECO:reconstruction_ecalOnly,VALIDATION:@ecalOnlyValidation,DQM:@ecalOnly',
1153  '--procModifiers': 'alpaka',
1154  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1155  },
1156  harvest = {
1157  '-s': 'HARVESTING:@ecalOnlyValidation+@ecal'
1158  },
1159  suffix = 'Patatrack_ECALOnlyAlpaka',
1160  offset = 0.412,
1161 )
1162 
1163 # ECAL-only workflow running on CPU
1164 # - HLT on CPU
1165 # - ECAL-only reconstruction on CPU, with DQM and validation
1166 # - harvesting
1167 upgradeWFs['PatatrackECALOnlyCPU'] = PatatrackWorkflow(
1168  digi = {
1169  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1170  },
1171  reco = {
1172  '-s': 'RAW2DIGI:RawToDigi_ecalOnly,RECO:reconstruction_ecalOnly,VALIDATION:@ecalOnlyValidation,DQM:@ecalOnly',
1173  },
1174  harvest = {
1175  '-s': 'HARVESTING:@ecalOnlyValidation+@ecal'
1176  },
1177  suffix = 'Patatrack_ECALOnlyCPU',
1178  offset = 0.511,
1179 )
1180 
1181 # ECAL-only workflow running on CPU or GPU
1182 # - HLT on GPU (optional)
1183 # - ECAL-only reconstruction on GPU (optional), with DQM and validation
1184 # - harvesting
1185 upgradeWFs['PatatrackECALOnlyGPU'] = PatatrackWorkflow(
1186  digi = {
1187  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1188  '--procModifiers': 'gpu'
1189  },
1190  reco = {
1191  '-s': 'RAW2DIGI:RawToDigi_ecalOnly,RECO:reconstruction_ecalOnly,VALIDATION:@ecalOnlyValidation,DQM:@ecalOnly',
1192  '--procModifiers': 'gpu'
1193  },
1194  harvest = {
1195  '-s': 'HARVESTING:@ecalOnlyValidation+@ecal'
1196  },
1197  suffix = 'Patatrack_ECALOnlyGPU',
1198  offset = 0.512,
1199 )
1200 
1201 # ECAL-only workflow running on CPU and GPU
1202 # - HLT on GPU (required)
1203 # - ECAL-only reconstruction on both CPU and GPU, with DQM and validation for GPU-vs-CPU comparisons
1204 # - harvesting
1205 upgradeWFs['PatatrackECALOnlyGPUValidation'] = PatatrackWorkflow(
1206  digi = {
1207  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1208  '--accelerators': 'gpu-nvidia',
1209  '--procModifiers': 'gpu'
1210  },
1211  reco = {
1212  '-s': 'RAW2DIGI:RawToDigi_ecalOnly,RECO:reconstruction_ecalOnly,VALIDATION:@ecalOnlyValidation,DQM:@ecalOnly',
1213  '--accelerators': 'gpu-nvidia',
1214  '--procModifiers': 'gpuValidation'
1215  },
1216  harvest = {
1217  '-s': 'HARVESTING:@ecalOnlyValidation+@ecal'
1218  },
1219  suffix = 'Patatrack_ECALOnlyGPU_Validation',
1220  offset = 0.513,
1221 )
1222 
1223 # ECAL-only workflow running on CPU or GPU, trimmed down for benchmarking
1224 # - HLT on GPU (optional)
1225 # - ECAL-only reconstruction on GPU (optional)
1226 upgradeWFs['PatatrackECALOnlyGPUProfiling'] = PatatrackWorkflow(
1227  digi = {
1228  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1229  '--procModifiers': 'gpu'
1230  },
1231  reco = {
1232  '-s': 'RAW2DIGI:RawToDigi_ecalOnly,RECO:reconstruction_ecalOnly',
1233  '--procModifiers': 'gpu',
1234  '--customise' : 'RecoLocalCalo/Configuration/customizeEcalOnlyForProfiling.customizeEcalOnlyForProfilingGPUOnly'
1235  },
1236  harvest = None,
1237  suffix = 'Patatrack_ECALOnlyGPU_Profiling',
1238  offset = 0.514,
1239 )
1240 
1241 # HCAL-only workflow running on CPU
1242 # - HLT on CPU
1243 # - HCAL-only reconstruction on CPU, with DQM and validation
1244 # - harvesting
1245 upgradeWFs['PatatrackHCALOnlyCPU'] = PatatrackWorkflow(
1246  digi = {
1247  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1248  },
1249  reco = {
1250  '-s': 'RAW2DIGI:RawToDigi_hcalOnly,RECO:reconstruction_hcalOnly,VALIDATION:@hcalOnlyValidation,DQM:@hcalOnly+@hcal2Only',
1251  },
1252  harvest = {
1253  '-s': 'HARVESTING:@hcalOnlyValidation+@hcalOnly+@hcal2Only'
1254  },
1255  suffix = 'Patatrack_HCALOnlyCPU',
1256  offset = 0.521,
1257 )
1258 
1259 # HCAL-only workflow running on CPU or GPU
1260 # - HLT on GPU (optional)
1261 # - HCAL-only reconstruction on GPU (optional), with DQM and validation
1262 # - harvesting
1263 upgradeWFs['PatatrackHCALOnlyGPU'] = PatatrackWorkflow(
1264  digi = {
1265  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1266  '--procModifiers': 'gpu'
1267  },
1268  reco = {
1269  '-s': 'RAW2DIGI:RawToDigi_hcalOnly,RECO:reconstruction_hcalOnly,VALIDATION:@hcalOnlyValidation,DQM:@hcalOnly+@hcal2Only',
1270  '--procModifiers': 'gpu'
1271  },
1272  harvest = {
1273  '-s': 'HARVESTING:@hcalOnlyValidation+@hcalOnly+@hcal2Only'
1274  },
1275  suffix = 'Patatrack_HCALOnlyGPU',
1276  offset = 0.522,
1277 )
1278 
1279 # HCAL-only workflow running on CPU and GPU
1280 # - HLT on GPU (required)
1281 # - HCAL-only reconstruction on both CPU and GPU, with DQM and validation for GPU-vs-CPU comparisons
1282 # - harvesting
1283 upgradeWFs['PatatrackHCALOnlyGPUValidation'] = PatatrackWorkflow(
1284  digi = {
1285  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1286  '--accelerators': 'gpu-nvidia',
1287  '--procModifiers': 'gpu'
1288  },
1289  reco = {
1290  '-s': 'RAW2DIGI:RawToDigi_hcalOnly,RECO:reconstruction_hcalOnly,VALIDATION:@hcalOnlyValidation,DQM:@hcalOnly+@hcal2Only',
1291  '--accelerators': 'gpu-nvidia',
1292  '--procModifiers': 'gpuValidation'
1293  },
1294  harvest = {
1295  '-s': 'HARVESTING:@hcalOnlyValidation+@hcal'
1296  },
1297  suffix = 'Patatrack_HCALOnlyGPU_Validation',
1298  offset = 0.523,
1299 )
1300 
1301 # HCAL-only workflow running on CPU or GPU, trimmed down for benchmarking
1302 # - HLT on GPU (optional)
1303 # - HCAL-only reconstruction on GPU (optional)
1304 upgradeWFs['PatatrackHCALOnlyGPUProfiling'] = PatatrackWorkflow(
1305  digi = {
1306  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1307  '--procModifiers': 'gpu'
1308  },
1309  reco = {
1310  '-s': 'RAW2DIGI:RawToDigi_hcalOnly,RECO:reconstruction_hcalOnly',
1311  '--procModifiers': 'gpu',
1312  '--customise' : 'RecoLocalCalo/Configuration/customizeHcalOnlyForProfiling.customizeHcalOnlyForProfilingGPUOnly'
1313  },
1314  harvest = None,
1315  suffix = 'Patatrack_HCALOnlyGPU_Profiling',
1316  offset = 0.524,
1317 )
1318 
1319 # HCAL-PF Only workflow running HCAL local reco on GPU and PF with Alpaka with DQM and Validation
1320 # - HLT-alpaka
1321 # - HCAL-only reconstruction using Alpaka with DQM and Validation
1322 upgradeWFs['PatatrackHCALOnlyAlpakaValidation'] = PatatrackWorkflow(
1323  digi = {
1324  '--procModifiers': 'alpaka',
1325  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1326  },
1327  reco = {
1328  '-s': 'RAW2DIGI:RawToDigi_hcalOnly,RECO:reconstruction_hcalOnly,VALIDATION:@hcalOnlyValidation,DQM:@hcalOnly+@hcal2Only',
1329  '--procModifiers': 'alpaka',
1330  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1331  },
1332  harvest = {
1333  '-s': 'HARVESTING:@hcalOnlyValidation'
1334  },
1335  suffix = 'Patatrack_HCALOnlyAlpaka_Validation',
1336  offset = 0.422,
1337 )
1338 
1339 # HCAL-PF Only workflow running HCAL local reco and PF with Alpaka with cluster level-validation
1340 # - HLT-alpaka
1341 # - HCAL-only reconstruction using GPU and Alpaka with DQM and Validation for PF Alpaka vs CPU comparisons
1342 upgradeWFs['PatatrackHCALOnlyGPUandAlpakaValidation'] = PatatrackWorkflow(
1343  digi = {
1344  '--procModifiers': 'alpaka',
1345  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1346  },
1347  reco = {
1348  '-s': 'RAW2DIGI:RawToDigi_hcalOnly,RECO:reconstruction_hcalOnlyLegacy+reconstruction_hcalOnly,VALIDATION:@hcalOnlyValidation+pfClusterHBHEOnlyAlpakaComparisonSequence,DQM:@hcalOnly+@hcal2Only+hcalOnlyOfflineSourceSequenceAlpaka',
1349  '--procModifiers': 'alpaka',
1350  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1351  },
1352  harvest = {
1353  '-s': 'HARVESTING:@hcalOnlyValidation'
1354  },
1355  suffix = 'Patatrack_HCALOnlyGPUandAlpaka_Validation',
1356  offset = 0.423,
1357 )
1358 
1359 # HCAL-PF Only workflow running HCAL local reco on CPU and PF with Alpaka slimmed for benchmarking
1360 # - HLT-alpaka
1361 # - HCAL-only reconstruction using Alpaka
1362 upgradeWFs['PatatrackHCALOnlyAlpakaProfiling'] = PatatrackWorkflow(
1363  digi = {
1364  '--procModifiers': 'alpaka',
1365  },
1366  reco = {
1367  '-s': 'RAW2DIGI:RawToDigi_hcalOnly,RECO:reconstruction_hcalOnly',
1368  '--procModifiers': 'alpaka'
1369  },
1370  harvest = None,
1371  suffix = 'Patatrack_HCALOnlyAlpaka_Profiling',
1372  offset = 0.424,
1373 )
1374 
1375 # Workflow running the Pixel quadruplets, ECAL and HCAL reconstruction on GPU (optional), PF using Alpaka, together with the full offline reconstruction on CPU
1376 # - HLT on GPU (optional)
1377 # - reconstruction on Alpaka, with DQM and validation
1378 # - harvesting
1379 upgradeWFs['PatatrackFullRecoAlpaka'] = PatatrackWorkflow(
1380  digi = {
1381  '--procModifiers': 'alpaka',
1382  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1383  },
1384  reco = {
1385  # skip the @pixelTrackingOnlyValidation which cannot run together with the full reconstruction
1386  '-s': 'RAW2DIGI:RawToDigi+RawToDigi_pixelOnly,L1Reco,RECO:reconstruction+reconstruction_pixelTrackingOnly,RECOSIM,PAT,VALIDATION:@standardValidation+@miniAODValidation,DQM:@standardDQM+@ExtraHLT+@miniAODDQM+@pixelTrackingOnlyDQM',
1387  '--procModifiers': 'alpaka',
1388  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1389  },
1390  harvest = {
1391  # skip the @pixelTrackingOnlyDQM harvesting
1392  },
1393  suffix = 'Patatrack_FullRecoAlpaka',
1394  offset = 0.492,
1395 )
1396 
1397 # Workflow running the Pixel triplets, ECAL and HCAL reconstruction on GPU (optional), PF using Alpaka, together with the full offline reconstruction on CPU
1398 # - HLT on GPU (optional)
1399 # - reconstruction on Alpaka, with DQM and validation
1400 # - harvesting
1401 upgradeWFs['PatatrackFullRecoAlpaka'] = PatatrackWorkflow(
1402  digi = {
1403  '--procModifiers': 'alpaka',
1404  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1405  },
1406  reco = {
1407  # skip the @pixelTrackingOnlyValidation which cannot run together with the full reconstruction
1408  '-s': 'RAW2DIGI:RawToDigi+RawToDigi_pixelOnly,L1Reco,RECO:reconstruction+reconstruction_pixelTrackingOnly,RECOSIM,PAT,VALIDATION:@standardValidation+@miniAODValidation,DQM:@standardDQM+@ExtraHLT+@miniAODDQM+@pixelTrackingOnlyDQM',
1409  '--procModifiers': 'alpaka',
1410  '--customise' : 'RecoTracker/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets,HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1411  },
1412  harvest = {
1413  # skip the @pixelTrackingOnlyDQM harvesting
1414  },
1415  suffix = 'Patatrack_FullRecoAlpakaTriplets',
1416  offset = 0.496,
1417 )
1418 
1419 # Workflow running the Pixel quadruplets, ECAL and HCAL reconstruction on CPU
1420 # - HLT on CPU
1421 # - reconstruction on CPU, with DQM and validation
1422 # - harvesting
1423 upgradeWFs['PatatrackAllCPU'] = PatatrackWorkflow(
1424  digi = {
1425  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1426  },
1427  reco = {
1428  '-s': 'RAW2DIGI:RawToDigi_pixelOnly+RawToDigi_ecalOnly+RawToDigi_hcalOnly,RECO:reconstruction_pixelTrackingOnly+reconstruction_ecalOnly+reconstruction_hcalOnly,VALIDATION:@pixelTrackingOnlyValidation+@ecalOnlyValidation+@hcalOnlyValidation,DQM:@pixelTrackingOnlyDQM+@ecalOnly+@hcalOnly+@hcal2Only',
1429  '--procModifiers': 'pixelNtupletFit'
1430  },
1431  harvest = {
1432  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM+@ecalOnlyValidation+@ecal+@hcalOnlyValidation+@hcalOnly+@hcal2Only'
1433  },
1434  suffix = 'Patatrack_AllCPU',
1435  offset = 0.581,
1436 )
1437 
1438 # Workflow running the Pixel quadruplets, ECAL and HCAL reconstruction on CPU or GPU
1439 # - HLT on GPU (optional)
1440 # - reconstruction on GPU (optional), with DQM and validation
1441 # - harvesting
1442 upgradeWFs['PatatrackAllGPU'] = PatatrackWorkflow(
1443  digi = {
1444  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1445  '--procModifiers': 'gpu'
1446  },
1447  reco = {
1448  '-s': 'RAW2DIGI:RawToDigi_pixelOnly+RawToDigi_ecalOnly+RawToDigi_hcalOnly,RECO:reconstruction_pixelTrackingOnly+reconstruction_ecalOnly+reconstruction_hcalOnly,VALIDATION:@pixelTrackingOnlyValidation+@ecalOnlyValidation+@hcalOnlyValidation,DQM:@pixelTrackingOnlyDQM+@ecalOnly+@hcalOnly+@hcal2Only',
1449  '--procModifiers': 'pixelNtupletFit,gpu'
1450  },
1451  harvest = {
1452  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM+@ecalOnlyValidation+@ecal+@hcalOnlyValidation+@hcalOnly+@hcal2Only'
1453  },
1454  suffix = 'Patatrack_AllGPU',
1455  offset = 0.582,
1456 )
1457 
1458 # Workflow running the Pixel quadruplets, ECAL and HCAL reconstruction on CPU and GPU
1459 # - HLT on GPU (required)
1460 # - reconstruction on CPU and GPU, with DQM and validation for GPU-vs-CPU comparisons
1461 # - harvesting
1462 upgradeWFs['PatatrackAllGPUValidation'] = PatatrackWorkflow(
1463  digi = {
1464  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1465  '--accelerators': 'gpu-nvidia',
1466  '--procModifiers': 'gpu'
1467  },
1468  reco = {
1469  '-s': 'RAW2DIGI:RawToDigi_pixelOnly+RawToDigi_ecalOnly+RawToDigi_hcalOnly,RECO:reconstruction_pixelTrackingOnly+reconstruction_ecalOnly+reconstruction_hcalOnly,VALIDATION:@pixelTrackingOnlyValidation+@ecalOnlyValidation+@hcalOnlyValidation,DQM:@pixelTrackingOnlyDQM+@ecalOnly+@hcalOnly+@hcal2Only',
1470  '--accelerators': 'gpu-nvidia',
1471  '--procModifiers': 'pixelNtupletFit,gpuValidation'
1472  },
1473  harvest = {
1474  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM+@ecalOnlyValidation+@ecal+@hcalOnlyValidation+@hcalOnly+@hcal2Only',
1475  '--procModifiers': 'gpuValidation'
1476  },
1477  suffix = 'Patatrack_AllGPU_Validation',
1478  offset = 0.583,
1479 )
1480 
1481 # Workflow running the Pixel quadruplets, ECAL and HCAL reconstruction on CPU or GPU, trimmed down for benchmarking
1482 # - HLT on GPU (optional)
1483 # - minimal reconstruction on GPU (optional)
1484 # FIXME workflow 0.584 to be implemented
1485 
1486 # Workflow running the Pixel triplets, ECAL and HCAL reconstruction on CPU
1487 # - HLT on CPU
1488 # - reconstruction on CPU, with DQM and validation
1489 # - harvesting
1490 upgradeWFs['PatatrackAllTripletsCPU'] = PatatrackWorkflow(
1491  digi = {
1492  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1493  },
1494  reco = {
1495  '-s': 'RAW2DIGI:RawToDigi_pixelOnly+RawToDigi_ecalOnly+RawToDigi_hcalOnly,RECO:reconstruction_pixelTrackingOnly+reconstruction_ecalOnly+reconstruction_hcalOnly,VALIDATION:@pixelTrackingOnlyValidation+@ecalOnlyValidation+@hcalOnlyValidation,DQM:@pixelTrackingOnlyDQM+@ecalOnly+@hcalOnly+@hcal2Only',
1496  '--procModifiers': 'pixelNtupletFit'
1497  },
1498  harvest = {
1499  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM+@ecalOnlyValidation+@ecal+@hcalOnlyValidation+@hcalOnly+@hcal2Only'
1500  },
1501  suffix = 'Patatrack_AllTripletsCPU',
1502  offset = 0.585,
1503 )
1504 
1505 # Workflow running the Pixel triplets, ECAL and HCAL reconstruction on CPU or GPU
1506 # - HLT on GPU (optional)
1507 # - reconstruction on GPU (optional), with DQM and validation
1508 # - harvesting
1509 upgradeWFs['PatatrackAllTripletsGPU'] = PatatrackWorkflow(
1510  digi = {
1511  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1512  '--procModifiers': 'gpu'
1513  },
1514  reco = {
1515  '-s': 'RAW2DIGI:RawToDigi_pixelOnly+RawToDigi_ecalOnly+RawToDigi_hcalOnly,RECO:reconstruction_pixelTrackingOnly+reconstruction_ecalOnly+reconstruction_hcalOnly,VALIDATION:@pixelTrackingOnlyValidation+@ecalOnlyValidation+@hcalOnlyValidation,DQM:@pixelTrackingOnlyDQM+@ecalOnly+@hcalOnly+@hcal2Only',
1516  '--procModifiers': 'pixelNtupletFit,gpu'
1517  },
1518  harvest = {
1519  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM+@ecalOnlyValidation+@ecal+@hcalOnlyValidation+@hcalOnly+@hcal2Only'
1520  },
1521  suffix = 'Patatrack_AllTripletsGPU',
1522  offset = 0.586,
1523 )
1524 
1525 # Workflow running the Pixel triplets, ECAL and HCAL reconstruction on CPU and GPU
1526 # - HLT on GPU (required)
1527 # - reconstruction on CPU and GPU, with DQM and validation for GPU-vs-CPU comparisons
1528 # - harvesting
1529 upgradeWFs['PatatrackAllTripletsGPUValidation'] = PatatrackWorkflow(
1530  digi = {
1531  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1532  '--accelerators': 'gpu-nvidia',
1533  '--procModifiers': 'gpu'
1534  },
1535  reco = {
1536  '-s': 'RAW2DIGI:RawToDigi_pixelOnly+RawToDigi_ecalOnly+RawToDigi_hcalOnly,RECO:reconstruction_pixelTrackingOnly+reconstruction_ecalOnly+reconstruction_hcalOnly,VALIDATION:@pixelTrackingOnlyValidation+@ecalOnlyValidation+@hcalOnlyValidation,DQM:@pixelTrackingOnlyDQM+@ecalOnly+@hcalOnly+@hcal2Only',
1537  '--accelerators': 'gpu-nvidia',
1538  '--procModifiers': 'pixelNtupletFit,gpuValidation'
1539  },
1540  harvest = {
1541  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM+@ecalOnlyValidation+@ecal+@hcalOnlyValidation+@hcalOnly+@hcal2Only',
1542  '--procModifiers': 'gpuValidation'
1543  },
1544  suffix = 'Patatrack_AllTripletsGPU_Validation',
1545  offset = 0.587,
1546 )
1547 
1548 # Workflow running the Pixel triplets, ECAL and HCAL reconstruction on CPU or GPU, trimmed down for benchmarking
1549 # - HLT on GPU (optional)
1550 # - minimal reconstruction on GPU (optional)
1551 # FIXME workflow 0.588 to be implemented
1552 
1553 # Workflow running the Pixel quadruplets, ECAL and HCAL reconstruction on CPU, together with the full offline reconstruction
1554 # - HLT on CPU
1555 # - reconstruction on CPU, with DQM and validation
1556 # - harvesting
1557 upgradeWFs['PatatrackFullRecoCPU'] = PatatrackWorkflow(
1558  digi = {
1559  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1560  },
1561  reco = {
1562  # skip the @pixelTrackingOnlyValidation which cannot run together with the full reconstruction
1563  '-s': 'RAW2DIGI:RawToDigi+RawToDigi_pixelOnly,L1Reco,RECO:reconstruction+reconstruction_pixelTrackingOnly,RECOSIM,PAT,VALIDATION:@standardValidation+@miniAODValidation,DQM:@standardDQM+@ExtraHLT+@miniAODDQM+@pixelTrackingOnlyDQM',
1564  '--procModifiers': 'pixelNtupletFit'
1565  },
1566  harvest = {
1567  # skip the @pixelTrackingOnlyDQM harvesting
1568  },
1569  suffix = 'Patatrack_FullRecoCPU',
1570  offset = 0.591,
1571 )
1572 
1573 # Workflow running the Pixel quadruplets, ECAL and HCAL reconstruction on GPU (optional), together with the full offline reconstruction on CPU
1574 # - HLT on GPU (optional)
1575 # - reconstruction on GPU (optional), with DQM and validation
1576 # - harvesting
1577 upgradeWFs['PatatrackFullRecoGPU'] = PatatrackWorkflow(
1578  digi = {
1579  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1580  '--procModifiers': 'gpu'
1581  },
1582  reco = {
1583  # skip the @pixelTrackingOnlyValidation which cannot run together with the full reconstruction
1584  '-s': 'RAW2DIGI:RawToDigi+RawToDigi_pixelOnly,L1Reco,RECO:reconstruction+reconstruction_pixelTrackingOnly,RECOSIM,PAT,VALIDATION:@standardValidation+@miniAODValidation,DQM:@standardDQM+@ExtraHLT+@miniAODDQM+@pixelTrackingOnlyDQM',
1585  '--procModifiers': 'pixelNtupletFit,gpu'
1586  },
1587  harvest = {
1588  # skip the @pixelTrackingOnlyDQM harvesting
1589  },
1590  suffix = 'Patatrack_FullRecoGPU',
1591  offset = 0.592,
1592 )
1593 
1594 # Workflow running the Pixel quadruplets, ECAL and HCAL reconstruction on CPU and GPU, together with the full offline reconstruction on CPU
1595 # - HLT on GPU (required)
1596 # - reconstruction on CPU and GPU, with DQM and validation for GPU-vs-CPU comparisons
1597 # - harvesting
1598 upgradeWFs['PatatrackFullRecoGPUValidation'] = PatatrackWorkflow(
1599  digi = {
1600  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1601  '--accelerators': 'gpu-nvidia',
1602  '--procModifiers': 'gpu'
1603  },
1604  reco = {
1605  # skip the @pixelTrackingOnlyValidation which cannot run together with the full reconstruction
1606  '-s': 'RAW2DIGI:RawToDigi+RawToDigi_pixelOnly,L1Reco,RECO:reconstruction+reconstruction_pixelTrackingOnly,RECOSIM,PAT,VALIDATION:@standardValidation+@miniAODValidation,DQM:@standardDQM+@ExtraHLT+@miniAODDQM+@pixelTrackingOnlyDQM',
1607  '--accelerators': 'gpu-nvidia',
1608  '--procModifiers': 'pixelNtupletFit,gpuValidation'
1609  },
1610  harvest = {
1611  # skip the @pixelTrackingOnlyDQM harvesting
1612  },
1613  suffix = 'Patatrack_FullRecoGPU_Validation',
1614  offset = 0.593,
1615 )
1616 
1617 # Workflow running the Pixel triplets, ECAL and HCAL reconstruction on CPU, together with the full offline reconstruction
1618 # - HLT on CPU
1619 # - reconstruction on CPU, with DQM and validation
1620 # - harvesting
1621 upgradeWFs['PatatrackFullRecoTripletsCPU'] = PatatrackWorkflow(
1622  digi = {
1623  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1624  },
1625  reco = {
1626  # skip the @pixelTrackingOnlyValidation which cannot run together with the full reconstruction
1627  '-s': 'RAW2DIGI:RawToDigi+RawToDigi_pixelOnly,L1Reco,RECO:reconstruction+reconstruction_pixelTrackingOnly,RECOSIM,PAT,VALIDATION:@standardValidation+@miniAODValidation,DQM:@standardDQM+@ExtraHLT+@miniAODDQM+@pixelTrackingOnlyDQM',
1628  '--procModifiers': 'pixelNtupletFit',
1629  '--customise' : 'RecoTracker/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets'
1630  },
1631  harvest = {
1632  # skip the @pixelTrackingOnlyDQM harvesting
1633  },
1634  suffix = 'Patatrack_FullRecoTripletsCPU',
1635  offset = 0.595,
1636 )
1637 # - ProdLike
1638 upgradeWFs['PatatrackFullRecoTripletsCPUProdLike'] = PatatrackWorkflow(
1639  digi = {
1640  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1641  '--datatier':'GEN-SIM-RAW',
1642  '--eventcontent':'RAWSIM',
1643  },
1644  reco = {
1645  # skip the @pixelTrackingOnlyValidation which cannot run together with the full reconstruction
1646  '-s': 'RAW2DIGI:RawToDigi+RawToDigi_pixelOnly,L1Reco,RECO:reconstruction+reconstruction_pixelTrackingOnly,RECOSIM',
1647  '--procModifiers': 'pixelNtupletFit',
1648  '--customise' : 'RecoTracker/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets',
1649  '--datatier':'AODSIM',
1650  '--eventcontent':'AODSIM',
1651  },
1652  harvest = None,
1653  suffix = 'Patatrack_FullRecoTripletsCPUProdLike',
1654  offset = 0.59521,
1655 )
1656 
1657 # Workflow running the Pixel triplets, ECAL and HCAL reconstruction on GPU (optional), together with the full offline reconstruction on CPU
1658 # - HLT on GPU (optional)
1659 # - reconstruction on GPU (optional), with DQM and validation
1660 # - harvesting
1661 upgradeWFs['PatatrackFullRecoTripletsGPU'] = PatatrackWorkflow(
1662  digi = {
1663  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1664  '--procModifiers': 'gpu'
1665  },
1666  reco = {
1667  # skip the @pixelTrackingOnlyValidation which cannot run together with the full reconstruction
1668  '-s': 'RAW2DIGI:RawToDigi+RawToDigi_pixelOnly,L1Reco,RECO:reconstruction+reconstruction_pixelTrackingOnly,RECOSIM,PAT,VALIDATION:@standardValidation+@miniAODValidation,DQM:@standardDQM+@ExtraHLT+@miniAODDQM+@pixelTrackingOnlyDQM',
1669  '--procModifiers': 'pixelNtupletFit,gpu',
1670  '--customise': 'RecoTracker/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets'
1671  },
1672  harvest = {
1673  # skip the @pixelTrackingOnlyDQM harvesting
1674  },
1675  suffix = 'Patatrack_FullRecoTripletsGPU',
1676  offset = 0.596,
1677 )
1678 # - ProdLike
1679 upgradeWFs['PatatrackFullRecoTripletsGPUProdLike'] = PatatrackWorkflow(
1680  digi = {
1681  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1682  '--procModifiers': 'gpu',
1683  '--datatier':'GEN-SIM-RAW',
1684  '--eventcontent':'RAWSIM',
1685  },
1686  reco = {
1687  # skip the @pixelTrackingOnlyValidation which cannot run together with the full reconstruction
1688  '-s': 'RAW2DIGI:RawToDigi+RawToDigi_pixelOnly,L1Reco,RECO:reconstruction+reconstruction_pixelTrackingOnly,RECOSIM',
1689  '--procModifiers': 'pixelNtupletFit,gpu',
1690  '--customise': 'RecoTracker/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets',
1691  '--datatier':'AODSIM',
1692  '--eventcontent':'AODSIM',
1693  },
1694  harvest = None,
1695  suffix = 'Patatrack_FullRecoTripletsGPUProdLike',
1696  offset = 0.59621,
1697 )
1698 
1699 # Workflow running the Pixel triplets, ECAL and HCAL reconstruction on CPU and GPU, together with the full offline reconstruction on CPU
1700 # - HLT on GPU (required)
1701 # - reconstruction on CPU and GPU, with DQM and validation for GPU-vs-CPU comparisons
1702 # - harvesting
1703 upgradeWFs['PatatrackFullRecoTripletsGPUValidation'] = PatatrackWorkflow(
1704  digi = {
1705  # the HLT menu is already set up for using GPUs if available and if the "gpu" modifier is enabled
1706  '--accelerators': 'gpu-nvidia',
1707  '--procModifiers': 'gpu'
1708  },
1709  reco = {
1710  # skip the @pixelTrackingOnlyValidation which cannot run together with the full reconstruction
1711  '-s': 'RAW2DIGI:RawToDigi+RawToDigi_pixelOnly,L1Reco,RECO:reconstruction+reconstruction_pixelTrackingOnly,RECOSIM,PAT,VALIDATION:@standardValidation+@miniAODValidation,DQM:@standardDQM+@ExtraHLT+@miniAODDQM+@pixelTrackingOnlyDQM',
1712  '--accelerators': 'gpu-nvidia',
1713  '--procModifiers': 'pixelNtupletFit,gpuValidation',
1714  '--customise' : 'RecoTracker/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets'
1715  },
1716  harvest = {
1717  # skip the @pixelTrackingOnlyDQM harvesting
1718  },
1719  suffix = 'Patatrack_FullRecoTripletsGPU_Validation',
1720  offset = 0.597,
1721 )
1722 
1723 upgradeWFs['PatatrackPixelOnlyAlpaka'] = PatatrackWorkflow(
1724  digi = {
1725  '--procModifiers': 'alpaka',
1726  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1727  },
1728  reco = {
1729  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
1730  '--procModifiers': 'alpaka',
1731  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1732  },
1733  harvest = {
1734  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'
1735  },
1736  suffix = 'Patatrack_PixelOnlyAlpaka',
1737  offset = 0.402,
1738 )
1739 
1740 upgradeWFs['PatatrackPixelOnlyAlpakaValidation'] = PatatrackWorkflow(
1741  digi = {
1742  '--procModifiers': 'alpaka',
1743  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1744  },
1745  reco = {
1746  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
1747  '--procModifiers': 'alpakaValidation',
1748  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1749  },
1750  harvest = {
1751  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM',
1752  '--procModifiers': 'alpakaValidation',
1753  },
1754  suffix = 'Patatrack_PixelOnlyAlpaka_Validation',
1755  offset = 0.403,
1756 )
1757 
1758 upgradeWFs['PatatrackPixelOnlyAlpakaProfiling'] = PatatrackWorkflow(
1759  digi = {
1760  '--procModifiers': 'alpaka',
1761  },
1762  reco = {
1763  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly',
1764  '--procModifiers': 'alpaka',
1765  '--customise' : 'RecoTracker/Configuration/customizePixelOnlyForProfiling.customizePixelOnlyForProfilingGPUOnly'
1766  },
1767  harvest = None,
1768  suffix = 'Patatrack_PixelOnlyAlpaka_Profiling',
1769  offset = 0.404,
1770 )
1771 
1772 upgradeWFs['PatatrackPixelOnlyTripletsAlpaka'] = PatatrackWorkflow(
1773  digi = {
1774  '--procModifiers': 'alpaka',
1775  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1776  },
1777  reco = {
1778  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
1779  '--procModifiers': 'alpaka',
1780  '--customise' : 'RecoTracker/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets,HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling'
1781  },
1782  harvest = {
1783  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'
1784  },
1785  suffix = 'Patatrack_PixelOnlyTripletsAlpaka',
1786  offset = 0.406,
1787 )
1788 
1789 upgradeWFs['PatatrackPixelOnlyTripletsAlpakaValidation'] = PatatrackWorkflow(
1790  digi = {
1791  '--procModifiers': 'alpaka',
1792  '--customise' : 'HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling',
1793  },
1794  reco = {
1795  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly,VALIDATION:@pixelTrackingOnlyValidation,DQM:@pixelTrackingOnlyDQM',
1796  '--procModifiers': 'alpakaValidation',
1797  '--customise' : 'RecoTracker/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets,HeterogeneousCore/AlpakaServices/customiseAlpakaServiceMemoryFilling.customiseAlpakaServiceMemoryFilling'
1798  },
1799  harvest = {
1800  '-s': 'HARVESTING:@trackingOnlyValidation+@pixelTrackingOnlyDQM'
1801  },
1802  suffix = 'Patatrack_PixelOnlyTripletsAlpaka_Validation',
1803  offset = 0.407,
1804 )
1805 
1806 upgradeWFs['PatatrackPixelOnlyTripletsAlpakaProfiling'] = PatatrackWorkflow(
1807  digi = {
1808  '--procModifiers': 'alpaka',
1809  },
1810  reco = {
1811  '-s': 'RAW2DIGI:RawToDigi_pixelOnly,RECO:reconstruction_pixelTrackingOnly',
1812  '--procModifiers': 'alpaka',
1813  '--customise' : 'RecoTracker/Configuration/customizePixelTracksForTriplets.customizePixelTracksForTriplets,RecoTracker/Configuration/customizePixelOnlyForProfiling.customizePixelOnlyForProfilingGPUOnly'
1814  },
1815  harvest = None,
1816  suffix = 'Patatrack_PixelOnlyTripletsAlpaka_Profiling',
1817  offset = 0.408,
1818 )
1819 
1820 # end of Patatrack workflows
1821 
1823  def setup_(self, step, stepName, stepDict, k, properties):
1824  thisStep = stepDict[step][k]["-s"]
1825  if 'GenSimHLBeamSpot14' in step:
1826  stepDict[stepName][k] = merge([{'--eventcontent': 'RAWSIM', '--datatier': 'GEN-SIM'},stepDict[step][k]])
1827  elif 'Digi' in step and 'Trigger' not in step:
1828  stepDict[stepName][k] = merge([{'-s': thisStep.replace("DIGI:pdigi_valid","DIGI"),'--datatier':'GEN-SIM-RAW', '--eventcontent':'RAWSIM'}, stepDict[step][k]])
1829  elif 'DigiTrigger' in step: # for Phase-2
1830  stepDict[stepName][k] = merge([{'-s': thisStep.replace("DIGI:pdigi_valid","DIGI"), '--datatier':'GEN-SIM-RAW', '--eventcontent':'RAWSIM'}, stepDict[step][k]])
1831  elif 'Reco' in step:
1832  stepDict[stepName][k] = merge([{'-s': 'RAW2DIGI,L1Reco,RECO,RECOSIM', '--datatier':'AODSIM', '--eventcontent':'AODSIM'}, stepDict[step][k]])
1833  elif 'MiniAOD' in step:
1834  # the separate miniAOD step is used here
1835  stepDict[stepName][k] = deepcopy(stepDict[step][k])
1836  elif 'ALCA' in step or 'HARVEST' in step:
1837  # remove step
1838  stepDict[stepName][k] = None
1839  elif 'Nano'==step:
1840  stepDict[stepName][k] = merge([{'--filein':'file:step4.root','-s':'NANO','--datatier':'NANOAODSIM','--eventcontent':'NANOEDMAODSIM'}, stepDict[step][k]])
1841  def condition(self, fragment, stepList, key, hasHarvest):
1842  return fragment=="TTbar_14TeV" and ('2026' in key or '2021' in key or '2023' in key or '2024' in key)
1843 upgradeWFs['ProdLike'] = UpgradeWorkflow_ProdLike(
1844  steps = [
1845  'GenSimHLBeamSpot14',
1846  'Digi',
1847  'DigiTrigger',
1848  'Reco',
1849  'RecoFakeHLT',
1850  'RecoGlobal',
1851  'RecoNano',
1852  'RecoNanoFakeHLT',
1853  'HARVEST',
1854  'HARVESTFakeHLT',
1855  'HARVESTGlobal',
1856  'HARVESTNano',
1857  'HARVESTNanoFakeHLT',
1858  'MiniAOD',
1859  'ALCA',
1860  'ALCAPhase2',
1861  'Nano',
1862  ],
1863  PU = [
1864  'GenSimHLBeamSpot14',
1865  'Digi',
1866  'DigiTrigger',
1867  'Reco',
1868  'RecoFakeHLT',
1869  'RecoGlobal',
1870  'RecoNano',
1871  'RecoNanoFakeHLT',
1872  'HARVEST',
1873  'HARVESTFakeHLT',
1874  'HARVESTGlobal',
1875  'HARVESTNano',
1876  'HARVESTNanoFakeHLT',
1877  'MiniAOD',
1878  'ALCA',
1879  'ALCAPhase2',
1880  'Nano',
1881  ],
1882  suffix = '_ProdLike',
1883  offset = 0.21,
1884 )
1885 
1887  def __init__(self, suffix, offset, fixedPU,
1888  steps = [],
1889  PU = [
1890  'GenSimHLBeamSpot14',
1891  'Digi',
1892  'DigiTrigger',
1893  'Reco',
1894  'RecoFakeHLT',
1895  'RecoGlobal',
1896  'RecoNano',
1897  'RecoNanoFakeHLT',
1898  'HARVEST',
1899  'HARVESTFakeHLT',
1900  'HARVESTGlobal',
1901  'HARVESTNano',
1902  'HARVESTNanoFakeHLT',
1903  'MiniAOD',
1904  'ALCA',
1905  'ALCAPhase2',
1906  'Nano',
1907  ]):
1908  super(UpgradeWorkflow_ProdLikeRunningPU, self).__init__(steps, PU, suffix, offset)
1909  self.__fixedPU = fixedPU
1910  def setupPU_(self, step, stepName, stepDict, k, properties):
1911  # change PU skipping ALCA and HARVEST
1912  if stepDict[stepName][k] is not None and '--pileup' in stepDict[stepName][k]:
1913  stepDict[stepName][k]['--pileup'] = 'AVE_' + str(self.__fixedPU) + '_BX_25ns'
1914  def condition(self, fragment, stepList, key, hasHarvest):
1915  # lower PUs for Run3
1916  return (fragment=="TTbar_14TeV") and (('2026' in key) or ('2021' in key and self.__fixedPU<=100))
1917 
1918 # The numbering below is following the 0.21 for ProdLike wfs
1919 # 0.21N would have been a more natural choice but the
1920 # trailing zeros are ignored. Thus 0.21N1 is used
1921 
1922 upgradeWFs['ProdLikePU10'] = UpgradeWorkflow_ProdLikeRunningPU(
1923  suffix = '_ProdLikePU10',
1924  offset = 0.21101,
1925  fixedPU = 10,
1926 )
1927 
1928 upgradeWFs['ProdLikePU20'] = UpgradeWorkflow_ProdLikeRunningPU(
1929  suffix = '_ProdLikePU20',
1930  offset = 0.21201,
1931  fixedPU = 20,
1932 )
1933 
1934 upgradeWFs['ProdLikePU30'] = UpgradeWorkflow_ProdLikeRunningPU(
1935  suffix = '_ProdLikePU30',
1936  offset = 0.21301,
1937  fixedPU = 30,
1938 )
1939 
1940 upgradeWFs['ProdLikePU40'] = UpgradeWorkflow_ProdLikeRunningPU(
1941  suffix = '_ProdLikePU40',
1942  offset = 0.21401,
1943  fixedPU = 40,
1944 )
1945 
1946 upgradeWFs['ProdLikePU50'] = UpgradeWorkflow_ProdLikeRunningPU(
1947  suffix = '_ProdLikePU50',
1948  offset = 0.21501,
1949  fixedPU = 50,
1950 )
1951 
1952 upgradeWFs['ProdLikePU55'] = UpgradeWorkflow_ProdLikeRunningPU(
1953  suffix = '_ProdLikePU55',
1954  offset = 0.21551,
1955  fixedPU = 55,
1956 )
1957 
1958 upgradeWFs['ProdLikePU60'] = UpgradeWorkflow_ProdLikeRunningPU(
1959  suffix = '_ProdLikePU60',
1960  offset = 0.21601,
1961  fixedPU = 60,
1962 )
1963 
1964 upgradeWFs['ProdLikePU65'] = UpgradeWorkflow_ProdLikeRunningPU(
1965  suffix = '_ProdLikePU65',
1966  offset = 0.21651,
1967  fixedPU = 65,
1968 )
1969 
1970 upgradeWFs['ProdLikePU70'] = UpgradeWorkflow_ProdLikeRunningPU(
1971  suffix = '_ProdLikePU70',
1972  offset = 0.21701,
1973  fixedPU = 70,
1974 )
1975 
1976 upgradeWFs['ProdLikePU80'] = UpgradeWorkflow_ProdLikeRunningPU(
1977  suffix = '_ProdLikePU80',
1978  offset = 0.21801,
1979  fixedPU = 80,
1980 )
1981 
1982 upgradeWFs['ProdLikePU90'] = UpgradeWorkflow_ProdLikeRunningPU(
1983  suffix = '_ProdLikePU90',
1984  offset = 0.21901,
1985  fixedPU = 90,
1986 )
1987 
1988 upgradeWFs['ProdLikePU100'] = UpgradeWorkflow_ProdLikeRunningPU(
1989  suffix = '_ProdLikePU100',
1990  offset = 0.211001,
1991  fixedPU = 100,
1992 )
1993 
1994 upgradeWFs['ProdLikePU120'] = UpgradeWorkflow_ProdLikeRunningPU(
1995  suffix = '_ProdLikePU120',
1996  offset = 0.211201,
1997  fixedPU = 120,
1998 )
1999 
2000 upgradeWFs['ProdLikePU140'] = UpgradeWorkflow_ProdLikeRunningPU(
2001  suffix = '_ProdLikePU140',
2002  offset = 0.211401,
2003  fixedPU = 140,
2004 )
2005 
2006 upgradeWFs['ProdLikePU160'] = UpgradeWorkflow_ProdLikeRunningPU(
2007  suffix = '_ProdLikePU160',
2008  offset = 0.211601,
2009  fixedPU = 160,
2010 )
2011 
2012 upgradeWFs['ProdLikePU180'] = UpgradeWorkflow_ProdLikeRunningPU(
2013  suffix = '_ProdLikePU180',
2014  offset = 0.211801,
2015  fixedPU = 180,
2016 )
2017 
2019  def setup_(self, step, stepName, stepDict, k, properties):
2020  # skip RECO, ALCA and HARVEST
2021  if ('ALCA' in step) or ('Reco' in step) or ('HARVEST' in step) or ('HLT' in step):
2022  stepDict[stepName][k] = None
2023  elif 'DigiTrigger' in step:
2024  stepDict[stepName][k] = merge([self.step2, stepDict[step][k]])
2025  else:
2026  stepDict[stepName][k] = merge([stepDict[step][k]])
2027  def condition(self, fragment, stepList, key, hasHarvest):
2028  return fragment=="TTbar_14TeV" and '2026' in key
2029 upgradeWFs['HLTTiming75e33'] = UpgradeWorkflow_HLT75e33Timing(
2030  steps = [
2031  'Reco',
2032  'RecoGlobal',
2033  'RecoNano',
2034  'DigiTrigger',
2035  'ALCA',
2036  'ALCAPhase2',
2037  'HARVESTGlobal',
2038  ],
2039  PU = [
2040  'Reco',
2041  'RecoGlobal',
2042  'RecoNano',
2043  'DigiTrigger',
2044  'ALCA',
2045  'ALCAPhase2',
2046  'HARVESTGlobal'
2047  ],
2048  suffix = '_HLT75e33Timing',
2049  offset = 0.75,
2050 )
2051 upgradeWFs['HLTTiming75e33'].step2 = {
2052  '-s':'DIGI:pdigi_valid,L1TrackTrigger,L1,L1P2GT,DIGI2RAW,HLT:75e33_timing'
2053 }
2054 
2055 upgradeWFs['HLTTiming75e33Alpaka'] = deepcopy(upgradeWFs['HLTTiming75e33'])
2056 upgradeWFs['HLTTiming75e33Alpaka'].suffix = '_HLT75e33TimingAlpaka'
2057 upgradeWFs['HLTTiming75e33Alpaka'].offset = 0.751
2058 upgradeWFs['HLTTiming75e33Alpaka'].step2 = {
2059  '-s':'DIGI:pdigi_valid,L1TrackTrigger,L1,L1P2GT,DIGI2RAW,HLT:75e33_timing',
2060  '--procModifiers': 'alpaka'
2061 }
2062 
2063 upgradeWFs['HLTTiming75e33TiclV5'] = deepcopy(upgradeWFs['HLTTiming75e33'])
2064 upgradeWFs['HLTTiming75e33TiclV5'].suffix = '_HLT75e33TimingTiclV5'
2065 upgradeWFs['HLTTiming75e33TiclV5'].offset = 0.752
2066 upgradeWFs['HLTTiming75e33TiclV5'].step2 = {
2067  '-s':'DIGI:pdigi_valid,L1TrackTrigger,L1,L1P2GT,DIGI2RAW,HLT:75e33_timing',
2068  '--procModifiers': 'ticl_v5'
2069 }
2070 
2071 
2073  def setup_(self, step, stepName, stepDict, k, properties):
2074  if 'DigiTrigger' in step:
2075  stepDict[stepName][k] = merge([{'-s':'DIGI:pdigi_valid,L1TrackTrigger,L1,DIGI2RAW,HLT:@relval2026'}, stepDict[step][k]])
2076  def condition(self, fragment, stepList, key, hasHarvest):
2077  return fragment=="TTbar_14TeV" and '2026' in key
2078 upgradeWFs['HLTwDIGI75e33'] = UpgradeWorkflow_HLTwDIGI75e33(
2079  steps = [
2080  'DigiTrigger',
2081  ],
2082  PU = [
2083  'DigiTrigger',
2084  ],
2085  suffix = '_HLTwDIGI75e33',
2086  offset = 0.76,
2087 )
2088 
2090  def setup_(self, step, stepName, stepDict, k, properties):
2091  if 'Digi' in step and 'NoHLT' not in step:
2092  stepDict[stepName][k] = merge([{'-s': 'DIGI:pdigi_valid,L1,L1TrackTrigger,L1P2GT,DIGI2RAW,HLT:@relval2026'}, stepDict[step][k]])
2093  def condition(self, fragment, stepList, key, hasHarvest):
2094  return '2026' in key
2095 
2096 upgradeWFs['L1Complete'] = UpgradeWorkflow_L1Complete(
2097  steps = [
2098  'DigiTrigger',
2099  ],
2100  PU = [
2101  'DigiTrigger',
2102  ],
2103  suffix = '_L1Complete',
2104  offset = 0.78
2105 )
2106 
2108  def setup_(self, step, stepName, stepDict, k, properties):
2109  if 'GenSim' in step:
2110  custNew = "SimG4Core/Application/NeutronBGforMuonsXS_cff.customise"
2111  else:
2112  custNew = "SLHCUpgradeSimulations/Configuration/customise_mixing.customise_Mix_LongLived_Neutrons"
2113  stepDict[stepName][k] = deepcopy(stepDict[step][k])
2114  if '--customise' in stepDict[stepName][k].keys():
2115  stepDict[stepName][k]['--customise'] += ","+custNew
2116  else:
2117  stepDict[stepName][k]['--customise'] = custNew
2118  def condition(self, fragment, stepList, key, hasHarvest):
2119  return any(fragment==nfrag for nfrag in self.neutronFrags) and any(nkey in key for nkey in self.neutronKeys)
2120 upgradeWFs['Neutron'] = UpgradeWorkflow_Neutron(
2121  steps = [
2122  'GenSim',
2123  'GenSimHLBeamSpot',
2124  'GenSimHLBeamSpot14',
2125  'Digi',
2126  'DigiTrigger',
2127  ],
2128  PU = [
2129  'Digi',
2130  'DigiTrigger',
2131  ],
2132  suffix = '_Neutron',
2133  offset = 0.12,
2134 )
2135 # add some extra info
2136 upgradeWFs['Neutron'].neutronKeys = [x for x in upgradeKeys[2026] if 'PU' not in x]
2137 upgradeWFs['Neutron'].neutronFrags = ['ZMM_14','MinBias_14TeV']
2138 
2140  def setup_(self, step, stepName, stepDict, k, properties):
2141  stepDict[stepName][k] = merge([{'--procModifiers': 'run2_HECollapse_2018'}, stepDict[step][k]])
2142  def condition(self, fragment, stepList, key, hasHarvest):
2143  return fragment=="TTbar_13" and '2018' in key
2144 upgradeWFs['heCollapse'] = UpgradeWorkflow_heCollapse(
2145  steps = [
2146  'GenSim',
2147  'Digi',
2148  'Reco',
2149 # 'RecoFakeHLT',
2150  'HARVEST',
2151  'HARVESTFakeHLT',
2152  'ALCA',
2153  ],
2154  PU = [
2155  'Digi',
2156  'Reco',
2157 # 'RecoFakeHLT',
2158  'HARVEST',
2159  'HARVESTFakeHLT',
2160  ],
2161  suffix = '_heCollapse',
2162  offset = 0.6,
2163 )
2164 
2165 # ECAL Phase 2 development WF
2167  def __init__(self, digi = {}, reco = {}, harvest = {}, **kwargs):
2168  # adapt the parameters for the UpgradeWorkflow init method
2169  super(UpgradeWorkflow_ecalDevel, self).__init__(
2170  steps = [
2171  'DigiTrigger',
2172  'RecoGlobal',
2173  'HARVESTGlobal',
2174  'ALCAPhase2',
2175  ],
2176  PU = [
2177  'DigiTrigger',
2178  'RecoGlobal',
2179  'HARVESTGlobal',
2180  'ALCAPhase2',
2181  ],
2182  **kwargs)
2183  self.__digi = digi
2184  self.__reco = reco
2185  self.__harvest = harvest
2186 
2187  def setup_(self, step, stepName, stepDict, k, properties):
2188  # temporarily remove trigger & downstream steps
2189  mods = {'--era': stepDict[step][k]['--era']+',phase2_ecal_devel'}
2190  if 'Digi' in step:
2191  mods['-s'] = 'DIGI:pdigi_valid,DIGI2RAW'
2192  mods |= self.__digi
2193  elif 'Reco' in step:
2194  mods['-s'] = 'RAW2DIGI,RECO:reconstruction_ecalOnly,VALIDATION:@ecalOnlyValidation,DQM:@ecalOnly'
2195  mods['--datatier'] = 'GEN-SIM-RECO,DQMIO'
2196  mods['--eventcontent'] = 'FEVTDEBUGHLT,DQM'
2197  mods |= self.__reco
2198  elif 'HARVEST' in step:
2199  mods['-s'] = 'HARVESTING:@ecalOnlyValidation+@ecal'
2200  mods |= self.__harvest
2201  stepDict[stepName][k] = merge([mods, stepDict[step][k]])
2202  # skip ALCA step
2203  if 'ALCA' in step:
2204  stepDict[stepName][k] = None
2205 
2206  def condition(self, fragment, stepList, key, hasHarvest):
2207  return fragment=="TTbar_14TeV" and '2026' in key
2208 
2209 # ECAL Phase 2 workflow running on CPU
2210 upgradeWFs['ecalDevel'] = UpgradeWorkflow_ecalDevel(
2211  suffix = '_ecalDevel',
2212  offset = 0.61,
2213 )
2214 
2215 # ECAL Phase 2 workflow running on CPU or GPU (if available)
2216 upgradeWFs['ecalDevelGPU'] = UpgradeWorkflow_ecalDevel(
2217  reco = {'--procModifiers': 'gpu'},
2218  suffix = '_ecalDevelGPU',
2219  offset = 0.612,
2220 )
2221 
2222 # ECAL component
2224  def __init__(self, suffix, offset, ecalTPPh2, ecalMod,
2225  steps = [
2226  'GenSim',
2227  'GenSimHLBeamSpot',
2228  'GenSimHLBeamSpot14',
2229  'GenSimHLBeamSpotHGCALCloseBy',
2230  'Digi',
2231  'DigiTrigger',
2232  'RecoGlobal',
2233  'HARVESTGlobal',
2234  'ALCAPhase2',
2235  ],
2236  PU = [
2237  'GenSim',
2238  'GenSimHLBeamSpot',
2239  'GenSimHLBeamSpot14',
2240  'GenSimHLBeamSpotHGCALCloseBy',
2241  'Digi',
2242  'DigiTrigger',
2243  'RecoGlobal',
2244  'HARVESTGlobal',
2245  'ALCAPhase2',
2246  ]):
2247  super(UpgradeWorkflow_ECalComponent, self).__init__(steps, PU, suffix, offset)
2248  self.__ecalTPPh2 = ecalTPPh2
2249  self.__ecalMod = ecalMod
2250 
2251  def setup_(self, step, stepName, stepDict, k, properties):
2252  stepDict[stepName][k] = deepcopy(stepDict[step][k])
2253  if 'Sim' in step:
2254  if self.__ecalMod is not None:
2255  stepDict[stepName][k] = merge([{'--procModifiers':self.__ecalMod},stepDict[step][k]])
2256  if 'Digi' in step and 'NoHLT' not in step:
2257  if self.__ecalMod is not None:
2258  stepDict[stepName][k] = merge([{'--procModifiers':self.__ecalMod},stepDict[step][k]])
2259  if self.__ecalTPPh2 is not None:
2260  mods = {'--era': stepDict[step][k]['--era']+',phase2_ecal_devel,phase2_ecalTP_devel'}
2261  mods['-s'] = 'DIGI:pdigi_valid,DIGI2RAW,HLT:@fake2'
2262  stepDict[stepName][k] = merge([mods, stepDict[step][k]])
2263  if 'RecoGlobal' in step:
2264  stepDict[stepName][k] = merge([{'-s': 'RAW2DIGI,RECO,RECOSIM,PAT',
2265  '--datatier':'GEN-SIM-RECO',
2266  '--eventcontent':'FEVTDEBUGHLT',
2267  }, stepDict[step][k]])
2268  if 'HARVESTGlobal' in step:
2269  stepDict[stepName][k] = None
2270  if 'ALCAPhase2' in step:
2271  stepDict[stepName][k] = None
2272 
2273  def condition(self, fragment, stepList, key, hasHarvest):
2274  return fragment=="TTbar_14TeV" and ('2021' in key or '2023' in key or '2026' in key)
2275 
2276 upgradeWFs['ECALComponent'] = UpgradeWorkflow_ECalComponent(
2277  suffix = '_ecalComponent',
2278  offset = 0.631,
2279  ecalTPPh2 = None,
2280  ecalMod = 'ecal_component',
2281 )
2282 
2283 upgradeWFs['ECALComponentFSW'] = UpgradeWorkflow_ECalComponent(
2284  suffix = '_ecalComponentFSW',
2285  offset = 0.632,
2286  ecalTPPh2 = None,
2287  ecalMod = 'ecal_component_finely_sampled_waveforms',
2288 )
2289 
2290 upgradeWFs['ECALTPPh2'] = UpgradeWorkflow_ECalComponent(
2291  suffix = '_ecalTPPh2',
2292  offset = 0.633,
2293  ecalTPPh2 = 'phase2_ecal_devel,phase2_ecalTP_devel',
2294  ecalMod = None,
2295 )
2296 
2297 upgradeWFs['ECALTPPh2Component'] = UpgradeWorkflow_ECalComponent(
2298  suffix = '_ecalTPPh2Component',
2299  offset = 0.634,
2300  ecalTPPh2 = 'phase2_ecal_devel,phase2_ecalTP_devel',
2301  ecalMod = 'ecal_component',
2302 )
2303 
2304 upgradeWFs['ECALTPPh2ComponentFSW'] = UpgradeWorkflow_ECalComponent(
2305  suffix = '_ecalTPPh2ComponentFSW',
2306  offset = 0.635,
2307  ecalTPPh2 = 'phase2_ecal_devel,phase2_ecalTP_devel',
2308  ecalMod = 'ecal_component_finely_sampled_waveforms',
2309 )
2310 
2312  def setup_(self, step, stepName, stepDict, k, properties):
2313  myGT=stepDict[step][k]['--conditions']
2314  myGT+="_0T"
2315  stepDict[stepName][k] = merge([{'-n':'1','--magField':'0T','--conditions':myGT}, stepDict[step][k]])
2316  def setupPU_(self, step, stepName, stepDict, k, properties):
2317  # override '-n' setting from PUDataSets in relval_steps.py
2318  stepDict[stepName][k] = merge([{'-n':'1'}, stepDict[step][k]])
2319  def condition(self, fragment, stepList, key, hasHarvest):
2320  return (fragment=="TTbar_13" or fragment=="TTbar_14TeV") and ('2017' in key or '2018' in key or '2021' in key or '2024' in key) and ('FS' not in key)
2321 upgradeWFs['0T'] = UpgradeWorkflow_0T(
2322  steps = [
2323  'GenSim',
2324  'Digi',
2325  'Reco',
2326  'RecoFakeHLT',
2327  'HARVEST',
2328  'HARVESTFakeHLT',
2329  'RecoNano',
2330  'RecoNanoFakeHLT',
2331  'HARVESTNano',
2332  'HARVESTNanoFakeHLT',
2333  'ALCA',
2334  ],
2335  PU = [
2336  'Digi',
2337  'Reco',
2338  'RecoFakeHLT',
2339  'HARVEST',
2340  'HARVESTFakeHLT',
2341  'RecoNano',
2342  'RecoNanoFakeHLT',
2343  'HARVESTNano',
2344  'HARVESTNanoFakeHLT',
2345  ],
2346  suffix = '_0T',
2347  offset = 0.24,
2348 )
2349 
2351  def setup_(self, step, stepName, stepDict, k, properties):
2352  if 'Reco' in step and 'Run2_2018' in stepDict[step][k]['--era']:
2353  stepDict[stepName][k] = merge([{'--era': 'Run2_2018,bParking'}, stepDict[step][k]])
2354  def condition(self, fragment, stepList, key, hasHarvest):
2355  return fragment=="TTbar_13" and '2018' in key
2356 upgradeWFs['ParkingBPH'] = UpgradeWorkflow_ParkingBPH(
2357  steps = [
2358  'Reco',
2359  'RecoFakeHLT',
2360  ],
2361  PU = [],
2362  suffix = '_ParkingBPH',
2363  offset = 0.8,
2364 )
2365 
2366 
2368  def setup_(self, step, stepName, stepDict, k, properties):
2369  self.__frags = ["B0","Psi2S","Bu","Bd","Xi","Bs"]
2370  thisStep = stepDict[step][k]["-s"]
2371  if "Reco" in step:
2372  if "DQM:" in thisStep:
2373  stepDict[stepName][k] = merge([{'-s': thisStep.replace("DQM:","DQM:@heavyFlavor+")}, stepDict[step][k]])
2374  elif "DQM" in thisStep:
2375  stepDict[stepName][k] = merge([{'-s': thisStep.replace("DQM","DQM:@heavyFlavor")}, stepDict[step][k]])
2376  else:
2377  stepDict[stepName][k] = merge([{'-s': thisStep + ",DQM:@heavyFlavor"}, stepDict[step][k]])
2378 
2379  def condition(self, fragment, stepList, key, hasHarvest):
2380  return any(frag in fragment for frag in self.__frags)
2381 
2382 upgradeWFs['HeavyFlavor'] = UpgradeWorkflow_HeavyFlavor(
2383  steps = [
2384  'Reco',
2385  'RecoFakeHLT',
2386  'RecoNano',
2387  'RecoNanoFakeHLT',
2388  ],
2389  PU = [],
2390  suffix = '_HeavyFlavor',
2391  offset = 0.81,
2392 )
2393 
2394 
2396  def setup_(self, step, stepName, stepDict, k, properties):
2397  if 'Nano' in step:
2398  stepDict[stepName][k] = merge([{'--customise': 'PhysicsTools/NanoAOD/custom_jme_cff.PrepJMECustomNanoAOD'}, stepDict[step][k]])
2399  def condition(self, fragment, stepList, key, hasHarvest):
2400  return (fragment=="TTbar_13" or fragment=="TTbar_14TeV") and ('2017' in key or '2018' in key or '2021' in key) and ('FS' not in key)
2401 upgradeWFs['JMENano'] = UpgradeWorkflow_JMENano(
2402  steps = [
2403  'Nano',
2404  'RecoNano',
2405  'RecoNanoFakeHLT',
2406  ],
2407  PU = [],
2408  suffix = '_JMENano',
2409  offset = 0.15,
2410 )
2411 
2412 
2413 # common operations for aging workflows
2415  def setup_(self, step, stepName, stepDict, k, properties):
2416  if 'Digi' in step or 'Reco' in step:
2417  stepDict[stepName][k] = merge([{'--customise': 'SLHCUpgradeSimulations/Configuration/aging.customise_aging_'+self.lumi}, stepDict[step][k]])
2418  def condition(self, fragment, stepList, key, hasHarvest):
2419  return '2026' in key
2420 # define several of them
2421 upgradeWFs['Aging1000'] = UpgradeWorkflowAging(
2422  steps = [
2423  'Digi',
2424  'DigiTrigger',
2425  'RecoLocal',
2426  'Reco',
2427  'RecoFakeHLT',
2428  'RecoGlobal',
2429  ],
2430  PU = [
2431  'Digi',
2432  'DigiTrigger',
2433  'RecoLocal',
2434  'Reco',
2435  'RecoFakeHLT',
2436  'RecoGlobal',
2437  ],
2438  suffix = 'Aging1000',
2439  offset = 0.101,
2440 )
2441 upgradeWFs['Aging1000'].lumi = '1000'
2442 upgradeWFs['Aging3000'] = deepcopy(upgradeWFs['Aging1000'])
2443 upgradeWFs['Aging3000'].suffix = 'Aging3000'
2444 upgradeWFs['Aging3000'].offset = 0.103
2445 upgradeWFs['Aging3000'].lumi = '3000'
2446 
2448  def setup_(self, step, stepName, stepDict, k, properties):
2449  stepDict[stepName][k] = merge([{'--procModifiers': 'splitClustersInPhase2Pixel'}, stepDict[step][k]])
2450  def condition(self, fragment, stepList, key, hasHarvest):
2451  return '2026' in key
2452 
2453 upgradeWFs['PixelClusterSplitting'] = UpgradeWorkflow_PixelClusterSplitting(
2454  steps = [
2455  'RecoLocal',
2456  'Reco',
2457  'RecoFakeHLT',
2458  'RecoGlobal',
2459  ],
2460  PU = [
2461  'RecoLocal',
2462  'Reco',
2463  'RecoFakeHLT',
2464  'RecoGlobal',
2465  ],
2466  suffix = '_ClusterSplittingInPixel',
2467  offset = 0.19001,
2468 )
2469 
2471  def setup_(self, step, stepName, stepDict, k, properties):
2472  stepDict[stepName][k] = merge([{'--procModifiers': 'splitClustersInPhase2Pixel,jetCoreInPhase2'}, stepDict[step][k]])
2473  def condition(self, fragment, stepList, key, hasHarvest):
2474  return '2026' in key
2475 
2476 upgradeWFs['JetCore'] = UpgradeWorkflow_JetCore(
2477  steps = [
2478  'RecoLocal',
2479  'Reco',
2480  'RecoFakeHLT',
2481  'RecoGlobal',
2482  ],
2483  PU = [
2484  'RecoLocal',
2485  'Reco',
2486  'RecoFakeHLT',
2487  'RecoGlobal',
2488  ],
2489  suffix = '_JetCore',
2490  offset = 0.19002,
2491 )
2492 
2493 #
2494 # Simulates Bias Rail in Phase-2 OT PS modules and X% random bad Strips
2495 # in PS-s and SS sensors
2496 #
2498  def setup_(self, step, stepName, stepDict, k, properties):
2499  if 'Digi' in step:
2500  stepDict[stepName][k] = merge([{'--customise': 'SimTracker/SiPhase2Digitizer/customizeForOTInefficiency.customizeSiPhase2OTInefficiency'+self.percent+'Percent'}, stepDict[step][k]])
2501  def condition(self, fragment, stepList, key, hasHarvest):
2502  return fragment=="TTbar_14TeV" and '2026' in key
2503 # define several of them
2504 upgradeWFs['OTInefficiency'] = UpgradeWorkflow_OTInefficiency(
2505  steps = [
2506  'Digi',
2507  'DigiTrigger',
2508  ],
2509  PU = [
2510  'Digi',
2511  'DigiTrigger',
2512  ],
2513  suffix = '_OTInefficiency',
2514  offset = 0.111,
2515 )
2516 upgradeWFs['OTInefficiency'].percent = 'Zero'
2517 
2518 # 1% bad strips
2519 upgradeWFs['OTInefficiency1PC'] = deepcopy(upgradeWFs['OTInefficiency'])
2520 upgradeWFs['OTInefficiency1PC'].suffix = '_OTInefficiency1PC'
2521 upgradeWFs['OTInefficiency1PC'].offset = 0.112
2522 upgradeWFs['OTInefficiency1PC'].percent = 'One'
2523 
2524 # 5% bad strips
2525 upgradeWFs['OTInefficiency5PC'] = deepcopy(upgradeWFs['OTInefficiency'])
2526 upgradeWFs['OTInefficiency5PC'].suffix = '_OTInefficiency5PC'
2527 upgradeWFs['OTInefficiency5PC'].offset = 0.113
2528 upgradeWFs['OTInefficiency5PC'].percent = 'Five'
2529 
2530 # 10% bad strips
2531 upgradeWFs['OTInefficiency10PC'] = deepcopy(upgradeWFs['OTInefficiency'])
2532 upgradeWFs['OTInefficiency10PC'].suffix = '_OTInefficiency10PC'
2533 upgradeWFs['OTInefficiency10PC'].offset = 0.114
2534 upgradeWFs['OTInefficiency10PC'].percent = 'Ten'
2535 
2536 #
2537 # Simulates CROC signal shape in IT modules
2538 #
2540  def setup_(self, step, stepName, stepDict, k, properties):
2541  if 'Digi' in step:
2542  stepDict[stepName][k] = merge([{'--customise': 'SimTracker/SiPhase2Digitizer/customizeForPhase2TrackerSignalShape.customizeSiPhase2ITSignalShape'}, stepDict[step][k]])
2543  def condition(self, fragment, stepList, key, hasHarvest):
2544  return '2026' in key
2545 # define several of them
2546 upgradeWFs['ITSignalShape'] = UpgradeWorkflow_ITSignalShape(
2547  steps = [
2548  'Digi',
2549  'DigiTrigger',
2550  ],
2551  PU = [
2552  'Digi',
2553  'DigiTrigger',
2554  ],
2555  suffix = '_ITSignalShape',
2556  offset = 0.141
2557 )
2558 
2559 # Specifying explicitly the --filein is not nice but that was the
2560 # easiest way to "skip" the output of step2 (=premixing stage1) for
2561 # filein (as it goes to pileup_input). It works (a bit accidentally
2562 # though) also for "-i all" because in that case the --filein for DAS
2563 # input is after this one in the list of command line arguments to
2564 # cmsDriver, and gets then used in practice.
2565 digiPremixLocalPileup = {
2566  "--filein": "file:step1.root",
2567  "--pileup_input": "file:step2.root"
2568 }
2569 
2570 # for premix
2572  def setup_(self, step, stepName, stepDict, k, properties):
2573  # just copy steps
2574  stepDict[stepName][k] = merge([stepDict[step][k]])
2575  def setupPU_(self, step, stepName, stepDict, k, properties):
2576  # fastsim version
2577  if 'FS' in k:
2578  # setup for stage 1 fastsim
2579  if "Gen" in stepName:
2580  stepNamePmx = stepName.replace('Gen','Premix')
2581  if not stepNamePmx in stepDict: stepDict[stepNamePmx] = {}
2582  stepDict[stepNamePmx][k] = merge([
2583  {
2584  '-s': 'GEN,SIM,RECOBEFMIX,DIGI:pdigi_valid',
2585  '--fast':'',
2586  '--datatier': 'PREMIX',
2587  '--eventcontent': 'PREMIX',
2588  '--procModifiers': 'premix_stage1'
2589  },
2590  stepDict[stepName][k]
2591  ])
2592  if "ProdLike" in self.suffix:
2593  # todo
2594  pass
2595  # setup for stage 2 fastsim
2596  elif "FastSimRun3" in step:
2597  # go back to non-PU step version
2598  d = merge([stepDict[self.getStepName(step)][k]])
2599  if d is None: return
2600  tmpsteps = []
2601  for s in d["-s"].split(","):
2602  if s == "DIGI" or "DIGI:" in s:
2603  tmpsteps.extend([s, "DATAMIX"])
2604  else:
2605  tmpsteps.append(s)
2606  d = merge([{"-s" : ",".join(tmpsteps),
2607  "--datamix" : "PreMix"},
2608  d])
2609  if "--procModifiers" in d:
2610  d["--procModifiers"] += ",premix_stage2"
2611  else:
2612  d["--procModifiers"] = "premix_stage2"
2613  # for combined stage1+stage2
2614  if "_PMXS1S2" in self.suffix:
2615  d = merge([digiPremixLocalPileup, d])
2616  stepDict[stepName][k] = d
2617  elif "HARVESTFastRun3" in step:
2618  # increment input step number
2619  stepDict[stepName][k] = merge([{'--filein':'file:step3_inDQM.root'},stepDict[stepName][k]])
2620  else:
2621  # setup for stage 1
2622  if "GenSim" in stepName:
2623  stepNamePmx = stepName.replace('GenSim','Premix')
2624  if not stepNamePmx in stepDict: stepDict[stepNamePmx] = {}
2625  stepDict[stepNamePmx][k] = merge([
2626  {
2627  '-s': 'GEN,SIM,DIGI:pdigi_valid',
2628  '--datatier': 'PREMIX',
2629  '--eventcontent': 'PREMIX',
2630  '--procModifiers': 'premix_stage1'
2631  },
2632  stepDict[stepName][k]
2633  ])
2634  if "ProdLike" in self.suffix:
2635  stepDict[stepNamePmx][k] = merge([{'-s': 'GEN,SIM,DIGI'},stepDict[stepNamePmx][k]])
2636  # setup for stage 2
2637  elif "Digi" in step or "Reco" in step:
2638  # go back to non-PU step version
2639  d = merge([stepDict[self.getStepName(step)][k]])
2640  if d is None: return
2641  if "Digi" in step:
2642  tmpsteps = []
2643  for s in d["-s"].split(","):
2644  if s == "DIGI" or "DIGI:" in s:
2645  tmpsteps.extend([s, "DATAMIX"])
2646  else:
2647  tmpsteps.append(s)
2648  d = merge([{"-s" : ",".join(tmpsteps),
2649  "--datamix" : "PreMix",
2650  "--procModifiers": "premix_stage2"},
2651  d])
2652  # for combined stage1+stage2
2653  if "_PMXS1S2" in self.suffix:
2654  d = merge([digiPremixLocalPileup, d])
2655  elif "Reco" in step:
2656  if "--procModifiers" in d:
2657  d["--procModifiers"] += ",premix_stage2"
2658  else:
2659  d["--procModifiers"] = "premix_stage2"
2660  stepDict[stepName][k] = d
2661  # separate nano step now only used in ProdLike workflows for Run3/Phase2
2662  elif "Nano"==step:
2663  # go back to non-PU step version
2664  d = merge([stepDict[self.getStepName(step)][k]])
2665  if "_PMXS1S2" in self.suffix and "--filein" in d:
2666  filein = d["--filein"]
2667  m = re.search("step(?P<ind>\\d+)", filein)
2668  if m:
2669  d["--filein"] = filein.replace(m.group(), "step%d"%(int(m.group("ind"))+1))
2670  stepDict[stepName][k] = d
2671  # run2/3 WFs use Nano (not NanoPU) in PU WF
2672  stepDict[self.getStepName(step)][k] = merge([d])
2673  def condition(self, fragment, stepList, key, hasHarvest):
2674  if not 'PU' in key:
2675  return False
2676  if not any(y in key for y in ['2021', '2023', '2024', '2026']):
2677  return False
2678  if self.suffix.endswith("S1"):
2679  return "NuGun" in fragment
2680  return True
2681  def workflow_(self, workflows, num, fragment, stepList, key):
2682  fragmentTmp = fragment
2683  if self.suffix.endswith("S1"):
2684  fragmentTmp = 'PREMIXUP' + key[2:].replace("PU", "").replace("Design", "") + '_PU25'
2685  super(UpgradeWorkflowPremix,self).workflow_(workflows, num, fragmentTmp, stepList, key)
2686 # Premix stage1
2687 upgradeWFs['PMXS1'] = UpgradeWorkflowPremix(
2688  steps = [
2689  ],
2690  PU = [
2691  'Gen',
2692  'GenSim',
2693  'GenSimHLBeamSpot',
2694  'GenSimHLBeamSpot14',
2695  ],
2696  suffix = '_PMXS1',
2697  offset = 0.97,
2698 )
2699 # Premix stage2
2700 upgradeWFs['PMXS2'] = UpgradeWorkflowPremix(
2701  steps = [],
2702  PU = [
2703  'Digi',
2704  'DigiTrigger',
2705  'RecoLocal',
2706  'Reco',
2707  'RecoFakeHLT',
2708  'RecoGlobal',
2709  'RecoNano',
2710  'RecoNanoFakeHLT',
2711  'Nano',
2712  'FastSimRun3',
2713  'HARVESTFastRun3',
2714  ],
2715  suffix = '_PMXS2',
2716  offset = 0.98,
2717 )
2718 # Premix combined stage1+stage2
2719 upgradeWFs['PMXS1S2'] = UpgradeWorkflowPremix(
2720  steps = [],
2721  PU = [
2722  'Gen',
2723  'GenSim',
2724  'GenSimHLBeamSpot',
2725  'GenSimHLBeamSpot14',
2726  'Digi',
2727  'DigiTrigger',
2728  'RecoLocal',
2729  'Reco',
2730  'RecoFakeHLT',
2731  'RecoGlobal',
2732  'RecoNano',
2733  'RecoNanoFakeHLT',
2734  'Nano',
2735  'FastSimRun3',
2736  'HARVESTFastRun3',
2737  ],
2738  suffix = '_PMXS1S2',
2739  offset = 0.99,
2740 )
2741 # Alternative version of above w/ less PU for PR tests
2743  def setupPU_(self, step, stepName, stepDict, k, properties):
2744  # adjust first, so it gets copied into new Premix step
2745  if '--pileup' in stepDict[stepName][k]:
2746  stepDict[stepName][k]['--pileup'] = 'AVE_50_BX_25ns_m3p3'
2747  super(UpgradeWorkflowAdjustPU,self).setupPU_(step, stepName, stepDict, k, properties)
2748  def condition(self, fragment, stepList, key, hasHarvest):
2749  # restrict to phase2
2750  return super(UpgradeWorkflowAdjustPU,self).condition(fragment, stepList, key, hasHarvest) and '2026' in key
2751 upgradeWFs['PMXS1S2PR'] = UpgradeWorkflowAdjustPU(
2752  steps = [],
2753  PU = [
2754  'GenSim',
2755  'GenSimHLBeamSpot',
2756  'GenSimHLBeamSpot14',
2757  'Digi',
2758  'DigiTrigger',
2759  'RecoLocal',
2760  'Reco',
2761  'RecoFakeHLT',
2762  'RecoGlobal',
2763  'Nano',
2764  'HARVEST',
2765  'HARVESTFakeHLT',
2766  'HARVESTGlobal',
2767  ],
2768  suffix = '_PMXS1S2PR',
2769  offset = 0.999,
2770 )
2771 
2773  def setup_(self, step, stepName, stepDict, k, properties):
2774  # copy steps, then apply specializations
2775  UpgradeWorkflowPremix.setup_(self, step, stepName, stepDict, k, properties)
2776  UpgradeWorkflow_ProdLike.setup_(self, step, stepName, stepDict, k, properties)
2777  #
2778  if 'Digi' in step:
2779  d = merge([stepDict[self.getStepName(step)][k]])
2780  tmpsteps = []
2781  for s in d["-s"].split(","):
2782  if "DIGI:pdigi_valid" in s:
2783  tmpsteps.append("DIGI")
2784  else:
2785  tmpsteps.append(s)
2786  d = merge([{"-s" : ",".join(tmpsteps),
2787  "--eventcontent": "PREMIXRAW"},
2788  d])
2789  stepDict[stepName][k] = d
2790  def condition(self, fragment, stepList, key, hasHarvest):
2791  # use both conditions
2792  return UpgradeWorkflowPremix.condition(self, fragment, stepList, key, hasHarvest) and UpgradeWorkflow_ProdLike.condition(self, fragment, stepList, key, hasHarvest)
2793 # premix stage2
2794 upgradeWFs['PMXS2ProdLike'] = UpgradeWorkflowPremixProdLike(
2795  steps = [],
2796  PU = [
2797  'Digi',
2798  'DigiTrigger',
2799  'RecoLocal',
2800  'Reco',
2801  'RecoFakeHLT',
2802  'RecoGlobal',
2803  'RecoNano',
2804  'RecoNanoFakeHLT',
2805  'Nano',
2806  'HARVEST',
2807  'HARVESTFakeHLT',
2808  'HARVESTGlobal',
2809  'HARVESTNano',
2810  'HARVESTNanoFakeHLT',
2811  'MiniAOD',
2812  'ALCA',
2813  ],
2814  suffix = '_PMXS2ProdLike',
2815  offset = 0.9821,
2816 )
2817 # premix combined stage1+stage2
2818 upgradeWFs['PMXS1S2ProdLike'] = UpgradeWorkflowPremixProdLike(
2819  steps = [],
2820  PU = [
2821  'GenSim',
2822  'GenSimHLBeamSpot',
2823  'GenSimHLBeamSpot14',
2824  'Digi',
2825  'DigiTrigger',
2826  'RecoLocal',
2827  'Reco',
2828  'RecoFakeHLT',
2829  'RecoGlobal',
2830  'RecoNano',
2831  'RecoNanoFakeHLT',
2832  'Nano',
2833  'HARVEST',
2834  'HARVESTFakeHLT',
2835  'HARVESTGlobal',
2836  'HARVESTNano',
2837  'HARVESTNanoFakeHLT',
2838  'MiniAOD',
2839  'ALCA',
2840  ],
2841  suffix = '_PMXS1S2ProdLike',
2842  offset = 0.9921,
2843 )
2844 
2846  def setup_(self, step, stepName, stepDict, k, properties):
2847  if 'HARVESTFastRun3' in step:
2848  stepDict[stepName][k] = merge([{'-s':'HARVESTING:@trackingOnlyValidation+@trackingOnlyDQM',
2849  '--fast':'',
2850  '--era':'Run3_FastSim',
2851  '--filein':'file:step1_inDQM.root'}, stepDict[step][k]])
2852  else:
2853  stepDict[stepName][k] = merge([stepDict[step][k]])
2854  def condition(self, fragment, stepList, key, hasHarvest):
2855  return fragment=="TTbar_14TeV" and ('FS' in key)
2856 upgradeWFs['Run3FStrackingOnly'] = UpgradeWorkflow_Run3FStrackingOnly(
2857  steps = [
2858  'Gen',
2859  'FastSimRun3',
2860  'HARVESTFastRun3'
2861  ],
2862  PU = [
2863  'FastSimRun3',
2864  'HARVESTFastRun3'
2865  ],
2866  suffix = '_Run3FSTrackingOnly',
2867  offset = 0.302,
2868 )
2869 
2871  def setup_(self, step, stepName, stepDict, k, properties):
2872  if 'Gen' in step and 'GenOnly' not in step:
2873  stepDict[stepName][k] = merge([{'-s':'GEN,SIM,RECOBEFMIX',
2874  '--fast':'',
2875  '--era':'Run3_FastSim',
2876  '--eventcontent':'FASTPU',
2877  '--datatier':'GEN-SIM-RECO',
2878  '--relval':'27000,3000'}, stepDict[step][k]])
2879  else:
2880  stepDict[stepName][k] = None
2881  def condition(self, fragment, stepList, key, hasHarvest):
2882  return ('FS' in key) and fragment=="MinBias_14TeV"
2883 upgradeWFs['Run3FSMBMixing'] = UpgradeWorkflow_Run3FSMBMixing(
2884  steps = [
2885  'Gen',
2886  'FastSimRun3',
2887  'HARVESTFastRun3'
2888  ],
2889  PU = [],
2890  suffix = '_Run3FSMBMixing',
2891  offset = 0.303,
2892 )
2893 
2894 
2896  def setup_(self, step, stepName, stepDict, k, properties):
2897  if 'Phase2' in stepDict[step][k]['--era']:
2898  dd4hepGeom="DD4hep"
2899  dd4hepGeom+=stepDict[step][k]['--geometry']
2900  stepDict[stepName][k] = merge([{'--geometry' : dd4hepGeom, '--procModifiers': 'dd4hep'}, stepDict[step][k]])
2901  def condition(self, fragment, stepList, key, hasHarvest):
2902  return ('2026' in key) and ('FS' not in key)
2903 upgradeWFs['DD4hep'] = UpgradeWorkflow_DD4hep(
2904  steps = [
2905  'GenSim',
2906  'GenSimHLBeamSpot',
2907  'GenSimHLBeamSpot14',
2908  'Digi',
2909  'DigiTrigger',
2910  'Reco',
2911  'RecoFakeHLT',
2912  'RecoGlobal',
2913  'RecoNano',
2914  'RecoNanoFakeHLT',
2915  'HARVEST',
2916  'HARVESTFakeHLT',
2917  'HARVESTGlobal',
2918  'HARVESTNano',
2919  'HARVESTNanoFakeHLT',
2920  'ALCA',
2921  ],
2922  PU = [],
2923  suffix = '_DD4hep',
2924  offset = 0.911,
2925 )
2926 upgradeWFs['DD4hep'].allowReuse = False
2927 
2928 #This workflow is now obsolete, it becomes default for Run-3.
2929 #Keep it for future use in Phase-2, then delete
2931  def setup_(self, step, stepName, stepDict, k, properties):
2932  if 'Run3' in stepDict[step][k]['--era'] and 'Fast' not in stepDict[step][k]['--era']:
2933  stepDict[stepName][k] = merge([{'--conditions': 'auto:phase1_2022_realistic', '--geometry': 'DB:Extended'}, stepDict[step][k]])
2934  def condition(self, fragment, stepList, key, hasHarvest):
2935  return fragment=="TTbar_14TeV" and '2021' in key and 'FS' not in key
2936 upgradeWFs['DD4hepDB'] = UpgradeWorkflow_DD4hepDB(
2937  steps = [
2938  'GenSim',
2939  'GenSimHLBeamSpot',
2940  'GenSimHLBeamSpot14',
2941  'Digi',
2942  'DigiTrigger',
2943  'Reco',
2944  'RecoFakeHLT',
2945  'RecoGlobal',
2946  'RecoNano',
2947  'RecoNanoFakeHLT',
2948  'HARVEST',
2949  'HARVESTFakeHLT',
2950  'HARVESTGlobal',
2951  'HARVESTNano',
2952  'HARVESTNanoFakeHLT',
2953  'ALCA',
2954  ],
2955  PU = [],
2956  suffix = '_DD4hepDB',
2957  offset = 0.912,
2958 )
2959 upgradeWFs['DD4hepDB'].allowReuse = False
2960 
2962  def setup_(self, step, stepName, stepDict, k, properties):
2963  the_era = stepDict[step][k]['--era']
2964  if 'Run3' in the_era and '2023' not in the_era and '2024' not in the_era and 'Fast' not in the_era and "Pb" not in the_era:
2965  # retain any other eras
2966  tmp_eras = the_era.split(',')
2967  tmp_eras[tmp_eras.index("Run3")] = 'Run3_DDD'
2968  tmp_eras = ','.join(tmp_eras)
2969  stepDict[stepName][k] = merge([{'--conditions': 'auto:phase1_2022_realistic_ddd', '--geometry': 'DB:Extended', '--era': tmp_eras}, stepDict[step][k]])
2970  def condition(self, fragment, stepList, key, hasHarvest):
2971  return fragment=="TTbar_14TeV" and '2021' in key and 'FS' not in key
2972 upgradeWFs['DDDDB'] = UpgradeWorkflow_DDDDB(
2973  steps = [
2974  'GenSim',
2975  'GenSimHLBeamSpot',
2976  'GenSimHLBeamSpot14',
2977  'Digi',
2978  'DigiTrigger',
2979  'Reco',
2980  'RecoFakeHLT',
2981  'RecoGlobal',
2982  'RecoNano',
2983  'RecoNanoFakeHLT',
2984  'HARVEST',
2985  'HARVESTFakeHLT',
2986  'HARVESTGlobal',
2987  'HARVESTNano',
2988  'HARVESTNanoFakeHLT',
2989  'ALCA',
2990  ],
2991  PU = [],
2992  suffix = '_DDDDB',
2993  offset = 0.914,
2994 )
2995 upgradeWFs['DDDDB'].allowReuse = False
2996 
2998  def setup_(self, step, stepName, stepDict, k, properties):
2999  stepDict[stepName][k] = merge([{'--procModifiers': 'allSonicTriton'}, stepDict[step][k]])
3000  def condition(self, fragment, stepList, key, hasHarvest):
3001  return ((fragment=='TTbar_13' or fragment=='TTbar_14TeV') and '2021' in key) \
3002  or (fragment=='TTbar_14TeV' and '2026' in key)
3003 upgradeWFs['SonicTriton'] = UpgradeWorkflow_SonicTriton(
3004  steps = [
3005  'GenSim',
3006  'GenSimHLBeamSpot',
3007  'GenSimHLBeamSpot14',
3008  'Digi',
3009  'DigiTrigger',
3010  'Reco',
3011  'RecoFakeHLT',
3012  'RecoGlobal',
3013  'RecoNano',
3014  'RecoNanoFakeHLT',
3015  'HARVEST',
3016  'HARVESTFakeHLT',
3017  'HARVESTGlobal',
3018  'HARVESTNano',
3019  'HARVESTNanoFakeHLT',
3020  'ALCA',
3021  ],
3022  PU = [
3023  'GenSim',
3024  'GenSimHLBeamSpot',
3025  'GenSimHLBeamSpot14',
3026  'Digi',
3027  'DigiTrigger',
3028  'Reco',
3029  'RecoFakeHLT',
3030  'RecoGlobal',
3031  'RecoNano',
3032  'RecoNanoFakeHLT',
3033  'HARVEST',
3034  'HARVESTFakeHLT',
3035  'HARVESTGlobal',
3036  'HARVESTNano',
3037  'HARVESTNanoFakeHLT',
3038  'ALCA',
3039  ],
3040  suffix = '_SonicTriton',
3041  offset = 0.9001,
3042 )
3043 
3045  def setup_(self, step, stepName, stepDict, k, properties):
3046  stepDict[stepName][k] = merge([{'--procModifiers': 'phase2_pp_on_AA'}, stepDict[step][k]])
3047  if 'GenSim' in step:
3048  stepDict[stepName][k] = merge([{'--conditions': stepDict[step][k]["--conditions"].replace('_13TeV',''), '-n': 1}, stepDict[stepName][k]])
3049  elif 'Digi' in step:
3050  stepDict[stepName][k] = merge([{'-s': stepDict[step][k]["-s"].replace("DIGI:pdigi_valid","DIGI:pdigi_hi"), '--pileup': 'HiMixNoPU'}, stepDict[stepName][k]])
3051  def condition(self, fragment, stepList, key, hasHarvest):
3052  return fragment=='HydjetQMinBias_5519GeV' and '2026' in key and 'PU' not in key
3053 
3054 upgradeWFs['Phase2_HeavyIon'] = UpgradeWorkflow_Phase2_HeavyIon(
3055  steps = [
3056  'GenSimHLBeamSpot',
3057  'DigiTrigger',
3058  'RecoGlobal',
3059  'HARVESTGlobal',
3060  'ALCAPhase2'
3061  ],
3062  PU = [],
3063  suffix = '_hi',
3064  offset = 0.85,
3065 )
3066 
3067 # check for duplicates in offsets or suffixes
3068 offsets = [specialWF.offset for specialType,specialWF in upgradeWFs.items()]
3069 suffixes = [specialWF.suffix for specialType,specialWF in upgradeWFs.items()]
3070 
3071 dups = check_dups(offsets)
3072 if len(dups)>0:
3073  raise ValueError("Duplicate special workflow offsets not allowed: "+','.join([str(x) for x in dups]))
3074 
3075 dups = check_dups(suffixes)
3076 if len(dups)>0:
3077  raise ValueError("Duplicate special workflow suffixes not allowed: "+','.join([str(x) for x in dups]))
3078 
3079 upgradeProperties = {}
3080 
3081 upgradeProperties[2017] = {
3082  '2017' : {
3083  'Geom' : 'DB:Extended',
3084  'GT' : 'auto:phase1_2017_realistic',
3085  'HLTmenu': '@relval2017',
3086  'Era' : 'Run2_2017',
3087  'ScenToRun' : ['GenSim','Digi','RecoFakeHLT','HARVESTFakeHLT','ALCA','Nano'],
3088  },
3089  '2017Design' : {
3090  'Geom' : 'DB:Extended',
3091  'GT' : 'auto:phase1_2017_design',
3092  'HLTmenu': '@relval2017',
3093  'Era' : 'Run2_2017',
3094  'BeamSpot': 'DBdesign',
3095  'ScenToRun' : ['GenSim','Digi','RecoFakeHLT','HARVESTFakeHLT'],
3096  },
3097  '2018' : {
3098  'Geom' : 'DB:Extended',
3099  'GT' : 'auto:phase1_2018_realistic',
3100  'HLTmenu': '@relval2018',
3101  'Era' : 'Run2_2018',
3102  'BeamSpot': 'DBrealistic',
3103  'ScenToRun' : ['GenSim','Digi','RecoFakeHLT','HARVESTFakeHLT','ALCA','Nano'],
3104  },
3105  '2018Design' : {
3106  'Geom' : 'DB:Extended',
3107  'GT' : 'auto:phase1_2018_design',
3108  'HLTmenu': '@relval2018',
3109  'Era' : 'Run2_2018',
3110  'BeamSpot': 'DBdesign',
3111  'ScenToRun' : ['GenSim','Digi','RecoFakeHLT','HARVESTFakeHLT'],
3112  },
3113  '2021' : {
3114  'Geom' : 'DB:Extended',
3115  'GT' : 'auto:phase1_2022_realistic',
3116  'HLTmenu': '@relval2022',
3117  'Era' : 'Run3',
3118  'BeamSpot': 'DBrealistic',
3119  'ScenToRun' : ['GenSim','Digi','RecoNanoFakeHLT','HARVESTNanoFakeHLT','ALCA'],
3120  },
3121  '2021Design' : {
3122  'Geom' : 'DB:Extended',
3123  'GT' : 'auto:phase1_2022_design',
3124  'HLTmenu': '@relval2022',
3125  'Era' : 'Run3',
3126  'BeamSpot': 'DBdesign',
3127  'ScenToRun' : ['GenSim','Digi','RecoNanoFakeHLT','HARVESTNanoFakeHLT'],
3128  },
3129  '2023' : {
3130  'Geom' : 'DB:Extended',
3131  'GT' : 'auto:phase1_2023_realistic',
3132  'HLTmenu': '@relval2023',
3133  'Era' : 'Run3_2023',
3134  'BeamSpot': 'DBrealistic',
3135  'ScenToRun' : ['GenSim','Digi','RecoNanoFakeHLT','HARVESTNanoFakeHLT','ALCA'],
3136  },
3137  '2024' : {
3138  'Geom' : 'DB:Extended',
3139  'GT' : 'auto:phase1_2024_realistic',
3140  'HLTmenu': '@relval2024',
3141  'Era' : 'Run3_2024',
3142  'BeamSpot': 'DBrealistic',
3143  'ScenToRun' : ['GenSim','Digi','RecoNano','HARVESTNano','ALCA'],
3144  },
3145  '2024HLTOnDigi' : {
3146  'Geom' : 'DB:Extended',
3147  'GT' : 'auto:phase1_2024_realistic',
3148  'HLTmenu': '@relval2024',
3149  'Era' : 'Run3',
3150  'BeamSpot': 'DBrealistic',
3151  'ScenToRun' : ['GenSim','DigiNoHLT','HLTOnly','RecoNano','HARVESTNano','ALCA'],
3152  },
3153  '2021FS' : {
3154  'Geom' : 'DB:Extended',
3155  'GT' : 'auto:phase1_2022_realistic',
3156  'HLTmenu': '@relval2022',
3157  'Era' : 'Run3_FastSim',
3158  'BeamSpot': 'DBrealistic',
3159  'ScenToRun' : ['Gen','FastSimRun3','HARVESTFastRun3'],
3160  },
3161  '2021postEE' : {
3162  'Geom' : 'DB:Extended',
3163  'GT' : 'auto:phase1_2022_realistic_postEE',
3164  'HLTmenu': '@relval2022',
3165  'Era' : 'Run3',
3166  'BeamSpot': 'DBrealistic',
3167  'ScenToRun' : ['GenSim','Digi','RecoNanoFakeHLT','HARVESTNanoFakeHLT','ALCA'],
3168  },
3169  '2023FS' : {
3170  'Geom' : 'DB:Extended',
3171  'GT' : 'auto:phase1_2023_realistic',
3172  'HLTmenu': '@relval2023',
3173  'Era' : 'Run3_2023_FastSim',
3174  'BeamSpot': 'DBrealistic',
3175  'ScenToRun' : ['Gen','FastSimRun3','HARVESTFastRun3'],
3176  },
3177  '2022HI' : {
3178  'Geom' : 'DB:Extended',
3179  'GT':'auto:phase1_2022_realistic_hi',
3180  'HLTmenu': '@fake2',
3181  'Era':'Run3_pp_on_PbPb',
3182  'BeamSpot': 'DBrealistic',
3183  'ScenToRun' : ['GenSim','Digi','RecoNano','HARVESTNano','ALCA'],
3184  },
3185  '2022HIRP' : {
3186  'Geom' : 'DB:Extended',
3187  'GT':'auto:phase1_2022_realistic_hi',
3188  'HLTmenu': '@fake2',
3189  'Era':'Run3_pp_on_PbPb_approxSiStripClusters',
3190  'BeamSpot': 'DBrealistic',
3191  'ScenToRun' : ['GenSim','Digi','RecoNano','HARVESTNano','ALCA'],
3192  },
3193  '2023HI' : {
3194  'Geom' : 'DB:Extended',
3195  'GT':'auto:phase1_2023_realistic_hi',
3196  'HLTmenu': '@fake2',
3197  'Era':'Run3_pp_on_PbPb',
3198  'BeamSpot': 'DBrealistic',
3199  'ScenToRun' : ['GenSim','Digi','RecoNano','HARVESTNano','ALCA'],
3200  },
3201  '2023HIRP' : {
3202  'Geom' : 'DB:Extended',
3203  'GT':'auto:phase1_2023_realistic_hi',
3204  'HLTmenu': '@fake2',
3205  'Era':'Run3_pp_on_PbPb_approxSiStripClusters',
3206  'BeamSpot': 'DBrealistic',
3207  'ScenToRun' : ['GenSim','Digi','RecoNano','HARVESTNano','ALCA'],
3208  },
3209  '2024GenOnly' : {
3210  'Geom' : 'DB:Extended',
3211  'GT' : 'auto:phase1_2024_realistic',
3212  'Era' : 'Run3',
3213  'BeamSpot': 'DBrealistic',
3214  'ScenToRun' : ['Gen'],
3215  },
3216  '2024SimOnGen' : {
3217  'Geom' : 'DB:Extended',
3218  'GT' : 'auto:phase1_2024_realistic',
3219  'HLTmenu': '@relval2024',
3220  'Era' : 'Run3',
3221  'BeamSpot': 'DBrealistic',
3222  'ScenToRun' : ['Gen','Sim','Digi','RecoNano','HARVESTNano','ALCA'],
3223  },
3224  '2024FS' : {
3225  'Geom' : 'DB:Extended',
3226  'GT' : 'auto:phase1_2024_realistic',
3227  'HLTmenu': '@relval2024',
3228  'Era' : 'Run3_FastSim',
3229  'BeamSpot': 'DBrealistic',
3230  'ScenToRun' : ['Gen','FastSimRun3','HARVESTFastRun3'],
3231  },
3232 }
3233 
3234 # standard PU sequences
3235 for key in list(upgradeProperties[2017].keys()):
3236  upgradeProperties[2017][key+'PU'] = deepcopy(upgradeProperties[2017][key])
3237  if 'FS' not in key:
3238  # update ScenToRun list
3239  scenToRun = upgradeProperties[2017][key+'PU']['ScenToRun']
3240  for idx,val in enumerate(scenToRun):
3241  # Digi -> DigiPU, Reco* -> Reco*PU, HARVEST* -> HARVEST*PU
3242  scenToRun[idx] += 'PU'*(val.startswith('Digi') or val.startswith('Reco') or val.startswith('HARVEST'))
3243  # remove ALCA
3244  upgradeProperties[2017][key+'PU']['ScenToRun'] = [foo for foo in scenToRun if foo != 'ALCA']
3245  else:
3246  upgradeProperties[2017][key+'PU']['ScenToRun'] = ['Gen','FastSimRun3PU','HARVESTFastRun3PU']
3247 
3248 upgradeProperties[2026] = {
3249  '2026D86' : {
3250  'Geom' : 'Extended2026D86',
3251  'HLTmenu': '@fake2',
3252  'GT' : 'auto:phase2_realistic_T21',
3253  'Era' : 'Phase2C17I13M9',
3254  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3255  },
3256  '2026D88' : {
3257  'Geom' : 'Extended2026D88',
3258  'HLTmenu': '@relval2026',
3259  'GT' : 'auto:phase2_realistic_T21',
3260  'Era' : 'Phase2C17I13M9',
3261  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3262  },
3263  '2026D91' : {
3264  'Geom' : 'Extended2026D91',
3265  'HLTmenu': '@fake2',
3266  'GT' : 'auto:phase2_realistic_T30',
3267  'Era' : 'Phase2C17I13M9',
3268  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3269  },
3270  '2026D92' : {
3271  'Geom' : 'Extended2026D92',
3272  'HLTmenu': '@fake2',
3273  'GT' : 'auto:phase2_realistic_T21',
3274  'Era' : 'Phase2C17I13M9',
3275  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3276  },
3277  '2026D93' : {
3278  'Geom' : 'Extended2026D93',
3279  'HLTmenu': '@fake2',
3280  'GT' : 'auto:phase2_realistic_T21',
3281  'Era' : 'Phase2C17I13M9',
3282  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3283  },
3284  '2026D94' : {
3285  'Geom' : 'Extended2026D94',
3286  'HLTmenu': '@fake2',
3287  'GT' : 'auto:phase2_realistic_T21',
3288  'Era' : 'Phase2C20I13M9',
3289  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3290  },
3291  '2026D95' : {
3292  'Geom' : 'Extended2026D95',
3293  'HLTmenu': '@relval2026',
3294  'GT' : 'auto:phase2_realistic_T21',
3295  'Era' : 'Phase2C17I13M9',
3296  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3297  },
3298  '2026D96' : {
3299  'Geom' : 'Extended2026D96',
3300  'HLTmenu': '@fake2',
3301  'GT' : 'auto:phase2_realistic_T21',
3302  'Era' : 'Phase2C17I13M9',
3303  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3304  },
3305  '2026D97' : {
3306  'Geom' : 'Extended2026D97',
3307  'HLTmenu': '@fake2',
3308  'GT' : 'auto:phase2_realistic_T25',
3309  'Era' : 'Phase2C17I13M9',
3310  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3311  },
3312  '2026D98' : {
3313  'Geom' : 'Extended2026D98',
3314  'HLTmenu': '@relval2026',
3315  'GT' : 'auto:phase2_realistic_T25',
3316  'Era' : 'Phase2C17I13M9',
3317  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3318  },
3319  '2026D99' : {
3320  'Geom' : 'Extended2026D99',
3321  'HLTmenu': '@relval2026',
3322  'GT' : 'auto:phase2_realistic_T25',
3323  'Era' : 'Phase2C17I13M9',
3324  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3325  },
3326  '2026D100' : {
3327  'Geom' : 'Extended2026D100',
3328  'HLTmenu': '@relval2026',
3329  'GT' : 'auto:phase2_realistic_T25',
3330  'Era' : 'Phase2C17I13M9',
3331  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3332  },
3333  '2026D101' : {
3334  'Geom' : 'Extended2026D101',
3335  'HLTmenu': '@relval2026',
3336  'GT' : 'auto:phase2_realistic_T25',
3337  'Era' : 'Phase2C17I13M9',
3338  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3339  },
3340  '2026D102' : {
3341  'Geom' : 'Extended2026D102',
3342  'HLTmenu': '@relval2026',
3343  'GT' : 'auto:phase2_realistic_T33',
3344  'Era' : 'Phase2C17I13M9',
3345  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3346  },
3347  '2026D103' : {
3348  'Geom' : 'Extended2026D103',
3349  'HLTmenu': '@relval2026',
3350  'GT' : 'auto:phase2_realistic_T25',
3351  'Era' : 'Phase2C17I13M9',
3352  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3353  },
3354  '2026D104' : {
3355  'Geom' : 'Extended2026D104',
3356  'HLTmenu': '@relval2026',
3357  'GT' : 'auto:phase2_realistic_T33',
3358  'Era' : 'Phase2C22I13M9',
3359  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3360  },
3361  '2026D105' : {
3362  'Geom' : 'Extended2026D105',
3363  'HLTmenu': '@relval2026',
3364  'GT' : 'auto:phase2_realistic_T33',
3365  'Era' : 'Phase2C17I13M9',
3366  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3367  },
3368  '2026D106' : {
3369  'Geom' : 'Extended2026D106',
3370  'HLTmenu': '@relval2026',
3371  'GT' : 'auto:phase2_realistic_T33',
3372  'Era' : 'Phase2C22I13M9',
3373  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3374  },
3375  '2026D107' : {
3376  'Geom' : 'Extended2026D107',
3377  'HLTmenu': '@relval2026',
3378  'GT' : 'auto:phase2_realistic_T25',
3379  'Era' : 'Phase2C17I13M9',
3380  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3381  },
3382  '2026D108' : {
3383  'Geom' : 'Extended2026D108',
3384  'HLTmenu': '@relval2026',
3385  'GT' : 'auto:phase2_realistic_T33',
3386  'Era' : 'Phase2C17I13M9',
3387  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3388  },
3389  '2026D109' : {
3390  'Geom' : 'Extended2026D109',
3391  'HLTmenu': '@relval2026',
3392  'GT' : 'auto:phase2_realistic_T33',
3393  'Era' : 'Phase2C22I13M9',
3394  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3395  },
3396  '2026D110' : {
3397  'Geom' : 'Extended2026D110',
3398  'HLTmenu': '@relval2026',
3399  'GT' : 'auto:phase2_realistic_T33',
3400  'Era' : 'Phase2C17I13M9',
3401  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3402  },
3403  '2026D111' : {
3404  'Geom' : 'Extended2026D111',
3405  'HLTmenu': '@relval2026',
3406  'GT' : 'auto:phase2_realistic_T36',
3407  'Era' : 'Phase2C22I13M9',
3408  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3409  },
3410  '2026D112' : {
3411  'Geom' : 'Extended2026D112',
3412  'HLTmenu': '@relval2026',
3413  'GT' : 'auto:phase2_realistic_T37',
3414  'Era' : 'Phase2C22I13M9',
3415  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3416  },
3417  '2026D113' : {
3418  'Geom' : 'Extended2026D113',
3419  'HLTmenu': '@relval2026',
3420  'GT' : 'auto:phase2_realistic_T38',
3421  'Era' : 'Phase2C22I13M9',
3422  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3423  },
3424  '2026D114' : {
3425  'Geom' : 'Extended2026D114',
3426  'HLTmenu': '@relval2026',
3427  'GT' : 'auto:phase2_realistic_T33',
3428  'Era' : 'Phase2C17I13M9',
3429  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3430  },
3431  '2026D110GenOnly' : {
3432  'Geom' : 'Extended2026D110',
3433  'BeamSpot' : 'DBrealisticHLLHC',
3434  'GT' : 'auto:phase2_realistic_T33',
3435  'Era' : 'Phase2C17I13M9',
3436  'ScenToRun' : ['GenHLBeamSpot'],
3437  },
3438  '2026D110SimOnGen' : {
3439  'Geom' : 'Extended2026D110',
3440  'HLTmenu': '@relval2026',
3441  'BeamSpot' : 'DBrealisticHLLHC',
3442  'GT' : 'auto:phase2_realistic_T33',
3443  'Era' : 'Phase2C17I13M9',
3444  'ScenToRun' : ['GenHLBeamSpot','Sim','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3445  },
3446  '2026D115' : {
3447  'Geom' : 'Extended2026D115',
3448  'HLTmenu': '@relval2026',
3449  'GT' : 'auto:phase2_realistic_T33',
3450  'Era' : 'Phase2C20I13M9',
3451  'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
3452  },
3453 }
3454 
3455 # standard PU sequences
3456 for key in list(upgradeProperties[2026].keys()):
3457  upgradeProperties[2026][key+'PU'] = deepcopy(upgradeProperties[2026][key])
3458  upgradeProperties[2026][key+'PU']['ScenToRun'] = ['GenSimHLBeamSpot','DigiTriggerPU','RecoGlobalPU', 'HARVESTGlobalPU']
3459 
3460 # for relvals
3461 defaultDataSets = {}
3462 for year in upgradeKeys:
3463  for key in upgradeKeys[year]:
3464  if 'PU' in key: continue
3465  defaultDataSets[key] = ''
3466 
3467 
3469  def __init__(self, howMuch, dataset):
3470  self.howMuch = howMuch
3471  self.dataset = dataset
3472 
3473 upgradeFragments = OrderedDict([
3474  ('FourMuPt_1_200_pythia8_cfi', UpgradeFragment(Kby(10,100),'FourMuPt1_200')),
3475  ('SingleElectronPt10_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleElectronPt10')),
3476  ('SingleElectronPt35_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleElectronPt35')),
3477  ('SingleElectronPt1000_pythia8_cfi', UpgradeFragment(Kby(9,50),'SingleElectronPt1000')),
3478  ('SingleGammaPt10_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleGammaPt10')),
3479  ('SingleGammaPt35_pythia8_cfi', UpgradeFragment(Kby(9,50),'SingleGammaPt35')),
3480  ('SingleMuPt1_pythia8_cfi', UpgradeFragment(Kby(25,100),'SingleMuPt1')),
3481  ('SingleMuPt10_Eta2p85_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt10')),
3482  ('SingleMuPt100_Eta2p85_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt100')),
3483  ('SingleMuPt1000_Eta2p85_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt1000')),
3484  ('FourMuExtendedPt_1_200_pythia8_cfi', UpgradeFragment(Kby(10,100),'FourMuExtendedPt1_200')),
3485  ('TenMuExtendedE_0_200_pythia8_cfi', UpgradeFragment(Kby(10,100),'TenMuExtendedE_0_200')),
3486  ('DoubleElectronPt10Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleElPt10Extended')),
3487  ('DoubleElectronPt35Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleElPt35Extended')),
3488  ('DoubleElectronPt1000Extended_pythia8_cfi', UpgradeFragment(Kby(9,50),'SingleElPt1000Extended')),
3489  ('DoubleGammaPt10Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleGammaPt10Extended')),
3490  ('DoubleGammaPt35Extended_pythia8_cfi', UpgradeFragment(Kby(9,50),'SingleGammaPt35Extended')),
3491  ('DoubleMuPt1Extended_pythia8_cfi', UpgradeFragment(Kby(25,100),'SingleMuPt1Extended')),
3492  ('DoubleMuPt10Extended_pythia8_cfi', UpgradeFragment(Kby(25,100),'SingleMuPt10Extended')),
3493  ('DoubleMuPt100Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt100Extended')),
3494  ('DoubleMuPt1000Extended_pythia8_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt1000Extended')),
3495  ('TenMuE_0_200_pythia8_cfi', UpgradeFragment(Kby(10,100),'TenMuE_0_200')),
3496  ('SinglePiE50HCAL_pythia8_cfi', UpgradeFragment(Kby(50,500),'SinglePiE50HCAL')),
3497  ('MinBias_13TeV_pythia8_TuneCUETP8M1_cfi', UpgradeFragment(Kby(90,100),'MinBias_13')),
3498  ('TTbar_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'TTbar_13')),
3499  ('ZEE_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'ZEE_13')),
3500  ('QCD_Pt_600_800_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QCD_Pt_600_800_13')),
3501  ('Wjet_Pt_80_120_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'Wjet_Pt_80_120_14TeV')),
3502  ('Wjet_Pt_3000_3500_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'Wjet_Pt_3000_3500_14TeV')),
3503  ('LM1_sfts_14TeV_cfi', UpgradeFragment(Kby(9,100),'LM1_sfts_14TeV')),
3504  ('QCD_Pt_3000_3500_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QCD_Pt_3000_3500_14TeV')),
3505  ('QCD_Pt_80_120_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'QCD_Pt_80_120_14TeV')),
3506  ('H200ChargedTaus_Tauola_14TeV_cfi', UpgradeFragment(Kby(9,100),'Higgs200ChargedTaus_14TeV')),
3507  ('JpsiMM_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(66,100),'JpsiMM_14TeV')),
3508  ('TTbar_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,100),'TTbar_14TeV')),
3509  ('WE_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'WE_14TeV')),
3510  ('ZTT_Tauola_All_hadronic_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,100),'ZTT_14TeV')),
3511  ('H130GGgluonfusion_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'H130GGgluonfusion_14TeV')),
3512  ('PhotonJet_Pt_10_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'PhotonJets_Pt_10_14TeV')),
3513  ('QQH1352T_Tauola_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'QQH1352T_Tauola_14TeV')),
3514  ('MinBias_14TeV_pythia8_TuneCP5_cfi', UpgradeFragment(Kby(90,100),'MinBias_14TeV')),
3515  ('WToMuNu_14TeV_TuneCP5_pythia8_cfi', UpgradeFragment(Kby(9,100),'WToMuNu_14TeV')),
3516  ('ZMM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(18,100),'ZMM_13')),
3517  ('QCDForPF_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(50,100),'QCD_FlatPt_15_3000HS_14')),
3518  ('DYToLL_M-50_14TeV_pythia8_cff', UpgradeFragment(Kby(9,100),'DYToLL_M_50_14TeV')),
3519  ('DYToTauTau_M-50_14TeV_pythia8_tauola_cff', UpgradeFragment(Kby(9,100),'DYtoTauTau_M_50_14TeV')),
3520  ('ZEE_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,100),'ZEE_14')),
3521  ('QCD_Pt_80_120_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,100),'QCD_Pt_80_120_13')),
3522  ('H125GGgluonfusion_13TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,50),'H125GGgluonfusion_13')),
3523  ('QCD_Pt20toInf_MuEnrichedPt15_14TeV_TuneCP5_cff', UpgradeFragment(Kby(19565, 217391),'QCD_Pt20toInfMuEnrichPt15_14')), # effi = 4.6e-4, local=8.000e-04
3524  ('ZMM_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(18,100),'ZMM_14')),
3525  ('QCD_Pt15To7000_Flat_14TeV_TuneCP5_cff', UpgradeFragment(Kby(9,50),'QCD_Pt15To7000_Flat_14')),
3526  ('H125GGgluonfusion_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,50),'H125GGgluonfusion_14')),
3527  ('QCD_Pt_600_800_14TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QCD_Pt_600_800_14')),
3528  ('UndergroundCosmicSPLooseMu_cfi', UpgradeFragment(Kby(9,50),'CosmicsSPLoose')),
3529  ('BeamHalo_13TeV_cfi', UpgradeFragment(Kby(9,50),'BeamHalo_13')),
3530  ('H200ChargedTaus_Tauola_13TeV_cfi', UpgradeFragment(Kby(9,50),'Higgs200ChargedTaus_13')),
3531  ('ADDMonoJet_13TeV_d3MD3_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ADDMonoJet_d3MD3_13')),
3532  ('ZpMM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZpMM_13')),
3533  ('QCD_Pt_3000_3500_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QCD_Pt_3000_3500_13')),
3534  ('WpM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'WpM_13')),
3535  ('SingleNuE10_cfi', UpgradeFragment(Kby(9,50),'NuGun')),
3536  ('TTbarLepton_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'TTbarLepton_13')),
3537  ('WE_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'WE_13')),
3538  ('WM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'WM_13')),
3539  ('ZTT_All_hadronic_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZTT_13')),
3540  ('PhotonJet_Pt_10_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'PhotonJets_Pt_10_13')),
3541  ('QQH1352T_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'QQH1352T_13')),
3542  ('Wjet_Pt_80_120_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'Wjet_Pt_80_120_13')),
3543  ('Wjet_Pt_3000_3500_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'Wjet_Pt_3000_3500_13')),
3544  ('SMS-T1tttt_mGl-1500_mLSP-100_13TeV-pythia8_cfi', UpgradeFragment(Kby(9,50),'SMS-T1tttt_mGl-1500_mLSP-100_13')),
3545  ('QCDForPF_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(50,100),'QCD_FlatPt_15_3000HS_13')),
3546  ('PYTHIA8_PhiToMuMu_TuneCUETP8M1_13TeV_cff', UpgradeFragment(Kby(9,50),'PhiToMuMu_13')),
3547  ('RSKKGluon_m3000GeV_13TeV_TuneCUETP8M1_cff', UpgradeFragment(Kby(9,50),'RSKKGluon_m3000GeV_13')),
3548  ('ZpMM_2250_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZpMM_2250_13')),
3549  ('ZpEE_2250_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZpEE_2250_13')),
3550  ('ZpTT_1500_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'ZpTT_1500_13')),
3551  ('Upsilon1SToMuMu_forSTEAM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(9,50),'Upsilon1SToMuMu_13')),
3552  ('EtaBToJpsiJpsi_forSTEAM_TuneCUEP8M1_13TeV_cfi', UpgradeFragment(Kby(9,50),'EtaBToJpsiJpsi_13')),
3553  ('JpsiMuMu_Pt-8_forSTEAM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(3100,100000),'JpsiMuMu_Pt-8')),
3554  ('BuMixing_BMuonFilter_forSTEAM_13TeV_TuneCUETP8M1_cfi', UpgradeFragment(Kby(900,10000),'BuMixing_13')),
3555  ('HSCPstop_M_200_TuneCUETP8M1_13TeV_pythia8_cff', UpgradeFragment(Kby(9,50),'HSCPstop_M_200_13')),
3556  ('RSGravitonToGammaGamma_kMpl01_M_3000_TuneCUETP8M1_13TeV_pythia8_cfi', UpgradeFragment(Kby(9,50),'RSGravitonToGaGa_13')),
3557  ('WprimeToENu_M-2000_TuneCUETP8M1_13TeV-pythia8_cff', UpgradeFragment(Kby(9,50),'WpToENu_M-2000_13')),
3558  ('DisplacedSUSY_stopToBottom_M_800_500mm_TuneCP5_13TeV_pythia8_cff', UpgradeFragment(Kby(9,50),'DisplacedSUSY_stopToB_M_800_500mm_13')),
3559  ('TenE_E_0_200_pythia8_cfi', UpgradeFragment(Kby(9,100),'TenE_0_200')),
3560  ('FlatRandomPtAndDxyGunProducer_cfi', UpgradeFragment(Kby(9,100),'DisplacedMuonsDxy_0_500')),
3561  ('TenTau_E_15_500_pythia8_cfi', UpgradeFragment(Kby(9,100),'TenTau_15_500')),
3562  ('SinglePiPt25Eta1p7_2p7_cfi', UpgradeFragment(Kby(9,100),'SinglePiPt25Eta1p7_2p7')),
3563  ('SingleMuPt15Eta1p7_2p7_cfi', UpgradeFragment(Kby(9,100),'SingleMuPt15Eta1p7_2p7')),
3564  ('SingleGammaPt25Eta1p7_2p7_cfi', UpgradeFragment(Kby(9,100),'SingleGammaPt25Eta1p7_2p7')),
3565  ('SingleElectronPt15Eta1p7_2p7_cfi', UpgradeFragment(Kby(9,100),'SingleElectronPt15Eta1p7_2p7')),
3566  ('ZTT_All_hadronic_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,50),'ZTT_14')),
3567  ('CloseByParticle_Photon_ERZRanges_cfi', UpgradeFragment(Kby(9,100),'CloseByParticleGun')),
3568  ('CE_E_Front_300um_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_E_Front_300um')),
3569  ('CE_E_Front_200um_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_E_Front_200um')),
3570  ('CE_E_Front_120um_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_E_Front_120um')),
3571  ('CE_H_Fine_300um_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_H_Fine_300um')),
3572  ('CE_H_Fine_200um_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_H_Fine_200um')),
3573  ('CE_H_Fine_120um_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_H_Fine_120um')),
3574  ('CE_H_Coarse_Scint_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_H_Coarse_Scint')),
3575  ('CE_H_Coarse_300um_cfi', UpgradeFragment(Kby(9,100),'CloseByPGun_CE_H_Coarse_300um')),
3576  ('SingleElectronFlatPt2To100_cfi', UpgradeFragment(Kby(9,100),'SingleEFlatPt2To100')),
3577  ('SingleMuFlatPt0p7To10_cfi', UpgradeFragment(Kby(9,100),'SingleMuFlatPt0p7To10')),
3578  ('SingleMuFlatPt2To100_cfi', UpgradeFragment(Kby(9,100),'SingleMuFlatPt2To100')),
3579  ('SingleGammaFlatPt8To150_cfi', UpgradeFragment(Kby(9,100),'SingleGammaFlatPt8To150')),
3580  ('SinglePiFlatPt0p7To10_cfi', UpgradeFragment(Kby(9,100),'SinglePiFlatPt0p7To10')),
3581  ('SingleTauFlatPt2To150_cfi', UpgradeFragment(Kby(9,100),'SingleTauFlatPt2To150')),
3582  ('FlatRandomPtAndDxyGunProducer_MuPt2To10_cfi', UpgradeFragment(Kby(9,100),'DisplacedMuPt2To10')),
3583  ('FlatRandomPtAndDxyGunProducer_MuPt10To30_cfi', UpgradeFragment(Kby(9,100),'DisplacedMuPt10To30')),
3584  ('FlatRandomPtAndDxyGunProducer_MuPt30To100_cfi', UpgradeFragment(Kby(9,100),'DisplacedMuPt30To100')),
3585  ('B0ToKstarMuMu_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(304,3030),'B0ToKstarMuMu_14TeV')), # 3.3%
3586  ('BsToEleEle_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(223,2222),'BsToEleEle_14TeV')), # 4.5%
3587  ('BsToJpsiGamma_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(2500,25000),'BsToJpsiGamma_14TeV')), # 0.4%
3588  ('BsToJpsiPhi_mumuKK_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(910,9090),'BsToJpsiPhi_mumuKK_14TeV')), # 1.1%
3589  ('BsToMuMu_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(313,3125),'BsToMuMu_14TeV')), # 3.2%
3590  ('BsToPhiPhi_KKKK_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(556,5555),'BsToPhiPhi_KKKK_14TeV')), # 1.8%
3591  ('TauToMuMuMu_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(18939,189393),'TauToMuMuMu_14TeV')), # effi = 5.280e-04
3592  ('BdToKstarEleEle_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(206,2061),'BdToKstarEleEle_14TeV')), #effi = 4.850e-02
3593  ('ZpTT_1500_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,50),'ZpTT_1500_14')),
3594  ('BuMixing_BMuonFilter_forSTEAM_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(900,10000),'BuMixing_14')),
3595  ('Upsilon1SToMuMu_forSTEAM_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,50),'Upsilon1SToMuMu_14')),
3596  ('TenTau_E_15_500_Eta3p1_pythia8_cfi', UpgradeFragment(Kby(9,100),'TenTau_15_500_Eta3p1')),
3597  ('QCD_Pt_1800_2400_14TeV_TuneCP5_cfi', UpgradeFragment(Kby(9,50), 'QCD_Pt_1800_2400_14')),
3598  ('DisplacedSUSY_stopToBottom_M_800_500mm_TuneCP5_14TeV_pythia8_cff', UpgradeFragment(Kby(9,50),'DisplacedSUSY_14TeV')),
3599  ('GluGluTo2Jets_M_300_2000_14TeV_Exhume_cff',UpgradeFragment(Kby(9,100),'GluGluTo2Jets_14TeV')),
3600  ('TTbarToDilepton_mt172p5_TuneCP5_14TeV_pythia8_cfi',UpgradeFragment(Kby(9,50),'TTbarToDilepton_14TeV')),
3601  ('QQToHToTauTau_mh125_TuneCP5_14TeV_pythia8_cfi',UpgradeFragment(Kby(9,50),'QQToHToTauTau_14TeV')),
3602  ('ZpToEE_m6000_TuneCP5_14TeV_pythia8_cfi',UpgradeFragment(Kby(9,50),'ZpToEE_m6000_14TeV')),
3603  ('ZpToMM_m6000_TuneCP5_14TeV_pythia8_cfi',UpgradeFragment(Kby(9,50),'ZpToMM_m6000_14TeV')),
3604  ('SMS-T1tttt_mGl-1500_mLSP-100_TuneCP5_14TeV_pythia8_cfi',UpgradeFragment(Kby(9,50),'SMS-T1tttt_14TeV')),
3605  ('VBFHZZ4Nu_TuneCP5_14TeV_pythia8_cfi',UpgradeFragment(Kby(9,50),'VBFHZZ4Nu_14TeV')),
3606  ('EtaBToJpsiJpsi_14TeV_TuneCP5_pythia8_cfi',UpgradeFragment(Kby(9,50),'EtaBToJpsiJpsi_14TeV')),
3607  ('WToLNu_14TeV_TuneCP5_pythia8_cfi',UpgradeFragment(Kby(21,50),'WToLNu_14TeV')),
3608  ('WprimeToLNu_M2000_14TeV_TuneCP5_pythia8_cfi',UpgradeFragment(Kby(21,50),'WprimeToLNu_M2000_14TeV')),
3609  ('DoubleMuFlatPt1p5To8_cfi', UpgradeFragment(Kby(9,100),'SingleMuFlatPt1p5To8')),
3610  ('DoubleElectronFlatPt1p5To8_cfi', UpgradeFragment(Kby(9,100),'SingleElectronFlatPt1p5To8')),
3611  ('DoubleMuFlatPt1p5To8Dxy100GunProducer_cfi', UpgradeFragment(Kby(9,100),'DisplacedMuPt1p5To8Dxy100')),
3612  ('DoubleMuFlatPt2To100Dxy100GunProducer_cfi', UpgradeFragment(Kby(9,100),'DisplacedMuPt2To100Dxy100')),
3613  ('BuToJPsiPrimeKToJPsiPiPiK_14TeV_TuneCP5_pythia8_cfi', UpgradeFragment(Kby(223,2222),'BuToJPsiPrimeKToJPsiPiPiK_14TeV')), # 5.7%
3614  ('Psi2SToJPsiPiPi_14TeV_TuneCP5_pythia8_cfi', UpgradeFragment(Kby(45,500),'Psi2SToJPsiPiPi_14TeV')), # 24.6%
3615  ('XiMinus_13p6TeV_SoftQCDInel_TuneCP5_cfi', UpgradeFragment(Kby(8000,90000),'XiMinus_13p6TeV')), #2.8%
3616  ('Chib1PToUpsilon1SGamma_MuFilter_TuneCP5_14TeV-pythia8_evtgen_cfi', UpgradeFragment(Kby(3600,36000),'Chib1PToUpsilon1SGamma_14TeV')), #2.8%
3617  ('ChicToJpsiGamma_MuFilter_TuneCP5_14TeV_pythia8_evtgen_cfi', UpgradeFragment(Kby(2000,20000),'ChicToJpsiGamma_14TeV')), #5%
3618  ('B0ToJpsiK0s_JMM_Filter_DGamma0_TuneCP5_13p6TeV-pythia8-evtgen_cfi',UpgradeFragment(Kby(18000,18000),'B0ToJpsiK0s_DGamma0_13p6TeV')), #2.7%
3619  ('DStarToD0Pi_D0ToKsPiPi_inclusive_SoftQCD_TuneCP5_13p6TeV-pythia8-evtgen',UpgradeFragment(Kby(38000,38000),'DStarToD0Pi_D0ToKsPiPi_13p6TeV')), #1.3%
3620  ('LbToJpsiLambda_JMM_Filter_DGamma0_TuneCP5_13p6TeV-pythia8-evtgen_cfi',UpgradeFragment(Mby(66,660000),'LbToJpsiLambda_DGamma0_13p6TeV')), #0.3%
3621  ('LbToJpsiXiK0sPi_JMM_Filter_DGamma0_TuneCP5_13p6TeV-pythia8-evtgen_cfi',UpgradeFragment(Mby(50,500000),'LbToJpsiXiK0sPr_DGamma0_13p6TeV')), #0.6%
3622  ('OmegaMinus_13p6TeV_SoftQCDInel_TuneCP5_cfi',UpgradeFragment(Mby(100,1000000),'OmegaMinus_13p6TeV')), #0.1%
3623  ('Hydjet_Quenched_MinBias_5020GeV_cfi', UpgradeFragment(U2000by1,'HydjetQMinBias_5020GeV')),
3624  ('Hydjet_Quenched_MinBias_5362GeV_cfi', UpgradeFragment(U2000by1,'HydjetQMinBias_5362GeV')),
3625  ('Hydjet_Quenched_MinBias_5519GeV_cfi', UpgradeFragment(U2000by1,'HydjetQMinBias_5519GeV')),
3626 ])
def condition(self, fragment, stepList, key, hasHarvest)
def setup_(self, step, stepName, stepDict, k, properties)
def condition(self, fragment, stepList, key, hasHarvest)
def setupPU_(self, step, stepName, stepDict, k, properties)
Definition: merge.py:1
def condition(self, fragment, stepList, key, hasHarvest)
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 setupPU_(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)
Wf to add Heavy Flavor DQM to whichever DQM is already there.
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)
bool any(const std::vector< T > &v, const T &what)
Definition: ECalSD.cc:37
def setupPU(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 condition(self, fragment, stepList, key, hasHarvest)
def condition(self, fragment, stepList, key, hasHarvest)
def setup_(self, step, stepName, stepDict, k, properties)
def setupPU_(self, step, stepName, stepDict, k, properties)
def replace(string, replacements)
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 workflow_(self, workflows, num, fragment, stepList, key)
def condition(self, fragment, stepList, key, hasHarvest)
def workflow_(self, workflows, num, fragment, stepList, key)
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)
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)
def setupPU_(self, step, stepName, stepDict, k, properties)
def __init__(self, digi={}, reco={}, harvest={}, kwargs)
def condition(self, fragment, stepList, key, hasHarvest)
def setup_(self, step, stepName, stepDict, k, properties)
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 __init__(self, suffix, offset, ecalTPPh2, ecalMod, steps=['GenSim', GenSimHLBeamSpot, GenSimHLBeamSpot14, GenSimHLBeamSpotHGCALCloseBy, Digi, DigiTrigger, RecoGlobal, HARVESTGlobal, ALCAPhase2, PU=['GenSim', GenSimHLBeamSpot, GenSimHLBeamSpot14, GenSimHLBeamSpotHGCALCloseBy, Digi, DigiTrigger, RecoGlobal, HARVESTGlobal, ALCAPhase2)
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 condition(self, fragment, stepList, key, hasHarvest)
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 condition(self, fragment, stepList, key, hasHarvest)
def setupPU_(self, step, stepName, stepDict, k, properties)
def setup_(self, step, stepName, stepDict, k, properties)
def __init__(self, digi={}, reco={}, mini={}, harvest={}, kwargs)
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 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 check_dups(input)
Definition: MatrixUtil.py:280
static std::string join(char **cmd)
Definition: RemoteFile.cc:21
def condition(self, 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 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)
#define update(a, b)
def Mby(N, s)
Definition: MatrixUtil.py:248
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 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 Kby(N, s)
Definition: MatrixUtil.py:246
def __init__(self, steps, PU, suffix, offset)
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)
#define str(s)
def condition(self, fragment, stepList, key, hasHarvest)
def condition(self, fragment, stepList, key, hasHarvest)
def __init__(self, suffix, offset, fixedPU, steps=[], PU=['GenSimHLBeamSpot14', Digi, DigiTrigger, Reco, RecoFakeHLT, RecoGlobal, RecoNano, RecoNanoFakeHLT, HARVEST, HARVESTFakeHLT, HARVESTGlobal, HARVESTNano, HARVESTNanoFakeHLT, MiniAOD, ALCA, ALCAPhase2, Nano)
def condition(self, fragment, stepList, key, hasHarvest)
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 condition_(self, fragment, stepList, key, hasHarvest)
def condition(self, fragment, stepList, key, hasHarvest)