2 from __future__
import print_function
5 from Configuration.PyReleaseValidation.MatrixReader
import MatrixReader
6 from Configuration.PyReleaseValidation.MatrixRunner
import MatrixRunner
7 from Configuration.PyReleaseValidation.MatrixInjector
import MatrixInjector,performInjectionOptionTest
14 mrd.showRaw(opt.useInput, opt.refRel, opt.fromScratch, opt.raw, opt.step1Only, selected=opt.testList)
23 mrd.prepare(opt.useInput, opt.refRel, opt.fromScratch)
27 mrd.show(opt.testList, opt.extended, opt.cafVeto)
28 if opt.testList :
print(
'testListected items:', opt.testList)
30 mRunnerHi =
MatrixRunner(mrd.workFlows, opt.nProcs, opt.nThreads)
31 ret = mRunnerHi.runTests(opt)
35 print(
'Cannot go on with wmagent injection with failing workflows')
37 wfInjector =
MatrixInjector(opt,mode=opt.wmcontrol,options=opt.wmoptions)
38 ret= wfInjector.prepare(mrd,
47 if __name__ ==
'__main__':
85 'jetmc': [5.1, 13, 15, 25, 38, 39],
86 'metmc' : [5.1, 15, 25, 37, 38, 39],
87 'muonmc' : [5.1, 124.4, 124.5, 20, 21, 22, 23, 25, 30],
92 usage =
'usage: runTheMatrix.py --show -s ' 94 parser = optparse.OptionParser(usage)
96 parser.add_option(
'-b',
'--batchName',
97 help=
'relval batch: suffix to be appended to Campaign name',
102 parser.add_option(
'-m',
'--memoryOffset',
103 help=
'memory of the wf for single core',
107 parser.add_option(
'--addMemPerCore',
108 help=
'increase of memory per each n > 1 core: memory(n_core) = memoryOffset + (n_core-1) * memPerCore',
112 parser.add_option(
'-j',
'--nproc',
113 help=
'number of processes. 0 Will use 4 processes, not execute anything but create the wfs',
117 parser.add_option(
'-t',
'--nThreads',
118 help=
'number of threads per process to use in cmsRun.',
123 parser.add_option(
'-n',
'--showMatrix',
124 help=
'Only show the worflows. Use --ext to show more',
129 parser.add_option(
'-e',
'--extended',
130 help=
'Show details of workflows, used with --show',
135 parser.add_option(
'-s',
'--selected',
136 help=
'Run a pre-defined selected matrix of wf. Deprecated, please use -l limited',
141 parser.add_option(
'-l',
'--list',
142 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',
146 parser.add_option(
'-r',
'--raw',
147 help=
'Temporary dump the .txt needed for prodAgent interface. To be discontinued soon. Argument must be the name of the set (standard, pileup,...)',
150 parser.add_option(
'-i',
'--useInput',
151 help=
'Use recyling where available. Either all, or a coma separated list of wf number.',
155 parser.add_option(
'-w',
'--what',
156 help=
'Specify the set to be used. Argument must be the name of the set (standard, pileup,...)',
160 parser.add_option(
'--step1',
161 help=
'Used with --raw. Limit the production to step1',
165 parser.add_option(
'--maxSteps',
166 help=
'Only run maximum on maxSteps. Used when we are only interested in first n steps.',
171 parser.add_option(
'--fromScratch',
172 help=
'Coma separated list of wf to be run without recycling. all is not supported as default.',
176 parser.add_option(
'--refRelease',
177 help=
'Allow to modify the recycling dataset version',
181 parser.add_option(
'--wmcontrol',
182 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',
183 choices=[
'init',
'test',
'submit',
'force'],
187 parser.add_option(
'--revertDqmio',
188 help=
'When submitting workflows to wmcontrol, force DQM outout to use pool and not DQMIO',
189 choices=[
'yes',
'no'],
193 parser.add_option(
'--optionswm',
194 help=
'Specify a few things for wm injection',
197 parser.add_option(
'--keep',
198 help=
'allow to specify for which coma separated steps the output is needed',
200 parser.add_option(
'--label',
201 help=
'allow to give a special label to the output dataset name',
203 parser.add_option(
'--command',
204 help=
'provide a way to add additional command to all of the cmsDriver commands in the matrix',
208 parser.add_option(
'--apply',
209 help=
'allow to use the --command only for 1 coma separeated',
212 parser.add_option(
'--workflow',
213 help=
'define a workflow to be created or altered from the matrix',
218 parser.add_option(
'--dryRun',
219 help=
'do not run the wf at all',
224 parser.add_option(
'--testbed',
225 help=
'workflow injection to cmswebtest (you need dedicated rqmgr account)',
230 parser.add_option(
'--noCafVeto',
231 help=
'Run from any source, ignoring the CAF label',
236 parser.add_option(
'--overWrite',
237 help=
'Change the content of a step for another. List of pairs.',
241 parser.add_option(
'--noRun',
242 help=
'Remove all run list selection from wfs',
247 parser.add_option(
'--das-options',
248 help=
'Options to be passed to dasgoclient.',
253 parser.add_option(
'--job-reports',
254 help=
'Dump framework job reports',
259 parser.add_option(
'--ibeos',
260 help=
'Use IB EOS site configuration',
265 opt,args = parser.parse_args()
268 from commands
import getstatusoutput
as run_cmd
269 ibeos_cache = os.path.join(os.getenv(
"LOCALRT"),
"ibeos_cache.txt")
270 if not os.path.exists(ibeos_cache):
271 err, out = run_cmd(
"curl -L -s -o %s https://raw.githubusercontent.com/cms-sw/cms-sw.github.io/master/das_queries/ibeos.txt" % ibeos_cache)
273 run_cmd(
"rm -f %s" % ibeos_cache)
274 print(
"Error: Unable to download ibeos cache information")
278 for cmssw_env
in [
"CMSSW_BASE",
"CMSSW_RELEASE_BASE" ]:
279 cmssw_base = os.getenv(cmssw_env,
None)
280 if not cmssw_base:
continue 281 cmssw_base = os.path.join(cmssw_base,
"src/Utilities/General/ibeos")
282 if os.path.exists(cmssw_base):
283 os.environ[
"PATH"]=cmssw_base+
":"+os.getenv(
"PATH")
284 os.environ[
"CMS_PATH"]=
"/cvmfs/cms-ib.cern.ch" 285 os.environ[
"CMSSW_USE_IBEOS"]=
"true" 286 print(
">> WARNING: You are using SITECONF from /cvmfs/cms-ib.cern.ch")
289 print(
'Deprecated, please use -l limited')
290 if opt.testList: opt.testList+=
',limited' 291 else: opt.testList=
'limited' 299 opt.apply=
map(stepOrIndex,opt.apply.split(
','))
301 opt.keep=
map(stepOrIndex,opt.keep.split(
','))
307 for entry
in opt.testList.split(
','):
308 if not entry:
continue 310 for k
in predefinedSet:
311 if k.lower().startswith(entry.lower())
or k.lower().endswith(entry.lower()):
312 testList.extend(predefinedSet[k])
317 testList.append(
float(entry))
319 print(entry,
'is not a possible selected entry')
321 opt.testList =
list(set(testList))
324 if opt.useInput: opt.useInput = opt.useInput.split(
',')
325 if opt.fromScratch: opt.fromScratch = opt.fromScratch.split(
',')
326 if opt.nProcs: opt.nProcs=
int(opt.nProcs)
327 if opt.nThreads: opt.nThreads=
int(opt.nThreads)
328 if (opt.memoryOffset): opt.memoryOffset=
int(opt.memoryOffset)
329 if (opt.memPerCore): opt.memPerCore=
int(opt.memPerCore)
334 opt.overWrite=eval(opt.overWrite)
336 if opt.raw
and opt.show:
def performInjectionOptionTest(opt)
S & print(S &os, JobReport::InputFile const &f)
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