CMS 3D CMS Logo

Classes | Public Member Functions | Public Attributes | Private Attributes

ConfigBuilder::ConfigBuilder Class Reference

List of all members.

Classes

class  MassSearchReplaceProcessNameVisitor

Public Member Functions

def __init__
def addCommon
def addConditions
def addCustomise
def addExtraStream
def addMaxEvents
def addOutput
def addSource
def addStandardSequences
def build_production_info
def define_Configs
def executeAndRemember
def finalizeFastSimHLT
def loadAndRemember
def loadDefaultOrSpecifiedCFF
def prepare
def prepare_ALCA
def prepare_ALCAHARVEST
def prepare_ALCAOUTPUT
def prepare_ALCAPRODUCER
def prepare_CFWRITER
def prepare_DATAMIX
def prepare_DIGI
def prepare_DIGI2RAW
def prepare_DQM
def prepare_ENDJOB
def prepare_FASTSIM
def prepare_GEN
def prepare_HARVESTING
def prepare_HLT
def prepare_L1
def prepare_L1HwVal
def prepare_L1Reco
def prepare_POSTRECO
def prepare_RAW2DIGI
def prepare_RAW2RECO
def prepare_RECO
def prepare_REPACK
def prepare_SIM
def prepare_SKIM
def prepare_VALIDATION
def renameHLTprocessInSequence
def scheduleSequence
def scheduleSequenceAtEnd

Public Attributes

 addedObjects
 additionalCommands
 additionalOutputs
 ALCADefaultCFF
 ALCADefaultSeq
 ALCAHARVESTDefaultCFF
 ALCAHARVESTDefaultSeq
 blacklist_paths
 CFWRITERDefaultCFF
 CFWRITERDefaultSeq
 ConditionsDefaultCFF
 DATAMIXDefaultCFF
 DATAMIXDefaultSeq
 DIGI2RAWDefaultCFF
 DIGI2RAWDefaultSeq
 DIGIDefaultCFF
 DIGIDefaultSeq
 DQMDefaultSeq
 DQMOFFLINEDefaultCFF
 EDMtoMECFF
 ENDJOBDefaultCFF
 ENDJOBDefaultSeq
 eventcontent
 EVTCONTDefaultCFF
 FASTSIMDefaultSeq
 GENDefaultCFF
 GENDefaultSeq
 GeometryCFF
 HARVESTINGDefaultCFF
 HARVESTINGDefaultSeq
 HLTDefaultCFF
 HLTDefaultSeq
 imports
 L1DefaultSeq
 L1EMDefaultCFF
 L1HwValDefaultCFF
 L1HwValDefaultSeq
 L1MENUDefaultCFF
 L1RecoDefaultCFF
 L1RecoDefaultSeq
 magFieldCFF
 PATLayer0DefaultSeq
 POSTRECODefaultCFF
 POSTRECODefaultSeq
 process
 productionFilterSequence
 pythonCfgCode
 RAW2DIGIDefaultCFF
 RAW2DIGIDefaultSeq
 RAW2RECODefaultSeq
 RECODefaultCFF
 RECODefaultSeq
 REPACKDefaultCFF
 REPACKDefaultSeq
 schedule
 SIMDefaultCFF
 SIMDefaultSeq
 SKIMDefaultCFF
 stepMap
 VALIDATIONDefaultCFF
 VALIDATIONDefaultSeq
 with_input
 with_output

Private Attributes

 _options

Detailed Description

The main building routines 

Definition at line 65 of file ConfigBuilder.py.


Constructor & Destructor Documentation

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

Definition at line 68 of file ConfigBuilder.py.

00069                                                                                          :
00070         """options taken from old cmsDriver and optparse """
00071 
00072         options.outfile_name = options.dirout+options.fileout
00073 
00074         self._options = options
00075 
00076         if self._options.isData and options.isMC:
00077                 raise Exception("ERROR: You may specify only --data or --mc, not both")
00078         if not self._options.conditions:
00079                 raise Exception("ERROR: No conditions given!\nPlease specify conditions. E.g. via --conditions=IDEAL_30X::All")
00080 
00081         # what steps are provided by this class?
00082         stepList = [re.sub(r'^prepare_', '', methodName) for methodName in ConfigBuilder.__dict__ if methodName.startswith('prepare_')]
00083         self.stepMap={}
00084         for step in self._options.step.split(","):
00085                 if step=='': continue
00086                 stepParts = step.split(":")
00087                 stepName = stepParts[0]
00088                 if stepName not in stepList:
00089                         raise ValueError("Step "+stepName+" unknown")
00090                 if len(stepParts)==1:
00091                         self.stepMap[stepName]=""
00092                 elif len(stepParts)==2:
00093                         self.stepMap[stepName]=stepParts[1].split('+')
00094                 elif len(stepParts)==3:
00095                         self.stepMap[stepName]=(stepParts[2].split('+'),stepParts[1])
00096                 else:
00097                         raise ValueError("Step definition "+step+" invalid")
00098         #print "map of steps is:",self.stepMap
00099 
00100         self.with_output = with_output
00101         if hasattr(self._options,"no_output_flag") and self._options.no_output_flag:
00102                 self.with_output = False
00103         self.with_input = with_input
00104         if process == None:
00105             self.process = cms.Process(self._options.name)
00106         else:
00107             self.process = process
00108         self.imports = []
00109         self.define_Configs()
00110         self.schedule = list()
00111 
00112         # we are doing three things here:
00113         # creating a process to catch errors
00114         # building the code to re-create the process
00115 
00116         self.additionalCommands = []
00117         # TODO: maybe a list of to be dumped objects would help as well
00118         self.blacklist_paths = []
00119         self.addedObjects = []
00120         self.additionalOutputs = {}
00121 
00122         self.productionFilterSequence = None
00123 
00124 


Member Function Documentation

def ConfigBuilder::ConfigBuilder::addCommon (   self)

Definition at line 141 of file ConfigBuilder.py.

00142                        :
00143             if 'HARVESTING' in self.stepMap.keys() or 'ALCAHARVEST' in self.stepMap.keys():
00144                     self.process.options = cms.untracked.PSet( Rethrow = cms.untracked.vstring('ProductNotFound'),fileMode = cms.untracked.string('FULLMERGE'))
00145             else:
00146                     self.process.options = cms.untracked.PSet( )
00147             self.addedObjects.append(("","options"))
00148 
00149             if self._options.lazy_download:
00150                     self.process.AdaptorConfig = cms.Service("AdaptorConfig",
00151                                                              stats = cms.untracked.bool(True),
00152                                                              enable = cms.untracked.bool(True),
00153                                                              cacheHint = cms.untracked.string("lazy-download"),
00154                                                              readHint = cms.untracked.string("read-ahead-buffered")
00155                                                              )
00156                     self.addedObjects.append(("Setup lazy download","AdaptorConfig"))
00157 
00158             #self.process.cmsDriverCommand = cms.untracked.PSet( command=cms.untracked.string('cmsDriver.py '+self._options.arguments) )
00159             #self.addedObjects.append(("what cmsDriver command was used","cmsDriverCommand"))

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

Definition at line 436 of file ConfigBuilder.py.

00437                            :
00438         """Add conditions to the process"""
00439 
00440         if 'auto:' in self._options.conditions:
00441                 from autoCond import autoCond
00442                 key=self._options.conditions.split(':')[-1]
00443                 if key not in autoCond:
00444                         raise Exception('no correspondance for '+self._options.conditions+'\n available keys are'+','.join(autoCond.keys()))
00445                 else:
00446                         self._options.conditions = autoCond[key]
00447 
00448         # the option can be a list of GT name and connection string
00449 
00450         #it is insane to keep this replace in: dependency on changes in DataProcessing
00451         conditions = self._options.conditions.replace("FrontierConditions_GlobalTag,",'').split(',')
00452         gtName = str( conditions[0] )
00453         if len(conditions) > 1:
00454           connect   = str( conditions[1] )
00455         if len(conditions) > 2:
00456           pfnPrefix = str( conditions[2] )
00457 
00458         self.loadAndRemember(self.ConditionsDefaultCFF)
00459 
00460         # set the global tag
00461         self.executeAndRemember("process.GlobalTag.globaltag = '%s'" % gtName)
00462         if len(conditions) > 1:
00463             self.executeAndRemember("process.GlobalTag.connect   = '%s'" % connect)
00464         if len(conditions) > 2:
00465             self.executeAndRemember("process.GlobalTag.pfnPrefix = cms.untracked.string('%s')" % pfnPrefix)
00466 
00467         if self._options.slhc:
00468                 self.loadAndRemember("SLHCUpgradeSimulations/Geometry/fakeConditions_%s_cff"%(self._options.slhc,))
00469 
00470         if self._options.custom_conditions!="":
00471                 specs=self._options.custom_conditions.split('+')
00472                 self.executeAndRemember("process.GlobalTag.toGet = cms.VPSet()")
00473                 for spec in specs:
00474                         #format is tag=<...>,record=<...>,connect=<...>,label=<...> with connect and label optionnal
00475                         items=spec.split(',')
00476                         payloadSpec={}
00477                         allowedFields=['tag','record','connect','label']
00478                         for i,item in enumerate(items):
00479                                 if '=' in item:
00480                                         field=item.split('=')[0]
00481                                         if not field in allowedFields:
00482                                                 raise Exception('in --custom_conditions, '+field+' is not a valid field')
00483                                         payloadSpec[field]=item.split('=')[1]
00484                                 else:
00485                                         payloadSpec[allowedFields[i]]=item
00486                         if (not 'record' in payloadSpec) or (not 'tag' in payloadSpec):
00487                                 raise Exception('conditions cannot be customised with: '+repr(payloadSpec)+' no record or tag field available')
00488                         payloadSpecToAppend=''
00489                         for i,item in enumerate(allowedFields):
00490                                 if not item in payloadSpec: continue
00491                                 if not payloadSpec[item]: continue
00492                                 if i<2: untracked=''
00493                                 else: untracked='untracked.'
00494                                 payloadSpecToAppend+='%s=cms.%sstring("%s"),'%(item,untracked,payloadSpec[item])
00495                         print 'customising the GlogalTag with:',payloadSpecToAppend
00496                         self.executeAndRemember('process.GlobalTag.toGet.append(cms.PSet(%s))'%(payloadSpecToAppend,))
00497                                                 

def ConfigBuilder::ConfigBuilder::addCustomise (   self)
Include the customise code 

Definition at line 498 of file ConfigBuilder.py.

00499                           :
00500         """Include the customise code """
00501 
00502         custOpt=self._options.customisation_file.split(",")
00503         custMap={}
00504         for opt in custOpt:
00505                 if opt.count('.')>1:
00506                         raise Exception("more than . in the specification:"+opt)
00507                 fileName=opt.split('.')[0]
00508                 if opt.count('.')==0:   rest='customise'
00509                 else:
00510                         rest=opt.split('.')[1]
00511                         if rest=='py': rest='customise' #catch the case of --customise file.py
00512                         
00513                 if fileName in custMap:
00514                         custMap[fileName].extend(rest.split('+'))
00515                 else:
00516                         custMap[fileName]=rest.split('+')
00517                 
00518         if len(custMap)==0:
00519                 final_snippet='\n'
00520         else:
00521                 final_snippet='\n# customisation of the process.\n'
00522 
00523         allFcn=[]
00524         for opt in custMap:
00525                 allFcn.extend(custMap[opt])
00526         for fcn in allFcn:
00527                 if allFcn.count(fcn)!=1:
00528                         raise Exception("cannot specify twice "+fcn+" as a customisation method") 
00529 
00530         for f in custMap:
00531                 # let python search for that package and do syntax checking at the same time
00532                 packageName = f.replace(".py","").replace("/",".")
00533                 __import__(packageName)
00534                 package = sys.modules[packageName]
00535 
00536                 # now ask the package for its definition and pick .py instead of .pyc
00537                 customiseFile = re.sub(r'\.pyc$', '.py', package.__file__)
00538 
00539                 final_snippet+='\n# Automatic addition of the customisation function from '+packageName+'\n'
00540                 if self._options.inline_custom:
00541                         for line in file(customiseFile,'r'):
00542                                 if "import FWCore.ParameterSet.Config" in line:
00543                                         continue
00544                                 final_snippet += line
00545                 else:
00546                         final_snippet += 'from %s import %s \n'%(packageName,','.join(custMap[f]))
00547                 for fcn in custMap[f]:
00548                         print "customising the process with",fcn,"from",f
00549                         if not hasattr(package,fcn):
00550                                 #bound to fail at run time
00551                                 raise Exception("config "+f+" has no function "+fcn)
00552                         final_snippet += "\n#call to customisation function "+fcn+" imported from "+packageName
00553                         final_snippet += "\nprocess = %s(process)\n"%(fcn,)
00554 
00555         final_snippet += '\n# End of customisation functions\n'
00556 
00557         return final_snippet

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

Definition at line 738 of file ConfigBuilder.py.

00739                                                         :
00740             # define output module and go from there
00741             output = cms.OutputModule("PoolOutputModule")
00742             if stream.selectEvents.parameters_().__len__()!=0:
00743                     output.SelectEvents = stream.selectEvents
00744             else:
00745                     output.SelectEvents = cms.untracked.PSet()
00746                     output.SelectEvents.SelectEvents=cms.vstring()
00747                     if isinstance(stream.paths,tuple):
00748                             for path in stream.paths:
00749                                     output.SelectEvents.SelectEvents.append(path.label())
00750                     else:
00751                             output.SelectEvents.SelectEvents.append(stream.paths.label())
00752 
00753 
00754 
00755             if isinstance(stream.content,str):
00756                     evtPset=getattr(self.process,stream.content)
00757                     for p in evtPset.parameters_():
00758                             setattr(output,p,getattr(evtPset,p))
00759                     if not self._options.inlineEventContent:
00760                             def doNotInlineEventContent(instance,label = "process."+stream.content+".outputCommands"):
00761                                     return label
00762                             output.outputCommands.__dict__["dumpPython"] = doNotInlineEventContent
00763             else:
00764                     output.outputCommands = stream.content
00765 
00766 
00767             output.fileName = cms.untracked.string(self._options.dirout+stream.name+'.root')
00768 
00769             output.dataset  = cms.untracked.PSet( dataTier = stream.dataTier,
00770                                                   filterName = cms.untracked.string(stream.name))
00771 
00772             if self._options.filtername:
00773                     output.dataset.filterName= cms.untracked.string(self._options.filtername+"_"+stream.name)
00774 
00775             #add an automatic flushing to limit memory consumption
00776             output.eventAutoFlushCompressedSize=cms.untracked.int32(5*1024*1024)
00777 
00778             if workflow in ("producers,full"):
00779                     if isinstance(stream.paths,tuple):
00780                             for path in stream.paths:
00781                                     self.schedule.append(path)
00782                     else:
00783                             self.schedule.append(stream.paths)
00784 
00785             # in case of relvals we don't want to have additional outputs
00786             if (not self._options.relval) and workflow in ("full","output"):
00787                     self.additionalOutputs[name] = output
00788                     setattr(self.process,name,output)
00789             
00790             if workflow == 'output':
00791                     # adjust the select events to the proper trigger results from previous process
00792                     filterList = output.SelectEvents.SelectEvents
00793                     for i, filter in enumerate(filterList):
00794                             filterList[i] = filter+":"+self._options.triggerResultsProcess
00795 
00796             return output
    
def ConfigBuilder::ConfigBuilder::addMaxEvents (   self)
Here we decide how many evts will be processed

Definition at line 160 of file ConfigBuilder.py.

00161                           :
00162         """Here we decide how many evts will be processed"""
00163         self.process.maxEvents=cms.untracked.PSet(input=cms.untracked.int32(int(self._options.number)))
00164         self.addedObjects.append(("","maxEvents"))

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

Definition at line 231 of file ConfigBuilder.py.

00232                        :
00233         """ Add output module to the process """
00234         result=""
00235         streamTypes=self.eventcontent.split(',')
00236         tiers=self._options.datatier.split(',')
00237         if not self._options.outputDefinition and len(streamTypes)!=len(tiers):
00238                 raise Exception("number of event content arguments does not match number of datatier arguments")
00239         if self._options.outputDefinition:
00240                 if self._options.datatier:
00241                         print "--datatier & --eventcontent options ignored"
00242                         
00243                 def anyOf(listOfKeys,dict,opt=None):
00244                         for k in listOfKeys:
00245                                 if k in dict:
00246                                         toReturn=dict[k]
00247                                         dict.pop(k)
00248                                         return toReturn
00249                         if opt!=None:
00250                                 return opt
00251                         else:
00252                                 raise Exception("any of "+','.join(listOfKeys)+" are mandatory entries of --output options")
00253                                 
00254                 #new output convention with a list of dict
00255                 outList = eval(self._options.outputDefinition)
00256                 for outDefDict in outList:
00257                         outDefDictStr=outDefDict.__str__()
00258                         if not isinstance(outDefDict,dict):
00259                                 raise Exception("--output needs to be passed a list of dict"+self._options.outputDefinition+" is invalid")
00260                         #requires option: tier
00261                         theTier=anyOf(['t','tier','dataTier'],outDefDict)
00262                         #optional option: eventcontent, filtername, selectEvents, moduleLabel, filename
00263                         ## event content
00264                         theStreamType=anyOf(['e','ec','eventContent','streamType'],outDefDict,theTier)
00265                         theFilterName=anyOf(['f','ftN','filterName'],outDefDict,'')
00266                         theSelectEvent=anyOf(['s','sE','selectEvents'],outDefDict,'')
00267                         theModuleLabel=anyOf(['l','mL','moduleLabel'],outDefDict,'')
00268                         theExtraOutputCommands=anyOf(['o','oC','outputCommands'],outDefDict,'')
00269                         # module label has a particular role
00270                         if not theModuleLabel:
00271                                 tryNames=[theStreamType.replace(theTier.replace('-',''),'')+theTier.replace('-','')+'output',
00272                                           theStreamType.replace(theTier.replace('-',''),'')+theTier.replace('-','')+theFilterName+'output',
00273                                           theStreamType.replace(theTier.replace('-',''),'')+theTier.replace('-','')+theFilterName+theSelectEvent.split(',')[0].replace(':','for').replace(' ','')+'output'
00274                                           ]
00275                                 for name in tryNames:
00276                                         if not hasattr(self.process,name):
00277                                                 theModuleLabel=name
00278                                                 break
00279                         if not theModuleLabel:
00280                                 raise Exception("cannot find a module label for specification: "+outDefDictStr)
00281                         
00282                         theFileName=self._options.dirout+anyOf(['fn','fileName'],outDefDict,theModuleLabel+'.root')
00283                         if not theFileName.endswith('.root'):
00284                                 theFileName+='.root'
00285                         if len(outDefDict.keys()):
00286                                 raise Exception("unused keys from --output options: "+','.join(outDefDict.keys()))
00287                         if theStreamType=='ALL':
00288                                 theEventContent = cms.PSet(outputCommands = cms.untracked.vstring('keep *'))
00289                         else:
00290                                 theEventContent = getattr(self.process, theStreamType+"EventContent")
00291                                 
00292                         if theStreamType=='ALCARECO' and not theFilterName:
00293                                 theFilterName='StreamALCACombined'
00294                         output = cms.OutputModule("PoolOutputModule",
00295                                                   theEventContent.clone(),
00296                                                   fileName = cms.untracked.string(theFileName),
00297                                                   dataset = cms.untracked.PSet(
00298                                                      dataTier = cms.untracked.string(theTier),
00299                                                      filterName = cms.untracked.string(theFilterName))
00300                                                   )
00301                         if not theSelectEvent and hasattr(self.process,'generation_step'):
00302                                 output.SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('generation_step'))
00303                         if theSelectEvent:
00304                                 output.SelectEvents =cms.untracked.PSet(SelectEvents = cms.vstring(theSelectEvent))
00305                         
00306                         if hasattr(self.process,theModuleLabel):
00307                                 raise Exception("the current process already has a module "+theModuleLabel+" defined")
00308                         #print "creating output module ",theModuleLabel
00309                         setattr(self.process,theModuleLabel,output)
00310                         outputModule=getattr(self.process,theModuleLabel)
00311                         setattr(self.process,theModuleLabel+'_step',cms.EndPath(outputModule))
00312                         path=getattr(self.process,theModuleLabel+'_step')
00313                         self.schedule.append(path)
00314 
00315                         if not self._options.inlineEventContent and hasattr(self.process,theStreamType+"EventContent"):
00316                                 def doNotInlineEventContent(instance,label = "cms.untracked.vstring(process."+theStreamType+"EventContent.outputCommands)"):
00317                                         return label
00318                                 outputModule.outputCommands.__dict__["dumpPython"] = doNotInlineEventContent
00319                         if theExtraOutputCommands:
00320                                 if not isinstance(theExtraOutputCommands,list):
00321                                         raise Exception("extra ouput command in --option must be a list of strings")
00322                                 if hasattr(self.process,theStreamType+"EventContent"):
00323                                         self.executeAndRemember('process.%s.outputCommands.extend(%s)'%(theModuleLabel,theExtraOutputCommands))
00324                                 else:
00325                                         outputModule.outputCommands.extend(theExtraOutputCommands)
00326 
00327                         result+="\nprocess."+theModuleLabel+" = "+outputModule.dumpPython()
00328 
00329                 ##ends the --output options model
00330                 return result
00331         
00332         # if the only step is alca we don't need to put in an output
00333         if self._options.step.split(',')[0].split(':')[0] == 'ALCA':
00334             return "\n"
00335 
00336         for i,(streamType,tier) in enumerate(zip(streamTypes,tiers)):
00337                 if streamType=='': continue
00338                 theEventContent = getattr(self.process, streamType+"EventContent")
00339                 if i==0:
00340                         theFileName=self._options.outfile_name
00341                         theFilterName=self._options.filtername
00342                 else:
00343                         theFileName=self._options.outfile_name.replace('.root','_in'+streamType+'.root')
00344                         theFilterName=self._options.filtername
00345 
00346                 output = cms.OutputModule("PoolOutputModule",
00347                                           theEventContent,
00348                                           fileName = cms.untracked.string(theFileName),
00349                                           dataset = cms.untracked.PSet(dataTier = cms.untracked.string(tier),
00350                                                                        filterName = cms.untracked.string(theFilterName)
00351                                                                        )
00352                                           )
00353                 if hasattr(self.process,"generation_step"):
00354                         output.SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('generation_step'))
00355 
00356                 if streamType=='ALCARECO':
00357                         output.dataset.filterName = cms.untracked.string('StreamALCACombined')
00358 
00359                 outputModuleName=streamType+'output'
00360                 setattr(self.process,outputModuleName,output)
00361                 outputModule=getattr(self.process,outputModuleName)
00362                 setattr(self.process,outputModuleName+'_step',cms.EndPath(outputModule))
00363                 path=getattr(self.process,outputModuleName+'_step')
00364                 self.schedule.append(path)
00365 
00366                 if not self._options.inlineEventContent:
00367                         def doNotInlineEventContent(instance,label = "process."+streamType+"EventContent.outputCommands"):
00368                                 return label
00369                         outputModule.outputCommands.__dict__["dumpPython"] = doNotInlineEventContent
00370 
00371                 result+="\nprocess."+outputModuleName+" = "+outputModule.dumpPython()
00372 
00373         return result

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

Definition at line 165 of file ConfigBuilder.py.

00166                        :
00167         """Here the source is built. Priority: file, generator"""
00168         self.addedObjects.append(("Input source","source"))
00169         if self._options.filein:
00170            if self._options.filetype == "EDM":
00171                self.process.source=cms.Source("PoolSource",
00172                                               fileNames = cms.untracked.vstring())
00173                for entry in self._options.filein.split(','):
00174                        self.process.source.fileNames.append(entry)
00175                if self._options.secondfilein:
00176                        for entry in self._options.secondfilein.split(','):
00177                                self.process.source.secondaryFileNames = cms.untracked.vstring(entry)
00178            elif self._options.filetype == "LHE":
00179                self.process.source=cms.Source("LHESource", fileNames = cms.untracked.vstring(self._options.filein))
00180            elif self._options.filetype == "MCDB":
00181                self.process.source=cms.Source("MCDBSource", articleID = cms.uint32(int(self._options.filein)), supportedProtocols = cms.untracked.vstring("rfio"))
00182 
00183            if 'HARVESTING' in self.stepMap.keys() or 'ALCAHARVEST' in self.stepMap.keys():
00184                self.process.source.processingMode = cms.untracked.string("RunsAndLumis")
00185 
00186         if self._options.dbsquery!='':
00187                self.process.source=cms.Source("PoolSource", fileNames = cms.untracked.vstring(),secondaryFileNames = cms.untracked.vstring())
00188                import os
00189                print "the query is",self._options.dbsquery
00190                for line in os.popen('dbs search --query "%s"'%(self._options.dbsquery,)):
00191                        if line.count(".root")>=2:
00192                                #two files solution...
00193                                entries=line.replace("\n","").split()
00194                                if not entries[0] in self.process.source.fileNames.value():
00195                                        self.process.source.fileNames.append(entries[0])
00196                                if not entries[1] in self.process.source.secondaryFileNames.value():
00197                                        self.process.source.secondaryFileNames.append(entries[1])
00198                                        
00199                        elif (line.find(".root")!=-1):
00200                                entry=line.replace("\n","")
00201                                if not entry in self.process.source.fileNames.value():
00202                                        self.process.source.fileNames.append(entry)
00203                print "found files: ",self.process.source.fileNames.value()
00204                if self.process.source.secondaryFileNames.__len__()!=0:
00205                        print "found parent files:",self.process.source.secondaryFileNames.value()
00206 
00207         if self._options.inputCommands:
00208                 self.process.source.inputCommands = cms.untracked.vstring()
00209                 for command in self._options.inputCommands.split(','):
00210                         self.process.source.inputCommands.append(command)
00211                 #I do not want to drop descendants
00212                 self.process.source.dropDescendantsOfDroppedBranches = cms.untracked.bool(False)
00213                 
00214         if self._options.inputEventContent:
00215                 import copy
00216                 theEventContent = getattr(self.process, self._options.inputEventContent+"EventContent")
00217                 if hasattr(theEventContent,'outputCommands'):
00218                         self.process.source.inputCommands=copy.copy(theEventContent.outputCommands)
00219                 if hasattr(theEventContent,'inputCommands'):
00220                         self.process.source.inputCommands=copy.copy(theEventContent.inputCommands)
00221                 
00222         if 'GEN' in self.stepMap.keys() or (not self._options.filein and hasattr(self._options, "evt_type")):
00223             if self.process.source is None:
00224                 self.process.source=cms.Source("EmptySource")
00225             # if option himix is active, drop possibly duplicate DIGI-RAW info:
00226             if self._options.himix==True:
00227                 self.process.source.inputCommands = cms.untracked.vstring('drop *','keep *_generator_*_*','keep *_g4SimHits_*_*')
00228                 self.process.source.dropDescendantsOfDroppedBranches=cms.untracked.bool(False)
00229 
00230         return

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

Definition at line 374 of file ConfigBuilder.py.

00375                                   :
00376         """
00377         Add selected standard sequences to the process
00378         """
00379         # load the pile up file
00380         if self._options.pileup:
00381                 pileupSpec=self._options.pileup.split(',')[0]
00382                 from Configuration.StandardSequences.Mixing import Mixing,defineMixing
00383                 if not pileupSpec in Mixing and '.' not in pileupSpec:
00384                         raise Exception(pileupSpec+' is not a know mixing scenario:\n available are: '+'\n'.join(Mixing.keys()))
00385                 if '.' in pileupSpec:
00386                         mixingDict={'file':pileupSpec}
00387                 else:
00388                         mixingDict=Mixing[pileupSpec]
00389                 if len(self._options.pileup.split(','))>1:
00390                         mixingDict.update(eval(self._options.pileup[self._options.pileup.find(',')+1:]))
00391                 self.loadAndRemember(mixingDict['file'])
00392                 mixingDict.pop('file')
00393                 if self._options.pileup_input:
00394                         mixingDict['F']=self._options.pileup_input.split(',')
00395                 specialization=defineMixing(mixingDict,'FASTSIM' in self.stepMap)
00396                 for command in specialization:
00397                         self.executeAndRemember(command)
00398                 if len(mixingDict)!=0:
00399                         raise Exception('unused mixing specification: '+mixingDict.keys().__str__())
00400 
00401                 
00402         # load the geometry file
00403         try:
00404                 self.loadAndRemember(self.GeometryCFF)
00405         except ImportError:
00406                 print "Geometry option",self._options.geometry,"unknown."
00407                 raise
00408 
00409         self.loadAndRemember(self.magFieldCFF)
00410 
00411 
00412         # what steps are provided by this class?
00413         stepList = [re.sub(r'^prepare_', '', methodName) for methodName in ConfigBuilder.__dict__ if methodName.startswith('prepare_')]
00414 
00415         ### Benedikt can we add here a check that assure that we are going to generate a correct config file?
00416         ### i.e. the harvesting do not have to include other step......
00417 
00418         # look which steps are requested and invoke the corresponding method
00419         for step in self._options.step.split(","):
00420             if step == "":
00421                 continue
00422             print step
00423             stepParts = step.split(":")   # for format STEP:alternativeSequence
00424             stepName = stepParts[0]
00425             if stepName not in stepList:
00426                 raise ValueError("Step "+stepName+" unknown")
00427             if len(stepParts)==1:
00428                 getattr(self,"prepare_"+step)(sequence = getattr(self,step+"DefaultSeq"))
00429             elif len(stepParts)==2:
00430                 getattr(self,"prepare_"+stepName)(sequence = stepParts[1])
00431             elif len(stepParts)==3:
00432                 getattr(self,"prepare_"+stepName)(sequence = stepParts[1]+','+stepParts[2])
00433 
00434             else:
00435                 raise ValueError("Step definition "+step+" invalid")

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

Definition at line 1408 of file ConfigBuilder.py.

01409                                                         :
01410         """ Add useful info for the production. """
01411         self.process.configurationMetadata=cms.untracked.PSet\
01412                                             (version=cms.untracked.string("$Revision: 1.303.2.7 $"),
01413                                              name=cms.untracked.string("PyReleaseValidation"),
01414                                              annotation=cms.untracked.string(evt_type+ " nevts:"+str(evtnumber))
01415                                              )
01416 
01417         self.addedObjects.append(("Production Info","configurationMetadata"))
01418 

def ConfigBuilder::ConfigBuilder::define_Configs (   self)

Definition at line 562 of file ConfigBuilder.py.

00563                             :
00564         if ( self._options.scenario not in defaultOptions.scenarioOptions):
00565                 print 'Invalid scenario provided. Options are:'
00566                 print defaultOptions.scenarioOptions
00567                 sys.exit(-1)
00568 
00569         self.loadAndRemember('Configuration/StandardSequences/Services_cff')
00570         if self._options.particleTable not in defaultOptions.particleTableList:
00571             print 'Invalid particle table provided. Options are:'
00572             print defaultOptions.particleTable
00573             sys.exit(-1)
00574         else:
00575             self.loadAndRemember('SimGeneral.HepPDTESSource.'+self._options.particleTable+'_cfi')
00576 
00577         self.loadAndRemember('FWCore/MessageService/MessageLogger_cfi')
00578 
00579         self.ALCADefaultCFF="Configuration/StandardSequences/AlCaRecoStreams_cff"
00580         self.GENDefaultCFF="Configuration/StandardSequences/Generator_cff"
00581         self.SIMDefaultCFF="Configuration/StandardSequences/Sim_cff"
00582         self.DIGIDefaultCFF="Configuration/StandardSequences/Digi_cff"
00583         self.DIGI2RAWDefaultCFF="Configuration/StandardSequences/DigiToRaw_cff"
00584         self.L1EMDefaultCFF='Configuration/StandardSequences/SimL1Emulator_cff'
00585         self.L1MENUDefaultCFF="Configuration/StandardSequences/L1TriggerDefaultMenu_cff"
00586         self.HLTDefaultCFF="Configuration/StandardSequences/HLTtable_cff"
00587         self.RAW2DIGIDefaultCFF="Configuration/StandardSequences/RawToDigi_Data_cff"
00588         self.L1RecoDefaultCFF="Configuration/StandardSequences/L1Reco_cff"
00589         self.RECODefaultCFF="Configuration/StandardSequences/Reconstruction_cff"
00590         self.SKIMDefaultCFF="Configuration/StandardSequences/Skims_cff"
00591         self.POSTRECODefaultCFF="Configuration/StandardSequences/PostRecoGenerator_cff"
00592         self.VALIDATIONDefaultCFF="Configuration/StandardSequences/Validation_cff"
00593         self.L1HwValDefaultCFF = "Configuration/StandardSequences/L1HwVal_cff"
00594         self.DQMOFFLINEDefaultCFF="DQMOffline/Configuration/DQMOffline_cff"
00595         self.HARVESTINGDefaultCFF="Configuration/StandardSequences/Harvesting_cff"
00596         self.ALCAHARVESTDefaultCFF="Configuration/StandardSequences/AlCaHarvesting_cff"
00597         self.ENDJOBDefaultCFF="Configuration/StandardSequences/EndOfProcess_cff"
00598         self.ConditionsDefaultCFF = "Configuration/StandardSequences/FrontierConditions_GlobalTag_cff"
00599         self.CFWRITERDefaultCFF = "Configuration/StandardSequences/CrossingFrameWriter_cff"
00600         self.REPACKDefaultCFF="Configuration/StandardSequences/DigiToRaw_Repack_cff"
00601 
00602         # synchronize the geometry configuration and the FullSimulation sequence to be used
00603         if self._options.geometry not in defaultOptions.geometryExtendedOptions:
00604             self.SIMDefaultCFF="Configuration/StandardSequences/SimIdeal_cff"
00605 
00606         if "DATAMIX" in self.stepMap.keys():
00607             self.DATAMIXDefaultCFF="Configuration/StandardSequences/DataMixer"+self._options.datamix+"_cff"
00608             self.DIGIDefaultCFF="Configuration/StandardSequences/DigiDM_cff"
00609             self.DIGI2RAWDefaultCFF="Configuration/StandardSequences/DigiToRawDM_cff"
00610             self.L1EMDefaultCFF='Configuration/StandardSequences/SimL1EmulatorDM_cff'
00611 
00612         self.ALCADefaultSeq=None
00613         self.SIMDefaultSeq=None
00614         self.GENDefaultSeq='pgen'
00615         self.DIGIDefaultSeq='pdigi'
00616         self.DATAMIXDefaultSeq=None
00617         self.DIGI2RAWDefaultSeq='DigiToRaw'
00618         self.HLTDefaultSeq='GRun'
00619         self.L1DefaultSeq=None
00620         self.HARVESTINGDefaultSeq=None
00621         self.ALCAHARVESTDefaultSeq=None
00622         self.CFWRITERDefaultSeq=None
00623         self.RAW2DIGIDefaultSeq='RawToDigi'
00624         self.L1RecoDefaultSeq='L1Reco'
00625         if 'RAW2DIGI' in self.stepMap and 'RECO' in self.stepMap:
00626                 self.RECODefaultSeq='reconstruction'
00627         else:
00628                 self.RECODefaultSeq='reconstruction_fromRECO'
00629 
00630         self.POSTRECODefaultSeq=None
00631         self.L1HwValDefaultSeq='L1HwVal'
00632         self.DQMDefaultSeq='DQMOffline'
00633         self.FASTSIMDefaultSeq='all'
00634         self.VALIDATIONDefaultSeq=''
00635         self.PATLayer0DefaultSeq='all'
00636         self.ENDJOBDefaultSeq='endOfProcess'
00637         self.REPACKDefaultSeq='DigiToRawRepack'
00638 
00639         self.EVTCONTDefaultCFF="Configuration/EventContent/EventContent_cff"
00640 
00641         # if fastsim switch event content
00642         if "FASTSIM" in self.stepMap.keys():
00643                 self.GENDefaultSeq='pgen_genonly'
00644                 self.EVTCONTDefaultCFF = "FastSimulation/Configuration/EventContent_cff"
00645                 self.VALIDATIONDefaultCFF = "FastSimulation.Configuration.Validation_cff"
00646 
00647         # if its MC then change the raw2digi
00648         if self._options.isMC==True:
00649                 self.RAW2DIGIDefaultCFF="Configuration/StandardSequences/RawToDigi_cff"
00650                 self.DQMOFFLINEDefaultCFF="DQMOffline/Configuration/DQMOfflineMC_cff"
00651                 self.ALCADefaultCFF="Configuration/StandardSequences/AlCaRecoStreamsMC_cff"
00652 
00653         if hasattr(self._options,"isRepacked") and self._options.isRepacked:
00654                 self.RAW2DIGIDefaultCFF="Configuration/StandardSequences/RawToDigi_Repacked_cff"
00655 
00656         # now for #%#$#! different scenarios
00657 
00658         if self._options.scenario=='nocoll' or self._options.scenario=='cosmics':
00659             self.SIMDefaultCFF="Configuration/StandardSequences/SimNOBEAM_cff"
00660             self._options.beamspot='NoSmear'
00661 
00662         if self._options.scenario=='cosmics':
00663             self.DIGIDefaultCFF="Configuration/StandardSequences/DigiCosmics_cff"
00664             self.RECODefaultCFF="Configuration/StandardSequences/ReconstructionCosmics_cff"
00665             self.SKIMDefaultCFF="Configuration/StandardSequences/SkimsCosmics_cff"
00666             self.EVTCONTDefaultCFF="Configuration/EventContent/EventContentCosmics_cff"
00667             self.DQMOFFLINEDefaultCFF="DQMOffline/Configuration/DQMOfflineCosmics_cff"
00668             if self._options.isMC==True:
00669                 self.DQMOFFLINEDefaultCFF="DQMOffline/Configuration/DQMOfflineCosmicsMC_cff"
00670             self.HARVESTINGDefaultCFF="Configuration/StandardSequences/HarvestingCosmics_cff"
00671             self.RECODefaultSeq='reconstructionCosmics'
00672             self.DQMDefaultSeq='DQMOfflineCosmics'
00673             self.eventcontent='FEVT'
00674 
00675         if self._options.himix:
00676                 print "From the presence of the himix option, we have determined that this is heavy ions and will use '--scenario HeavyIons'."
00677                 self._options.scenario='HeavyIons'
00678 
00679         if self._options.scenario=='HeavyIons':
00680             self.HLTDefaultSeq = 'HIon'
00681             if not self._options.himix:
00682                     self.GENDefaultSeq='pgen_hi'
00683             else:
00684                     self.GENDefaultSeq='pgen_himix'
00685             self.VALIDATIONDefaultCFF="Configuration/StandardSequences/ValidationHeavyIons_cff"
00686             self.VALIDATIONDefaultSeq=''
00687             self.EVTCONTDefaultCFF="Configuration/EventContent/EventContentHeavyIons_cff"
00688             self.RECODefaultCFF="Configuration/StandardSequences/ReconstructionHeavyIons_cff"
00689             self.RECODefaultSeq='reconstructionHeavyIons'
00690             self.ALCADefaultCFF = "Configuration/StandardSequences/AlCaRecoStreamsHeavyIons_cff"
00691             self.DQMOFFLINEDefaultCFF="DQMOffline/Configuration/DQMOfflineHeavyIons_cff"
00692             self.DQMDefaultSeq='DQMOfflineHeavyIons'
00693             self.SKIMDefaultCFF="Configuration/StandardSequences/SkimsHeavyIons_cff"
00694             self.HARVESTINGDefaultCFF="Configuration/StandardSequences/HarvestingHeavyIons_cff"
00695             if self._options.isMC==True:
00696                     self.DQMOFFLINEDefaultCFF="DQMOffline/Configuration/DQMOfflineHeavyIonsMC_cff"
00697 
00698 
00699         self.RAW2RECODefaultSeq=','.join([self.RAW2DIGIDefaultSeq,self.RECODefaultSeq])
00700 
00701 
00702         # the magnetic field
00703         self.magFieldCFF = 'Configuration/StandardSequences/MagneticField_'+self._options.magField.replace('.','')+'_cff'
00704         self.magFieldCFF = self.magFieldCFF.replace("__",'_')
00705 
00706         # the geometry
00707         if 'FASTSIM' in self.stepMap:
00708                 if 'start' in self._options.conditions.lower():
00709                         self.GeometryCFF='FastSimulation/Configuration/Geometries_START_cff'
00710                 else:
00711                         self.GeometryCFF='FastSimulation/Configuration/Geometries_MC_cff'
00712         else:
00713                 if self._options.gflash==True:
00714                         self.GeometryCFF='Configuration/StandardSequences/Geometry'+self._options.geometry+'GFlash_cff'
00715                 else:
00716                         self.GeometryCFF='Configuration/StandardSequences/Geometry'+self._options.geometry+'_cff'
00717 
00718         # Mixing
00719         #not driven by a default cff anymore
00720         if self._options.isData:
00721                 self._options.pileup=None
00722         if self._options.isMC==True and self._options.himix==False:
00723                 if 'FASTSIM' in self.stepMap:
00724                         self._options.pileup='FS_'+self._options.pileup
00725         elif self._options.isMC==True and self._options.himix==True:
00726                 self._options.pileup='HiMix'
00727 
00728         if self._options.eventcontent != None:
00729             self.eventcontent=self._options.eventcontent
00730 
00731         if self._options.slhc:
00732                 if 'stdgeom' not in self._options.slhc:
00733                         self.GeometryCFF='SLHCUpgradeSimulations.Geometry.%s_cmsSimIdealGeometryXML_cff'%(self._options.slhc,)
00734                 self.DIGIDefaultCFF='SLHCUpgradeSimulations/Geometry/Digi_%s_cff'%(self._options.slhc,)
00735                 if self._options.pileup!=defaultOptions.pileup:
00736                         self._options.pileup='SLHC_%s_%s'%(self._options.pileup,self._options.slhc)

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

Definition at line 134 of file ConfigBuilder.py.

00135                                          :
00136         """helper routine to remember replace statements"""
00137         self.additionalCommands.append(command)
00138         if not command.strip().startswith("#"):
00139             # substitute: process.foo = process.bar -> self.process.foo = self.process.bar
00140             exec(command.replace("process.","self.process."))

def ConfigBuilder::ConfigBuilder::finalizeFastSimHLT (   self)

Definition at line 1360 of file ConfigBuilder.py.

01361                                 :
01362             self.process.reconstruction = cms.Path(self.process.reconstructionWithFamos)
01363             self.schedule.append(self.process.reconstruction)

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

Definition at line 125 of file ConfigBuilder.py.

00126                                           :
00127         """helper routine to load am memorize imports"""
00128         # we could make the imports a on-the-fly data method of the process instance itself
00129         # not sure if the latter is a good idea
00130         includeFile = includeFile.replace('/','.')
00131         self.imports.append(includeFile)
00132         self.process.load(includeFile)
00133         return sys.modules[includeFile]

def ConfigBuilder::ConfigBuilder::loadDefaultOrSpecifiedCFF (   self,
  sequence,
  defaultCFF 
)

Definition at line 802 of file ConfigBuilder.py.

00803                                                             :
00804             if ( len(sequence.split('.'))==1 ):
00805                     l=self.loadAndRemember(defaultCFF)
00806             elif ( len(sequence.split('.'))==2 ):
00807                     l=self.loadAndRemember(sequence.split('.')[0])
00808                     sequence=sequence.split('.')[1]
00809             else:
00810                     print "sub sequence configuration must be of the form dir/subdir/cff.a+b+c or cff.a"
00811                     print sequence,"not recognized"
00812                     raise
00813             return l

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

Definition at line 1419 of file ConfigBuilder.py.

01420                                          :
01421         """ Prepare the configuration string and add missing pieces."""
01422 
01423         self.loadAndRemember(self.EVTCONTDefaultCFF)  #load the event contents regardless
01424         self.addMaxEvents()
01425         if self.with_input:
01426            self.addSource()     
01427         self.addStandardSequences()
01428         self.addConditions()
01429 
01430 
01431         outputModuleCfgCode=""
01432         if not 'HARVESTING' in self.stepMap.keys() and not 'SKIM' in self.stepMap.keys() and not 'ALCAHARVEST' in self.stepMap.keys() and not 'ALCAOUTPUT' in self.stepMap.keys() and self.with_output:
01433                 outputModuleCfgCode=self.addOutput()
01434 
01435         self.addCommon()
01436 
01437         self.pythonCfgCode =  "# Auto generated configuration file\n"
01438         self.pythonCfgCode += "# using: \n# "+__version__[1:-1]+"\n# "+__source__[1:-1]+'\n'
01439         self.pythonCfgCode += "# with command line options: "+self._options.arguments+'\n'
01440         self.pythonCfgCode += "import FWCore.ParameterSet.Config as cms\n\n"
01441         self.pythonCfgCode += "process = cms.Process('"+self._options.name+"')\n\n"
01442 
01443         self.pythonCfgCode += "# import of standard configurations\n"
01444         for module in self.imports:
01445             self.pythonCfgCode += ("process.load('"+module+"')\n")
01446 
01447         # production info
01448         if not hasattr(self.process,"configurationMetadata"):
01449                 self.build_production_info(self._options.evt_type, self._options.number)
01450         else:
01451                 #the PSet was added via a load
01452                 self.addedObjects.append(("Production Info","configurationMetadata"))
01453 
01454         self.pythonCfgCode +="\n"
01455         for comment,object in self.addedObjects:
01456                 if comment!="":
01457                         self.pythonCfgCode += "\n# "+comment+"\n"
01458                 self.pythonCfgCode += dumpPython(self.process,object)
01459 
01460         # dump the output definition
01461         self.pythonCfgCode += "\n# Output definition\n"
01462         self.pythonCfgCode += outputModuleCfgCode
01463 
01464         # dump all additional outputs (e.g. alca or skim streams)
01465         self.pythonCfgCode += "\n# Additional output definition\n"
01466         #I do not understand why the keys are not normally ordered.
01467         nl=self.additionalOutputs.keys()
01468         nl.sort()
01469         for name in nl:
01470                 output = self.additionalOutputs[name]
01471                 self.pythonCfgCode += "process.%s = %s" %(name, output.dumpPython())
01472                 tmpOut = cms.EndPath(output)
01473                 setattr(self.process,name+'OutPath',tmpOut)
01474                 self.schedule.append(tmpOut)
01475 
01476         # dump all additional commands
01477         self.pythonCfgCode += "\n# Other statements\n"
01478         for command in self.additionalCommands:
01479             self.pythonCfgCode += command + "\n"
01480 
01481         #comma separated list of objects that deserve to be inlined in the configuration (typically from a modified config deep down)
01482         for object in self._options.inlineObjets.split(','):
01483                 if not object:
01484                         continue
01485                 if not hasattr(self.process,object):
01486                         print 'cannot inline -'+object+'- : not known'
01487                 else:
01488                         self.pythonCfgCode +='\n'
01489                         self.pythonCfgCode +=dumpPython(self.process,object)
01490 
01491         # dump all paths
01492         self.pythonCfgCode += "\n# Path and EndPath definitions\n"
01493         for path in self.process.paths:
01494             if getattr(self.process,path) not in self.blacklist_paths:
01495                 self.pythonCfgCode += dumpPython(self.process,path)
01496         for endpath in self.process.endpaths:
01497             if getattr(self.process,endpath) not in self.blacklist_paths:
01498                 self.pythonCfgCode += dumpPython(self.process,endpath)
01499 
01500         # dump the schedule
01501         self.pythonCfgCode += "\n# Schedule definition\n"
01502         result = "process.schedule = cms.Schedule("
01503 
01504         # handling of the schedule
01505         self.process.schedule = cms.Schedule()
01506         for item in self.schedule:
01507                 if not isinstance(item, cms.Schedule):
01508                         self.process.schedule.append(item)
01509                 else:
01510                         self.process.schedule.extend(item)
01511 
01512         if hasattr(self.process,"HLTSchedule"):
01513             beforeHLT = self.schedule[:self.schedule.index(self.process.HLTSchedule)]
01514             afterHLT = self.schedule[self.schedule.index(self.process.HLTSchedule)+1:]
01515             pathNames = ['process.'+p.label_() for p in beforeHLT]
01516             result += ','.join(pathNames)+')\n'
01517             result += 'process.schedule.extend(process.HLTSchedule)\n'
01518             pathNames = ['process.'+p.label_() for p in afterHLT]
01519             result += 'process.schedule.extend(['+','.join(pathNames)+'])\n'
01520         else:
01521             pathNames = ['process.'+p.label_() for p in self.schedule]
01522             result ='process.schedule = cms.Schedule('+','.join(pathNames)+')\n'
01523 
01524         self.pythonCfgCode += result
01525 
01526         # special treatment in case of production filter sequence 2/2
01527         if self.productionFilterSequence:
01528                 self.pythonCfgCode +='# filter all path with the production filter sequence\n'
01529                 self.pythonCfgCode +='for path in process.paths:\n'
01530                 self.pythonCfgCode +='\tgetattr(process,path)._seq = process.%s * getattr(process,path)._seq \n'%(self.productionFilterSequence,)
01531 
01532         # dump customise fragment
01533         if self._options.customisation_file:
01534             self.pythonCfgCode += self.addCustomise()
01535         return
01536 

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

Definition at line 847 of file ConfigBuilder.py.

00848                                                               :
00849         """ Enrich the process with alca streams """
00850         alcaConfig=self.loadDefaultOrSpecifiedCFF(sequence,self.ALCADefaultCFF)
00851         sequence = sequence.split('.')[-1]
00852 
00853         # decide which ALCA paths to use
00854         alcaList = sequence.split("+")
00855         maxLevel=0
00856         from Configuration.PyReleaseValidation.autoAlca import autoAlca
00857         # support @X from autoAlca.py, and recursion support: i.e T0:@Mu+@EG+...
00858         while '@' in repr(alcaList) and maxLevel<10:
00859                 maxLevel+=1
00860                 for specifiedCommand in alcaList:
00861                         if specifiedCommand[0]=="@":
00862                                 location=specifiedCommand[1:]
00863                                 alcaSequence = autoAlca[location]
00864                                 alcaList.remove(specifiedCommand)
00865                                 alcaList.extend(alcaSequence.split('+'))
00866                                 break
00867         
00868         for name in alcaConfig.__dict__:
00869             alcastream = getattr(alcaConfig,name)
00870             shortName = name.replace('ALCARECOStream','')
00871             if shortName in alcaList and isinstance(alcastream,cms.FilteredStream):
00872                 output = self.addExtraStream(name,alcastream, workflow = workflow)
00873                 if 'DQM' in alcaList:
00874                         if not self._options.inlineEventContent and hasattr(self.process,name):
00875                                 self.executeAndRemember('process.' + name + '.outputCommands.append("keep *_MEtoEDMConverter_*_*")')
00876                         else:
00877                                 output.outputCommands.append("keep *_MEtoEDMConverter_*_*")
00878                         
00879                 #rename the HLT process name in the alca modules
00880                 if self._options.hltProcess or 'HLT' in self.stepMap:
00881                         if isinstance(alcastream.paths,tuple):
00882                                 for path in alcastream.paths:
00883                                         self.renameHLTprocessInSequence(path.label())
00884                         else:
00885                                 self.renameHLTprocessInSequence(alcastream.paths.label())
00886                                 
00887                 for i in range(alcaList.count(shortName)):
00888                         alcaList.remove(shortName)
00889 
00890             # DQM needs a special handling
00891             elif name == 'pathALCARECODQM' and 'DQM' in alcaList:
00892                     path = getattr(alcaConfig,name)
00893                     self.schedule.append(path)
00894                     alcaList.remove('DQM')
00895 
00896             if isinstance(alcastream,cms.Path):
00897                     #black list the alca path so that they do not appear in the cfg
00898                     self.blacklist_paths.append(alcastream)
00899 
00900 
00901         if len(alcaList) != 0:
00902                 available=[]
00903                 for name in alcaConfig.__dict__:
00904                         alcastream = getattr(alcaConfig,name)
00905                         if isinstance(alcastream,cms.FilteredStream):
00906                                 available.append(name.replace('ALCARECOStream',''))
00907                 print "The following alcas could not be found "+str(alcaList)
00908                 print "available ",available
00909                 #print "verify your configuration, ignoring for now"
00910                 raise Exception("The following alcas could not be found "+str(alcaList))

def ConfigBuilder::ConfigBuilder::prepare_ALCAHARVEST (   self,
  sequence = None 
)
Enrich the process with AlCaHarvesting step 

Definition at line 1331 of file ConfigBuilder.py.

01332                                                   :
01333         """ Enrich the process with AlCaHarvesting step """
01334         harvestingConfig = self.loadAndRemember(self.ALCAHARVESTDefaultCFF)
01335         sequence=sequence.split(".")[-1]
01336 
01337         # decide which AlcaHARVESTING paths to use
01338         harvestingList = sequence.split("+")
01339         for name in harvestingConfig.__dict__:
01340             harvestingstream = getattr(harvestingConfig,name)
01341             if name in harvestingList and isinstance(harvestingstream,cms.Path):
01342                self.schedule.append(harvestingstream)
01343                self.executeAndRemember("process.PoolDBOutputService.toPut.append(process.ALCAHARVEST" + name + "_dbOutput)")
01344                self.executeAndRemember("process.pclMetadataWriter.recordsToMap.append(process.ALCAHARVEST" + name + "_metadata)")
01345                harvestingList.remove(name)
01346         # append the common part at the end of the sequence
01347         lastStep = getattr(harvestingConfig,"ALCAHARVESTDQMSaveAndMetadataWriter")
01348         self.schedule.append(lastStep)
01349         
01350         if len(harvestingList) != 0 and 'dummyHarvesting' not in harvestingList :
01351             print "The following harvesting could not be found : ", harvestingList
01352             raise
01353 
01354 

def ConfigBuilder::ConfigBuilder::prepare_ALCAOUTPUT (   self,
  sequence = None 
)

Definition at line 844 of file ConfigBuilder.py.

00845                                                  :
00846         self.prepare_ALCA(sequence, workflow = "output")

def ConfigBuilder::ConfigBuilder::prepare_ALCAPRODUCER (   self,
  sequence = None 
)

Definition at line 841 of file ConfigBuilder.py.

00842                                                    :
00843         self.prepare_ALCA(sequence, workflow = "producers")

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

Definition at line 1006 of file ConfigBuilder.py.

01007                                                :
01008             """ Enrich the schedule with the crossing frame writer step"""
01009             self.loadAndRemember(self.CFWRITERDefaultCFF)
01010             self.scheduleSequence('pcfw','cfwriter_step')
01011             return

def ConfigBuilder::ConfigBuilder::prepare_DATAMIX (   self,
  sequence = None 
)
Enrich the schedule with the digitisation step

Definition at line 1012 of file ConfigBuilder.py.

01013                                               :
01014             """ Enrich the schedule with the digitisation step"""
01015             self.loadAndRemember(self.DATAMIXDefaultCFF)
01016             self.scheduleSequence('pdatamix','datamixing_step')
01017             return

def ConfigBuilder::ConfigBuilder::prepare_DIGI (   self,
  sequence = None 
)
Enrich the schedule with the digitisation step

Definition at line 993 of file ConfigBuilder.py.

00994                                            :
00995         """ Enrich the schedule with the digitisation step"""
00996         self.loadDefaultOrSpecifiedCFF(sequence,self.DIGIDefaultCFF)
00997 
00998         if self._options.gflash==True:
00999                 self.loadAndRemember("Configuration/StandardSequences/GFlashDIGI_cff")
01000 
01001         if self._options.himix==True:
01002             self.loadAndRemember("SimGeneral/MixingModule/himixDIGI_cff")
01003 
01004         self.scheduleSequence(sequence.split('.')[-1],'digitisation_step')
01005         return

def ConfigBuilder::ConfigBuilder::prepare_DIGI2RAW (   self,
  sequence = None 
)

Definition at line 1018 of file ConfigBuilder.py.

01019                                                :
01020             self.loadDefaultOrSpecifiedCFF(sequence,self.DIGI2RAWDefaultCFF)
01021             self.scheduleSequence(sequence.split('.')[-1],'digi2raw_step')
01022             return

def ConfigBuilder::ConfigBuilder::prepare_DQM (   self,
  sequence = 'DQMOffline' 
)

Definition at line 1278 of file ConfigBuilder.py.

01279                                                   :
01280         # this one needs replacement
01281 
01282         self.loadDefaultOrSpecifiedCFF(sequence,self.DQMOFFLINEDefaultCFF)
01283         sequence=sequence.split('.')[-1]
01284 
01285         if 'HLT' in self.stepMap.keys() or self._options.hltProcess:
01286                 self.renameHLTprocessInSequence(sequence)
01287 
01288         # if both HLT and DQM are run in the same process, schedule [HLT]DQM in an EndPath
01289         if 'HLT' in self.stepMap.keys():
01290                 # need to put [HLT]DQM in an EndPath, to access the HLT trigger results
01291                 self.process.dqmoffline_step = cms.EndPath( getattr(self.process, sequence ) )
01292         else:
01293                 # schedule DQM as a standard Path
01294                 self.process.dqmoffline_step = cms.Path( getattr(self.process, sequence) )
01295         self.schedule.append(self.process.dqmoffline_step)

def ConfigBuilder::ConfigBuilder::prepare_ENDJOB (   self,
  sequence = 'endOfProcess' 
)

Definition at line 1355 of file ConfigBuilder.py.

01356                                                        :
01357             self.loadDefaultOrSpecifiedCFF(sequence,self.ENDJOBDefaultCFF)
01358             self.scheduleSequenceAtEnd(sequence.split('.')[-1],'endjob_step')
01359             return

def ConfigBuilder::ConfigBuilder::prepare_FASTSIM (   self,
  sequence = "all" 
)
Enrich the schedule with fastsim

Definition at line 1364 of file ConfigBuilder.py.

01365                                                :
01366         """Enrich the schedule with fastsim"""
01367         self.loadAndRemember("FastSimulation/Configuration/FamosSequences_cff")
01368 
01369         if sequence in ('all','allWithHLTFiltering',''):
01370             if not 'HLT' in self.stepMap.keys():
01371                     self.prepare_HLT(sequence=None)
01372 
01373             self.executeAndRemember("process.famosSimHits.SimulateCalorimetry = True")
01374             self.executeAndRemember("process.famosSimHits.SimulateTracking = True")
01375 
01376             self.executeAndRemember("process.simulation = cms.Sequence(process.simulationWithFamos)")
01377             self.executeAndRemember("process.HLTEndSequence = cms.Sequence(process.reconstructionWithFamos)")
01378 
01379             # since we have HLT here, the process should be called HLT
01380             self._options.name = "HLT"
01381 
01382             # if we don't want to filter after HLT but simulate everything regardless of what HLT tells, we have to add reconstruction explicitly
01383             if sequence == 'all' and not 'HLT' in self.stepMap.keys(): #(a)
01384                 self.finalizeFastSimHLT()
01385         elif sequence == 'famosWithEverything':
01386             self.process.fastsim_step = cms.Path( getattr(self.process, "famosWithEverything") )
01387             self.schedule.append(self.process.fastsim_step)
01388 
01389             # now the additional commands we need to make the config work
01390             self.executeAndRemember("process.VolumeBasedMagneticFieldESProducer.useParametrizedTrackerField = True")
01391         else:
01392              print "FastSim setting", sequence, "unknown."
01393              raise ValueError
01394 
01395         if 'Flat' in self._options.beamspot:
01396                 beamspotType = 'Flat'
01397         elif 'Gauss' in self._options.beamspot:
01398                 beamspotType = 'Gaussian'
01399         else:
01400                 beamspotType = 'BetaFunc'
01401         self.loadAndRemember('IOMC.EventVertexGenerators.VtxSmearedParameters_cfi')
01402         beamspotName = 'process.%sVtxSmearingParameters' %(self._options.beamspot)
01403         self.executeAndRemember(beamspotName+'.type = cms.string("%s")'%(beamspotType))
01404         self.executeAndRemember('process.famosSimHits.VertexGenerator = '+beamspotName)
01405         self.executeAndRemember('process.famosPileUp.VertexGenerator = '+beamspotName)
01406 
01407 

def ConfigBuilder::ConfigBuilder::prepare_GEN (   self,
  sequence = None 
)
load the fragment of generator configuration 

Definition at line 911 of file ConfigBuilder.py.

00912                                           :
00913         """ load the fragment of generator configuration """
00914         loadFailure=False
00915         #remove trailing .py
00916         #support old style .cfi by changing into something.cfi into something_cfi
00917         #remove python/ from the name
00918         loadFragment = self._options.evt_type.replace('.py','',).replace('.','_').replace('python/','')
00919         #standard location of fragments
00920         if not '/' in loadFragment:
00921                 loadFragment='Configuration.Generator.'+loadFragment
00922         else:
00923                 loadFragment=loadFragment.replace('/','.')
00924         try:
00925                 __import__(loadFragment)
00926         except:
00927                 loadFailure=True
00928                 if self.process.source and self.process.source.type_()=='EmptySource':
00929                         raise Exception("Neither gen fragment nor input files provided: this is an inconsistent GEN step configuration")
00930                 
00931         if not loadFailure:
00932                 generatorModule=sys.modules[loadFragment]
00933                 genModules=generatorModule.__dict__
00934                 if self._options.hideGen:
00935                         self.loadAndRemember(loadFragment)
00936                 else:
00937                         self.process.load(loadFragment)
00938                         # expose the objects from that fragment to the configuration
00939                         import FWCore.ParameterSet.Modules as cmstypes
00940                         for name in genModules:
00941                                 theObject = getattr(generatorModule,name)
00942                                 if isinstance(theObject, cmstypes._Module):
00943                                         self._options.inlineObjets=name+','+self._options.inlineObjets
00944                                 elif isinstance(theObject, cms.Sequence) or isinstance(theObject, cmstypes.ESProducer):
00945                                         self._options.inlineObjets+=','+name
00946 
00947                 if sequence == self.GENDefaultSeq or sequence == 'pgen_genonly':
00948                         if 'ProductionFilterSequence' in genModules and ('generator' in genModules or 'hiSignal' in genModules):
00949                                 self.productionFilterSequence = 'ProductionFilterSequence'
00950                         elif 'generator' in genModules:
00951                                 self.productionFilterSequence = 'generator'
00952 
00953         """ Enrich the schedule with the rest of the generation step """
00954         self.loadDefaultOrSpecifiedCFF(sequence,self.GENDefaultCFF)
00955         genSeqName=sequence.split('.')[-1]
00956 
00957         if not 'FASTSIM' in self.stepMap:
00958                 try:
00959                         from Configuration.StandardSequences.VtxSmeared import VtxSmeared
00960                         self.loadAndRemember(VtxSmeared[self._options.beamspot])
00961                 except ImportError:
00962                         raise Exception("VertexSmearing type or beamspot "+self._options.beamspot+" unknown.")
00963 
00964                 if self._options.scenario == 'HeavyIons' and self._options.himix:
00965                         self.loadAndRemember("SimGeneral/MixingModule/himixGEN_cff")
00966 
00967         self.process.generation_step = cms.Path( getattr(self.process,genSeqName) )
00968         self.schedule.append(self.process.generation_step)
00969 
00970         """ Enrich the schedule with the summary of the filter step """
00971         #the gen filter in the endpath
00972         self.loadAndRemember("GeneratorInterface/Core/genFilterSummary_cff")
00973         self.scheduleSequenceAtEnd('genFilterSummary','genfiltersummary_step')
00974         return

def ConfigBuilder::ConfigBuilder::prepare_HARVESTING (   self,
  sequence = None 
)
Enrich the process with harvesting step 

Definition at line 1296 of file ConfigBuilder.py.

01297                                                  :
01298         """ Enrich the process with harvesting step """
01299         self.EDMtoMECFF='Configuration/StandardSequences/EDMtoME'+self._options.harvesting+'_cff'
01300         self.loadAndRemember(self.EDMtoMECFF)
01301         self.scheduleSequence('EDMtoME','edmtome_step')
01302 
01303         harvestingConfig = self.loadDefaultOrSpecifiedCFF(sequence,self.HARVESTINGDefaultCFF)
01304         sequence = sequence.split('.')[-1]
01305 
01306         # decide which HARVESTING paths to use
01307         harvestingList = sequence.split("+")
01308         for name in harvestingConfig.__dict__:
01309             harvestingstream = getattr(harvestingConfig,name)
01310             if name in harvestingList and isinstance(harvestingstream,cms.Path):
01311                self.schedule.append(harvestingstream)
01312                harvestingList.remove(name)
01313             if name in harvestingList and isinstance(harvestingstream,cms.Sequence):
01314                     setattr(self.process,name+"_step",cms.Path(harvestingstream))
01315                     self.schedule.append(getattr(self.process,name+"_step"))
01316                     harvestingList.remove(name)
01317             if isinstance(harvestingstream,cms.Path):
01318                     self.blacklist_paths.append(harvestingstream)
01319 
01320 
01321         # This if statment must disappears once some config happens in the alca harvesting step
01322         if 'alcaHarvesting' in harvestingList:
01323             harvestingList.remove('alcaHarvesting')
01324 
01325         if len(harvestingList) != 0 and 'dummyHarvesting' not in harvestingList :
01326             print "The following harvesting could not be found : ", harvestingList
01327             raise
01328 
01329         self.scheduleSequence('DQMSaver','dqmsave_step')
01330         return

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

Definition at line 1041 of file ConfigBuilder.py.

01042                                           :
01043         """ Enrich the schedule with the HLT simulation step"""
01044         loadDir='HLTrigger'
01045         fastSim=False
01046         if 'FASTSIM' in self.stepMap.keys():
01047                 fastSim=True
01048                 loadDir='FastSimulation'
01049         if not sequence:
01050                 print "no specification of the hlt menu has been given, should never happen"
01051                 raise  Exception('no HLT sequence provided')
01052         else:
01053                 if ',' in sequence:
01054                         #case where HLT:something:something was provided
01055                         self.executeAndRemember('import HLTrigger.Configuration.Utilities')
01056                         optionsForHLT = {}
01057                         optionsForHLT['data'] = self._options.isData
01058                         optionsForHLT['type'] = 'GRun'
01059                         if self._options.scenario == 'HeavyIons': optionsForHLT['type'] = 'HIon'
01060                         optionsForHLTConfig = ', '.join('%s=%s' % (key, repr(val)) for (key, val) in optionsForHLT.iteritems())
01061                         self.executeAndRemember('process.loadHltConfiguration("%s",%s)'%(sequence.replace(',',':'),optionsForHLTConfig))
01062                 else:
01063                         dataSpec=''
01064                         if self._options.isData:
01065                                 dataSpec='_data'
01066                         self.loadAndRemember('%s/Configuration/HLT_%s%s_cff'%(loadDir,sequence,dataSpec))
01067 
01068         self.schedule.append(self.process.HLTSchedule)
01069         [self.blacklist_paths.append(path) for path in self.process.HLTSchedule if isinstance(path,(cms.Path,cms.EndPath))]
01070         if (fastSim and 'HLT' in self.stepMap.keys()):
01071                 self.finalizeFastSimHLT()
01072 

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

Definition at line 1028 of file ConfigBuilder.py.

01029                                          :
01030             """ Enrich the schedule with the L1 simulation step"""
01031             if not sequence:
01032                     self.loadAndRemember(self.L1EMDefaultCFF)
01033             else:
01034                     # let the L1 package decide for the scenarios available
01035                     from L1Trigger.Configuration.ConfigBuilder import getConfigsForScenario
01036                     listOfImports = getConfigsForScenario(sequence)
01037                     for file in listOfImports:
01038                             self.loadAndRemember(file)
01039             self.scheduleSequence('SimL1Emulator','L1simulation_step')
01040             return

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

Definition at line 1089 of file ConfigBuilder.py.

01090                                                    :
01091         ''' Enrich the schedule with L1 HW validation '''
01092         self.loadDefaultOrSpecifiedCFF(sequence,self.L1HwValDefaultCFF)
01093         self.scheduleSequence(sequence.split('.')[-1],'l1hwval_step')
01094         return

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

Definition at line 1095 of file ConfigBuilder.py.

01096                                                  :
01097         ''' Enrich the schedule with L1 reconstruction '''
01098         self.loadDefaultOrSpecifiedCFF(sequence,self.L1RecoDefaultCFF)
01099         self.scheduleSequence(sequence.split('.')[-1],'L1Reco_step')
01100         return

def ConfigBuilder::ConfigBuilder::prepare_POSTRECO (   self,
  sequence = None 
)
Enrich the schedule with the postreco step 

Definition at line 1157 of file ConfigBuilder.py.

01158                                                :
01159         """ Enrich the schedule with the postreco step """
01160         self.loadAndRemember(self.POSTRECODefaultCFF)
01161         self.scheduleSequence('postreco_generator','postreco_step')
01162         return
01163 

def ConfigBuilder::ConfigBuilder::prepare_RAW2DIGI (   self,
  sequence = "RawToDigi" 
)

Definition at line 1084 of file ConfigBuilder.py.

01085                                                       :
01086             self.loadDefaultOrSpecifiedCFF(sequence,self.RAW2DIGIDefaultCFF)
01087             self.scheduleSequence(sequence.split('.')[-1],'raw2digi_step')
01088             return

def ConfigBuilder::ConfigBuilder::prepare_RAW2RECO (   self,
  sequence = None 
)

Definition at line 1073 of file ConfigBuilder.py.

01074                                                :
01075             if ','in sequence:
01076                     seqReco=sequence.split(',')[1]
01077                     seqDigi=sequence.split(',')[0]
01078             else:
01079                     print "RAW2RECO requires two specifications",sequence,"insufficient"
01080 
01081             self.prepare_RAW2DIGI(seqDigi)
01082             self.prepare_RECO(seqReco)
01083             return

def ConfigBuilder::ConfigBuilder::prepare_RECO (   self,
  sequence = "reconstruction" 
)
Enrich the schedule with reconstruction 

Definition at line 1101 of file ConfigBuilder.py.

01102                                                        :
01103         ''' Enrich the schedule with reconstruction '''
01104         self.loadDefaultOrSpecifiedCFF(sequence,self.RECODefaultCFF)
01105         self.scheduleSequence(sequence.split('.')[-1],'reconstruction_step')
01106         return

def ConfigBuilder::ConfigBuilder::prepare_REPACK (   self,
  sequence = None 
)

Definition at line 1023 of file ConfigBuilder.py.

01024                                              :
01025             self.loadDefaultOrSpecifiedCFF(sequence,self.REPACKDefaultCFF)
01026             self.scheduleSequence(sequence.split('.')[-1],'digi2repack_step')
01027             return

def ConfigBuilder::ConfigBuilder::prepare_SIM (   self,
  sequence = None 
)
Enrich the schedule with the simulation step

Definition at line 975 of file ConfigBuilder.py.

00976                                           :
00977         """ Enrich the schedule with the simulation step"""
00978         self.loadAndRemember(self.SIMDefaultCFF)
00979         if self._options.gflash==True:
00980                 self.loadAndRemember("Configuration/StandardSequences/GFlashSIM_cff")
00981 
00982         if self._options.magField=='0T':
00983                 self.executeAndRemember("process.g4SimHits.UseMagneticField = cms.bool(False)")
00984 
00985         if self._options.himix==True:
00986                 if self._options.geometry in defaultOptions.geometryExtendedOptions:
00987                         self.loadAndRemember("SimGeneral/MixingModule/himixSIMExtended_cff")
00988                 else:
00989                         self.loadAndRemember("SimGeneral/MixingModule/himixSIMIdeal_cff")
00990 
00991         self.scheduleSequence('psim','simulation_step')
00992         return

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

Definition at line 1107 of file ConfigBuilder.py.

01108                                             :
01109         ''' Enrich the schedule with skimming fragments'''
01110         skimConfig = self.loadDefaultOrSpecifiedCFF(sequence,self.SKIMDefaultCFF)
01111         sequence = sequence.split('.')[-1]
01112 
01113         skimlist=[]
01114         ## support @Mu+DiJet+@Electron configuration via autoSkim.py
01115         for specifiedCommand in sequence.split('+'):
01116                 if specifiedCommand[0]=="@":
01117                         from Configuration.Skimming.autoSkim import autoSkim
01118                         location=specifiedCommand[1:]
01119                         skimSequence = autoSkim[location]
01120                         skimlist.extend(skimSequence.split('+'))
01121                 else:
01122                         skimlist.append(specifiedCommand)
01123 
01124         #print "dictionnary for skims:",skimConfig.__dict__
01125         for skim in skimConfig.__dict__:
01126                 skimstream = getattr(skimConfig,skim)
01127                 if isinstance(skimstream,cms.Path):
01128                     #black list the alca path so that they do not appear in the cfg
01129                     self.blacklist_paths.append(skimstream)
01130                 if (not isinstance(skimstream,cms.FilteredStream)):
01131                         continue
01132                 shortname = skim.replace('SKIMStream','')
01133                 if (sequence=="all"):
01134                         self.addExtraStream(skim,skimstream)
01135                 elif (shortname in skimlist):
01136                         self.addExtraStream(skim,skimstream)
01137                         #add a DQM eventcontent for this guy
01138                         if self._options.datatier!="":
01139                                 self.process.load(self.EVTCONTDefaultCFF)
01140                                 skimstreamDQM = cms.FilteredStream(
01141                                         responsible = skimstream.responsible,
01142                                         name = skimstream.name+'DQM',
01143                                         paths = skimstream.paths,
01144                                         selectEvents = skimstream.selectEvents,
01145                                         content = self._options.datatier+'EventContent',
01146                                         dataTier = cms.untracked.string(self._options.datatier)
01147                                         )
01148                                 self.addExtraStream(skim+'DQM',skimstreamDQM)
01149                         for i in range(skimlist.count(shortname)):
01150                                 skimlist.remove(shortname)
01151 
01152 
01153 
01154         if (skimlist.__len__()!=0 and sequence!="all"):
01155                 print 'WARNING, possible typo with SKIM:'+'+'.join(skimlist)
01156                 raise Exception('WARNING, possible typo with SKIM:'+'+'.join(skimlist))

def ConfigBuilder::ConfigBuilder::prepare_VALIDATION (   self,
  sequence = 'validation' 
)

Definition at line 1164 of file ConfigBuilder.py.

01165                                                          :
01166             self.loadDefaultOrSpecifiedCFF(sequence,self.VALIDATIONDefaultCFF)
01167             #in case VALIDATION:something:somethingelse -> something,somethingelse
01168             sequence=sequence.split('.')[-1]
01169             if sequence.find(',')!=-1:
01170                     prevalSeqName=sequence.split(',')[0]
01171                     valSeqName=sequence.split(',')[1]
01172             else:
01173                     postfix=''
01174                     if sequence:
01175                             postfix='_'+sequence
01176                     prevalSeqName='prevalidation'+postfix
01177                     valSeqName='validation'+postfix
01178                     if not hasattr(self.process,valSeqName):
01179                             prevalSeqName=''
01180                             valSeqName=sequence
01181 
01182             if not 'DIGI' in self.stepMap and not 'FASTSIM' in self.stepMap:
01183                     self.loadAndRemember('Configuration.StandardSequences.ReMixingSeeds_cff')
01184             #rename the HLT process in validation steps
01185             if ('HLT' in self.stepMap and not 'FASTSIM' in self.stepMap) or self._options.hltProcess:
01186                     self.renameHLTprocessInSequence(valSeqName)
01187                     if prevalSeqName:
01188                             self.renameHLTprocessInSequence(prevalSeqName)
01189 
01190             if prevalSeqName:
01191                     self.process.prevalidation_step = cms.Path( getattr(self.process, prevalSeqName ) )
01192                     self.schedule.append(self.process.prevalidation_step)
01193             if valSeqName.startswith('genvalid'):
01194                     self.loadAndRemember("IOMC.RandomEngine.IOMC_cff")
01195                     self.process.validation_step = cms.Path( getattr(self.process,valSeqName ) )
01196             else:
01197                     self.process.validation_step = cms.EndPath( getattr(self.process,valSeqName ) )
01198             self.schedule.append(self.process.validation_step)
01199 
01200 
01201             if not 'DIGI' in self.stepMap:
01202                     self.executeAndRemember("process.mix.playback = True")
01203             return
01204 

def ConfigBuilder::ConfigBuilder::renameHLTprocessInSequence (   self,
  sequence,
  proc = None,
  HLTprocess = 'HLT' 
)

Definition at line 1264 of file ConfigBuilder.py.

01265                                                                             :
01266             if self._options.hltProcess:
01267                     proc=self._options.hltProcess
01268             else:
01269                     proc=self.process.name_()
01270             if proc==HLTprocess:    return
01271             # look up all module in dqm sequence
01272             print "replacing %s process name - sequence %s will use '%s'" % (HLTprocess,sequence, proc)
01273             getattr(self.process,sequence).visit(ConfigBuilder.MassSearchReplaceProcessNameVisitor(HLTprocess,proc,whitelist = ("subSystemFolder",)))
01274             if 'from Configuration.PyReleaseValidation.ConfigBuilder import ConfigBuilder' not in self.additionalCommands:
01275                     self.additionalCommands.append('from Configuration.PyReleaseValidation.ConfigBuilder import ConfigBuilder')
01276             self.additionalCommands.append('process.%s.visit(ConfigBuilder.MassSearchReplaceProcessNameVisitor("%s", "%s", whitelist = ("subSystemFolder",)))'% (sequence,HLTprocess, proc))
01277 

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

Definition at line 814 of file ConfigBuilder.py.

00815                                                      :
00816             if '*' in seq:
00817                     #create only one path with all sequences in it
00818                     for i,s in enumerate(seq.split('*')):
00819                             if i==0:
00820                                     setattr(self.process,prefix,getattr(cms,what)( getattr(self.process, s) ))
00821                             else:
00822                                     p=getattr(self.process,prefix)
00823                                     p+=getattr(self.process, s)
00824                     self.schedule.append(getattr(self.process,prefix))
00825                     return
00826             else:
00827                     #create as many path as many sequences
00828                     if not '+' in seq:
00829                             setattr(self.process,prefix,getattr(cms,what)( getattr(self.process, seq) ))
00830                             self.schedule.append(getattr(self.process,prefix))
00831                     else:
00832                             for i,s in enumerate(seq.split('+')):
00833                                     sn=prefix+'%d'%(i)
00834                                     setattr(self.process,sn,getattr(cms,what)( getattr(self.process, s) ))
00835                                     self.schedule.append(getattr(self.process,sn))
00836                     return
    
def ConfigBuilder::ConfigBuilder::scheduleSequenceAtEnd (   self,
  seq,
  prefix 
)

Definition at line 837 of file ConfigBuilder.py.

00838                                               :
00839             self.scheduleSequence(seq,prefix,what='EndPath')
00840             return
            

Member Data Documentation

Definition at line 68 of file ConfigBuilder.py.

Definition at line 68 of file ConfigBuilder.py.

Definition at line 68 of file ConfigBuilder.py.

Definition at line 68 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 68 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 1296 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 68 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 68 of file ConfigBuilder.py.

Definition at line 68 of file ConfigBuilder.py.

Definition at line 1419 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 68 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 68 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 562 of file ConfigBuilder.py.

Definition at line 68 of file ConfigBuilder.py.

Definition at line 68 of file ConfigBuilder.py.