babymaker  e95a6a9342d4604277fe7cc6149b6b5b24447d89
divvy_json.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 import os, sys
4 import json
5 import glob
6 import string
7 import argparse
8 
9 parser = argparse.ArgumentParser()
10 parser.add_argument("-j","--jsonpath")
11 args = parser.parse_args()
12 
13 pb_per_json = 100.
14 period_name = 'Run2015D'
15 
16 jdata = {}
17 with open(args.jsonpath) as jfile:
18  jdata = json.load(jfile)
19 
20 lumifile = args.jsonpath.replace('golden_Cert','lumi').replace('.json','.txt')
21 if (not os.path.exists('lumi.csv')):
22  print "First obtain luminosity for each run with following command (requires brilcalc installation):"
23  print "brilcalc lumi --normtag /afs/cern.ch/user/c/cmsbril/public/normtag_json/OfflineNormtagV1.json -i "+args.jsonpath+" -u /pb -o "+lumifile
24 
25 lumidict = {}
26 with open(lumifile) as lfile:
27  for line in lfile:
28  if line[0]=='#': continue
29  lumidict[line.split(':')[0]] = line.split(',')[-1]
30 
31 ijson = 0
32 lumi = 0
33 newjson = {}
34 runs = sorted(jdata.keys())
35 for run in runs:
36  newjson[run] = jdata[run]
37  lumi = lumi + float(lumidict[run])
38  if (lumi > pb_per_json) or run==runs[-1]:
39  subjson = args.jsonpath.split('golden_')[0]+'subgolden_'+period_name+str(ijson)+'.json'
40  json.dump(newjson, open(subjson,'w'), sort_keys=True)
41  with open(subjson) as fsubj:
42  data = fsubj.readlines()
43  with open(subjson+'.tmp','w') as tmp_fsubj:
44  for line in data:
45  tmp_fsubj.write(line.replace(', "',',\n "'))
46  tmp_fsubj.write('\n')
47  os.rename(subjson+'.tmp', subjson)
48  print "Wrote json %s with lumi %.2f" % (subjson, lumi)
49  ijson = ijson + 1
50  lumi=0
51  newjson = {}