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