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,
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]
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')
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) ***")
def prepare(self, mReader, directories, mode='init')
def performInjectionOptionTest(opt)
def uploadConf(self, filePath, label, where)
the info are not in the task specific dict but in the general dict t_input.update(copy.deepcopy(self.defaultHarvest)) t_input['DQMConfigCacheID']=t_second['ConfigCacheID']
def replace(string, replacements)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
RequiresGPU
Checking and setting up GPU attributes.
numberEventsInLuminosityBlock
def split(sequence, size)
static std::string join(char **cmd)
def __init__(self, opt, mode='init', options='')
def upload_to_couch_oneArg(arguments)