From 4875370d2621443eb36a261b4bb91027aa15a688 Mon Sep 17 00:00:00 2001 From: Henry <henry.korb@geo.uu.se> Date: Fri, 14 Apr 2023 14:50:05 +0200 Subject: [PATCH] add reader for timeseries files --- .../pyfluids/timeseries_probe_reader.py | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 pythonbindings/pyfluids/timeseries_probe_reader.py diff --git a/pythonbindings/pyfluids/timeseries_probe_reader.py b/pythonbindings/pyfluids/timeseries_probe_reader.py new file mode 100644 index 000000000..d8aa7af05 --- /dev/null +++ b/pythonbindings/pyfluids/timeseries_probe_reader.py @@ -0,0 +1,47 @@ +import numpy as np +from pathlib import Path +import pandas as pd +#%% + + +class TimeseriesProbeReader: + def __init__(self, file: Path): + self.file = file + self.quants, self.positions, self.data = \ + self.read_file() + + def read_file(self): + with open(self.file, "rb") as f: + header_length = 0 + header_length += len(f.readline()) # first line + quant_line = f.readline() + header_length += len(f.readline()) # number of points + number_of_points_line = f.readline() + header_length += len(f.readline()) # positions + n_points = int(number_of_points_line) + positions = np.zeros((n_points, 3)) + for i in range(n_points): + pos_line = f.readline() + header_length += len(pos_line) + positions[i] = [float(pos) for pos in pos_line.split(b", ")] + + header_length += len(quant_line) + header_length += len(number_of_points_line) + + quants = quant_line.decode().split(" ")[1:-1] + n_quants = len(quants) + data = np.fromfile(self.file, dtype=np.float32, offset=header_length) + n_timesteps = len(data)//(n_quants*n_points+1) + return quants, positions, data.reshape(n_timesteps, n_points*n_quants+1) + + def get_data(self): + return self.data + + def get_positions(self): + return self.positions + + def get_quantities(self): + return self.quants + + def to_dataframe(self): + return pd.DataFrame(self.data[:,1:], columns=self.quants, index=self.data[:,0]) \ No newline at end of file -- GitLab