|
def | __init__ (self, tabsize=4, **args) |
|
def | convertFile (self, inputfilename, jsonfilename=None) |
|
def | parseXMLFile (self, filename) |
|
def | loadRules (self, docname) |
|
def | renameKey (self, key) |
|
def | createJsonStruct (self, node) |
|
def | writeJsonFile (self, filename=None) |
|
def | checkJsonConformity (self, filename) |
|
Definition at line 5 of file MenuXML2JSONConverter.py.
◆ __init__()
def python.MenuXML2JSONConverter.XML2JsonConverter.__init__ |
( |
|
self, |
|
|
|
tabsize = 4 , |
|
|
** |
args |
|
) |
| |
◆ checkJsonConformity()
def 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=
' ')
204 FH =
open(filename,
"rb")
208 except ValueError
as e:
◆ convertFile()
def 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)
19 self.parseXMLFile( inputfilename )
20 self.writeJsonFile( jsonfilename )
◆ createJsonStruct()
def 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 ]
153 for attr
in sorted(node.attrib.keys()):
154 if (node.tag, attr)
in self.rules[
'ignoreAttrib']:
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])
159 d[self.renameKey(attr)] = node.attrib[attr]
162 if element.tag
in self.rules[
'ignoreElement']:
164 if (node.tag, element.tag)
in self.rules[
'asMultiArray']:
166 key = self.renameKey(element.tag)
167 if key
not in d: d[key] =
list()
168 d[key] += [ self.createJsonStruct(element) ]
172 raise RuntimeError(
"element %s already attached to node %s and not declared as MultiArray" % (element.tag, node.tag))
174 if element.tag
in self.rules[
'promote']:
175 obj = self.createJsonStruct(element)
176 promoted = self.renameKey( self.rules[
'promote'][element.tag])
177 d[promoted] = obj[promoted]
179 d[self.renameKey(element.tag)] = self.createJsonStruct(element)
◆ loadRules()
def python.MenuXML2JSONConverter.XML2JsonConverter.loadRules |
( |
|
self, |
|
|
|
docname |
|
) |
| |
Definition at line 30 of file MenuXML2JSONConverter.py.
30 def loadRules(self,docname):
31 self.rules = {
'asInt' : {},
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" ]
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'),
74 (
'AND',
'InternalTrigger')
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" }
84 elif docname ==
"HLT_MENU":
86 self.rules[
'asInt'] = {
87 "CHAIN": [
"EBstep",
"chain_counter"],
88 "SIGNATURE": [
"signature_counter"]
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')
97 self.rules[
'ignoreElement'] = [
"SEQUENCE_LIST",
"SIGNATURE_LIST",
"TRIGGERTYPE_LIST" ]
98 self.rules[
'ignoreAttrib'] = [ (
"CHAIN",
"level"),
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",
110 elif docname ==
"TOPO_MENU":
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"],
120 self.rules[
'asMultiArray'] = [ (
'OutputList',
'Output'),
121 (
'Fixed',
'Generic'),
123 (
'TOPO_MENU',
'SortAlgo'),
124 (
'TOPO_MENU',
'DecisionAlgo'),
125 (
'Variable',
'Parameter'),
127 (
'SIGNATURE',
'TRIGGERELEMENT')
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"}
136 print(
"Unknown document with root element %s" % docname)
◆ parseXMLFile()
def 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)
◆ renameKey()
def 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
◆ writeJsonFile()
def python.MenuXML2JSONConverter.XML2JsonConverter.writeJsonFile |
( |
|
self, |
|
|
|
filename = None |
|
) |
| |
Definition at line 185 of file MenuXML2JSONConverter.py.
185 def writeJsonFile(self, filename = None):
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=(
',',
': '))
197 print(
"Wrote file %s" % filename)
◆ __doc
python.MenuXML2JSONConverter.XML2JsonConverter.__doc |
|
private |
◆ __root
python.MenuXML2JSONConverter.XML2JsonConverter.__root |
|
private |
◆ __rules
python.MenuXML2JSONConverter.XML2JsonConverter.__rules |
|
private |
◆ doc
python.MenuXML2JSONConverter.XML2JsonConverter.doc |
◆ root
python.MenuXML2JSONConverter.XML2JsonConverter.root |
◆ rules
python.MenuXML2JSONConverter.XML2JsonConverter.rules |
◆ tabsize
python.MenuXML2JSONConverter.XML2JsonConverter.tabsize |
◆ xmlfilename
python.MenuXML2JSONConverter.XML2JsonConverter.xmlfilename |
The documentation for this class was generated from the following file: