7 from pipe
import pipe
as _pipe
8 from options
import globalTag
9 from itertools
import islice
13 i = iterator.__iter__()
15 l =
list(islice(i, n))
42 if self.config.fragment:
43 self.
labels[
'process'] =
'fragment' 44 self.
labels[
'dict'] =
'fragment.__dict__' 46 self.
labels[
'process'] =
'process' 47 self.
labels[
'dict'] =
'process.__dict__' 49 if self.config.prescale
and (self.config.prescale.lower() !=
'none'):
50 self.
labels[
'prescale'] = self.config.prescale
53 from confdbOfflineConverter
import OfflineConverter
54 self.
converter = OfflineConverter(version = self.config.menu.version, database = self.config.menu.database)
62 if not self.config.setup:
65 if ".py" in self.config.setup:
66 self.config.setupFile = self.config.setup.split(
".py")[0]
68 args = [
'--configName', self.config.setup ]
69 args.append(
'--noedsources')
70 args.append(
'--nopaths')
71 for key, vals
in six.iteritems(self.
options):
73 args.extend((
'--'+key,
','.
join(vals)))
75 data, err = self.converter.query( *args )
76 if 'ERROR' in err
or 'Exhausted Resultset' in err
or 'CONFIG_NOT_FOUND' in err:
77 sys.stderr.write(
"%s: error while retrieving the HLT setup menu\n\n" % os.path.basename(sys.argv[0]))
78 sys.stderr.write(err +
"\n\n")
80 self.config.setupFile =
"setup_"+self.config.setup[1:].
replace(
"/",
"_")+
"_cff" 81 file(self.config.setupFile+
".py",
"w+").
write(
"# This file is automatically generated by hltGetConfiguration.\n" + data)
84 if self.config.menu.run:
85 args = [
'--runNumber', self.config.menu.run]
87 args = [
'--configName', self.config.menu.name ]
88 args.append(
'--noedsources')
89 for key, vals
in six.iteritems(self.
options):
91 args.extend((
'--'+key,
','.
join(vals)))
93 data, err = self.converter.query( *args )
94 if 'ERROR' in err
or 'Exhausted Resultset' in err
or 'CONFIG_NOT_FOUND' in err:
95 sys.stderr.write(
"%s: error while retrieving the HLT menu\n\n" % os.path.basename(sys.argv[0]))
96 sys.stderr.write(err +
"\n\n")
101 if self.config.menu.run:
102 args = [
'--runNumber', self.config.menu.run]
104 args = [
'--configName', self.config.menu.name]
114 data, err = self.converter.query( *args )
115 if 'ERROR' in err
or 'Exhausted Resultset' in err
or 'CONFIG_NOT_FOUND' in err:
116 sys.stderr.write(
"%s: error while retrieving the list of paths from the HLT menu\n\n" % os.path.basename(sys.argv[0]))
117 sys.stderr.write(err +
"\n\n")
119 filter = re.compile(
r' *= *cms.(End)?Path.*')
120 paths = [ filter.sub(
'', line)
for line
in data.splitlines()
if filter.search(line) ]
135 filter = re.compile(
r'^' + glob.replace(
'?',
'.').
replace(
'*',
'.*').
replace(
'[!',
'[^') +
r'$')
136 matches.extend( negate + element
for element
in collection
if filter.match(element) )
145 for element
in elements:
146 if element[0] ==
'-':
147 result.add( element )
149 result.discard(
'-' + element )
150 return sorted( element
for element
in result )
157 for element
in elements:
158 if element[0] ==
'-':
159 result.discard( element[1:] )
161 result.add( element )
162 return sorted( element
for element
in result )
168 if self.config.fragment:
169 self.
data = re.sub(
r'\bprocess\b',
'fragment', self.
data )
170 self.
data = re.sub(
r'\bProcess\b',
'ProcessFragment', self.
data )
177 if self.config.fragment:
179 # add specific customizations 180 from HLTrigger.Configuration.customizeHLTforALL import customizeHLTforAll 181 fragment = customizeHLTforAll(fragment,"%s") 182 """ % (self.config.type)
184 if self.config.type==
"Fake":
188 _gtData =
"auto:"+prefix+
"_hlt_"+self.config.type
189 _gtMc =
"auto:"+prefix+
"_mc_" +self.config.type
191 # add specific customizations 193 _customInfo['menuType' ]= "%s" 194 _customInfo['globalTags']= {} 195 _customInfo['globalTags'][True ] = "%s" 196 _customInfo['globalTags'][False] = "%s" 197 _customInfo['inputFiles']={} 198 _customInfo['inputFiles'][True] = "file:RelVal_Raw_%s_DATA.root" 199 _customInfo['inputFiles'][False] = "file:RelVal_Raw_%s_MC.root" 200 _customInfo['maxEvents' ]= %s 201 _customInfo['globalTag' ]= "%s" 202 _customInfo['inputFile' ]= %s 203 _customInfo['realData' ]= %s 204 from HLTrigger.Configuration.customizeHLTforALL import customizeHLTforAll 205 %%(process)s = customizeHLTforAll(%%(process)s,"%s",_customInfo) 206 """ % (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)
209 from HLTrigger.Configuration.customizeHLTforCMSSW import customizeHLTforCMSSW 210 %%(process)s = customizeHLTforCMSSW(%%(process)s,"%s") 211 """ % (self.config.type)
215 # Eras-based customisations 216 from HLTrigger.Configuration.Eras import modifyHLTforEras 217 modifyHLTforEras(%(process)s) 220 if self.config.customise:
222 self.
data +=
"#User-defined customization functions\n" 223 for customise
in self.config.customise.split(
","):
224 customiseValues = customise.split(
".")
225 if len(customiseValues)>=3:
raise Exception(
"--customise option cannot contain more than one dot.")
226 if len(customiseValues)==1:
227 customiseValues.append(
"customise")
228 customiseValues[0] = customiseValues[0].
replace(
"/",
".")
229 self.
data +=
"from "+customiseValues[0]+
" import "+customiseValues[1]+
"\n" 230 self.
data +=
"process = "+customiseValues[1]+
"(process)\n" 236 if not self.config.fragment:
240 if self.config.type
in (
'HIon', ):
242 if not self.config.fragment:
243 self.
_fix_parameter( type =
'InputTag', value =
'rawDataCollector', replace =
'rawDataRepacker')
266 if self.config.fragment:
268 # dummyfy hltGetConditions in cff's 269 if 'hltGetConditions' in %(dict)s and 'HLTriggerFirstPath' in %(dict)s : 270 %(process)s.hltDummyConditions = cms.EDFilter( "HLTBool", 271 result = cms.bool( True ) 273 %(process)s.HLTriggerFirstPath.replace(%(process)s.hltGetConditions,%(process)s.hltDummyConditions) 278 match = re.match(
r'(Scouting\w+)Output$', path)
280 module =
'hltOutput' + match.group(1)
281 self.
data = self.data.replace(path+
' = cms.EndPath', path+
' = cms.Path')
282 self.
data = self.data.replace(
' + process.'+module,
'')
314 # limit the number of events to be processed 315 %%(process)s.maxEvents = cms.untracked.PSet( 316 input = cms.untracked.int32( %d ) 318 """ % self.config.events
321 # enable TrigReport, TimeReport and MultiThreading 322 %(process)s.options = cms.untracked.PSet( 323 wantSummary = cms.untracked.bool( True ), 324 numberOfThreads = cms.untracked.uint32( 4 ), 325 numberOfStreams = cms.untracked.uint32( 0 ), 326 sizeOfStackForThreadsInKB = cms.untracked.uint32( 10*1024 ) 332 name: parameter name (optional) 333 type: parameter type (look for tracked and untracked variants) 334 value: original value 335 replace: replacement value 339 r'%(name)s = cms(?P<tracked>(?:\.untracked)?)\.%(type)s\( (?P<quote>["\']?)%(value)s(?P=quote)' % args,
340 r'%(name)s = cms\g<tracked>.%(type)s( \g<quote>%(replace)s\g<quote>' % args,
344 r'cms(?P<tracked>(?:\.untracked)?)\.%(type)s\( (?P<quote>["\']?)%(value)s(?P=quote)' % args,
345 r'cms\g<tracked>.%(type)s( \g<quote>%(replace)s\g<quote>' % args,
352 if self.
options[
'paths'][0][0] ==
'-':
354 for minuspath
in self.
options[
'paths']:
356 self.
data = re.sub(
r' cms.PSet\( pathName = cms.string\( "%s" \),\n prescales = cms.vuint32\( .* \)\n \),?\n' % path,
'', self.
data)
360 if path
not in self.
options[
'paths']:
361 self.
data = re.sub(
r' cms.PSet\( pathName = cms.string\( "%s" \),\n prescales = cms.vuint32\( .* \)\n \),?\n' % path,
'', self.
data)
363 if self.config.prescale
and (self.config.prescale.lower() !=
'none'):
366 # force the use of a specific HLT prescale column 367 if 'PrescaleService' in %(dict)s: 368 %(process)s.PrescaleService.forceDefault = True 369 %(process)s.PrescaleService.lvl1DefaultLabel = '%(prescale)s' 376 filters = [ match[1]
for match
in re.findall(
r'(process\.)?\b(\w+) = cms.EDFilter', self.
data) ]
377 re_sequence = re.compile(
r'cms\.(Path|Sequence)\((.*)\)' )
379 self.
data = re_sequence.sub(
lambda line: re.sub(
r'cms\.ignore *\( *((process\.)?\b(\w+)) *\)',
r'\1', line.group(0) ), self.
data )
380 self.
data = re_sequence.sub(
lambda line: re.sub(
r'~',
'', line.group(0) ), self.
data )
382 for some
in splitter(filters, 1000):
383 re_filters = re.compile(
r'\b((process\.)?(' +
r'|'.
join(some) +
r'))\b' )
384 self.
data = re_sequence.sub(
lambda line: re_filters.sub(
r'cms.ignore( \1 )', line.group(0) ), self.
data )
388 if self.config.errortype:
390 self.
_fix_parameter(name =
'SelectedTriggerType', type =
'int32', value =
'1', replace =
'0')
391 self.
_fix_parameter(name =
'SelectedTriggerType', type =
'int32', value =
'2', replace =
'0')
392 self.
_fix_parameter(name =
'SelectedTriggerType', type =
'int32', value =
'3', replace =
'0')
408 if not self.config.data
and not self.config.globaltag:
409 if self.config.type
in globalTag:
410 self.config.globaltag = globalTag[self.config.type]
412 self.config.globaltag = globalTag[
'GRun']
415 if self.config.l1.override:
416 self.config.l1.tag = self.config.l1.override
417 self.config.l1.record =
'L1TUtmTriggerMenuRcd' 418 self.config.l1.connect =
'' 419 self.config.l1.label =
'' 420 if not self.config.l1.snapshotTime:
421 self.config.l1.snapshotTime =
'9999-12-31 23:59:59.000' 422 self.config.l1cond =
'%(tag)s,%(record)s,%(connect)s,%(label)s,%(snapshotTime)s' % self.config.l1.__dict__
424 self.config.l1cond =
None 426 if self.config.globaltag
or self.config.l1cond:
428 # override the GlobalTag, connection string and pfnPrefix 429 if 'GlobalTag' in %(dict)s: 430 from Configuration.AlCa.GlobalTag import GlobalTag as customiseGlobalTag 431 %(process)s.GlobalTag = customiseGlobalTag(%(process)s.GlobalTag""" 432 if self.config.globaltag:
433 text +=
", globaltag = %s" % repr(self.config.globaltag)
434 if self.config.l1cond:
435 text +=
", conditions = %s" % repr(self.config.l1cond)
441 if self.config.l1Xml.XmlFile:
443 # override the GlobalTag's L1T menu from an Xml file 444 from HLTrigger.Configuration.CustomConfigs import L1XML 445 %%(process)s = L1XML(%%(process)s,"%s") 446 """ % (self.config.l1Xml.XmlFile)
451 if self.config.emulator:
453 # run the Full L1T emulator, then repack the data into a new RAW collection, to be used by the HLT 454 from HLTrigger.Configuration.CustomConfigs import L1REPACK 455 %%(process)s = L1REPACK(%%(process)s,"%s") 456 """ % (self.config.emulator)
462 r'\b(process\.)?hltOutput(\w+) *= *cms\.OutputModule\( *"ShmStreamConsumer" *,',
463 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 ),',
467 if not self.config.fragment
and self.config.output ==
'minimal':
470 # add a single "keep *" output 471 %(process)s.hltOutputMinimal = cms.OutputModule( "PoolOutputModule", 472 fileName = cms.untracked.string( "output.root" ), 473 fastCloning = cms.untracked.bool( False ), 474 dataset = cms.untracked.PSet( 475 dataTier = cms.untracked.string( 'AOD' ), 476 filterName = cms.untracked.string( '' ) 478 outputCommands = cms.untracked.vstring( 'drop *', 479 'keep edmTriggerResults_*_*_*', 480 'keep triggerTriggerEvent_*_*_*' 483 %(process)s.MinimalOutput = cms.EndPath( %(process)s.hltOutputMinimal ) 485 elif not self.config.fragment
and self.config.output ==
'full':
488 # add a single "keep *" output 489 %(process)s.hltOutputFull = cms.OutputModule( "PoolOutputModule", 490 fileName = cms.untracked.string( "output.root" ), 491 fastCloning = cms.untracked.bool( False ), 492 dataset = cms.untracked.PSet( 493 dataTier = cms.untracked.string( 'RECO' ), 494 filterName = cms.untracked.string( '' ) 496 outputCommands = cms.untracked.vstring( 'keep *' ) 498 %(process)s.FullOutput = cms.EndPath( %(process)s.hltOutputFull ) 503 if self.config.eras
is None:
505 self.
data = re.sub(
r'process = cms.Process\( *"\w+"',
'from Configuration.StandardSequences.Eras import eras\n\g<0>, '+
', '.
join(
'eras.' + era
for era
in self.config.eras.split(
',')), self.
data)
509 if self.config.setup
is None:
511 processLine = self.data.find(
"\n",self.data.find(
"cms.Process"))
512 self.
data = self.
data[:processLine]+
'\nprocess.load("%s")'%self.config.setupFile+self.
data[processLine:]
516 if self.config.name
is None:
520 self.config.name = self.config.name.replace(
"_",
"")
523 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)
526 if self.config.setup: self.
data +=
""" 527 # avoid PrescaleService error due to missing HLT paths 528 if 'PrescaleService' in process.__dict__: 529 for pset in reversed(process.PrescaleService.prescaleTable): 530 if not hasattr(process,pset.pathName.value()): 531 process.PrescaleService.prescaleTable.remove(pset) 538 if 'MessageLogger' in %(dict)s: 539 %(process)s.MessageLogger.categories.append('TriggerSummaryProducerAOD') 540 %(process)s.MessageLogger.categories.append('L1GtTrigReport') 541 %(process)s.MessageLogger.categories.append('L1TGlobalSummary') 542 %(process)s.MessageLogger.categories.append('HLTrigReport') 543 %(process)s.MessageLogger.categories.append('FastReport') 551 if 'GlobalTag' in %%(dict)s: 553 for condition
in conditions:
554 self.
data +=
""" %%(process)s.GlobalTag.toGet.append( 556 record = cms.string( '%(record)s' ), 557 tag = cms.string( '%(tag)s' ), 558 label = cms.untracked.string( '%(label)s' ), 566 if self.config.fragment:
567 return 'from %s import *\n' % module
569 return 'process.load( "%s" )\n' % module
577 self.
data +=
"if '%s' in %%(dict)s:\n" % module
578 for (parameter, value)
in parameters:
579 self.
data +=
" %%(process)s.%s.%s = %s\n" % (module, parameter, value)
585 if self.config.timing:
587 # instrument the menu with the modules and EndPath needed for timing studies 590 self.
data +=
'\n# configure the FastTimerService\n' 591 self.
loadCff(
'HLTrigger.Timer.FastTimerService_cfi')
593 self.
data +=
"""# print a text summary at the end of the job 594 %(process)s.FastTimerService.printEventSummary = False 595 %(process)s.FastTimerService.printRunSummary = False 596 %(process)s.FastTimerService.printJobSummary = True 599 %(process)s.FastTimerService.enableDQM = True 601 # enable per-path DQM plots (starting with CMSSW 9.2.3-patch2) 602 %(process)s.FastTimerService.enableDQMbyPath = True 604 # enable per-module DQM plots 605 %(process)s.FastTimerService.enableDQMbyModule = True 607 # enable per-event DQM plots vs lumisection 608 %(process)s.FastTimerService.enableDQMbyLumiSection = True 609 %(process)s.FastTimerService.dqmLumiSectionsRange = 2500 611 # set the time resolution of the DQM plots 612 %(process)s.FastTimerService.dqmTimeRange = 2000. 613 %(process)s.FastTimerService.dqmTimeResolution = 10. 614 %(process)s.FastTimerService.dqmPathTimeRange = 1000. 615 %(process)s.FastTimerService.dqmPathTimeResolution = 5. 616 %(process)s.FastTimerService.dqmModuleTimeRange = 200. 617 %(process)s.FastTimerService.dqmModuleTimeResolution = 1. 619 # set the base DQM folder for the plots 620 %(process)s.FastTimerService.dqmPath = 'HLT/TimerService' 621 %(process)s.FastTimerService.enableDQMbyProcesses = False 626 if not self.config.hilton:
628 if 'hltDQMFileSaver' in self.
data:
629 self.
data = re.sub(
r'\b(process\.)?hltDQMFileSaver \+ ',
'', self.
data)
630 self.
data = re.sub(
r' \+ \b(process\.)?hltDQMFileSaver',
'', self.
data)
631 self.
data = re.sub(
r'\b(process\.)?hltDQMFileSaver',
'', self.
data)
634 dqmstore =
"\n# load the DQMStore and DQMRootOutputModule\n" 636 dqmstore +=
"%(process)s.DQMStore.enableMultiThread = True\n" 638 %(process)s.dqmOutput = cms.OutputModule("DQMRootOutputModule", 639 fileName = cms.untracked.string("DQMIO.root") 643 empty_path = re.compile(
r'.*\b(process\.)?DQMOutput = cms\.EndPath\( *\).*')
644 other_path = re.compile(
r'(.*\b(process\.)?DQMOutput = cms\.EndPath\()(.*)')
645 if empty_path.search(self.
data):
647 self.
data = empty_path.sub(dqmstore +
'\n%(process)s.DQMOutput = cms.EndPath( %(process)s.dqmOutput )\n', self.
data)
648 elif other_path.search(self.
data):
650 self.
data = other_path.sub(dqmstore +
r'\g<1> %(process)s.dqmOutput +\g<3>', self.
data)
653 self.
data += dqmstore
654 self.
data +=
'\n%(process)s.DQMOutput = cms.EndPath( %(process)s.dqmOutput )\n' 659 sys.stderr.write(
'Path selection:\n')
661 sys.stderr.write(
'\t%s\n' % path)
662 sys.stderr.write(
'\n\n')
667 if self.config.paths:
669 paths = self.config.paths.split(
',')
679 if self.config.fragment
or self.config.output
in (
'none', ):
680 if self.config.paths:
685 paths.append(
"-*Output" )
686 paths.append(
"-RatesMonitoring")
687 paths.append(
"-DQMHistograms")
688 if self.config.fragment: paths.append(
"Scouting*Output" )
690 elif self.config.output
in (
'dqm',
'minimal',
'full'):
691 if self.config.paths:
693 paths.append(
"DQMHistograms" )
696 paths.append(
"-*Output" )
697 paths.append(
"-RatesMonitoring")
698 if self.config.fragment: paths.append(
"Scouting*Output" )
701 if self.config.paths:
703 paths.append(
"*Output" )
704 paths.append(
"DQMHistograms" )
710 if self.config.profiling:
711 paths.append(
"-HLTAnalyzerEndpath" )
714 paths.append(
"-OfflineOutput" )
719 if self.config.paths:
723 raise RuntimeError(
'Error: option "--paths %s" does not select any valid paths' % self.config.paths)
739 if not self.config.hilton:
745 if self.config.fragment:
749 self.
options[
'essources'].
append(
"-XMLIdealGeometryESSource" )
754 self.
options[
'esmodules'].
append(
"-AutoMagneticFieldESProducer" )
769 self.
options[
'esmodules'].
append(
"-CaloTowerHardcodeGeometryEP" )
770 self.
options[
'esmodules'].
append(
"-CastorHardcodeGeometryEP" )
773 self.
options[
'esmodules'].
append(
"-EcalElectronicsMappingBuilder" )
775 self.
options[
'esmodules'].
append(
"-EcalLaserCorrectionService" )
776 self.
options[
'esmodules'].
append(
"-EcalPreshowerGeometryEP" )
777 self.
options[
'esmodules'].
append(
"-HcalHardcodeGeometryEP" )
779 self.
options[
'esmodules'].
append(
"-MuonNumberingInitialization" )
780 self.
options[
'esmodules'].
append(
"-ParametrizedMagneticFieldProducer" )
783 self.
options[
'esmodules'].
append(
"-SiStripRecHitMatcherESProducer" )
784 self.
options[
'esmodules'].
append(
"-SiStripQualityESProducer" )
785 self.
options[
'esmodules'].
append(
"-StripCPEfromTrackAngleESProducer" )
786 self.
options[
'esmodules'].
append(
"-TrackerDigiGeometryESModule" )
787 self.
options[
'esmodules'].
append(
"-TrackerGeometricDetESModule" )
788 self.
options[
'esmodules'].
append(
"-VolumeBasedMagneticFieldESProducer" )
791 self.
options[
'esmodules'].
append(
"-L1GtTriggerMaskAlgoTrigTrivialProducer" )
792 self.
options[
'esmodules'].
append(
"-L1GtTriggerMaskTechTrigTrivialProducer" )
793 self.
options[
'esmodules'].
append(
"-hltESPEcalTrigTowerConstituentsMapBuilder" )
794 self.
options[
'esmodules'].
append(
"-hltESPGlobalTrackingGeometryESProducer" )
795 self.
options[
'esmodules'].
append(
"-hltESPMuonDetLayerGeometryESProducer" )
796 self.
options[
'esmodules'].
append(
"-hltESPTrackerRecoGeometryESProducer" )
799 self.
options[
'esmodules'].
append(
"-CaloTowerGeometryFromDBEP" )
800 self.
options[
'esmodules'].
append(
"-CastorGeometryFromDBEP" )
801 self.
options[
'esmodules'].
append(
"-EcalBarrelGeometryFromDBEP" )
802 self.
options[
'esmodules'].
append(
"-EcalEndcapGeometryFromDBEP" )
803 self.
options[
'esmodules'].
append(
"-EcalPreshowerGeometryFromDBEP" )
815 self.
options[
'modules'].
append(
"-hltOutputScoutingCaloMuon" )
818 if self.config.fragment
or (self.config.prescale
and (self.config.prescale.lower() ==
'none')):
821 if self.config.fragment
or self.config.timing:
826 if len(filenames) > 255:
833 self.
data +=
" %s = cms.untracked.vstring%s\n" % (name, token_open)
834 for line
in filenames:
835 self.
data +=
" '%s',\n" % line
836 self.
data +=
" %s,\n" % (token_close)
841 if input[0:8] ==
'dataset:':
842 from dasFileQuery
import dasFileQuery
848 files = input.split(
',')
852 if self.config.input:
855 elif self.config.data:
857 self.
source = [
"file:RelVal_Raw_%s_DATA.root" % self.config.type ]
860 self.
source = [
"file:RelVal_Raw_%s_MC.root" % self.config.type ]
862 if self.config.parent:
867 %(process)s.source = cms.Source( "PoolSource", 873 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