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