1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#! /usr/bin/env python3
from FWCore.PythonUtilities.LumiList import LumiList
from argparse import ArgumentParser
if __name__ == '__main__':
parser = ArgumentParser(description='Runs over input EDM files and prints out a list of contained lumi sections')
parser.add_argument('--intLumi', dest='intLumi', action='store_true',
help='print out total recorded and delivered integrated luminosity')
parser.add_argument('--output', dest='output', type=str,
help='save lumi sections output to file OUTPUT')
parser.add_argument("edm", metavar="edm.root", type=str, nargs='+')
options = parser.parse_args()
# put this here after parsing the arguments since ROOT likes to
# grab command line arguments even when it shouldn't.
from DataFormats.FWLite import Lumis, Handle
# do we want to get the luminosity summary?
if options.intLumi:
handle = Handle ('LumiSummary')
label = ('lumiProducer')
else:
handle, lable = None, None
runsLumisDict = {}
lumis = Lumis (options.edm)
delivered = recorded = 0
for lum in lumis:
runList = runsLumisDict.setdefault (lum.aux().run(), [])
runList.append( lum.aux().id().luminosityBlock() )
# get the summary and keep track of the totals
if options.intLumi:
lum.getByLabel (label, handle)
summary = handle.product()
delivered += summary.avgInsDelLumi()
recorded += summary.avgInsRecLumi()
# print out lumi sections in JSON format
jsonList = LumiList (runsAndLumis = runsLumisDict)
if options.output:
jsonList.writeJSON (options.output)
else:
print(jsonList)
# print out integrated luminosity numbers if requested
if options.intLumi:
print("\nNote: These numbers should be considered approximate. For official numbers, please use lumiCalc.py")
print("delivered %.1f mb, recorded %.1f mb" % \
(delivered, recorded))
|