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