1 from __future__
import print_function
4 from Configuration.PyReleaseValidation.WorkFlow
import WorkFlow
5 from Configuration.PyReleaseValidation.MatrixUtil
import InputInfo
44 'relval_highstats':
'hi-' ,
45 'relval_pileup':
'PU-' ,
46 'relval_generator':
'gen-',
47 'relval_extendedgen':
'genExt-',
48 'relval_production':
'prod-' ,
50 'relval_upgrade':
'upg-',
51 'relval_2017':
'2017-',
52 'relval_2023':
'2023-',
53 'relval_identity':
'id-',
54 'relval_machine':
'mach-',
55 'relval_unsch':
'unsch-',
56 'relval_premix':
'premix-' 59 self.
files = [
'relval_standard' ,
75 'relval_highstats':
True ,
77 'relval_generator':
True,
78 'relval_extendedgen':
True,
79 'relval_production':
True,
81 'relval_upgrade':
False,
84 'relval_identity':
False,
85 'relval_machine':
True,
99 for k,v
in step.items():
100 if 'no_exec' in k :
continue 101 if k.lower() ==
'cfg':
104 if k.lower() ==
'input':
111 cmd +=
' ' + k +
' ' +
str(v)
112 return cfg, input, cmd
116 if len(overrides) > 0:
117 copyStep=
merge([overrides]+[step])
122 def readMatrix(self, fileNameIn, useInput=None, refRel=None, fromScratch=None):
126 print(
"processing", fileNameIn)
129 _tmpMod = __import__(
'Configuration.PyReleaseValidation.'+fileNameIn )
130 self.
relvalModule = sys.modules[
'Configuration.PyReleaseValidation.'+fileNameIn]
131 except Exception
as e:
132 print(
"ERROR importing file ", fileNameIn,
str(e))
135 if useInput
is not None:
136 print(
"request for INPUT for ", useInput)
146 for k
in self.relvalModule.workflows.keys():
152 for k
in self.relvalModule.workflows.keys():
153 fromInput[
float(k)]=0
155 fromInput[
float(i)]=0
158 fromScratch=
map(float,fromScratch)
159 for num
in fromScratch:
165 self.relvalModule.steps.overwrite(p)
170 refRels=refRel.split(
',')
171 if len(refRels)!=len(self.relvalModule.baseDataSetRelease):
173 self.relvalModule.changeRefRelease(
174 self.relvalModule.steps,
175 list(
zip(self.relvalModule.baseDataSetRelease,refRels))
178 self.relvalModule.changeRefRelease(
179 self.relvalModule.steps,
180 [(x,refRel)
for x
in self.relvalModule.baseDataSetRelease]
184 for num, wfInfo
in self.relvalModule.workflows.items():
188 stepOverrides=wfInfo.overrides
190 if wfName.strip() ==
'': wfName = stepList[0]
196 if not isinstance(addCom, list): addCom=[addCom]
201 while len(addTo)!=len(stepList):
210 ilevel=fromInput[num]
212 for (stepIr,step)
in enumerate(reversed(stepList)):
214 stepI=(len(stepList)-stepIr)-1
220 testName=
'__'.
join(stepList[0:stepI+1])+
'INPUT' 222 testName=step+
'INPUT' 224 if testName
in self.relvalModule.steps.keys():
226 stepList[stepI]=testName
229 for p
in range(stepI):
235 for (stepI,step)
in enumerate(stepList):
237 if self.relvalModule.steps[stepName]
is None:
243 'RECODFROMRAWRECO',
'SKIMD',
'SKIMCOSD',
'SKIMDreHLT' 249 if len(name) > 0 : name +=
'+' 254 if step+'INPUT' in self.relvalModule.steps.keys(): 255 stepName = step+"INPUT" 256 stepList.remove(step) 257 stepList.insert(stepIndex,stepName) 260 if addCom
and (
not addTo
or addTo[stepIndex]==1):
262 copyStep=
merge(addCom+[self.
makeStep(self.relvalModule.steps[stepName],stepOverrides)])
263 cfg, input, opts = self.
makeCmd(copyStep)
265 cfg, input, opts = self.
makeCmd(self.
makeStep(self.relvalModule.steps[stepName],stepOverrides))
268 msg =
"FATAL ERROR: found both cfg and input for workflow "+
str(num)+
' step '+stepName
277 cmd =
'cmsDriver.py '+cfg+
' '+opts
279 cmd =
'cmsDriver.py step'+
str(stepIndex+1)+
' '+opts
281 cmd+=
' --io %s.io --python %s.py'%(stepName,stepName)
284 if stepIndex
in self.
apply or stepName
in self.
apply:
289 cmd=cmd.replace(
'DQMIO',
'DQM')
290 cmd=cmd.replace(
'--filetype DQM',
'')
292 ranStepList.append(stepName)
295 self.
workFlowSteps[(num,prefix)] = (num, name, commands, ranStepList)
300 def showRaw(self, useInput, refRel=None, fromScratch=None, what='all',step1Only=False,selected=None):
303 selected=
map(float,selected)
304 for matrixFile
in self.
files:
308 if self.
what !=
'all' and self.
what not in matrixFile:
309 print(
"ignoring non-requested file",matrixFile)
313 print(
"ignoring file not used by default (enable with -w)",matrixFile)
317 self.
readMatrix(matrixFile, useInput, refRel, fromScratch)
318 except Exception
as e:
319 print(
"ERROR reading file:", matrixFile,
str(e))
324 dataFileName = matrixFile.replace(
'relval_',
'cmsDriver_')+
'_hlt.txt' 325 outFile = open(dataFileName,
'w')
328 ids = sorted(self.workFlowSteps.keys())
333 if selected
and not (key[0]
in selected):
336 if key[0]==203.1
or key[0]==204.1
or key[0]==205.1
or key[0]==4.51
or key[0]==4.52:
continue 339 wfName,stepNames= name.split(
'+',1)
341 stepNames=stepNames.replace(
'+RECODFROMRAWRECO',
'')
342 stepNames=stepNames.replace(
'+SKIMCOSD',
'')
343 stepNames=stepNames.replace(
'+SKIMD',
'')
344 if 'HARVEST' in stepNames:
346 exactb=stepNames.index(
'+HARVEST')
347 exacte=stepNames.index(
'+',exactb+1)
if (
'+' in stepNames[exactb+1:])
else (len(stepNames))
348 stepNames=stepNames.replace(stepNames[exactb:exacte],
'')
351 step1,otherSteps = stepNames.split(
'+',1)
353 line =
str(num) +
' ++ '+ wfName
354 if otherSteps
and not step1Only:
355 line +=
' ++ ' +otherSteps.replace(
'+',
',')
359 if not isinstance(commands[0],str):
360 inputInfo=commands[0]
362 for (i,c)
in enumerate(otherSteps.split(
'+')):
364 for p
in range(len(indexAndSteps),i+2):
365 indexAndSteps.append(set())
366 indexAndSteps[i+1].
add((c,commands[i+1]))
370 if step1Only:
continue 371 line +=
' ++ REALDATA: '+inputInfo.dataSet
372 if inputInfo.run!=[]: line +=
', RUN:'+
'|'.
join(
map(str,inputInfo.run))
373 line +=
', FILES: ' +
str(inputInfo.files)
374 line +=
', EVENTS: '+
str(inputInfo.events)
375 if inputInfo.label!=
'':
376 line +=
', LABEL: ' +inputInfo.label
377 line +=
', LOCATION:'+inputInfo.location
380 line +=
' @@@ '+commands[0]
382 line=line.replace(
'DQMIO',
'DQM')
384 outFile.write(line+
'\n')
387 outFile.write(
'\n'+
'\n')
388 if step1Only:
continue 390 for (index,s)
in enumerate(indexAndSteps):
391 for (stepName,cmd)
in s:
393 if 'dasquery.log' in cmd:
continue 394 line =
'STEP%d ++ '%(stepIndex,) +stepName +
' @@@ '+cmd
396 line=line.replace(
'DQMIO',
'DQM')
397 outFile.write(line+
'\n')
398 outFile.write(
'\n'+
'\n')
400 print(
"wrote ",writtenWF,
' workflow'+(
's' if (writtenWF!=1)
else ''),
' to ', outFile.name)
406 if 'cms/caf/cms' in os.environ[
'CMS_PATH']:
411 if isinstance(workflow.cmds[0], InputInfo):
412 if cafVeto
and (workflow.cmds[0].location ==
'CAF' and not onCAF):
414 workflows.append(workflow)
419 if selected: selected =
map(float,selected)
422 fmt1 =
"%-6s %-35s [1]: %s ..." 423 fmt2 =
" %35s [%d]: %s ..." 424 print(
"\nfound a total of ", len(wfs),
' workflows:')
426 print(
" of which the following", len(selected),
'were selected:')
429 fmt1 =
"%-6s %-35s [1]: %s " 430 fmt2 =
" %35s [%d]: %s" 434 if selected
and float(wf.numId)
not in selected:
continue 435 if extended:
print(
'')
437 for i
in range(len(N),len(wf.cmds)): N.append(0)
439 wfName, stepNames = wf.nameId.split(
'+',1)
440 for i,s
in enumerate(wf.cmds):
443 print(fmt1 % (wf.numId, stepNames, (
str(s)+
' ')[:maxLen]))
445 print(fmt2 % (
' ', i+1, (
str(s)+
' ')[:maxLen]))
447 print(
"%-6s %-35s "% (wf.numId, stepNames))
450 for i,n
in enumerate(N):
451 if n:
print(n,
'workflows with',i+1,
'steps')
460 keyList = self.workFlowSteps.keys()
464 if pref != prefixIn :
continue 469 num, name, commands, stepList = val
470 nameId =
str(num)+
'_'+name
472 print(
"==> duplicate name found for ", nameId)
474 print(
' ignoring : ', val)
478 self.workFlows.append(
WorkFlow(num, name, commands=commands))
482 def prepare(self, useInput=None, refRel='', fromScratch=None):
484 for matrixFile
in self.
files:
485 if self.
what !=
'all' and self.
what not in matrixFile:
486 print(
"ignoring non-requested file",matrixFile)
489 print(
"ignoring",matrixFile,
"from default matrix")
493 self.
readMatrix(matrixFile, useInput, refRel, fromScratch)
494 except Exception
as e:
495 print(
"ERROR reading file:", matrixFile,
str(e))
500 except Exception
as e:
501 print(
"ERROR creating workflows :",
str(e))
505 def show(self, selected=None, extended=True, cafVeto=True):
508 print(
'\n',
'-'*80,
'\n')
514 pickle.dump(self.
workFlows, open(
'theMatrix.pkl',
'w') )
revertDqmio
maybe we want too level deep input
def prepare(self, useInput=None, refRel='', fromScratch=None)
S & print(S &os, JobReport::InputFile const &f)
def readMatrix(self, fileNameIn, useInput=None, refRel=None, fromScratch=None)
OutputIterator zip(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp)
def makeStep(self, step, overrides)
def showWorkFlows(self, selected=None, extended=True, cafVeto=True)
def show(self, selected=None, extended=True, cafVeto=True)
def showRaw(self, useInput, refRel=None, fromScratch=None, what='all', step1Only=False, selected=None)
def reset(self, what='all')
void add(std::map< std::string, TH1 * > &h, TH1 *hist)
static std::string join(char **cmd)
def createWorkFlows(self, fileNameIn)
def workFlowsByLocation(self, cafVeto=True)
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