ATLAS Offline Software
Loading...
Searching...
No Matches
python.MenuXML2JSONConverter.XML2JsonConverter Class Reference
Inheritance diagram for python.MenuXML2JSONConverter.XML2JsonConverter:
Collaboration diagram for python.MenuXML2JSONConverter.XML2JsonConverter:

Public Types

typedef HLT::TypeInformation::for_each_type_c< typenameEDMLIST::map, my_functor, my_result<>, my_arg< HLT::TypeInformation::get_cont, CONTAINER > >::type result

Public Member Functions

 __init__ (self, tabsize=4, **args)
 convertFile (self, inputfilename, jsonfilename=None)
 parseXMLFile (self, filename)
 loadRules (self, docname)
 renameKey (self, key)
 createJsonStruct (self, node)
 writeJsonFile (self, filename=None)
 checkJsonConformity (self, filename)

Public Attributes

 tabsize = tabsize
 xmlfilename = None
 doc = ET.parse(filename)
 root = self.doc.getroot()
dict rules

Private Attributes

 __doc = None
 __root = None
dict __rules = {}

Detailed Description

Definition at line 5 of file MenuXML2JSONConverter.py.

Member Typedef Documentation

◆ result

Definition at line 90 of file EDM_MasterSearch.h.

Constructor & Destructor Documentation

◆ __init__()

python.MenuXML2JSONConverter.XML2JsonConverter.__init__ ( self,
tabsize = 4,
** args )

Definition at line 6 of file MenuXML2JSONConverter.py.

6 def __init__(self, tabsize = 4, **args):
7 self.tabsize = tabsize
8
9 self.__doc = None
10 self.__root = None
11 self.__rules = {}
12 self.xmlfilename = None
13
14

Member Function Documentation

◆ checkJsonConformity()

python.MenuXML2JSONConverter.XML2JsonConverter.checkJsonConformity ( self,
filename )

Definition at line 201 of file MenuXML2JSONConverter.py.

201 def checkJsonConformity(self, filename):
202 print("Checking json conformity", end=' ')
203 import json
204 FH = open(filename, "rb")
205 try:
206 json.load(FH)
207 print(" ... OK")
208 except ValueError as e:
209 print(" ... FAILED")
210 print(e)
211 FH.close()
212
213
214
void print(char *figname, TCanvas *c1)

◆ convertFile()

python.MenuXML2JSONConverter.XML2JsonConverter.convertFile ( self,
inputfilename,
jsonfilename = None )

Definition at line 15 of file MenuXML2JSONConverter.py.

15 def convertFile(self, inputfilename, jsonfilename = None ):
16 if not inputfilename.endswith(".xml"):
17 print("judging by the suffix, %s is not an xml file" % inputfilename)
18 return 1
19 self.parseXMLFile( inputfilename )
20 self.writeJsonFile( jsonfilename )
21

◆ createJsonStruct()

python.MenuXML2JSONConverter.XML2JsonConverter.createJsonStruct ( self,
node )

Definition at line 145 of file MenuXML2JSONConverter.py.

145 def createJsonStruct(self, node):
146 if node.tag in self.rules['asArray']:
147 return [ {element.tag : self.createJsonStruct(element)} for element in node ]
148
149 else:
150 d = {}
151 # writing attributs of the element to json structure in alphabetical order
152 # turn values into int according to the asInt rule
153 for attr in sorted(node.attrib.keys()):
154 if (node.tag, attr) in self.rules['ignoreAttrib']: # attributes to ignore
155 continue
156 if node.tag in self.rules['asInt'] and attr in self.rules['asInt'][node.tag]:
157 d[self.renameKey(attr)] = int(node.attrib[attr])
158 else:
159 d[self.renameKey(attr)] = node.attrib[attr]
160 # looping over children
161 for element in node:
162 if element.tag in self.rules['ignoreElement']:
163 continue
164 if (node.tag, element.tag) in self.rules['asMultiArray']:
165 # list of multiple identical elements (e.g. CHAINs)
166 key = self.renameKey(element.tag)
167 if key not in d: d[key] = list()
168 d[key] += [ self.createJsonStruct(element) ]
169 else:
170 # single element (e.g. CHAIN_LIST)
171 if element.tag in d:
172 raise RuntimeError("element %s already attached to node %s and not declared as MultiArray" % (element.tag, node.tag))
173
174 if element.tag in self.rules['promote']:
175 obj = self.createJsonStruct(element)
176 promoted = self.renameKey( self.rules['promote'][element.tag]) #e.g. Chains
177 d[promoted] = obj[promoted]
178 else:
179 d[self.renameKey(element.tag)] = self.createJsonStruct(element)
180
181 return d
182
183
184

◆ loadRules()

python.MenuXML2JSONConverter.XML2JsonConverter.loadRules ( self,
docname )

Definition at line 30 of file MenuXML2JSONConverter.py.

30 def loadRules(self,docname):
31 self.rules = { 'asInt' : {},
32 'asArray' : [],
33 'asMultiArray' : [],
34 'ignoreElement' : [],
35 'ignoreAttrib' : [],
36 'promote' : {},
37 'rename' : {} # renaming will be applied last
38 }
39
40 if docname == "LVL1Config":
41 self.rules['asInt'] = {
42 "TriggerItem" : ["partition", "complex_deadtime", "ctpid"],
43 "TriggerThreshold" : ["bitnum", "mapping", "version", "active", "id"],
44 "TriggerThresholdValue" : [ "thresholdval", "etamin", "etamax", "phimin", "phimax",
45 "em_isolation", "window", "priority", "had_veto", "had_isolation"],
46 "Signal" : [ "range_end", "range_begin" ],
47 "Random" : ["cut0", "cut1", "cut2", "cut3"],
48 "PrescaleSet" : ["menuPartition"],
49 "Prescale" : ["ctpid"],
50 "TriggerCondition" : ["multi"],
51 "METSignificance" : ["xeMax", "teSqrtMax", "xsSigmaOffset", "teSqrtMin", "xsSigmaScale", "xeMin"],
52 "MinimumTOBPt" : [ "priority", "etamin", "ptmin", "etamax", "window" ],
53 "Parametrization" : [ "slope", "isobit", "priority", "etamin", "offset", "mincut", "etamax", "upperlimit"],
54 "CaloInfo" : [ "global_em_scale", "global_jet_scale"],
55 "BunchGroupSet" : [ "menuPartition" ],
56 "BunchGroup" : [ "internalNumber" ],
57 "MuctpiInfo" : [ "high_pt", "max_cand", "low_pt" ],
58 "PrescaledClock" : [ "clock1", "clock2" ],
59 "LVL1Config" : [ "l1Version", "ctpVersion" ]
60 }
61 self.rules['asArray'] = [ 'AND', 'OR' ]
62 self.rules['asMultiArray'] = [ ('PrescaleSet', 'Prescale'),
63 ('TriggerThreshold', 'TriggerThresholdValue'),
64 ('TriggerCounterList', 'TriggerCounter'),
65 ('Isolation', 'Parametrization'),
66 ('TriggerMenu', 'TriggerItem'),
67 ('CaloInfo', 'MinimumTOBPt'),
68 ('CaloInfo', 'Isolation'),
69 ('BunchGroupSet', 'BunchGroup'),
70 ('OR', 'TriggerCondition'),
71 ('TriggerThresholdList', 'TriggerThreshold'),
72 ('AND', 'TriggerCondition'),
73 ('AND', 'OR'),
74 ('AND', 'InternalTrigger')
75 ]
76 self.rules['ignoreElement'] = []
77 self.rules['promote'] = {"TriggerThresholdList" : "TriggerThreshold"}
78 self.rules['rename'] = { "TriggerItem" : "items", "TriggerMenu" : "menu", "l1Version" : "version", "ctpid" : "ctpId",
79 "complex_deadtime" : "complexDeadtime", "trigger_type" : "triggerType", "TriggerThreshold" : "thresholds",
80 "triggerthreshold" : "triggerThreshold", "TriggerCondition" : "triggerCondition", "InternalTrigger" : "internalTrigger",
81 "Cable" : "cable", "Signal" : "signal", "range_begin" : "rangeBegin", "range_end" : "rangeEnd",
82 "TriggerThresholdValue" : "thresholdValues" }
83
84 elif docname == "HLT_MENU":
85
86 self.rules['asInt'] = {
87 "CHAIN": ["EBstep", "chain_counter"],
88 "SIGNATURE": ["signature_counter"]
89 }
90 self.rules['asMultiArray'] = [ ('SEQUENCE_LIST', 'SEQUENCE'),
91 ('GROUP_LIST', 'GROUP'),
92 ('SIGNATURE_LIST', 'SIGNATURE'),
93 ('CHAIN_LIST', 'CHAIN'),
94 ('STREAMTAG_LIST', 'STREAMTAG'),
95 ('SIGNATURE', 'TRIGGERELEMENT')
96 ]
97 self.rules['ignoreElement'] = [ "SEQUENCE_LIST", "SIGNATURE_LIST", "TRIGGERTYPE_LIST" ]
98 self.rules['ignoreAttrib'] = [ ("CHAIN", "level"),
99 ("CHAIN", "EBstep"),
100 ("CHAIN", "pass_through"),
101 ("CHAIN", "prescale"),
102 ("CHAIN", "rerun_prescale"),
103 ("HLT_MENU", "prescale_set_name")]
104 self.rules['promote'] = {"GROUP_LIST" : "GROUP", "STREAMTAG_LIST" : "STREAMTAG", "CHAIN_LIST" : "CHAIN"}
105 self.rules['rename'] = { "GROUP" : "groups", "STREAMTAG" : "streams", "CHAIN" : "chains",
106 "menu_name" : "name",
107 "chain_name" : "name", "chain_counter" : "counter", "lower_chain_name" : "l1item",
108 "stream" : "name"}
109
110 elif docname == "TOPO_MENU":
111
112 self.rules['asInt'] = {
113 "Parameter": ["pos", "value"],
114 "Bit": ["selection"],
115 "Input": ["position"],
116 "Output": ["bits", "fpga", "clock", "algoId", "module", "firstbit"],
117 "SortAlgo": ["algoId"],
118 "DecisionAlgo": ["algoId"],
119 }
120 self.rules['asMultiArray'] = [ ('OutputList', 'Output'),
121 ('Fixed', 'Generic'),
122 ('Fixed', 'Input'),
123 ('TOPO_MENU', 'SortAlgo'),
124 ('TOPO_MENU', 'DecisionAlgo'),
125 ('Variable', 'Parameter'),
126 ('Output', 'Bit'),
127 ('SIGNATURE', 'TRIGGERELEMENT')
128 ]
129 self.rules['promote'] = { "OutputList" : "Output" }
130 self.rules['rename'] = { "menu_name" : "name", "menu_version" : "version",
131 "algname" : "algName", "algoId" : "algId", "firstbit" : "firstBit", "module" : "board", "triggerline" : "triggerLines",
132 "SortAlgo" : "sortingAlgorithms", "DecisionAlgo" : "decisionAlgorithms",
133 "Fixed" : "fixedParameters", "Input" : "inputs", "Output" : "outputs", "Generic" : "generics",
134 "Variable" : "variableParameters", "Parameter" : "parameters"}
135 else:
136 print("Unknown document with root element %s" % docname)
137 return 1
138 return 0
139
140

◆ parseXMLFile()

python.MenuXML2JSONConverter.XML2JsonConverter.parseXMLFile ( self,
filename )

Definition at line 22 of file MenuXML2JSONConverter.py.

22 def parseXMLFile(self,filename):
23 self.xmlfilename = filename
24 import xml.etree.ElementTree as ET
25 self.doc = ET.parse(filename)
26 self.root = self.doc.getroot()
27 print("Parsed file %s" % filename)
28 return self.doc
29

◆ renameKey()

python.MenuXML2JSONConverter.XML2JsonConverter.renameKey ( self,
key )

Definition at line 141 of file MenuXML2JSONConverter.py.

141 def renameKey(self,key):
142 return self.rules['rename'][key] if key in self.rules['rename'] else key
143
144

◆ writeJsonFile()

python.MenuXML2JSONConverter.XML2JsonConverter.writeJsonFile ( self,
filename = None )

Definition at line 185 of file MenuXML2JSONConverter.py.

185 def writeJsonFile(self, filename = None):
186 import json
187 if not filename:
188 # use xml filename base
189 filename = self.xmlfilename.rstrip(".xml")+".json"
190 elif os.path.isdir(filename):
191 filename = filename.rstrip("/") + "/" + self.xmlfilename.split("/")[-1].rstrip(".xml")+".json"
192 self.loadRules(self.root.tag)
193 d = self.createJsonStruct(self.root)
194 FH = open(filename, "w")
195 json.dump(d, FH, indent=self.tabsize, separators=(',', ': '))
196 FH.close()
197 print("Wrote file %s" % filename)
198
199
200
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition hcg.cxx:177

Member Data Documentation

◆ __doc

python.MenuXML2JSONConverter.XML2JsonConverter.__doc = None
private

Definition at line 9 of file MenuXML2JSONConverter.py.

◆ __root

python.MenuXML2JSONConverter.XML2JsonConverter.__root = None
private

Definition at line 10 of file MenuXML2JSONConverter.py.

◆ __rules

dict python.MenuXML2JSONConverter.XML2JsonConverter.__rules = {}
private

Definition at line 11 of file MenuXML2JSONConverter.py.

◆ doc

python.MenuXML2JSONConverter.XML2JsonConverter.doc = ET.parse(filename)

Definition at line 25 of file MenuXML2JSONConverter.py.

◆ root

python.MenuXML2JSONConverter.XML2JsonConverter.root = self.doc.getroot()

Definition at line 26 of file MenuXML2JSONConverter.py.

◆ rules

dict python.MenuXML2JSONConverter.XML2JsonConverter.rules
Initial value:
= { 'asInt' : {},
'asArray' : [],
'asMultiArray' : [],
'ignoreElement' : [],
'ignoreAttrib' : [],
'promote' : {},
'rename' : {} # renaming will be applied last
}

Definition at line 31 of file MenuXML2JSONConverter.py.

◆ tabsize

python.MenuXML2JSONConverter.XML2JsonConverter.tabsize = tabsize

Definition at line 7 of file MenuXML2JSONConverter.py.

◆ xmlfilename

python.MenuXML2JSONConverter.XML2JsonConverter.xmlfilename = None

Definition at line 12 of file MenuXML2JSONConverter.py.


The documentation for this class was generated from the following file: