CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Public Attributes
MatrixInjector.MatrixInjector Class Reference
Inheritance diagram for MatrixInjector.MatrixInjector:

Public Member Functions

def __init__ (self, opt, mode='init', options='')
 
def prepare (self, mReader, directories, mode='init')
 
def submit (self)
 
def upload (self)
 
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'] More...
 

Static Public Member Functions

def get_wmsplit ()
 

Public Attributes

 batchName
 
 batchTime
 
 chainDicts
 
 couch
 
 couchCache
 
 count
 
 DbsUrl
 
 defaultChain
 
 defaultHarvest
 
 defaultInput
 
 defaultScratch
 
 defaultTask
 
 dqmgui
 
 group
 
 keep
 
 label
 
 memoryOffset
 
 memPerCore
 
 speciallabel
 
 testMode
 
 user
 
 version
 
 wmagent
 

Detailed Description

Definition at line 38 of file MatrixInjector.py.

Constructor & Destructor Documentation

def MatrixInjector.MatrixInjector.__init__ (   self,
  opt,
  mode = 'init',
  options = '' 
)

Definition at line 40 of file MatrixInjector.py.

40  def __init__(self,opt,mode='init',options=''):
41  self.count=1040
42 
43  self.dqmgui=None
44  self.wmagent=None
45  for k in options.split(','):
46  if k.startswith('dqm:'):
47  self.dqmgui=k.split(':',1)[-1]
48  elif k.startswith('wma:'):
49  self.wmagent=k.split(':',1)[-1]
50 
51  self.testMode=((mode!='submit') and (mode!='force'))
52  self.version =1
53  self.keep = opt.keep
54  self.memoryOffset = opt.memoryOffset
55  self.memPerCore = opt.memPerCore
56  self.batchName = ''
57  self.batchTime = str(int(time.time()))
58  if(opt.batchName):
59  self.batchName = '__'+opt.batchName+'-'+self.batchTime
60 
61  #wagemt stuff
62  if not self.wmagent:
63  self.wmagent=os.getenv('WMAGENT_REQMGR')
64  if not self.wmagent:
65  if not opt.testbed :
66  self.wmagent = 'cmsweb.cern.ch'
67  self.DbsUrl = "https://"+self.wmagent+"/dbs/prod/global/DBSReader"
68  else :
69  self.wmagent = 'cmsweb-testbed.cern.ch'
70  self.DbsUrl = "https://"+self.wmagent+"/dbs/int/global/DBSReader"
71 
72  if not self.dqmgui:
73  self.dqmgui="https://cmsweb.cern.ch/dqm/relval"
74  #couch stuff
75  self.couch = 'https://'+self.wmagent+'/couchdb'
76 # self.couchDB = 'reqmgr_config_cache'
77  self.couchCache={} # so that we do not upload like crazy, and recyle cfgs
78  self.user = os.getenv('USER')
79  self.group = 'ppd'
80  self.label = 'RelValSet_'+os.getenv('CMSSW_VERSION').replace('-','')+'_v'+str(self.version)
81  self.speciallabel=''
82  if opt.label:
83  self.speciallabel= '_'+opt.label
84 
85 
86  if not os.getenv('WMCORE_ROOT'):
87  print('\n\twmclient is not setup properly. Will not be able to upload or submit requests.\n')
88  if not self.testMode:
89  print('\n\t QUIT\n')
90  sys.exit(-18)
91  else:
92  print('\n\tFound wmclient\n')
93 
94  self.defaultChain={
95  "RequestType" : "TaskChain", #this is how we handle relvals
96  "SubRequestType" : "RelVal", #this is how we handle relvals, now that TaskChain is also used for central MC production
97  "RequestPriority": 500000,
98  "Requestor": self.user, #Person responsible
99  "Group": self.group, #group for the request
100  "CMSSWVersion": os.getenv('CMSSW_VERSION'), #CMSSW Version (used for all tasks in chain)
101  "Campaign": os.getenv('CMSSW_VERSION'), # = AcquisitionEra, will be reset later to the one of first task, will both be the CMSSW_VERSION
102  "ScramArch": os.getenv('SCRAM_ARCH'), #Scram Arch (used for all tasks in chain)
103  "ProcessingVersion": self.version, #Processing Version (used for all tasks in chain)
104  "GlobalTag": None, #Global Tag (overridden per task)
105  "ConfigCacheUrl": self.couch, #URL of CouchDB containing Config Cache
106  "DbsUrl": self.DbsUrl,
107  #- Will contain all configs for all Tasks
108  #"SiteWhitelist" : ["T2_CH_CERN", "T1_US_FNAL"], #Site whitelist
109  "TaskChain" : None, #Define number of tasks in chain.
110  "nowmTasklist" : [], #a list of tasks as we put them in
111  "Multicore" : 1, # do not set multicore for the whole chain
112  "Memory" : 3000,
113  "SizePerEvent" : 1234,
114  "TimePerEvent" : 10,
115  "PrepID": os.getenv('CMSSW_VERSION')
116  }
117 
119  "EnableHarvesting" : "True",
120  "DQMUploadUrl" : self.dqmgui,
121  "DQMConfigCacheID" : None,
122  "Multicore" : 1 # hardcode Multicore to be 1 for Harvest
123  }
124 
126  "TaskName" : None, #Task Name
127  "ConfigCacheID" : None, #Generator Config id
128  "GlobalTag": None,
129  "SplittingAlgo" : "EventBased", #Splitting Algorithm
130  "EventsPerJob" : None, #Size of jobs in terms of splitting algorithm
131  "RequestNumEvents" : None, #Total number of events to generate
132  "Seeding" : "AutomaticSeeding", #Random seeding method
133  "PrimaryDataset" : None, #Primary Dataset to be created
134  "nowmIO": {},
135  "Multicore" : opt.nThreads, # this is the per-taskchain Multicore; it's the default assigned to a task if it has no value specified
136  "KeepOutput" : False
137  }
139  "TaskName" : "DigiHLT", #Task Name
140  "ConfigCacheID" : None, #Processing Config id
141  "GlobalTag": None,
142  "InputDataset" : None, #Input Dataset to be processed
143  "SplittingAlgo" : "LumiBased", #Splitting Algorithm
144  "LumisPerJob" : 10, #Size of jobs in terms of splitting algorithm
145  "nowmIO": {},
146  "Multicore" : opt.nThreads, # this is the per-taskchain Multicore; it's the default assigned to a task if it has no value specified
147  "KeepOutput" : False
148  }
149  self.defaultTask={
150  "TaskName" : None, #Task Name
151  "InputTask" : None, #Input Task Name (Task Name field of a previous Task entry)
152  "InputFromOutputModule" : None, #OutputModule name in the input task that will provide files to process
153  "ConfigCacheID" : None, #Processing Config id
154  "GlobalTag": None,
155  "SplittingAlgo" : "LumiBased", #Splitting Algorithm
156  "LumisPerJob" : 10, #Size of jobs in terms of splitting algorithm
157  "nowmIO": {},
158  "Multicore" : opt.nThreads, # this is the per-taskchain Multicore; it's the default assigned to a task if it has no value specified
159  "KeepOutput" : False
160  }
161 
162  self.chainDicts={}
163 
def replace(string, replacements)
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
def __init__(self, opt, mode='init', options='')
#define str(s)

Member Function Documentation

def MatrixInjector.MatrixInjector.get_wmsplit ( )
static
Return a "wmsplit" dictionary that contain non-default LumisPerJob values

Definition at line 165 of file MatrixInjector.py.

References edm.print(), and str.

165  def get_wmsplit():
166  """
167  Return a "wmsplit" dictionary that contain non-default LumisPerJob values
168  """
169  wmsplit = {}
170  try:
171  #from Configuration.PyReleaseValidation.relval_steps import wmsplit
172  wmsplit = {}
173  wmsplit['DIGIHI']=5
174  wmsplit['RECOHI']=5
175  wmsplit['HLTD']=5
176  wmsplit['RECODreHLT']=2
177  wmsplit['DIGIPU']=4
178  wmsplit['DIGIPU1']=4
179  wmsplit['RECOPU1']=1
180  wmsplit['DIGIUP15_PU50']=1
181  wmsplit['RECOUP15_PU50']=1
182  wmsplit['DIGIUP15_PU25']=1
183  wmsplit['RECOUP15_PU25']=1
184  wmsplit['DIGIUP15_PU25HS']=1
185  wmsplit['RECOUP15_PU25HS']=1
186  wmsplit['DIGIHIMIX']=5
187  wmsplit['RECOHIMIX']=5
188  wmsplit['RECODSplit']=1
189  wmsplit['SingleMuPt10_UP15_ID']=1
190  wmsplit['DIGIUP15_ID']=1
191  wmsplit['RECOUP15_ID']=1
192  wmsplit['TTbar_13_ID']=1
193  wmsplit['SingleMuPt10FS_ID']=1
194  wmsplit['TTbarFS_ID']=1
195  wmsplit['RECODR2_50nsreHLT']=5
196  wmsplit['RECODR2_25nsreHLT']=5
197  wmsplit['RECODR2_2016reHLT']=5
198  wmsplit['RECODR2_50nsreHLT_HIPM']=5
199  wmsplit['RECODR2_25nsreHLT_HIPM']=5
200  wmsplit['RECODR2_2016reHLT_HIPM']=1
201  wmsplit['RECODR2_2016reHLT_skimSingleMu']=1
202  wmsplit['RECODR2_2016reHLT_skimDoubleEG']=1
203  wmsplit['RECODR2_2016reHLT_skimMuonEG']=1
204  wmsplit['RECODR2_2016reHLT_skimJetHT']=1
205  wmsplit['RECODR2_2016reHLT_skimMET']=1
206  wmsplit['RECODR2_2016reHLT_skimSinglePh']=1
207  wmsplit['RECODR2_2016reHLT_skimMuOnia']=1
208  wmsplit['RECODR2_2016reHLT_skimSingleMu_HIPM']=1
209  wmsplit['RECODR2_2016reHLT_skimDoubleEG_HIPM']=1
210  wmsplit['RECODR2_2016reHLT_skimMuonEG_HIPM']=1
211  wmsplit['RECODR2_2016reHLT_skimJetHT_HIPM']=1
212  wmsplit['RECODR2_2016reHLT_skimMET_HIPM']=1
213  wmsplit['RECODR2_2016reHLT_skimSinglePh_HIPM']=1
214  wmsplit['RECODR2_2016reHLT_skimMuOnia_HIPM']=1
215  wmsplit['RECODR2_2017reHLT_Prompt']=1
216  wmsplit['RECODR2_2017reHLT_skimSingleMu_Prompt_Lumi']=1
217  wmsplit['RECODR2_2017reHLT_skimDoubleEG_Prompt']=1
218  wmsplit['RECODR2_2017reHLT_skimMET_Prompt']=1
219  wmsplit['RECODR2_2017reHLT_skimMuOnia_Prompt']=1
220  wmsplit['RECODR2_2017reHLT_Prompt_L1TEgDQM']=1
221  wmsplit['RECODR2_2018reHLT_Prompt']=1
222  wmsplit['RECODR2_2018reHLT_skimSingleMu_Prompt_Lumi']=1
223  wmsplit['RECODR2_2018reHLT_skimDoubleEG_Prompt']=1
224  wmsplit['RECODR2_2018reHLT_skimJetHT_Prompt']=1
225  wmsplit['RECODR2_2018reHLT_skimMET_Prompt']=1
226  wmsplit['RECODR2_2018reHLT_skimMuOnia_Prompt']=1
227  wmsplit['RECODR2_2018reHLT_skimEGamma_Prompt_L1TEgDQM']=1
228  wmsplit['RECODR2_2018reHLT_skimMuonEG_Prompt']=1
229  wmsplit['RECODR2_2018reHLT_skimCharmonium_Prompt']=1
230  wmsplit['RECODR2_2018reHLT_skimJetHT_Prompt_HEfail']=1
231  wmsplit['RECODR2_2018reHLT_skimJetHT_Prompt_BadHcalMitig']=1
232  wmsplit['RECODR2_2018reHLTAlCaTkCosmics_Prompt']=1
233  wmsplit['RECODR2_2018reHLT_skimDisplacedJet_Prompt']=1
234  wmsplit['RECODR2_2018reHLT_ZBPrompt']=1
235  wmsplit['RECODR2_2018reHLT_Offline']=1
236  wmsplit['RECODR2_2018reHLT_skimSingleMu_Offline_Lumi']=1
237  wmsplit['RECODR2_2018reHLT_skimDoubleEG_Offline']=1
238  wmsplit['RECODR2_2018reHLT_skimJetHT_Offline']=1
239  wmsplit['RECODR2_2018reHLT_skimMET_Offline']=1
240  wmsplit['RECODR2_2018reHLT_skimMuOnia_Offline']=1
241  wmsplit['RECODR2_2018reHLT_skimEGamma_Offline_L1TEgDQM']=1
242  wmsplit['RECODR2_2018reHLT_skimMuonEG_Offline']=1
243  wmsplit['RECODR2_2018reHLT_skimCharmonium_Offline']=1
244  wmsplit['RECODR2_2018reHLT_skimJetHT_Offline_HEfail']=1
245  wmsplit['RECODR2_2018reHLT_skimJetHT_Offline_BadHcalMitig']=1
246  wmsplit['RECODR2_2018reHLTAlCaTkCosmics_Offline']=1
247  wmsplit['RECODR2_2018reHLT_skimDisplacedJet_Offline']=1
248  wmsplit['RECODR2_2018reHLT_ZBOffline']=1
249  wmsplit['HLTDR2_50ns']=1
250  wmsplit['HLTDR2_25ns']=1
251  wmsplit['HLTDR2_2016']=1
252  wmsplit['HLTDR2_2017']=1
253  wmsplit['HLTDR2_2018']=1
254  wmsplit['HLTDR2_2018_BadHcalMitig']=1
255  wmsplit['Hadronizer']=1
256  wmsplit['DIGIUP15']=1
257  wmsplit['RECOUP15']=1
258  wmsplit['RECOAODUP15']=5
259  wmsplit['DBLMINIAODMCUP15NODQM']=5
260  wmsplit['DigiFull']=5
261  wmsplit['RecoFull']=5
262  wmsplit['DigiFullPU']=1
263  wmsplit['RecoFullPU']=1
264  wmsplit['RECOHID11']=1
265  wmsplit['DigiFullTriggerPU_2023D17PU'] = 1
266  wmsplit['RecoFullGlobalPU_2023D17PU']=1
267  wmsplit['DIGIUP17']=1
268  wmsplit['RECOUP17']=1
269  wmsplit['DIGIUP17_PU25']=1
270  wmsplit['RECOUP17_PU25']=1
271  wmsplit['DIGICOS_UP16']=1
272  wmsplit['RECOCOS_UP16']=1
273  wmsplit['DIGICOS_UP17']=1
274  wmsplit['RECOCOS_UP17']=1
275  wmsplit['DIGICOS_UP18']=1
276  wmsplit['RECOCOS_UP18']=1
277  wmsplit['HYBRIDRepackHI2015VR']=1
278  wmsplit['HYBRIDZSHI2015']=1
279  wmsplit['RECOHID15']=1
280  wmsplit['RECOHID18']=1
281  except Exception as ex:
282  print('Exception while building a wmsplit dictionary: %s' % (str(ex)))
283  return {}
284 
285  return wmsplit
286 
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
#define str(s)
def MatrixInjector.MatrixInjector.prepare (   self,
  mReader,
  directories,
  mode = 'init' 
)

Definition at line 287 of file MatrixInjector.py.

References mps_setup.append, MatrixInjector.MatrixInjector.batchName, MatrixInjector.MatrixInjector.batchTime, MatrixInjector.MatrixInjector.chainDicts, MatrixInjector.MatrixInjector.defaultChain, MatrixInjector.MatrixInjector.defaultHarvest, MatrixInjector.MatrixInjector.defaultInput, MatrixInjector.MatrixInjector.defaultScratch, MatrixInjector.MatrixInjector.defaultTask, spr.find(), createfilelist.int, mps_monitormerge.items, MatrixInjector.MatrixInjector.keep, genParticles_cff.map, MatrixInjector.MatrixInjector.memoryOffset, MatrixInjector.MatrixInjector.memPerCore, edm.print(), python.rootplot.root2matplotlib.replace(), MatrixInjector.MatrixInjector.speciallabel, split, and MuonErrorMatrixValues_cff.values.

287  def prepare(self,mReader, directories, mode='init'):
288  wmsplit = MatrixInjector.get_wmsplit()
289  acqEra=False
290  for (n,dir) in directories.items():
291  chainDict=copy.deepcopy(self.defaultChain)
292  print("inspecting",dir)
293  nextHasDSInput=None
294  for (x,s) in mReader.workFlowSteps.items():
295  #x has the format (num, prefix)
296  #s has the format (num, name, commands, stepList)
297  if x[0]==n:
298  #print "found",n,s[3]
299  #chainDict['RequestString']='RV'+chainDict['CMSSWVersion']+s[1].split('+')[0]
300  index=0
301  splitForThisWf=None
302  thisLabel=self.speciallabel
303  #if 'HARVESTGEN' in s[3]:
304  if len( [step for step in s[3] if "HARVESTGEN" in step] )>0:
305  chainDict['TimePerEvent']=0.01
306  thisLabel=thisLabel+"_gen"
307  # for double miniAOD test
308  if len( [step for step in s[3] if "DBLMINIAODMCUP15NODQM" in step] )>0:
309  thisLabel=thisLabel+"_dblMiniAOD"
310  processStrPrefix=''
311  setPrimaryDs=None
312  nanoedmGT=''
313  for step in s[3]:
314 
315  if 'INPUT' in step or (not isinstance(s[2][index],str)):
316  nextHasDSInput=s[2][index]
317 
318  else:
319 
320  if (index==0):
321  #first step and not input -> gen part
322  chainDict['nowmTasklist'].append(copy.deepcopy(self.defaultScratch))
323  try:
324  chainDict['nowmTasklist'][-1]['nowmIO']=json.loads(open('%s/%s.io'%(dir,step)).read())
325  except:
326  print("Failed to find",'%s/%s.io'%(dir,step),".The workflows were probably not run on cfg not created")
327  return -15
328 
329  chainDict['nowmTasklist'][-1]['PrimaryDataset']='RelVal'+s[1].split('+')[0]
330  if not '--relval' in s[2][index]:
331  print('Impossible to create task from scratch without splitting information with --relval')
332  return -12
333  else:
334  arg=s[2][index].split()
335  ns=map(int,arg[arg.index('--relval')+1].split(','))
336  chainDict['nowmTasklist'][-1]['RequestNumEvents'] = ns[0]
337  chainDict['nowmTasklist'][-1]['EventsPerJob'] = ns[1]
338  if 'FASTSIM' in s[2][index] or '--fast' in s[2][index]:
339  thisLabel+='_FastSim'
340  if 'lhe' in s[2][index] in s[2][index]:
341  chainDict['nowmTasklist'][-1]['LheInputFiles'] =True
342 
343  elif nextHasDSInput:
344  chainDict['nowmTasklist'].append(copy.deepcopy(self.defaultInput))
345  try:
346  chainDict['nowmTasklist'][-1]['nowmIO']=json.loads(open('%s/%s.io'%(dir,step)).read())
347  except:
348  print("Failed to find",'%s/%s.io'%(dir,step),".The workflows were probably not run on cfg not created")
349  return -15
350  chainDict['nowmTasklist'][-1]['InputDataset']=nextHasDSInput.dataSet
351  if ('DQMHLTonRAWAOD' in step) :
352  chainDict['nowmTasklist'][-1]['IncludeParents']=True
353  splitForThisWf=nextHasDSInput.split
354  chainDict['nowmTasklist'][-1]['LumisPerJob']=splitForThisWf
355  if step in wmsplit:
356  chainDict['nowmTasklist'][-1]['LumisPerJob']=wmsplit[step]
357  # get the run numbers or #events
358  if len(nextHasDSInput.run):
359  chainDict['nowmTasklist'][-1]['RunWhitelist']=nextHasDSInput.run
360  if len(nextHasDSInput.ls):
361  chainDict['nowmTasklist'][-1]['LumiList']=nextHasDSInput.ls
362  #print "what is s",s[2][index]
363  if '--data' in s[2][index] and nextHasDSInput.label:
364  thisLabel+='_RelVal_%s'%nextHasDSInput.label
365  if 'filter' in chainDict['nowmTasklist'][-1]['nowmIO']:
366  print("This has an input DS and a filter sequence: very likely to be the PyQuen sample")
367  processStrPrefix='PU_'
368  setPrimaryDs = 'RelVal'+s[1].split('+')[0]
369  if setPrimaryDs:
370  chainDict['nowmTasklist'][-1]['PrimaryDataset']=setPrimaryDs
371  nextHasDSInput=None
372  else:
373  #not first step and no inputDS
374  chainDict['nowmTasklist'].append(copy.deepcopy(self.defaultTask))
375  try:
376  chainDict['nowmTasklist'][-1]['nowmIO']=json.loads(open('%s/%s.io'%(dir,step)).read())
377  except:
378  print("Failed to find",'%s/%s.io'%(dir,step),".The workflows were probably not run on cfg not created")
379  return -15
380  if splitForThisWf:
381  chainDict['nowmTasklist'][-1]['LumisPerJob']=splitForThisWf
382  if step in wmsplit:
383  chainDict['nowmTasklist'][-1]['LumisPerJob']=wmsplit[step]
384 
385  # change LumisPerJob for Hadronizer steps.
386  if 'Hadronizer' in step:
387  chainDict['nowmTasklist'][-1]['LumisPerJob']=wmsplit['Hadronizer']
388 
389  #print step
390  chainDict['nowmTasklist'][-1]['TaskName']=step
391  if setPrimaryDs:
392  chainDict['nowmTasklist'][-1]['PrimaryDataset']=setPrimaryDs
393  chainDict['nowmTasklist'][-1]['ConfigCacheID']='%s/%s.py'%(dir,step)
394  chainDict['nowmTasklist'][-1]['GlobalTag']=chainDict['nowmTasklist'][-1]['nowmIO']['GT'] # copy to the proper parameter name
395  chainDict['GlobalTag']=chainDict['nowmTasklist'][-1]['nowmIO']['GT'] #set in general to the last one of the chain
396  if 'NANOEDM' in step :
397  nanoedmGT = chainDict['nowmTasklist'][-1]['nowmIO']['GT']
398  if 'NANOMERGE' in step :
399  chainDict['GlobalTag'] = nanoedmGT
400  if 'pileup' in chainDict['nowmTasklist'][-1]['nowmIO']:
401  chainDict['nowmTasklist'][-1]['MCPileup']=chainDict['nowmTasklist'][-1]['nowmIO']['pileup']
402  if '--pileup ' in s[2][index]: # catch --pileup (scenarion) and not --pileup_ (dataset to be mixed) => works also making PRE-MIXed dataset
403  processStrPrefix='PU_' # take care of pu overlay done with GEN-SIM mixing
404  if ( s[2][index].split()[ s[2][index].split().index('--pileup')+1 ] ).find('25ns') > 0 :
405  processStrPrefix='PU25ns_'
406  elif ( s[2][index].split()[ s[2][index].split().index('--pileup')+1 ] ).find('50ns') > 0 :
407  processStrPrefix='PU50ns_'
408  if 'premix_stage2' in s[2][index] and '--pileup_input' in s[2][index]: # take care of pu overlay done with DIGI mixing of premixed events
409  if s[2][index].split()[ s[2][index].split().index('--pileup_input')+1 ].find('25ns') > 0 :
410  processStrPrefix='PUpmx25ns_'
411  elif s[2][index].split()[ s[2][index].split().index('--pileup_input')+1 ].find('50ns') > 0 :
412  processStrPrefix='PUpmx50ns_'
413 
414  if acqEra:
415  #chainDict['AcquisitionEra'][step]=(chainDict['CMSSWVersion']+'-PU_'+chainDict['nowmTasklist'][-1]['GlobalTag']).replace('::All','')+thisLabel
416  chainDict['AcquisitionEra'][step]=chainDict['CMSSWVersion']
417  chainDict['ProcessingString'][step]=processStrPrefix+chainDict['nowmTasklist'][-1]['GlobalTag'].replace('::All','').replace('-','_')+thisLabel
418  if 'NANOMERGE' in step :
419  chainDict['ProcessingString'][step]=processStrPrefix+nanoedmGT.replace('::All','').replace('-','_')+thisLabel
420  else:
421  #chainDict['nowmTasklist'][-1]['AcquisitionEra']=(chainDict['CMSSWVersion']+'-PU_'+chainDict['nowmTasklist'][-1]['GlobalTag']).replace('::All','')+thisLabel
422  chainDict['nowmTasklist'][-1]['AcquisitionEra']=chainDict['CMSSWVersion']
423  chainDict['nowmTasklist'][-1]['ProcessingString']=processStrPrefix+chainDict['nowmTasklist'][-1]['GlobalTag'].replace('::All','').replace('-','_')+thisLabel
424  if 'NANOMERGE' in step :
425  chainDict['nowmTasklist'][-1]['ProcessingString']=processStrPrefix+nanoedmGT.replace('::All','').replace('-','_')+thisLabel
426 
427  if (self.batchName):
428  chainDict['nowmTasklist'][-1]['Campaign'] = chainDict['nowmTasklist'][-1]['AcquisitionEra']+self.batchName
429 
430  # specify different ProcessingString for double miniAOD dataset
431  if ('DBLMINIAODMCUP15NODQM' in step):
432  chainDict['nowmTasklist'][-1]['ProcessingString']=chainDict['nowmTasklist'][-1]['ProcessingString']+'_miniAOD'
433 
434  if( chainDict['nowmTasklist'][-1]['Multicore'] ):
435  # the scaling factor of 1.2GB / thread is empirical and measured on a SECOND round of tests with PU samples
436  # the number of threads is NO LONGER assumed to be the same for all tasks
437  # https://hypernews.cern.ch/HyperNews/CMS/get/edmFramework/3509/1/1/1.html
438  # now change to 1.5GB / additional thread according to discussion:
439  # https://hypernews.cern.ch/HyperNews/CMS/get/relval/4817/1/1.html
440 # chainDict['nowmTasklist'][-1]['Memory'] = 3000 + int( chainDict['nowmTasklist'][-1]['Multicore'] -1 )*1500
441  chainDict['nowmTasklist'][-1]['Memory'] = self.memoryOffset + int( chainDict['nowmTasklist'][-1]['Multicore'] -1 ) * self.memPerCore
442 
443  index+=1
444  #end of loop through steps
445  chainDict['RequestString']='RV'+chainDict['CMSSWVersion']+s[1].split('+')[0]
446  if processStrPrefix or thisLabel:
447  chainDict['RequestString']+='_'+processStrPrefix+thisLabel
448 
def prepare(self, mReader, directories, mode='init')
def replace(string, replacements)
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
double split
Definition: MVATrainer.cc:139
def MatrixInjector.MatrixInjector.submit (   self)

Definition at line 586 of file MatrixInjector.py.

References edm.print(), MatrixInjector.MatrixInjector.testMode, and MatrixInjector.MatrixInjector.wmagent.

586  def submit(self):
587  try:
588  from modules.wma import makeRequest,approveRequest
589  from wmcontrol import random_sleep
590  print('\n\tFound wmcontrol\n')
591  except:
592  print('\n\tUnable to find wmcontrol modules. Please include it in your python path\n')
593  if not self.testMode:
594  print('\n\t QUIT\n')
595  sys.exit(-17)
596 
597  import pprint
598  for (n,d) in self.chainDicts.items():
599  if self.testMode:
600  print("Only viewing request",n)
601  print(pprint.pprint(d))
602  else:
603  #submit to wmagent each dict
604  print("For eyes before submitting",n)
605  print(pprint.pprint(d))
606  print("Submitting",n,"...........")
607  workFlow=makeRequest(self.wmagent,d,encodeDict=True)
608  print("...........",n,"submitted")
609  random_sleep()
610 
611 
612 
613 
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
def MatrixInjector.MatrixInjector.upload (   self)

Definition at line 566 of file MatrixInjector.py.

References edm.print(), str, and MatrixInjector.MatrixInjector.uploadConf().

566  def upload(self):
567  for (n,d) in self.chainDicts.items():
568  for it in d:
569  if it.startswith("Task") and it!='TaskChain':
570  #upload
571  couchID=self.uploadConf(d[it]['ConfigCacheID'],
572  str(n)+d[it]['TaskName'],
573  d['ConfigCacheUrl']
574  )
575  print(d[it]['ConfigCacheID']," uploaded to couchDB for",str(n),"with ID",couchID)
576  d[it]['ConfigCacheID']=couchID
577  if it =='DQMConfigCacheID':
578  couchID=self.uploadConf(d['DQMConfigCacheID'],
579  str(n)+'harvesting',
580  d['ConfigCacheUrl']
581  )
582  print(d['DQMConfigCacheID'],"uploaded to couchDB for",str(n),"with ID",couchID)
583  d['DQMConfigCacheID']=couchID
584 
585 
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[&#39;DQMConfigCacheID&#39;]=t_second[&#39;ConfigCacheID&#39;]
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
#define str(s)
def MatrixInjector.MatrixInjector.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']

batch name appended to Campaign name chainDict['Campaign'] = chainDict['AcquisitionEra'] clean things up now provide the number of tasks

Definition at line 539 of file MatrixInjector.py.

References MatrixInjector.MatrixInjector.couchCache, TmCcu.count, TmApvPair.count, TmModule.count, TmPsu.count, MatrixInjector.MatrixInjector.count, ValidationMisalignedTracker.count, SiStripDetSummary::Values.count, MatrixInjector.MatrixInjector.group, ElectronLikelihoodCategoryData.label, entry< T >.label, classes.PlotData.label, SiPixelFedFillerWordEventNumber.label, TtEvent::HypoClassKeyStringToEnum.label, HcalLutSet.label, L1GtBoardTypeStringToEnum.label, SiPixelQualityESProducer.label, L1GtPsbQuadStringToEnum.label, MatrixInjector.MatrixInjector.label, ValidationMisalignedTracker.label, L1GtConditionTypeStringToEnum.label, cond::payloadInspector::ModuleVersion.label, L1GtConditionCategoryStringToEnum.label, edm.print(), MatrixInjector.MatrixInjector.testMode, EcalTPGParamReaderFromDB.user, popcon::RpcObGasData.user, popcon::RPCObPVSSmapData.user, popcon::RpcDataT.user, popcon::RpcDataV.user, popcon::RpcDataGasMix.user, popcon::RpcDataUXC.user, popcon::RpcDataS.user, popcon::RpcDataFebmap.user, popcon::RpcDataI.user, and MatrixInjector.MatrixInjector.user.

Referenced by MatrixInjector.MatrixInjector.upload().

539  def uploadConf(self,filePath,label,where):
540  labelInCouch=self.label+'_'+label
541  cacheName=filePath.split('/')[-1]
542  if self.testMode:
543  self.count+=1
544  print('\tFake upload of',filePath,'to couch with label',labelInCouch)
545  return self.count
546  else:
547  try:
548  from modules.wma import upload_to_couch,DATABASE_NAME
549  except:
550  print('\n\tUnable to find wmcontrol modules. Please include it in your python path\n')
551  print('\n\t QUIT\n')
552  sys.exit(-16)
553 
554  if cacheName in self.couchCache:
555  print("Not re-uploading",filePath,"to",where,"for",label)
556  cacheId=self.couchCache[cacheName]
557  else:
558  print("Loading",filePath,"to",where,"for",label)
559  ## totally fork the upload to couch to prevent cross loading of process configurations
560  pool = multiprocessing.Pool(1)
561  cacheIds = pool.map( upload_to_couch_oneArg, [(filePath,labelInCouch,self.user,self.group,where)] )
562  cacheId = cacheIds[0]
563  self.couchCache[cacheName]=cacheId
564  return cacheId
565 
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[&#39;DQMConfigCacheID&#39;]=t_second[&#39;ConfigCacheID&#39;]
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66

Member Data Documentation

MatrixInjector.MatrixInjector.batchName

Definition at line 56 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.prepare().

MatrixInjector.MatrixInjector.batchTime

Definition at line 57 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.prepare().

MatrixInjector.MatrixInjector.chainDicts

Definition at line 162 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.prepare().

MatrixInjector.MatrixInjector.couch

Definition at line 75 of file MatrixInjector.py.

MatrixInjector.MatrixInjector.couchCache

Definition at line 77 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.uploadConf().

MatrixInjector.MatrixInjector.count

Definition at line 41 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.uploadConf().

MatrixInjector.MatrixInjector.DbsUrl

Definition at line 67 of file MatrixInjector.py.

MatrixInjector.MatrixInjector.defaultChain

Definition at line 94 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.prepare().

MatrixInjector.MatrixInjector.defaultHarvest

Definition at line 118 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.prepare().

MatrixInjector.MatrixInjector.defaultInput

Definition at line 138 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.prepare().

MatrixInjector.MatrixInjector.defaultScratch

Definition at line 125 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.prepare().

MatrixInjector.MatrixInjector.defaultTask

Definition at line 149 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.prepare().

MatrixInjector.MatrixInjector.dqmgui

Definition at line 43 of file MatrixInjector.py.

MatrixInjector.MatrixInjector.group

Definition at line 79 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.uploadConf().

MatrixInjector.MatrixInjector.keep

Definition at line 53 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.prepare().

MatrixInjector.MatrixInjector.memoryOffset

Definition at line 54 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.prepare().

MatrixInjector.MatrixInjector.memPerCore

Definition at line 55 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.prepare().

MatrixInjector.MatrixInjector.speciallabel

Definition at line 81 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.prepare().

MatrixInjector.MatrixInjector.testMode
MatrixInjector.MatrixInjector.version
MatrixInjector.MatrixInjector.wmagent

Definition at line 44 of file MatrixInjector.py.

Referenced by MatrixInjector.MatrixInjector.submit().