Source code for fplore.files.dos
# -*- coding: utf-8 -*-
import re
from itertools import zip_longest
import numpy as np
from .base import FPLOFile, loads
from ..logging import log
[docs]class DOS(FPLOFile):
__fplo_file__ = re.compile(r"\+i?l?n?dos\..+")
[docs] @loads('data', 'header')
def load(self):
dos_file = open(self.filepath, 'r')
sections = dict()
for line in dos_file:
if line.startswith('#'):
header = line
log.debug(header)
header = {label: int(val) if label != 'nl' else val
for label, _, val in
zip_longest(*[iter(header.split()[1:])] * 3)}
log.debug(header)
header = tuple(header.items())
log.debug(header)
sections[header] = []
else:
ls = line.split()
if len(ls) == 2:
sections[header].append(tuple(map(float, line.split())))
headers = list(sections.keys())
data = [np.array(sections[hdr], dtype=[('e', 'f4'), ('dos', 'f4')]) for hdr in sections.keys()]
return data, headers