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  8, #BH/Cosmic MC
52  25, #MC ttbar
53  4.22, #cosmic data
54  4.53, #run1 data + miniAOD
55  1000, #data+prompt
56  1001, #data+express
57  136.731, #2016B Photon data
58  136.788, #2017B Photon data
59  140.53, #2011 HI data
60  1330, #Run2 MC Zmm
61  135.4, #Run 2 Zee ttbar
62  10042.0, #2017 ZMM
63  10024.0, #2017 ttbar
64  10824.0, #2018 ttbar
65  27434.0, #2023D17 ttbar (TDR baseline Muon/Barrel)
66  23234.0, #2023D18 to exercise timing layer
67  ],
68  'jetmc': [5.1, 13, 15, 25, 38, 39], #MC
69  'metmc' : [5.1, 15, 25, 37, 38, 39], #MC
70  'muonmc' : [5.1, 124.4, 124.5, 20, 21, 22, 23, 25, 30], #MC
71  }
72 
73 
74  import optparse
75  usage = 'usage: runTheMatrix.py --show -s '
76 
77  parser = optparse.OptionParser(usage)
78 
79  parser.add_option('-b','--batchName',
80  help='relval batch: suffix to be appended to Campaign name',
81  dest='batchName',
82  default=''
83  )
84 
85  parser.add_option('-m','--memoryOffset',
86  help='memory of the wf for single core',
87  dest='memoryOffset',
88  default=3000
89  )
90  parser.add_option('--addMemPerCore',
91  help='increase of memory per each n > 1 core: memory(n_core) = memoryOffset + (n_core-1) * memPerCore',
92  dest='memPerCore',
93  default=1500
94  )
95  parser.add_option('-j','--nproc',
96  help='number of processes. 0 Will use 4 processes, not execute anything but create the wfs',
97  dest='nProcs',
98  default=4
99  )
100  parser.add_option('-t','--nThreads',
101  help='number of threads per process to use in cmsRun.',
102  dest='nThreads',
103  default=1
104  )
105 
106  parser.add_option('-n','--showMatrix',
107  help='Only show the worflows. Use --ext to show more',
108  dest='show',
109  default=False,
110  action='store_true'
111  )
112  parser.add_option('-e','--extended',
113  help='Show details of workflows, used with --show',
114  dest='extended',
115  default=False,
116  action='store_true'
117  )
118  parser.add_option('-s','--selected',
119  help='Run a pre-defined selected matrix of wf. Deprecated, please use -l limited',
120  dest='restricted',
121  default=False,
122  action='store_true'
123  )
124  parser.add_option('-l','--list',
125  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',
126  dest='testList',
127  default=None
128  )
129  parser.add_option('-r','--raw',
130  help='Temporary dump the .txt needed for prodAgent interface. To be discontinued soon. Argument must be the name of the set (standard, pileup,...)',
131  dest='raw'
132  )
133  parser.add_option('-i','--useInput',
134  help='Use recyling where available. Either all, or a coma separated list of wf number.',
135  dest='useInput',
136  default=None
137  )
138  parser.add_option('-w','--what',
139  help='Specify the set to be used. Argument must be the name of the set (standard, pileup,...)',
140  dest='what',
141  default='all'
142  )
143  parser.add_option('--step1',
144  help='Used with --raw. Limit the production to step1',
145  dest='step1Only',
146  default=False
147  )
148  parser.add_option('--maxSteps',
149  help='Only run maximum on maxSteps. Used when we are only interested in first n steps.',
150  dest='maxSteps',
151  default=9999,
152  type="int"
153  )
154  parser.add_option('--fromScratch',
155  help='Coma separated list of wf to be run without recycling. all is not supported as default.',
156  dest='fromScratch',
157  default=None
158  )
159  parser.add_option('--refRelease',
160  help='Allow to modify the recycling dataset version',
161  dest='refRel',
162  default=None
163  )
164  parser.add_option('--wmcontrol',
165  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',
166  choices=['init','test','submit','force'],
167  dest='wmcontrol',
168  default=None,
169  )
170  parser.add_option('--revertDqmio',
171  help='When submitting workflows to wmcontrol, force DQM outout to use pool and not DQMIO',
172  choices=['yes','no'],
173  dest='revertDqmio',
174  default='no',
175  )
176  parser.add_option('--optionswm',
177  help='Specify a few things for wm injection',
178  default='',
179  dest='wmoptions')
180  parser.add_option('--keep',
181  help='allow to specify for which coma separated steps the output is needed',
182  default=None)
183  parser.add_option('--label',
184  help='allow to give a special label to the output dataset name',
185  default='')
186  parser.add_option('--command',
187  help='provide a way to add additional command to all of the cmsDriver commands in the matrix',
188  dest='command',
189  default=None
190  )
191  parser.add_option('--apply',
192  help='allow to use the --command only for 1 coma separeated',
193  dest='apply',
194  default=None)
195  parser.add_option('--workflow',
196  help='define a workflow to be created or altered from the matrix',
197  action='append',
198  dest='workflow',
199  default=None
200  )
201  parser.add_option('--dryRun',
202  help='do not run the wf at all',
203  action='store_true',
204  dest='dryRun',
205  default=False
206  )
207  parser.add_option('--testbed',
208  help='workflow injection to cmswebtest (you need dedicated rqmgr account)',
209  dest='testbed',
210  default=False,
211  action='store_true'
212  )
213  parser.add_option('--noCafVeto',
214  help='Run from any source, ignoring the CAF label',
215  dest='cafVeto',
216  default=True,
217  action='store_false'
218  )
219  parser.add_option('--overWrite',
220  help='Change the content of a step for another. List of pairs.',
221  dest='overWrite',
222  default=None
223  )
224  parser.add_option('--noRun',
225  help='Remove all run list selection from wfs',
226  dest='noRun',
227  default=False,
228  action='store_true')
229 
230  parser.add_option('--das-options',
231  help='Options to be passed to das_client.py.',
232  dest='dasOptions',
233  default="--limit 0",
234  action='store')
235 
236  parser.add_option('--job-reports',
237  help='Dump framework job reports',
238  dest='jobReports',
239  default=False,
240  action='store_true')
241 
242  opt,args = parser.parse_args()
243  if opt.restricted:
244  print 'Deprecated, please use -l limited'
245  if opt.testList: opt.testList+=',limited'
246  else: opt.testList='limited'
247 
248  def stepOrIndex(s):
249  if s.isdigit():
250  return int(s)
251  else:
252  return s
253  if opt.apply:
254  opt.apply=map(stepOrIndex,opt.apply.split(','))
255  if opt.keep:
256  opt.keep=map(stepOrIndex,opt.keep.split(','))
257 
258 
259 
260  if opt.testList:
261  testList=[]
262  for entry in opt.testList.split(','):
263  if not entry: continue
264  mapped=False
265  for k in predefinedSet:
266  if k.lower().startswith(entry.lower()) or k.lower().endswith(entry.lower()):
267  testList.extend(predefinedSet[k])
268  mapped=True
269  break
270  if not mapped:
271  try:
272  testList.append(float(entry))
273  except:
274  print entry,'is not a possible selected entry'
275 
276  opt.testList = list(set(testList))
277 
278 
279  if opt.useInput: opt.useInput = opt.useInput.split(',')
280  if opt.fromScratch: opt.fromScratch = opt.fromScratch.split(',')
281  if opt.nProcs: opt.nProcs=int(opt.nProcs)
282  if opt.nThreads: opt.nThreads=int(opt.nThreads)
283  if (opt.memoryOffset): opt.memoryOffset=int(opt.memoryOffset)
284  if (opt.memPerCore): opt.memPerCore=int(opt.memPerCore)
285 
286  if opt.wmcontrol:
288  if opt.overWrite:
289  opt.overWrite=eval(opt.overWrite)
290 
291  if opt.raw and opt.show: ###prodAgent to be discontinued
292  ret = showRaw(opt)
293  else:
294  ret = runSelected(opt)
295 
296 
297  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