crds_analyzer/app.py

112 lines
3.6 KiB
Python
Raw Normal View History

2021-07-13 23:25:37 -07:00
import sys
2021-07-16 09:19:00 -07:00
import crds_calc
from pandas import read_csv
from PyQt5 import QtGui, QtWidgets, QtCore
2021-07-13 23:25:37 -07:00
from memdb import mem
2021-07-16 09:19:00 -07:00
from mainwin import Ui_MainWindow
from widgets import BaseGraph
import pathlib
class AppWindow(QtWidgets.QMainWindow, Ui_MainWindow):
csv_selected = QtCore.pyqtSignal()
correlation_complete = QtCore.pyqtSignal()
fitting_complete = QtCore.pyqtSignal()
2021-07-13 23:25:37 -07:00
def __init__(self):
super(AppWindow, self).__init__()
2021-07-16 09:19:00 -07:00
self.setupUi(self)
# Signals
# Graphing actions
self.csv_selected.connect(self.raw_data_graph.plot)
def corr_act():
self.groups_graph.plot()
self.graph_tabs.setCurrentIndex(1)
self.correlation_complete.connect(corr_act)
# Helpers
def display_warning(message: str):
msg = QtWidgets.QMessageBox()
msg.setIcon(QtWidgets.QMessageBox.Warning)
msg.setText("Warning")
msg.setInformativeText(message)
msg.setWindowTitle("Warning")
msg.exec_()
def display_error(message: str):
msg = QtWidgets.QMessageBox()
msg.setIcon(QtWidgets.QMessageBox.Critical)
msg.setText("Error")
msg.setInformativeText(message)
msg.setWindowTitle("Error")
msg.exec_()
def select_csv():
filename, _ = QtWidgets.QFileDialog.getOpenFileName(self)
data = None
try:
data = read_csv(filename, comment="%", delimiter=";").to_numpy()
except:
return
mem['x_data'] = data.transpose()[0]
mem['y_data'] = data.transpose()[1]
try:
mem['v_data'] = data.transpose()[2]
except IndexError:
display_warning('No voltage column detected. VThreshold algo will not work.')
self.csv_selected.emit()
# Universal Actions stuff
self.actionOpen_CSV_File.triggered.connect(select_csv)
self.actionGithub_Repository.triggered.connect(lambda: QtGui.QDesktopServices.openUrl(QtCore.QUrl('https://github.com/turtlebasket/crds_analyze')))
# Inputs
def init_correlate():
groups_raw = None
algo = self.combo_grouping_algo.currentIndex()
try:
if algo == 0:
display_error('VThreshold not yet implemented.')
return
elif algo == 1:
groups_raw = crds_calc.spaced_groups(
mem['x_data'],
mem['y_data'],
self.spin_group_len.value(),
self.spin_min_peakheight.value(),
self.spin_min_peakprominence.value(),
self.spin_moving_average_denom.value()
)
mem['groups_correlated'] = crds_calc.correlate_groups(groups_raw)
self.correlation_complete.emit()
except KeyError:
display_error('Failed to correlate. Did you import a data file & set parameters?')
self.correlate_button.pressed.connect(init_correlate)
# Show equation
pix = QtGui.QPixmap(f"{pathlib.Path(__file__).parent.resolve()}/assets/eq3.png")
item = QtWidgets.QGraphicsPixmapItem(pix)
item.setScale(0.38)
scene = QtWidgets.QGraphicsScene()
scene.addItem(item)
self.equation_view.setScene(scene)
# Show self
2021-07-13 23:25:37 -07:00
self.show()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = AppWindow()
2021-07-16 09:19:00 -07:00
window.show()
2021-07-13 23:25:37 -07:00
sys.exit(app.exec_())