CMS 3D CMS Logo

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