ATLAS Offline Software
TriggerMenuDB2JSONConverter.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 
4 import sys, os
5 from optparse import OptionParser, OptionGroup
6 
7 class Silence():
8  def __init__(self, verbose):
9  self.verbose = verbose
10  def __enter__(self):
11  if not self.verbose:
12  self.so = sys.stdout
13  sys.stdout = open(os.devnull, 'w')
14  def __exit__(self, type, value, traceback):
15  if not self.verbose:
16  sys.stdout = self.so
17 
18 def main():
19 
20 
21  parser = OptionParser(usage="usage: %prog [options] smk")
22 
23  parser.add_option("-v", "--verbose",
24  action = "store_true",
25  dest = "verbose",
26  default = False,
27  help="verbose output [default: %default]")
28 
29  actions = OptionGroup(parser, "actions")
30 
31  actions.add_option( "",
32  "--l1",
33  dest = "l1psk",
34  metavar = "PSK",
35  default = 0,
36  help = "Level 1 prescale key PSK for L1 prescale set to convert" )
37 
38  actions.add_option( "",
39  "--hlt",
40  type="int",
41  dest = "hltpsk",
42  metavar="PSK",
43  default = 0,
44  help = "HLT prescale key PSK for HLT prescale set to convert" )
45 
46  actions.add_option( "",
47  "--showpsk",
48  dest = "showpsk",
49  action = "store_true",
50  default = False,
51  help = "only prints prescale keys attached to SMK [default: %default]" )
52 
53  parser.add_option_group(actions)
54 
55  parser.add_option( "",
56  "--db",
57  dest = "db",
58  default = "TRIGGERDB",
59  help = "database alias TRIGGERDB|TRIGGERDBREPR|TRIGGERDBMC [default: %default]" )
60 
61 
62  (options, args) = parser.parse_args()
63 
64  if len(args) != 1:
65  parser.error("Please specify the SMK")
66 
67  try:
68  smk = int(args[0])
69  except ValueError:
70  parser.error("SMK must be an integer")
71 
72 
73  if not (options.l1psk or options.hltpsk or options.showpsk):
74  parser.print_help()
75  parser.error("Please specify one of the actions")
76 
77  if options.showpsk:
78  with Silence(options.verbose):
79  from TrigConfigSvc.TrigConfigSvcUtils import getHLTPrescalesFromSMK
80  hltpsk = getHLTPrescalesFromSMK(options.db,smk)
81  print("Trigger keys connected to SM %i are %r" % (smk, [int(k[0]) for k in hltpsk]))
82 
83 
84  if options.hltpsk:
85  with Silence(options.verbose): # suppress all the output from loading the athena modules
86  from TrigConfigSvc.TrigConfigSvcUtils import queryHLTPrescaleTableRun2
87  res = queryHLTPrescaleTableRun2(options.db,options.hltpsk,smk)
88 
89  from collections import defaultdict, OrderedDict
90  d = defaultdict(lambda : list())
91 
92  for e in res:
93  d[(int(e[1]),e[0])] += [ (e[2],e[4]) ]
94 
95  # building json structure
96  prescaleSet = []
97  for (chainID, chainName),prescales in sorted(d.items()):
98  entry = OrderedDict()
99  entry['chainId'] = chainID
100  entry['chainName'] =chainName
101  entry.update(prescales)
102  prescaleSet.append( entry )
103 
104  # saving to file
105  import json
106  filename = "HLTPrescales_smk%i_psk%i.json" % (smk, options.hltpsk)
107  FH = open(filename, "w")
108  json.dump(prescaleSet, FH, indent=4, separators=(',', ': '))
109  FH.close()
110  print("Wrote file %s" % filename)
111 
112  if options.l1psk:
113  with Silence(options.verbose): # suppress all the output from loading the athena modules
114  from TrigConfigSvc.TrigConfigSvcUtils import queryHLTPrescaleTableRun2
115  res = queryHLTPrescaleTableRun2(options.db,options.hltpsk,smk)
116 
117  from collections import defaultdict, OrderedDict
118  d = defaultdict(lambda : list())
119 
120  for e in res:
121  d[(int(e[1]),e[0])] += [ (e[2],e[4]) ]
122 
123  # building json structure
124  prescaleSet = []
125  for (chainID, chainName),prescales in sorted(d.items()):
126  entry = OrderedDict()
127  entry['chainId'] = chainID
128  entry['chainName'] =chainName
129  entry.update(prescales)
130  prescaleSet.append( entry )
131 
132  # saving to file
133  import json
134  filename = "HLTPrescales_smk%i_psk%i.json" % (smk, options.hltpsk)
135  FH = open(filename, "w")
136  json.dump(prescaleSet, FH, indent=4, separators=(',', ': '))
137  FH.close()
138  print("Wrote file %s" % filename)
139 
140 
141 
142 
143 if __name__=="__main__":
144  sys.exit(main())
145 
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
TriggerMenuDB2JSONConverter.Silence.__init__
def __init__(self, verbose)
Definition: TriggerMenuDB2JSONConverter.py:8
python.TrigConfigSvcUtils.getHLTPrescalesFromSMK
def getHLTPrescalesFromSMK(connection, smk)
Definition: TrigConfigSvcUtils.py:922
TriggerMenuDB2JSONConverter.main
def main()
Definition: TriggerMenuDB2JSONConverter.py:18
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
TriggerMenuDB2JSONConverter.Silence.verbose
verbose
Definition: TriggerMenuDB2JSONConverter.py:9
DerivationFramework::TriggerMatchingUtils::sorted
std::vector< typename T::value_type > sorted(T begin, T end)
Helper function to create a sorted vector from an unsorted one.
TriggerMenuDB2JSONConverter.Silence.__exit__
def __exit__(self, type, value, traceback)
Definition: TriggerMenuDB2JSONConverter.py:14
python.TrigConfigSvcUtils.queryHLTPrescaleTableRun2
def queryHLTPrescaleTableRun2(connection, psk, smk)
Definition: TrigConfigSvcUtils.py:882
Trk::open
@ open
Definition: BinningType.h:40
TriggerMenuDB2JSONConverter.Silence.so
so
Definition: TriggerMenuDB2JSONConverter.py:12
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
TriggerMenuDB2JSONConverter.Silence.__enter__
def __enter__(self)
Definition: TriggerMenuDB2JSONConverter.py:10
TriggerMenuDB2JSONConverter.Silence
Definition: TriggerMenuDB2JSONConverter.py:7