Skip to content
Snippets Groups Projects

Closes #128, #134, #138. Working on #136

Merged Olle Hansson requested to merge olle into master
1 file
+ 52
52
Compare changes
  • Side-by-side
  • Inline
"""
B-ASIC window to simulate an SFG.
"""
import numpy as np
from matplotlib.backends.backend_qt5agg import (
FigureCanvasQTAgg as FigureCanvas,
)
from matplotlib.figure import Figure
import numpy as np
from b_asic.signal_generator import (
Impulse,
Step,
ZeroPad,
)
from qtpy.QtCore import Qt, Signal
from qtpy.QtGui import QKeySequence
from qtpy.QtWidgets import (
QCheckBox,
QComboBox,
QDialog,
QFileDialog,
QFormLayout,
@@ -30,9 +24,10 @@ from qtpy.QtWidgets import (
QSizePolicy,
QSpinBox,
QVBoxLayout,
QComboBox,
)
from b_asic.signal_generator import Impulse, Step, ZeroPad
class SimulateSFGWindow(QDialog):
simulate = Signal()
@@ -90,14 +85,20 @@ class SimulateSFGWindow(QDialog):
y = 0
input_label = QLabel(f"in{i}")
self.input_grid.addWidget(input_label,i,0)
self.input_grid.addWidget(input_label, i, 0)
input_dropdown = QComboBox()
input_dropdown.insertItems(0,["Impulse","Step","Input","File"])
input_dropdown.currentTextChanged.connect(lambda text, i=i:self.change_input_format(i,text))
self.input_grid.addWidget(input_dropdown,i,1,alignment=Qt.AlignLeft)
input_dropdown.insertItems(
0, ["Impulse", "Step", "Input", "File"]
)
input_dropdown.currentTextChanged.connect(
lambda text, i=i: self.change_input_format(i, text)
)
self.input_grid.addWidget(
input_dropdown, i, 1, alignment=Qt.AlignLeft
)
self.change_input_format(i,"Impulse")
self.change_input_format(i, "Impulse")
y += 1
@@ -112,8 +113,7 @@ class SimulateSFGWindow(QDialog):
self.dialog_layout.addLayout(sfg_layout)
def change_input_format(self, i, text):
grid = self.input_grid.itemAtPosition(i,2)
grid = self.input_grid.itemAtPosition(i, 2)
if grid:
for j in reversed(range(grid.count())):
item = grid.itemAt(j)
@@ -124,41 +124,43 @@ class SimulateSFGWindow(QDialog):
param_grid = QGridLayout()
if (text == "Impulse"):
if text == "Impulse":
delay_label = QLabel("Delay")
param_grid.addWidget(delay_label,0,0)
param_grid.addWidget(delay_label, 0, 0)
delay_spin_box = QSpinBox()
delay_spin_box.setRange(0,2147483647)
param_grid.addWidget(delay_spin_box,0,1)
elif(text == "Step"):
delay_spin_box.setRange(0, 2147483647)
param_grid.addWidget(delay_spin_box, 0, 1)
elif text == "Step":
delay_label = QLabel("Delay")
param_grid.addWidget(delay_label,0,0)
param_grid.addWidget(delay_label, 0, 0)
delay_spin_box = QSpinBox()
delay_spin_box.setRange(0,2147483647)
param_grid.addWidget(delay_spin_box,0,1)
elif(text == "Input"):
delay_spin_box.setRange(0, 2147483647)
param_grid.addWidget(delay_spin_box, 0, 1)
elif text == "Input":
input_label = QLabel("Input")
param_grid.addWidget(input_label,0,0)
param_grid.addWidget(input_label, 0, 0)
input_sequence = QLineEdit()
param_grid.addWidget(input_sequence,0,1)
param_grid.addWidget(input_sequence, 0, 1)
zpad_label = QLabel("Zpad")
param_grid.addWidget(zpad_label,1,0)
param_grid.addWidget(zpad_label, 1, 0)
zpad_button = QCheckBox()
param_grid.addWidget(zpad_button,1,1)
elif(text == "File"):
param_grid.addWidget(zpad_button, 1, 1)
elif text == "File":
file_label = QLabel("Browse")
param_grid.addWidget(file_label,0,0)
param_grid.addWidget(file_label, 0, 0)
file_browser = QPushButton("No file selected")
file_browser.clicked.connect(lambda i=i:self.get_input_file(i,file_browser))
param_grid.addWidget(file_browser,0,1)
file_browser.clicked.connect(
lambda i=i: self.get_input_file(i, file_browser)
)
param_grid.addWidget(file_browser, 0, 1)
else:
raise Exception("Input selection is not implemented")
self.input_grid.addLayout(param_grid,i,2)
self.input_grid.addLayout(param_grid, i, 2)
return
def get_input_file(self, i,file_browser):
def get_input_file(self, i, file_browser):
module, accepted = QFileDialog().getOpenFileName()
file_browser.setText(module)
return
@@ -186,47 +188,45 @@ class SimulateSFGWindow(QDialog):
def save_properties(self):
for sfg, _properties in self.input_fields.items():
ic_value = self.input_fields[sfg]["iteration_count"].value()
if ic_value == 0:
self._window.logger.error(
"Iteration count is set to zero."
)
self._window.logger.error("Iteration count is set to zero.")
tmp = []
for i in range(self.input_grid.rowCount()):
in_format = self.input_grid.itemAtPosition(i,1).widget().currentText()
in_param = self.input_grid.itemAtPosition(i,2)
in_format = (
self.input_grid.itemAtPosition(i, 1).widget().currentText()
)
in_param = self.input_grid.itemAtPosition(i, 2)
tmp2 = []
if (in_format == "Impulse"):
g = Impulse(in_param.itemAtPosition(0,1).widget().value())
if in_format == "Impulse":
g = Impulse(in_param.itemAtPosition(0, 1).widget().value())
for j in range(ic_value):
tmp2.append(str(g(j)))
elif(in_format == "Step"):
g = Step(in_param.itemAtPosition(0,1).widget().value())
elif in_format == "Step":
g = Step(in_param.itemAtPosition(0, 1).widget().value())
for j in range(ic_value):
tmp2.append(str(g(j)))
elif(in_format == "Input"):
widget = in_param.itemAtPosition(0,1).widget()
elif in_format == "Input":
widget = in_param.itemAtPosition(0, 1).widget()
tmp3 = widget.text().split(",")
if in_param.itemAtPosition(1,1).widget().isChecked():
if in_param.itemAtPosition(1, 1).widget().isChecked():
g = ZeroPad(tmp3)
for j in range(ic_value):
tmp2.append(str(g(j)))
else:
tmp2 = tmp3
elif(in_format == "File"):
widget = in_param.itemAtPosition(0,1).widget()
elif in_format == "File":
widget = in_param.itemAtPosition(0, 1).widget()
path = widget.text()
try:
tmp2 = np.loadtxt(path,dtype=str).tolist()
tmp2 = np.loadtxt(path, dtype=str).tolist()
except FileNotFoundError:
self._window.logger.error(
f"Selected input file not found."
Loading