CMS 3D CMS Logo

relval_upgrade.py
Go to the documentation of this file.
1 
2 # import the definition of the steps and input files:
4 
5 # here only define the workflows as a combination of the steps defined above:
6 workflows = Matrix()
7 
8 # each workflow defines a name and a list of steps to be done.
9 # if no explicit name/label given for the workflow (first arg),
10 # the name of step1 will be used
11 
12 def makeStepNameSim(key,frag,step,suffix):
13  return frag+'_'+key+'_'+step+suffix
14 
15 def makeStepName(key,frag,step,suffix):
16  return step+suffix+'_'+key
17 
18 neutronKeys = ['2023D17','2023D19','2023D21','2023D22','2023D23','2023D24','2023D25','2023D26','2023D27','2023D28','2023D29','2023D30','2023D31']
19 neutronFrags = ['ZMM_14','MinBias_14TeV']
20 
21 #just define all of them
22 
23 for year in upgradeKeys:
24  for i,key in enumerate(upgradeKeys[year]):
25  numWF=numWFAll[year][i]
26  for frag in upgradeFragments:
27  stepList={}
28  for stepType in upgradeSteps.keys():
29  stepList[stepType] = []
30  hasHarvest = False
31  for step in upgradeProperties[year][key]['ScenToRun']:
32  stepMaker = makeStepName
33  if 'Sim' in step:
34  if 'HLBeamSpotFull' in step and '14TeV' in frag:
35  step = 'GenSimHLBeamSpotFull14'
36  stepMaker = makeStepNameSim
37 
38  if 'HARVEST' in step: hasHarvest = True
39 
40  for stepType in upgradeSteps.keys():
41  # use variation only when available
42  if stepType == 'Premix':
43  # Premixing stage1
44  #
45  # This is a hack which should be placed somewhere else, but likely requires more massive changes for "proper" PUPRMX treatment
46  #
47  # On one hand the place where upgradeWorkflowComponents.upgradeProperties[year][...PU]
48  # are defined from the noPU workflows would be a logical place. On the other hand, that
49  # would need the premixing workflows to be defined in upgradeWorkflowComponents.upgradeKeys[year]
50  # dictionary, which would further mean that we would get full set of additional workflows for
51  # premixing, while the preferred solution would be to define the premixing workflows as variations of the PU workflows.
52  s = step.replace('GenSim', 'Premix')
53  if not s in upgradeSteps[stepType]['PU']:
54  continue
55  s = s + 'PU' # later processing requires to have PU here
56  # Hardcode nu gun fragment below in order to use it for combined stage1+stage2
57  # Anyway all other fragments are irrelevant for premixing stage1
58  stepList[stepType].append(stepMaker(key,"SingleNuE10_cf",s,upgradeSteps[stepType]['suffix']))
59  elif (stepType is not 'baseline') and ( ('PU' in step and step.replace('PU','') in upgradeSteps[stepType]['PU']) or (step in upgradeSteps[stepType]['steps']) ):
60  stepList[stepType].append(stepMaker(key,frag[:-4],step,upgradeSteps[stepType]['suffix']))
61  else:
62  stepList[stepType].append(stepMaker(key,frag[:-4],step,upgradeSteps['baseline']['suffix']))
63 
64  workflows[numWF] = [ upgradeDatasetFromFragment[frag], stepList['baseline']]
65 
66  # only keep some special workflows for timing
67  if upgradeDatasetFromFragment[frag]=="TTbar_14TeV" and '2023' in key:
68  workflows[numWF+upgradeSteps['Timing']['offset']] = [ upgradeDatasetFromFragment[frag]+"_Timing", stepList['Timing']]
69 
70  # special workflows for neutron bkg sim
71  if any(upgradeDatasetFromFragment[frag]==nfrag for nfrag in neutronFrags) and any(nkey in key for nkey in neutronKeys):
72  workflows[numWF+upgradeSteps['Neutron']['offset']] = [ upgradeDatasetFromFragment[frag]+"_Neutron", stepList['Neutron']]
73 
74  # special workflows for tracker
75  if (upgradeDatasetFromFragment[frag]=="TTbar_13" or upgradeDatasetFromFragment[frag]=="TTbar_14TeV") and not 'PU' in key and hasHarvest:
76  # skip ALCA and Nano
77  trackingVariations = ['trackingOnly','trackingRun2','trackingOnlyRun2','trackingLowPU','pixelTrackingOnly']
78  for tv in trackingVariations:
79  stepList[tv] = [s for s in stepList[tv] if (("ALCA" not in s) and ("Nano" not in s))]
80  workflows[numWF+upgradeSteps['trackingOnly']['offset']] = [ upgradeDatasetFromFragment[frag], stepList['trackingOnly']]
81  if '2017' in key:
82  for tv in trackingVariations[1:]:
83  workflows[numWF+upgradeSteps[tv]['offset']] = [ upgradeDatasetFromFragment[frag], stepList[tv]]
84  elif '2018' in key:
85  workflows[numWF+upgradeSteps['pixelTrackingOnly']['offset']] = [ upgradeDatasetFromFragment[frag], stepList['pixelTrackingOnly']]
86 
87  # special workflows for HE
88  if upgradeDatasetFromFragment[frag]=="TTbar_13" and '2018' in key:
89  workflows[numWF+upgradeSteps['heCollapse']['offset']] = [ upgradeDatasetFromFragment[frag], stepList['heCollapse']]
90 
91  # premixing stage1, only for NuGun
92  if upgradeDatasetFromFragment[frag]=="NuGun" and 'PU' in key and '2023' in key:
93  workflows[numWF+upgradeSteps['Premix']['offset']] = [upgradeDatasetFromFragment[frag], stepList['Premix']]
94 
95  # premixing stage2, only for ttbar for time being
96  if 'PU' in key and '2023' in key and upgradeDatasetFromFragment[frag]=="TTbar_14TeV":
97  slist = []
98  for step in stepList['baseline']:
99  s = step
100  if "Digi" in step or "Reco" in step:
101  s = s.replace("PU", "PUPRMX", 1)
102  slist.append(s)
103  workflows[numWF+premixS2_offset] = [upgradeDatasetFromFragment[frag], slist]
104 
105  # Combined stage1+stage2
106  workflows[numWF+premixS1S2_offset] = [upgradeDatasetFromFragment[frag], # Signal fragment
107  [slist[0]] + # Start with signal generation
108  stepList['Premix'] + # Premixing stage1
109  [slist[1].replace("PUPRMX", "PUPRMXCombined")] + # Premixing stage2, customized for the combined (defined in relval_steps.py)
110  slist[2:]] # Remaining standard steps
111 
112  numWF+=1
def makeStepName(key, frag, step, suffix)
bool any(const std::vector< T > &v, const T &what)
Definition: ECalSD.cc:37
def replace(string, replacements)
CLHEP::HepMatrix Matrix
Definition: matutil.h:65
def makeStepNameSim(key, frag, step, suffix)