init workflow

This commit is contained in:
2025-04-20 23:23:41 +02:00
parent 05abcca6f5
commit ed7c1bf62e
12 changed files with 201 additions and 88 deletions

View File

@@ -3,8 +3,8 @@ from typing import Dict
import pandas as pd
from tkinter.ttk import Frame
from ..gui.device import Device
from ..gui.slider import Slider
from ..gui import Device, Slider, Entry
from ..config import DEFAULT_CALIB
class Filter:
@@ -15,6 +15,8 @@ class Filter:
self.toolbar = toolbar
self.callback = callback
self.calib_entry = Entry(toolbar, "Calibration Factor", DEFAULT_CALIB)
self.init_params(toolbar)
def init_params(self, toolbar):
@@ -28,17 +30,21 @@ class Filter:
return params
def __call__(self) -> pd.DataFrame:
calib_factor = 100. / float(self.calib_entry.get())
df = self.device.data
df['filtered'] = self.filter(df)
df['filtered'], df['filtered_calib'] = self.filter(df, calib_factor)
df['calib_weights'] = df['weights'] * calib_factor
return df
def filter(self, df: pd.DataFrame) -> pd.Series:
def filter(self, df: pd.DataFrame, calib_factor: float) -> pd.Series:
raise NotImplementedError()
def pack(self):
def pack(self, **kwargs):
self.calib_entry.pack(**kwargs)
for k, v in self.param_map.items():
v.pack()
v.pack(**kwargs)
def pack_forget(self):
self.calib_entry.pack_forget()
for k, v in self.param_map.items():
v.pack_forget()

View File

@@ -1,18 +1,21 @@
from tkinter import ttk
import pandas as pd
from .base import Filter
from ..gui.slider import Slider
from ..gui import Slider
class MovAvg(Filter):
def init_params(self, toolbar):
self.param_map = {
"window_size": Slider(toolbar, "Window Size", 1, 500, 10, self.callback),
"window_size": Slider(toolbar, "Window Size", 1, 100, 10, self.callback),
"decimals": Slider(toolbar, "Decimals", 1, 5, 1, self.callback),
# "reset_threshold": Slider(self.toolbar, "Reset Threshold", 0.001, 0.1, 0.1, self.update),
}
def filter(self, df: pd.DataFrame) -> pd.Series:
def filter(self, df: pd.DataFrame, calib_factor: float) -> pd.Series:
params = self._get_params()
return df['weights'].rolling(window=int(params['window_size'])).mean()\
.round(int(params['decimals']))
mov_avg = df['weights'].rolling(window=int(params['window_size'])).mean()
mov_avg_calib = (mov_avg * calib_factor).round(int(params['decimals']))
return mov_avg, mov_avg_calib