43 for (index,item)
in enumerate(items):
44 for (opt,value)
in threeValued:
45 if (str(item)
in opt)
and (index==len(items)-1
or items[index+1].startswith(
'-')):
46 items.insert(index+1,value)
48 (options,args) = parser.parse_args(items)
50 if not options.conditions
or options.conditions==
"help":
51 from Configuration.AlCa
import autoCond
53 for k
in autoCond.autoCond:
54 possible+=
"\nauto:"+k+
" -> "+autoCond.autoCond[k]
55 raise Exception(
"the --conditions option is mandatory. Possibilities are: "+possible)
63 if options.triggerResultsProcess ==
None and "ALCAOUTPUT" in options.step:
64 print "ERROR: If ALCA splitting is requested, the name of the process in which the alca producers ran needs to be specified. E.g. via --triggerResultsProcess RECO"
67 if not options.evt_type:
68 options.evt_type=sys.argv[1]
73 if options.dirin!=
'' and (
not options.dirin.endswith(
'/')): options.dirin+=
'/'
74 if options.dirout!=
'' and (
not options.dirout.endswith(
'/')): options.dirout+=
'/'
79 prec_step = {
"NONE":
"",
89 "DIGIPREMIX_S2":
"SIM",
98 "RAW2DIGI":
"DIGI2RAW",
99 "RAW2RECO":
"DIGI2RAW",
101 "DIGI2RAW":
"DATAMIX",
103 "ALCAHARVEST":
"RECO",
106 trimmedEvtType=options.evt_type.split(
'/')[-1]
109 options.trimmedStep=[]
110 for s
in options.step.split(
','):
112 options.trimmedStep.append(step)
113 first_step=options.trimmedStep[0]
119 'ALL':
'GEN,SIM,DIGI,L1,DIGI2RAW,HLT:GRun,RAW2DIGI,RECO,POSTRECO,VALIDATION,DQM',
120 'DATA_CHAIN':
'RAW2DIGI,RECO,POSTRECO,DQM'
122 if options.step
in stepsAliases:
123 options.step=stepsAliases[options.step]
125 options.step = options.step.replace(
"SIM_CHAIN",
"GEN,SIM,DIGI,L1,DIGI2RAW")
129 if (
"FASTSIM" in options.step
and not "VALIDATION" in options.step)
or "HARVESTING" in options.step
or "ALCAHARVEST" in options.step
or "ALCAOUTPUT" in options.step
or options.step ==
"":
131 if (
"SKIM" in options.step
and not "RECO" in options.step):
133 if (
"ENDJOB" in options.step):
135 if (
'DQMIO' in options.datatier):
138 options.step=options.step+
',ENDJOB'
142 if options.filetype==defaultOptions.filetype:
143 if options.filein.lower().endswith(
".lhe")
or options.filein.lower().endswith(
".lhef")
or options.filein.startswith(
"lhe:"):
144 options.filetype=
"LHE"
145 elif options.filein.startswith(
"mcdb:"):
146 print "This is a deprecated way of selecting lhe files from article number. Please use lhe:article argument to --filein"
147 options.filein=options.filein.replace(
'mcdb:',
'lhe:')
148 options.filetype=
"LHE"
150 options.filetype=
"EDM"
152 filesuffix = {
"LHE":
"lhe",
"EDM":
"root",
"MCDB":
"",
"DQM":
"root"}[options.filetype]
154 if options.filein==
"" and not (first_step
in (
"ALL",
"GEN",
"LHE",
"SIM_CHAIN")):
155 options.dirin=
"file:"+options.dirin.replace(
'file:',
'')
156 options.filein=trimmedEvtType+
"_"+prec_step[first_step]+
"."+filesuffix
161 standardFileName =
""
162 standardFileName = trimmedEvtType+
"_"+
"_".
join(options.trimmedStep)
163 standardFileName = standardFileName.replace(
",",
"_").
replace(
".",
"_")
164 if options.pileup !=
"NoPileUp":
165 standardFileName +=
"_PU"
169 if options.fileout==
"" and not first_step
in (
"HARVESTING",
"ALCAHARVEST"):
170 options.fileout = standardFileName+
".root"
173 if not options.python_filename:
174 options.python_filename = standardFileName+
'.py'
182 if 'reSIM' in options.trimmedStep:
183 options.name =
'RESIM'
184 elif 'reDIGI' in options.trimmedStep:
185 options.name =
'REDIGI'
186 elif 'HLT' in options.trimmedStep:
188 elif 'RECO' in options.trimmedStep:
189 options.name =
'RECO'
190 elif options.trimmedStep == [
'NONE']
and options.filetype
in (
'LHE',
'MCDB'):
192 elif len(options.trimmedStep)==0:
193 options.name =
'PROCESS'
195 options.name = options.trimmedStep[-1]
201 if "HARVESTING" in options.trimmedStep
and len(options.trimmedStep) > 1:
202 raise Exception(
"The Harvesting step must be run alone")
205 if not options.isData
and not options.isMC:
206 if 'SIM' in options.trimmedStep:
208 if 'CFWRITER' in options.trimmedStep:
210 if 'DIGI' in options.trimmedStep:
212 if 'DIGI2RAW' in options.trimmedStep:
214 if (
not (options.eventcontent ==
None))
and 'SIM' in options.eventcontent:
216 if 'SIM' in options.datatier:
219 print 'We have determined that this is simulation (if not, rerun cmsDriver.py with --data)'
221 print 'We have determined that this is real data (if not, rerun cmsDriver.py with --mc)'
224 if options.profile
and options.prefix:
225 raise Exception(
"--profile and --prefix are incompatible")
227 profileOpts = options.profile.split(
':')
229 profilerType = profileOpts[0].
replace(
"=",
" ")
231 if profilerType ==
"pp":
232 options.profileTypeLabel =
"performance"
233 elif profilerType ==
"mp":
234 options.profileTypeLabel =
"memory"
235 elif profilerType.startswith(
"fp "):
236 options.profileTypeLabel = profilerType.replace(
"fp ",
"")
238 raise Exception(
"Not a valid profiler type %s. Alternatives are pp, mp, fp=<function>."%(profilerType))
240 options.prefix =
"igprof -t cmsRun -%s" % profilerType
244 from Configuration.StandardSequences.Eras
import eras
245 from FWCore.ParameterSet.Config
import Modifier, ModifierChain
247 requestedEras = options.era.split(
",")
249 for eraName
in requestedEras :
250 if not hasattr( eras, eraName ) :
252 for key
in eras.__dict__ :
253 if eras.internalUseEras.count(getattr(eras,key)) > 0 :
continue
254 if isinstance( eras.__dict__[key], Modifier )
or isinstance( eras.__dict__[key], ModifierChain ) :
255 if validOptions!=
"" : validOptions+=
", "
256 validOptions+=
"'"+key+
"'"
257 raise Exception(
"'%s' is not a valid option for '--era'. Valid options are %s." % (eraName, validOptions) )
260 for eraName
in requestedEras :
261 if eras.internalUseEras.count(getattr(eras,eraName)) > 0 :
262 print "WARNING: You have explicitly set '"+eraName+
"' with the '--era' command. That is usually reserved for internal use only."
266 options.era+=
",fastSim"
268 options.era=
"fastSim"
271 if options.fast
and not options.scenario ==
"pp":
272 raise Exception(
"ERROR: the --option fast is only compatible with the default scenario (--scenario=pp)")
static std::string join(char **cmd)