3 from __future__
import absolute_import
8 from .pipe
import pipe
as _pipe
9 from .options
import globalTag
10 from itertools
import islice
14 i = iterator.__iter__()
16 l =
list(islice(i, n))
43 if self.config.fragment:
44 self.
labels[
'process'] =
'fragment' 45 self.
labels[
'dict'] =
'fragment.__dict__' 47 self.
labels[
'process'] =
'process' 48 self.
labels[
'dict'] =
'process.__dict__' 50 if self.config.prescale
and (self.config.prescale.lower() !=
'none'):
51 self.
labels[
'prescale'] = self.config.prescale
54 from .confdbOfflineConverter
import OfflineConverter
55 self.
converter = OfflineConverter(version = self.config.menu.version, database = self.config.menu.database)
63 if not self.config.setup:
66 if ".py" in self.config.setup:
67 self.config.setupFile = self.config.setup.split(
".py")[0]
69 args = [
'--configName', self.config.setup ]
70 args.append(
'--noedsources')
71 args.append(
'--nopaths')
72 for key, vals
in six.iteritems(self.
options):
74 args.extend((
'--'+key,
','.
join(vals)))
76 data, err = self.converter.query( *args )
77 if 'ERROR' in err
or 'Exhausted Resultset' in err
or 'CONFIG_NOT_FOUND' in err:
78 sys.stderr.write(
"%s: error while retrieving the HLT setup menu\n\n" % os.path.basename(sys.argv[0]))
79 sys.stderr.write(err +
"\n\n")
81 self.config.setupFile =
"setup_"+self.config.setup[1:].
replace(
"/",
"_")+
"_cff" 82 file(self.config.setupFile+
".py",
"w+").
write(
"# This file is automatically generated by hltGetConfiguration.\n" + data)
85 if self.config.menu.run:
86 args = [
'--runNumber', self.config.menu.run]
88 args = [
'--configName', self.config.menu.name ]
89 args.append(
'--noedsources')
90 for key, vals
in six.iteritems(self.
options):
92 args.extend((
'--'+key,
','.
join(vals)))
94 data, err = self.converter.query( *args )
95 if 'ERROR' in err
or 'Exhausted Resultset' in err
or 'CONFIG_NOT_FOUND' in err:
96 sys.stderr.write(
"%s: error while retrieving the HLT menu\n\n" % os.path.basename(sys.argv[0]))
97 sys.stderr.write(err +
"\n\n")
102 if self.config.menu.run:
103 args = [
'--runNumber', self.config.menu.run]
105 args = [
'--configName', self.config.menu.name]
115 data, err = self.converter.query( *args )
116 if 'ERROR' in err
or 'Exhausted Resultset' in err
or 'CONFIG_NOT_FOUND' in err:
117 sys.stderr.write(
"%s: error while retrieving the list of paths from the HLT menu\n\n" % os.path.basename(sys.argv[0]))
118 sys.stderr.write(err +
"\n\n")
120 filter = re.compile(
r' *= *cms.(End)?Path.*')
121 paths = [ filter.sub(
'', line)
for line
in data.splitlines()
if filter.search(line) ]
136 filter = re.compile(
r'^' + glob.replace(
'?',
'.').
replace(
'*',
'.*').
replace(
'[!',
'[^') +
r'$')
137 matches.extend( negate + element
for element
in collection
if filter.match(element) )
146 for element
in elements:
147 if element[0] ==
'-':
148 result.add( element )
150 result.discard(
'-' + element )
151 return sorted( element
for element
in result )
158 for element
in elements:
159 if element[0] ==
'-':
160 result.discard( element[1:] )
162 result.add( element )
163 return sorted( element
for element
in result )
169 if self.config.fragment:
170 self.
data = re.sub(
r'\bprocess\b',
'fragment', self.
data )
171 self.
data = re.sub(
r'\bProcess\b',
'ProcessFragment', self.
data )
178 if self.config.fragment:
180 # add specific customizations 181 from HLTrigger.Configuration.customizeHLTforALL import customizeHLTforAll 182 fragment = customizeHLTforAll(fragment,"%s") 183 """ % (self.config.type)
185 if self.config.type==
"Fake":
189 _gtData =
"auto:"+prefix+
"_hlt_"+self.config.type
190 _gtMc =
"auto:"+prefix+
"_mc_" +self.config.type
192 # add specific customizations 194 _customInfo['menuType' ]= "%s" 195 _customInfo['globalTags']= {} 196 _customInfo['globalTags'][True ] = "%s" 197 _customInfo['globalTags'][False] = "%s" 198 _customInfo['inputFiles']={} 199 _customInfo['inputFiles'][True] = "file:RelVal_Raw_%s_DATA.root" 200 _customInfo['inputFiles'][False] = "file:RelVal_Raw_%s_MC.root" 201 _customInfo['maxEvents' ]= %s 202 _customInfo['globalTag' ]= "%s" 203 _customInfo['inputFile' ]= %s 204 _customInfo['realData' ]= %s 205 from HLTrigger.Configuration.customizeHLTforALL import customizeHLTforAll 206 %%(process)s = customizeHLTforAll(%%(process)s,"%s",_customInfo) 207 """ % (self.config.type,_gtData,_gtMc,self.config.type,self.config.type,self.config.events,self.config.globaltag,self.
source,self.config.data,self.config.type)
210 from HLTrigger.Configuration.customizeHLTforCMSSW import customizeHLTforCMSSW 211 %%(process)s = customizeHLTforCMSSW(%%(process)s,"%s") 212 """ % (self.config.type)
216 # Eras-based customisations 217 from HLTrigger.Configuration.Eras import modifyHLTforEras 218 modifyHLTforEras(%(process)s) 221 if self.config.customise:
223 self.
data +=
"#User-defined customization functions\n" 224 for customise
in self.config.customise.split(
","):
225 customiseValues = customise.split(
".")
226 if len(customiseValues)>=3:
raise Exception(
"--customise option cannot contain more than one dot.")
227 if len(customiseValues)==1:
228 customiseValues.append(
"customise")
229 customiseValues[0] = customiseValues[0].
replace(
"/",
".")
230 self.
data +=
"from "+customiseValues[0]+
" import "+customiseValues[1]+
"\n" 231 self.
data +=
"process = "+customiseValues[1]+
"(process)\n" 237 if not self.config.fragment:
241 if self.config.type
in (
'HIon', ):
243 if not self.config.fragment:
244 self.
_fix_parameter( type =
'InputTag', value =
'rawDataCollector', replace =
'rawDataRepacker')
267 if self.config.fragment:
269 # dummyfy hltGetConditions in cff's 270 if 'hltGetConditions' in %(dict)s and 'HLTriggerFirstPath' in %(dict)s : 271 %(process)s.hltDummyConditions = cms.EDFilter( "HLTBool", 272 result = cms.bool( True ) 274 %(process)s.HLTriggerFirstPath.replace(%(process)s.hltGetConditions,%(process)s.hltDummyConditions) 279 match = re.match(
r'(Scouting\w+)Output$', path)
281 module =
'hltOutput' + match.group(1)
282 self.
data = self.data.replace(path+
' = cms.EndPath', path+
' = cms.Path')
283 self.
data = self.data.replace(
' + process.'+module,
'')
315 # limit the number of events to be processed 316 %%(process)s.maxEvents = cms.untracked.PSet( 317 input = cms.untracked.int32( %d ) 319 """ % self.config.events
322 # enable TrigReport, TimeReport and MultiThreading 323 %(process)s.options = cms.untracked.PSet( 324 wantSummary = cms.untracked.bool( True ), 325 numberOfThreads = cms.untracked.uint32( 4 ), 326 numberOfStreams = cms.untracked.uint32( 0 ), 327 sizeOfStackForThreadsInKB = cms.untracked.uint32( 10*1024 ) 333 name: parameter name (optional) 334 type: parameter type (look for tracked and untracked variants) 335 value: original value 336 replace: replacement value 340 r'%(name)s = cms(?P<tracked>(?:\.untracked)?)\.%(type)s\( (?P<quote>["\']?)%(value)s(?P=quote)' % args,
341 r'%(name)s = cms\g<tracked>.%(type)s( \g<quote>%(replace)s\g<quote>' % args,
345 r'cms(?P<tracked>(?:\.untracked)?)\.%(type)s\( (?P<quote>["\']?)%(value)s(?P=quote)' % args,
346 r'cms\g<tracked>.%(type)s( \g<quote>%(replace)s\g<quote>' % args,
353 if self.
options[
'paths'][0][0] ==
'-':
355 for minuspath
in self.
options[
'paths']:
357 self.
data = re.sub(
r' cms.PSet\( pathName = cms.string\( "%s" \),\n prescales = cms.vuint32\( .* \)\n \),?\n' % path,
'', self.
data)
361 if path
not in self.
options[
'paths']:
362 self.
data = re.sub(
r' cms.PSet\( pathName = cms.string\( "%s" \),\n prescales = cms.vuint32\( .* \)\n \),?\n' % path,
'', self.
data)
364 if self.config.prescale
and (self.config.prescale.lower() !=
'none'):
367 # force the use of a specific HLT prescale column 368 if 'PrescaleService' in %(dict)s: 369 %(process)s.PrescaleService.forceDefault = True 370 %(process)s.PrescaleService.lvl1DefaultLabel = '%(prescale)s' 377 filters = [ match[1]
for match
in re.findall(
r'(process\.)?\b(\w+) = cms.EDFilter', self.
data) ]
378 re_sequence = re.compile(
r'cms\.(Path|Sequence)\((.*)\)' )
380 self.
data = re_sequence.sub(
lambda line: re.sub(
r'cms\.ignore *\( *((process\.)?\b(\w+)) *\)',
r'\1', line.group(0) ), self.
data )
381 self.
data = re_sequence.sub(
lambda line: re.sub(
r'~',
'', line.group(0) ), self.
data )
383 for some
in splitter(filters, 1000):
384 re_filters = re.compile(
r'\b((process\.)?(' +
r'|'.
join(some) +
r'))\b' )
385 self.
data = re_sequence.sub(
lambda line: re_filters.sub(
r'cms.ignore( \1 )', line.group(0) ), self.
data )
389 if self.config.errortype:
391 self.
_fix_parameter(name =
'SelectedTriggerType', type =
'int32', value =
'1', replace =
'0')
392 self.
_fix_parameter(name =
'SelectedTriggerType', type =
'int32', value =
'2', replace =
'0')
393 self.
_fix_parameter(name =
'SelectedTriggerType', type =
'int32', value =
'3', replace =
'0')
409 if not self.config.data
and not self.config.globaltag:
410 if self.config.type
in globalTag:
411 self.config.globaltag = globalTag[self.config.type]
413 self.config.globaltag = globalTag[
'GRun']
416 if self.config.l1.override:
417 self.config.l1.tag = self.config.l1.override
418 self.config.l1.record =
'L1TUtmTriggerMenuRcd' 419 self.config.l1.connect =
'' 420 self.config.l1.label =
'' 421 if not self.config.l1.snapshotTime:
422 self.config.l1.snapshotTime =
'9999-12-31 23:59:59.000' 423 self.config.l1cond =
'%(tag)s,%(record)s,%(connect)s,%(label)s,%(snapshotTime)s' % self.config.l1.__dict__
425 self.config.l1cond =
None 427 if self.config.globaltag
or self.config.l1cond:
429 # override the GlobalTag, connection string and pfnPrefix 430 if 'GlobalTag' in %(dict)s: 431 from Configuration.AlCa.GlobalTag import GlobalTag as customiseGlobalTag 432 %(process)s.GlobalTag = customiseGlobalTag(%(process)s.GlobalTag""" 433 if self.config.globaltag:
434 text +=
", globaltag = %s" % repr(self.config.globaltag)
435 if self.config.l1cond:
436 text +=
", conditions = %s" % repr(self.config.l1cond)
442 if self.config.l1Xml.XmlFile:
444 # override the GlobalTag's L1T menu from an Xml file 445 from HLTrigger.Configuration.CustomConfigs import L1XML 446 %%(process)s = L1XML(%%(process)s,"%s") 447 """ % (self.config.l1Xml.XmlFile)
452 if self.config.emulator:
454 # run the Full L1T emulator, then repack the data into a new RAW collection, to be used by the HLT 455 from HLTrigger.Configuration.CustomConfigs import L1REPACK 456 %%(process)s = L1REPACK(%%(process)s,"%s") 457 """ % (self.config.emulator)
463 r'\b(process\.)?hltOutput(\w+) *= *cms\.OutputModule\( *"ShmStreamConsumer" *,',
464 r'%(process)s.hltOutput\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 ),',
468 if not self.config.fragment
and self.config.output ==
'minimal':
471 # add a single "keep *" output 472 %(process)s.hltOutputMinimal = cms.OutputModule( "PoolOutputModule", 473 fileName = cms.untracked.string( "output.root" ), 474 fastCloning = cms.untracked.bool( False ), 475 dataset = cms.untracked.PSet( 476 dataTier = cms.untracked.string( 'AOD' ), 477 filterName = cms.untracked.string( '' ) 479 outputCommands = cms.untracked.vstring( 'drop *', 480 'keep edmTriggerResults_*_*_*', 481 'keep triggerTriggerEvent_*_*_*' 484 %(process)s.MinimalOutput = cms.EndPath( %(process)s.hltOutputMinimal ) 486 elif not self.config.fragment
and self.config.output ==
'full':
489 # add a single "keep *" output 490 %(process)s.hltOutputFull = cms.OutputModule( "PoolOutputModule", 491 fileName = cms.untracked.string( "output.root" ), 492 fastCloning = cms.untracked.bool( False ), 493 dataset = cms.untracked.PSet( 494 dataTier = cms.untracked.string( 'RECO' ), 495 filterName = cms.untracked.string( '' ) 497 outputCommands = cms.untracked.vstring( 'keep *' ) 499 %(process)s.FullOutput = cms.EndPath( %(process)s.hltOutputFull ) 504 if self.config.eras
is None:
506 from Configuration.StandardSequences.Eras
import eras
507 erasSplit = self.config.eras.split(
',')
508 self.
data = re.sub(
r'process = cms.Process\( *"\w+"',
'\n'.
join(eras.pythonCfgLines[era]
for era
in erasSplit)+
'\n\g<0>, '+
', '.
join(era
for era
in erasSplit), self.
data)
512 if self.config.setup
is None:
514 processLine = self.data.find(
"\n",self.data.find(
"cms.Process"))
515 self.
data = self.
data[:processLine]+
'\nprocess.load("%s")'%self.config.setupFile+self.
data[processLine:]
519 if self.config.name
is None:
523 self.config.name = self.config.name.replace(
"_",
"")
526 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)
529 if self.config.setup: self.
data +=
""" 530 # avoid PrescaleService error due to missing HLT paths 531 if 'PrescaleService' in process.__dict__: 532 for pset in reversed(process.PrescaleService.prescaleTable): 533 if not hasattr(process,pset.pathName.value()): 534 process.PrescaleService.prescaleTable.remove(pset) 541 if 'MessageLogger' in %(dict)s: 542 %(process)s.MessageLogger.categories.append('TriggerSummaryProducerAOD') 543 %(process)s.MessageLogger.categories.append('L1GtTrigReport') 544 %(process)s.MessageLogger.categories.append('L1TGlobalSummary') 545 %(process)s.MessageLogger.categories.append('HLTrigReport') 546 %(process)s.MessageLogger.categories.append('FastReport') 554 if 'GlobalTag' in %%(dict)s: 556 for condition
in conditions:
557 self.
data +=
""" %%(process)s.GlobalTag.toGet.append( 559 record = cms.string( '%(record)s' ), 560 tag = cms.string( '%(tag)s' ), 561 label = cms.untracked.string( '%(label)s' ), 569 if self.config.fragment:
570 return 'from %s import *\n' % module
572 return 'process.load( "%s" )\n' % module
580 self.
data +=
"if '%s' in %%(dict)s:\n" % module
581 for (parameter, value)
in parameters:
582 self.
data +=
" %%(process)s.%s.%s = %s\n" % (module, parameter, value)
588 if self.config.timing:
590 # instrument the menu with the modules and EndPath needed for timing studies 593 self.
data +=
'\n# configure the FastTimerService\n' 594 self.
loadCff(
'HLTrigger.Timer.FastTimerService_cfi')
596 self.
data +=
"""# print a text summary at the end of the job 597 %(process)s.FastTimerService.printEventSummary = False 598 %(process)s.FastTimerService.printRunSummary = False 599 %(process)s.FastTimerService.printJobSummary = True 602 %(process)s.FastTimerService.enableDQM = True 604 # enable per-path DQM plots (starting with CMSSW 9.2.3-patch2) 605 %(process)s.FastTimerService.enableDQMbyPath = True 607 # enable per-module DQM plots 608 %(process)s.FastTimerService.enableDQMbyModule = True 610 # enable per-event DQM plots vs lumisection 611 %(process)s.FastTimerService.enableDQMbyLumiSection = True 612 %(process)s.FastTimerService.dqmLumiSectionsRange = 2500 614 # set the time resolution of the DQM plots 615 %(process)s.FastTimerService.dqmTimeRange = 2000. 616 %(process)s.FastTimerService.dqmTimeResolution = 10. 617 %(process)s.FastTimerService.dqmPathTimeRange = 1000. 618 %(process)s.FastTimerService.dqmPathTimeResolution = 5. 619 %(process)s.FastTimerService.dqmModuleTimeRange = 200. 620 %(process)s.FastTimerService.dqmModuleTimeResolution = 1. 622 # set the base DQM folder for the plots 623 %(process)s.FastTimerService.dqmPath = 'HLT/TimerService' 624 %(process)s.FastTimerService.enableDQMbyProcesses = False 629 if not self.config.hilton:
631 if 'hltDQMFileSaver' in self.
data:
632 self.
data = re.sub(
r'\b(process\.)?hltDQMFileSaver \+ ',
'', self.
data)
633 self.
data = re.sub(
r' \+ \b(process\.)?hltDQMFileSaver',
'', self.
data)
634 self.
data = re.sub(
r'\b(process\.)?hltDQMFileSaver',
'', self.
data)
637 dqmstore =
"\n# load the DQMStore and DQMRootOutputModule\n" 639 dqmstore +=
"%(process)s.DQMStore.enableMultiThread = True\n" 641 %(process)s.dqmOutput = cms.OutputModule("DQMRootOutputModule", 642 fileName = cms.untracked.string("DQMIO.root") 646 empty_path = re.compile(
r'.*\b(process\.)?DQMOutput = cms\.EndPath\( *\).*')
647 other_path = re.compile(
r'(.*\b(process\.)?DQMOutput = cms\.EndPath\()(.*)')
648 if empty_path.search(self.
data):
650 self.
data = empty_path.sub(dqmstore +
'\n%(process)s.DQMOutput = cms.EndPath( %(process)s.dqmOutput )\n', self.
data)
651 elif other_path.search(self.
data):
653 self.
data = other_path.sub(dqmstore +
r'\g<1> %(process)s.dqmOutput +\g<3>', self.
data)
656 self.
data += dqmstore
657 self.
data +=
'\n%(process)s.DQMOutput = cms.EndPath( %(process)s.dqmOutput )\n' 662 sys.stderr.write(
'Path selection:\n')
664 sys.stderr.write(
'\t%s\n' % path)
665 sys.stderr.write(
'\n\n')
670 if self.config.paths:
672 paths = self.config.paths.split(
',')
682 if self.config.fragment
or self.config.output
in (
'none', ):
683 if self.config.paths:
688 paths.append(
"-*Output" )
689 paths.append(
"-RatesMonitoring")
690 paths.append(
"-DQMHistograms")
691 if self.config.fragment: paths.append(
"Scouting*Output" )
693 elif self.config.output
in (
'dqm',
'minimal',
'full'):
694 if self.config.paths:
696 paths.append(
"DQMHistograms" )
699 paths.append(
"-*Output" )
700 paths.append(
"-RatesMonitoring")
701 if self.config.fragment: paths.append(
"Scouting*Output" )
704 if self.config.paths:
706 paths.append(
"*Output" )
707 paths.append(
"DQMHistograms" )
713 if self.config.profiling:
714 paths.append(
"-HLTAnalyzerEndpath" )
717 paths.append(
"-OfflineOutput" )
722 if self.config.paths:
726 raise RuntimeError(
'Error: option "--paths %s" does not select any valid paths' % self.config.paths)
742 if not self.config.hilton:
748 if self.config.fragment:
752 self.
options[
'essources'].
append(
"-XMLIdealGeometryESSource" )
757 self.
options[
'esmodules'].
append(
"-AutoMagneticFieldESProducer" )
772 self.
options[
'esmodules'].
append(
"-CaloTowerHardcodeGeometryEP" )
773 self.
options[
'esmodules'].
append(
"-CastorHardcodeGeometryEP" )
776 self.
options[
'esmodules'].
append(
"-EcalElectronicsMappingBuilder" )
778 self.
options[
'esmodules'].
append(
"-EcalLaserCorrectionService" )
779 self.
options[
'esmodules'].
append(
"-EcalPreshowerGeometryEP" )
780 self.
options[
'esmodules'].
append(
"-HcalHardcodeGeometryEP" )
782 self.
options[
'esmodules'].
append(
"-MuonNumberingInitialization" )
783 self.
options[
'esmodules'].
append(
"-ParametrizedMagneticFieldProducer" )
786 self.
options[
'esmodules'].
append(
"-SiStripRecHitMatcherESProducer" )
787 self.
options[
'esmodules'].
append(
"-SiStripQualityESProducer" )
788 self.
options[
'esmodules'].
append(
"-StripCPEfromTrackAngleESProducer" )
789 self.
options[
'esmodules'].
append(
"-TrackerDigiGeometryESModule" )
790 self.
options[
'esmodules'].
append(
"-TrackerGeometricDetESModule" )
791 self.
options[
'esmodules'].
append(
"-VolumeBasedMagneticFieldESProducer" )
794 self.
options[
'esmodules'].
append(
"-L1GtTriggerMaskAlgoTrigTrivialProducer" )
795 self.
options[
'esmodules'].
append(
"-L1GtTriggerMaskTechTrigTrivialProducer" )
796 self.
options[
'esmodules'].
append(
"-hltESPEcalTrigTowerConstituentsMapBuilder" )
797 self.
options[
'esmodules'].
append(
"-hltESPGlobalTrackingGeometryESProducer" )
798 self.
options[
'esmodules'].
append(
"-hltESPMuonDetLayerGeometryESProducer" )
799 self.
options[
'esmodules'].
append(
"-hltESPTrackerRecoGeometryESProducer" )
802 self.
options[
'esmodules'].
append(
"-CaloTowerGeometryFromDBEP" )
803 self.
options[
'esmodules'].
append(
"-CastorGeometryFromDBEP" )
804 self.
options[
'esmodules'].
append(
"-EcalBarrelGeometryFromDBEP" )
805 self.
options[
'esmodules'].
append(
"-EcalEndcapGeometryFromDBEP" )
806 self.
options[
'esmodules'].
append(
"-EcalPreshowerGeometryFromDBEP" )
818 self.
options[
'modules'].
append(
"-hltOutputScoutingCaloMuon" )
821 if self.config.fragment
or (self.config.prescale
and (self.config.prescale.lower() ==
'none')):
824 if self.config.fragment
or self.config.timing:
829 if len(filenames) > 255:
836 self.
data +=
" %s = cms.untracked.vstring%s\n" % (name, token_open)
837 for line
in filenames:
838 self.
data +=
" '%s',\n" % line
839 self.
data +=
" %s,\n" % (token_close)
844 if input[0:8] ==
'dataset:':
845 from .dasFileQuery
import dasFileQuery
851 files = input.split(
',')
855 if self.config.input:
858 elif self.config.data:
860 self.
source = [
"file:RelVal_Raw_%s_DATA.root" % self.config.type ]
863 self.
source = [
"file:RelVal_Raw_%s_MC.root" % self.config.type ]
865 if self.config.parent:
870 %(process)s.source = cms.Source( "PoolSource", 876 inputCommands = cms.untracked.vstring( def __init__(self, configuration)
def splitter(iterator, n)
def addGlobalOptions(self)
def getSetupConfigurationFromDB(self)
def overrideProcessName(self)
def instrumentErrorEventType(self)
def replace(string, replacements)
def expand_filenames(self, input)
def updateMessageLogger(self)
def overrideL1MenuXml(self)
def overrideGlobalTag(self)
def specificCustomize(self)
def consolidatePositiveList(elements)
def overrideParameters(self, module, parameters)
def instrumentOpenMode(self)
def getRawConfigurationFromDB(self)
def loadAdditionalConditions(self, comment, conditions)
def loadCffCommand(self, module)
static std::string join(char **cmd)
def loadCff(self, module)
def consolidateNegativeList(elements)
def instrumentTiming(self)
def expandWildcards(globs, collection)
def _fix_parameter(self, args)
def append_filenames(self, name, filenames)
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