Skip to content
Snippets Groups Projects
Commit f43a0a64 authored by Zineb Aly's avatar Zineb Aly Committed by Tamas Gal
Browse files

correct HEader

parent 5990fcc8
No related branches found
No related tags found
1 merge request!27Refactor offline I/O
...@@ -214,23 +214,20 @@ class Usr: ...@@ -214,23 +214,20 @@ class Usr:
def _to_num(value): def _to_num(value):
"""Convert a value to a numerical one if possible""" """Convert a value to a numerical one if possible"""
if value is None: for converter in (int, float):
return
try:
return int(value)
except ValueError:
try: try:
return float(value) return converter(value)
except ValueError: except (ValueError, TypeError):
pass pass
else: return value
return value
class Header: class Header:
"""The header""" """The header"""
def __init__(self, header): def __init__(self, header):
self._data = {} self._data = {}
self._missing_keys = list(set(header.keys()) - set(mc_header.keys()))
for attribute, fields in mc_header.items(): for attribute, fields in mc_header.items():
values = header.get(attribute, '').split() values = header.get(attribute, '').split()
if not values: if not values:
...@@ -238,17 +235,26 @@ class Header: ...@@ -238,17 +235,26 @@ class Header:
Constructor = namedtuple(attribute, fields) Constructor = namedtuple(attribute, fields)
if len(values) < len(fields): if len(values) < len(fields):
values += [None] * (len(fields) - len(values)) values += [None] * (len(fields) - len(values))
print(attribute, fields, values)
self._data[attribute] = Constructor( self._data[attribute] = Constructor(
**{f: _to_num(v) **{f: _to_num(v)
for (f, v) in zip(fields, values)}) for (f, v) in zip(fields, values)})
# quick fix while waiting for additional definitions in mc_header
for key in self._missing_keys:
self._data[key] = _to_num(header[key])
for attribute, value in self._data.items(): for attribute, value in self._data.items():
setattr(self, attribute, value) setattr(self, attribute, value)
def __str__(self): def __str__(self):
lines = ["MC Header:"] lines = ["MC Header:"]
for value in self._data.values(): keys = set(mc_header.keys())
lines.append(" {}".format(value)) for key, value in self._data.items():
if key in keys:
lines.append(" {}".format(value))
else:
lines.append(" {}: {}".format(key, value))
return "\n".join(lines) return "\n".join(lines)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment