1 from __future__
import print_function
10 MAXWORKFLOWLENGTH = 81
14 print(
'Not injecting to wmagent in --show mode. Need to run the worklfows.')
16 if opt.wmcontrol==
'init':
19 if opt.wmcontrol==
'test':
22 if opt.wmcontrol==
'submit' and opt.nProcs==0:
23 print(
'Not injecting to wmagent in -j 0 mode. Need to run the worklfows.')
25 if opt.wmcontrol==
'force':
26 print(
"This is an expert setting, you'd better know what you're doing")
30 from modules.wma
import upload_to_couch
31 (filePath,labelInCouch,user,group,where) = arguments
32 cacheId=upload_to_couch(filePath,
48 for k
in options.split(
','):
49 if k.startswith(
'dqm:'):
50 self.
dqmgui=k.split(
':',1)[-1]
51 elif k.startswith(
'wma:'):
54 self.
testMode=((mode!=
'submit')
and (mode!=
'force'))
84 self.
wmagent = os.getenv(
'WMAGENT_REQMGR')
91 self.
wmagent =
'cmsweb-testbed.cern.ch'
94 if opt.dbsUrl
is not None:
96 elif os.getenv(
'CMS_DBSREADER_URL')
is not None:
97 self.
DbsUrl = os.getenv(
'CMS_DBSREADER_URL')
101 self.
DbsUrl =
"https://cmsweb-prod.cern.ch/dbs/prod/global/DBSReader"
103 self.
DbsUrl =
"https://cmsweb-testbed.cern.ch/dbs/int/global/DBSReader"
106 self.
dqmgui=
"https://cmsweb.cern.ch/dqm/relval"
119 if not os.getenv(
'WMCORE_ROOT'):
120 print(
'\n\twmclient is not setup properly. Will not be able to upload or submit requests.\n')
125 print(
'\n\tFound wmclient\n')
128 "RequestType" :
"TaskChain",
129 "SubRequestType" :
"RelVal",
130 "RequestPriority": 500000,
131 "Requestor": self.
user,
133 "CMSSWVersion": os.getenv(
'CMSSW_VERSION'),
134 "Campaign": os.getenv(
'CMSSW_VERSION'),
135 "ScramArch": os.getenv(
'SCRAM_ARCH'),
136 "ProcessingVersion": self.
version,
138 "ConfigCacheUrl": self.
couch,
146 "SizePerEvent" : 1234,
148 "PrepID": os.getenv(
'CMSSW_VERSION')
152 "EnableHarvesting" :
"True",
153 "DQMUploadUrl" : self.
dqmgui,
154 "DQMConfigCacheID" :
None,
160 "ConfigCacheID" :
None,
162 "SplittingAlgo" :
"EventBased",
163 "EventsPerJob" :
None,
164 "EventsPerLumi" :
None,
165 "RequestNumEvents" :
None,
166 "Seeding" :
"AutomaticSeeding",
167 "PrimaryDataset" :
None,
169 "Multicore" : opt.nThreads,
174 "TaskName" :
"DigiHLT",
175 "ConfigCacheID" :
None,
177 "InputDataset" :
None,
178 "SplittingAlgo" :
"LumiBased",
181 "Multicore" : opt.nThreads,
188 "InputFromOutputModule" :
None,
189 "ConfigCacheID" :
None,
191 "SplittingAlgo" :
"LumiBased",
194 "Multicore" : opt.nThreads,
196 "KeepOutput" :
False,
197 "RequiresGPU" :
None,
205 if self.
GPUName: self.defaultGPUParams.update({
"GPUName": self.
GPUName})
214 Return a "wmsplit" dictionary that contain non-default LumisPerJob values
218 wmsplit[
'DIGIHI'] = 5
219 wmsplit[
'RECOHI'] = 5
221 wmsplit[
'RECODreHLT'] = 2
222 wmsplit[
'DIGIPU'] = 4
223 wmsplit[
'DIGIPU1'] = 4
224 wmsplit[
'RECOPU1'] = 1
225 wmsplit[
'DIGIUP15_PU50'] = 1
226 wmsplit[
'RECOUP15_PU50'] = 1
227 wmsplit[
'DIGIUP15_PU25'] = 1
228 wmsplit[
'RECOUP15_PU25'] = 1
229 wmsplit[
'DIGIUP15_PU25HS'] = 1
230 wmsplit[
'RECOUP15_PU25HS'] = 1
231 wmsplit[
'DIGIHIMIX'] = 5
232 wmsplit[
'RECOHIMIX'] = 5
233 wmsplit[
'RECODSplit'] = 1
234 wmsplit[
'SingleMuPt10_UP15_ID'] = 1
235 wmsplit[
'DIGIUP15_ID'] = 1
236 wmsplit[
'RECOUP15_ID'] = 1
237 wmsplit[
'TTbar_13_ID'] = 1
238 wmsplit[
'SingleMuPt10FS_ID'] = 1
239 wmsplit[
'TTbarFS_ID'] = 1
240 wmsplit[
'RECODR2_50nsreHLT'] = 5
241 wmsplit[
'RECODR2_25nsreHLT'] = 5
242 wmsplit[
'RECODR2_2016reHLT'] = 5
243 wmsplit[
'RECODR2_50nsreHLT_HIPM'] = 5
244 wmsplit[
'RECODR2_25nsreHLT_HIPM'] = 5
245 wmsplit[
'RECODR2_2016reHLT_HIPM'] = 1
246 wmsplit[
'RECODR2_2016reHLT_skimSingleMu'] = 1
247 wmsplit[
'RECODR2_2016reHLT_skimDoubleEG'] = 1
248 wmsplit[
'RECODR2_2016reHLT_skimMuonEG'] = 1
249 wmsplit[
'RECODR2_2016reHLT_skimJetHT'] = 1
250 wmsplit[
'RECODR2_2016reHLT_skimMET'] = 1
251 wmsplit[
'RECODR2_2016reHLT_skimSinglePh'] = 1
252 wmsplit[
'RECODR2_2016reHLT_skimMuOnia'] = 1
253 wmsplit[
'RECODR2_2016reHLT_skimSingleMu_HIPM'] = 1
254 wmsplit[
'RECODR2_2016reHLT_skimDoubleEG_HIPM'] = 1
255 wmsplit[
'RECODR2_2016reHLT_skimMuonEG_HIPM'] = 1
256 wmsplit[
'RECODR2_2016reHLT_skimJetHT_HIPM'] = 1
257 wmsplit[
'RECODR2_2016reHLT_skimMET_HIPM'] = 1
258 wmsplit[
'RECODR2_2016reHLT_skimSinglePh_HIPM'] = 1
259 wmsplit[
'RECODR2_2016reHLT_skimMuOnia_HIPM'] = 1
260 wmsplit[
'RECODR2_2017reHLT_Prompt'] = 1
261 wmsplit[
'RECODR2_2017reHLT_skimSingleMu_Prompt_Lumi'] = 1
262 wmsplit[
'RECODR2_2017reHLT_skimDoubleEG_Prompt'] = 1
263 wmsplit[
'RECODR2_2017reHLT_skimMET_Prompt'] = 1
264 wmsplit[
'RECODR2_2017reHLT_skimMuOnia_Prompt'] = 1
265 wmsplit[
'RECODR2_2017reHLT_Prompt_L1TEgDQM'] = 1
266 wmsplit[
'RECODR2_2018reHLT_Prompt'] = 1
267 wmsplit[
'RECODR2_2018reHLT_skimSingleMu_Prompt_Lumi'] = 1
268 wmsplit[
'RECODR2_2018reHLT_skimDoubleEG_Prompt'] = 1
269 wmsplit[
'RECODR2_2018reHLT_skimJetHT_Prompt'] = 1
270 wmsplit[
'RECODR2_2018reHLT_skimMET_Prompt'] = 1
271 wmsplit[
'RECODR2_2018reHLT_skimMuOnia_Prompt'] = 1
272 wmsplit[
'RECODR2_2018reHLT_skimEGamma_Prompt_L1TEgDQM'] = 1
273 wmsplit[
'RECODR2_2018reHLT_skimMuonEG_Prompt'] = 1
274 wmsplit[
'RECODR2_2018reHLT_skimCharmonium_Prompt'] = 1
275 wmsplit[
'RECODR2_2018reHLT_skimJetHT_Prompt_HEfail'] = 1
276 wmsplit[
'RECODR2_2018reHLT_skimJetHT_Prompt_BadHcalMitig'] = 1
277 wmsplit[
'RECODR2_2018reHLTAlCaTkCosmics_Prompt'] = 1
278 wmsplit[
'RECODR2_2018reHLT_skimDisplacedJet_Prompt'] = 1
279 wmsplit[
'RECODR2_2018reHLT_ZBPrompt'] = 1
280 wmsplit[
'RECODR2_2018reHLT_Offline'] = 1
281 wmsplit[
'RECODR2_2018reHLT_skimSingleMu_Offline_Lumi'] = 1
282 wmsplit[
'RECODR2_2018reHLT_skimDoubleEG_Offline'] = 1
283 wmsplit[
'RECODR2_2018reHLT_skimJetHT_Offline'] = 1
284 wmsplit[
'RECODR2_2018reHLT_skimMET_Offline'] = 1
285 wmsplit[
'RECODR2_2018reHLT_skimMuOnia_Offline'] = 1
286 wmsplit[
'RECODR2_2018reHLT_skimEGamma_Offline_L1TEgDQM'] = 1
287 wmsplit[
'RECODR2_2018reHLT_skimMuonEG_Offline'] = 1
288 wmsplit[
'RECODR2_2018reHLT_skimCharmonium_Offline'] = 1
289 wmsplit[
'RECODR2_2018reHLT_skimJetHT_Offline_HEfail'] = 1
290 wmsplit[
'RECODR2_2018reHLT_skimJetHT_Offline_BadHcalMitig'] = 1
291 wmsplit[
'RECODR2_2018reHLTAlCaTkCosmics_Offline'] = 1
292 wmsplit[
'RECODR2_2018reHLT_skimDisplacedJet_Offline'] = 1
293 wmsplit[
'RECODR2_2018reHLT_ZBOffline'] = 1
294 wmsplit[
'HLTDR2_50ns'] = 1
295 wmsplit[
'HLTDR2_25ns'] = 1
296 wmsplit[
'HLTDR2_2016'] = 1
297 wmsplit[
'HLTDR2_2017'] = 1
298 wmsplit[
'HLTDR2_2018'] = 1
299 wmsplit[
'HLTDR2_2018_BadHcalMitig'] = 1
300 wmsplit[
'Hadronizer'] = 1
301 wmsplit[
'DIGIUP15'] = 1
302 wmsplit[
'RECOUP15'] = 1
303 wmsplit[
'RECOAODUP15'] = 5
304 wmsplit[
'DBLMINIAODMCUP15NODQM'] = 5
307 wmsplit[
'DigiPU'] = 1
308 wmsplit[
'RecoPU'] = 1
309 wmsplit[
'RECOHID11'] = 1
310 wmsplit[
'DIGIUP17'] = 1
311 wmsplit[
'RECOUP17'] = 1
312 wmsplit[
'DIGIUP17_PU25'] = 1
313 wmsplit[
'RECOUP17_PU25'] = 1
314 wmsplit[
'DIGICOS_UP16'] = 1
315 wmsplit[
'RECOCOS_UP16'] = 1
316 wmsplit[
'DIGICOS_UP17'] = 1
317 wmsplit[
'RECOCOS_UP17'] = 1
318 wmsplit[
'DIGICOS_UP18'] = 1
319 wmsplit[
'RECOCOS_UP18'] = 1
320 wmsplit[
'DIGICOS_UP21'] = 1
321 wmsplit[
'RECOCOS_UP21'] = 1
322 wmsplit[
'HYBRIDRepackHI2015VR'] = 1
323 wmsplit[
'HYBRIDZSHI2015'] = 1
324 wmsplit[
'RECOHID15'] = 1
325 wmsplit[
'RECOHID18'] = 1
327 from .upgradeWorkflowComponents
import upgradeKeys
328 for key
in upgradeKeys[2026]:
332 wmsplit[
'DigiTriggerPU_' + key] = 1
333 wmsplit[
'RecoGlobalPU_' + key] = 1
335 except Exception
as ex:
336 print(
'Exception while building a wmsplit dictionary: %s' % (
str(ex)))
341 def prepare(self, mReader, directories, mode='init'):
342 wmsplit = MatrixInjector.get_wmsplit()
344 for (n,dir)
in directories.items():
346 print(
"inspecting",dir)
348 for (x,s)
in mReader.workFlowSteps.items():
358 if len( [step
for step
in s[3]
if "HARVESTGEN" in step] )>0:
359 chainDict[
'TimePerEvent']=0.01
360 thisLabel=thisLabel+
"_gen"
362 if len( [step
for step
in s[3]
if "DBLMINIAODMCUP15NODQM" in step] )>0:
363 thisLabel=thisLabel+
"_dblMiniAOD"
369 if 'INPUT' in step
or (
not isinstance(s[2][index],str)):
370 nextHasDSInput=s[2][index]
378 chainDict[
'nowmTasklist'][-1][
'nowmIO']=json.loads(open(
'%s/%s.io'%(dir,step)).
read())
380 print(
"Failed to find",
'%s/%s.io'%(dir,step),
".The workflows were probably not run on cfg not created")
383 chainDict[
'nowmTasklist'][-1][
'PrimaryDataset']=
'RelVal'+s[1].
split(
'+')[0]
384 if not '--relval' in s[2][index]:
385 print(
'Impossible to create task from scratch without splitting information with --relval')
388 arg=s[2][index].
split()
389 ns=list(map(int,arg[len(arg) - arg[-1::-1].
index(
'--relval')].
split(
',')))
390 chainDict[
'nowmTasklist'][-1][
'RequestNumEvents'] = ns[0]
391 chainDict[
'nowmTasklist'][-1][
'EventsPerJob'] = ns[1]
392 chainDict[
'nowmTasklist'][-1][
'EventsPerLumi'] = ns[1]
394 if 'numberEventsInLuminosityBlock' in s[2][index]:
395 nEventsInLuminosityBlock = re.findall(
'process.source.numberEventsInLuminosityBlock=cms.untracked.uint32\(([ 0-9 ]*)\)', s[2][index],re.DOTALL)
396 if nEventsInLuminosityBlock[-1].isdigit()
and int(nEventsInLuminosityBlock[-1]) < ns[1]:
397 chainDict[
'nowmTasklist'][-1][
'EventsPerLumi'] = int(nEventsInLuminosityBlock[-1])
400 if 'FASTSIM' in s[2][index]
or '--fast' in s[2][index]:
401 thisLabel+=
'_FastSim'
402 if 'lhe' in s[2][index]
in s[2][index]:
403 chainDict[
'nowmTasklist'][-1][
'LheInputFiles'] =
True
408 chainDict[
'nowmTasklist'][-1][
'nowmIO']=json.loads(open(
'%s/%s.io'%(dir,step)).
read())
410 print(
"Failed to find",
'%s/%s.io'%(dir,step),
".The workflows were probably not run on cfg not created")
412 chainDict[
'nowmTasklist'][-1][
'InputDataset']=nextHasDSInput.dataSet
413 if (
'DQMHLTonRAWAOD' in step) :
414 chainDict[
'nowmTasklist'][-1][
'IncludeParents']=
True
415 splitForThisWf=nextHasDSInput.split
416 chainDict[
'nowmTasklist'][-1][
'LumisPerJob']=splitForThisWf
418 chainDict[
'nowmTasklist'][-1][
'LumisPerJob']=wmsplit[step]
420 if len(nextHasDSInput.run):
421 chainDict[
'nowmTasklist'][-1][
'RunWhitelist']=nextHasDSInput.run
422 if len(nextHasDSInput.ls):
423 chainDict[
'nowmTasklist'][-1][
'LumiList']=nextHasDSInput.ls
425 if '--data' in s[2][index]
and nextHasDSInput.label:
426 thisLabel+=
'_RelVal_%s'%nextHasDSInput.label
427 if 'filter' in chainDict[
'nowmTasklist'][-1][
'nowmIO']:
428 print(
"This has an input DS and a filter sequence: very likely to be the PyQuen sample")
429 processStrPrefix=
'PU_'
430 setPrimaryDs =
'RelVal'+s[1].
split(
'+')[0]
432 chainDict[
'nowmTasklist'][-1][
'PrimaryDataset']=setPrimaryDs
434 if 'GPU' in step
and self.
RequiresGPU !=
'forbidden':
435 chainDict[
'nowmTasklist'][-1][
'RequiresGPU'] = self.
RequiresGPU
436 chainDict[
'nowmTasklist'][-1][
'GPUParams']=json.dumps(self.
defaultGPUParams)
441 chainDict[
'nowmTasklist'][-1][
'nowmIO']=json.loads(open(
'%s/%s.io'%(dir,step)).
read())
443 print(
"Failed to find",
'%s/%s.io'%(dir,step),
".The workflows were probably not run on cfg not created")
446 chainDict[
'nowmTasklist'][-1][
'LumisPerJob']=splitForThisWf
448 chainDict[
'nowmTasklist'][-1][
'LumisPerJob']=wmsplit[step]
449 if 'GPU' in step
and self.
RequiresGPU !=
'forbidden':
450 chainDict[
'nowmTasklist'][-1][
'RequiresGPU'] = self.
RequiresGPU
451 chainDict[
'nowmTasklist'][-1][
'GPUParams']=json.dumps(self.
defaultGPUParams)
454 if 'Hadronizer' in step:
455 chainDict[
'nowmTasklist'][-1][
'LumisPerJob']=wmsplit[
'Hadronizer']
458 chainDict[
'nowmTasklist'][-1][
'TaskName']=step
460 chainDict[
'nowmTasklist'][-1][
'PrimaryDataset']=setPrimaryDs
461 chainDict[
'nowmTasklist'][-1][
'ConfigCacheID']=
'%s/%s.py'%(dir,step)
462 chainDict[
'nowmTasklist'][-1][
'GlobalTag']=chainDict[
'nowmTasklist'][-1][
'nowmIO'][
'GT']
463 chainDict[
'GlobalTag']=chainDict[
'nowmTasklist'][-1][
'nowmIO'][
'GT']
464 if 'NANOEDM' in step :
465 nanoedmGT = chainDict[
'nowmTasklist'][-1][
'nowmIO'][
'GT']
466 if 'NANOMERGE' in step :
467 chainDict[
'GlobalTag'] = nanoedmGT
468 if 'pileup' in chainDict[
'nowmTasklist'][-1][
'nowmIO']:
469 chainDict[
'nowmTasklist'][-1][
'MCPileup']=chainDict[
'nowmTasklist'][-1][
'nowmIO'][
'pileup']
470 if '--pileup ' in s[2][index]:
471 pileupString = s[2][index].
split()[s[2][index].
split().
index(
'--pileup')+1]
472 processStrPrefix=
'PU_'
473 if pileupString.find(
'25ns') > 0 :
474 processStrPrefix=
'PU25ns_'
475 elif pileupString.find(
'50ns') > 0 :
476 processStrPrefix=
'PU50ns_'
477 elif 'nopu' in pileupString.lower():
479 if 'premix_stage2' in s[2][index]
and '--pileup_input' in s[2][index]:
481 processStrPrefix=
'PUpmx25ns_'
482 elif s[2][index].
split()[ s[2][index].
split().
index(
'--pileup_input')+1 ].
find(
'50ns') > 0 :
483 processStrPrefix=
'PUpmx50ns_'
487 chainDict[
'AcquisitionEra'][step]=chainDict[
'CMSSWVersion']
488 chainDict[
'ProcessingString'][step]=processStrPrefix+chainDict[
'nowmTasklist'][-1][
'GlobalTag'].
replace(
'::All',
'').
replace(
'-',
'_')+thisLabel
489 if 'NANOMERGE' in step :
490 chainDict[
'ProcessingString'][step]=processStrPrefix+nanoedmGT.replace(
'::All',
'').
replace(
'-',
'_')+thisLabel
493 chainDict[
'nowmTasklist'][-1][
'AcquisitionEra']=chainDict[
'CMSSWVersion']
494 chainDict[
'nowmTasklist'][-1][
'ProcessingString']=processStrPrefix+chainDict[
'nowmTasklist'][-1][
'GlobalTag'].
replace(
'::All',
'').
replace(
'-',
'_')+thisLabel
495 if 'NANOMERGE' in step :
496 chainDict[
'nowmTasklist'][-1][
'ProcessingString']=processStrPrefix+nanoedmGT.replace(
'::All',
'').
replace(
'-',
'_')+thisLabel
499 chainDict[
'nowmTasklist'][-1][
'Campaign'] = chainDict[
'nowmTasklist'][-1][
'AcquisitionEra']+self.
batchName
502 if (
'DBLMINIAODMCUP15NODQM' in step):
503 chainDict[
'nowmTasklist'][-1][
'ProcessingString']=chainDict[
'nowmTasklist'][-1][
'ProcessingString']+
'_miniAOD'
505 if( chainDict[
'nowmTasklist'][-1][
'Multicore'] ):
512 chainDict[
'nowmTasklist'][-1][
'Memory'] = self.
memoryOffset + int( chainDict[
'nowmTasklist'][-1][
'Multicore'] -1 ) * self.
memPerCore
516 chainDict[
'RequestString']=
'RV'+chainDict[
'CMSSWVersion']+s[1].
split(
'+')[0]
517 if processStrPrefix
or thisLabel:
518 chainDict[
'RequestString']+=
'_'+processStrPrefix+thisLabel
525 chainDict[
'PrepID'] = chainDict[
'CMSSWVersion']+
'__'+self.
batchTime+
'-'+s[1].
split(
'+')[0]
527 chainDict[
'PrepID'] = chainDict[
'CMSSWVersion']+self.
batchName+
'-'+s[1].
split(
'+')[0]
529 chainDict[
'SubRequestType'] =
"HIRelVal"
536 for i_second
in reversed(
range(len(chainDict[
'nowmTasklist']))):
537 t_second=chainDict[
'nowmTasklist'][i_second]
539 if 'primary' in t_second[
'nowmIO']:
541 primary=t_second[
'nowmIO'][
'primary'][0].
replace(
'file:',
'')
542 for i_input
in reversed(
range(0,i_second)):
543 t_input=chainDict[
'nowmTasklist'][i_input]
544 for (om,o)
in t_input[
'nowmIO'].
items():
548 if (len(t_input[
'TaskName'])>50):
549 if (t_input[
'TaskName'].
find(
'GenSim') != -1):
550 t_input[
'TaskName'] =
'GenSimFull'
551 if (t_input[
'TaskName'].
find(
'Hadronizer') != -1):
552 t_input[
'TaskName'] =
'HadronizerFull'
553 t_second[
'InputTask'] = t_input[
'TaskName']
554 t_second[
'InputFromOutputModule'] = om
556 if t_second[
'TaskName'].startswith(
'HARVEST'):
558 if "_RD" in t_second[
'TaskName']:
559 chainDict[
'DQMHarvestUnit'] =
"multiRun"
560 chainDict[
'DQMConfigCacheID']=t_second[
'ConfigCacheID']
580 chainDict[
'AcquisitionEra'] = chainDict[
'AcquisitionEra'].
values()[0]
581 chainDict[
'ProcessingString'] = chainDict[
'ProcessingString'].
values()[0]
583 chainDict[
'AcquisitionEra'] = chainDict[
'nowmTasklist'][0][
'AcquisitionEra']
584 chainDict[
'ProcessingString'] = chainDict[
'nowmTasklist'][0][
'ProcessingString']
588 chainDict[
'Campaign'] = chainDict[
'AcquisitionEra']+self.
batchName
594 if isinstance(i, int)
and i < len(chainDict[
'nowmTasklist']):
595 chainDict[
'nowmTasklist'][i][
'KeepOutput']=
True
596 for (i,t)
in enumerate(chainDict[
'nowmTasklist']):
597 if t[
'TaskName'].startswith(
'HARVEST'):
601 elif t[
'TaskName']
in self.
keep:
603 if t[
'TaskName'].startswith(
'HYBRIDRepackHI2015VR'):
604 t[
'KeepOutput']=
False
607 chainDict[
'Task%d'%(itask)]=t
614 chainDict[
'TaskChain']=itask
616 chainDict.pop(
'nowmTasklist')
623 labelInCouch=self.
label+
'_'+label
624 cacheName=filePath.split(
'/')[-1]
627 print(
'\tFake upload of',filePath,
'to couch with label',labelInCouch)
631 from modules.wma
import upload_to_couch,DATABASE_NAME
633 print(
'\n\tUnable to find wmcontrol modules. Please include it in your python path\n')
638 print(
"Not re-uploading",filePath,
"to",where,
"for",label)
641 print(
"Loading",filePath,
"to",where,
"for",label)
643 pool = multiprocessing.Pool(1)
644 cacheIds = pool.map( upload_to_couch_oneArg, [(filePath,labelInCouch,self.
user,self.
group,where)] )
645 cacheId = cacheIds[0]
650 for (n,d)
in self.chainDicts.items():
652 if it.startswith(
"Task")
and it!=
'TaskChain':
654 couchID=self.
uploadConf(d[it][
'ConfigCacheID'],
655 str(n)+d[it][
'TaskName'],
658 print(d[it][
'ConfigCacheID'],
" uploaded to couchDB for",
str(n),
"with ID",couchID)
659 d[it][
'ConfigCacheID']=couchID
660 if it ==
'DQMConfigCacheID':
661 couchID=self.
uploadConf(d[
'DQMConfigCacheID'],
665 print(d[
'DQMConfigCacheID'],
"uploaded to couchDB for",
str(n),
"with ID",couchID)
666 d[
'DQMConfigCacheID']=couchID
671 from modules.wma
import makeRequest,approveRequest
672 from wmcontrol
import random_sleep
673 print(
'\n\tFound wmcontrol\n')
675 print(
'\n\tUnable to find wmcontrol modules. Please include it in your python path\n')
681 for (n,d)
in self.chainDicts.items():
683 print(
"Only viewing request",n)
684 print(pprint.pprint(d))
687 print(
"For eyes before submitting",n)
688 print(pprint.pprint(d))
689 print(
"Submitting",n,
"...........")
690 workFlow=makeRequest(self.
wmagent,d,encodeDict=
True)
691 print(
"...........",n,
"submitted")
694 print(
"\n*** WARNING: "+
str(len(self.
longWFName))+
" workflows have too long names for submission (>"+
str(MAXWORKFLOWLENGTH)+
"characters) ***")
boost::dynamic_bitset append(const boost::dynamic_bitset<> &bs1, const boost::dynamic_bitset<> &bs2)
this method takes two bitsets bs1 and bs2 and returns result of bs2 appended to the end of bs1 ...
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
const uint16_t range(const Frame &aFrame)
if(conf_.getParameter< bool >("UseStripCablingDB"))
def uploadConf
provide the number of tasks
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
RequiresGPU
Checking and setting up GPU attributes.
numberEventsInLuminosityBlock
static std::string join(char **cmd)
def performInjectionOptionTest
def upload_to_couch_oneArg