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()]
leptonicMicroDSTname, charmMicroDSTname, pidMicroDSTname, bhadronMicroDSTname ] dstStreams = [ "BhadronCompleteEvent", "CharmCompleteEvent", "Dimuon", "EW", "Semileptonic", "Calibration", "MiniBias", "Radiative" ] stripTESPrefix = 'Strip' from Configurables import ProcStatusCheck sc = StrippingConf(Streams=streams, MaxCandidates=2000, AcceptBadEvents=False, BadEventSelection=ProcStatusCheck(), TESPrefix=stripTESPrefix, ActiveMDSTStream=True, Verbose=True, DSTStreams=dstStreams, MicroDSTStreams=mdstStreams) # # Configure the dst writers for the output # enablePacking = True from DSTWriters.microdstelements import * from DSTWriters.Configuration import (SelDSTWriter, stripDSTStreamConf, stripDSTElements, stripMicroDSTStreamConf,
#get the configuration dictionary from the database config = strippingConfiguration(stripping) #get the line builders from the archive archive = strippingArchive(stripping) stream = buildStream(stripping = config, streamName='ALL', archive = archive) stream.lines=[l for l in stream.lines if (("TrackEffDown" not in l.name()))] #fix for Z02mumu bug for l in stream.lines: if l.RequiredRawEvents and l._prescale==0: l.RequiredRawEvents=None from Configurables import ProcStatusCheck filterBadEvents = ProcStatusCheck() sc = StrippingConf( Streams = [stream], MaxCandidates = 2000, AcceptBadEvents = False, BadEventSelection = filterBadEvents, TESPrefix = 'Strip' ) ## Configure PV refitter from Configurables import LoKi__PVReFitter LoKi__PVReFitter("ToolSvc.LoKi::PVReFitter").CheckTracksByLHCbIDs = True appMgr = ApplicationMgr() appMgr.OutputLevel = 6 appMgr.ExtSvc += [ 'ToolSvc', 'AuditorSvc' ]
def ConfigureDaVinci(): config = Swimming() from Configurables import DaVinci from StrippingConf.Configuration import StrippingConf from Configurables import ProcStatusCheck from Configurables import EventNodeKiller, GaudiSequencer from PhysSelPython.Wrappers import (AutomaticData, SelectionSequence, MultiSelectionSequence) # Get the stripping line from StrippingSettings.Utils import lineBuilderConfiguration strippingFile = None if config.getProp('StrippingFile') != 'none': strippingFile = config.getProp('StrippingFile') else: strippingFile = config.getProp('StrippingLineGroup') myconfig = lineBuilderConfiguration(config.getProp('StrippingVersion'), config.getProp('StrippingLineGroup')) import StrippingArchive mylineconf = getattr( __import__( 'StrippingArchive.' + config.getProp('StrippingVersion') + '.Stripping' + strippingFile, globals(), locals(), [myconfig["BUILDERTYPE"]], -1), myconfig["BUILDERTYPE"]) mylinedict = myconfig["CONFIG"] substitutions = config.getProp('StrippingConfigSubstitutions') print "mylinedict before substitutions:", mylinedict print "stripping config substitutions:", substitutions mylinedict.update(substitutions) print "mylineconf:", mylineconf print "mylinedict after substitutions:", mylinedict from StrippingConf.StrippingStream import StrippingStream stream = StrippingStream(config.getProp('StrippingStream') + "Swimming") allLines = mylineconf(config.getProp('StrippingLineGroup'), mylinedict).lines() lines = [] #lineNames = [l.split('/')[-1] for l in config.getProp('StripCands').keys()] lineNames = config.getProp('StrippingLines') print "lineNames:", lineNames for l in allLines: for lineName in lineNames: if l.outputLocation().find(lineName) != -1: lines.append(l) print l.outputLocation() stream.appendLines(lines) # Define the stream filterBadEvents = ProcStatusCheck() sc = StrippingConf(Streams=[stream], MaxCandidates=2000, AcceptBadEvents=False, BadEventSelection=filterBadEvents) # Define the node killer, and make sure to kill everything corresponding to # the stream which we want to swim outputs = [] from Configurables import Swimming__PVReFitter as ReFitter for l in lines: for f in l.filterMembers(): if hasattr(f, 'ReFitPVs') and f.ReFitPVs: if not config.getProp('RefitPVs'): log.warning('RefitPVs is not set, but stripping line applies refitting. Refitted ' + \ 'PVs will be used for turning-point lifetime calculations.') config.setProp('RefitPVs', True) t = f.PVReFitters[''] f.PVReFitters = {'': 'Swimming::PVReFitter/PVReFitter'} f.addTool(ReFitter, 'PVReFitter') f.PVReFitter.PVReFitter = t elif not hasattr(f, 'Output'): continue # Remove the last item so we get everything (Particle, relations, # decayVertices, etc... o = '/'.join(f.Output.split('/')[:-1]) outputs.append(o) print "Outputs are", outputs mykiller = EventNodeKiller("killStripping") # Some default nodes which we will want to kill in all cases nodestokill = outputs + ['Strip', '/Event/Rec/Vertex/Primary'] mykiller.Nodes = nodestokill deathstar = GaudiSequencer("killStrippingSeq") deathstar.Members = [mykiller] # Configure DaVinci DaVinci().InputType = config.getProp('InputType') DaVinci().DataType = config.getProp('DataType') DaVinci().Simulation = config.getProp('Simulation') DaVinci().DDDBtag = config.getProp('DDDBtag') DaVinci().CondDBtag = config.getProp('CondDBtag') try: DaVinci().Persistency = config.getProp('Persistency') except AttributeError: print "DaVinci doesn't have a Persistency attribute to set" # The sequence for the swimming has to be configured # by hand inserting the node killer before it DaVinci().appendToMainSequence([deathstar]) DaVinci().appendToMainSequence([sc.sequence()]) # Since the name of the output file is configured in two places in DaVinci, # do some splitting. splitName = config.getProp('OutputFile').split(os.path.extsep) seqName = '' prefix = '' if len(splitName) <= 2: seqName = splitName[0] print "Warning, an output filename in three parts was specified. This does not work well, " + \ " so 'Swimming.' will be prefixed." prefix = 'Swimming' else: prefix = splitName[0] seqName = os.path.extsep.join(splitName[1:-1]) dstWriter = None print config.getProp('OutputType') # Offline candidate selection sequences sequences = [] offCands = config.getProp('OffCands').keys() for i, cands in enumerate(offCands): data = AutomaticData(Location=cands + "/Particles") offSeq = SelectionSequence("OfflineCandidates_%d" % i, TopSelection=data) sequences.append(offSeq) # selection sequence for offline candidates muCands = config.getProp('MuDSTCands') for i, cands in enumerate(muCands): # Add extra selections for additional MuDSTCands data = AutomaticData(Location=cands + "/Particles") seq = SelectionSequence("MuDSTCands_%d" % i, TopSelection=data) sequences.append(seq) selectionSeq = MultiSelectionSequence(seqName, Sequences=sequences) if config.getProp('OutputType') == 'MDST': pack = False isMC = config.getProp("Simulation") SwimmingConf = config.getProp('MicroDSTStreamConf') SwimmingElements = config.getProp('MicroDSTElements') if SwimmingConf == False: from DSTWriters.Configuration import stripMicroDSTStreamConf SwimmingConf = stripMicroDSTStreamConf(pack=pack, isMC=isMC) if len(SwimmingElements) == 0: from DSTWriters.Configuration import stripMicroDSTElements from DSTWriters.microdstelements import CloneSwimmingReports, CloneParticleTrees, CloneTPRelations mdstElements = stripMicroDSTElements(pack=pack, isMC=isMC) SwimmingElements = [CloneSwimmingReports()] for element in mdstElements: SwimmingElements += [element] if type(element) == CloneParticleTrees: SwimmingElements += [CloneTPRelations("P2TPRelations")] streamConf = {'default': SwimmingConf} elementsConf = {'default': SwimmingElements} try: from DSTWriters.__dev__.Configuration import MicroDSTWriter except: from DSTWriters.Configuration import MicroDSTWriter dstWriter = MicroDSTWriter('MicroDST', StreamConf=streamConf, MicroDSTElements=elementsConf, WriteFSR=config.getProp('WriteFSR'), OutputFileSuffix=prefix, SelectionSequences=[selectionSeq]) elif config.getProp('OutputType') == 'DST': try: from DSTWriters.__dev__.streamconf import OutputStreamConf from DSTWriters.__dev__.Configuration import SelDSTWriter except ImportError: from DSTWriters.streamconf import OutputStreamConf from DSTWriters.Configuration import SelDSTWriter streamConf = OutputStreamConf(streamType = InputCopyStream, fileExtension = '.dst', extraItems = [config.getProp('SwimmingPrefix') + '/Reports#1'] +\ list(set([l + '/P2TPRelations#1' for l in config.getProp('OffCands').values()]))) SelDSTWriterElements = {'default': []} SelDSTWriterConf = {'default': streamConf} dstWriter = SelDSTWriter('FullDST', StreamConf=SelDSTWriterConf, MicroDSTElements=SelDSTWriterElements, WriteFSR=config.getProp('WriteFSR'), OutputFileSuffix=prefix, SelectionSequences=[selectionSeq]) DaVinci().appendToMainSequence([dstWriter.sequence()])
dstStreams = [ "BhadronCompleteEvent", "CharmCompleteEvent", "CharmToBeSwum", "Dimuon", "EW", "Semileptonic", "Calibration", "MiniBias", "Radiative" ] stripTESPrefix = 'Strip' from Configurables import ProcStatusCheck from PhysConf.Filters import LoKi_Filters flts = LoKi_Filters(VOID_Code = "( TrSource(TrSOURCE('/Event/Rec/Track/Best', TrLONG))"\ " >> ( sum( TrPT,TrP < 1 * TeV ) > 1 * TeV ) )" , VOID_Preambulo = ["from LoKiTracks.decorators import *" , "from LoKiCore.functions import * ", "from GaudiKernel.SystemOfUnits import *"]) filterBadEvents = GaudiSequencer("BadEventFilter", ModeOR = True, Members = [ flts.sequencer("GECFilter"), ProcStatusCheck() ] ) streamFilter = { 'default' : filterBadEvents, 'MiniBias' : ProcStatusCheck() } sc = StrippingConf( Streams = streams, MaxCandidates = 2000, AcceptBadEvents = False, BadEventSelection = streamFilter, TESPrefix = stripTESPrefix, ActiveMDSTStream = True, Verbose = True, DSTStreams = dstStreams, MicroDSTStreams = mdstStreams ) #
"EW", "Semileptonic", "Calibration", "MiniBias", "Radiative" ] stripTESPrefix = 'Strip' from Configurables import ProcStatusCheck from PhysConf.Filters import LoKi_Filters flts = LoKi_Filters(VOID_Code = "( TrSource(TrSOURCE('/Event/Rec/Track/Best', TrLONG))"\ " >> ( sum( TrPT,TrP < 1 * TeV ) > 1 * TeV ) )" , VOID_Preambulo = ["from LoKiTracks.decorators import *" , "from LoKiCore.functions import * ", "from GaudiKernel.SystemOfUnits import *"]) filterBadEvents = GaudiSequencer("BadEventFilter", ModeOR = True, Members = [ flts.sequencer("GECFilter"), ProcStatusCheck() ] ) streamFilter = { 'default' : filterBadEvents, 'MiniBias' : ProcStatusCheck() } sc = StrippingConf( Streams = streams, MaxCandidates = 2000, AcceptBadEvents = False, BadEventSelection = ProcStatusCheck(), TESPrefix = stripTESPrefix, ActiveMDSTStream = True, Verbose = True, DSTStreams = dstStreams, MicroDSTStreams = mdstStreams ) from Configurables import ApplicationMgr, AuditorSvc, SequencerTimerTool
] stripTESPrefix = 'Strip' from Configurables import ProcStatusCheck from PhysConf.Filters import LoKi_Filters flts = LoKi_Filters(VOID_Code = "( TrSource(TrSOURCE('/Event/Rec/Track/Best', TrLONG))"\ " >> ( sum( TrPT,TrP < 1 * TeV ) > 1 * TeV ) )" , VOID_Preambulo = ["from LoKiTracks.decorators import *" , "from LoKiCore.functions import * ", "from GaudiKernel.SystemOfUnits import *"]) filterBadEvents = GaudiSequencer( "BadEventFilter", ModeOR=True, Members=[flts.sequencer("GECFilter"), ProcStatusCheck()]) streamFilter = {'default': filterBadEvents, 'MiniBias': ProcStatusCheck()} sc = StrippingConf(Streams=streams, MaxCandidates=2000, AcceptBadEvents=False, BadEventSelection=streamFilter, TESPrefix=stripTESPrefix, ActiveMDSTStream=True, Verbose=True, DSTStreams=dstStreams, MicroDSTStreams=mdstStreams) # # Configure the dst writers for the output #