2024-11-08 10:50:18 +03:00
|
|
|
import pandas as pd
|
|
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
|
|
class DiagramParser:
|
2024-11-12 13:26:16 +03:00
|
|
|
def __init__(self, system_config: dict):
|
2024-11-08 10:50:18 +03:00
|
|
|
self.data = pd.DataFrame({})
|
2024-11-12 13:26:16 +03:00
|
|
|
self.signals = [system_config["Closure_signal"],
|
|
|
|
|
system_config["Squeeze_signal"],
|
|
|
|
|
system_config["Welding_signal"],
|
|
|
|
|
system_config["Release_signal"]]
|
|
|
|
|
|
|
|
|
|
self.boolDict = {}
|
|
|
|
|
self.floatDict = {}
|
|
|
|
|
self.timingsDict = {}
|
2024-11-12 13:46:36 +03:00
|
|
|
self.theor_mode = False
|
2024-11-08 10:50:18 +03:00
|
|
|
|
|
|
|
|
def setData(self, path):
|
2024-11-12 13:46:36 +03:00
|
|
|
if not path:
|
|
|
|
|
self.theor_mode = True
|
2024-11-12 14:34:07 +03:00
|
|
|
else:
|
|
|
|
|
self.data = pd.read_csv(path)
|
2024-11-12 13:46:36 +03:00
|
|
|
|
2024-11-12 14:34:07 +03:00
|
|
|
for signalName in self.data.columns:
|
|
|
|
|
if type (self.data[signalName].iloc[0]) == np.bool:
|
|
|
|
|
self.boolDict[signalName] = self._getBoolChanges(signalName)
|
2024-11-12 13:26:16 +03:00
|
|
|
|
2024-11-12 14:34:07 +03:00
|
|
|
for signalName in self.data.columns:
|
|
|
|
|
if type (self.data[signalName].iloc[0]) == np.float64:
|
|
|
|
|
self.floatDict[signalName] = self._getFloatChanges(signalName)
|
|
|
|
|
|
2024-11-12 16:52:40 +03:00
|
|
|
for key, items in self.boolDict.items():
|
|
|
|
|
if key == self.signals[0]: name = "closure"
|
|
|
|
|
elif key == self.signals[1]: name = "compression"
|
|
|
|
|
elif key == self.signals[2]: name = "welding"
|
|
|
|
|
elif key == self.signals[3]: name = "opening"
|
|
|
|
|
|
|
|
|
|
self.timingsDict[name] = []
|
|
|
|
|
for i, item in enumerate(items):
|
|
|
|
|
if item[1] == 'high':
|
|
|
|
|
self.timingsDict[name].append([items[i][0], items[i+1][0]])
|
2024-11-12 13:26:16 +03:00
|
|
|
|
|
|
|
|
def getBoolDict (self) -> dict:
|
|
|
|
|
return self.boolDict
|
|
|
|
|
|
|
|
|
|
def getFloatDict (self) -> dict:
|
|
|
|
|
return self.floatDict
|
|
|
|
|
|
|
|
|
|
def getRealTimings(self) -> dict:
|
|
|
|
|
return self.timingsDict
|
2024-11-08 10:50:18 +03:00
|
|
|
|
2024-11-12 13:46:36 +03:00
|
|
|
def getMode(self) -> bool:
|
|
|
|
|
return self.theor_mode
|
|
|
|
|
|
2024-11-12 13:26:16 +03:00
|
|
|
def _getBoolChanges(self, signalName) -> list:
|
2024-11-08 10:50:18 +03:00
|
|
|
timeCode = self.data['time']
|
|
|
|
|
signal_values = self.data[signalName]
|
|
|
|
|
changes = []
|
|
|
|
|
|
|
|
|
|
if len(signal_values) > 0:
|
|
|
|
|
changes.append([float(timeCode.iloc[0]), 'high' if bool(signal_values.iloc[0]) else 'low'])
|
|
|
|
|
|
|
|
|
|
for i in range(1, len(signal_values)):
|
|
|
|
|
if signal_values.iloc[i] != signal_values.iloc[i - 1]:
|
2024-11-11 16:08:02 +03:00
|
|
|
changes.append([float(timeCode.iloc[i]), 'high' if bool(signal_values.iloc[i]) else 'low'])
|
2024-11-08 10:50:18 +03:00
|
|
|
|
|
|
|
|
return changes
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 13:26:16 +03:00
|
|
|
def _getFloatChanges(self, signalName) -> list:
|
2024-11-08 10:50:18 +03:00
|
|
|
timeCode = self.data['time']
|
|
|
|
|
signal_values = self.data[signalName]
|
|
|
|
|
changes = []
|
|
|
|
|
|
|
|
|
|
if len(signal_values) > 0:
|
|
|
|
|
for i in range (len(signal_values)):
|
|
|
|
|
changes.append([float(timeCode.iloc[i]), float(signal_values.iloc[i])])
|
|
|
|
|
|
|
|
|
|
return changes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-10-30 18:42:23 +03:00
|
|
|
|