CMS 3D CMS Logo

runTheMatrix.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 import sys
3 
4 from Configuration.PyReleaseValidation.MatrixReader import MatrixReader
5 from Configuration.PyReleaseValidation.MatrixRunner import MatrixRunner
6 from Configuration.PyReleaseValidation.MatrixInjector import MatrixInjector,performInjectionOptionTest
7 
8 # ================================================================================
9 
10 def showRaw(opt):
11 
12  mrd = MatrixReader(opt)
13  mrd.showRaw(opt.useInput, opt.refRel, opt.fromScratch, opt.raw, opt.step1Only, selected=opt.testList)
14 
15  return 0
16 
17 # ================================================================================
18 
19 def runSelected(opt):
20 
21  mrd = MatrixReader(opt)
22  mrd.prepare(opt.useInput, opt.refRel, opt.fromScratch)
23 
24  ret = 0
25  if opt.show:
26  mrd.show(opt.testList, opt.extended, opt.cafVeto)
27  if opt.testList : print 'testListected items:', opt.testList
28  else:
29  mRunnerHi = MatrixRunner(mrd.workFlows, opt.nProcs, opt.nThreads)
30  ret = mRunnerHi.runTests(opt)
31 
32  if opt.wmcontrol:
33  if ret!=0:
34  print 'Cannot go on with wmagent injection with failing workflows'
35  else:
36  wfInjector = MatrixInjector(opt,mode=opt.wmcontrol,options=opt.wmoptions)
37  ret= wfInjector.prepare(mrd,
38  mRunnerHi.runDirs)
39  if ret==0:
40  wfInjector.upload()
41  wfInjector.submit()
42  return ret
43 
44 # ================================================================================
45 
46 if __name__ == '__main__':
47 
48  #this can get out of here
49  predefinedSet={
50  'limited' : [5.1, #FastSim ttbar
51  7.3, #CosmicsSPLoose_UP17
52  8, #BH/Cosmic MC
53  25, #MC ttbar
54  4.22, #cosmic data
55  4.53, #run1 data + miniAOD
56  1000, #data+prompt
57  1001, #data+express
58  136.731, #2016B Photon data
59  136.7611, #2016E JetHT reMINIAOD from 80X legacy
60  136.8311, #2017F JetHT reMINIAOD from 94X reprocessing
61  136.788, #2017B Photon data
62  140.53, #2011 HI data
63  1325.7, #test NanoAOD from existing MINI
64  1330, #Run2 MC Zmm
65  135.4, #Run 2 Zee ttbar
66  10042.0, #2017 ZMM
67  10024.0, #2017 ttbar
68  10824.0, #2018 ttbar
69  11624.0, #2019 ttbar
70  20034.0, #2023D17 ttbar (TDR baseline Muon/Barrel)
71  20434.0, #2023D19 to exercise timing layer
72  ],
73  'jetmc': [5.1, 13, 15, 25, 38, 39], #MC
74  'metmc' : [5.1, 15, 25, 37, 38, 39], #MC
75  'muonmc' : [5.1, 124.4, 124.5, 20, 21, 22, 23, 25, 30], #MC
76  }
77 
78 
79  import optparse
80  usage = 'usage: runTheMatrix.py --show -s '
81 
82  parser = optparse.OptionParser(usage)
83 
84  parser.add_option('-b','--batchName',
85  help='relval batch: suffix to be appended to Campaign name',
86  dest='batchName',
87  default=''
88  )
89 
90  parser.add_option('-m','--memoryOffset',
91  help='memory of the wf for single core',
92  dest='memoryOffset',
93  default=3000
94  )
95  parser.add_option('--addMemPerCore',
96  help='increase of memory per each n > 1 core: memory(n_core) = memoryOffset + (n_core-1) * memPerCore',
97  dest='memPerCore',
98  default=1500
99  )
100  parser.add_option('-j','--nproc',
101  help='number of processes. 0 Will use 4 processes, not execute anything but create the wfs',
102  dest='nProcs',
103  default=4
104  )
105  parser.add_option('-t','--nThreads',
106  help='number of threads per process to use in cmsRun.',
107  dest='nThreads',
108  default=1
109  )
110 
111  parser.add_option('-n','--showMatrix',
112  help='Only show the worflows. Use --ext to show more',
113  dest='show',
114  default=False,
115  action='store_true'
116  )
117  parser.add_option('-e','--extended',
118  help='Show details of workflows, used with --show',
119  dest='extended',
120  default=False,
121  action='store_true'
122  )
123  parser.add_option('-s','--selected',
124  help='Run a pre-defined selected matrix of wf. Deprecated, please use -l limited',
125  dest='restricted',
126  default=False,
127  action='store_true'
128  )
129  parser.add_option('-l','--list',
130  help='Coma separated list of workflow to be shown or ran. Possible keys are also '+str(predefinedSet.keys())+'. and wild card like muon, or mc',
131  dest='testList',
132  default=None
133  )
134  parser.add_option('-r','--raw',
135  help='Temporary dump the .txt needed for prodAgent interface. To be discontinued soon. Argument must be the name of the set (standard, pileup,...)',
136  dest='raw'
137  )
138  parser.add_option('-i','--useInput',
139  help='Use recyling where available. Either all, or a coma separated list of wf number.',
140  dest='useInput',
141  default=None
142  )
143  parser.add_option('-w','--what',
144  help='Specify the set to be used. Argument must be the name of the set (standard, pileup,...)',
145  dest='what',
146  default='all'
147  )
148  parser.add_option('--step1',
149  help='Used with --raw. Limit the production to step1',
150  dest='step1Only',
151  default=False
152  )
153  parser.add_option('--maxSteps',
154  help='Only run maximum on maxSteps. Used when we are only interested in first n steps.',
155  dest='maxSteps',
156  default=9999,
157  type="int"
158  )
159  parser.add_option('--fromScratch',
160  help='Coma separated list of wf to be run without recycling. all is not supported as default.',
161  dest='fromScratch',
162  default=None
163  )
164  parser.add_option('--refRelease',
165  help='Allow to modify the recycling dataset version',
166  dest='refRel',
167  default=None
168  )
169  parser.add_option('--wmcontrol',
170  help='Create the workflows for injection to WMAgent. In the WORKING. -wmcontrol init will create the the workflows, -wmcontrol test will dryRun a test, -wmcontrol submit will submit to wmagent',
171  choices=['init','test','submit','force'],
172  dest='wmcontrol',
173  default=None,
174  )
175  parser.add_option('--revertDqmio',
176  help='When submitting workflows to wmcontrol, force DQM outout to use pool and not DQMIO',
177  choices=['yes','no'],
178  dest='revertDqmio',
179  default='no',
180  )
181  parser.add_option('--optionswm',
182  help='Specify a few things for wm injection',
183  default='',
184  dest='wmoptions')
185  parser.add_option('--keep',
186  help='allow to specify for which coma separated steps the output is needed',
187  default=None)
188  parser.add_option('--label',
189  help='allow to give a special label to the output dataset name',
190  default='')
191  parser.add_option('--command',
192  help='provide a way to add additional command to all of the cmsDriver commands in the matrix',
193  dest='command',
194  default=None
195  )
196  parser.add_option('--apply',
197  help='allow to use the --command only for 1 coma separeated',
198  dest='apply',
199  default=None)
200  parser.add_option('--workflow',
201  help='define a workflow to be created or altered from the matrix',
202  action='append',
203  dest='workflow',
204  default=None
205  )
206  parser.add_option('--dryRun',
207  help='do not run the wf at all',
208  action='store_true',
209  dest='dryRun',
210  default=False
211  )
212  parser.add_option('--testbed',
213  help='workflow injection to cmswebtest (you need dedicated rqmgr account)',
214  dest='testbed',
215  default=False,
216  action='store_true'
217  )
218  parser.add_option('--noCafVeto',
219  help='Run from any source, ignoring the CAF label',
220  dest='cafVeto',
221  default=True,
222  action='store_false'
223  )
224  parser.add_option('--overWrite',
225  help='Change the content of a step for another. List of pairs.',
226  dest='overWrite',
227  default=None
228  )
229  parser.add_option('--noRun',
230  help='Remove all run list selection from wfs',
231  dest='noRun',
232  default=False,
233  action='store_true')
234 
235  parser.add_option('--das-options',
236  help='Options to be passed to dasgoclient.',
237  dest='dasOptions',
238  default="--limit 0",
239  action='store')
240 
241  parser.add_option('--job-reports',
242  help='Dump framework job reports',
243  dest='jobReports',
244  default=False,
245  action='store_true')
246 
247  opt,args = parser.parse_args()
248  if opt.restricted:
249  print 'Deprecated, please use -l limited'
250  if opt.testList: opt.testList+=',limited'
251  else: opt.testList='limited'
252 
253  def stepOrIndex(s):
254  if s.isdigit():
255  return int(s)
256  else:
257  return s
258  if opt.apply:
259  opt.apply=map(stepOrIndex,opt.apply.split(','))
260  if opt.keep:
261  opt.keep=map(stepOrIndex,opt.keep.split(','))
262 
263 
264 
265  if opt.testList:
266  testList=[]
267  for entry in opt.testList.split(','):
268  if not entry: continue
269  mapped=False
270  for k in predefinedSet:
271  if k.lower().startswith(entry.lower()) or k.lower().endswith(entry.lower()):
272  testList.extend(predefinedSet[k])
273  mapped=True
274  break
275  if not mapped:
276  try:
277  testList.append(float(entry))
278  except:
279  print entry,'is not a possible selected entry'
280 
281  opt.testList = list(set(testList))
282 
283 
284  if opt.useInput: opt.useInput = opt.useInput.split(',')
285  if opt.fromScratch: opt.fromScratch = opt.fromScratch.split(',')
286  if opt.nProcs: opt.nProcs=int(opt.nProcs)
287  if opt.nThreads: opt.nThreads=int(opt.nThreads)
288  if (opt.memoryOffset): opt.memoryOffset=int(opt.memoryOffset)
289  if (opt.memPerCore): opt.memPerCore=int(opt.memPerCore)
290 
291  if opt.wmcontrol:
293  if opt.overWrite:
294  opt.overWrite=eval(opt.overWrite)
295 
296  if opt.raw and opt.show: ###prodAgent to be discontinued
297  ret = showRaw(opt)
298  else:
299  ret = runSelected(opt)
300 
301 
302  sys.exit(ret)
def performInjectionOptionTest(opt)
def runSelected(opt)
Definition: runTheMatrix.py:19
def showRaw(opt)
Definition: runTheMatrix.py:10
def stepOrIndex(s)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run