CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Public Attributes | Private Attributes
ConfigBuilder.ConfigBuilder Class Reference
Inheritance diagram for ConfigBuilder.ConfigBuilder:

Classes

class  MassSearchReplaceProcessNameVisitor
 

Public Member Functions

def __init__ (self, options, process=None, with_output=False, with_input=False)
 
def addCommon (self)
 
def addConditions (self)
 
def addCustomise (self, unsch=0)
 
def addCustomiseCmdLine (self)
 
def addExtraStream (self, name, stream, workflow='full')
 
def addMaxEvents (self)
 
def addOutput (self)
 
def addSource (self)
 
def addStandardSequences (self)
 
def build_production_info (self, evt_type, evtnumber)
 
def completeInputCommand (self)
 
def create_process (self)
 
def define_Configs (self)
 
def executeAndRemember (self, command)
 
def expandMapping (self, seqList, mapping, index=None)
 
def finalizeFastSimHLT (self)
 
def heapProfileOptions (self)
 
def load (self, includeFile)
 
def loadAndRemember (self, includeFile)
 
def loadDefaultOrSpecifiedCFF (self, stepSpec, defaultCFF, defaultSEQ='')
 
def prepare (self, doChecking=False)
 
def prepare_ALCA (self, stepSpec=None, workflow='full')
 
def prepare_ALCAHARVEST (self, stepSpec=None)
 
def prepare_ALCAOUTPUT (self, stepSpec=None)
 
def prepare_ALCAPRODUCER (self, stepSpec=None)
 
def prepare_CFWRITER (self, stepSpec=None)
 
def prepare_DATAMIX (self, stepSpec=None)
 
def prepare_DIGI (self, stepSpec=None)
 
def prepare_DIGI2RAW (self, stepSpec=None)
 
def prepare_DQM (self, stepSpec='DQMOffline')
 
def prepare_ENDJOB (self, stepSpec='endOfProcess')
 
def prepare_FILTER (self, stepSpec=None)
 
def prepare_GEN (self, stepSpec=None)
 
def prepare_HARVESTING (self, stepSpec=None)
 
def prepare_HLT (self, stepSpec=None)
 
def prepare_L1 (self, stepSpec=None)
 
def prepare_L1HwVal (self, stepSpec='L1HwVal')
 
def prepare_L1Reco (self, stepSpec="L1Reco")
 
def prepare_L1REPACK (self, stepSpec=None)
 
def prepare_L1TrackTrigger (self, stepSpec="L1TrackTrigger")
 
def prepare_LHE (self, stepSpec=None)
 
def prepare_NANO (self, stepSpec='')
 
def prepare_NANOGEN (self, stepSpec="nanoAOD")
 
def prepare_PAT (self, stepSpec="miniAOD")
 
def prepare_PATFILTER (self, stepSpec=None)
 
def prepare_PATGEN (self, stepSpec="miniGEN")
 
def prepare_POSTRECO (self, stepSpec=None)
 
def prepare_RAW2DIGI (self, stepSpec="RawToDigi")
 
def prepare_RAW2RECO (self, stepSpec=None)
 
def prepare_RECO (self, stepSpec="reconstruction")
 
def prepare_RECOBEFMIX (self, stepSpec="reconstruction")
 
def prepare_RECOSIM (self, stepSpec="recosim")
 
def prepare_REPACK (self, stepSpec=None)
 
def prepare_SIM (self, stepSpec=None)
 
def prepare_SKIM (self, stepSpec="all")
 
def prepare_USER (self, stepSpec=None)
 
def prepare_VALIDATION (self, stepSpec='validation')
 
def profileOptions (self)
 
def renameHLTprocessInSequence (self, sequence, proc=None, HLTprocess='HLT', verbosityLevel=1)
 
def renameInputTagsInSequence (self, sequence, oldT="rawDataCollector", newT="rawDataRepacker")
 
def scheduleSequence (self, seq, prefix, what='Path')
 
def scheduleSequenceAtEnd (self, seq, prefix)
 

Public Attributes

 addedObjects
 
 additionalCommands
 
 additionalOutputs
 
 ALCADefaultCFF
 
 ALCADefaultSeq
 
 ALCAHARVESTDefaultCFF
 
 ALCAHARVESTDefaultSeq
 
 AlCaPaths
 
 blacklist_paths
 
 CFWRITERDefaultCFF
 
 CFWRITERDefaultSeq
 
 conditionalPaths
 
 ConditionsDefaultCFF
 
 DATAMIXDefaultCFF
 
 DATAMIXDefaultSeq
 
 DIGI2RAWDefaultCFF
 
 DIGI2RAWDefaultSeq
 
 DIGIDefaultCFF
 
 DIGIDefaultSeq
 
 DQMDefaultSeq
 
 DQMOFFLINEDefaultCFF
 
 DQMSaverCFF
 
 ENDJOBDefaultCFF
 
 ENDJOBDefaultSeq
 
 EVTCONTDefaultCFF
 
 excludedPaths
 
 GENDefaultCFF
 
 GENDefaultSeq
 
 GeometryCFF
 
 geometryDBLabel
 
 HARVESTINGDefaultCFF
 
 HARVESTINGDefaultSeq
 
 HLTDefaultCFF
 
 HLTDefaultSeq
 
 imports
 
 inliner
 load the relevant part More...
 
 L1DefaultSeq
 
 L1EMDefaultCFF
 
 L1HwValDefaultCFF
 
 L1HwValDefaultSeq
 
 L1MENUDefaultCFF
 
 L1RecoDefaultCFF
 
 L1RecoDefaultSeq
 
 L1REPACKDefaultSeq
 
 L1TrackTriggerDefaultCFF
 
 L1TrackTriggerDefaultSeq
 
 labelsToAssociate
 
 LHEDefaultSeq
 
 magFieldCFF
 
 NANODefaultCFF
 
 NANODefaultSeq
 
 NANOGENDefaultCFF
 
 NANOGENDefaultSeq
 
 nextScheduleIsConditional
 put the filtering path in the schedule More...
 
 PATDefaultCFF
 
 PATDefaultSeq
 
 PATGENDefaultCFF
 
 PATGENDefaultSeq
 
 POSTRECODefaultCFF
 
 POSTRECODefaultSeq
 
 process
 adding standard sequences might change the inputEventContent option and therefore needs to be finalized after More...
 
 productionFilterSequence
 put it before all the other paths More...
 
 pythonCfgCode
 
 RAW2DIGIDefaultCFF
 
 RAW2DIGIDefaultSeq
 
 RAW2RECODefaultSeq
 
 RECOBEFMIXDefaultCFF
 
 RECOBEFMIXDefaultSeq
 
 RECODefaultCFF
 
 RECODefaultSeq
 
 RECOSIMDefaultCFF
 
 RECOSIMDefaultSeq
 
 REDIGIDefaultSeq
 
 REPACKDefaultCFF
 
 REPACKDefaultSeq
 
 runsAndWeights
 drop LHEXMLStringProduct on input to save memory if appropriate More...
 
 runsAndWeightsInt
 
 schedule
 
 scheduleIndexOfFirstHLTPath
 
 SIMDefaultCFF
 
 SIMDefaultSeq
 
 SimGeometryCFF
 
 SKIMDefaultCFF
 
 stepKeys
 
 stepMap
 
 USERDefaultCFF
 
 USERDefaultSeq
 
 VALIDATIONDefaultCFF
 
 VALIDATIONDefaultSeq
 
 with_input
 
 with_output
 

Private Attributes

 _options
 

Detailed Description

The main building routines 

Definition at line 199 of file ConfigBuilder.py.

Constructor & Destructor Documentation

◆ __init__()

def ConfigBuilder.ConfigBuilder.__init__ (   self,
  options,
  process = None,
  with_output = False,
  with_input = False 
)
options taken from old cmsDriver and optparse 

Definition at line 202 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_FILTER().

202  def __init__(self, options, process = None, with_output = False, with_input = False ):
203  """options taken from old cmsDriver and optparse """
204 
205  options.outfile_name = options.dirout+options.fileout
206 
207  self._options = options
208 
209  if self._options.isData and options.isMC:
210  raise Exception("ERROR: You may specify only --data or --mc, not both")
211  #if not self._options.conditions:
212  # raise Exception("ERROR: No conditions given!\nPlease specify conditions. E.g. via --conditions=IDEAL_30X::All")
213 
214  # check that MEtoEDMConverter (running in ENDJOB) and DQMIO don't run in the same job
215  if 'ENDJOB' in self._options.step:
216  if (hasattr(self._options,"outputDefinition") and \
217  self._options.outputDefinition != '' and \
218  any(anyOf(['t','tier','dataTier'],outdic) == 'DQMIO' for outdic in eval(self._options.outputDefinition))) or \
219  (hasattr(self._options,"datatier") and \
220  self._options.datatier and \
221  'DQMIO' in self._options.datatier):
222  print("removing ENDJOB from steps since not compatible with DQMIO dataTier")
223  self._options.step=self._options.step.replace(',ENDJOB','')
224 
225 
226 
227  # what steps are provided by this class?
228  stepList = [re.sub(r'^prepare_', '', methodName) for methodName in ConfigBuilder.__dict__ if methodName.startswith('prepare_')]
229  self.stepMap={}
230  self.stepKeys=[]
231  for step in self._options.step.split(","):
232  if step=='': continue
233  stepParts = step.split(":")
234  stepName = stepParts[0]
235  if stepName not in stepList and not stepName.startswith('re'):
236  raise ValueError("Step {} unknown. Available are {}".format( stepName , sorted(stepList)))
237  if len(stepParts)==1:
238  self.stepMap[stepName]=""
239  elif len(stepParts)==2:
240  self.stepMap[stepName]=stepParts[1].split('+')
241  elif len(stepParts)==3:
242  self.stepMap[stepName]=(stepParts[2].split('+'),stepParts[1])
243  else:
244  raise ValueError(f"Step definition {step} invalid")
245  self.stepKeys.append(stepName)
246 
247  #print(f"map of steps is: {self.stepMap}")
248 
249  self.with_output = with_output
250  self.process=process
251 
252  if hasattr(self._options,"no_output_flag") and self._options.no_output_flag:
253  self.with_output = False
254  self.with_input = with_input
255  self.imports = []
256  self.create_process()
257  self.define_Configs()
258  self.schedule = list()
259  self.scheduleIndexOfFirstHLTPath = None
260 
261  # we are doing three things here:
262  # creating a process to catch errors
263  # building the code to re-create the process
264 
265  self.additionalCommands = []
266  # TODO: maybe a list of to be dumped objects would help as well
267  self.blacklist_paths = []
268  self.addedObjects = []
269  self.additionalOutputs = {}
270 
271  self.productionFilterSequence = None
272  self.labelsToAssociate=[]
273  self.nextScheduleIsConditional=False
274  self.conditionalPaths=[]
275  self.excludedPaths=[]
276 
bool any(const std::vector< T > &v, const T &what)
Definition: ECalSD.cc:37
def __init__(self, dataset, job_number, job_id, job_name, isDA, isMC, applyBOWS, applyEXTRACOND, extraconditions, runboundary, lumilist, intlumi, maxevents, gt, allFromGT, alignmentDB, alignmentTAG, apeDB, apeTAG, bowDB, bowTAG, vertextype, tracktype, refittertype, ttrhtype, applyruncontrol, ptcut, CMSSW_dir, the_dir)
def anyOf(listOfKeys, dict, opt=None)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

Member Function Documentation

◆ addCommon()

def ConfigBuilder.ConfigBuilder.addCommon (   self)

Definition at line 388 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.addedObjects, mps_setup.append, ConfigBuilder.ConfigBuilder.heapProfileOptions(), relativeConstraints.keys, DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, ConfigBuilder.ConfigBuilder.profileOptions(), and ConfigBuilder.ConfigBuilder.stepMap.

Referenced by ConfigBuilder.ConfigBuilder.prepare().

388  def addCommon(self):
389  if 'HARVESTING' in self.stepMap.keys() or 'ALCAHARVEST' in self.stepMap.keys():
390  self.process.options.Rethrow = ['ProductNotFound']
391  self.process.options.fileMode = 'FULLMERGE'
392 
393  self.addedObjects.append(("","options"))
394 
395  if self._options.lazy_download:
396  self.process.AdaptorConfig = cms.Service("AdaptorConfig",
397  stats = cms.untracked.bool(True),
398  enable = cms.untracked.bool(True),
399  cacheHint = cms.untracked.string("lazy-download"),
400  readHint = cms.untracked.string("read-ahead-buffered")
401  )
402  self.addedObjects.append(("Setup lazy download","AdaptorConfig"))
403 
404  #self.process.cmsDriverCommand = cms.untracked.PSet( command=cms.untracked.string('cmsDriver.py '+self._options.arguments) )
405  #self.addedObjects.append(("what cmsDriver command was used","cmsDriverCommand"))
406 
407  if self._options.profile:
408  (start, interval, eventFormat, jobFormat)=self.profileOptions()
409  self.process.IgProfService = cms.Service("IgProfService",
410  reportFirstEvent = cms.untracked.int32(start),
411  reportEventInterval = cms.untracked.int32(interval),
412  reportToFileAtPostEvent = cms.untracked.string("| gzip -c > %s"%(eventFormat)),
413  reportToFileAtPostEndJob = cms.untracked.string("| gzip -c > %s"%(jobFormat)))
414  self.addedObjects.append(("Setup IGProf Service for profiling","IgProfService"))
415 
416  if self._options.heap_profile:
417  (start, interval, eventFormat, jobFormat)=self.heapProfileOptions()
418  self.process.JeProfService = cms.Service("JeProfService",
419  reportFirstEvent = cms.untracked.int32(start),
420  reportEventInterval = cms.untracked.int32(interval),
421  reportToFileAtPostEvent = cms.untracked.string("%s"%(eventFormat)),
422  reportToFileAtPostEndJob = cms.untracked.string("%s"%(jobFormat)))
423  self.addedObjects.append(("Setup JeProf Service for heap profiling","JeProfService"))
424 

◆ addConditions()

def ConfigBuilder.ConfigBuilder.addConditions (   self)
Add conditions to the process

Definition at line 893 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.addCustomise(), ConfigBuilder.ConfigBuilder.additionalCommands, mps_setup.append, ConfigBuilder.ConfigBuilder.ConditionsDefaultCFF, ConfigBuilder.ConfigBuilder.loadAndRemember(), print(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, and ConfigBuilder.ConfigBuilder.process.

Referenced by ConfigBuilder.ConfigBuilder.completeInputCommand(), and ConfigBuilder.ConfigBuilder.prepare().

893  def addConditions(self):
894  """Add conditions to the process"""
895  if not self._options.conditions: return
896 
897  if 'FrontierConditions_GlobalTag' in self._options.conditions:
898  print('using FrontierConditions_GlobalTag in --conditions is not necessary anymore and will be deprecated soon. please update your command line')
899  self._options.conditions = self._options.conditions.replace("FrontierConditions_GlobalTag,",'')
900 
901  self.loadAndRemember(self.ConditionsDefaultCFF)
902  from Configuration.AlCa.GlobalTag import GlobalTag
903  self.process.GlobalTag = GlobalTag(self.process.GlobalTag, self._options.conditions, self._options.custom_conditions)
904  self.additionalCommands.append('from Configuration.AlCa.GlobalTag import GlobalTag')
905  self.additionalCommands.append('process.GlobalTag = GlobalTag(process.GlobalTag, %s, %s)' % (repr(self._options.conditions), repr(self._options.custom_conditions)))
906 
907 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

◆ addCustomise()

def ConfigBuilder.ConfigBuilder.addCustomise (   self,
  unsch = 0 
)
Include the customise code 

Definition at line 908 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.addCustomiseCmdLine(), geometryDiff.file, join(), print(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, and python.rootplot.root2matplotlib.replace().

Referenced by ConfigBuilder.ConfigBuilder.addConditions(), and ConfigBuilder.ConfigBuilder.prepare().

908  def addCustomise(self,unsch=0):
909  """Include the customise code """
910 
911  custOpt=[]
912  if unsch==0:
913  for c in self._options.customisation_file:
914  custOpt.extend(c.split(","))
915  else:
916  for c in self._options.customisation_file_unsch:
917  custOpt.extend(c.split(","))
918 
919  custMap=DictTypes.SortedKeysDict()
920  for opt in custOpt:
921  if opt=='': continue
922  if opt.count('.')>1:
923  raise Exception("more than . in the specification:"+opt)
924  fileName=opt.split('.')[0]
925  if opt.count('.')==0: rest='customise'
926  else:
927  rest=opt.split('.')[1]
928  if rest=='py': rest='customise' #catch the case of --customise file.py
929 
930  if fileName in custMap:
931  custMap[fileName].extend(rest.split('+'))
932  else:
933  custMap[fileName]=rest.split('+')
934 
935  if len(custMap)==0:
936  final_snippet='\n'
937  else:
938  final_snippet='\n# customisation of the process.\n'
939 
940  allFcn=[]
941  for opt in custMap:
942  allFcn.extend(custMap[opt])
943  for fcn in allFcn:
944  if allFcn.count(fcn)!=1:
945  raise Exception("cannot specify twice "+fcn+" as a customisation method")
946 
947  for f in custMap:
948  # let python search for that package and do syntax checking at the same time
949  packageName = f.replace(".py","").replace("/",".")
950  __import__(packageName)
951  package = sys.modules[packageName]
952 
953  # now ask the package for its definition and pick .py instead of .pyc
954  customiseFile = re.sub(r'\.pyc$', '.py', package.__file__)
955 
956  final_snippet+='\n# Automatic addition of the customisation function from '+packageName+'\n'
957  if self._options.inline_custom:
958  for line in file(customiseFile,'r'):
959  if "import FWCore.ParameterSet.Config" in line:
960  continue
961  final_snippet += line
962  else:
963  final_snippet += 'from %s import %s \n'%(packageName,','.join(custMap[f]))
964  for fcn in custMap[f]:
965  print("customising the process with",fcn,"from",f)
966  if not hasattr(package,fcn):
967  #bound to fail at run time
968  raise Exception("config "+f+" has no function "+fcn)
969  #execute the command
970  self.process=getattr(package,fcn)(self.process)
971  #and print it in the configuration
972  final_snippet += "\n#call to customisation function "+fcn+" imported from "+packageName
973  final_snippet += "\nprocess = %s(process)\n"%(fcn,)
974 
975  if len(custMap)!=0:
976  final_snippet += '\n# End of customisation functions\n'
977 
978 
979  return final_snippet
980 
def replace(string, replacements)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
static std::string join(char **cmd)
Definition: RemoteFile.cc:19

◆ addCustomiseCmdLine()

def ConfigBuilder.ConfigBuilder.addCustomiseCmdLine (   self)

Definition at line 981 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.define_Configs(), and ConfigBuilder.ConfigBuilder.executeAndRemember().

Referenced by ConfigBuilder.ConfigBuilder.addCustomise(), and ConfigBuilder.ConfigBuilder.prepare().

981  def addCustomiseCmdLine(self):
982  final_snippet='\n# Customisation from command line\n'
983  if self._options.customise_commands:
984  import string
985  for com in self._options.customise_commands.split('\\n'):
986  com=com.lstrip()
987  self.executeAndRemember(com)
988  final_snippet +='\n'+com
989 
990  return final_snippet
991 

◆ addExtraStream()

def ConfigBuilder.ConfigBuilder.addExtraStream (   self,
  name,
  stream,
  workflow = 'full' 
)

Definition at line 1210 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_SKIM().

1210  def addExtraStream(self, name, stream, workflow='full'):
1211  # define output module and go from there
1212  output = cms.OutputModule("PoolOutputModule")
1213  if stream.selectEvents.parameters_().__len__()!=0:
1214  output.SelectEvents = stream.selectEvents
1215  else:
1216  output.SelectEvents = cms.untracked.PSet()
1217  output.SelectEvents.SelectEvents=cms.vstring()
1218  if isinstance(stream.paths,tuple):
1219  for path in stream.paths:
1220  output.SelectEvents.SelectEvents.append(path.label())
1221  else:
1222  output.SelectEvents.SelectEvents.append(stream.paths.label())
1223 
1224 
1225 
1226  if isinstance(stream.content,str):
1227  evtPset=getattr(self.process,stream.content)
1228  for p in evtPset.parameters_():
1229  setattr(output,p,getattr(evtPset,p))
1230  if not self._options.inlineEventContent:
1231  def doNotInlineEventContent(instance,label = "process."+stream.content+".outputCommands"):
1232  return label
1233  output.outputCommands.__dict__["dumpPython"] = doNotInlineEventContent
1234  else:
1235  output.outputCommands = stream.content
1236 
1237 
1238  output.fileName = cms.untracked.string(self._options.dirout+stream.name+'.root')
1239 
1240  output.dataset = cms.untracked.PSet( dataTier = stream.dataTier,
1241  filterName = cms.untracked.string(stream.name))
1242 
1243  if self._options.filtername:
1244  output.dataset.filterName= cms.untracked.string(self._options.filtername+"_"+stream.name)
1245 
1246  #add an automatic flushing to limit memory consumption
1247  output.eventAutoFlushCompressedSize=cms.untracked.int32(5*1024*1024)
1248 
1249  if workflow in ("producers,full"):
1250  if isinstance(stream.paths,tuple):
1251  for path in stream.paths:
1252  self.schedule.append(path)
1253  else:
1254  self.schedule.append(stream.paths)
1255 
1256 
1257  # in case of relvals we don't want to have additional outputs
1258  if (not self._options.relval) and workflow in ("full","output"):
1259  self.additionalOutputs[name] = output
1260  setattr(self.process,name,output)
1261 
1262  if workflow == 'output':
1263  # adjust the select events to the proper trigger results from previous process
1264  filterList = output.SelectEvents.SelectEvents
1265  for i, filter in enumerate(filterList):
1266  filterList[i] = filter+":"+self._options.triggerResultsProcess
1267 
1268  return output
1269 

◆ addMaxEvents()

def ConfigBuilder.ConfigBuilder.addMaxEvents (   self)
Here we decide how many evts will be processed

Definition at line 425 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.addedObjects, mps_setup.append, createfilelist.int, DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, and ConfigBuilder.ConfigBuilder.process.

Referenced by ConfigBuilder.ConfigBuilder.prepare().

425  def addMaxEvents(self):
426  """Here we decide how many evts will be processed"""
427  self.process.maxEvents.input = int(self._options.number)
428  if self._options.number_out:
429  self.process.maxEvents.output = int(self._options.number_out)
430  self.addedObjects.append(("","maxEvents"))
431 

◆ addOutput()

def ConfigBuilder.ConfigBuilder.addOutput (   self)
Add output module to the process 

Definition at line 584 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.addStandardSequences(), ConfigBuilder.ConfigBuilder.AlCaPaths, ConfigBuilder.anyOf(), mps_setup.append, ConfigBuilder.ConfigBuilder.executeAndRemember(), join(), miniAOD_tools.miniAOD_customizeOutput(), print(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, python.rootplot.root2matplotlib.replace(), ConfigBuilder.ConfigBuilder.schedule, submitPVValidationJobs.split(), and ComparisonHelper.zip().

Referenced by ConfigBuilder.ConfigBuilder.prepare().

584  def addOutput(self):
585  """ Add output module to the process """
586  result=""
587  if self._options.outputDefinition:
588  if self._options.datatier:
589  print("--datatier & --eventcontent options ignored")
590 
591  #new output convention with a list of dict
592  outList = eval(self._options.outputDefinition)
593  for (id,outDefDict) in enumerate(outList):
594  outDefDictStr=outDefDict.__str__()
595  if not isinstance(outDefDict,dict):
596  raise Exception("--output needs to be passed a list of dict"+self._options.outputDefinition+" is invalid")
597  #requires option: tier
598  theTier=anyOf(['t','tier','dataTier'],outDefDict)
599  #optional option: eventcontent, filtername, selectEvents, moduleLabel, filename
600 
601  theStreamType=anyOf(['e','ec','eventContent','streamType'],outDefDict,theTier)
602  theFilterName=anyOf(['f','ftN','filterName'],outDefDict,'')
603  theSelectEvent=anyOf(['s','sE','selectEvents'],outDefDict,'')
604  theModuleLabel=anyOf(['l','mL','moduleLabel'],outDefDict,'')
605  theExtraOutputCommands=anyOf(['o','oC','outputCommands'],outDefDict,'')
606  # module label has a particular role
607  if not theModuleLabel:
608  tryNames=[theStreamType.replace(theTier.replace('-',''),'')+theTier.replace('-','')+'output',
609  theStreamType.replace(theTier.replace('-',''),'')+theTier.replace('-','')+theFilterName+'output',
610  theStreamType.replace(theTier.replace('-',''),'')+theTier.replace('-','')+theFilterName+theSelectEvent.split(',')[0].replace(':','for').replace(' ','')+'output'
611  ]
612  for name in tryNames:
613  if not hasattr(self.process,name):
614  theModuleLabel=name
615  break
616  if not theModuleLabel:
617  raise Exception("cannot find a module label for specification: "+outDefDictStr)
618  if id==0:
619  defaultFileName=self._options.outfile_name
620  else:
621  defaultFileName=self._options.outfile_name.replace('.root','_in'+theTier+'.root')
622 
623  theFileName=self._options.dirout+anyOf(['fn','fileName'],outDefDict,defaultFileName)
624  if not theFileName.endswith('.root'):
625  theFileName+='.root'
626 
627  if len(outDefDict):
628  raise Exception("unused keys from --output options: "+','.join(outDefDict.keys()))
629  if theStreamType=='DQMIO': theStreamType='DQM'
630  if theStreamType=='ALL':
631  theEventContent = cms.PSet(outputCommands = cms.untracked.vstring('keep *'))
632  else:
633  theEventContent = getattr(self.process, theStreamType+"EventContent")
634 
635 
636  addAlCaSelects=False
637  if theStreamType=='ALCARECO' and not theFilterName:
638  theFilterName='StreamALCACombined'
639  addAlCaSelects=True
640 
641  CppType='PoolOutputModule'
642  if self._options.timeoutOutput:
643  CppType='TimeoutPoolOutputModule'
644  if theStreamType=='DQM' and theTier=='DQMIO': CppType='DQMRootOutputModule'
645  output = cms.OutputModule(CppType,
646  theEventContent.clone(),
647  fileName = cms.untracked.string(theFileName),
648  dataset = cms.untracked.PSet(
649  dataTier = cms.untracked.string(theTier),
650  filterName = cms.untracked.string(theFilterName))
651  )
652  if not theSelectEvent and hasattr(self.process,'generation_step') and theStreamType!='LHE':
653  output.SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('generation_step'))
654  if not theSelectEvent and hasattr(self.process,'filtering_step'):
655  output.SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('filtering_step'))
656  if theSelectEvent:
657  output.SelectEvents =cms.untracked.PSet(SelectEvents = cms.vstring(theSelectEvent))
658 
659  if addAlCaSelects:
660  if not hasattr(output,'SelectEvents'):
661  output.SelectEvents=cms.untracked.PSet(SelectEvents=cms.vstring())
662  for alca in self.AlCaPaths:
663  output.SelectEvents.SelectEvents.extend(getattr(self.process,'OutALCARECO'+alca).SelectEvents.SelectEvents)
664 
665 
666  if hasattr(self.process,theModuleLabel):
667  raise Exception("the current process already has a module "+theModuleLabel+" defined")
668  #print "creating output module ",theModuleLabel
669  setattr(self.process,theModuleLabel,output)
670  outputModule=getattr(self.process,theModuleLabel)
671  setattr(self.process,theModuleLabel+'_step',cms.EndPath(outputModule))
672  path=getattr(self.process,theModuleLabel+'_step')
673  self.schedule.append(path)
674 
675  if not self._options.inlineEventContent and hasattr(self.process,theStreamType+"EventContent"):
676  def doNotInlineEventContent(instance,label = "cms.untracked.vstring(process."+theStreamType+"EventContent.outputCommands)"): return label
677  outputModule.outputCommands.__dict__["dumpPython"] = doNotInlineEventContent
678  if theExtraOutputCommands:
679  if not isinstance(theExtraOutputCommands,list):
680  raise Exception("extra ouput command in --option must be a list of strings")
681  if hasattr(self.process,theStreamType+"EventContent"):
682  self.executeAndRemember('process.%s.outputCommands.extend(%s)'%(theModuleLabel,theExtraOutputCommands))
683  else:
684  outputModule.outputCommands.extend(theExtraOutputCommands)
685 
686  result+="\nprocess."+theModuleLabel+" = "+outputModule.dumpPython()
687 
688 
689  return result
690 
691  streamTypes=self._options.eventcontent.split(',')
692  tiers=self._options.datatier.split(',')
693  if not self._options.outputDefinition and len(streamTypes)!=len(tiers):
694  raise Exception("number of event content arguments does not match number of datatier arguments")
695 
696  # if the only step is alca we don't need to put in an output
697  if self._options.step.split(',')[0].split(':')[0] == 'ALCA':
698  return "\n"
699 
700  for i,(streamType,tier) in enumerate(zip(streamTypes,tiers)):
701  if streamType=='': continue
702  if streamType == 'ALCARECO' and not 'ALCAPRODUCER' in self._options.step: continue
703  if streamType=='DQMIO': streamType='DQM'
704  eventContent=streamType
705 
706  if streamType == "NANOEDMAOD" :
707  eventContent = "NANOAOD"
708  elif streamType == "NANOEDMAODSIM" :
709  eventContent = "NANOAODSIM"
710  theEventContent = getattr(self.process, eventContent+"EventContent")
711  if i==0:
712  theFileName=self._options.outfile_name
713  theFilterName=self._options.filtername
714  else:
715  theFileName=self._options.outfile_name.replace('.root','_in'+streamType+'.root')
716  theFilterName=self._options.filtername
717  CppType='PoolOutputModule'
718  if self._options.timeoutOutput:
719  CppType='TimeoutPoolOutputModule'
720  if streamType=='DQM' and tier=='DQMIO': CppType='DQMRootOutputModule'
721  if "NANOAOD" in streamType : CppType='NanoAODOutputModule'
722  output = cms.OutputModule(CppType,
723  theEventContent,
724  fileName = cms.untracked.string(theFileName),
725  dataset = cms.untracked.PSet(dataTier = cms.untracked.string(tier),
726  filterName = cms.untracked.string(theFilterName)
727  )
728  )
729  if hasattr(self.process,"generation_step") and streamType!='LHE':
730  output.SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('generation_step'))
731  if hasattr(self.process,"filtering_step"):
732  output.SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('filtering_step'))
733 
734  if streamType=='ALCARECO':
735  output.dataset.filterName = cms.untracked.string('StreamALCACombined')
736 
737  if "MINIAOD" in streamType:
738  from PhysicsTools.PatAlgos.slimming.miniAOD_tools import miniAOD_customizeOutput
740 
741  outputModuleName=streamType+'output'
742  setattr(self.process,outputModuleName,output)
743  outputModule=getattr(self.process,outputModuleName)
744  setattr(self.process,outputModuleName+'_step',cms.EndPath(outputModule))
745  path=getattr(self.process,outputModuleName+'_step')
746  self.schedule.append(path)
747 
748  if self._options.outputCommands and streamType!='DQM':
749  for evct in self._options.outputCommands.split(','):
750  if not evct: continue
751  self.executeAndRemember("process.%s.outputCommands.append('%s')"%(outputModuleName,evct.strip()))
752 
753  if not self._options.inlineEventContent:
754  tmpstreamType=streamType
755  if "NANOEDM" in tmpstreamType :
756  tmpstreamType=tmpstreamType.replace("NANOEDM","NANO")
757  def doNotInlineEventContent(instance,label = "process."+tmpstreamType+"EventContent.outputCommands"):
758  return label
759  outputModule.outputCommands.__dict__["dumpPython"] = doNotInlineEventContent
760 
761  result+="\nprocess."+outputModuleName+" = "+outputModule.dumpPython()
762 
763  return result
764 
765 
def replace(string, replacements)
OutputIterator zip(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp)
def anyOf(listOfKeys, dict, opt=None)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
static std::string join(char **cmd)
Definition: RemoteFile.cc:19
def addOutput(process)
Definition: FastTimer.py:47
def miniAOD_customizeOutput(out)

◆ addSource()

def ConfigBuilder.ConfigBuilder.addSource (   self)
Here the source is built. Priority: file, generator

Definition at line 432 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.addedObjects, mps_setup.append, ConfigBuilder.filesFromDASQuery(), ConfigBuilder.filesFromList(), createfilelist.int, relativeConstraints.keys, print(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, submitPVValidationJobs.split(), and ConfigBuilder.ConfigBuilder.stepMap.

Referenced by ConfigBuilder.ConfigBuilder.prepare().

432  def addSource(self):
433  """Here the source is built. Priority: file, generator"""
434  self.addedObjects.append(("Input source","source"))
435 
436  def filesFromOption(self):
437  for entry in self._options.filein.split(','):
438  print("entry",entry)
439  if entry.startswith("filelist:"):
440  filesFromList(entry[9:],self.process.source)
441  elif entry.startswith("dbs:") or entry.startswith("das:"):
442  filesFromDASQuery('file dataset = %s'%(entry[4:]),self._options.dasoption,self.process.source)
443  else:
444  self.process.source.fileNames.append(self._options.dirin+entry)
445  if self._options.secondfilein:
446  if not hasattr(self.process.source,"secondaryFileNames"):
447  raise Exception("--secondfilein not compatible with "+self._options.filetype+"input type")
448  for entry in self._options.secondfilein.split(','):
449  print("entry",entry)
450  if entry.startswith("filelist:"):
451  self.process.source.secondaryFileNames.extend((filesFromList(entry[9:]))[0])
452  elif entry.startswith("dbs:") or entry.startswith("das:"):
453  self.process.source.secondaryFileNames.extend((filesFromDASQuery('file dataset = %s'%(entry[4:]),self._options.dasoption))[0])
454  else:
455  self.process.source.secondaryFileNames.append(self._options.dirin+entry)
456 
457  if self._options.filein or self._options.dasquery:
458  if self._options.filetype == "EDM":
459  self.process.source=cms.Source("PoolSource",
460  fileNames = cms.untracked.vstring(),
461  secondaryFileNames= cms.untracked.vstring())
462  filesFromOption(self)
463  elif self._options.filetype == "DAT":
464  self.process.source=cms.Source("NewEventStreamFileReader",fileNames = cms.untracked.vstring())
465  filesFromOption(self)
466  elif self._options.filetype == "LHE":
467  self.process.source=cms.Source("LHESource", fileNames = cms.untracked.vstring())
468  if self._options.filein.startswith("lhe:"):
469  #list the article directory automatically
470  args=self._options.filein.split(':')
471  article=args[1]
472  print('LHE input from article ',article)
473  location='/store/lhe/'
474  import os
475  textOfFiles=os.popen('cmsLHEtoEOSManager.py -l '+article)
476  for line in textOfFiles:
477  for fileName in [x for x in line.split() if '.lhe' in x]:
478  self.process.source.fileNames.append(location+article+'/'+fileName)
479  #check first if list of LHE files is loaded (not empty)
480  if len(line)<2:
481  print('Issue to load LHE files, please check and try again.')
482  sys.exit(-1)
483  #Additional check to protect empty fileNames in process.source
484  if len(self.process.source.fileNames)==0:
485  print('Issue with empty filename, but can pass line check')
486  sys.exit(-1)
487  if len(args)>2:
488  self.process.source.skipEvents = cms.untracked.uint32(int(args[2]))
489  else:
490  filesFromOption(self)
491 
492  elif self._options.filetype == "DQM":
493  self.process.source=cms.Source("DQMRootSource",
494  fileNames = cms.untracked.vstring())
495  filesFromOption(self)
496 
497  elif self._options.filetype == "DQMDAQ":
498  # FIXME: how to configure it if there are no input files specified?
499  self.process.source=cms.Source("DQMStreamerReader")
500 
501 
502  if ('HARVESTING' in self.stepMap.keys() or 'ALCAHARVEST' in self.stepMap.keys()) and (not self._options.filetype == "DQM"):
503  self.process.source.processingMode = cms.untracked.string("RunsAndLumis")
504 
505  if self._options.dasquery!='':
506  self.process.source=cms.Source("PoolSource", fileNames = cms.untracked.vstring(),secondaryFileNames = cms.untracked.vstring())
507  filesFromDASQuery(self._options.dasquery,self._options.dasoption,self.process.source)
508 
509  if ('HARVESTING' in self.stepMap.keys() or 'ALCAHARVEST' in self.stepMap.keys()) and (not self._options.filetype == "DQM"):
510  self.process.source.processingMode = cms.untracked.string("RunsAndLumis")
511 
512 
513  if 'GEN' in self.stepMap.keys() and not self._options.filetype == "LHE":
514  if self._options.inputCommands:
515  self._options.inputCommands+=',drop LHEXMLStringProduct_*_*_*,'
516  else:
517  self._options.inputCommands='keep *, drop LHEXMLStringProduct_*_*_*,'
518 
519  if self.process.source and self._options.inputCommands and not self._options.filetype == "LHE":
520  if not hasattr(self.process.source,'inputCommands'): self.process.source.inputCommands=cms.untracked.vstring()
521  for command in self._options.inputCommands.split(','):
522  # remove whitespace around the keep/drop statements
523  command = command.strip()
524  if command=='': continue
525  self.process.source.inputCommands.append(command)
526  if not self._options.dropDescendant:
527  self.process.source.dropDescendantsOfDroppedBranches = cms.untracked.bool(False)
528 
529  if self._options.lumiToProcess:
530  import FWCore.PythonUtilities.LumiList as LumiList
531  self.process.source.lumisToProcess = cms.untracked.VLuminosityBlockRange( LumiList.LumiList(self._options.lumiToProcess).getCMSSWString().split(',') )
532 
533  if 'GEN' in self.stepMap.keys() or 'LHE' in self.stepMap or (not self._options.filein and hasattr(self._options, "evt_type")):
534  if self.process.source is None:
535  self.process.source=cms.Source("EmptySource")
536 
537  # modify source in case of run-dependent MC
538  self.runsAndWeights=None
539  if self._options.runsAndWeightsForMC or self._options.runsScenarioForMC :
540  if not self._options.isMC :
541  raise Exception("options --runsAndWeightsForMC and --runsScenarioForMC are only valid for MC")
542  if self._options.runsAndWeightsForMC:
543  self.runsAndWeights = eval(self._options.runsAndWeightsForMC)
544  else:
545  from Configuration.StandardSequences.RunsAndWeights import RunsAndWeights
546  if isinstance(RunsAndWeights[self._options.runsScenarioForMC], str):
547  __import__(RunsAndWeights[self._options.runsScenarioForMC])
548  self.runsAndWeights = sys.modules[RunsAndWeights[self._options.runsScenarioForMC]].runProbabilityDistribution
549  else:
550  self.runsAndWeights = RunsAndWeights[self._options.runsScenarioForMC]
551 
552  if self.runsAndWeights:
553  import SimGeneral.Configuration.ThrowAndSetRandomRun as ThrowAndSetRandomRun
554  ThrowAndSetRandomRun.throwAndSetRandomRun(self.process.source,self.runsAndWeights)
555  self.additionalCommands.append('import SimGeneral.Configuration.ThrowAndSetRandomRun as ThrowAndSetRandomRun')
556  self.additionalCommands.append('ThrowAndSetRandomRun.throwAndSetRandomRun(process.source,%s)'%(self.runsAndWeights))
557 
558  # modify source in case of run-dependent MC (Run-3 method)
559  self.runsAndWeightsInt=None
560  if self._options.runsAndWeightsForMCIntegerWeights or self._options.runsScenarioForMCIntegerWeights:
561  if not self._options.isMC :
562  raise Exception("options --runsAndWeightsForMCIntegerWeights and --runsScenarioForMCIntegerWeights are only valid for MC")
563  if self._options.runsAndWeightsForMCIntegerWeights:
564  self.runsAndWeightsInt = eval(self._options.runsAndWeightsForMCIntegerWeights)
565  else:
566  from Configuration.StandardSequences.RunsAndWeights import RunsAndWeights
567  if isinstance(RunsAndWeights[self._options.runsScenarioForMCIntegerWeights], str):
568  __import__(RunsAndWeights[self._options.runsScenarioForMCIntegerWeights])
569  self.runsAndWeightsInt = sys.modules[RunsAndWeights[self._options.runsScenarioForMCIntegerWeights]].runProbabilityDistribution
570  else:
571  self.runsAndWeightsInt = RunsAndWeights[self._options.runsScenarioForMCIntegerWeights]
572 
573  if self.runsAndWeightsInt:
574  if not self._options.relval:
575  raise Exception("--relval option required when using --runsAndWeightsInt")
576  if 'DATAMIX' in self._options.step:
577  from SimGeneral.Configuration.LumiToRun import lumi_to_run
578  total_events, events_per_job = self._options.relval.split(',')
579  lumi_to_run_mapping = lumi_to_run(self.runsAndWeightsInt, int(total_events), int(events_per_job))
580  self.additionalCommands.append("process.source.firstLuminosityBlockForEachRun = cms.untracked.VLuminosityBlockID(*[cms.LuminosityBlockID(x,y) for x,y in " + str(lumi_to_run_mapping) + "])")
581 
582  return
583 
def filesFromDASQuery(query, option="", s=None)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
def throwAndSetRandomRun(source, runsAndProbs)
def lumi_to_run(runs, events_in_sample, events_per_job)
Definition: LumiToRun.py:1
#define str(s)
def filesFromList(fileName, s=None)

◆ addStandardSequences()

def ConfigBuilder.ConfigBuilder.addStandardSequences (   self)
Add selected standard sequences to the process

Definition at line 766 of file ConfigBuilder.py.

References TriggerAnalyzer.__str__(), ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.completeInputCommand(), Mixing.defineMixing(), ConfigBuilder.ConfigBuilder.executeAndRemember(), ConfigBuilder.filesFromDASQuery(), ConfigBuilder.filesFromList(), ConfigBuilder.ConfigBuilder.GeometryCFF, ConfigBuilder.ConfigBuilder.geometryDBLabel, join(), relativeConstraints.keys, ConfigBuilder.ConfigBuilder.load(), ConfigBuilder.ConfigBuilder.loadAndRemember(), ConfigBuilder.ConfigBuilder.magFieldCFF, print(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, ConfigBuilder.ConfigBuilder.SimGeometryCFF, ConfigBuilder.ConfigBuilder.stepKeys, and ConfigBuilder.ConfigBuilder.stepMap.

Referenced by ConfigBuilder.ConfigBuilder.addOutput(), and ConfigBuilder.ConfigBuilder.prepare().

766  def addStandardSequences(self):
767  """
768  Add selected standard sequences to the process
769  """
770  # load the pile up file
771  if self._options.pileup:
772  pileupSpec=self._options.pileup.split(',')[0]
773 
774  # Does the requested pile-up scenario exist?
775  from Configuration.StandardSequences.Mixing import Mixing,defineMixing
776  if not pileupSpec in Mixing and '.' not in pileupSpec and 'file:' not in pileupSpec:
777  message = pileupSpec+' is not a know mixing scenario:\n available are: '+'\n'.join(Mixing.keys())
778  raise Exception(message)
779 
780  # Put mixing parameters in a dictionary
781  if '.' in pileupSpec:
782  mixingDict={'file':pileupSpec}
783  elif pileupSpec.startswith('file:'):
784  mixingDict={'file':pileupSpec[5:]}
785  else:
786  import copy
787  mixingDict=copy.copy(Mixing[pileupSpec])
788  if len(self._options.pileup.split(','))>1:
789  mixingDict.update(eval(self._options.pileup[self._options.pileup.find(',')+1:]))
790 
791  # Load the pu cfg file corresponding to the requested pu scenario
792  if 'file:' in pileupSpec:
793  #the file is local
794  self.process.load(mixingDict['file'])
795  print("inlining mixing module configuration")
796  self._options.inlineObjets+=',mix'
797  else:
798  self.loadAndRemember(mixingDict['file'])
799 
800  mixingDict.pop('file')
801  if not "DATAMIX" in self.stepMap.keys(): # when DATAMIX is present, pileup_input refers to pre-mixed GEN-RAW
802  if self._options.pileup_input:
803  if self._options.pileup_input.startswith('dbs:') or self._options.pileup_input.startswith('das:'):
804  mixingDict['F']=filesFromDASQuery('file dataset = %s'%(self._options.pileup_input[4:],),self._options.pileup_dasoption)[0]
805  elif self._options.pileup_input.startswith("filelist:"):
806  mixingDict['F']=(filesFromList(self._options.pileup_input[9:]))[0]
807  else:
808  mixingDict['F']=self._options.pileup_input.split(',')
809  specialization=defineMixing(mixingDict)
810  for command in specialization:
811  self.executeAndRemember(command)
812  if len(mixingDict)!=0:
813  raise Exception('unused mixing specification: '+mixingDict.keys().__str__())
814 
815 
816  # load the geometry file
817  try:
818  if len(self.stepMap):
819  self.loadAndRemember(self.GeometryCFF)
820  if ('SIM' in self.stepMap or 'reSIM' in self.stepMap) and not self._options.fast:
821  self.loadAndRemember(self.SimGeometryCFF)
822  if self.geometryDBLabel:
823  self.executeAndRemember('if hasattr(process, "XMLFromDBSource"): process.XMLFromDBSource.label="%s"'%(self.geometryDBLabel))
824  self.executeAndRemember('if hasattr(process, "DDDetectorESProducerFromDB"): process.DDDetectorESProducerFromDB.label="%s"'%(self.geometryDBLabel))
825 
826  except ImportError:
827  print("Geometry option",self._options.geometry,"unknown.")
828  raise
829 
830  if len(self.stepMap):
831  self.loadAndRemember(self.magFieldCFF)
832 
833  for stepName in self.stepKeys:
834  stepSpec = self.stepMap[stepName]
835  print("Step:", stepName,"Spec:",stepSpec)
836  if stepName.startswith('re'):
837 
838  if stepName[2:] not in self._options.donotDropOnInput:
839  self._options.inputEventContent='%s,%s'%(stepName.upper(),self._options.inputEventContent)
840  stepName=stepName[2:]
841  if stepSpec=="":
842  getattr(self,"prepare_"+stepName)(stepSpec = getattr(self,stepName+"DefaultSeq"))
843  elif isinstance(stepSpec, list):
844  getattr(self,"prepare_"+stepName)(stepSpec = '+'.join(stepSpec))
845  elif isinstance(stepSpec, tuple):
846  getattr(self,"prepare_"+stepName)(stepSpec = ','.join([stepSpec[1],'+'.join(stepSpec[0])]))
847  else:
848  raise ValueError("Invalid step definition")
849 
850  if self._options.restoreRNDSeeds!=False:
851  #it is either True, or a process name
852  if self._options.restoreRNDSeeds==True:
853  self.executeAndRemember('process.RandomNumberGeneratorService.restoreStateLabel=cms.untracked.string("randomEngineStateProducer")')
854  else:
855  self.executeAndRemember('process.RandomNumberGeneratorService.restoreStateTag=cms.untracked.InputTag("randomEngineStateProducer","","%s")'%(self._options.restoreRNDSeeds))
856  if self._options.inputEventContent or self._options.inputCommands:
857  if self._options.inputCommands:
858  self._options.inputCommands+='keep *_randomEngineStateProducer_*_*,'
859  else:
860  self._options.inputCommands='keep *_randomEngineStateProducer_*_*,'
861 
862 
def filesFromDASQuery(query, option="", s=None)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
static std::string join(char **cmd)
Definition: RemoteFile.cc:19
def load(fileName)
Definition: svgfig.py:547
def defineMixing(dict)
Definition: Mixing.py:204
def filesFromList(fileName, s=None)

◆ build_production_info()

def ConfigBuilder.ConfigBuilder.build_production_info (   self,
  evt_type,
  evtnumber 
)
Add useful info for the production. 

Definition at line 2171 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.addedObjects, mps_setup.append, ConfigBuilder.ConfigBuilder.create_process(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, and str.

Referenced by ConfigBuilder.ConfigBuilder.finalizeFastSimHLT(), and ConfigBuilder.ConfigBuilder.prepare().

2171  def build_production_info(self, evt_type, evtnumber):
2172  """ Add useful info for the production. """
2173  self.process.configurationMetadata=cms.untracked.PSet\
2174  (version=cms.untracked.string("$Revision: 1.19 $"),
2175  name=cms.untracked.string("Applications"),
2176  annotation=cms.untracked.string(evt_type+ " nevts:"+str(evtnumber))
2177  )
2178 
2179  self.addedObjects.append(("Production Info","configurationMetadata"))
2180 
2181 
#define str(s)

◆ completeInputCommand()

def ConfigBuilder.ConfigBuilder.completeInputCommand (   self)

Definition at line 863 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.addConditions(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, and ConfigBuilder.ConfigBuilder.process.

Referenced by ConfigBuilder.ConfigBuilder.addStandardSequences(), and ConfigBuilder.ConfigBuilder.prepare().

863  def completeInputCommand(self):
864  if self._options.inputEventContent:
865  import copy
866  def dropSecondDropStar(iec):
867  #drop occurence of 'drop *' in the list
868  count=0
869  for item in iec:
870  if item=='drop *':
871  if count!=0:
872  iec.remove(item)
873  count+=1
874 
875 
876  if not hasattr(self.process.source,'inputCommands'): self.process.source.inputCommands=cms.untracked.vstring()
877  for evct in self._options.inputEventContent.split(','):
878  if evct=='': continue
879  theEventContent = getattr(self.process, evct+"EventContent")
880  if hasattr(theEventContent,'outputCommands'):
881  self.process.source.inputCommands.extend(copy.copy(theEventContent.outputCommands))
882  if hasattr(theEventContent,'inputCommands'):
883  self.process.source.inputCommands.extend(copy.copy(theEventContent.inputCommands))
884 
885  dropSecondDropStar(self.process.source.inputCommands)
886 
887  if not self._options.dropDescendant:
888  self.process.source.dropDescendantsOfDroppedBranches = cms.untracked.bool(False)
889 
890 
891  return
892 

◆ create_process()

def ConfigBuilder.ConfigBuilder.create_process (   self)

Definition at line 2182 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.pythonCfgCode.

Referenced by ConfigBuilder.ConfigBuilder.build_production_info().

2182  def create_process(self):
2183  self.pythonCfgCode = "# Auto generated configuration file\n"
2184  self.pythonCfgCode += "# using: \n# "+__version__[1:-1]+"\n# "+__source__[1:-1]+'\n'
2185  self.pythonCfgCode += "# with command line options: "+self._options.arguments+'\n'
2186  self.pythonCfgCode += "import FWCore.ParameterSet.Config as cms\n\n"
2187 
2188  # now set up the modifies
2189  modifiers=[]
2190  modifierStrings=[]
2191  modifierImports=[]
2192 
2193  if hasattr(self._options,"era") and self._options.era :
2194  # Multiple eras can be specified in a comma seperated list
2195  from Configuration.StandardSequences.Eras import eras
2196  for requestedEra in self._options.era.split(",") :
2197  modifierStrings.append(requestedEra)
2198  modifierImports.append(eras.pythonCfgLines[requestedEra])
2199  modifiers.append(getattr(eras,requestedEra))
2200 
2201 
2202  if hasattr(self._options,"procModifiers") and self._options.procModifiers:
2203  import importlib
2204  thingsImported=[]
2205  for c in self._options.procModifiers:
2206  thingsImported.extend(c.split(","))
2207  for pm in thingsImported:
2208  modifierStrings.append(pm)
2209  modifierImports.append('from Configuration.ProcessModifiers.'+pm+'_cff import '+pm)
2210  modifiers.append(getattr(importlib.import_module('Configuration.ProcessModifiers.'+pm+'_cff'),pm))
2211 
2212  self.pythonCfgCode += '\n'.join(modifierImports)+'\n\n'
2213  self.pythonCfgCode += "process = cms.Process('"+self._options.name+"'" # Start of the line, finished after the loop
2214 
2215 
2216  if len(modifierStrings)>0:
2217  self.pythonCfgCode+= ','+','.join(modifierStrings)
2218  self.pythonCfgCode+=')\n\n'
2219 
2220  #yes, the cfg code gets out of sync here if a process is passed in. That could be fixed in the future
2221  #assuming there is some way for the fwk to get the list of modifiers (and their stringified name)
2222  if self.process == None:
2223  if len(modifiers)>0:
2224  self.process = cms.Process(self._options.name,*modifiers)
2225  else:
2226  self.process = cms.Process(self._options.name)
2227 
2228 
2229 
2230 
static std::string join(char **cmd)
Definition: RemoteFile.cc:19

◆ define_Configs()

def ConfigBuilder.ConfigBuilder.define_Configs (   self)

Definition at line 996 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.ALCADefaultCFF, ConfigBuilder.ConfigBuilder.loadAndRemember(), print(), and ConfigBuilder.ConfigBuilder.stepMap.

Referenced by ConfigBuilder.ConfigBuilder.addCustomiseCmdLine().

996  def define_Configs(self):
997  if len(self.stepMap):
998  self.loadAndRemember('Configuration/StandardSequences/Services_cff')
999  if self._options.particleTable not in defaultOptions.particleTableList:
1000  print('Invalid particle table provided. Options are:')
1001  print(defaultOptions.particleTable)
1002  sys.exit(-1)
1003  else:
1004  if len(self.stepMap):
1005  self.loadAndRemember('SimGeneral.HepPDTESSource.'+self._options.particleTable+'_cfi')
1006 
1007  self.loadAndRemember('FWCore/MessageService/MessageLogger_cfi')
1008 
1009  self.ALCADefaultCFF="Configuration/StandardSequences/AlCaRecoStreams_cff"
1010  self.GENDefaultCFF="Configuration/StandardSequences/Generator_cff"
1011  self.SIMDefaultCFF="Configuration/StandardSequences/Sim_cff"
1012  self.DIGIDefaultCFF="Configuration/StandardSequences/Digi_cff"
1013  self.DIGI2RAWDefaultCFF="Configuration/StandardSequences/DigiToRaw_cff"
1014  self.L1EMDefaultCFF='Configuration/StandardSequences/SimL1Emulator_cff'
1015  self.L1MENUDefaultCFF="Configuration/StandardSequences/L1TriggerDefaultMenu_cff"
1016  self.HLTDefaultCFF="Configuration/StandardSequences/HLTtable_cff"
1017  self.RAW2DIGIDefaultCFF="Configuration/StandardSequences/RawToDigi_Data_cff"
1018  if self._options.isRepacked: self.RAW2DIGIDefaultCFF="Configuration/StandardSequences/RawToDigi_DataMapper_cff"
1019  self.L1RecoDefaultCFF="Configuration/StandardSequences/L1Reco_cff"
1020  self.L1TrackTriggerDefaultCFF="Configuration/StandardSequences/L1TrackTrigger_cff"
1021  self.RECODefaultCFF="Configuration/StandardSequences/Reconstruction_Data_cff"
1022  self.RECOSIMDefaultCFF="Configuration/StandardSequences/RecoSim_cff"
1023  self.PATDefaultCFF="Configuration/StandardSequences/PAT_cff"
1024  self.NANODefaultCFF="PhysicsTools/NanoAOD/nano_cff"
1025  self.NANOGENDefaultCFF="PhysicsTools/NanoAOD/nanogen_cff"
1026  self.SKIMDefaultCFF="Configuration/StandardSequences/Skims_cff"
1027  self.POSTRECODefaultCFF="Configuration/StandardSequences/PostRecoGenerator_cff"
1028  self.VALIDATIONDefaultCFF="Configuration/StandardSequences/Validation_cff"
1029  self.L1HwValDefaultCFF = "Configuration/StandardSequences/L1HwVal_cff"
1030  self.DQMOFFLINEDefaultCFF="DQMOffline/Configuration/DQMOffline_cff"
1031  self.HARVESTINGDefaultCFF="Configuration/StandardSequences/Harvesting_cff"
1032  self.ALCAHARVESTDefaultCFF="Configuration/StandardSequences/AlCaHarvesting_cff"
1033  self.ENDJOBDefaultCFF="Configuration/StandardSequences/EndOfProcess_cff"
1034  self.ConditionsDefaultCFF = "Configuration/StandardSequences/FrontierConditions_GlobalTag_cff"
1035  self.CFWRITERDefaultCFF = "Configuration/StandardSequences/CrossingFrameWriter_cff"
1036  self.REPACKDefaultCFF="Configuration/StandardSequences/DigiToRaw_Repack_cff"
1037 
1038  if "DATAMIX" in self.stepMap.keys():
1039  self.DATAMIXDefaultCFF="Configuration/StandardSequences/DataMixer"+self._options.datamix+"_cff"
1040  self.DIGIDefaultCFF="Configuration/StandardSequences/DigiDM_cff"
1041  self.DIGI2RAWDefaultCFF="Configuration/StandardSequences/DigiToRawDM_cff"
1042  self.L1EMDefaultCFF='Configuration/StandardSequences/SimL1EmulatorDM_cff'
1043 
1044  self.ALCADefaultSeq=None
1045  self.LHEDefaultSeq='externalLHEProducer'
1046  self.GENDefaultSeq='pgen'
1047  self.SIMDefaultSeq='psim'
1048  self.DIGIDefaultSeq='pdigi'
1049  self.DATAMIXDefaultSeq=None
1050  self.DIGI2RAWDefaultSeq='DigiToRaw'
1051  self.HLTDefaultSeq='GRun'
1052  self.L1DefaultSeq=None
1053  self.L1REPACKDefaultSeq='GT'
1054  self.HARVESTINGDefaultSeq=None
1055  self.ALCAHARVESTDefaultSeq=None
1056  self.CFWRITERDefaultSeq=None
1057  self.RAW2DIGIDefaultSeq='RawToDigi'
1058  self.L1RecoDefaultSeq='L1Reco'
1059  self.L1TrackTriggerDefaultSeq='L1TrackTrigger'
1060  if self._options.fast or ('RAW2DIGI' in self.stepMap and 'RECO' in self.stepMap):
1061  self.RECODefaultSeq='reconstruction'
1062  else:
1063  self.RECODefaultSeq='reconstruction_fromRECO'
1064  self.RECOSIMDefaultSeq='recosim'
1065  self.POSTRECODefaultSeq=None
1066  self.L1HwValDefaultSeq='L1HwVal'
1067  self.DQMDefaultSeq='DQMOffline'
1068  self.VALIDATIONDefaultSeq=''
1069  self.ENDJOBDefaultSeq='endOfProcess'
1070  self.REPACKDefaultSeq='DigiToRawRepack'
1071  self.PATDefaultSeq='miniAOD'
1072  self.PATGENDefaultSeq='miniGEN'
1073  #TODO: Check based of file input
1074  self.NANOGENDefaultSeq='nanogenSequence'
1075  self.NANODefaultSeq='nanoSequence'
1076 
1077  self.EVTCONTDefaultCFF="Configuration/EventContent/EventContent_cff"
1078 
1079  if not self._options.beamspot:
1080  self._options.beamspot=VtxSmearedDefaultKey
1081 
1082  # if its MC then change the raw2digi
1083  if self._options.isMC==True:
1084  self.RAW2DIGIDefaultCFF="Configuration/StandardSequences/RawToDigi_cff"
1085  self.RECODefaultCFF="Configuration/StandardSequences/Reconstruction_cff"
1086  self.PATDefaultCFF="Configuration/StandardSequences/PATMC_cff"
1087  self.PATGENDefaultCFF="Configuration/StandardSequences/PATGEN_cff"
1088  self.DQMOFFLINEDefaultCFF="DQMOffline/Configuration/DQMOfflineMC_cff"
1089  self.ALCADefaultCFF="Configuration/StandardSequences/AlCaRecoStreamsMC_cff"
1090  self.NANODefaultSeq='nanoSequenceMC'
1091  else:
1092  self._options.beamspot = None
1093 
1094  #patch for gen, due to backward incompatibility
1095  if 'reGEN' in self.stepMap:
1096  self.GENDefaultSeq='fixGenInfo'
1097 
1098  if self._options.scenario=='cosmics':
1099  self._options.pileup='Cosmics'
1100  self.DIGIDefaultCFF="Configuration/StandardSequences/DigiCosmics_cff"
1101  self.RECODefaultCFF="Configuration/StandardSequences/ReconstructionCosmics_cff"
1102  self.SKIMDefaultCFF="Configuration/StandardSequences/SkimsCosmics_cff"
1103  self.EVTCONTDefaultCFF="Configuration/EventContent/EventContentCosmics_cff"
1104  self.VALIDATIONDefaultCFF="Configuration/StandardSequences/ValidationCosmics_cff"
1105  self.DQMOFFLINEDefaultCFF="DQMOffline/Configuration/DQMOfflineCosmics_cff"
1106  if self._options.isMC==True:
1107  self.DQMOFFLINEDefaultCFF="DQMOffline/Configuration/DQMOfflineCosmicsMC_cff"
1108  self.HARVESTINGDefaultCFF="Configuration/StandardSequences/HarvestingCosmics_cff"
1109  self.RECODefaultSeq='reconstructionCosmics'
1110  self.DQMDefaultSeq='DQMOfflineCosmics'
1111 
1112  if self._options.scenario=='HeavyIons':
1113  if not self._options.beamspot:
1114  self._options.beamspot=VtxSmearedHIDefaultKey
1115  self.HLTDefaultSeq = 'HIon'
1116  self.VALIDATIONDefaultCFF="Configuration/StandardSequences/ValidationHeavyIons_cff"
1117  self.VALIDATIONDefaultSeq=''
1118  self.EVTCONTDefaultCFF="Configuration/EventContent/EventContentHeavyIons_cff"
1119  self.RECODefaultCFF="Configuration/StandardSequences/ReconstructionHeavyIons_cff"
1120  self.RECODefaultSeq='reconstructionHeavyIons'
1121  self.ALCADefaultCFF = "Configuration/StandardSequences/AlCaRecoStreamsHeavyIons_cff"
1122  self.DQMOFFLINEDefaultCFF="DQMOffline/Configuration/DQMOfflineHeavyIons_cff"
1123  self.DQMDefaultSeq='DQMOfflineHeavyIons'
1124  self.SKIMDefaultCFF="Configuration/StandardSequences/SkimsHeavyIons_cff"
1125  self.HARVESTINGDefaultCFF="Configuration/StandardSequences/HarvestingHeavyIons_cff"
1126  if self._options.isMC==True:
1127  self.DQMOFFLINEDefaultCFF="DQMOffline/Configuration/DQMOfflineHeavyIonsMC_cff"
1128 
1129 
1130  self.RAW2RECODefaultSeq=','.join([self.RAW2DIGIDefaultSeq,self.RECODefaultSeq])
1131 
1132  self.USERDefaultSeq='user'
1133  self.USERDefaultCFF=None
1134 
1135  # the magnetic field
1136  self.magFieldCFF = 'Configuration/StandardSequences/MagneticField_'+self._options.magField.replace('.','')+'_cff'
1137  self.magFieldCFF = self.magFieldCFF.replace("__",'_')
1138 
1139  # the geometry
1140  self.GeometryCFF='Configuration/StandardSequences/GeometryRecoDB_cff'
1141  self.geometryDBLabel=None
1142  simGeometry=''
1143  if self._options.fast:
1144  if 'start' in self._options.conditions.lower():
1145  self.GeometryCFF='FastSimulation/Configuration/Geometries_START_cff'
1146  else:
1147  self.GeometryCFF='FastSimulation/Configuration/Geometries_MC_cff'
1148  else:
1149  def inGeometryKeys(opt):
1150  from Configuration.StandardSequences.GeometryConf import GeometryConf
1151  if opt in GeometryConf:
1152  return GeometryConf[opt]
1153  else:
1154  return opt
1155 
1156  geoms=self._options.geometry.split(',')
1157  if len(geoms)==1: geoms=inGeometryKeys(geoms[0]).split(',')
1158  if len(geoms)==2:
1159  #may specify the reco geometry
1160  if '/' in geoms[1] or '_cff' in geoms[1]:
1161  self.GeometryCFF=geoms[1]
1162  else:
1163  self.GeometryCFF='Configuration/Geometry/Geometry'+geoms[1]+'_cff'
1164 
1165  if (geoms[0].startswith('DB:')):
1166  self.SimGeometryCFF='Configuration/StandardSequences/GeometrySimDB_cff'
1167  self.geometryDBLabel=geoms[0][3:]
1168  print("with DB:")
1169  else:
1170  if '/' in geoms[0] or '_cff' in geoms[0]:
1171  self.SimGeometryCFF=geoms[0]
1172  else:
1173  simGeometry=geoms[0]
1174  if self._options.gflash==True:
1175  self.SimGeometryCFF='Configuration/Geometry/Geometry'+geoms[0]+'GFlash_cff'
1176  else:
1177  self.SimGeometryCFF='Configuration/Geometry/Geometry'+geoms[0]+'_cff'
1178 
1179  # synchronize the geometry configuration and the FullSimulation sequence to be used
1180  if simGeometry not in defaultOptions.geometryExtendedOptions:
1181  self.SIMDefaultCFF="Configuration/StandardSequences/SimIdeal_cff"
1182 
1183  if self._options.scenario=='nocoll' or self._options.scenario=='cosmics':
1184  self.SIMDefaultCFF="Configuration/StandardSequences/SimNOBEAM_cff"
1185  self._options.beamspot='NoSmear'
1186 
1187  # fastsim requires some changes to the default cff files and sequences
1188  if self._options.fast:
1189  self.SIMDefaultCFF = 'FastSimulation.Configuration.SimIdeal_cff'
1190  self.RECODefaultCFF= 'FastSimulation.Configuration.Reconstruction_AftMix_cff'
1191  self.RECOBEFMIXDefaultCFF = 'FastSimulation.Configuration.Reconstruction_BefMix_cff'
1192  self.RECOBEFMIXDefaultSeq = 'reconstruction_befmix'
1193  self.NANODefaultSeq = 'nanoSequenceFS'
1194  self.DQMOFFLINEDefaultCFF="DQMOffline.Configuration.DQMOfflineFS_cff"
1195 
1196  # Mixing
1197  if self._options.pileup=='default':
1198  from Configuration.StandardSequences.Mixing import MixingDefaultKey
1199  self._options.pileup=MixingDefaultKey
1200 
1201 
1202  #not driven by a default cff anymore
1203  if self._options.isData:
1204  self._options.pileup=None
1205 
1206 
1207  self.REDIGIDefaultSeq=self.DIGIDefaultSeq
1208 
def replace(string, replacements)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
static std::string join(char **cmd)
Definition: RemoteFile.cc:19

◆ executeAndRemember()

def ConfigBuilder.ConfigBuilder.executeAndRemember (   self,
  command 
)
helper routine to remember replace statements

Definition at line 379 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.additionalCommands, and mps_setup.append.

Referenced by ConfigBuilder.ConfigBuilder.addCustomiseCmdLine(), ConfigBuilder.ConfigBuilder.addOutput(), ConfigBuilder.ConfigBuilder.addStandardSequences(), ConfigBuilder.ConfigBuilder.prepare_ALCAHARVEST(), ConfigBuilder.ConfigBuilder.prepare_DATAMIX(), ConfigBuilder.ConfigBuilder.prepare_DIGI(), ConfigBuilder.ConfigBuilder.prepare_GEN(), ConfigBuilder.ConfigBuilder.prepare_HLT(), ConfigBuilder.ConfigBuilder.prepare_SIM(), and ConfigBuilder.ConfigBuilder.prepare_VALIDATION().

379  def executeAndRemember(self, command):
380  """helper routine to remember replace statements"""
381  self.additionalCommands.append(command)
382  if not command.strip().startswith("#"):
383  # substitute: process.foo = process.bar -> self.process.foo = self.process.bar
384  import re
385  exec(re.sub(r"([^a-zA-Z_0-9]|^)(process)([^a-zA-Z_0-9])",r"\1self.process\3",command))
386  #exec(command.replace("process.","self.process."))
387 

◆ expandMapping()

def ConfigBuilder.ConfigBuilder.expandMapping (   self,
  seqList,
  mapping,
  index = None 
)

Definition at line 2023 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.prepare_DQM().

Referenced by ConfigBuilder.ConfigBuilder.prepare_ALCA(), ConfigBuilder.ConfigBuilder.prepare_ALCAHARVEST(), ConfigBuilder.ConfigBuilder.prepare_DQM(), ConfigBuilder.ConfigBuilder.prepare_SKIM(), ConfigBuilder.ConfigBuilder.prepare_VALIDATION(), and ConfigBuilder.ConfigBuilder.renameHLTprocessInSequence().

2023  def expandMapping(self,seqList,mapping,index=None):
2024  maxLevel=30
2025  level=0
2026  while '@' in repr(seqList) and level<maxLevel:
2027  level+=1
2028  for specifiedCommand in seqList:
2029  if specifiedCommand.startswith('@'):
2030  location=specifiedCommand[1:]
2031  if not location in mapping:
2032  raise Exception("Impossible to map "+location+" from "+repr(mapping))
2033  mappedTo=mapping[location]
2034  if index!=None:
2035  mappedTo=mappedTo[index]
2036  seqList.remove(specifiedCommand)
2037  seqList.extend(mappedTo.split('+'))
2038  break;
2039  if level==maxLevel:
2040  raise Exception("Could not fully expand "+repr(seqList)+" from "+repr(mapping))
2041 

◆ finalizeFastSimHLT()

def ConfigBuilder.ConfigBuilder.finalizeFastSimHLT (   self)

Definition at line 2166 of file ConfigBuilder.py.

References mps_setup.append, ConfigBuilder.ConfigBuilder.build_production_info(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, and ConfigBuilder.ConfigBuilder.schedule.

Referenced by ConfigBuilder.ConfigBuilder.prepare_ENDJOB().

2166  def finalizeFastSimHLT(self):
2167  self.process.reconstruction = cms.Path(self.process.reconstructionWithFamos)
2168  self.schedule.append(self.process.reconstruction)
2169 
2170 

◆ heapProfileOptions()

def ConfigBuilder.ConfigBuilder.heapProfileOptions (   self)
addJeProfService
Function to add the jemalloc heap  profile service so that you can dump in the middle
of the run.

Definition at line 321 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, alcaDQMUpload.encode(), createfilelist.int, and str.

Referenced by ConfigBuilder.ConfigBuilder.addCommon().

321  def heapProfileOptions(self):
322  """
323  addJeProfService
324  Function to add the jemalloc heap profile service so that you can dump in the middle
325  of the run.
326  """
327  profileOpts = self._options.profile.split(':')
328  profilerStart = 1
329  profilerInterval = 100
330  profilerFormat = None
331  profilerJobFormat = None
332 
333  if len(profileOpts):
334  #type, given as first argument is unused here
335  profileOpts.pop(0)
336  if len(profileOpts):
337  startEvent = profileOpts.pop(0)
338  if not startEvent.isdigit():
339  raise Exception("%s is not a number" % startEvent)
340  profilerStart = int(startEvent)
341  if len(profileOpts):
342  eventInterval = profileOpts.pop(0)
343  if not eventInterval.isdigit():
344  raise Exception("%s is not a number" % eventInterval)
345  profilerInterval = int(eventInterval)
346  if len(profileOpts):
347  profilerFormat = profileOpts.pop(0)
348 
349 
350  if not profilerFormat:
351  profilerFormat = "%s___%s___%%I.heap" % (
352  self._options.evt_type.replace("_cfi", ""),
353  hashlib.md5(
354  (str(self._options.step) + str(self._options.pileup) + str(self._options.conditions) +
355  str(self._options.datatier) + str(self._options.profileTypeLabel)).encode('utf-8')
356  ).hexdigest()
357  )
358  if not profilerJobFormat and profilerFormat.endswith(".heap"):
359  profilerJobFormat = profilerFormat.replace(".heap", "_EndOfJob.heap")
360  elif not profilerJobFormat:
361  profilerJobFormat = profilerFormat + "_EndOfJob.heap"
362 
363  return (profilerStart,profilerInterval,profilerFormat,profilerJobFormat)
364 
def encode(args, files)
#define str(s)

◆ load()

◆ loadAndRemember()

def ConfigBuilder.ConfigBuilder.loadAndRemember (   self,
  includeFile 
)
helper routine to load am memorize imports

Definition at line 370 of file ConfigBuilder.py.

References mps_setup.append, ConfigBuilder.ConfigBuilder.imports, ConfigBuilder.ConfigBuilder.load(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, and ConfigBuilder.ConfigBuilder.process.

Referenced by ConfigBuilder.ConfigBuilder.addConditions(), ConfigBuilder.ConfigBuilder.addStandardSequences(), ConfigBuilder.ConfigBuilder.define_Configs(), ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare(), ConfigBuilder.ConfigBuilder.prepare_ALCAHARVEST(), ConfigBuilder.ConfigBuilder.prepare_CFWRITER(), ConfigBuilder.ConfigBuilder.prepare_DATAMIX(), ConfigBuilder.ConfigBuilder.prepare_DIGI(), ConfigBuilder.ConfigBuilder.prepare_DQM(), ConfigBuilder.ConfigBuilder.prepare_GEN(), ConfigBuilder.ConfigBuilder.prepare_HLT(), ConfigBuilder.ConfigBuilder.prepare_L1(), ConfigBuilder.ConfigBuilder.prepare_L1REPACK(), ConfigBuilder.ConfigBuilder.prepare_PATFILTER(), ConfigBuilder.ConfigBuilder.prepare_POSTRECO(), and ConfigBuilder.ConfigBuilder.prepare_SIM().

370  def loadAndRemember(self, includeFile):
371  """helper routine to load am memorize imports"""
372  # we could make the imports a on-the-fly data method of the process instance itself
373  # not sure if the latter is a good idea
374  includeFile = includeFile.replace('/','.')
375  self.imports.append(includeFile)
376  self.process.load(includeFile)
377  return sys.modules[includeFile]
378 
def load(fileName)
Definition: svgfig.py:547

◆ loadDefaultOrSpecifiedCFF()

def ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF (   self,
  stepSpec,
  defaultCFF,
  defaultSEQ = '' 
)

Definition at line 1275 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.loadAndRemember(), print(), and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_ALCA(), ConfigBuilder.ConfigBuilder.prepare_DIGI(), ConfigBuilder.ConfigBuilder.prepare_DIGI2RAW(), ConfigBuilder.ConfigBuilder.prepare_DQM(), ConfigBuilder.ConfigBuilder.prepare_ENDJOB(), ConfigBuilder.ConfigBuilder.prepare_GEN(), ConfigBuilder.ConfigBuilder.prepare_L1HwVal(), ConfigBuilder.ConfigBuilder.prepare_L1Reco(), ConfigBuilder.ConfigBuilder.prepare_L1TrackTrigger(), ConfigBuilder.ConfigBuilder.prepare_NANO(), ConfigBuilder.ConfigBuilder.prepare_NANOGEN(), ConfigBuilder.ConfigBuilder.prepare_PAT(), ConfigBuilder.ConfigBuilder.prepare_PATGEN(), ConfigBuilder.ConfigBuilder.prepare_RAW2DIGI(), ConfigBuilder.ConfigBuilder.prepare_RECO(), ConfigBuilder.ConfigBuilder.prepare_RECOBEFMIX(), ConfigBuilder.ConfigBuilder.prepare_RECOSIM(), ConfigBuilder.ConfigBuilder.prepare_REPACK(), ConfigBuilder.ConfigBuilder.prepare_SIM(), ConfigBuilder.ConfigBuilder.prepare_SKIM(), ConfigBuilder.ConfigBuilder.prepare_USER(), and ConfigBuilder.ConfigBuilder.prepare_VALIDATION().

1275  def loadDefaultOrSpecifiedCFF(self, stepSpec, defaultCFF, defaultSEQ=''):
1276  _dotsplit = stepSpec.split('.')
1277  if ( len(_dotsplit)==1 ):
1278  if '/' in _dotsplit[0]:
1279  _sequence = defaultSEQ if defaultSEQ else stepSpec
1280  _cff = _dotsplit[0]
1281  else:
1282  _sequence = stepSpec
1283  _cff = defaultCFF
1284  elif ( len(_dotsplit)==2 ):
1285  _cff,_sequence = _dotsplit
1286  else:
1287  print("sub sequence configuration must be of the form dir/subdir/cff.a+b+c or cff.a")
1288  print(stepSpec,"not recognized")
1289  raise
1290  l=self.loadAndRemember(_cff)
1291  return l,_sequence,_cff
1292 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

◆ prepare()

def ConfigBuilder.ConfigBuilder.prepare (   self,
  doChecking = False 
)
Prepare the configuration string and add missing pieces.

Definition at line 2231 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.addCommon(), ConfigBuilder.ConfigBuilder.addConditions(), ConfigBuilder.ConfigBuilder.addCustomise(), ConfigBuilder.ConfigBuilder.addCustomiseCmdLine(), ConfigBuilder.ConfigBuilder.addedObjects, ConfigBuilder.ConfigBuilder.additionalCommands, ConfigBuilder.ConfigBuilder.additionalOutputs, ConfigBuilder.ConfigBuilder.addMaxEvents(), ConfigBuilder.ConfigBuilder.addOutput(), ConfigBuilder.ConfigBuilder.addSource(), ConfigBuilder.ConfigBuilder.addStandardSequences(), mps_setup.append, helpers.associatePatAlgosToolsTask(), ConfigBuilder.ConfigBuilder.blacklist_paths, ConfigBuilder.ConfigBuilder.build_production_info(), ConfigBuilder.ConfigBuilder.completeInputCommand(), ConfigBuilder.ConfigBuilder.conditionalPaths, earlyDeleteSettings_cff.customiseEarlyDelete(), logErrorHarvester_cff.customiseLogErrorHarvesterUsingOutputCommands(), ConfigBuilder.dumpPython(), ConfigBuilder.ConfigBuilder.EVTCONTDefaultCFF, ConfigBuilder.ConfigBuilder.excludedPaths, spr.find(), ConfigBuilder.ConfigBuilder.imports, edm::eventsetup::heterocontainer.insert(), createfilelist.int, mps_monitormerge.items, join(), relativeConstraints.keys, ConfigBuilder.ConfigBuilder.labelsToAssociate, ConfigBuilder.ConfigBuilder.load(), ConfigBuilder.ConfigBuilder.loadAndRemember(), print(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, ConfigBuilder.ConfigBuilder.productionFilterSequence, ConfigBuilder.ConfigBuilder.pythonCfgCode, ConfigBuilder.ConfigBuilder.schedule, ConfigBuilder.ConfigBuilder.scheduleIndexOfFirstHLTPath, ConfigBuilder.ConfigBuilder.stepMap, str, ConfigBuilder.ConfigBuilder.with_input, and ConfigBuilder.ConfigBuilder.with_output.

2231  def prepare(self, doChecking = False):
2232  """ Prepare the configuration string and add missing pieces."""
2233 
2234  self.loadAndRemember(self.EVTCONTDefaultCFF) #load the event contents regardless
2235  self.addMaxEvents()
2236  if self.with_input:
2237  self.addSource()
2238  self.addStandardSequences()
2239 
2240  self.completeInputCommand()
2241  self.addConditions()
2242 
2243 
2244  outputModuleCfgCode=""
2245  if not 'HARVESTING' in self.stepMap.keys() and not 'ALCAHARVEST' in self.stepMap.keys() and not 'ALCAOUTPUT' in self.stepMap.keys() and self.with_output:
2246  outputModuleCfgCode=self.addOutput()
2247 
2248  self.addCommon()
2249 
2250  self.pythonCfgCode += "# import of standard configurations\n"
2251  for module in self.imports:
2252  self.pythonCfgCode += ("process.load('"+module+"')\n")
2253 
2254  # production info
2255  if not hasattr(self.process,"configurationMetadata"):
2256  self.build_production_info(self._options.evt_type, self._options.number)
2257  else:
2258  #the PSet was added via a load
2259  self.addedObjects.append(("Production Info","configurationMetadata"))
2260 
2261  self.pythonCfgCode +="\n"
2262  for comment,object in self.addedObjects:
2263  if comment!="":
2264  self.pythonCfgCode += "\n# "+comment+"\n"
2265  self.pythonCfgCode += dumpPython(self.process,object)
2266 
2267  # dump the output definition
2268  self.pythonCfgCode += "\n# Output definition\n"
2269  self.pythonCfgCode += outputModuleCfgCode
2270 
2271  # dump all additional outputs (e.g. alca or skim streams)
2272  self.pythonCfgCode += "\n# Additional output definition\n"
2273  #I do not understand why the keys are not normally ordered.
2274  nl=sorted(self.additionalOutputs.keys())
2275  for name in nl:
2276  output = self.additionalOutputs[name]
2277  self.pythonCfgCode += "process.%s = %s" %(name, output.dumpPython())
2278  tmpOut = cms.EndPath(output)
2279  setattr(self.process,name+'OutPath',tmpOut)
2280  self.schedule.append(tmpOut)
2281 
2282  # dump all additional commands
2283  self.pythonCfgCode += "\n# Other statements\n"
2284  for command in self.additionalCommands:
2285  self.pythonCfgCode += command + "\n"
2286 
2287  #comma separated list of objects that deserve to be inlined in the configuration (typically from a modified config deep down)
2288  for object in self._options.inlineObjets.split(','):
2289  if not object:
2290  continue
2291  if not hasattr(self.process,object):
2292  print('cannot inline -'+object+'- : not known')
2293  else:
2294  self.pythonCfgCode +='\n'
2295  self.pythonCfgCode +=dumpPython(self.process,object)
2296 
2297  if self._options.pileup=='HiMixEmbGEN':
2298  self.pythonCfgCode += "\nprocess.generator.embeddingMode=cms.int32(1)\n"
2299 
2300  # dump all paths
2301  self.pythonCfgCode += "\n# Path and EndPath definitions\n"
2302  for path in self.process.paths:
2303  if getattr(self.process,path) not in self.blacklist_paths:
2304  self.pythonCfgCode += dumpPython(self.process,path)
2305 
2306  for endpath in self.process.endpaths:
2307  if getattr(self.process,endpath) not in self.blacklist_paths:
2308  self.pythonCfgCode += dumpPython(self.process,endpath)
2309 
2310  # dump the schedule
2311  self.pythonCfgCode += "\n# Schedule definition\n"
2312 
2313  # handling of the schedule
2314  pathNames = ['process.'+p.label_() for p in self.schedule]
2315  if self.process.schedule == None:
2316  self.process.schedule = cms.Schedule()
2317  for item in self.schedule:
2318  self.process.schedule.append(item)
2319  result = 'process.schedule = cms.Schedule('+','.join(pathNames)+')\n'
2320  else:
2321  if not isinstance(self.scheduleIndexOfFirstHLTPath, int):
2322  raise Exception('the schedule was imported from a cff in HLTrigger.Configuration, but the final index of the first HLT path is undefined')
2323 
2324  for index, item in enumerate(self.schedule):
2325  if index < self.scheduleIndexOfFirstHLTPath:
2326  self.process.schedule.insert(index, item)
2327  else:
2328  self.process.schedule.append(item)
2329 
2330  result = "# process.schedule imported from cff in HLTrigger.Configuration\n"
2331  for index, item in enumerate(pathNames[:self.scheduleIndexOfFirstHLTPath]):
2332  result += 'process.schedule.insert('+str(index)+', '+item+')\n'
2333  if self.scheduleIndexOfFirstHLTPath < len(pathNames):
2334  result += 'process.schedule.extend(['+','.join(pathNames[self.scheduleIndexOfFirstHLTPath:])+'])\n'
2335 
2336  self.pythonCfgCode += result
2337 
2338  for labelToAssociate in self.labelsToAssociate:
2339  self.process.schedule.associate(getattr(self.process, labelToAssociate))
2340  self.pythonCfgCode += 'process.schedule.associate(process.' + labelToAssociate + ')\n'
2341 
2342  from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask
2343  associatePatAlgosToolsTask(self.process)
2344  self.pythonCfgCode+="from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask\n"
2345  self.pythonCfgCode+="associatePatAlgosToolsTask(process)\n"
2346 
2347  overrideThreads = (self._options.nThreads != "1")
2348  overrideConcurrentLumis = (self._options.nConcurrentLumis != defaultOptions.nConcurrentLumis)
2349  overrideConcurrentIOVs = (self._options.nConcurrentIOVs != defaultOptions.nConcurrentIOVs)
2350 
2351  if overrideThreads or overrideConcurrentLumis or overrideConcurrentIOVs:
2352  self.pythonCfgCode +="\n"
2353  self.pythonCfgCode +="#Setup FWK for multithreaded\n"
2354  if overrideThreads:
2355  self.pythonCfgCode +="process.options.numberOfThreads = "+self._options.nThreads+"\n"
2356  self.pythonCfgCode +="process.options.numberOfStreams = "+self._options.nStreams+"\n"
2357  self.process.options.numberOfThreads = int(self._options.nThreads)
2358  self.process.options.numberOfStreams = int(self._options.nStreams)
2359  if overrideConcurrentLumis:
2360  self.pythonCfgCode +="process.options.numberOfConcurrentLuminosityBlocks = "+self._options.nConcurrentLumis+"\n"
2361  self.process.options.numberOfConcurrentLuminosityBlocks = int(self._options.nConcurrentLumis)
2362  if overrideConcurrentIOVs:
2363  self.pythonCfgCode +="process.options.eventSetup.numberOfConcurrentIOVs = "+self._options.nConcurrentIOVs+"\n"
2364  self.process.options.eventSetup.numberOfConcurrentIOVs = int(self._options.nConcurrentIOVs)
2365 
2366  if self._options.accelerators is not None:
2367  accelerators = self._options.accelerators.split(',')
2368  self.pythonCfgCode += "\n"
2369  self.pythonCfgCode += "# Enable only these accelerator backends\n"
2370  self.pythonCfgCode += "process.load('Configuration.StandardSequences.Accelerators_cff')\n"
2371  self.pythonCfgCode += "process.options.accelerators = ['" + "', '".join(accelerators) + "']\n"
2372  self.process.load('Configuration.StandardSequences.Accelerators_cff')
2373  self.process.options.accelerators = accelerators
2374 
2375  #repacked version
2376  if self._options.isRepacked:
2377  self.pythonCfgCode +="\n"
2378  self.pythonCfgCode +="from Configuration.Applications.ConfigBuilder import MassReplaceInputTag\n"
2379  self.pythonCfgCode +="MassReplaceInputTag(process, new=\"rawDataMapperByLabel\", old=\"rawDataCollector\")\n"
2380  MassReplaceInputTag(self.process, new="rawDataMapperByLabel", old="rawDataCollector")
2381 
2382  # special treatment in case of production filter sequence 2/2
2383  if self.productionFilterSequence and not (self._options.pileup=='HiMixEmbGEN'):
2384  self.pythonCfgCode +='# filter all path with the production filter sequence\n'
2385  self.pythonCfgCode +='for path in process.paths:\n'
2386  if len(self.conditionalPaths):
2387  self.pythonCfgCode +='\tif not path in %s: continue\n'%str(self.conditionalPaths)
2388  if len(self.excludedPaths):
2389  self.pythonCfgCode +='\tif path in %s: continue\n'%str(self.excludedPaths)
2390  self.pythonCfgCode +='\tgetattr(process,path).insert(0, process.%s)\n'%(self.productionFilterSequence,)
2391  pfs = getattr(self.process,self.productionFilterSequence)
2392  for path in self.process.paths:
2393  if not path in self.conditionalPaths: continue
2394  if path in self.excludedPaths: continue
2395  getattr(self.process,path).insert(0, pfs)
2396 
2397 
2398  # dump customise fragment
2399  self.pythonCfgCode += self.addCustomise()
2400 
2401  if self._options.runUnscheduled:
2402  print("--runUnscheduled is deprecated and not necessary anymore, and will be removed soon. Please update your command line.")
2403  # Keep the "unscheduled customise functions" separate for now,
2404  # there are customize functions given by users (in our unit
2405  # tests) that need to be run before the "unscheduled customise
2406  # functions"
2407  self.pythonCfgCode += self.addCustomise(1)
2408 
2409  self.pythonCfgCode += self.addCustomiseCmdLine()
2410 
2411  if hasattr(self.process,"logErrorHarvester"):
2412  #configure logErrorHarvester to wait for same EDProducers to finish as the OutputModules
2413  self.pythonCfgCode +="\n#Have logErrorHarvester wait for the same EDProducers to finish as those providing data for the OutputModule\n"
2414  self.pythonCfgCode +="from FWCore.Modules.logErrorHarvester_cff import customiseLogErrorHarvesterUsingOutputCommands\n"
2415  self.pythonCfgCode +="process = customiseLogErrorHarvesterUsingOutputCommands(process)\n"
2416  from FWCore.Modules.logErrorHarvester_cff import customiseLogErrorHarvesterUsingOutputCommands
2417  self.process = customiseLogErrorHarvesterUsingOutputCommands(self.process)
2418 
2419  # Temporary hack to put the early delete customization after
2420  # everything else
2421  #
2422  # FIXME: remove when no longer needed
2423  self.pythonCfgCode += "\n# Add early deletion of temporary data products to reduce peak memory need\n"
2424  self.pythonCfgCode += "from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete\n"
2425  self.pythonCfgCode += "process = customiseEarlyDelete(process)\n"
2426  self.pythonCfgCode += "# End adding early deletion\n"
2427  from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete
2428  self.process = customiseEarlyDelete(self.process)
2429 
2430  imports = cms.specialImportRegistry.getSpecialImports()
2431  if len(imports) > 0:
2432  #need to inject this at the top
2433  index = self.pythonCfgCode.find("import FWCore.ParameterSet.Config")
2434  #now find the end of line
2435  index = self.pythonCfgCode.find("\n",index)
2436  self.pythonCfgCode = self.pythonCfgCode[:index]+ "\n" + "\n".join(imports)+"\n" +self.pythonCfgCode[index:]
2437 
2438 
2439  # make the .io file
2440 
2441  if self._options.io:
2442  #io=open(self._options.python_filename.replace('.py','.io'),'w')
2443  if not self._options.io.endswith('.io'): self._option.io+='.io'
2444  io=open(self._options.io,'w')
2445  ioJson={}
2446  if hasattr(self.process.source,"fileNames"):
2447  if len(self.process.source.fileNames.value()):
2448  ioJson['primary']=self.process.source.fileNames.value()
2449  if hasattr(self.process.source,"secondaryFileNames"):
2450  if len(self.process.source.secondaryFileNames.value()):
2451  ioJson['secondary']=self.process.source.secondaryFileNames.value()
2452  if self._options.pileup_input and (self._options.pileup_input.startswith('dbs:') or self._options.pileup_input.startswith('das:')):
2453  ioJson['pileup']=self._options.pileup_input[4:]
2454  for (o,om) in self.process.outputModules_().items():
2455  ioJson[o]=om.fileName.value()
2456  ioJson['GT']=self.process.GlobalTag.globaltag.value()
2457  if self.productionFilterSequence:
2458  ioJson['filter']=self.productionFilterSequence
2459  import json
2460  io.write(json.dumps(ioJson))
2461  return
2462 
2463 
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
bool insert(Storage &iStorage, ItemType *iItem, const IdTag &iIdTag)
Definition: HCMethods.h:50
static std::string join(char **cmd)
Definition: RemoteFile.cc:19
def load(fileName)
Definition: svgfig.py:547
def dumpPython(process, name)
def associatePatAlgosToolsTask(process)
Definition: helpers.py:24
#define str(s)
def customiseLogErrorHarvesterUsingOutputCommands(process)

◆ prepare_ALCA()

def ConfigBuilder.ConfigBuilder.prepare_ALCA (   self,
  stepSpec = None,
  workflow = 'full' 
)
Enrich the process with alca streams 

Definition at line 1332 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.ALCADefaultCFF, ConfigBuilder.ConfigBuilder.AlCaPaths, ConfigBuilder.ConfigBuilder.expandMapping(), ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), and str.

Referenced by ConfigBuilder.ConfigBuilder.prepare_ALCAOUTPUT(), and ConfigBuilder.ConfigBuilder.prepare_ALCAPRODUCER().

1332  def prepare_ALCA(self, stepSpec = None, workflow = 'full'):
1333  """ Enrich the process with alca streams """
1334  alcaConfig,sequence,_=self.loadDefaultOrSpecifiedCFF(stepSpec,self.ALCADefaultCFF)
1335 
1336  MAXLEN=31 #the alca producer name should be shorter than 31 chars as per https://cms-talk.web.cern.ch/t/alcaprompt-datasets-not-loaded-in-dbs/11146/2
1337  # decide which ALCA paths to use
1338  alcaList = sequence.split("+")
1339  for alca in alcaList:
1340  if (len(alca)>MAXLEN):
1341  raise Exception("The following alca "+str(alca)+" name (with length "+str(len(alca))+" chars) cannot be accepted because it exceeds the DBS constraints on the length of the name of the ALCARECOs producers ("+str(MAXLEN)+")!")
1342 
1343  maxLevel=0
1344  from Configuration.AlCa.autoAlca import autoAlca, AlCaNoConcurrentLumis
1345  # support @X from autoAlca.py, and recursion support: i.e T0:@Mu+@EG+...
1346  self.expandMapping(alcaList,autoAlca)
1347  self.AlCaPaths=[]
1348  for name in alcaConfig.__dict__:
1349  alcastream = getattr(alcaConfig,name)
1350  shortName = name.replace('ALCARECOStream','')
1351  if shortName in alcaList and isinstance(alcastream,cms.FilteredStream):
1352  if shortName in AlCaNoConcurrentLumis:
1353  print("Setting numberOfConcurrentLuminosityBlocks=1 because of AlCa sequence {}".format(shortName))
1354  self._options.nConcurrentLumis = "1"
1355  self._options.nConcurrentIOVs = "1"
1356  output = self.addExtraStream(name,alcastream, workflow = workflow)
1357  self.executeAndRemember('process.ALCARECOEventContent.outputCommands.extend(process.OutALCARECO'+shortName+'_noDrop.outputCommands)')
1358  self.AlCaPaths.append(shortName)
1359  if 'DQM' in alcaList:
1360  if not self._options.inlineEventContent and hasattr(self.process,name):
1361  self.executeAndRemember('process.' + name + '.outputCommands.append("keep *_MEtoEDMConverter_*_*")')
1362  else:
1363  output.outputCommands.append("keep *_MEtoEDMConverter_*_*")
1364 
1365  #rename the HLT process name in the alca modules
1366  if self._options.hltProcess or 'HLT' in self.stepMap:
1367  if isinstance(alcastream.paths,tuple):
1368  for path in alcastream.paths:
1369  self.renameHLTprocessInSequence(path.label())
1370  else:
1371  self.renameHLTprocessInSequence(alcastream.paths.label())
1372 
1373  for i in range(alcaList.count(shortName)):
1374  alcaList.remove(shortName)
1375 
1376  # DQM needs a special handling
1377  elif name == 'pathALCARECODQM' and 'DQM' in alcaList:
1378  path = getattr(alcaConfig,name)
1379  self.schedule.append(path)
1380  alcaList.remove('DQM')
1381 
1382  if isinstance(alcastream,cms.Path):
1383  #black list the alca path so that they do not appear in the cfg
1384  self.blacklist_paths.append(alcastream)
1385 
1386 
1387  if len(alcaList) != 0:
1388  available=[]
1389  for name in alcaConfig.__dict__:
1390  alcastream = getattr(alcaConfig,name)
1391  if isinstance(alcastream,cms.FilteredStream):
1392  available.append(name.replace('ALCARECOStream',''))
1393  print("The following alcas could not be found "+str(alcaList))
1394  print("available ",available)
1395  #print "verify your configuration, ignoring for now"
1396  raise Exception("The following alcas could not be found "+str(alcaList))
1397 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
#define str(s)

◆ prepare_ALCAHARVEST()

def ConfigBuilder.ConfigBuilder.prepare_ALCAHARVEST (   self,
  stepSpec = None 
)
Enrich the process with AlCaHarvesting step 

Definition at line 2126 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.ALCAHARVESTDefaultCFF, mps_setup.append, ConfigBuilder.ConfigBuilder.executeAndRemember(), ConfigBuilder.ConfigBuilder.expandMapping(), ConfigBuilder.ConfigBuilder.loadAndRemember(), ConfigBuilder.ConfigBuilder.prepare_ENDJOB(), print(), ConfigBuilder.ConfigBuilder.schedule, and str.

2126  def prepare_ALCAHARVEST(self, stepSpec = None):
2127  """ Enrich the process with AlCaHarvesting step """
2128  harvestingConfig = self.loadAndRemember(self.ALCAHARVESTDefaultCFF)
2129  sequence=stepSpec.split(".")[-1]
2130 
2131  # decide which AlcaHARVESTING paths to use
2132  harvestingList = sequence.split("+")
2133 
2134 
2135 
2136  from Configuration.AlCa.autoPCL import autoPCL
2137  self.expandMapping(harvestingList,autoPCL)
2138 
2139  for name in harvestingConfig.__dict__:
2140  harvestingstream = getattr(harvestingConfig,name)
2141  if name in harvestingList and isinstance(harvestingstream,cms.Path):
2142  self.schedule.append(harvestingstream)
2143  if isinstance(getattr(harvestingConfig,"ALCAHARVEST" + name + "_dbOutput"), cms.VPSet) and \
2144  isinstance(getattr(harvestingConfig,"ALCAHARVEST" + name + "_metadata"), cms.VPSet):
2145  self.executeAndRemember("process.PoolDBOutputService.toPut.extend(process.ALCAHARVEST" + name + "_dbOutput)")
2146  self.executeAndRemember("process.pclMetadataWriter.recordsToMap.extend(process.ALCAHARVEST" + name + "_metadata)")
2147  else:
2148  self.executeAndRemember("process.PoolDBOutputService.toPut.append(process.ALCAHARVEST" + name + "_dbOutput)")
2149  self.executeAndRemember("process.pclMetadataWriter.recordsToMap.append(process.ALCAHARVEST" + name + "_metadata)")
2150  harvestingList.remove(name)
2151  # append the common part at the end of the sequence
2152  lastStep = getattr(harvestingConfig,"ALCAHARVESTDQMSaveAndMetadataWriter")
2153  self.schedule.append(lastStep)
2154 
2155  if len(harvestingList) != 0 and 'dummyHarvesting' not in harvestingList :
2156  print("The following harvesting could not be found : ", harvestingList)
2157  raise Exception("The following harvesting could not be found : "+str(harvestingList))
2158 
2159 
2160 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
#define str(s)

◆ prepare_ALCAOUTPUT()

def ConfigBuilder.ConfigBuilder.prepare_ALCAOUTPUT (   self,
  stepSpec = None 
)

Definition at line 1329 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.prepare_ALCA().

Referenced by ConfigBuilder.ConfigBuilder.prepare_ALCAPRODUCER().

1329  def prepare_ALCAOUTPUT(self, stepSpec = None):
1330  self.prepare_ALCA(stepSpec, workflow = "output")
1331 

◆ prepare_ALCAPRODUCER()

def ConfigBuilder.ConfigBuilder.prepare_ALCAPRODUCER (   self,
  stepSpec = None 
)

Definition at line 1326 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.prepare_ALCA(), and ConfigBuilder.ConfigBuilder.prepare_ALCAOUTPUT().

Referenced by ConfigBuilder.ConfigBuilder.scheduleSequenceAtEnd().

1326  def prepare_ALCAPRODUCER(self, stepSpec = None):
1327  self.prepare_ALCA(stepSpec, workflow = "producers")
1328 

◆ prepare_CFWRITER()

def ConfigBuilder.ConfigBuilder.prepare_CFWRITER (   self,
  stepSpec = None 
)
Enrich the schedule with the crossing frame writer step

Definition at line 1540 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.CFWRITERDefaultCFF, ConfigBuilder.ConfigBuilder.loadAndRemember(), ConfigBuilder.ConfigBuilder.prepare_DATAMIX(), and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_DIGI().

1540  def prepare_CFWRITER(self, stepSpec = None):
1541  """ Enrich the schedule with the crossing frame writer step"""
1542  self.loadAndRemember(self.CFWRITERDefaultCFF)
1543  self.scheduleSequence('pcfw','cfwriter_step')
1544  return
1545 

◆ prepare_DATAMIX()

def ConfigBuilder.ConfigBuilder.prepare_DATAMIX (   self,
  stepSpec = None 
)
Enrich the schedule with the digitisation step

Definition at line 1546 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.DATAMIXDefaultCFF, ConfigBuilder.ConfigBuilder.executeAndRemember(), ConfigBuilder.filesFromDASQuery(), ConfigBuilder.filesFromList(), ConfigBuilder.ConfigBuilder.loadAndRemember(), ConfigBuilder.ConfigBuilder.prepare_DIGI2RAW(), and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_CFWRITER().

1546  def prepare_DATAMIX(self, stepSpec = None):
1547  """ Enrich the schedule with the digitisation step"""
1548  self.loadAndRemember(self.DATAMIXDefaultCFF)
1549  self.scheduleSequence('pdatamix','datamixing_step')
1550 
1551  if self._options.pileup_input:
1552  theFiles=''
1553  if self._options.pileup_input.startswith('dbs:') or self._options.pileup_input.startswith('das:'):
1554  theFiles=filesFromDASQuery('file dataset = %s'%(self._options.pileup_input[4:],),self._options.pileup_dasoption)[0]
1555  elif self._options.pileup_input.startswith("filelist:"):
1556  theFiles= (filesFromList(self._options.pileup_input[9:]))[0]
1557  else:
1558  theFiles=self._options.pileup_input.split(',')
1559  #print theFiles
1560  self.executeAndRemember( "process.mixData.input.fileNames = cms.untracked.vstring(%s)"%( theFiles ) )
1561 
1562  return
1563 
def filesFromDASQuery(query, option="", s=None)
def filesFromList(fileName, s=None)

◆ prepare_DIGI()

def ConfigBuilder.ConfigBuilder.prepare_DIGI (   self,
  stepSpec = None 
)
Enrich the schedule with the digitisation step

Definition at line 1520 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.DIGIDefaultCFF, ConfigBuilder.ConfigBuilder.executeAndRemember(), ConfigBuilder.ConfigBuilder.loadAndRemember(), ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_CFWRITER(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_SIM().

1520  def prepare_DIGI(self, stepSpec = None):
1521  """ Enrich the schedule with the digitisation step"""
1522  _,_digiSeq,_ = self.loadDefaultOrSpecifiedCFF(stepSpec,self.DIGIDefaultCFF)
1523 
1524  if self._options.gflash==True:
1525  self.loadAndRemember("Configuration/StandardSequences/GFlashDIGI_cff")
1526 
1527  if _digiSeq == 'pdigi_valid' or _digiSeq == 'pdigi_hi':
1528  self.executeAndRemember("process.mix.digitizers = cms.PSet(process.theDigitizersValid)")
1529 
1530  if _digiSeq != 'pdigi_nogen' and _digiSeq != 'pdigi_valid_nogen' and _digiSeq != 'pdigi_hi_nogen' and not self.process.source.type_()=='EmptySource' and not self._options.filetype == "LHE":
1531  if self._options.inputEventContent=='':
1532  self._options.inputEventContent='REGEN'
1533  else:
1534  self._options.inputEventContent=self._options.inputEventContent+',REGEN'
1535 
1536 
1537  self.scheduleSequence(_digiSeq,'digitisation_step')
1538  return
1539 

◆ prepare_DIGI2RAW()

def ConfigBuilder.ConfigBuilder.prepare_DIGI2RAW (   self,
  stepSpec = None 
)

Definition at line 1564 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.DIGI2RAWDefaultCFF, ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_REPACK(), and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_DATAMIX().

1564  def prepare_DIGI2RAW(self, stepSpec = None):
1565  _,_digi2rawSeq,_ = self.loadDefaultOrSpecifiedCFF(stepSpec,self.DIGI2RAWDefaultCFF)
1566  self.scheduleSequence(_digi2rawSeq,'digi2raw_step')
1567  return
1568 

◆ prepare_DQM()

def ConfigBuilder.ConfigBuilder.prepare_DQM (   self,
  stepSpec = 'DQMOffline' 
)

Definition at line 2042 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, mps_setup.append, ConfigBuilder.ConfigBuilder.DQMOFFLINEDefaultCFF, ConfigBuilder.ConfigBuilder.expandMapping(), edm::eventsetup::heterocontainer.insert(), relativeConstraints.keys, ConfigBuilder.ConfigBuilder.loadAndRemember(), ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_HARVESTING(), print(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, ConfigBuilder.ConfigBuilder.renameHLTprocessInSequence(), ConfigBuilder.ConfigBuilder.schedule, and ConfigBuilder.ConfigBuilder.stepMap.

Referenced by ConfigBuilder.ConfigBuilder.expandMapping().

2042  def prepare_DQM(self, stepSpec = 'DQMOffline'):
2043  # this one needs replacement
2044 
2045  # any 'DQM' job should use DQMStore in non-legacy mode (but not HARVESTING)
2046  self.loadAndRemember("DQMServices/Core/DQMStoreNonLegacy_cff")
2047  _,_dqmSeq,_ = self.loadDefaultOrSpecifiedCFF(stepSpec,self.DQMOFFLINEDefaultCFF)
2048  sequenceList=_dqmSeq.split('+')
2049  postSequenceList=_dqmSeq.split('+')
2050  from DQMOffline.Configuration.autoDQM import autoDQM
2051  self.expandMapping(sequenceList,autoDQM,index=0)
2052  self.expandMapping(postSequenceList,autoDQM,index=1)
2053 
2054  if len(set(sequenceList))!=len(sequenceList):
2055  sequenceList=list(set(sequenceList))
2056  print("Duplicate entries for DQM:, using",sequenceList)
2057 
2058  pathName='dqmoffline_step'
2059  for (i,_sequence) in enumerate(sequenceList):
2060  if (i!=0):
2061  pathName='dqmoffline_%d_step'%(i)
2062 
2063  if 'HLT' in self.stepMap.keys() or self._options.hltProcess:
2064  self.renameHLTprocessInSequence(_sequence)
2065 
2066  setattr(self.process,pathName, cms.EndPath( getattr(self.process,_sequence ) ) )
2067  self.schedule.append(getattr(self.process,pathName))
2068 
2069  if hasattr(self.process,"genstepfilter") and len(self.process.genstepfilter.triggerConditions):
2070  #will get in the schedule, smoothly
2071  getattr(self.process,pathName).insert(0,self.process.genstepfilter)
2072 
2073 
2074  pathName='dqmofflineOnPAT_step'
2075  for (i,_sequence) in enumerate(postSequenceList):
2076  #Fix needed to avoid duplication of sequences not defined in autoDQM or without a PostDQM
2077  if (sequenceList[i]==postSequenceList[i]):
2078  continue
2079  if (i!=0):
2080  pathName='dqmofflineOnPAT_%d_step'%(i)
2081 
2082  setattr(self.process,pathName, cms.EndPath( getattr(self.process, _sequence ) ) )
2083  self.schedule.append(getattr(self.process,pathName))
2084 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
bool insert(Storage &iStorage, ItemType *iItem, const IdTag &iIdTag)
Definition: HCMethods.h:50

◆ prepare_ENDJOB()

def ConfigBuilder.ConfigBuilder.prepare_ENDJOB (   self,
  stepSpec = 'endOfProcess' 
)

Definition at line 2161 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.ENDJOBDefaultCFF, ConfigBuilder.ConfigBuilder.finalizeFastSimHLT(), ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), and ConfigBuilder.ConfigBuilder.scheduleSequenceAtEnd().

Referenced by ConfigBuilder.ConfigBuilder.prepare_ALCAHARVEST().

2161  def prepare_ENDJOB(self, stepSpec = 'endOfProcess'):
2162  _,_endjobSeq,_=self.loadDefaultOrSpecifiedCFF(stepSpec,self.ENDJOBDefaultCFF)
2163  self.scheduleSequenceAtEnd(_endjobSeq,'endjob_step')
2164  return
2165 

◆ prepare_FILTER()

def ConfigBuilder.ConfigBuilder.prepare_FILTER (   self,
  stepSpec = None 
)
Enrich the schedule with a user defined filter sequence 

Definition at line 1690 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.__init__(), ConfigBuilder.ConfigBuilder.inliner, VisualizationOptions.load(), BTagCalibrationReader::BTagCalibrationReaderImpl.load(), BTagCalibrationReader.load(), CSCL1TPLookupTableEP.load(), cond::persistency::GTEditor.load(), L1MuDTPtaLut.load(), L1MuDTPhiLut.load(), cond::persistency::IOVEditor.load(), L1MuDTEtaPatternLut.load(), L1MuDTQualPatternLut.load(), PiecewiseScalingPolynomial.load(), L1MuDTExtLut.load(), HBHENegativeEFilter.load(), HBHEChannelGroups.load(), cond::persistency::RunInfoProxy.load(), HcalIndexLookup.load(), cond::persistency::GTProxy.load(), cond::persistency::IOVProxy.load(), OOTPileupCorrData.load(), TrackerMap.load(), ConfigBuilder.ConfigBuilder.load(), tkal_create_file_lists._DasCache.load(), and resolutioncreator_cfi.object.

Referenced by ConfigBuilder.ConfigBuilder.prepare_L1TrackTrigger().

1690  def prepare_FILTER(self, stepSpec = None):
1691  ''' Enrich the schedule with a user defined filter sequence '''
1692 
1693  filterConfig,filterSeq = stepSpec.split('.')
1694  filterConfig=self.load(filterConfig)
1695 
1696  class PrintAllModules(object):
1697  def __init__(self):
1698  self.inliner=''
1699  pass
1700  def enter(self,visitee):
1701  try:
1702  label=visitee.label()
1703 
1704  self.inliner=label+','+self.inliner
1705  except:
1706  pass
1707  def leave(self,v): pass
1708 
1709  expander=PrintAllModules()
1710  getattr(self.process,filterSeq).visit( expander )
1711  self._options.inlineObjets+=','+expander.inliner
1712  self._options.inlineObjets+=','+filterSeq
1713 
1714 
1715  self.scheduleSequence(filterSeq,'filtering_step')
1716  self.nextScheduleIsConditional=True
1717 
1718  self.productionFilterSequence = filterSeq
1719 
1720  return
1721 
def __init__(self, dataset, job_number, job_id, job_name, isDA, isMC, applyBOWS, applyEXTRACOND, extraconditions, runboundary, lumilist, intlumi, maxevents, gt, allFromGT, alignmentDB, alignmentTAG, apeDB, apeTAG, bowDB, bowTAG, vertextype, tracktype, refittertype, ttrhtype, applyruncontrol, ptcut, CMSSW_dir, the_dir)

◆ prepare_GEN()

def ConfigBuilder.ConfigBuilder.prepare_GEN (   self,
  stepSpec = None 
)
load the fragment of generator configuration 

Definition at line 1415 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, mps_setup.append, ConfigBuilder.ConfigBuilder.executeAndRemember(), ConfigBuilder.ConfigBuilder.GENDefaultCFF, ConfigBuilder.ConfigBuilder.GENDefaultSeq, ConfigBuilder.ConfigBuilder.LHEDefaultSeq, ConfigBuilder.ConfigBuilder.load(), ConfigBuilder.ConfigBuilder.loadAndRemember(), ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_SIM(), print(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, ConfigBuilder.ConfigBuilder.productionFilterSequence, python.rootplot.root2matplotlib.replace(), ConfigBuilder.ConfigBuilder.schedule, ConfigBuilder.ConfigBuilder.scheduleSequenceAtEnd(), and ConfigBuilder.ConfigBuilder.stepMap.

1415  def prepare_GEN(self, stepSpec = None):
1416  """ load the fragment of generator configuration """
1417  loadFailure=False
1418  #remove trailing .py
1419  #support old style .cfi by changing into something.cfi into something_cfi
1420  #remove python/ from the name
1421  loadFragment = self._options.evt_type.replace('.py','',).replace('.','_').replace('python/','')
1422  #standard location of fragments
1423  if not '/' in loadFragment:
1424  loadFragment='Configuration.Generator.'+loadFragment
1425  else:
1426  loadFragment=loadFragment.replace('/','.')
1427  try:
1428  print("Loading generator fragment from",loadFragment)
1429  __import__(loadFragment)
1430  except:
1431  loadFailure=True
1432  #if self.process.source and self.process.source.type_()=='EmptySource':
1433  if not (self._options.filein or self._options.dasquery):
1434  raise Exception("Neither gen fragment of input files provided: this is an inconsistent GEN step configuration")
1435 
1436  if not loadFailure:
1437  from Configuration.Generator.concurrentLumisDisable import noConcurrentLumiGenerators
1438 
1439  generatorModule=sys.modules[loadFragment]
1440  genModules=generatorModule.__dict__
1441  #remove lhe producer module since this should have been
1442  #imported instead in the LHE step
1443  if self.LHEDefaultSeq in genModules:
1444  del genModules[self.LHEDefaultSeq]
1445 
1446  if self._options.hideGen:
1447  self.loadAndRemember(loadFragment)
1448  else:
1449  self.process.load(loadFragment)
1450  # expose the objects from that fragment to the configuration
1451  import FWCore.ParameterSet.Modules as cmstypes
1452  for name in genModules:
1453  theObject = getattr(generatorModule,name)
1454  if isinstance(theObject, cmstypes._Module):
1455  self._options.inlineObjets=name+','+self._options.inlineObjets
1456  if theObject.type_() in noConcurrentLumiGenerators:
1457  print("Setting numberOfConcurrentLuminosityBlocks=1 because of generator {}".format(theObject.type_()))
1458  self._options.nConcurrentLumis = "1"
1459  self._options.nConcurrentIOVs = "1"
1460  elif isinstance(theObject, cms.Sequence) or isinstance(theObject, cmstypes.ESProducer):
1461  self._options.inlineObjets+=','+name
1462 
1463  if stepSpec == self.GENDefaultSeq or stepSpec == 'pgen_genonly' or stepSpec == 'pgen_smear':
1464  if 'ProductionFilterSequence' in genModules and ('generator' in genModules):
1465  self.productionFilterSequence = 'ProductionFilterSequence'
1466  elif 'generator' in genModules:
1467  self.productionFilterSequence = 'generator'
1468 
1469  """ Enrich the schedule with the rest of the generation step """
1470  _,_genSeqName,_=self.loadDefaultOrSpecifiedCFF(stepSpec,self.GENDefaultCFF)
1471 
1472  if True:
1473  try:
1474  from Configuration.StandardSequences.VtxSmeared import VtxSmeared
1475  cffToBeLoaded=VtxSmeared[self._options.beamspot]
1476  self.loadAndRemember(cffToBeLoaded)
1477  except ImportError:
1478  raise Exception("VertexSmearing type or beamspot "+self._options.beamspot+" unknown.")
1479 
1480  if self._options.scenario == 'HeavyIons':
1481  if self._options.pileup=='HiMixGEN':
1482  self.loadAndRemember("Configuration/StandardSequences/GeneratorMix_cff")
1483  elif self._options.pileup=='HiMixEmbGEN':
1484  self.loadAndRemember("Configuration/StandardSequences/GeneratorEmbMix_cff")
1485  else:
1486  self.loadAndRemember("Configuration/StandardSequences/GeneratorHI_cff")
1487 
1488  self.process.generation_step = cms.Path( getattr(self.process,_genSeqName) )
1489  self.schedule.append(self.process.generation_step)
1490 
1491  #register to the genstepfilter the name of the path (static right now, but might evolve)
1492  self.executeAndRemember('process.genstepfilter.triggerConditions=cms.vstring("generation_step")')
1493 
1494  if 'reGEN' in self.stepMap:
1495  #stop here
1496  return
1497 
1498  """ Enrich the schedule with the summary of the filter step """
1499  #the gen filter in the endpath
1500  self.loadAndRemember("GeneratorInterface/Core/genFilterSummary_cff")
1501  self.scheduleSequenceAtEnd('genFilterSummary','genfiltersummary_step')
1502  return
1503 
def replace(string, replacements)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
def load(fileName)
Definition: svgfig.py:547

◆ prepare_HARVESTING()

def ConfigBuilder.ConfigBuilder.prepare_HARVESTING (   self,
  stepSpec = None 
)
Enrich the process with harvesting step 

Definition at line 2085 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, and ConfigBuilder.ConfigBuilder.DQMSaverCFF.

Referenced by ConfigBuilder.ConfigBuilder.prepare_DQM().

2085  def prepare_HARVESTING(self, stepSpec = None):
2086  """ Enrich the process with harvesting step """
2087  self.DQMSaverCFF='Configuration/StandardSequences/DQMSaver'+self._options.harvesting+'_cff'
2088  self.loadAndRemember(self.DQMSaverCFF)
2089 
2090  harvestingConfig,sequence,_ = self.loadDefaultOrSpecifiedCFF(stepSpec,self.HARVESTINGDefaultCFF)
2091 
2092  # decide which HARVESTING paths to use
2093  harvestingList = sequence.split("+")
2094  from DQMOffline.Configuration.autoDQM import autoDQM
2095  from Validation.Configuration.autoValidation import autoValidation
2096  import copy
2097  combined_mapping = copy.deepcopy( autoDQM )
2098  combined_mapping.update( autoValidation )
2099  self.expandMapping(harvestingList,combined_mapping,index=-1)
2100 
2101  if len(set(harvestingList))!=len(harvestingList):
2102  harvestingList=list(set(harvestingList))
2103  print("Duplicate entries for HARVESTING, using",harvestingList)
2104 
2105  for name in harvestingList:
2106  if not name in harvestingConfig.__dict__:
2107  print(name,"is not a possible harvesting type. Available are",harvestingConfig.__dict__.keys())
2108  # trigger hard error, like for other sequence types
2109  getattr(self.process, name)
2110  continue
2111  harvestingstream = getattr(harvestingConfig,name)
2112  if isinstance(harvestingstream,cms.Path):
2113  self.schedule.append(harvestingstream)
2114  self.blacklist_paths.append(harvestingstream)
2115  if isinstance(harvestingstream,cms.Sequence):
2116  setattr(self.process,name+"_step",cms.Path(harvestingstream))
2117  self.schedule.append(getattr(self.process,name+"_step"))
2118 
2119  # # NOTE: the "hltProcess" option currently does nothing in the HARVEST step
2120  # if self._options.hltProcess or ('HLT' in self.stepMap):
2121  # pass
2122 
2123  self.scheduleSequence('DQMSaver','dqmsave_step')
2124  return
2125 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

◆ prepare_HLT()

def ConfigBuilder.ConfigBuilder.prepare_HLT (   self,
  stepSpec = None 
)
Enrich the schedule with the HLT simulation step

Definition at line 1593 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.additionalCommands, mps_setup.append, ConfigBuilder.ConfigBuilder.blacklist_paths, ConfigBuilder.ConfigBuilder.executeAndRemember(), join(), ConfigBuilder.ConfigBuilder.loadAndRemember(), ConfigBuilder.ConfigBuilder.prepare_RAW2RECO(), print(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, CustomConfigs.ProcessName(), ConfigBuilder.ConfigBuilder.schedule, and ConfigBuilder.ConfigBuilder.scheduleIndexOfFirstHLTPath.

Referenced by ConfigBuilder.ConfigBuilder.prepare_L1REPACK().

1593  def prepare_HLT(self, stepSpec = None):
1594  """ Enrich the schedule with the HLT simulation step"""
1595  if not stepSpec:
1596  print("no specification of the hlt menu has been given, should never happen")
1597  raise Exception('no HLT specifications provided')
1598 
1599  if '@' in stepSpec:
1600  # case where HLT:@something was provided
1601  from Configuration.HLT.autoHLT import autoHLT
1602  key = stepSpec[1:]
1603  if key in autoHLT:
1604  stepSpec = autoHLT[key]
1605  else:
1606  raise ValueError('no HLT mapping key "%s" found in autoHLT' % key)
1607 
1608  if ',' in stepSpec:
1609  #case where HLT:something:something was provided
1610  self.executeAndRemember('import HLTrigger.Configuration.Utilities')
1611  optionsForHLT = {}
1612  if self._options.scenario == 'HeavyIons':
1613  optionsForHLT['type'] = 'HIon'
1614  else:
1615  optionsForHLT['type'] = 'GRun'
1616  optionsForHLTConfig = ', '.join('%s=%s' % (key, repr(val)) for (key, val) in optionsForHLT.items())
1617  if stepSpec == 'run,fromSource':
1618  if hasattr(self.process.source,'firstRun'):
1619  self.executeAndRemember('process.loadHltConfiguration("run:%%d"%%(process.source.firstRun.value()),%s)'%(optionsForHLTConfig))
1620  elif hasattr(self.process.source,'setRunNumber'):
1621  self.executeAndRemember('process.loadHltConfiguration("run:%%d"%%(process.source.setRunNumber.value()),%s)'%(optionsForHLTConfig))
1622  else:
1623  raise Exception(f'Cannot replace menu to load {stepSpec}')
1624  else:
1625  self.executeAndRemember('process.loadHltConfiguration("%s",%s)'%(stepSpec.replace(',',':'),optionsForHLTConfig))
1626  else:
1627  self.loadAndRemember('HLTrigger/Configuration/HLT_%s_cff' % stepSpec)
1628 
1629  if self._options.isMC:
1630  self._options.customisation_file.append("HLTrigger/Configuration/customizeHLTforMC.customizeHLTforMC")
1631 
1632  if self._options.name != 'HLT':
1633  self.additionalCommands.append('from HLTrigger.Configuration.CustomConfigs import ProcessName')
1634  self.additionalCommands.append('process = ProcessName(process)')
1635  self.additionalCommands.append('')
1636  from HLTrigger.Configuration.CustomConfigs import ProcessName
1637  self.process = ProcessName(self.process)
1638 
1639  if self.process.schedule == None:
1640  raise Exception('the HLT step did not attach a valid schedule to the process')
1641 
1642  self.scheduleIndexOfFirstHLTPath = len(self.schedule)
1643  [self.blacklist_paths.append(path) for path in self.process.schedule if isinstance(path,(cms.Path,cms.EndPath))]
1644 
1645  # this is a fake, to be removed with fastim migration and HLT menu dump
1646  if self._options.fast:
1647  if not hasattr(self.process,'HLTEndSequence'):
1648  self.executeAndRemember("process.HLTEndSequence = cms.Sequence( process.dummyModule )")
1649 
1650 
def ProcessName(process)
Definition: CustomConfigs.py:6
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
static std::string join(char **cmd)
Definition: RemoteFile.cc:19

◆ prepare_L1()

def ConfigBuilder.ConfigBuilder.prepare_L1 (   self,
  stepSpec = None 
)
Enrich the schedule with the L1 simulation step

Definition at line 1574 of file ConfigBuilder.py.

References cms::cuda.assert(), ConfigBuilder.ConfigBuilder.L1EMDefaultCFF, ConfigBuilder.ConfigBuilder.loadAndRemember(), ConfigBuilder.ConfigBuilder.prepare_L1REPACK(), and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_REPACK().

1574  def prepare_L1(self, stepSpec = None):
1575  """ Enrich the schedule with the L1 simulation step"""
1576  assert(stepSpec == None)
1577  self.loadAndRemember(self.L1EMDefaultCFF)
1578  self.scheduleSequence('SimL1Emulator','L1simulation_step')
1579  return
1580 
assert(be >=bs)

◆ prepare_L1HwVal()

def ConfigBuilder.ConfigBuilder.prepare_L1HwVal (   self,
  stepSpec = 'L1HwVal' 
)
Enrich the schedule with L1 HW validation 

Definition at line 1672 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.L1HwValDefaultCFF, ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_L1Reco(), and print().

Referenced by ConfigBuilder.ConfigBuilder.prepare_PATFILTER().

1672  def prepare_L1HwVal(self, stepSpec = 'L1HwVal'):
1673  ''' Enrich the schedule with L1 HW validation '''
1674  self.loadDefaultOrSpecifiedCFF(stepSpec,self.L1HwValDefaultCFF)
1675  print('\n\n\n DEPRECATED this has no action \n\n\n')
1676  return
1677 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

◆ prepare_L1Reco()

def ConfigBuilder.ConfigBuilder.prepare_L1Reco (   self,
  stepSpec = "L1Reco" 
)
Enrich the schedule with L1 reconstruction 

Definition at line 1678 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.L1RecoDefaultCFF, ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_L1TrackTrigger(), and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_L1HwVal().

1678  def prepare_L1Reco(self, stepSpec = "L1Reco"):
1679  ''' Enrich the schedule with L1 reconstruction '''
1680  _,_l1recoSeq,_ = self.loadDefaultOrSpecifiedCFF(stepSpec,self.L1RecoDefaultCFF)
1681  self.scheduleSequence(_l1recoSeq,'L1Reco_step')
1682  return
1683 

◆ prepare_L1REPACK()

def ConfigBuilder.ConfigBuilder.prepare_L1REPACK (   self,
  stepSpec = None 
)
Enrich the schedule with the L1 simulation step, running the L1 emulator on data unpacked from the RAW collection, and repacking the result in a new RAW collection

Definition at line 1581 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.loadAndRemember(), ConfigBuilder.ConfigBuilder.prepare_HLT(), print(), ConfigBuilder.ConfigBuilder.renameInputTagsInSequence(), and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_L1().

1581  def prepare_L1REPACK(self, stepSpec = None):
1582  """ Enrich the schedule with the L1 simulation step, running the L1 emulator on data unpacked from the RAW collection, and repacking the result in a new RAW collection"""
1583  supported = ['GT','GT1','GT2','GCTGT','Full','FullSimTP','FullMC','Full2015Data','uGT','CalouGT']
1584  if stepSpec in supported:
1585  self.loadAndRemember('Configuration/StandardSequences/SimL1EmulatorRepack_%s_cff'% stepSpec)
1586  if self._options.scenario == 'HeavyIons':
1587  self.renameInputTagsInSequence("SimL1Emulator","rawDataCollector","rawDataRepacker")
1588  self.scheduleSequence('SimL1Emulator','L1RePack_step')
1589  else:
1590  print("L1REPACK with '",stepSpec,"' is not supported! Supported choices are: ",supported)
1591  raise Exception('unsupported feature')
1592 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

◆ prepare_L1TrackTrigger()

def ConfigBuilder.ConfigBuilder.prepare_L1TrackTrigger (   self,
  stepSpec = "L1TrackTrigger" 
)
Enrich the schedule with L1 reconstruction 

Definition at line 1684 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.L1TrackTriggerDefaultCFF, ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_FILTER(), and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_L1Reco().

1684  def prepare_L1TrackTrigger(self, stepSpec = "L1TrackTrigger"):
1685  ''' Enrich the schedule with L1 reconstruction '''
1686  _,_l1tracktriggerSeq,_ = self.loadDefaultOrSpecifiedCFF(stepSpec,self.L1TrackTriggerDefaultCFF)
1687  self.scheduleSequence(_l1tracktriggerSeq,'L1TrackTrigger_step')
1688  return
1689 

◆ prepare_LHE()

def ConfigBuilder.ConfigBuilder.prepare_LHE (   self,
  stepSpec = None 
)

Definition at line 1398 of file ConfigBuilder.py.

1398  def prepare_LHE(self, stepSpec = None):
1399  #load the fragment
1400 
1401  loadFragment = self._options.evt_type.replace('.py','',).replace('.','_').replace('python/','').replace('/','.')
1402  print("Loading lhe fragment from",loadFragment)
1403  __import__(loadFragment)
1404  self.process.load(loadFragment)
1405 
1406  self._options.inlineObjets+=','+stepSpec
1407 
1408  getattr(self.process,stepSpec).nEvents = int(self._options.number)
1409 
1410  #schedule it
1411  self.process.lhe_step = cms.Path( getattr( self.process,stepSpec) )
1412  self.excludedPaths.append("lhe_step")
1413  self.schedule.append( self.process.lhe_step )
1414 
def replace(string, replacements)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
def load(fileName)
Definition: svgfig.py:547

◆ prepare_NANO()

def ConfigBuilder.ConfigBuilder.prepare_NANO (   self,
  stepSpec = '' 
)

Definition at line 1775 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, join(), ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.NANODefaultCFF, ConfigBuilder.ConfigBuilder.NANODefaultSeq, ConfigBuilder.ConfigBuilder.prepare_NANOGEN(), print(), and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_PATGEN().

1775  def prepare_NANO(self, stepSpec = '' ):
1776  print(f"in prepare_nano {stepSpec}")
1777  ''' Enrich the schedule with NANO '''
1778  _,_nanoSeq,_nanoCff = self.loadDefaultOrSpecifiedCFF(stepSpec,self.NANODefaultCFF,self.NANODefaultSeq)
1779  self.scheduleSequence(_nanoSeq,'nanoAOD_step')
1780  custom = "nanoAOD_customizeCommon"
1781  self._options.customisation_file.insert(0,'.'.join([_nanoCff,custom]))
1782  if self._options.hltProcess:
1783  if len(self._options.customise_commands) > 1:
1784  self._options.customise_commands = self._options.customise_commands + " \n"
1785  self._options.customise_commands = self._options.customise_commands + "process.unpackedPatTrigger.triggerResults= cms.InputTag( 'TriggerResults::"+self._options.hltProcess+"' )\n"
1786 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
static std::string join(char **cmd)
Definition: RemoteFile.cc:19

◆ prepare_NANOGEN()

def ConfigBuilder.ConfigBuilder.prepare_NANOGEN (   self,
  stepSpec = "nanoAOD" 
)
Enrich the schedule with NANOGEN 

Definition at line 1787 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, any(), join(), ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.NANOGENDefaultCFF, ConfigBuilder.ConfigBuilder.prepare_SKIM(), ConfigBuilder.ConfigBuilder.scheduleSequence(), and ConfigBuilder.ConfigBuilder.stepMap.

Referenced by ConfigBuilder.ConfigBuilder.prepare_NANO().

1787  def prepare_NANOGEN(self, stepSpec = "nanoAOD"):
1788  ''' Enrich the schedule with NANOGEN '''
1789  # TODO: Need to modify this based on the input file type
1790  fromGen = any([x in self.stepMap for x in ['LHE', 'GEN', 'AOD']])
1791  _,_nanogenSeq,_nanogenCff = self.loadDefaultOrSpecifiedCFF(stepSpec,self.NANOGENDefaultCFF)
1792  self.scheduleSequence(_nanogenSeq,'nanoAOD_step')
1793  custom = "customizeNanoGEN" if fromGen else "customizeNanoGENFromMini"
1794  if self._options.runUnscheduled:
1795  self._options.customisation_file_unsch.insert(0, '.'.join([_nanogenCff, custom]))
1796  else:
1797  self._options.customisation_file.insert(0, '.'.join([_nanogenCff, custom]))
1798 
bool any(const std::vector< T > &v, const T &what)
Definition: ECalSD.cc:37
static std::string join(char **cmd)
Definition: RemoteFile.cc:19

◆ prepare_PAT()

def ConfigBuilder.ConfigBuilder.prepare_PAT (   self,
  stepSpec = "miniAOD" 
)
Enrich the schedule with PAT 

Definition at line 1743 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, mps_setup.append, ConfigBuilder.ConfigBuilder.labelsToAssociate, ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.PATDefaultCFF, ConfigBuilder.ConfigBuilder.prepare_PATFILTER(), and ConfigBuilder.ConfigBuilder.prepare_PATGEN().

Referenced by ConfigBuilder.ConfigBuilder.prepare_RECOBEFMIX().

1743  def prepare_PAT(self, stepSpec = "miniAOD"):
1744  ''' Enrich the schedule with PAT '''
1745  self.prepare_PATFILTER(self)
1746  self.loadDefaultOrSpecifiedCFF(stepSpec,self.PATDefaultCFF)
1747  self.labelsToAssociate.append('patTask')
1748  if self._options.isData:
1749  self._options.customisation_file_unsch.insert(0,"PhysicsTools/PatAlgos/slimming/miniAOD_tools.miniAOD_customizeAllData")
1750  else:
1751  if self._options.fast:
1752  self._options.customisation_file_unsch.insert(0,"PhysicsTools/PatAlgos/slimming/miniAOD_tools.miniAOD_customizeAllMCFastSim")
1753  else:
1754  self._options.customisation_file_unsch.insert(0,"PhysicsTools/PatAlgos/slimming/miniAOD_tools.miniAOD_customizeAllMC")
1755 
1756  if self._options.hltProcess:
1757  if len(self._options.customise_commands) > 1:
1758  self._options.customise_commands = self._options.customise_commands + " \n"
1759  self._options.customise_commands = self._options.customise_commands + "process.patTrigger.processName = \""+self._options.hltProcess+"\"\n"
1760  self._options.customise_commands = self._options.customise_commands + "process.slimmedPatTrigger.triggerResults= cms.InputTag( 'TriggerResults::"+self._options.hltProcess+"' )\n"
1761  self._options.customise_commands = self._options.customise_commands + "process.patMuons.triggerResults= cms.InputTag( 'TriggerResults::"+self._options.hltProcess+"' )\n"
1762 
1763 # self.renameHLTprocessInSequence(sequence)
1764 
1765  return
1766 

◆ prepare_PATFILTER()

def ConfigBuilder.ConfigBuilder.prepare_PATFILTER (   self,
  stepSpec = None 
)

Definition at line 1666 of file ConfigBuilder.py.

References mps_setup.append, ConfigBuilder.ConfigBuilder.loadAndRemember(), ConfigBuilder.ConfigBuilder.prepare_L1HwVal(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, and ConfigBuilder.ConfigBuilder.schedule.

Referenced by ConfigBuilder.ConfigBuilder.prepare_PAT(), and ConfigBuilder.ConfigBuilder.prepare_RAW2DIGI().

1666  def prepare_PATFILTER(self, stepSpec = None):
1667  self.loadAndRemember("PhysicsTools/PatAlgos/slimming/metFilterPaths_cff")
1668  from PhysicsTools.PatAlgos.slimming.metFilterPaths_cff import allMetFilterPaths
1669  for filt in allMetFilterPaths:
1670  self.schedule.append(getattr(self.process,'Flag_'+filt))
1671 

◆ prepare_PATGEN()

def ConfigBuilder.ConfigBuilder.prepare_PATGEN (   self,
  stepSpec = "miniGEN" 
)
Enrich the schedule with PATGEN 

Definition at line 1767 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, mps_setup.append, ConfigBuilder.ConfigBuilder.labelsToAssociate, ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.PATGENDefaultCFF, and ConfigBuilder.ConfigBuilder.prepare_NANO().

Referenced by ConfigBuilder.ConfigBuilder.prepare_PAT().

1767  def prepare_PATGEN(self, stepSpec = "miniGEN"):
1768  ''' Enrich the schedule with PATGEN '''
1769  self.loadDefaultOrSpecifiedCFF(stepSpec,self.PATGENDefaultCFF) #this is unscheduled
1770  self.labelsToAssociate.append('patGENTask')
1771  if self._options.isData:
1772  raise Exception("PATGEN step can only run on MC")
1773  return
1774 

◆ prepare_POSTRECO()

def ConfigBuilder.ConfigBuilder.prepare_POSTRECO (   self,
  stepSpec = None 
)
Enrich the schedule with the postreco step 

Definition at line 1860 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.loadAndRemember(), ConfigBuilder.ConfigBuilder.POSTRECODefaultCFF, ConfigBuilder.ConfigBuilder.prepare_VALIDATION(), and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_USER().

1860  def prepare_POSTRECO(self, stepSpec = None):
1861  """ Enrich the schedule with the postreco step """
1862  self.loadAndRemember(self.POSTRECODefaultCFF)
1863  self.scheduleSequence('postreco_generator','postreco_step')
1864  return
1865 
1866 

◆ prepare_RAW2DIGI()

def ConfigBuilder.ConfigBuilder.prepare_RAW2DIGI (   self,
  stepSpec = "RawToDigi" 
)

Definition at line 1661 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_PATFILTER(), ConfigBuilder.ConfigBuilder.RAW2DIGIDefaultCFF, and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_RAW2RECO().

1661  def prepare_RAW2DIGI(self, stepSpec = "RawToDigi"):
1662  _,_raw2digiSeq,_ = self.loadDefaultOrSpecifiedCFF(stepSpec,self.RAW2DIGIDefaultCFF)
1663  self.scheduleSequence(_raw2digiSeq,'raw2digi_step')
1664  return
1665 

◆ prepare_RAW2RECO()

def ConfigBuilder.ConfigBuilder.prepare_RAW2RECO (   self,
  stepSpec = None 
)

Definition at line 1651 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.prepare_RAW2DIGI(), ConfigBuilder.ConfigBuilder.prepare_RECO(), and print().

Referenced by ConfigBuilder.ConfigBuilder.prepare_HLT().

1651  def prepare_RAW2RECO(self, stepSpec = None):
1652  if ','in stepSpec:
1653  seqReco,seqDigi=stepSpec.spli(',')
1654  else:
1655  print(f"RAW2RECO requires two specifications {stepSpec} insufficient")
1656 
1657  self.prepare_RAW2DIGI(seqDigi)
1658  self.prepare_RECO(seqReco)
1659  return
1660 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

◆ prepare_RECO()

def ConfigBuilder.ConfigBuilder.prepare_RECO (   self,
  stepSpec = "reconstruction" 
)
Enrich the schedule with reconstruction 

Definition at line 1722 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_RECOSIM(), ConfigBuilder.ConfigBuilder.RECODefaultCFF, and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_RAW2RECO().

1722  def prepare_RECO(self, stepSpec = "reconstruction"):
1723  ''' Enrich the schedule with reconstruction '''
1724  _,_recoSeq,_ = self.loadDefaultOrSpecifiedCFF(stepSpec,self.RECODefaultCFF)
1725  self.scheduleSequence(_recoSeq,'reconstruction_step')
1726  return
1727 

◆ prepare_RECOBEFMIX()

def ConfigBuilder.ConfigBuilder.prepare_RECOBEFMIX (   self,
  stepSpec = "reconstruction" 
)
Enrich the schedule with the part of reconstruction that is done before mixing in FastSim

Definition at line 1734 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_PAT(), print(), ConfigBuilder.ConfigBuilder.RECOBEFMIXDefaultCFF, ConfigBuilder.ConfigBuilder.RECOBEFMIXDefaultSeq, and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_RECOSIM().

1734  def prepare_RECOBEFMIX(self, stepSpec = "reconstruction"):
1735  ''' Enrich the schedule with the part of reconstruction that is done before mixing in FastSim'''
1736  if not self._options.fast:
1737  print("ERROR: this step is only implemented for FastSim")
1738  sys.exit()
1739  _,_recobefmixSeq,_ = self.loadDefaultOrSpecifiedCFF(self.RECOBEFMIXDefaultSeq,self.RECOBEFMIXDefaultCFF)
1740  self.scheduleSequence(_recobefmixSeq,'reconstruction_befmix_step')
1741  return
1742 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

◆ prepare_RECOSIM()

def ConfigBuilder.ConfigBuilder.prepare_RECOSIM (   self,
  stepSpec = "recosim" 
)
Enrich the schedule with reconstruction 

Definition at line 1728 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_RECOBEFMIX(), ConfigBuilder.ConfigBuilder.RECOSIMDefaultCFF, and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_RECO().

1728  def prepare_RECOSIM(self, stepSpec = "recosim"):
1729  ''' Enrich the schedule with reconstruction '''
1730  _,_recosimSeq,_ = self.loadDefaultOrSpecifiedCFF(stepSpec,self.RECOSIMDefaultCFF)
1731  self.scheduleSequence(_recosimSeq,'recosim_step')
1732  return
1733 

◆ prepare_REPACK()

def ConfigBuilder.ConfigBuilder.prepare_REPACK (   self,
  stepSpec = None 
)

Definition at line 1569 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_L1(), ConfigBuilder.ConfigBuilder.REPACKDefaultCFF, and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_DIGI2RAW().

1569  def prepare_REPACK(self, stepSpec = None):
1570  _,_repackSeq,_ = self.loadDefaultOrSpecifiedCFF(stepSpec,self.REPACKDefaultCFF)
1571  self.scheduleSequence(_repackSeq,'digi2repack_step')
1572  return
1573 

◆ prepare_SIM()

def ConfigBuilder.ConfigBuilder.prepare_SIM (   self,
  stepSpec = None 
)
Enrich the schedule with the simulation step

Definition at line 1504 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.executeAndRemember(), ConfigBuilder.ConfigBuilder.loadAndRemember(), ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_DIGI(), ConfigBuilder.ConfigBuilder.scheduleSequence(), and ConfigBuilder.ConfigBuilder.SIMDefaultCFF.

Referenced by ConfigBuilder.ConfigBuilder.prepare_GEN().

1504  def prepare_SIM(self, stepSpec = None):
1505  """ Enrich the schedule with the simulation step"""
1506  _,_simSeq,_ = self.loadDefaultOrSpecifiedCFF(stepSpec,self.SIMDefaultCFF)
1507  if not self._options.fast:
1508  if self._options.gflash==True:
1509  self.loadAndRemember("Configuration/StandardSequences/GFlashSIM_cff")
1510 
1511  if self._options.magField=='0T':
1512  self.executeAndRemember("process.g4SimHits.UseMagneticField = cms.bool(False)")
1513  else:
1514  if self._options.magField=='0T':
1515  self.executeAndRemember("process.fastSimProducer.detectorDefinition.magneticFieldZ = cms.untracked.double(0.)")
1516 
1517  self.scheduleSequence(_simSeq,'simulation_step')
1518  return
1519 

◆ prepare_SKIM()

def ConfigBuilder.ConfigBuilder.prepare_SKIM (   self,
  stepSpec = "all" 
)
Enrich the schedule with skimming fragments

Definition at line 1799 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.addExtraStream(), mps_setup.append, ConfigBuilder.ConfigBuilder.blacklist_paths, ConfigBuilder.ConfigBuilder.EVTCONTDefaultCFF, ConfigBuilder.ConfigBuilder.expandMapping(), join(), ConfigBuilder.ConfigBuilder.load(), ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_USER(), print(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, FastTimerService_cff.range, ConfigBuilder.ConfigBuilder.renameHLTprocessInSequence(), ConfigBuilder.ConfigBuilder.SKIMDefaultCFF, and ConfigBuilder.ConfigBuilder.stepMap.

Referenced by ConfigBuilder.ConfigBuilder.prepare_NANOGEN().

1799  def prepare_SKIM(self, stepSpec = "all"):
1800  ''' Enrich the schedule with skimming fragments'''
1801  skimConfig,sequence,_ = self.loadDefaultOrSpecifiedCFF(stepSpec,self.SKIMDefaultCFF)
1802 
1803  stdHLTProcName = 'HLT'
1804  newHLTProcName = self._options.hltProcess
1805  customiseForReHLT = (newHLTProcName or (stdHLTProcName in self.stepMap)) and (newHLTProcName != stdHLTProcName)
1806  if customiseForReHLT:
1807  print("replacing %s process name - step SKIM:%s will use '%s'" % (stdHLTProcName, sequence, newHLTProcName))
1808 
1809 
1810  from Configuration.Skimming.autoSkim import autoSkim
1811  skimlist = sequence.split('+')
1812  self.expandMapping(skimlist,autoSkim)
1813 
1814  #print("dictionary for skims:", skimConfig.__dict__)
1815  for skim in skimConfig.__dict__:
1816  skimstream = getattr(skimConfig, skim)
1817 
1818  # blacklist AlCa paths so that they do not appear in the cfg
1819  if isinstance(skimstream, cms.Path):
1820  self.blacklist_paths.append(skimstream)
1821  # if enabled, apply "hltProcess" renaming to Sequences
1822  elif isinstance(skimstream, cms.Sequence):
1823  if customiseForReHLT:
1824  self.renameHLTprocessInSequence(skim, proc = newHLTProcName, HLTprocess = stdHLTProcName, verbosityLevel = 0)
1825 
1826  if not isinstance(skimstream, cms.FilteredStream):
1827  continue
1828 
1829  shortname = skim.replace('SKIMStream','')
1830  if (sequence=="all"):
1831  self.addExtraStream(skim,skimstream)
1832  elif (shortname in skimlist):
1833  self.addExtraStream(skim,skimstream)
1834  #add a DQM eventcontent for this guy
1835  if self._options.datatier=='DQM':
1836  self.process.load(self.EVTCONTDefaultCFF)
1837  skimstreamDQM = cms.FilteredStream(
1838  responsible = skimstream.responsible,
1839  name = skimstream.name+'DQM',
1840  paths = skimstream.paths,
1841  selectEvents = skimstream.selectEvents,
1842  content = self._options.datatier+'EventContent',
1843  dataTier = cms.untracked.string(self._options.datatier)
1844  )
1845  self.addExtraStream(skim+'DQM',skimstreamDQM)
1846  for i in range(skimlist.count(shortname)):
1847  skimlist.remove(shortname)
1848 
1849  if (skimlist.__len__()!=0 and sequence!="all"):
1850  print('WARNING, possible typo with SKIM:'+'+'.join(skimlist))
1851  raise Exception('WARNING, possible typo with SKIM:'+'+'.join(skimlist))
1852 
1853 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
static std::string join(char **cmd)
Definition: RemoteFile.cc:19
def load(fileName)
Definition: svgfig.py:547

◆ prepare_USER()

def ConfigBuilder.ConfigBuilder.prepare_USER (   self,
  stepSpec = None 
)
Enrich the schedule with a user defined sequence 

Definition at line 1854 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_POSTRECO(), ConfigBuilder.ConfigBuilder.scheduleSequence(), and ConfigBuilder.ConfigBuilder.USERDefaultCFF.

Referenced by ConfigBuilder.ConfigBuilder.prepare_SKIM().

1854  def prepare_USER(self, stepSpec = None):
1855  ''' Enrich the schedule with a user defined sequence '''
1856  _,_userSeq,_ = self.loadDefaultOrSpecifiedCFF(stepSpec,self.USERDefaultCFF)
1857  self.scheduleSequence(_userSeq,'user_step')
1858  return
1859 

◆ prepare_VALIDATION()

def ConfigBuilder.ConfigBuilder.prepare_VALIDATION (   self,
  stepSpec = 'validation' 
)

Definition at line 1867 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, any(), mps_setup.append, ConfigBuilder.ConfigBuilder.executeAndRemember(), ConfigBuilder.ConfigBuilder.expandMapping(), edm::eventsetup::heterocontainer.insert(), ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), genParticles_cff.map, resolutioncreator_cfi.object, print(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, ConfigBuilder.ConfigBuilder.renameHLTprocessInSequence(), ConfigBuilder.ConfigBuilder.schedule, submitPVValidationJobs.split(), ConfigBuilder.ConfigBuilder.stepMap, and ConfigBuilder.ConfigBuilder.VALIDATIONDefaultCFF.

Referenced by ConfigBuilder.ConfigBuilder.prepare_POSTRECO().

1867  def prepare_VALIDATION(self, stepSpec = 'validation'):
1868  print(f"{stepSpec} in preparing validation")
1869  _,sequence,_ = self.loadDefaultOrSpecifiedCFF(stepSpec,self.VALIDATIONDefaultCFF)
1870  from Validation.Configuration.autoValidation import autoValidation
1871  #in case VALIDATION:something:somethingelse -> something,somethingelse
1872  if sequence.find(',')!=-1:
1873  prevalSeqName=sequence.split(',')[0].split('+')
1874  valSeqName=sequence.split(',')[1].split('+')
1875  self.expandMapping(prevalSeqName,autoValidation,index=0)
1876  self.expandMapping(valSeqName,autoValidation,index=1)
1877  else:
1878  if '@' in sequence:
1879  prevalSeqName=sequence.split('+')
1880  valSeqName=sequence.split('+')
1881  self.expandMapping(prevalSeqName,autoValidation,index=0)
1882  self.expandMapping(valSeqName,autoValidation,index=1)
1883  else:
1884  postfix=''
1885  if sequence:
1886  postfix='_'+sequence
1887  prevalSeqName=['prevalidation'+postfix]
1888  valSeqName=['validation'+postfix]
1889  if not hasattr(self.process,valSeqName[0]):
1890  prevalSeqName=['']
1891  valSeqName=[sequence]
1892 
1893  def NFI(index):
1894 
1895  if index==0:
1896  return ''
1897  else:
1898  return '%s'%index
1899 
1900 
1901  #rename the HLT process in validation steps
1902  if ('HLT' in self.stepMap and not self._options.fast) or self._options.hltProcess:
1903  for s in valSeqName+prevalSeqName:
1904  if s:
1905  self.renameHLTprocessInSequence(s)
1906  for (i,s) in enumerate(prevalSeqName):
1907  if s:
1908  setattr(self.process,'prevalidation_step%s'%NFI(i), cms.Path( getattr(self.process, s)) )
1909  self.schedule.append(getattr(self.process,'prevalidation_step%s'%NFI(i)))
1910 
1911  for (i,s) in enumerate(valSeqName):
1912  setattr(self.process,'validation_step%s'%NFI(i), cms.EndPath( getattr(self.process, s)))
1913  self.schedule.append(getattr(self.process,'validation_step%s'%NFI(i)))
1914 
1915  #needed in case the miniAODValidation sequence is run starting from AODSIM
1916  if 'PAT' in self.stepMap and not 'RECO' in self.stepMap:
1917  return
1918 
1919  if not 'DIGI' in self.stepMap and not self._options.fast and not any(map( lambda s : s.startswith('genvalid'), valSeqName)):
1920  if self._options.restoreRNDSeeds==False and not self._options.restoreRNDSeeds==True:
1921  self._options.restoreRNDSeeds=True
1922 
1923  if not 'DIGI' in self.stepMap and not self._options.isData and not self._options.fast:
1924  self.executeAndRemember("process.mix.playback = True")
1925  self.executeAndRemember("process.mix.digitizers = cms.PSet()")
1926  self.executeAndRemember("for a in process.aliases: delattr(process, a)")
1927  self._options.customisation_file.append("SimGeneral/MixingModule/fullMixCustomize_cff.setCrossingFrameOn")
1928 
1929  if hasattr(self.process,"genstepfilter") and len(self.process.genstepfilter.triggerConditions):
1930  #will get in the schedule, smoothly
1931  for (i,s) in enumerate(valSeqName):
1932  getattr(self.process,'validation_step%s'%NFI(i)).insert(0, self.process.genstepfilter)
1933 
1934  return
1935 
1936 
bool any(const std::vector< T > &v, const T &what)
Definition: ECalSD.cc:37
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
bool insert(Storage &iStorage, ItemType *iItem, const IdTag &iIdTag)
Definition: HCMethods.h:50

◆ profileOptions()

def ConfigBuilder.ConfigBuilder.profileOptions (   self)
addIgProfService
Function to add the igprof profile service so that you can dump in the middle
of the run.

Definition at line 277 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, alcaDQMUpload.encode(), createfilelist.int, and str.

Referenced by ConfigBuilder.ConfigBuilder.addCommon().

277  def profileOptions(self):
278  """
279  addIgProfService
280  Function to add the igprof profile service so that you can dump in the middle
281  of the run.
282  """
283  profileOpts = self._options.profile.split(':')
284  profilerStart = 1
285  profilerInterval = 100
286  profilerFormat = None
287  profilerJobFormat = None
288 
289  if len(profileOpts):
290  #type, given as first argument is unused here
291  profileOpts.pop(0)
292  if len(profileOpts):
293  startEvent = profileOpts.pop(0)
294  if not startEvent.isdigit():
295  raise Exception("%s is not a number" % startEvent)
296  profilerStart = int(startEvent)
297  if len(profileOpts):
298  eventInterval = profileOpts.pop(0)
299  if not eventInterval.isdigit():
300  raise Exception("%s is not a number" % eventInterval)
301  profilerInterval = int(eventInterval)
302  if len(profileOpts):
303  profilerFormat = profileOpts.pop(0)
304 
305 
306  if not profilerFormat:
307  profilerFormat = "%s___%s___%%I.gz" % (
308  self._options.evt_type.replace("_cfi", ""),
309  hashlib.md5(
310  (str(self._options.step) + str(self._options.pileup) + str(self._options.conditions) +
311  str(self._options.datatier) + str(self._options.profileTypeLabel)).encode('utf-8')
312  ).hexdigest()
313  )
314  if not profilerJobFormat and profilerFormat.endswith(".gz"):
315  profilerJobFormat = profilerFormat.replace(".gz", "_EndOfJob.gz")
316  elif not profilerJobFormat:
317  profilerJobFormat = profilerFormat + "_EndOfJob.gz"
318 
319  return (profilerStart,profilerInterval,profilerFormat,profilerJobFormat)
320 
def encode(args, files)
#define str(s)

◆ renameHLTprocessInSequence()

def ConfigBuilder.ConfigBuilder.renameHLTprocessInSequence (   self,
  sequence,
  proc = None,
  HLTprocess = 'HLT',
  verbosityLevel = 1 
)

Definition at line 2006 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder._options, ConfigBuilder.ConfigBuilder.additionalCommands, mps_setup.append, ConfigBuilder.ConfigBuilder.expandMapping(), print(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, and ConfigBuilder.ConfigBuilder.process.

Referenced by ConfigBuilder.ConfigBuilder.prepare_DQM(), ConfigBuilder.ConfigBuilder.prepare_SKIM(), ConfigBuilder.ConfigBuilder.prepare_VALIDATION(), and ConfigBuilder.ConfigBuilder.renameInputTagsInSequence().

2006  def renameHLTprocessInSequence(self, sequence, proc=None, HLTprocess='HLT', verbosityLevel=1):
2007  if proc == None:
2008  proc = self._options.hltProcess if self._options.hltProcess else self.process.name_()
2009  if proc == HLTprocess:
2010  return
2011  # look up all module in sequence
2012  if verbosityLevel > 0:
2013  print("replacing %s process name - sequence %s will use '%s'" % (HLTprocess, sequence, proc))
2014  verboseVisit = (verbosityLevel > 1)
2015  getattr(self.process,sequence).visit(
2016  ConfigBuilder.MassSearchReplaceProcessNameVisitor(HLTprocess, proc, whitelist = ("subSystemFolder",), verbose = verboseVisit))
2017  if 'from Configuration.Applications.ConfigBuilder import ConfigBuilder' not in self.additionalCommands:
2018  self.additionalCommands.append('from Configuration.Applications.ConfigBuilder import ConfigBuilder')
2019  self.additionalCommands.append(
2020  'process.%s.visit(ConfigBuilder.MassSearchReplaceProcessNameVisitor("%s", "%s", whitelist = ("subSystemFolder",), verbose = %s))'
2021  % (sequence, HLTprocess, proc, verboseVisit))
2022 
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

◆ renameInputTagsInSequence()

def ConfigBuilder.ConfigBuilder.renameInputTagsInSequence (   self,
  sequence,
  oldT = "rawDataCollector",
  newT = "rawDataRepacker" 
)

Definition at line 1996 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.additionalCommands, mps_setup.append, MassReplace.massSearchReplaceAnyInputTag(), print(), DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, and ConfigBuilder.ConfigBuilder.renameHLTprocessInSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_L1REPACK().

1996  def renameInputTagsInSequence(self,sequence,oldT="rawDataCollector",newT="rawDataRepacker"):
1997  print("Replacing all InputTag %s => %s"%(oldT,newT))
1998  from PhysicsTools.PatAlgos.tools.helpers import massSearchReplaceAnyInputTag
1999  massSearchReplaceAnyInputTag(getattr(self.process,sequence),oldT,newT)
2000  loadMe='from PhysicsTools.PatAlgos.tools.helpers import massSearchReplaceAnyInputTag'
2001  if not loadMe in self.additionalCommands:
2002  self.additionalCommands.append(loadMe)
2003  self.additionalCommands.append('massSearchReplaceAnyInputTag(process.%s,"%s","%s",False,True)'%(sequence,oldT,newT))
2004 
def massSearchReplaceAnyInputTag(sequence, oldInputTag, newInputTag, verbose=False, moduleLabelOnly=False, skipLabelTest=False)
Definition: MassReplace.py:79
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

◆ scheduleSequence()

def ConfigBuilder.ConfigBuilder.scheduleSequence (   self,
  seq,
  prefix,
  what = 'Path' 
)

Definition at line 1293 of file ConfigBuilder.py.

References mps_setup.append, ConfigBuilder.ConfigBuilder.conditionalPaths, ConfigBuilder.ConfigBuilder.nextScheduleIsConditional, DTT0WireWorkflow.DTT0WireWorkflow.process, DTVdriftWorkflow.DTvdriftWorkflow.process, DTTtrigWorkflow.DTttrigWorkflow.process, DTWorkflow.DTWorkflow.process, ConfigBuilder.ConfigBuilder.process, ConfigBuilder.ConfigBuilder.schedule, and ConfigBuilder.ConfigBuilder.scheduleSequenceAtEnd().

Referenced by ConfigBuilder.ConfigBuilder.loadDefaultOrSpecifiedCFF(), ConfigBuilder.ConfigBuilder.prepare_CFWRITER(), ConfigBuilder.ConfigBuilder.prepare_DATAMIX(), ConfigBuilder.ConfigBuilder.prepare_DIGI(), ConfigBuilder.ConfigBuilder.prepare_DIGI2RAW(), ConfigBuilder.ConfigBuilder.prepare_L1(), ConfigBuilder.ConfigBuilder.prepare_L1Reco(), ConfigBuilder.ConfigBuilder.prepare_L1REPACK(), ConfigBuilder.ConfigBuilder.prepare_L1TrackTrigger(), ConfigBuilder.ConfigBuilder.prepare_NANO(), ConfigBuilder.ConfigBuilder.prepare_NANOGEN(), ConfigBuilder.ConfigBuilder.prepare_POSTRECO(), ConfigBuilder.ConfigBuilder.prepare_RAW2DIGI(), ConfigBuilder.ConfigBuilder.prepare_RECO(), ConfigBuilder.ConfigBuilder.prepare_RECOBEFMIX(), ConfigBuilder.ConfigBuilder.prepare_RECOSIM(), ConfigBuilder.ConfigBuilder.prepare_REPACK(), ConfigBuilder.ConfigBuilder.prepare_SIM(), ConfigBuilder.ConfigBuilder.prepare_USER(), and ConfigBuilder.ConfigBuilder.scheduleSequenceAtEnd().

1293  def scheduleSequence(self,seq,prefix,what='Path'):
1294  if '*' in seq:
1295  #create only one path with all sequences in it
1296  for i,s in enumerate(seq.split('*')):
1297  if i==0:
1298  setattr(self.process,prefix,getattr(cms,what)( getattr(self.process, s) ))
1299  else:
1300  p=getattr(self.process,prefix)
1301  tmp = getattr(self.process, s)
1302  if isinstance(tmp, cms.Task):
1303  p.associate(tmp)
1304  else:
1305  p+=tmp
1306  self.schedule.append(getattr(self.process,prefix))
1307  return
1308  else:
1309  #create as many path as many sequences
1310  if not '+' in seq:
1311  if self.nextScheduleIsConditional:
1312  self.conditionalPaths.append(prefix)
1313  setattr(self.process,prefix,getattr(cms,what)( getattr(self.process, seq) ))
1314  self.schedule.append(getattr(self.process,prefix))
1315  else:
1316  for i,s in enumerate(seq.split('+')):
1317  sn=prefix+'%d'%(i)
1318  setattr(self.process,sn,getattr(cms,what)( getattr(self.process, s) ))
1319  self.schedule.append(getattr(self.process,sn))
1320  return
1321 

◆ scheduleSequenceAtEnd()

def ConfigBuilder.ConfigBuilder.scheduleSequenceAtEnd (   self,
  seq,
  prefix 
)

Definition at line 1322 of file ConfigBuilder.py.

References ConfigBuilder.ConfigBuilder.prepare_ALCAPRODUCER(), and ConfigBuilder.ConfigBuilder.scheduleSequence().

Referenced by ConfigBuilder.ConfigBuilder.prepare_ENDJOB(), ConfigBuilder.ConfigBuilder.prepare_GEN(), and ConfigBuilder.ConfigBuilder.scheduleSequence().

1322  def scheduleSequenceAtEnd(self,seq,prefix):
1323  self.scheduleSequence(seq,prefix,what='EndPath')
1324  return
1325 

Member Data Documentation

◆ _options

◆ addedObjects

◆ additionalCommands

◆ additionalOutputs

ConfigBuilder.ConfigBuilder.additionalOutputs

Definition at line 269 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare().

◆ ALCADefaultCFF

ConfigBuilder.ConfigBuilder.ALCADefaultCFF

◆ ALCADefaultSeq

ConfigBuilder.ConfigBuilder.ALCADefaultSeq

Definition at line 1044 of file ConfigBuilder.py.

◆ ALCAHARVESTDefaultCFF

ConfigBuilder.ConfigBuilder.ALCAHARVESTDefaultCFF

Definition at line 1032 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_ALCAHARVEST().

◆ ALCAHARVESTDefaultSeq

ConfigBuilder.ConfigBuilder.ALCAHARVESTDefaultSeq

Definition at line 1055 of file ConfigBuilder.py.

◆ AlCaPaths

ConfigBuilder.ConfigBuilder.AlCaPaths

◆ blacklist_paths

ConfigBuilder.ConfigBuilder.blacklist_paths

◆ CFWRITERDefaultCFF

ConfigBuilder.ConfigBuilder.CFWRITERDefaultCFF

Definition at line 1035 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_CFWRITER().

◆ CFWRITERDefaultSeq

ConfigBuilder.ConfigBuilder.CFWRITERDefaultSeq

Definition at line 1056 of file ConfigBuilder.py.

◆ conditionalPaths

ConfigBuilder.ConfigBuilder.conditionalPaths

◆ ConditionsDefaultCFF

ConfigBuilder.ConfigBuilder.ConditionsDefaultCFF

Definition at line 1034 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.addConditions().

◆ DATAMIXDefaultCFF

ConfigBuilder.ConfigBuilder.DATAMIXDefaultCFF

Definition at line 1039 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_DATAMIX().

◆ DATAMIXDefaultSeq

ConfigBuilder.ConfigBuilder.DATAMIXDefaultSeq

Definition at line 1049 of file ConfigBuilder.py.

◆ DIGI2RAWDefaultCFF

ConfigBuilder.ConfigBuilder.DIGI2RAWDefaultCFF

Definition at line 1013 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_DIGI2RAW().

◆ DIGI2RAWDefaultSeq

ConfigBuilder.ConfigBuilder.DIGI2RAWDefaultSeq

Definition at line 1050 of file ConfigBuilder.py.

◆ DIGIDefaultCFF

ConfigBuilder.ConfigBuilder.DIGIDefaultCFF

Definition at line 1012 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_DIGI().

◆ DIGIDefaultSeq

ConfigBuilder.ConfigBuilder.DIGIDefaultSeq

Definition at line 1048 of file ConfigBuilder.py.

◆ DQMDefaultSeq

ConfigBuilder.ConfigBuilder.DQMDefaultSeq

Definition at line 1067 of file ConfigBuilder.py.

◆ DQMOFFLINEDefaultCFF

ConfigBuilder.ConfigBuilder.DQMOFFLINEDefaultCFF

Definition at line 1030 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_DQM().

◆ DQMSaverCFF

ConfigBuilder.ConfigBuilder.DQMSaverCFF

Definition at line 2087 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_HARVESTING().

◆ ENDJOBDefaultCFF

ConfigBuilder.ConfigBuilder.ENDJOBDefaultCFF

Definition at line 1033 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_ENDJOB().

◆ ENDJOBDefaultSeq

ConfigBuilder.ConfigBuilder.ENDJOBDefaultSeq

Definition at line 1069 of file ConfigBuilder.py.

◆ EVTCONTDefaultCFF

ConfigBuilder.ConfigBuilder.EVTCONTDefaultCFF

◆ excludedPaths

ConfigBuilder.ConfigBuilder.excludedPaths

Definition at line 275 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare().

◆ GENDefaultCFF

ConfigBuilder.ConfigBuilder.GENDefaultCFF

Definition at line 1010 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_GEN().

◆ GENDefaultSeq

ConfigBuilder.ConfigBuilder.GENDefaultSeq

Definition at line 1046 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_GEN().

◆ GeometryCFF

ConfigBuilder.ConfigBuilder.GeometryCFF

Definition at line 1140 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.addStandardSequences().

◆ geometryDBLabel

ConfigBuilder.ConfigBuilder.geometryDBLabel

Definition at line 1141 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.addStandardSequences().

◆ HARVESTINGDefaultCFF

ConfigBuilder.ConfigBuilder.HARVESTINGDefaultCFF

Definition at line 1031 of file ConfigBuilder.py.

◆ HARVESTINGDefaultSeq

ConfigBuilder.ConfigBuilder.HARVESTINGDefaultSeq

Definition at line 1054 of file ConfigBuilder.py.

◆ HLTDefaultCFF

ConfigBuilder.ConfigBuilder.HLTDefaultCFF

Definition at line 1016 of file ConfigBuilder.py.

◆ HLTDefaultSeq

ConfigBuilder.ConfigBuilder.HLTDefaultSeq

Definition at line 1051 of file ConfigBuilder.py.

◆ imports

ConfigBuilder.ConfigBuilder.imports

◆ inliner

ConfigBuilder.ConfigBuilder.inliner

load the relevant part

needs to be in reverse order

print it in the configuration

Definition at line 1698 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_FILTER().

◆ L1DefaultSeq

ConfigBuilder.ConfigBuilder.L1DefaultSeq

Definition at line 1052 of file ConfigBuilder.py.

◆ L1EMDefaultCFF

ConfigBuilder.ConfigBuilder.L1EMDefaultCFF

Definition at line 1014 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_L1().

◆ L1HwValDefaultCFF

ConfigBuilder.ConfigBuilder.L1HwValDefaultCFF

Definition at line 1029 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_L1HwVal().

◆ L1HwValDefaultSeq

ConfigBuilder.ConfigBuilder.L1HwValDefaultSeq

Definition at line 1066 of file ConfigBuilder.py.

◆ L1MENUDefaultCFF

ConfigBuilder.ConfigBuilder.L1MENUDefaultCFF

Definition at line 1015 of file ConfigBuilder.py.

◆ L1RecoDefaultCFF

ConfigBuilder.ConfigBuilder.L1RecoDefaultCFF

Definition at line 1019 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_L1Reco().

◆ L1RecoDefaultSeq

ConfigBuilder.ConfigBuilder.L1RecoDefaultSeq

Definition at line 1058 of file ConfigBuilder.py.

◆ L1REPACKDefaultSeq

ConfigBuilder.ConfigBuilder.L1REPACKDefaultSeq

Definition at line 1053 of file ConfigBuilder.py.

◆ L1TrackTriggerDefaultCFF

ConfigBuilder.ConfigBuilder.L1TrackTriggerDefaultCFF

◆ L1TrackTriggerDefaultSeq

ConfigBuilder.ConfigBuilder.L1TrackTriggerDefaultSeq

Definition at line 1059 of file ConfigBuilder.py.

◆ labelsToAssociate

ConfigBuilder.ConfigBuilder.labelsToAssociate

◆ LHEDefaultSeq

ConfigBuilder.ConfigBuilder.LHEDefaultSeq

Definition at line 1045 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_GEN().

◆ magFieldCFF

ConfigBuilder.ConfigBuilder.magFieldCFF

Definition at line 1136 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.addStandardSequences().

◆ NANODefaultCFF

ConfigBuilder.ConfigBuilder.NANODefaultCFF

Definition at line 1024 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_NANO().

◆ NANODefaultSeq

ConfigBuilder.ConfigBuilder.NANODefaultSeq

Definition at line 1075 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_NANO().

◆ NANOGENDefaultCFF

ConfigBuilder.ConfigBuilder.NANOGENDefaultCFF

Definition at line 1025 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_NANOGEN().

◆ NANOGENDefaultSeq

ConfigBuilder.ConfigBuilder.NANOGENDefaultSeq

Definition at line 1074 of file ConfigBuilder.py.

◆ nextScheduleIsConditional

ConfigBuilder.ConfigBuilder.nextScheduleIsConditional

put the filtering path in the schedule

Definition at line 273 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.scheduleSequence().

◆ PATDefaultCFF

ConfigBuilder.ConfigBuilder.PATDefaultCFF

Definition at line 1023 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_PAT().

◆ PATDefaultSeq

ConfigBuilder.ConfigBuilder.PATDefaultSeq

Definition at line 1071 of file ConfigBuilder.py.

◆ PATGENDefaultCFF

ConfigBuilder.ConfigBuilder.PATGENDefaultCFF

Definition at line 1087 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_PATGEN().

◆ PATGENDefaultSeq

ConfigBuilder.ConfigBuilder.PATGENDefaultSeq

Definition at line 1072 of file ConfigBuilder.py.

◆ POSTRECODefaultCFF

ConfigBuilder.ConfigBuilder.POSTRECODefaultCFF

Definition at line 1027 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_POSTRECO().

◆ POSTRECODefaultSeq

ConfigBuilder.ConfigBuilder.POSTRECODefaultSeq

Definition at line 1065 of file ConfigBuilder.py.

◆ process

ConfigBuilder.ConfigBuilder.process

adding standard sequences might change the inputEventContent option and therefore needs to be finalized after

Definition at line 250 of file ConfigBuilder.py.

Referenced by adaptToRunAtMiniAOD.adaptToRunAtMiniAOD.__init__(), ConfigBuilder.ConfigBuilder.addCommon(), ConfigBuilder.ConfigBuilder.addConditions(), ConfigBuilder.ConfigBuilder.addCustomise(), ConfigBuilder.ConfigBuilder.addMaxEvents(), ConfigBuilder.ConfigBuilder.addOutput(), ConfigBuilder.ConfigBuilder.addSource(), ConfigBuilder.ConfigBuilder.addStandardSequences(), ConfigBuilder.ConfigBuilder.build_production_info(), ConfigBuilder.ConfigBuilder.completeInputCommand(), adaptToRunAtMiniAOD.adaptToRunAtMiniAOD.convertModuleToMiniAODInput(), ConfigBuilder.ConfigBuilder.finalizeFastSimHLT(), ConfigBuilder.ConfigBuilder.load(), ConfigBuilder.ConfigBuilder.loadAndRemember(), runTauIdMVA.TauIDEmbedder.loadMVA_WPs_run2_2017(), ConfigBuilder.ConfigBuilder.prepare(), ConfigBuilder.ConfigBuilder.prepare_DIGI(), ConfigBuilder.ConfigBuilder.prepare_DQM(), ConfigBuilder.ConfigBuilder.prepare_GEN(), ConfigBuilder.ConfigBuilder.prepare_HLT(), ConfigBuilder.ConfigBuilder.prepare_PATFILTER(), ConfigBuilder.ConfigBuilder.prepare_SKIM(), ConfigBuilder.ConfigBuilder.prepare_VALIDATION(), runTauIdMVA.TauIDEmbedder.processDeepProducer(), ConfigBuilder.ConfigBuilder.renameHLTprocessInSequence(), ConfigBuilder.ConfigBuilder.renameInputTagsInSequence(), runTauIdMVA.TauIDEmbedder.runTauID(), ConfigBuilder.ConfigBuilder.scheduleSequence(), and runTauIdMVA.TauIDEmbedder.tauIDMVAinputs().

◆ productionFilterSequence

ConfigBuilder.ConfigBuilder.productionFilterSequence

put it before all the other paths

Definition at line 271 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare(), and ConfigBuilder.ConfigBuilder.prepare_GEN().

◆ pythonCfgCode

ConfigBuilder.ConfigBuilder.pythonCfgCode

◆ RAW2DIGIDefaultCFF

ConfigBuilder.ConfigBuilder.RAW2DIGIDefaultCFF

Definition at line 1017 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_RAW2DIGI().

◆ RAW2DIGIDefaultSeq

ConfigBuilder.ConfigBuilder.RAW2DIGIDefaultSeq

Definition at line 1057 of file ConfigBuilder.py.

◆ RAW2RECODefaultSeq

ConfigBuilder.ConfigBuilder.RAW2RECODefaultSeq

Definition at line 1130 of file ConfigBuilder.py.

◆ RECOBEFMIXDefaultCFF

ConfigBuilder.ConfigBuilder.RECOBEFMIXDefaultCFF

Definition at line 1191 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_RECOBEFMIX().

◆ RECOBEFMIXDefaultSeq

ConfigBuilder.ConfigBuilder.RECOBEFMIXDefaultSeq

Definition at line 1192 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_RECOBEFMIX().

◆ RECODefaultCFF

ConfigBuilder.ConfigBuilder.RECODefaultCFF

Definition at line 1021 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_RECO().

◆ RECODefaultSeq

ConfigBuilder.ConfigBuilder.RECODefaultSeq

Definition at line 1061 of file ConfigBuilder.py.

◆ RECOSIMDefaultCFF

ConfigBuilder.ConfigBuilder.RECOSIMDefaultCFF

Definition at line 1022 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_RECOSIM().

◆ RECOSIMDefaultSeq

ConfigBuilder.ConfigBuilder.RECOSIMDefaultSeq

Definition at line 1064 of file ConfigBuilder.py.

◆ REDIGIDefaultSeq

ConfigBuilder.ConfigBuilder.REDIGIDefaultSeq

Definition at line 1207 of file ConfigBuilder.py.

◆ REPACKDefaultCFF

ConfigBuilder.ConfigBuilder.REPACKDefaultCFF

Definition at line 1036 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_REPACK().

◆ REPACKDefaultSeq

ConfigBuilder.ConfigBuilder.REPACKDefaultSeq

Definition at line 1070 of file ConfigBuilder.py.

◆ runsAndWeights

ConfigBuilder.ConfigBuilder.runsAndWeights

drop LHEXMLStringProduct on input to save memory if appropriate

Definition at line 538 of file ConfigBuilder.py.

◆ runsAndWeightsInt

ConfigBuilder.ConfigBuilder.runsAndWeightsInt

Definition at line 559 of file ConfigBuilder.py.

◆ schedule

◆ scheduleIndexOfFirstHLTPath

ConfigBuilder.ConfigBuilder.scheduleIndexOfFirstHLTPath

◆ SIMDefaultCFF

ConfigBuilder.ConfigBuilder.SIMDefaultCFF

Definition at line 1011 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_SIM().

◆ SIMDefaultSeq

ConfigBuilder.ConfigBuilder.SIMDefaultSeq

Definition at line 1047 of file ConfigBuilder.py.

◆ SimGeometryCFF

ConfigBuilder.ConfigBuilder.SimGeometryCFF

Definition at line 1166 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.addStandardSequences().

◆ SKIMDefaultCFF

ConfigBuilder.ConfigBuilder.SKIMDefaultCFF

Definition at line 1026 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_SKIM().

◆ stepKeys

ConfigBuilder.ConfigBuilder.stepKeys

Definition at line 230 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.addStandardSequences().

◆ stepMap

◆ USERDefaultCFF

ConfigBuilder.ConfigBuilder.USERDefaultCFF

Definition at line 1133 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_USER().

◆ USERDefaultSeq

ConfigBuilder.ConfigBuilder.USERDefaultSeq

Definition at line 1132 of file ConfigBuilder.py.

◆ VALIDATIONDefaultCFF

ConfigBuilder.ConfigBuilder.VALIDATIONDefaultCFF

Definition at line 1028 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare_VALIDATION().

◆ VALIDATIONDefaultSeq

ConfigBuilder.ConfigBuilder.VALIDATIONDefaultSeq

Definition at line 1068 of file ConfigBuilder.py.

◆ with_input

ConfigBuilder.ConfigBuilder.with_input

Definition at line 254 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare().

◆ with_output

ConfigBuilder.ConfigBuilder.with_output

Definition at line 249 of file ConfigBuilder.py.

Referenced by ConfigBuilder.ConfigBuilder.prepare().