def buildStream(stripping, streamName=''): """ Create a StrippingStream from the lineBuilder database Usage: >>> streamDimuon = strippingStream('Stripping13','Dimuon') or: >>> conf = strippingConfiguration('Stripping13') >>> streamDimuon = strippingStream(conf,'Dimuon') """ from StrippingConf.StrippingStream import StrippingStream from StrippingSettings.Utils import strippingConfiguration from StrippingSelections import lineBuilders stream = StrippingStream(streamName) if isinstance(stripping, basestring): _db = strippingConfiguration(stripping) else: _db = stripping for key in _db.keys(): _conf = _db[key] if stream.name() in _conf['STREAMS']: _lb = lineBuilders()[_conf['BUILDERTYPE']](key, _conf['CONFIG']) stream.appendLines(_lb.lines()) return stream
def streamNames(stripping): from SelPy.utils import flattenList, removeDuplicates from StrippingSettings.Utils import strippingConfiguration if isinstance(stripping, basestring): _db = strippingConfiguration(stripping) else: _db = stripping streams = [v['STREAMS'] for v in _db.values()] return list(set(flattenList(streams)))
def buildStreams(stripping, WGs=None): """ Build and return a set of StrippingStreams for a given stripping configuration. Usage: >>> streams = buildStreams('Stripping13') >>> for s in streams : ... print s.name(), s.lines It is also possible to use a configuration dictionary directly: >>> conf = strippingConfiguration('Stripping13') >>> streams = buildStreams(conf) To select only streams belonging to the RD or the Gamma from trees WGs: >>> streams = buildStreams('stripping13', WGs = ['RD','GammaFromTrees'] ) >>> """ from StrippingConf.StrippingStream import StrippingStream from StrippingSettings.Utils import strippingConfiguration from StrippingSelections import lineBuilders streams = {} if isinstance(stripping, basestring): scdb = strippingConfiguration(stripping) else: scdb = stripping for k, v in scdb.iteritems(): if 'STREAMS' in v.keys() and not WGs or 'WGs' in v.keys(): if not WGs or any(WG for WG in v['WGs'] if WG in WGs): lb = lineBuilders()[v['BUILDERTYPE']](k, v['CONFIG']) addBuilderToStreamGrouping(streams, v, lb) else: raise Exception('Config', k, 'missing either STREAM or WG data data.') strippingStreams = [] for stream in streams: lines = [line for line in streams[stream]] print('Creating ' + stream + ' stream with ' + str(len(lines)) + ' lines') strippingStreams.append(StrippingStream(stream, Lines=lines)) return strippingStreams
def buildStreams( stripping, WGs = None ): """ Build and return a set of StrippingStreams for a given stripping configuration. Usage: >>> streams = buildStreams('Stripping13') >>> for s in streams : ... print s.name(), s.lines It is also possible to use a configuration dictionary directly: >>> conf = strippingConfiguration('Stripping13') >>> streams = buildStreams(conf) To select only streams belonging to the RD or the Gamma from trees WGs: >>> streams = buildStreams('stripping13', WGs = ['RD','GammaFromTrees'] ) >>> """ from StrippingConf.StrippingStream import StrippingStream from StrippingSettings.Utils import strippingConfiguration from StrippingSelections import lineBuilders streams = {} if isinstance(stripping, basestring) : scdb = strippingConfiguration(stripping) else : scdb = stripping for k, v in scdb.iteritems() : if 'STREAMS' in v.keys() and not WGs or 'WGs' in v.keys(): if not WGs or any( WG for WG in v['WGs'] if WG in WGs ): try: lb = lineBuilders()[v['BUILDERTYPE']](k,v['CONFIG']) except Exception, x: log.error("Unable to configure %s because of %s" %(v['BUILDERTYPE'],str(x))) else: addBuilderToStreamGrouping( streams, v, lb ) else: raise Exception('Config',k,'missing either STREAM or WG data data.')
def buildStream(stripping, streamName='', WGs=None): """ Create a StrippingStream from the lineBuilder database Usage: >>> streamDimuon = strippingStream('Stripping13','Dimuon') or: >>> conf = strippingConfiguration('Stripping13') >>> streamDimuon = strippingStream(conf,'Dimuon') """ from StrippingConf.StrippingStream import StrippingStream from StrippingSettings.Utils import strippingConfiguration from StrippingSelections import lineBuilders from StrippingUtils.Utils import lineFromName stream = StrippingStream(streamName) if isinstance(stripping, basestring): _db = strippingConfiguration(stripping) else: _db = stripping for key in _db.keys(): _conf = _db[key] if stream.name() in _conf['STREAMS']: if WGs and not any(WG for WG in _conf['WGs'] if WG in WGs): continue _lb = lineBuilders()[_conf['BUILDERTYPE']](key, _conf['CONFIG']) if isinstance(_conf['STREAMS'], dict): for linename in _conf['STREAMS'][stream.name()]: line = lineFromName(_lb, linename) if line: stream.appendLines([line]) else: raise Exception( 'The line you have requested does not exist ' + linename) elif isinstance(_conf['STREAMS'], list): stream.appendLines(_lb.lines()) else: raise Exception('Unsupported type, expected list ' + 'or dict for line-to-STREAM mapping') return stream
def buildStreams(stripping): """ Build and return a set of StrippingStreams for a given stripping configuration. Usage: >>> streams = buildStreams('Stripping13') >>> for s in streams : ... print s.name(), s.lines It is also possible to use a configuration dictionary directly: >>> conf = strippingConfiguration('Stripping13') >>> streams = buildStreams(conf) """ from StrippingConf.StrippingStream import StrippingStream streams = {} if isinstance(stripping, basestring): scdb = strippingConfiguration(stripping) else: scdb = stripping for k, v in scdb.iteritems(): if 'STREAMS' in v.keys(): for stream in v['STREAMS']: if stream in streams.keys(): streams[stream] += [k] else: streams[stream] = [k] else: print 'ERROR: config', k, 'had no STREAMS data. Ignore!!!' builderMap = {} for builder in scdb.keys(): builderMap[builder] = lineBuilder(scdb, builder) strippingStreams = [] for stream, builderNames in streams.iteritems(): lines = [] for b in builderNames: lines += [line for line in builderMap[b].lines()] print 'Creating steam', stream, 'with lines', lines strippingStreams.append(StrippingStream(stream, Lines=lines)) return strippingStreams
def ReStrip(mylines, stripping="stripping21r0p1", streamname=None): from Configurables import EventNodeKiller, ProcStatusCheck from StrippingArchive.Utils import buildStreams from StrippingArchive import strippingArchive from StrippingConf.Configuration import StrippingStream from StrippingConf.Configuration import StrippingConf from StrippingSettings.Utils import strippingConfiguration NodeKiller = EventNodeKiller("StripKiller") NodeKiller.Nodes = ["/Event/AllStreams", "/Event/Strip"] from StrippingSelections import buildersConf from StrippingSelections.Utils import lineBuilder, buildStreamsFromBuilder config = strippingConfiguration(stripping) archive = strippingArchive(stripping) streams = buildStreams(stripping=config, archive=archive) #confs = buildersConf() mystream = StrippingStream("MyStream") #for name in confnames: # streams = buildStreamsFromBuilder(confs,name) for stream in streams: #if streamname not in stream : continue for line in stream.lines: print line if line.name() in mylines: print "Adding ", line.name(), "for restripping" mystream.appendLines([line]) restrip = StrippingConf(Streams=[mystream], MaxCandidates=2000, AcceptBadEvents=False, BadEventSelection=ProcStatusCheck(), TESPrefix='Strip', ActiveMDSTStream=True) #Verbose = True, #MicroDSTStreams = streams ) return restrip, [NodeKiller, restrip.sequence()]
# from Configurables import DecodeRawEvent DecodeRawEvent().setProp("OverrideInputs", 4.2) ######################## # # Build the streams and stripping object # from StrippingConf.Configuration import StrippingConf, StrippingStream from StrippingSettings.Utils import strippingConfiguration from StrippingArchive.Utils import buildStreams, cloneLinesFromStream from StrippingArchive import strippingArchive #get the configuration dictionary from the database config = strippingConfiguration(stripping) #get the line builders from the archive archive = strippingArchive(stripping) ######################### # Fix Bu2LLK config for S29r2, which was not updated in Settings but is correct in Archive from StrippingArchive.Stripping29r2.StrippingRD.StrippingBu2LLK import default_config as Bu2LLK_config config = dict(config) config['Bu2LLK']['CONFIG'] = Bu2LLK_config['CONFIG'] # only in this stripping. Now sure what's the need of this in our case ######################### streams = buildStreams(stripping=config, archive=archive) #OUTPUT STREAM NAME
EventNodeKiller, ProcStatusCheck, DaVinci, DecayTreeTuple ) from GaudiConf import IOHelper from DecayTreeTuple.Configuration import * # Node killer: remove the previous Stripping event_node_killer = EventNodeKiller('StripKiller') event_node_killer.Nodes = ['/Event/AllStreams', '/Event/Strip'] # Build a new stream called 'CustomStream' that only # contains the desired line strip = 'stripping21' streams = buildStreams(stripping=strippingConfiguration(strip), archive=strippingArchive(strip)) custom_stream = StrippingStream('CustomStream') custom_line = 'StrippingD2hhCompleteEventPromptDst2D2RSLine' for stream in streams: for line in stream.lines: if line.name() == custom_line: custom_stream.appendLines([line]) line = 'D2hhCompleteEventPromptDst2D2RSLine' # Create the actual Stripping configurable filterBadEvents = ProcStatusCheck()
myTriggerList = [] for stage, lines in HltLines.iteritems(): for line in lines: myTriggerList.append( stage+line+'Decision' ) #kill the previous stripping just in case (it is not the case) your file was already stripped. from Configurables import EventNodeKiller killer = EventNodeKiller('Stripkiller') killer.Nodes = ['/Event/AllStreams', '/Event/Strip'] stripping='stripping20r0p2' config = strippingConfiguration(stripping) archive = strippingArchive(stripping) streams = buildStreams(stripping=config, archive=archive) # Select my line MyStream = StrippingStream("MyStream") MyLines = ['StrippingBetaSQ2B3piSelectionLine'] for stream in streams: for line in stream.lines: if line.name() in MyLines: MyStream.appendLines( [ line ] )
def __init__(self, version) : self.version = prepend_stripping(version) self.config = strippingConfiguration(self.version) self.archive = strippingArchive(self.version) self.streams = buildStreams(stripping=self.config, archive=self.archive)
# restrip if not (restripversion == ""): # kill old stripping banks from Configurables import EventNodeKiller eventNodeKiller = EventNodeKiller('Stripkiller') eventNodeKiller.Nodes = ['/Event/AllStreams', '/Event/Strip'] from StrippingConf.Configuration import StrippingConf, StrippingStream from StrippingArchive import strippingArchive from StrippingArchive.Utils import buildStreams from StrippingSettings.Utils import strippingConfiguration # Note: can only get stripping versions with certain DaVinci versions config = strippingConfiguration(restripversion) archive = strippingArchive(restripversion) streams = buildStreams(stripping=config, archive=archive) # get our stripping line from archive MyStream = StrippingStream("MyStream") MyLines = ['Stripping' + lines[0]] # note: only for one line! for stream in streams: for line in stream.lines: if line.name() in MyLines: MyStream.appendLines([line]) from Configurables import ProcStatusCheck filterBadEvents = ProcStatusCheck() sc = StrippingConf(Streams=[MyStream], MaxCandidates=2000,
from StrippingSettings.Utils import strippingConfiguration from StrippingArchive.Utils import buildStreams from StrippingArchive import strippingArchive from Configurables import (EventNodeKiller, ProcStatusCheck, DaVinci, DecayTreeTuple) from GaudiConf import IOHelper from DecayTreeTuple.Configuration import * # Node killer: remove the previous Stripping event_node_killer = EventNodeKiller('StripKiller') event_node_killer.Nodes = ['/Event/AllStreams', '/Event/Strip'] # Build a new stream called 'CustomStream' that only # contains the desired line strip = 'stripping21' streams = buildStreams(stripping=strippingConfiguration(strip), archive=strippingArchive(strip)) custom_stream = StrippingStream('CustomStream') custom_line = 'StrippingD2hhCompleteEventPromptDst2D2RSLine' for stream in streams: for line in stream.lines: if line.name() == custom_line: custom_stream.appendLines([line]) line = 'D2hhCompleteEventPromptDst2D2RSLine' # Create the actual Stripping configurable filterBadEvents = ProcStatusCheck()
from Configurables import DecodeRawEvent DecodeRawEvent().setProp("OverrideInputs", 4.2) myconf = "___lb___" #myconf = "D2XMuMuSS" # NOTE: this will work only if you inserted correctly the # default_config dictionary in the code where your LineBuilder # is defined. from StrippingConf.Configuration import StrippingConf, StrippingStream from StrippingSettings.Utils import strippingConfiguration from StrippingArchive.Utils import buildStreams from StrippingArchive import strippingArchive #get the configuration dictionary from the database tmpconf = strippingConfiguration(stripping) #get the line builders from the archive archive = strippingArchive(stripping) conf = {} for k, tp in tmpconf.iteritems(): if k == myconf: conf[k] = tp break streams = buildStreams(stripping=conf, archive=archive) dictreportsline = [] for s in streams: dictreportsline.append("StrippingStream" + s.name() + "Decision")
def get_streams(version) : config = strippingConfiguration(version) archive = strippingArchive(version) streams = buildStreams(stripping=config, archive=archive) return streams