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 
3 import sys
4 
5 from Configuration.PyReleaseValidation.MatrixReader import MatrixReader
6 from Configuration.PyReleaseValidation.MatrixRunner import MatrixRunner
7 from Configuration.PyReleaseValidation.MatrixInjector import MatrixInjector,performInjectionOptionTest
8 
9 # ================================================================================
10 
11 def showRaw(opt):
12 
13  mrd = MatrixReader(opt)
14  mrd.showRaw(opt.useInput, opt.refRel, opt.fromScratch, opt.raw, opt.step1Only, selected=opt.testList)
15 
16  return 0
17 
18 # ================================================================================
19 
20 def runSelected(opt):
21 
22  mrd = MatrixReader(opt)
23  mrd.prepare(opt.useInput, opt.refRel, opt.fromScratch)
24 
25  ret = 0
26  if opt.show:
27  mrd.show(opt.testList,opt.extended)
28  if opt.testList : print 'testListected items:', opt.testList
29  else:
30  mRunnerHi = MatrixRunner(mrd.workFlows, opt.nThreads)
31  ret = mRunnerHi.runTests(opt)
32 
33  if opt.wmcontrol:
34  if ret!=0:
35  print 'Cannot go on with wmagent injection with failing workflows'
36  else:
37  wfInjector = MatrixInjector(opt,mode=opt.wmcontrol,options=opt.wmoptions)
38  ret= wfInjector.prepare(mrd,
39  mRunnerHi.runDirs)
40  if ret==0:
41  wfInjector.upload()
42  wfInjector.submit()
43  return ret
44 
45 # ================================================================================
46 
47 if __name__ == '__main__':
48 
49  #this can get out of here
50  predefinedSet={
51  'limited' : [5.1, #FastSim ttbar
52  8, #BH/Cosmic MC
53  25, #MC ttbar
54  4.22, #cosmic data
55  4.291, #hlt data
56  1000, #data+prompt
57  1001, #data+express
58  4.53, #HI data
59  40, #HI MC
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('-j','--nproc',
73  help='number of threads. 0 Will use 4 threads, not execute anything but create the wfs',
74  dest='nThreads',
75  default=4
76  )
77  parser.add_option('-n','--showMatrix',
78  help='Only show the worflows. Use --ext to show more',
79  dest='show',
80  default=False,
81  action='store_true'
82  )
83  parser.add_option('-e','--extended',
84  help='Show details of workflows, used with --show',
85  dest='extended',
86  default=False,
87  action='store_true'
88  )
89  parser.add_option('-s','--selected',
90  help='Run a pre-defined selected matrix of wf. Deprecated, please use -l limited',
91  dest='restricted',
92  default=False,
93  action='store_true'
94  )
95  parser.add_option('-l','--list',
96  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',
97  dest='testList',
98  default=None
99  )
100  parser.add_option('-r','--raw',
101  help='Temporary dump the .txt needed for prodAgent interface. To be discontinued soon. Argument must be the name of the set (standard, pileup,...)',
102  dest='raw'
103  )
104  parser.add_option('-i','--useInput',
105  help='Use recyling where available. Either all, or a coma separated list of wf number.',
106  dest='useInput',
107  default=None
108  )
109  parser.add_option('-w','--what',
110  help='Specify the set to be used. Argument must be the name of the set (standard, pileup,...)',
111  dest='what',
112  default='all'
113  )
114  parser.add_option('--step1',
115  help='Used with --raw. Limit the production to step1',
116  dest='step1Only',
117  default=False
118  )
119  parser.add_option('--fromScratch',
120  help='Coma separated list of wf to be run without recycling. all is not supported as default.',
121  dest='fromScratch',
122  default=None
123  )
124  parser.add_option('--refRelease',
125  help='Allow to modify the recycling dataset version',
126  dest='refRel',
127  default=None
128  )
129  parser.add_option('--wmcontrol',
130  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',
131  choices=['init','test','submit','force'],
132  dest='wmcontrol',
133  default=None,
134  )
135  parser.add_option('--revertDqmio',
136  help='When submitting workflows to wmcontrol, force DQM outout to use pool and not DQMIO',
137  choices=['yes','no'],
138  dest='revertDqmio',
139  default='no',
140  )
141  parser.add_option('--optionswm',
142  help='Specify a few things for wm injection',
143  default='',
144  dest='wmoptions')
145  parser.add_option('--keep',
146  help='allow to specify for which coma separated steps the output is needed',
147  default=None)
148  parser.add_option('--label',
149  help='allow to give a special label to the output dataset name',
150  default='')
151  parser.add_option('--command',
152  help='provide a way to add additional command to all of the cmsDriver commands in the matrix',
153  dest='command',
154  default=None
155  )
156  parser.add_option('--apply',
157  help='allow to use the --command only for 1 coma separeated',
158  dest='apply',
159  default=None)
160  parser.add_option('--workflow',
161  help='define a workflow to be created or altered from the matrix',
162  action='append',
163  dest='workflow',
164  default=None
165  )
166  parser.add_option('--dryRun',
167  help='do not run the wf at all',
168  action='store_true',
169  dest='dryRun',
170  default=False
171  )
172  parser.add_option('--noCafVeto',
173  help='Run from any source, ignoring the CAF label',
174  dest='cafVeto',
175  default=True,
176  action='store_false'
177  )
178  parser.add_option('--overWrite',
179  help='Change the content of a step for another. List of pairs.',
180  dest='overWrite',
181  default=None
182  )
183  parser.add_option('--noRun',
184  help='Remove all run list selection from wfs',
185  dest='noRun',
186  default=False,
187  action='store_true')
188 
189  parser.add_option('--das-options',
190  help='Options to be passed to das_client.py.',
191  dest='dasOptions',
192  default="--limit 0",
193  action='store')
194 
195  parser.add_option('--job-reports',
196  help='Dump framework job reports',
197  dest='jobReports',
198  default=False,
199  action='store_true')
200 
201  opt,args = parser.parse_args()
202  if opt.restricted:
203  print 'Deprecated, please use -l limited'
204  if opt.testList: opt.testList+=',limited'
205  else: opt.testList='limited'
206 
207  def stepOrIndex(s):
208  if s.isdigit():
209  return int(s)
210  else:
211  return s
212  if opt.apply:
213  opt.apply=map(stepOrIndex,opt.apply.split(','))
214  if opt.keep:
215  opt.keep=map(stepOrIndex,opt.keep.split(','))
216 
217 
218 
219  if opt.testList:
220  testList=[]
221  for entry in opt.testList.split(','):
222  if not entry: continue
223  mapped=False
224  for k in predefinedSet:
225  if k.lower().startswith(entry.lower()) or k.lower().endswith(entry.lower()):
226  testList.extend(predefinedSet[k])
227  mapped=True
228  break
229  if not mapped:
230  try:
231  testList.append(float(entry))
232  except:
233  print entry,'is not a possible selected entry'
234 
235  opt.testList = list(set(testList))
236 
237 
238  if opt.useInput: opt.useInput = opt.useInput.split(',')
239  if opt.fromScratch: opt.fromScratch = opt.fromScratch.split(',')
240  if opt.nThreads: opt.nThreads=int(opt.nThreads)
241 
242  if opt.wmcontrol:
244  if opt.overWrite:
245  opt.overWrite=eval(opt.overWrite)
246 
247  if opt.raw and opt.show: ###prodAgent to be discontinued
248  ret = showRaw(opt)
249  else:
250  ret = runSelected(opt)
251 
252 
253  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