File indexing completed on 2023-03-17 11:03:35
0001
0002
0003 from __future__ import print_function
0004 from FWCore.PythonUtilities.XML2Python import xml2obj
0005 from FWCore.PythonUtilities.LumiList import LumiList
0006 from pprint import pprint
0007
0008 import ast
0009 import optparse
0010 import sys
0011
0012
0013 if __name__ == '__main__':
0014
0015 parser = optparse.OptionParser ("Usage: %prog [--options] job1.fjr [job2.fjr...]")
0016 parser.add_option ('--output', dest='output', type='string',
0017 help='Save output to file OUTPUT')
0018 (options, args) = parser.parse_args()
0019 if not args:
0020 raise RuntimeError("Must provide at least one input file")
0021
0022 runsLumisDict = {}
0023 for fjr in args:
0024 try:
0025 obj = xml2obj (filename=fjr)
0026 except:
0027 print("'%s' is not an framework job report. Skipping." % fjr)
0028 continue
0029 for inputFile in obj.InputFile:
0030 try:
0031 runObjects = inputFile.Runs.Run
0032 for run in runObjects:
0033 runNumber = int (run.ID)
0034 runList = runsLumisDict.setdefault (runNumber, [])
0035 for lumiPiece in run.LumiSection:
0036 lumi = int (lumiPiece.ID)
0037 runList.append (lumi)
0038 except:
0039 try:
0040 if isinstance(inputFile.Runs, str):
0041 runObjects = [inputFile.Runs]
0042 else:
0043 runObjects = inputFile.Runs
0044
0045 for runObject in runObjects:
0046 try:
0047 runs = ast.literal_eval(runObject)
0048 for (run, lumis) in runs.items():
0049 runList = runsLumisDict.setdefault (int(run), [])
0050 runList.extend(lumis)
0051 except ValueError:
0052 pass
0053 except:
0054 print("Run missing in '%s'. Skipping." % fjr)
0055 continue
0056
0057 jsonList = LumiList (runsAndLumis = runsLumisDict)
0058 if options.output:
0059 jsonList.writeJSON (options.output)
0060 else:
0061 print(jsonList)
0062