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