CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
confdb.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 import sys
4 import re
5 import os
6 import urllib, urllib2
7 from pipe import pipe as _pipe
8 from options import globalTag
9 from itertools import islice
10 
11 def splitter(iterator, n):
12  i = iterator.__iter__()
13  while True:
14  l = list(islice(i, n))
15  if l:
16  yield l
17  else:
18  break
19 
20 
22  # paths not supported by FastSim
23  fastsimUnsupportedPaths = (
24 
25  # paths for which a recovery is not foreseen/possible
26  "AlCa_*_v*",
27  "DQM_*_v*",
28  "HLT_*Calibration_v*",
29  "HLT_DTErrors_v*",
30  "HLT_Random_v*",
31  "HLT_HcalNZS_v*",
32  "HLT_HcalPhiSym_v*",
33  "HLT_Activity_Ecal*_v*",
34  "HLT_IsoTrackHB_v*",
35  "HLT_IsoTrackHE_v*",
36  "HLT_L1SingleMuOpen_AntiBPTX_v*",
37  "HLT_JetE*_NoBPTX*_v*",
38  "HLT_L2Mu*_NoVertex_NoBPTX*_v*",
39  "HLT_L2Mu20_NoVertex_2Cha_NoBPTX3BX_NoHalo_v*",
40  "HLT_L2Mu30_NoVertex_2Cha_NoBPTX3BX_NoHalo_v*",
41  "HLT_PixelTracks_Multiplicity70_v*",
42  "HLT_PixelTracks_Multiplicity80_v*",
43  "HLT_PixelTracks_Multiplicity90_v*",
44  "HLT_Beam*_v*",
45 # "HLT_L1Tech_*_v*",
46  "HLT_GlobalRunHPDNoise_v*",
47  "HLT_L1TrackerCosmics_v*",
48  "HLT_HcalUTCA_v*",
49 
50 # TODO: paths not supported by FastSim, but for which a recovery should be attempted
51 
52  "HLT_DoubleMediumIsoPFTau30_Trk1_eta2p1_Reg_Jet30_v*",
53  "HLT_DoubleMediumIsoPFTau30_Trk1_eta2p1_Reg_v*",
54  "HLT_DoubleMediumIsoPFTau35_Trk1_eta2p1_Prong1_Reg_v*",
55  "HLT_DoubleMediumIsoPFTau35_Trk1_eta2p1_Reg_v*",
56  "HLT_IsoMu18_eta2p1_MediumIsoPFTau25_Trk1_eta2p1_Reg_v*",
57 # (not really needed for the five above, because the corresponding paths without regional
58 # tracking are already in the HLT menu)
59  "HLT_DoubleMediumIsoPFTau45_Trk1_eta2p1_Reg_Jet30_v*",
60  "HLT_DoubleMediumIsoPFTau50_Trk1_eta2p1_Prong1_Reg_v*",
61  "HLT_IsoMu26_eta2p1_MediumIsoPFTau30_Trk1_eta2p1_Reg_v*",
62 
63  )
64 
65  def __init__(self, configuration):
66  self.config = configuration
67  self.data = None
68  self.source = None
69  self.parent = None
70 
71  self.options = {
72  'essources' : [],
73  'esmodules' : [],
74  'modules' : [],
75  'sequences' : [],
76  'services' : [],
77  'paths' : [],
78  'psets' : [],
79  'blocks' : [],
80  }
81 
82  self.labels = {}
83  if self.config.fragment:
84  self.labels['process'] = ''
85  self.labels['dict'] = 'locals()'
86  else:
87  self.labels['process'] = 'process.'
88  self.labels['dict'] = 'process.__dict__'
89 
90  if self.config.online:
91  self.labels['connect'] = 'frontier://(proxyurl=http://localhost:3128)(serverurl=http://localhost:8000/FrontierOnProd)(serverurl=http://localhost:8000/FrontierOnProd)(retrieve-ziplevel=0)'
92  else:
93  self.labels['connect'] = 'frontier://FrontierProd'
94 
95  # get the configuration from ConfdB
96  self.buildPathList()
97  self.buildOptions()
99  self.customize()
100 
101 
103  url = 'http://j2eeps.cern.ch/cms-project-confdb-hltdev/get.jsp'
104  postdata = dict([ (key, ','.join(vals)) for key, vals in self.options.iteritems() if vals ])
105  postdata['noedsources'] = ''
106  if self.config.fragment:
107  postdata['cff'] = ''
108  if self.config.menu.run:
109  postdata['runNumber'] = self.config.menu.run
110  else:
111  postdata['dbName'] = self.config.menu.db
112  postdata['configName']= self.config.menu.name
113 
114  data = urllib2.urlopen(url, urllib.urlencode(postdata)).read()
115  if 'Exhausted Resultset' in data or 'CONFIG_NOT_FOUND' in data:
116  raise ImportError('%s is not a valid HLT menu' % self.config.menuConfig.value)
117  self.data = data
118 
119 
120  def getPathList(self):
121  url = 'http://j2eeps.cern.ch/cms-project-confdb-hltdev/get.jsp'
122  postdata = {
123  'noedsources': '',
124  'noes': '',
125  'noservices': '',
126  'nosequences': '',
127  'nomodules' : '',
128  'cff': '',
129  }
130  if self.config.menu.run:
131  postdata['runNumber'] = self.config.menu.run
132  else:
133  postdata['dbName'] = self.config.menu.db
134  postdata['configName']= self.config.menu.name
135 
136  data = urllib2.urlopen(url, urllib.urlencode(postdata)).read()
137  if 'Exhausted Resultset' in data or 'CONFIG_NOT_FOUND' in data:
138  raise ImportError('%s is not a valid HLT menu' % self.config.menuConfig.value)
139  filter = re.compile(r' *= *cms.(End)?Path.*')
140  paths = [ filter.sub('', line) for line in data.splitlines() if filter.search(line) ]
141  return paths
142 
143 
144  @staticmethod
145  def expandWildcards(globs, collection):
146  # expand a list of unix-style wildcards matching a given collection
147  # wildcards with no matches are silently discarded
148  matches = []
149  for glob in globs:
150  negate = ''
151  if glob[0] == '-':
152  negate = '-'
153  glob = glob[1:]
154  # translate a unix-style glob expression into a regular expression
155  filter = re.compile(r'^' + glob.replace('?', '.').replace('*', '.*').replace('[!', '[^') + r'$')
156  matches.extend( negate + element for element in collection if filter.match(element) )
157  return matches
158 
159 
160  @staticmethod
161  def consolidateNegativeList(elements):
162  # consolidate a list of path exclusions and re-inclusions
163  # the result is the list of paths to be removed from the dump
164  result = set()
165  for element in elements:
166  if element[0] == '-':
167  result.add( element )
168  else:
169  result.discard( '-' + element )
170  return sorted( element for element in result )
171 
172  @staticmethod
173  def consolidatePositiveList(elements):
174  # consolidate a list of path selection and re-exclusions
175  # the result is the list of paths to be included in the dump
176  result = set()
177  for element in elements:
178  if element[0] == '-':
179  result.discard( element[1:] )
180  else:
181  result.add( element )
182  return sorted( element for element in result )
183 
184 
185  # dump the final configuration
186  def dump(self):
187  return self.data % self.labels
188 
189 
190  # add release-specific customizations
192  # version specific customizations
193  self.data += """
194 # CMSSW version specific customizations
195 import os
196 cmsswVersion = os.environ['CMSSW_VERSION']
197 
198 # customization for 6_2_X
199 
200 # none for now
201 
202 """
203 
204  # customize the configuration according to the options
205  def customize(self):
206 
207  # adapt the source to the current scenario
208  if not self.config.fragment:
209  self.build_source()
210 
211  # manual override some parameters
212  if self.config.type in ('GRun', ):
213  self.data += """
214 # Enable HF Noise filters in GRun menu
215 if 'hltHfreco' in %(dict)s:
216  %(process)shltHfreco.setNoiseFlags = cms.bool( True )
217 """
218  if self.config.type in ('HIon', ):
219  self.data += """
220 # Disable HF Noise filters in HIon menu
221 if 'hltHfreco' in %(dict)s:
222  %(process)shltHfreco.setNoiseFlags = cms.bool( False )
223 """
224 
225 # self.data += """
226 ## untracked parameters with NO default in the code
227 #if 'hltHcalDataIntegrityMonitor' in %(dict)s:
228 # %(process)shltHcalDataIntegrityMonitor.RawDataLabel = cms.untracked.InputTag("rawDataCollector")
229 #if 'hltDt4DSegments' in %(dict)s:
230 # %(process)shltDt4DSegments.debug = cms.untracked.bool( False )
231 #"""
232 
233  # if requested, override the L1 self from the GlobalTag (Xml)
234  self.overrideL1MenuXml()
235 
236  # if running on MC, adapt the configuration accordingly
237  self.fixForMC()
238 
239  # if requested, remove the HLT prescales
240  self.fixPrescales()
241 
242  # if requested, override all ED/HLTfilters to always pass ("open" mode)
243  self.instrumentOpenMode()
244 
245  # if requested, change all HLTTriggerTypeFilter EDFilters to accept only error events (SelectedTriggerType = 0)
246  self.instrumentErrorEventType()
247 
248  # if requested, instrument the self with the modules and EndPath needed for timing studies
249  self.instrumentTiming()
250 
251  # add version-specific customisations
253 
254  if self.config.fragment:
255 
256 # self.data += """
257 ## dummyfy hltGetConditions in cff's
258 #if 'hltGetConditions' in %(dict)s and 'HLTriggerFirstPath' in %(dict)s :
259 # %(process)shltDummyConditions = cms.EDFilter( "HLTBool",
260 # result = cms.bool( True )
261 # )
262 # %(process)sHLTriggerFirstPath.replace(%(process)shltGetConditions,%(process)shltDummyConditions)
263 #"""
264 
265  # if requested, adapt the configuration for FastSim
266  self.fixForFastSim()
267 
268  else:
269 
270  # override the process name and adapt the relevant filters
271  self.overrideProcessName()
272 
273  # override the output modules to output root files
274  self.overrideOutput()
275 
276  # add global options
277  self.addGlobalOptions()
278 
279  # if requested or necessary, override the GlobalTag and connection strings (incl. L1!)
280  self.overrideGlobalTag()
281 
282  # if requested, run (part of) the L1 emulator
283  self.runL1Emulator()
284 
285  # request summary informations from the MessageLogger
286  self.updateMessageLogger()
287 
288  # load 5.2.x JECs, until they are in the GlobalTag
289 # self.loadAdditionalConditions('load 5.2.x JECs',
290 # {
291 # 'record' : 'JetCorrectionsRecord',
292 # 'tag' : 'JetCorrectorParametersCollection_AK5Calo_2012_V8_hlt_mc',
293 # 'label' : 'AK5CaloHLT',
294 # 'connect' : '%(connect)s/CMS_COND_31X_PHYSICSTOOLS'
295 # }, {
296 # 'record' : 'JetCorrectionsRecord',
297 # 'tag' : 'JetCorrectorParametersCollection_AK5PF_2012_V8_hlt_mc',
298 # 'label' : 'AK5PFHLT',
299 # 'connect' : '%(connect)s/CMS_COND_31X_PHYSICSTOOLS'
300 # }, {
301 # 'record' : 'JetCorrectionsRecord',
302 # 'tag' : 'JetCorrectorParametersCollection_AK5PFchs_2012_V8_hlt_mc',
303 # 'label' : 'AK5PFchsHLT',
304 # 'connect' : '%(connect)s/CMS_COND_31X_PHYSICSTOOLS'
305 # }
306 # )
307 
308 
309  def addGlobalOptions(self):
310  # add global options
311  self.data += """
312 # limit the number of events to be processed
313 %%(process)smaxEvents = cms.untracked.PSet(
314  input = cms.untracked.int32( %d )
315 )
316 """ % self.config.events
317 
318  if not self.config.profiling:
319  self.data += """
320 # enable the TrigReport and TimeReport
321 %(process)soptions = cms.untracked.PSet(
322  wantSummary = cms.untracked.bool( True )
323 )
324 """
325 
326 
327  def _fix_parameter(self, **args):
328  """arguments:
329  name: parameter name (optional)
330  type: parameter type (look for tracked and untracked variants)
331  value: original value
332  replace: replacement value
333  """
334  if 'name' in args:
335  self.data = re.sub(
336  r'%(name)s = cms(?P<tracked>(?:\.untracked)?)\.%(type)s\( (?P<quote>["\']?)%(value)s(?P=quote)' % args,
337  r'%(name)s = cms\g<tracked>.%(type)s( \g<quote>%(replace)s\g<quote>' % args,
338  self.data)
339  else:
340  self.data = re.sub(
341  r'cms(?P<tracked>(?:\.untracked)?)\.%(type)s\( (?P<quote>["\']?)%(value)s(?P=quote)' % args,
342  r'cms\g<tracked>.%(type)s( \g<quote>%(replace)s\g<quote>' % args,
343  self.data)
344 
345 
346  def fixForMC(self):
347  if not self.config.data:
348  # customise the HLT menu for running on MC
349  if not self.config.fragment:
350  self.data += """
351 # customise the HLT menu for running on MC
352 from HLTrigger.Configuration.customizeHLTforMC import customizeHLTforMC
353 process = customizeHLTforMC(process)
354 """
355 
356 
357  def fixForFastSim(self):
358  if self.config.fastsim:
359  # adapt the hle configuration (fragment) to run under fastsim
360  self.data = re.sub( r'import FWCore.ParameterSet.Config as cms', r'\g<0>\nfrom FastSimulation.HighLevelTrigger.HLTSetup_cff import *', self.data)
361 
362  # remove the definition of streams and datasets
363  self.data = re.compile( r'^streams.*\n(.*\n)*?^\)\s*\n', re.MULTILINE ).sub( '', self.data )
364  self.data = re.compile( r'^datasets.*\n(.*\n)*?^\)\s*\n', re.MULTILINE ).sub( '', self.data )
365 
366  # fix the definition of module
367  # FIXME: this should be updated to take into accout the --l1-emulator option
368  self._fix_parameter( type = 'InputTag', value = 'hltL1extraParticles', replace = 'l1extraParticles')
369  self._fix_parameter(name = 'GMTReadoutCollection', type = 'InputTag', value = 'hltGtDigis', replace = 'gmtDigis')
370  self._fix_parameter( type = 'InputTag', value = 'hltGtDigis', replace = 'gtDigis')
371  self._fix_parameter( type = 'InputTag', value = 'hltL1GtObjectMap', replace = 'gtDigis')
372  self._fix_parameter(name = 'initialSeeds', type = 'InputTag', value = 'noSeedsHere', replace = 'globalPixelSeeds:GlobalPixel')
373  self._fix_parameter(name = 'preFilteredSeeds', type = 'bool', value = 'True', replace = 'False')
374  self._fix_parameter( type = 'InputTag', value = 'hltOfflineBeamSpot', replace = 'offlineBeamSpot')
375  self._fix_parameter( type = 'InputTag', value = 'hltOnlineBeamSpot', replace = 'offlineBeamSpot')
376  self._fix_parameter( type = 'InputTag', value = 'hltMuonCSCDigis', replace = 'simMuonCSCDigis')
377  self._fix_parameter( type = 'InputTag', value = 'hltMuonDTDigis', replace = 'simMuonDTDigis')
378  self._fix_parameter( type = 'InputTag', value = 'hltMuonRPCDigis', replace = 'simMuonRPCDigis')
379  self._fix_parameter( type = 'InputTag', value = 'hltRegionalTracksForL3MuonIsolation', replace = 'hltPixelTracks')
380  self._fix_parameter(name = 'src', type = 'InputTag', value = 'hltHcalTowerNoiseCleaner', replace = 'hltTowerMakerForAll')
381  self._fix_parameter(name = 'src', type = 'InputTag', value = 'hltIter4Tau3MuMerged', replace = 'hltIter4Merged')
382 
383  # fix the definition of sequences and paths
384  self.data = re.sub( r'hltMuonCSCDigis', r'cms.SequencePlaceholder( "simMuonCSCDigis" )', self.data )
385  self.data = re.sub( r'hltMuonDTDigis', r'cms.SequencePlaceholder( "simMuonDTDigis" )', self.data )
386  self.data = re.sub( r'hltMuonRPCDigis', r'cms.SequencePlaceholder( "simMuonRPCDigis" )', self.data )
387  self.data = re.sub( r'HLTEndSequence', r'cms.SequencePlaceholder( "HLTEndSequence" )', self.data )
388  self.data = re.sub( r'hltGtDigis', r'HLTBeginSequence', self.data )
389 
390 
391  def fixPrescales(self):
392  # update the PrescaleService to match the new list of paths
393  if self.options['paths']:
394  if self.options['paths'][0][0] == '-':
395  # drop requested paths
396  for minuspath in self.options['paths']:
397  path = minuspath[1:]
398  self.data = re.sub(r' cms.PSet\( pathName = cms.string\( "%s" \),\n prescales = cms.vuint32\( .* \)\n \),?\n' % path, '', self.data)
399  else:
400  # keep requested paths
401  for path in self.all_paths:
402  if path not in self.options['paths']:
403  self.data = re.sub(r' cms.PSet\( pathName = cms.string\( "%s" \),\n prescales = cms.vuint32\( .* \)\n \),?\n' % path, '', self.data)
404 
405  if self.config.unprescale:
406  self.data += """
407 # remove the HLT prescales
408 if 'PrescaleService' in %(dict)s:
409  %(process)sPrescaleService.lvl1DefaultLabel = cms.string( '0' )
410  %(process)sPrescaleService.lvl1Labels = cms.vstring( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' )
411  %(process)sPrescaleService.prescaleTable = cms.VPSet( )
412 """
413 
414 
416  if self.config.open:
417  # find all EDfilters
418  filters = [ match[1] for match in re.findall(r'(process\.)?\b(\w+) = cms.EDFilter', self.data) ]
419  re_sequence = re.compile( r'cms\.(Path|Sequence)\((.*)\)' )
420  # remove existing 'cms.ingore' and '~' modifiers
421  self.data = re_sequence.sub( lambda line: re.sub( r'cms\.ignore *\( *((process\.)?\b(\w+)) *\)', r'\1', line.group(0) ), self.data )
422  self.data = re_sequence.sub( lambda line: re.sub( r'~', '', line.group(0) ), self.data )
423  # wrap all EDfilters with "cms.ignore( ... )", 1000 at a time (python 2.6 complains for too-big regular expressions)
424  for some in splitter(filters, 1000):
425  re_filters = re.compile( r'\b((process\.)?(' + r'|'.join(some) + r'))\b' )
426  self.data = re_sequence.sub( lambda line: re_filters.sub( r'cms.ignore( \1 )', line.group(0) ), self.data )
427 
428 
430  if self.config.errortype:
431  # change all HLTTriggerTypeFilter EDFilters to accept only error events (SelectedTriggerType = 0)
432  self._fix_parameter(name = 'SelectedTriggerType', type ='int32', value = '1', replace = '0')
433  self._fix_parameter(name = 'SelectedTriggerType', type ='int32', value = '2', replace = '0')
434  self._fix_parameter(name = 'SelectedTriggerType', type ='int32', value = '3', replace = '0')
435 
436 
437  def overrideGlobalTag(self):
438  # overwrite GlobalTag
439  # the logic is:
440  # - always set the correct connection string and pfnPrefix
441  # - if a GlobalTag is specified on the command line:
442  # - override the global tag
443  # - if the GT is "auto:...", insert the code to read it from Configuration.AlCa.autoCond
444  # - if a GlobalTag is NOT specified on the command line:
445  # - when running on data, do nothing, and keep the global tag in the menu
446  # - when running on mc, take the GT from the configuration.type
447 
448  # override the GlobalTag connection string and pfnPrefix
449  text = """
450 # override the GlobalTag, connection string and pfnPrefix
451 if 'GlobalTag' in %(dict)s:
452 """
453 
454  # when running on MC, override the global tag even if not specified on the command line
455  if not self.config.data and not self.config.globaltag:
456  if self.config.type in globalTag:
457  self.config.globaltag = globalTag[self.config.type]
458  else:
459  self.config.globaltag = globalTag['GRun']
460 
461  # if requested, override the L1 menu from the GlobalTag (using the same connect as the GlobalTag itself)
462  if self.config.l1.override:
463  self.config.l1.record = 'L1GtTriggerMenuRcd'
464  self.config.l1.label = ''
465  self.config.l1.tag = self.config.l1.override
466  if not self.config.l1.connect:
467  self.config.l1.connect = '%(connect)s/CMS_COND_31X_L1T'
468  self.config.l1cond = '%(tag)s,%(record)s,%(connect)s' % self.config.l1.__dict__
469  else:
470  self.config.l1cond = None
471 
472  if self.config.globaltag or self.config.l1cond:
473  text += " from Configuration.AlCa.GlobalTag import GlobalTag as customiseGlobalTag\n"
474  text += " %(process)sGlobalTag = customiseGlobalTag(%(process)sGlobalTag"
475  if self.config.globaltag:
476  text += ", globaltag = %s" % repr(self.config.globaltag)
477  if self.config.l1cond:
478  text += ", conditions = %s" % repr(self.config.l1cond)
479  text += ")\n"
480 
481  text += """ %(process)sGlobalTag.connect = '%(connect)s/CMS_COND_31X_GLOBALTAG'
482  %(process)sGlobalTag.pfnPrefix = cms.untracked.string('%(connect)s/')
483  for pset in process.GlobalTag.toGet.value():
484  pset.connect = pset.connect.value().replace('frontier://FrontierProd/', '%(connect)s/')
485 """
486  self.data += text
487 
488  def overrideL1MenuXml(self):
489  # if requested, override the L1 menu from the GlobalTag (Xml file)
490  if self.config.l1Xml.XmlFile:
491  text = """
492 # override the L1 menu from an Xml file
493 %%(process)sl1GtTriggerMenuXml = cms.ESProducer("L1GtTriggerMenuXmlProducer",
494  TriggerMenuLuminosity = cms.string('%(LumiDir)s'),
495  DefXmlFile = cms.string('%(XmlFile)s'),
496  VmeXmlFile = cms.string('')
497 )
498 %%(process)sL1GtTriggerMenuRcdSource = cms.ESSource("EmptyESSource",
499  recordName = cms.string('L1GtTriggerMenuRcd'),
500  iovIsRunNotTime = cms.bool(True),
501  firstValid = cms.vuint32(1)
502 )
503 %%(process)ses_prefer_l1GtParameters = cms.ESPrefer('L1GtTriggerMenuXmlProducer','l1GtTriggerMenuXml')
504 """
505  self.data += text % self.config.l1Xml.__dict__
506 
507  def runL1EmulatorGT(self):
508  # if requested, run (part of) the L1 emulator, then repack the data into a new RAW collection, to be used by the HLT
509  if not self.config.emulator:
510  return
511 
512  if self.config.emulator != 'gt':
513  # only the GT emulator is currently supported
514  return
515 
516  # run the L1 GT emulator, then repack the data into a new RAW collection, to be used by the HLT
517  text = """
518 # run the L1 GT emulator, then repack the data into a new RAW collection, to be used by the HLT
519 """
520  if self.config.fragment:
521  # FIXME in a cff, should also update the HLTSchedule
522  text += "import Configuration.StandardSequences.SimL1EmulatorRepack_GT_cff\n"
523  else:
524  text += "process.load( 'Configuration.StandardSequences.SimL1EmulatorRepack_GT_cff' )\n"
525 
526  if not 'hltBoolFalse' in self.data:
527  # add hltBoolFalse
528  text += """
529 %(process)shltBoolFalse = cms.EDFilter( "HLTBool",
530  result = cms.bool( False )
531 )
532 """
533  text += "process.L1Emulator = cms.Path( process.SimL1Emulator + process.hltBoolFalse )\n\n"
534 
535  self.data = re.sub(r'.*cms\.(End)?Path.*', text + r'\g<0>', self.data, 1)
536 
537 
538  def runL1Emulator(self):
539  # if requested, run (part of) the L1 emulator
540  if self.config.emulator:
541  # FIXME this fragment used "process" explicitly
542  emulator = {
543  'RawToDigi': '',
544  'CustomL1T': '',
545  'CustomHLT': ''
546  }
547 
548  if self.config.data:
549  emulator['RawToDigi'] = 'RawToDigi_Data_cff'
550  else:
551  emulator['RawToDigi'] = 'RawToDigi_cff'
552 
553  if self.config.emulator == 'gt':
554  emulator['CustomL1T'] = 'customiseL1GtEmulatorFromRaw'
555  emulator['CustomHLT'] = 'switchToSimGtDigis'
556  elif self.config.emulator == 'gct,gt':
557  emulator['CustomL1T'] = 'customiseL1CaloAndGtEmulatorsFromRaw'
558  emulator['CustomHLT'] = 'switchToSimGctGtDigis'
559  elif self.config.emulator == 'gmt,gt':
560  # XXX currently unsupported
561  emulator['CustomL1T'] = 'customiseL1MuonAndGtEmulatorsFromRaw'
562  emulator['CustomHLT'] = 'switchToSimGmtGtDigis'
563  elif self.config.emulator in ('gmt,gct,gt', 'gct,gmt,gt', 'all'):
564  emulator['CustomL1T'] = 'customiseL1EmulatorFromRaw'
565  emulator['CustomHLT'] = 'switchToSimGmtGctGtDigis'
566  else:
567  # unsupported argument, default to running the whole emulator
568  emulator['CustomL1T'] = 'customiseL1EmulatorFromRaw'
569  emulator['CustomHLT'] = 'switchToSimGmtGctGtDigis'
570 
571  self.data += """
572 # customize the L1 emulator to run %(CustomL1T)s with HLT to %(CustomHLT)s
573 process.load( 'Configuration.StandardSequences.%(RawToDigi)s' )
574 process.load( 'Configuration.StandardSequences.SimL1Emulator_cff' )
575 import L1Trigger.Configuration.L1Trigger_custom
576 process = L1Trigger.Configuration.L1Trigger_custom.%(CustomL1T)s( process )
577 process = L1Trigger.Configuration.L1Trigger_custom.customiseResetPrescalesAndMasks( process )
578 
579 # customize the HLT to use the emulated results
580 import HLTrigger.Configuration.customizeHLTforL1Emulator
581 process = HLTrigger.Configuration.customizeHLTforL1Emulator.switchToL1Emulator( process )
582 process = HLTrigger.Configuration.customizeHLTforL1Emulator.%(CustomHLT)s( process )
583 """ % emulator
584 
585 
586  def overrideOutput(self):
587  # override the "online" ShmStreamConsumer output modules with "offline" PoolOutputModule's
588  self.data = re.sub(
589  r'\b(process\.)?hltOutput(\w+) *= *cms\.OutputModule\( *"ShmStreamConsumer" *,',
590  r'%(process)shltOutput\2 = cms.OutputModule( "PoolOutputModule",\n fileName = cms.untracked.string( "output\2.root" ),\n fastCloning = cms.untracked.bool( False ),\n dataset = cms.untracked.PSet(\n filterName = cms.untracked.string( "" ),\n dataTier = cms.untracked.string( "RAW" )\n ),',
591  self.data
592  )
593 
594  if not self.config.fragment and self.config.output == 'full':
595  # add a single "keep *" output
596  self.data += """
597 # add a single "keep *" output
598 %(process)shltOutputFULL = cms.OutputModule( "PoolOutputModule",
599  fileName = cms.untracked.string( "outputFULL.root" ),
600  fastCloning = cms.untracked.bool( False ),
601  dataset = cms.untracked.PSet(
602  dataTier = cms.untracked.string( 'RECO' ),
603  filterName = cms.untracked.string( '' )
604  ),
605  outputCommands = cms.untracked.vstring( 'keep *' )
606 )
607 %(process)sFULLOutput = cms.EndPath( %(process)shltOutputFULL )
608 """
609 
610 
611  # override the process name and adapt the relevant filters
613  if self.config.name is None:
614  return
615 
616  # override the process name
617  quote = '[\'\"]'
618  self.data = re.compile(r'^(process\s*=\s*cms\.Process\(\s*' + quote + r')\w+(' + quote + r'\s*\).*)$', re.MULTILINE).sub(r'\1%s\2' % self.config.name, self.data, 1)
619 
620  # the following was stolen and adapted from HLTrigger.Configuration.customL1THLT_Options
621  self.data += """
622 # adapt HLT modules to the correct process name
623 if 'hltTrigReport' in %%(dict)s:
624  %%(process)shltTrigReport.HLTriggerResults = cms.InputTag( 'TriggerResults', '', '%(name)s' )
625 
626 if 'hltPreExpressCosmicsOutputSmart' in %%(dict)s:
627  %%(process)shltPreExpressCosmicsOutputSmart.TriggerResultsTag = cms.InputTag( 'TriggerResults', '', '%(name)s' )
628 
629 if 'hltPreExpressOutputSmart' in %%(dict)s:
630  %%(process)shltPreExpressOutputSmart.TriggerResultsTag = cms.InputTag( 'TriggerResults', '', '%(name)s' )
631 
632 if 'hltPreDQMForHIOutputSmart' in %%(dict)s:
633  %%(process)shltPreDQMForHIOutputSmart.TriggerResultsTag = cms.InputTag( 'TriggerResults', '', '%(name)s' )
634 
635 if 'hltPreDQMForPPOutputSmart' in %%(dict)s:
636  %%(process)shltPreDQMForPPOutputSmart.TriggerResultsTag = cms.InputTag( 'TriggerResults', '', '%(name)s' )
637 
638 if 'hltPreHLTDQMResultsOutputSmart' in %%(dict)s:
639  %%(process)shltPreHLTDQMResultsOutputSmart.TriggerResultsTag = cms.InputTag( 'TriggerResults', '', '%(name)s' )
640 
641 if 'hltPreHLTDQMOutputSmart' in %%(dict)s:
642  %%(process)shltPreHLTDQMOutputSmart.TriggerResultsTag = cms.InputTag( 'TriggerResults', '', '%(name)s' )
643 
644 if 'hltPreHLTMONOutputSmart' in %%(dict)s:
645  %%(process)shltPreHLTMONOutputSmart.TriggerResultsTag = cms.InputTag( 'TriggerResults', '', '%(name)s' )
646 
647 if 'hltDQMHLTScalers' in %%(dict)s:
648  %%(process)shltDQMHLTScalers.triggerResults = cms.InputTag( 'TriggerResults', '', '%(name)s' )
649  %%(process)shltDQMHLTScalers.processname = '%(name)s'
650 
651 if 'hltDQML1SeedLogicScalers' in %%(dict)s:
652  %%(process)shltDQML1SeedLogicScalers.processname = '%(name)s'
653 """ % self.config.__dict__
654 
655 
657  # request summary informations from the MessageLogger
658  self.data += """
659 if 'MessageLogger' in %(dict)s:
660  %(process)sMessageLogger.categories.append('TriggerSummaryProducerAOD')
661  %(process)sMessageLogger.categories.append('L1GtTrigReport')
662  %(process)sMessageLogger.categories.append('HLTrigReport')
663  %(process)sMessageLogger.categories.append('FastReport')
664 """
665 
666 
667  def loadAdditionalConditions(self, comment, *conditions):
668  # load additional conditions
669  self.data += """
670 # %s
671 if 'GlobalTag' in %%(dict)s:
672 """ % comment
673  for condition in conditions:
674  self.data += """ %%(process)sGlobalTag.toGet.append(
675  cms.PSet(
676  record = cms.string( '%(record)s' ),
677  tag = cms.string( '%(tag)s' ),
678  label = cms.untracked.string( '%(label)s' ),
679  connect = cms.untracked.string( '%(connect)s' )
680  )
681  )
682 """ % condition
683 
684 
685  def loadCff(self, module):
686  # load a cfi or cff module
687  if self.config.fragment:
688  self.data += 'from %s import *\n' % module
689  else:
690  self.data += 'process.load( "%s" )\n' % module
691 
692 
693  def overrideParameters(self, module, parameters):
694  # override a module's parameter if the module is present in the configuration
695  self.data += "if '%s' in %%(dict)s:\n" % module
696  for (parameter, value) in parameters:
697  self.data += " %%(process)s%s.%s = %s\n" % (module, parameter, value)
698  self.data += "\n"
699 
700 
701  def instrumentTiming(self):
702  if self.config.profiling:
703  # instrument the menu for profiling: remove the HLTAnalyzerEndpath, add/override the HLTriggerFirstPath, with hltGetRaw and hltGetConditions
704  text = ''
705 
706  if not 'hltGetRaw' in self.data:
707  # add hltGetRaw
708  text += """
709 %(process)shltGetRaw = cms.EDAnalyzer( "HLTGetRaw",
710  RawDataCollection = cms.InputTag( "rawDataCollector" )
711 )
712 """
713 
714  if not 'hltGetConditions' in self.data:
715  # add hltGetConditions
716  text += """
717 %(process)shltGetConditions = cms.EDAnalyzer( 'EventSetupRecordDataGetter',
718  verbose = cms.untracked.bool( False ),
719  toGet = cms.VPSet( )
720 )
721 """
722 
723  if not 'hltBoolFalse' in self.data:
724  # add hltBoolFalse
725  text += """
726 %(process)shltBoolFalse = cms.EDFilter( "HLTBool",
727  result = cms.bool( False )
728 )
729 """
730 
731  # add the definition of HLTriggerFirstPath
732  # FIXME in a cff, should also update the HLTSchedule
733  text += """
734 %(process)sHLTriggerFirstPath = cms.Path( %(process)shltGetRaw + %(process)shltGetConditions + %(process)shltBoolFalse )
735 """
736  self.data = re.sub(r'.*cms\.(End)?Path.*', text + r'\g<0>', self.data, 1)
737 
738 
739  # instrument the menu with the Service, EDProducer and EndPath needed for timing studies
740  # FIXME in a cff, should also update the HLTSchedule
741  if self.config.timing:
742  self.data += """
743 # instrument the menu with the modules and EndPath needed for timing studies
744 """
745 
746  hasFST = False
747  if 'FastTimerService' in self.data:
748  hasFST = True
749 
750  self.data += '\n# configure the FastTimerService\n'
751  if not hasFST:
752  self.loadCff('HLTrigger.Timer.FastTimerService_cfi')
753  self.data += """%(process)sFastTimerService.useRealTimeClock = False
754 %(process)sFastTimerService.enableTimingPaths = True
755 %(process)sFastTimerService.enableTimingModules = True
756 %(process)sFastTimerService.enableTimingExclusive = True
757 %(process)sFastTimerService.enableTimingSummary = True
758 %(process)sFastTimerService.skipFirstPath = True
759 %(process)sFastTimerService.enableDQM = True
760 %(process)sFastTimerService.enableDQMbyPathActive = True
761 %(process)sFastTimerService.enableDQMbyPathTotal = True
762 %(process)sFastTimerService.enableDQMbyPathOverhead = True
763 %(process)sFastTimerService.enableDQMbyPathDetails = True
764 %(process)sFastTimerService.enableDQMbyPathCounters = True
765 %(process)sFastTimerService.enableDQMbyPathExclusive = True
766 %(process)sFastTimerService.enableDQMbyModule = True
767 %(process)sFastTimerService.enableDQMbyModuleType = True
768 %(process)sFastTimerService.enableDQMSummary = True
769 %(process)sFastTimerService.enableDQMbyLuminosity = True
770 %(process)sFastTimerService.enableDQMbyLumiSection = True
771 %(process)sFastTimerService.enableDQMbyProcesses = False
772 %(process)sFastTimerService.dqmTimeRange = 1000.
773 %(process)sFastTimerService.dqmTimeResolution = 5.
774 %(process)sFastTimerService.dqmPathTimeRange = 100.
775 %(process)sFastTimerService.dqmPathTimeResolution = 0.5
776 %(process)sFastTimerService.dqmModuleTimeRange = 40.
777 %(process)sFastTimerService.dqmModuleTimeResolution = 0.2
778 %(process)sFastTimerService.dqmLuminosityRange = 1e+34
779 %(process)sFastTimerService.dqmLuminosityResolution = 1e+31
780 %(process)sFastTimerService.dqmLumiSectionsRange = 2500
781 %(process)sFastTimerService.dqmPath = 'HLT/TimerService'
782 %(process)sFastTimerService.luminosityProduct = cms.untracked.InputTag( 'hltScalersRawToDigi' )
783 %(process)sFastTimerService.supportedProcesses = cms.untracked.vuint32( )
784 """
785 
786  self.data += """
787 # FastTimerServiceClient
788 %(process)sfastTimerServiceClient = cms.EDAnalyzer( "FastTimerServiceClient",
789  dqmPath = cms.untracked.string( "HLT/TimerService" )
790 )
791 
792 # DQM file saver
793 %(process)sdqmFileSaver = cms.EDAnalyzer( "DQMFileSaver",
794  convention = cms.untracked.string( "Offline" ),
795  workflow = cms.untracked.string( "/HLT/FastTimerService/All" ),
796  dirName = cms.untracked.string( "." ),
797  saveByRun = cms.untracked.int32(1),
798  saveByLumiSection = cms.untracked.int32(-1),
799  saveByEvent = cms.untracked.int32(-1),
800  saveByTime = cms.untracked.int32(-1),
801  saveByMinute = cms.untracked.int32(-1),
802  saveAtJobEnd = cms.untracked.bool(False),
803  forceRunNumber = cms.untracked.int32(-1),
804 )
805 
806 %(process)sTimingOutput = cms.EndPath( %(process)sfastTimerServiceClient + %(process)sdqmFileSaver )
807 """
808 
809  @staticmethod
810  def dumppaths(paths):
811  sys.stderr.write('Path selection:\n')
812  for path in paths:
813  sys.stderr.write('\t%s\n' % path)
814  sys.stderr.write('\n\n')
815 
816  def buildPathList(self):
817  self.all_paths = self.getPathList()
818 
819  if self.config.paths:
820  # no path list was requested, dump the full table, minus unsupported / unwanted paths
821  paths = self.config.paths.split(',')
822  else:
823  # dump only the requested paths, plus the eventual output endpaths
824  paths = []
825 
826  if self.config.fragment or self.config.output in ('none', 'full'):
827  # 'full' removes all outputs (same as 'none') and then adds a single "keep *" output (see the overrideOutput method)
828  if self.config.paths:
829  # paths are removed by default
830  pass
831  else:
832  # drop all output endpaths
833  paths.append( "-*Output" )
834  elif self.config.output == 'minimal':
835  # drop all output endpaths but HLTDQMResultsOutput
836  if self.config.paths:
837  paths.append( "HLTDQMResultsOutput" )
838  else:
839  paths.append( "-*Output" )
840  paths.append( "HLTDQMResultsOutput" )
841  else:
842  # keep / add back all output endpaths
843  if self.config.paths:
844  paths.append( "*Output" )
845  else:
846  pass # paths are kepy by default
847 
848  # drop paths unsupported by fastsim
849  if self.config.fastsim:
850  paths.extend( "-%s" % path for path in self.fastsimUnsupportedPaths )
851 
852  # drop unwanted paths for profiling (and timing studies)
853  if self.config.profiling:
854  paths.append( "-HLTriggerFirstPath" )
855  paths.append( "-HLTAnalyzerEndpath" )
856 
857  # this should never be in any dump (nor online menu)
858  paths.append( "-OfflineOutput" )
859 
860  # expand all wildcards
861  paths = self.expandWildcards(paths, self.all_paths)
862 
863  if self.config.paths:
864  # do an "additive" consolidation
865  self.options['paths'] = self.consolidatePositiveList(paths)
866  if not self.options['paths']:
867  raise RuntimeError('Error: option "--paths %s" does not select any valid paths' % self.config.paths)
868  else:
869  # do a "subtractive" consolidation
870  self.options['paths'] = self.consolidateNegativeList(paths)
871 
872 
873  def buildOptions(self):
874  # common configuration for all scenarios
875  self.options['services'].append( "-FUShmDQMOutputService" )
876 
877  if self.config.fragment:
878  # extract a configuration file fragment
879  self.options['essources'].append( "-GlobalTag" )
880  self.options['essources'].append( "-HepPDTESSource" )
881  self.options['essources'].append( "-XMLIdealGeometryESSource" )
882  self.options['essources'].append( "-eegeom" )
883  self.options['essources'].append( "-es_hardcode" )
884  self.options['essources'].append( "-magfield" )
885 
886  self.options['esmodules'].append( "-AutoMagneticFieldESProducer" )
887  self.options['esmodules'].append( "-SlaveField0" )
888  self.options['esmodules'].append( "-SlaveField20" )
889  self.options['esmodules'].append( "-SlaveField30" )
890  self.options['esmodules'].append( "-SlaveField35" )
891  self.options['esmodules'].append( "-SlaveField38" )
892  self.options['esmodules'].append( "-SlaveField40" )
893  self.options['esmodules'].append( "-VBF0" )
894  self.options['esmodules'].append( "-VBF20" )
895  self.options['esmodules'].append( "-VBF30" )
896  self.options['esmodules'].append( "-VBF35" )
897  self.options['esmodules'].append( "-VBF38" )
898  self.options['esmodules'].append( "-VBF40" )
899  self.options['esmodules'].append( "-CSCGeometryESModule" )
900  self.options['esmodules'].append( "-CaloGeometryBuilder" )
901  self.options['esmodules'].append( "-CaloTowerHardcodeGeometryEP" )
902  self.options['esmodules'].append( "-CastorHardcodeGeometryEP" )
903  self.options['esmodules'].append( "-DTGeometryESModule" )
904  self.options['esmodules'].append( "-EcalBarrelGeometryEP" )
905  self.options['esmodules'].append( "-EcalElectronicsMappingBuilder" )
906  self.options['esmodules'].append( "-EcalEndcapGeometryEP" )
907  self.options['esmodules'].append( "-EcalLaserCorrectionService" )
908  self.options['esmodules'].append( "-EcalPreshowerGeometryEP" )
909  self.options['esmodules'].append( "-HcalHardcodeGeometryEP" )
910  self.options['esmodules'].append( "-HcalTopologyIdealEP" )
911  self.options['esmodules'].append( "-MuonNumberingInitialization" )
912  self.options['esmodules'].append( "-ParametrizedMagneticFieldProducer" )
913  self.options['esmodules'].append( "-RPCGeometryESModule" )
914  self.options['esmodules'].append( "-SiStripGainESProducer" )
915  self.options['esmodules'].append( "-SiStripRecHitMatcherESProducer" )
916  self.options['esmodules'].append( "-SiStripQualityESProducer" )
917  self.options['esmodules'].append( "-StripCPEfromTrackAngleESProducer" )
918  self.options['esmodules'].append( "-TrackerDigiGeometryESModule" )
919  self.options['esmodules'].append( "-TrackerGeometricDetESModule" )
920  self.options['esmodules'].append( "-VolumeBasedMagneticFieldESProducer" )
921  self.options['esmodules'].append( "-ZdcHardcodeGeometryEP" )
922  self.options['esmodules'].append( "-hcal_db_producer" )
923  self.options['esmodules'].append( "-L1GtTriggerMaskAlgoTrigTrivialProducer" )
924  self.options['esmodules'].append( "-L1GtTriggerMaskTechTrigTrivialProducer" )
925  self.options['esmodules'].append( "-hltESPEcalTrigTowerConstituentsMapBuilder" )
926  self.options['esmodules'].append( "-hltESPGlobalTrackingGeometryESProducer" )
927  self.options['esmodules'].append( "-hltESPMuonDetLayerGeometryESProducer" )
928  self.options['esmodules'].append( "-hltESPTrackerRecoGeometryESProducer" )
929  if not self.config.fastsim:
930  self.options['esmodules'].append( "-CaloTowerGeometryFromDBEP" )
931  self.options['esmodules'].append( "-CastorGeometryFromDBEP" )
932  self.options['esmodules'].append( "-EcalBarrelGeometryFromDBEP" )
933  self.options['esmodules'].append( "-EcalEndcapGeometryFromDBEP" )
934  self.options['esmodules'].append( "-EcalPreshowerGeometryFromDBEP" )
935  self.options['esmodules'].append( "-HcalGeometryFromDBEP" )
936  self.options['esmodules'].append( "-ZdcGeometryFromDBEP" )
937  self.options['esmodules'].append( "-XMLFromDBSource" )
938  self.options['esmodules'].append( "-sistripconn" )
939 
940  self.options['services'].append( "-PrescaleService" )
941  self.options['services'].append( "-MessageLogger" )
942  self.options['services'].append( "-DQM" )
943  self.options['services'].append( "-DQMStore" )
944  self.options['services'].append( "-MicroStateService" )
945  self.options['services'].append( "-ModuleWebRegistry" )
946  self.options['services'].append( "-TimeProfilerService" )
947  self.options['services'].append( "-FastTimerService" )
948 
949  self.options['psets'].append( "-maxEvents" )
950  self.options['psets'].append( "-options" )
951 
952  if self.config.fastsim:
953  # remove components not supported or needed by fastsim
954  self.options['esmodules'].append( "-navigationSchoolESProducer" )
955  self.options['esmodules'].append( "-TransientTrackBuilderESProducer" )
956  self.options['esmodules'].append( "-SteppingHelixPropagatorAny" )
957  self.options['esmodules'].append( "-OppositeMaterialPropagator" )
958  self.options['esmodules'].append( "-MaterialPropagator" )
959  self.options['esmodules'].append( "-CaloTowerConstituentsMapBuilder" )
960  self.options['esmodules'].append( "-CaloTopologyBuilder" )
961 
962  self.options['services'].append( "-UpdaterService" )
963 
964  self.options['modules'].append( "hltL3MuonIsolations" )
965  self.options['modules'].append( "hltPixelVertices" )
966  self.options['modules'].append( "-hltCkfL1SeededTrackCandidates" )
967  self.options['modules'].append( "-hltCtfL1SeededithMaterialTracks" )
968  self.options['modules'].append( "-hltCkf3HitL1SeededTrackCandidates" )
969  self.options['modules'].append( "-hltCtf3HitL1SeededWithMaterialTracks" )
970  self.options['modules'].append( "-hltCkf3HitActivityTrackCandidates" )
971  self.options['modules'].append( "-hltCtf3HitActivityWithMaterialTracks" )
972  self.options['modules'].append( "-hltActivityCkfTrackCandidatesForGSF" )
973  self.options['modules'].append( "-hltL1SeededCkfTrackCandidatesForGSF" )
974  self.options['modules'].append( "-hltMuCkfTrackCandidates" )
975  self.options['modules'].append( "-hltMuCtfTracks" )
976  self.options['modules'].append( "-hltTau3MuCkfTrackCandidates" )
977  self.options['modules'].append( "-hltTau3MuCtfWithMaterialTracks" )
978  self.options['modules'].append( "-hltMuTrackJpsiCkfTrackCandidates" )
979  self.options['modules'].append( "-hltMuTrackJpsiCtfTracks" )
980  self.options['modules'].append( "-hltMuTrackJpsiEffCkfTrackCandidates" )
981  self.options['modules'].append( "-hltMuTrackJpsiEffCtfTracks" )
982  self.options['modules'].append( "-hltJpsiTkPixelSeedFromL3Candidate" )
983  self.options['modules'].append( "-hltCkfTrackCandidatesJpsiTk" )
984  self.options['modules'].append( "-hltCtfWithMaterialTracksJpsiTk" )
985  self.options['modules'].append( "-hltMuTrackCkfTrackCandidatesOnia" )
986  self.options['modules'].append( "-hltMuTrackCtfTracksOnia" )
987 
988  self.options['modules'].append( "-hltESRegionalEgammaRecHit" )
989  self.options['modules'].append( "-hltEcalRegionalJetsFEDs" )
990  self.options['modules'].append( "-hltEcalRegionalMuonsFEDs" )
991  self.options['modules'].append( "-hltEcalRegionalEgammaFEDs" )
992  self.options['modules'].append( "-hltFEDSelector" )
993  self.options['modules'].append( "-hltL3TrajSeedOIHit" )
994  self.options['modules'].append( "-hltL3TrajSeedIOHit" )
995  self.options['modules'].append( "-hltL3TrackCandidateFromL2OIState" )
996  self.options['modules'].append( "-hltL3TrackCandidateFromL2OIHit" )
997  self.options['modules'].append( "-hltL3TrackCandidateFromL2IOHit" )
998  self.options['modules'].append( "-hltL3TrackCandidateFromL2NoVtx" )
999  self.options['modules'].append( "-hltHcalDigis" )
1000  self.options['modules'].append( "-hltHoreco" )
1001  self.options['modules'].append( "-hltHfreco" )
1002  self.options['modules'].append( "-hltHbhereco" )
1003  self.options['modules'].append( "-hltEcalRegionalRestFEDs" )
1004  self.options['modules'].append( "-hltEcalRegionalESRestFEDs" )
1005  self.options['modules'].append( "-hltEcalRawToRecHitFacility" )
1006  self.options['modules'].append( "-hltESRawToRecHitFacility" )
1007  self.options['modules'].append( "-hltEcalRegionalJetsRecHit" )
1008  self.options['modules'].append( "-hltEcalRegionalMuonsRecHit" )
1009  self.options['modules'].append( "-hltEcalRegionalEgammaRecHit" )
1010  self.options['modules'].append( "-hltEcalRecHitAll" )
1011  self.options['modules'].append( "-hltESRecHitAll" )
1012  # === hltPF
1013  self.options['modules'].append( "-hltPFJetCkfTrackCandidates" )
1014  self.options['modules'].append( "-hltPFJetCtfWithMaterialTracks" )
1015  self.options['modules'].append( "-hltPFlowTrackSelectionHighPurity" )
1016  # === hltFastJet
1017  self.options['modules'].append( "-hltDisplacedHT250L1FastJetRegionalPixelSeedGenerator" )
1018  self.options['modules'].append( "-hltDisplacedHT250L1FastJetRegionalCkfTrackCandidates" )
1019  self.options['modules'].append( "-hltDisplacedHT250L1FastJetRegionalCtfWithMaterialTracks" )
1020  self.options['modules'].append( "-hltDisplacedHT300L1FastJetRegionalPixelSeedGenerator" )
1021  self.options['modules'].append( "-hltDisplacedHT300L1FastJetRegionalCkfTrackCandidates" )
1022  self.options['modules'].append( "-hltDisplacedHT300L1FastJetRegionalCtfWithMaterialTracks" )
1023  self.options['modules'].append( "-hltBLifetimeRegionalPixelSeedGeneratorbbPhiL1FastJet" )
1024  self.options['modules'].append( "-hltBLifetimeRegionalCkfTrackCandidatesbbPhiL1FastJet" )
1025  self.options['modules'].append( "-hltBLifetimeRegionalCtfWithMaterialTracksbbPhiL1FastJet" )
1026  self.options['modules'].append( "-hltBLifetimeRegionalPixelSeedGeneratorHbbVBF" )
1027  self.options['modules'].append( "-hltBLifetimeRegionalCkfTrackCandidatesHbbVBF" )
1028  self.options['modules'].append( "-hltBLifetimeRegionalCtfWithMaterialTracksHbbVBF" )
1029  self.options['modules'].append( "-hltBLifetimeBTagIP3D1stTrkRegionalPixelSeedGeneratorJet20HbbL1FastJet" )
1030  self.options['modules'].append( "-hltBLifetimeBTagIP3D1stTrkRegionalCkfTrackCandidatesJet20HbbL1FastJet" )
1031  self.options['modules'].append( "-hltBLifetimeBTagIP3D1stTrkRegionalCtfWithMaterialTracksJet20HbbL1FastJet" )
1032  self.options['modules'].append( "-hltBLifetimeDiBTagIP3D1stTrkRegionalPixelSeedGeneratorJet20HbbL1FastJet" )
1033  self.options['modules'].append( "-hltBLifetimeDiBTagIP3D1stTrkRegionalCkfTrackCandidatesJet20HbbL1FastJet" )
1034  self.options['modules'].append( "-hltBLifetimeDiBTagIP3D1stTrkRegionalCtfWithMaterialTracksJet20HbbL1FastJet" )
1035  # === hltBLifetimeRegional
1036  self.options['modules'].append( "-hltBLifetimeRegionalPixelSeedGeneratorHbb" )
1037  self.options['modules'].append( "-hltBLifetimeRegionalCkfTrackCandidatesHbb" )
1038  self.options['modules'].append( "-hltBLifetimeRegionalCtfWithMaterialTracksHbb" )
1039  self.options['modules'].append( "-hltBLifetimeRegionalPixelSeedGeneratorbbPhi" )
1040  self.options['modules'].append( "-hltBLifetimeRegionalCkfTrackCandidatesbbPhi" )
1041  self.options['modules'].append( "-hltBLifetimeRegionalCtfWithMaterialTracksbbPhi" )
1042  self.options['modules'].append( "-hltBLifetimeBTagIP3D1stTrkRegionalPixelSeedGeneratorJet20Hbb" )
1043  self.options['modules'].append( "-hltBLifetimeBTagIP3D1stTrkRegionalCkfTrackCandidatesJet20Hbb" )
1044  self.options['modules'].append( "-hltBLifetimeBTagIP3D1stTrkRegionalCtfWithMaterialTracksJet20Hbb" )
1045  self.options['modules'].append( "-hltBLifetimeDiBTagIP3D1stTrkRegionalPixelSeedGeneratorJet20Hbb" )
1046  self.options['modules'].append( "-hltBLifetimeDiBTagIP3D1stTrkRegionalCkfTrackCandidatesJet20Hbb" )
1047  self.options['modules'].append( "-hltBLifetimeDiBTagIP3D1stTrkRegionalCtfWithMaterialTracksJet20Hbb" )
1048  self.options['modules'].append( "-hltBLifetimeFastRegionalPixelSeedGeneratorHbbVBF" )
1049  self.options['modules'].append( "-hltBLifetimeFastRegionalCkfTrackCandidatesHbbVBF" )
1050  self.options['modules'].append( "-hltBLifetimeFastRegionalCtfWithMaterialTracksHbbVBF" )
1051  self.options['modules'].append( "-hltBLifetimeRegionalPixelSeedGeneratorbbPhiL1FastJetFastPV" )
1052  self.options['modules'].append( "-hltBLifetimeRegionalCkfTrackCandidatesbbPhiL1FastJetFastPV" )
1053  self.options['modules'].append( "-hltBLifetimeRegionalCtfWithMaterialTracksbbPhiL1FastJetFastPV" )
1054  self.options['modules'].append( "-hltFastPixelBLifetimeRegionalPixelSeedGeneratorHbb" )
1055  self.options['modules'].append( "-hltFastPixelBLifetimeRegionalCkfTrackCandidatesHbb" )
1056  self.options['modules'].append( "-hltFastPixelBLifetimeRegionalCtfWithMaterialTracksHbb" )
1057 
1058  self.options['modules'].append( "-hltPixelTracksForMinBias" )
1059  self.options['modules'].append( "-hltPixelTracksForHighMult" )
1060  self.options['modules'].append( "-hltRegionalPixelTracks" )
1061  self.options['modules'].append( "-hltPixelTracksReg" )
1062  self.options['modules'].append( "-hltIter4Merged" )
1063  self.options['modules'].append( "-hltFastPixelHitsVertex" )
1064  self.options['modules'].append( "-hltFastPixelTracks")
1065  self.options['modules'].append( "-hltFastPixelTracksRecover")
1066 
1067  self.options['modules'].append( "-hltFastPrimaryVertexbbPhi")
1068  self.options['modules'].append( "-hltPixelTracksFastPVbbPhi")
1069  self.options['modules'].append( "-hltPixelTracksRecoverbbPhi" )
1070  self.options['modules'].append( "-hltFastPixelHitsVertexVHbb" )
1071  self.options['modules'].append( "-hltFastPixelTracksVHbb" )
1072  self.options['modules'].append( "-hltFastPixelTracksRecoverVHbb" )
1073 
1074  self.options['modules'].append( "-hltFastPrimaryVertex")
1075  self.options['modules'].append( "-hltFastPVPixelTracks")
1076  self.options['modules'].append( "-hltFastPVPixelTracksRecover" )
1077 
1078  self.options['modules'].append( "-hltIter4Tau3MuMerged" )
1079  self.options['modules'].append( "hltPixelMatchElectronsActivity" )
1080 
1081  self.options['modules'].append( "-hltMuonCSCDigis" )
1082  self.options['modules'].append( "-hltMuonDTDigis" )
1083  self.options['modules'].append( "-hltMuonRPCDigis" )
1084  self.options['modules'].append( "-hltGtDigis" )
1085  self.options['modules'].append( "-hltL1GtTrigReport" )
1086  self.options['modules'].append( "hltCsc2DRecHits" )
1087  self.options['modules'].append( "hltDt1DRecHits" )
1088  self.options['modules'].append( "hltRpcRecHits" )
1089  self.options['modules'].append( "-hltScalersRawToDigi" )
1090 
1091  self.options['sequences'].append( "-HLTL1SeededEgammaRegionalRecoTrackerSequence" )
1092  self.options['sequences'].append( "-HLTEcalActivityEgammaRegionalRecoTrackerSequence" )
1093  self.options['sequences'].append( "-HLTPixelMatchElectronActivityTrackingSequence" )
1094  self.options['sequences'].append( "-HLTDoLocalStripSequence" )
1095  self.options['sequences'].append( "-HLTDoLocalPixelSequence" )
1096  self.options['sequences'].append( "-HLTDoLocalPixelSequenceRegL2Tau" )
1097  self.options['sequences'].append( "-hltSiPixelDigis" )
1098  self.options['sequences'].append( "-hltSiPixelClusters" )
1099  self.options['sequences'].append( "-hltSiPixelRecHits" )
1100  self.options['sequences'].append( "-HLTRecopixelvertexingSequence" )
1101  self.options['sequences'].append( "-HLTEndSequence" )
1102  self.options['sequences'].append( "-HLTBeginSequence" )
1103  self.options['sequences'].append( "-HLTBeginSequenceNZS" )
1104  self.options['sequences'].append( "-HLTBeginSequenceBPTX" )
1105  self.options['sequences'].append( "-HLTBeginSequenceAntiBPTX" )
1106  self.options['sequences'].append( "-HLTHBHENoiseSequence" )
1107  self.options['sequences'].append( "-HLTIterativeTracking" )
1108  self.options['sequences'].append( "-HLTIterativeTrackingTau3Mu" )
1109  self.options['sequences'].append( "-HLTRegionalCKFTracksForL3Isolation" )
1110  self.options['sequences'].append( "-HLTHBHENoiseCleanerSequence" )
1111 
1112  # remove HLTAnalyzerEndpath from fastsim cff's
1113  if self.config.fragment:
1114  self.options['paths'].append( "-HLTAnalyzerEndpath" )
1115 
1116 
1117  def build_source(self):
1118  if self.config.input:
1119  # if a dataset or a list of input files was given, use it
1120  if self.config.input[0:8] == 'dataset:':
1121  from dbsFileQuery import dbsFileQuery
1122  # extract the dataset name, and use DBS to fine the list of LFNs
1123  dataset = self.config.input[8:]
1124  query = 'find file where dataset=' + dataset
1125  files = dbsFileQuery(query)
1126  self.source = files
1127  else:
1128  # assume a list of input files
1129  self.source = self.config.input.split(',')
1130  elif self.config.online:
1131  # online we always run on data
1132  self.source = [ "file:/tmp/InputCollection.root" ]
1133  elif self.config.data:
1134  # offline we can run on data...
1135  self.source = [ "file:RelVal_Raw_%s_DATA.root" % self.config.type ]
1136  else:
1137  # ...or on mc
1138  self.source = [ "file:RelVal_Raw_%s_STARTUP.root" % self.config.type ]
1139 
1140  self.data += """
1141 %(process)ssource = cms.Source( "PoolSource",
1142  fileNames = cms.untracked.vstring(
1143 """
1144  if self.source:
1145  for line in self.source:
1146  self.data += " '%s',\n" % line
1147  self.data += """ ),
1148  secondaryFileNames = cms.untracked.vstring(
1149 """
1150  if self.parent:
1151  for line in self.parent:
1152  self.data += " '%s',\n" % line
1153  self.data += """ ),
1154  inputCommands = cms.untracked.vstring(
1155  'keep *'
1156  )
1157 )
1158 """
def _fix_parameter
Definition: confdb.py:327
def build_source
Definition: confdb.py:1117
def loadAdditionalConditions
Definition: confdb.py:667
def loadCff
Definition: confdb.py:685
def fixForMC
Definition: confdb.py:346
def buildPathList
Definition: confdb.py:816
def instrumentTiming
Definition: confdb.py:701
def runL1Emulator
Definition: confdb.py:538
def instrumentErrorEventType
Definition: confdb.py:429
def replace
Definition: linker.py:10
def splitter
Definition: confdb.py:11
def overrideGlobalTag
Definition: confdb.py:437
def fixPrescales
Definition: confdb.py:391
def releaseSpecificCustomize
Definition: confdb.py:191
def consolidateNegativeList
Definition: confdb.py:161
def dumppaths
Definition: confdb.py:810
def runL1EmulatorGT
Definition: confdb.py:507
def consolidatePositiveList
Definition: confdb.py:173
def expandWildcards
Definition: confdb.py:145
static std::string join(char **cmd)
Definition: RemoteFile.cc:18
def getRawConfigurationFromDB
Definition: confdb.py:102
def fixForFastSim
Definition: confdb.py:357
list object
Definition: dbtoconf.py:77
def buildOptions
Definition: confdb.py:873
def overrideProcessName
Definition: confdb.py:612
def overrideL1MenuXml
Definition: confdb.py:488
def addGlobalOptions
untracked parameters with NO default in the code if &#39;hltHcalDataIntegrityMonitor&#39; in %(dict)s: %(proc...
Definition: confdb.py:309
def instrumentOpenMode
Definition: confdb.py:415
def overrideOutput
Definition: confdb.py:586
def overrideParameters
Definition: confdb.py:693
def updateMessageLogger
Definition: confdb.py:656
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run