From 5337f68e3eebb6f8fecbe82121a5ae3a59955cd2 Mon Sep 17 00:00:00 2001 From: Kelvin Ly Date: Sat, 13 Apr 2019 23:18:44 -0400 Subject: [PATCH] Copy in qucs Python files to process Qucs data in Python --- .../discrete-rf-board/qucs/__init__.py | 0 .../discrete-rf-board/qucs/qucsdata.py | 112 ++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 pcb/discrete/discrete-rf-board/qucs/__init__.py create mode 100644 pcb/discrete/discrete-rf-board/qucs/qucsdata.py diff --git a/pcb/discrete/discrete-rf-board/qucs/__init__.py b/pcb/discrete/discrete-rf-board/qucs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pcb/discrete/discrete-rf-board/qucs/qucsdata.py b/pcb/discrete/discrete-rf-board/qucs/qucsdata.py new file mode 100644 index 0000000..8628884 --- /dev/null +++ b/pcb/discrete/discrete-rf-board/qucs/qucsdata.py @@ -0,0 +1,112 @@ +""" +Module to handle a Qucs Dataset result file. +""" + +import re +import numpy as np +import pprint as pp + +class QucsData: + """ + Read an store a result file writen by Qucsator. + """ + def __init__(self, filename): + # source dataset + self.filename = filename + # qucsator version that generated the data + self.version = '' + # list of all variable names + self.names = [] + # data[name] = array + self.data = {} + # data dependent[name]=list(names) + self.dependent = {} + + # parse + self.read(self.filename) + + def __str__(self): + """ + Print self. + """ + pr = '' + pr += 'File name: %s\n' %self.filename + pr += 'names:\n' + for name in self.names: + pr += ' \'%s\': shape %s\n' %(name, self.data[name].shape) + pr += 'dependent: \n' + pr += pp.pformat(self.dependent, indent=4) + pr += '\n' + return pr + + def read(self,fileName): + """ + Qucs Dataset parser. + """ + variable = '' + with open(fileName) as qucsdata: + for line in qucsdata: + # header + r = re.match(r'\', line) + if r: + self.version = r.group(1) + + if '")) + kind, identifier, size = r.groups() + # collect identifiers + self.names.append(identifier) + variable = identifier + continue # next line + + if '")) + identifier = r[1] + self.dependent[identifier]= r[2:] + self.names.append(identifier) + variable = identifier + continue # next line + + if ' 2 + # + shape = [] + for dep in self.dependent[variable]: + size = len(self.data[dep]) + shape.append (size) + values = np.array(self.data[variable]) + self.data[variable] = values.reshape(tuple(shape),order='F') + variable = '' + continue # next line + + if variable: + # collect data from line into temporary list + if variable not in self.data.keys(): + self.data[variable] = [] + value = line.strip() + if ('j' in value): + # put imaginary to the end + value = value.replace("j","") + value = value+'j' + value = complex(value) + else: + value = float(value) + self.data[variable].append(value) + + + +