From aa5e5317ca1b4c4dddcc4b04f1540e4d6ed367f6 Mon Sep 17 00:00:00 2001 From: scott snyder Date: Sat, 14 Dec 2019 23:26:24 +0100 Subject: [PATCH 1/2] TrigOutputHandling: Basic python3 fixes - Relative import fixes --- .../TrigOutputHandling/python/TrigOutputHandlingConfig.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Trigger/TrigSteer/TrigOutputHandling/python/TrigOutputHandlingConfig.py b/Trigger/TrigSteer/TrigOutputHandling/python/TrigOutputHandlingConfig.py index 95efe0c0d09..27068d73e22 100644 --- a/Trigger/TrigSteer/TrigOutputHandling/python/TrigOutputHandlingConfig.py +++ b/Trigger/TrigSteer/TrigOutputHandling/python/TrigOutputHandlingConfig.py @@ -64,7 +64,7 @@ def TriggerEDMSerialiserToolCfg(name="TriggerEDMSerialiserTool"): self.addCollectionListToResults(typeNameAuxList,moduleIds=[getFullHLTResultID()]) # Add the helper methods to the TriggerEDMSerialiserTool python class - from TrigOutputHandlingConf import TriggerEDMSerialiserTool + from .TrigOutputHandlingConf import TriggerEDMSerialiserTool TriggerEDMSerialiserTool.addCollection = addCollection TriggerEDMSerialiserTool.addCollectionToMainResult = addCollectionToMainResult TriggerEDMSerialiserTool.addCollectionListToResults = addCollectionListToResults @@ -114,7 +114,7 @@ def TriggerEDMSerialiserToolCfg(name="TriggerEDMSerialiserTool"): return serialiser def StreamTagMakerToolCfg(name="StreamTagMakerTool"): - from TrigOutputHandlingConf import StreamTagMakerTool + from .TrigOutputHandlingConf import StreamTagMakerTool stmaker = StreamTagMakerTool(name) # Extra configuration may come here @@ -123,7 +123,7 @@ def StreamTagMakerToolCfg(name="StreamTagMakerTool"): def TriggerBitsMakerToolCfg(name="TriggerBitsMakerTool"): - from TrigOutputHandlingConf import TriggerBitsMakerTool + from .TrigOutputHandlingConf import TriggerBitsMakerTool from TriggerJobOpts.TriggerFlags import TriggerFlags bitsmaker = TriggerBitsMakerTool(name) -- GitLab From 22ffa66758244430924a625766b7016f03fba500 Mon Sep 17 00:00:00 2001 From: scott snyder Date: Sat, 14 Dec 2019 23:26:44 +0100 Subject: [PATCH 2/2] TrigConfStorage: Basic python3 fixes - print function --- .../python/AtlCoolTriggerTool.py | 27 +++++------ .../TrigConfStorage/python/ChainTagMapTool.py | 25 +++++----- .../TrigConfStorage/python/CompareMenuXML.py | 46 ++++++++++--------- .../python/HLTRatesCoolReader.py | 12 +++-- .../TrigConfStorage/python/TriggerCoolUtil.py | 41 +++++++++-------- 5 files changed, 81 insertions(+), 70 deletions(-) diff --git a/Trigger/TrigConfiguration/TrigConfStorage/python/AtlCoolTriggerTool.py b/Trigger/TrigConfiguration/TrigConfStorage/python/AtlCoolTriggerTool.py index e95c45b153b..70872d5ff10 100644 --- a/Trigger/TrigConfiguration/TrigConfStorage/python/AtlCoolTriggerTool.py +++ b/Trigger/TrigConfiguration/TrigConfStorage/python/AtlCoolTriggerTool.py @@ -1,5 +1,6 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +from __future__ import print_function try: Set = set @@ -22,19 +23,19 @@ class AtlCoolTriggerTool: def check_options(self): opt = self.opt if opt.l1 and not (opt.menu or opt.diff or opt.xml): - print "Option l1 requires one of the options 'menu', 'xml', or 'diff' to be set" + print ("Option l1 requires one of the options 'menu', 'xml', or 'diff' to be set") return False if opt.l2 and not (opt.menu or opt.diff or opt.xml): - print "Option l2 requires one of the options 'menu', 'xml', or 'diff' to be set" + print ("Option l2 requires one of the options 'menu', 'xml', or 'diff' to be set") return False if opt.ef and not (opt.menu or opt.diff or opt.xml): - print "Option ef requires one of the options 'menu', 'xml', or 'diff' to be set" + print ("Option ef requires one of the options 'menu', 'xml', or 'diff' to be set") return False if opt.processing and opt.processing!='hlt': - print "Option p|processing must be set to 'hlt'" + print ("Option p|processing must be set to 'hlt'") return False if (opt.menu or opt.diff or opt.xml) and not (opt.l1 or opt.l2 or opt.ef): @@ -74,7 +75,7 @@ class AtlCoolTriggerTool: for r in runs: keys = runKeys[r] - print 'c'.join(["%su%s" % (x[1],x[0]) for x in keys["HLTPSK2"]]) + print ('c'.join(["%su%s" % (x[1],x[0]) for x in keys["HLTPSK2"]])) def printConfigKeys(self, runKeys): #t = string.Template('run $RUN ($STARTTIME) release %10') @@ -116,16 +117,16 @@ class AtlCoolTriggerTool: else: lvl1psk += "%4i (%i-%i) " % (x[0],x[1],x[2]) if not lvl1psk: lvl1psk = "unknown" - print "run %6i %srelease %9s smk %4s hltps %s lvl1ps %s" % (r, timestr, rel, smk, hltpsknew, lvl1psk), + print ("run %6i %srelease %9s smk %4s hltps %s lvl1ps %s" % (r, timestr, rel, smk, hltpsknew, lvl1psk),) if r > 127453 and "HLTPSK2" in keys and "HLTPSK" in keys and keys["HLTPSK"] != keys["HLTPSK2"][0][0]: msg = "WARNING: Menu folder shows different HLT prescale for SOR: %i" % keys["HLTPSK"] - print msg + print (msg) #if r in exceptions: # print msg #else: # raise RuntimeError, msg - else: print + else: print() def printMenu(self, run): if not self.opt.menu: return @@ -165,19 +166,19 @@ class AtlCoolTriggerTool: self.opt.isTwoRuns = len(runs)==2 if self.opt.menu and not self.opt.isSingleRun: - print "Error: option 'menu' works only for single run" + print ("Error: option 'menu' works only for single run") sys.exit(0) if self.opt.xml and not self.opt.isSingleRun: - print "Error: option 'xml' works only for single run" + print ("Error: option 'xml' works only for single run") sys.exit(0) if self.opt.streams and not self.opt.isSingleRun: - print "Error: option 'streams' works only for single run" + print ("Error: option 'streams' works only for single run") sys.exit(0) if self.opt.diff and not self.opt.isTwoRuns: - print "Error: option 'diff' works only when two runs given" + print ("Error: option 'diff' works only when two runs given") sys.exit(0) if self.opt.isSingleRun: diff --git a/Trigger/TrigConfiguration/TrigConfStorage/python/ChainTagMapTool.py b/Trigger/TrigConfiguration/TrigConfStorage/python/ChainTagMapTool.py index 54d1110be42..49a4f704f36 100644 --- a/Trigger/TrigConfiguration/TrigConfStorage/python/ChainTagMapTool.py +++ b/Trigger/TrigConfiguration/TrigConfStorage/python/ChainTagMapTool.py @@ -1,4 +1,6 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + +from __future__ import print_function from xml.dom import minidom @@ -87,11 +89,12 @@ class ChainTagMapTool: m = re.match(".*?([^/.]+)\.db",dbconn) if dbconn=="COMP": connection = 'COOLONL_TRIGGER/COMP200' elif dbconn=="OFLP": connection = 'COOLONL_TRIGGER/OFLP200' - else: raise RuntimeError, "Can't connect to COOL db %s" % dbconn + else: raise RuntimeError ("Can't connect to COOL db %s" % dbconn) try: openConn = indirectOpen(connection,readOnly=True,oracle=True,debug=(verbosity>0)) - except Exception, e: - print e + except Exception: + import traceback + traceback.print_exc() sys.exit(-1) return openConn @@ -161,11 +164,11 @@ class ChainTagMapTool: if self.verbose>0: - print "Analyzing runs %i to %i" % (rr[0],rr[1]) + print ("Analyzing runs %i to %i" % (rr[0],rr[1])) # get the maps from COOL if self.verbose>0: - print "Reading from COOL DB" + print ("Reading from COOL DB") dbconn = ChainTagMapTool.GetConnection('COMP') if levels=='' or levels=='L1': l1maps = self.getL1MapsForRuns(dbconn,rr) @@ -174,7 +177,7 @@ class ChainTagMapTool: dbconn.closeDatabase() if self.verbose>0: - print "Analyzing runs" + print ("Analyzing runs") if levels=='L1': runs = l1maps.keys() runs.sort() @@ -187,9 +190,9 @@ class ChainTagMapTool: for run in runs: if self.verbose>1: if self.verbose>2: - print "Analyzing run %8i" % run + print ("Analyzing run %8i" % run) elif run%5000==0: - print "Analyzing run %8i" % run + print ("Analyzing run %8i" % run) l1map=None l2map=None @@ -229,8 +232,8 @@ class ChainTagMapTool: for name,counter in newmap.items(): samecounter = [(c,n,name) for n,c in oldmap.items() if (c==counter and n!=name)] if samecounter: - print "Need to close current map '%i-%i', because counter %i has changed trigger (%s -> %s)" % \ - ((self.currentMapping.firstrun,self.currentMapping.lastrun) + samecounter[0]) + print ("Need to close current map '%i-%i', because counter %i has changed trigger (%s -> %s)" % \ + ((self.currentMapping.firstrun,self.currentMapping.lastrun) + samecounter[0])) return False return True return True diff --git a/Trigger/TrigConfiguration/TrigConfStorage/python/CompareMenuXML.py b/Trigger/TrigConfiguration/TrigConfStorage/python/CompareMenuXML.py index 4bce7b001cf..e2ae211814c 100644 --- a/Trigger/TrigConfiguration/TrigConfStorage/python/CompareMenuXML.py +++ b/Trigger/TrigConfiguration/TrigConfStorage/python/CompareMenuXML.py @@ -1,8 +1,10 @@ #!/usr/bin/env python -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -import user,sys +from __future__ import print_function + +import sys from xml.dom import minidom from xml.sax import parse @@ -41,7 +43,7 @@ class CompareMenuXML(object): def write(self,line): - print line, + print (line, end='') self.textoutput += line + "
" @@ -74,11 +76,11 @@ class CompareMenuXML(object): equal = True if self.verboseLevel>0: if node1.compfield == 'single': - print >> self, "compare single %s with %s in context %s" % (node1.nodeName,node2.nodeName, node1.context) + print ("compare single %s with %s in context %s" % (node1.nodeName,node2.nodeName, node1.context), file=self) else: val1 = node1.attributes[node1.compfield].value val2 = node1.attributes[node2.compfield].value - print >> self, "compare %s (%s) with %s (%s) in context %s" % (node1.nodeName, val1, node2.nodeName, val2, node1.context) + print ("compare %s (%s) with %s (%s) in context %s" % (node1.nodeName, val1, node2.nodeName, val2, node1.context), file=self) # first compare the node itself if node1.nodeType==minidom.Node.TEXT_NODE: # CDATA @@ -110,7 +112,7 @@ class CompareMenuXML(object): break if not compField: - print >>self, "Don't know how to compare a node of type %s in context %s (was looking for a rule about %s), will abort" % ( node.nodeName, node.context, lookfor ) + print ("Don't know how to compare a node of type %s in context %s (was looking for a rule about %s), will abort" % ( node.nodeName, node.context, lookfor ), file=self) sys.exit(0) return compField @@ -130,7 +132,7 @@ class CompareMenuXML(object): if val1val2: return 1 if reqUniq: - raise RuntimeError, "Two equal nodes %s found with %s = %s and %s = %s" % (node1.nodeName, node1.compfield, val1, node2.compfield, val2 ) + raise RuntimeError ("Two equal nodes %s found with %s = %s and %s = %s" % (node1.nodeName, node1.compfield, val1, node2.compfield, val2 )) else: return 0 @@ -150,17 +152,17 @@ class CompareMenuXML(object): parNode = parNode.parentNode if not eNode.nodeName in self.uniqID: - print >>self, "Don't know how to compare two items of type %s , will abort" % eNode.nodeName + print ("Don't know how to compare two items of type %s , will abort" % eNode.nodeName, file=self) sys.exit(0) if self.uniqID[eNode.nodeName] == 'single': - print >> self, "DIFF MISS: %s" % (eNode.nodeName), + print ("DIFF MISS: %s" % (eNode.nodeName), end='', file=self) else: - print >> self, "DIFF MISS: %s with %s %s" % (eNode.nodeName, self.uniqID[eNode.nodeName], eNode.attributes[self.uniqID[eNode.nodeName]].value), + print ("DIFF MISS: %s with %s %s" % (eNode.nodeName, self.uniqID[eNode.nodeName], eNode.attributes[self.uniqID[eNode.nodeName]].value), end='', file=self) if parNode != eNode: - print >> self, "[from %s %s]" % (parNode.nodeName, parNode.attributes[self.uniqID[parNode.nodeName]].value), - print >> self, "appears only in menu %i" % (eMenu) + print ("[from %s %s]" % (parNode.nodeName, parNode.attributes[self.uniqID[parNode.nodeName]].value), end='', file=self) + print ("appears only in menu %i" % (eMenu), file=self) return True return False @@ -173,17 +175,17 @@ class CompareMenuXML(object): if not equal: par1 = node1.parentNode par2 = node2.parentNode - print >> self, "DIFF DATA: %s with %s %s: different (%s != %s)" % (par1.nodeName, self.uniqID[par1.nodeName], par1.attributes[self.uniqID[par1.nodeName]].value, data1, data2) + print ("DIFF DATA: %s with %s %s: different (%s != %s)" % (par1.nodeName, self.uniqID[par1.nodeName], par1.attributes[self.uniqID[par1.nodeName]].value, data1, data2), file=self) return equal def compAttr(self, node1, node2): if node1.nodeName!=node2.nodeName: - raise RuntimeError, "Comparing attributes of two different element classes %s and %s" % (node1.nodeName, node2.nodeName) + raise RuntimeError ("Comparing attributes of two different element classes %s and %s" % (node1.nodeName, node2.nodeName)) if self.verboseLevel>2: - if node1.attributes: print "Attribute 1",node1.attributes.items() - if node2.attributes: print "Attribute 2",node2.attributes.items() + if node1.attributes: print ("Attribute 1",node1.attributes.items()) + if node2.attributes: print ("Attribute 2",node2.attributes.items()) nodeName = node1.nodeName equal = True allAttr = [] @@ -192,23 +194,23 @@ class CompareMenuXML(object): if node1.attributes: allAttr += [x for x in node1.attributes.keys() if not x in ignorelist] if node2.attributes: allAttr += [x for x in node2.attributes.keys() if not (x in allAttr or x in ignorelist)] if self.verboseLevel>1: - print >> self, "Attributes of %s:" % node1.nodeName, allAttr + print ("Attributes of %s:" % node1.nodeName, allAttr, file=self) for a in allAttr: if (node1.attributes==None) or (not a in node1.attributes.keys()): - print >> self, "DIFF ATTR: %s: attribute '%s' exists only in document file 2 (%s)" % (nodeName, str(a), node2.attributes[a].value) + print ("DIFF ATTR: %s: attribute '%s' exists only in document file 2 (%s)" % (nodeName, str(a), node2.attributes[a].value), file=self) equal=False continue if (node2.attributes==None) or (not a in node2.attributes.keys()): - print >> self, "DIFF ATTR: %s: attribute '%s' exists only in document file 1 (%s)" % (nodeName, str(a), node1.attributes[a].value) + print ("DIFF ATTR: %s: attribute '%s' exists only in document file 1 (%s)" % (nodeName, str(a), node1.attributes[a].value), file=self) equal=False continue if self.verboseLevel>2: - print "Attribute %s : %s vs. %s" % (a, node1.attributes[a].value, node2.attributes[a].value) + print ("Attribute %s : %s vs. %s" % (a, node1.attributes[a].value, node2.attributes[a].value)) if node1.attributes[a].value != node2.attributes[a].value: if node1.compfield == 'single': - print >> self, "DIFF ATTR: %s: different '%s' (%s != %s)" % (nodeName,str(a), node1.attributes[a].value, node2.attributes[a].value) + print ("DIFF ATTR: %s: different '%s' (%s != %s)" % (nodeName,str(a), node1.attributes[a].value, node2.attributes[a].value), file=self) else: - print >> self, "DIFF ATTR: %s %s: different '%s' (%s != %s)" % (nodeName, node1.attributes[node1.compfield].value, str(a), node1.attributes[a].value, node2.attributes[a].value) + print ("DIFF ATTR: %s %s: different '%s' (%s != %s)" % (nodeName, node1.attributes[node1.compfield].value, str(a), node1.attributes[a].value, node2.attributes[a].value), file=self) equal=False return equal diff --git a/Trigger/TrigConfiguration/TrigConfStorage/python/HLTRatesCoolReader.py b/Trigger/TrigConfiguration/TrigConfStorage/python/HLTRatesCoolReader.py index 5f257003088..7445c849077 100755 --- a/Trigger/TrigConfiguration/TrigConfStorage/python/HLTRatesCoolReader.py +++ b/Trigger/TrigConfiguration/TrigConfStorage/python/HLTRatesCoolReader.py @@ -1,6 +1,8 @@ #!/usr/bin/env python -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + +from __future__ import print_function from collections import namedtuple from struct import unpack_from, unpack @@ -27,7 +29,7 @@ def __getCounts(pos, buf): def __printCounts(buf): ndata = len(buf)/20 - print unpack(ndata*'IIIII', buf) + print (unpack(ndata*'IIIII', buf)) def getL2Counts(run, lb, chainCounter): @@ -63,7 +65,7 @@ def getL2Counts(run, lb, chainCounter): res += [ (run, lb, CountRec(chainCounter,0,0,0,0) )] else: if len(s)%20 != 0: - raise RuntimeError, "the length of the data vector %i is not a multiple of 20" % len(s) + raise RuntimeError ("the length of the data vector %i is not a multiple of 20" % len(s)) #__printCounts(s) if pos==None: @@ -78,6 +80,6 @@ def getL2Counts(run, lb, chainCounter): if __name__=="__main__": - print getL2Counts(166786, 300, 7)[0] + print (getL2Counts(166786, 300, 7)[0]) - print [ (run, lb,cr.Raw) for (run, lb,cr) in getL2Counts(166786, None, 7)] + print ([ (run, lb,cr.Raw) for (run, lb,cr) in getL2Counts(166786, None, 7)]) diff --git a/Trigger/TrigConfiguration/TrigConfStorage/python/TriggerCoolUtil.py b/Trigger/TrigConfiguration/TrigConfStorage/python/TriggerCoolUtil.py index 910bb73b4b4..10589d66e40 100644 --- a/Trigger/TrigConfiguration/TrigConfStorage/python/TriggerCoolUtil.py +++ b/Trigger/TrigConfiguration/TrigConfStorage/python/TriggerCoolUtil.py @@ -1,4 +1,6 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + +from __future__ import print_function import copy, sys @@ -25,7 +27,7 @@ class TriggerCoolUtil: if 'verbose' in args: verbose=args['verbose'] if verbose: - print "CompareL1XML([%s, %s], verbose=True)" % (xml1fn,xml2fn) + print ("CompareL1XML([%s, %s], verbose=True)" % (xml1fn,xml2fn)) comparer = CompareL1XML([xml1fn, xml2fn], verbose=verbose) comparer.diff() @@ -35,7 +37,7 @@ class TriggerCoolUtil: if 'verbose' in args: verbose=args['verbose'] if verbose: - print "CompareHLTXML([%s, %s], verbose=True)" % (xml1fn,xml2fn) + print ("CompareHLTXML([%s, %s], verbose=True)" % (xml1fn,xml2fn)) comparer = CompareHLTXML([xml1fn, xml2fn], verbose=verbose) comparer.diff() @@ -81,11 +83,12 @@ class TriggerCoolUtil: dbname=m.group(1).upper() connection = "sqlite://;schema=%s;dbname=%s;" % (dbconn,dbname) else: - raise RuntimeError, "Can't connect to COOL db %s" % dbconn + raise RuntimeError ("Can't connect to COOL db %s" % dbconn) try: openConn = indirectOpen(connection,readOnly=True,oracle=True,debug=(verbosity>0)) - except Exception, e: - print e + except Exception: + import traceback + traceback.print_exc() sys.exit(-1) return openConn @@ -177,7 +180,7 @@ class TriggerCoolUtil: split = list(Set([b[1] for b in l1] + [b[1] for b in hlt])) split.sort() c = [] - print "merging:", split + print ("merging:", split) for i,startlb in enumerate(split): if i0 printDisabled = verbosity>1 - print "LVL1 Menu:" + print ("LVL1 Menu:") f = db.getFolder( "/TRIGGER/LVL1/Menu" ) chansel=cool.ChannelSelection.all() objs = f.browseObjects( limmin,limmax,chansel) @@ -265,16 +268,16 @@ class TriggerCoolUtil: if x>0 or printDisabled: doPrint = True if not doPrint: continue if printPrescales: - print "%4i: %-*s PS " % (channel, longestName, itemName[channel]), itemPrescale[channel] + print ("%4i: %-*s PS " % (channel, longestName, itemName[channel]), itemPrescale[channel]) else: - print "%4i: %s" % (channel, itemName[channel]) + print ("%4i: %s" % (channel, itemName[channel])) @staticmethod def printHLTMenu(db, run, verbosity, printL2=True, printEF=True): limmin=run<<32 limmax=((run+1)<<32)-1 - print "HLT Menu:" + print ("HLT Menu:") f = db.getFolder( "/TRIGGER/HLT/Menu" ) chansel=cool.ChannelSelection.all() objs = f.browseObjects( limmin,limmax,chansel) @@ -312,18 +315,18 @@ class TriggerCoolUtil: counters.sort() for c in counters: name = chainNames[c] - print "%s %4i: %-*s" % (c[0], c[1], sizeName, name), + print ("%s %4i: %-*s" % (c[0], c[1], sizeName, name),) if verbosity>0: (version, prescale, passthr, stream, lower) = chainExtraInfo[(name,c[0])] - print "[V %1s, PS %*i, PT %*i, by %-*s , => %-*s ]" % \ - (version, sizePS, prescale, sizePT, passthr, sizeLow, lower, sizeStr, stream), - print + print ("[V %1s, PS %*i, PT %*i, by %-*s , => %-*s ]" % \ + (version, sizePS, prescale, sizePT, passthr, sizeLow, lower, sizeStr, stream), end='') + print() @staticmethod def printStreams(db, run, verbosity): limmin=run<<32 limmax=((run+1)<<32)-1 - print "Used Streams:" + print ("Used Streams:") f = db.getFolder( "/TRIGGER/HLT/Menu" ) chansel=cool.ChannelSelection.all() objs = f.browseObjects( limmin,limmax,chansel) @@ -336,7 +339,7 @@ class TriggerCoolUtil: streamname = streamprescale.split(',')[0] streams.add(streamname) for s in sorted(list(streams)): - print s + print (s) @staticmethod def writeXMLFiles(keys, verbosity): @@ -344,11 +347,11 @@ class TriggerCoolUtil: cmd = "TrigConf2XMLApp --trigdb TRIGGERDB" cmd += " --outputfile %s" % base cmd += " --configkey %i --prescalekeyhlt %i --prescalekeylvl1 %i" % (keys['SMK'],keys['HLTPSK'],keys['LVL1PSK'][0][0]) - if verbosity>0: print cmd + if verbosity>0: print (cmd) FNULL = open('/dev/null', 'w') returncode = subprocess.call(cmd.split(),stdout=FNULL) if returncode==0: - print "Wrote files L1Menu_%s.xml and HLTMenu_%s.xml" % (base,base) + print ("Wrote files L1Menu_%s.xml and HLTMenu_%s.xml" % (base,base)) return ( "L1Menu_%s.xml" % base, "HLTMenu_%s.xml" % base ) else: return ( None, None ) -- GitLab