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