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