Wed 28 Aug 21:38:52 CEST 2024
This commit is contained in:
parent
e8ba90e580
commit
4c47f3397c
177
src/SimNDT/gui/signalSetupController.py
Normal file
177
src/SimNDT/gui/signalSetupController.py
Normal file
|
@ -0,0 +1,177 @@
|
|||
__author__ = 'Miguel Molero'
|
||||
|
||||
import numpy as np
|
||||
|
||||
from PySide.QtCore import *
|
||||
from PySide.QtGui import *
|
||||
|
||||
from SimNDT.gui.ui_signalsetup import Ui_SignalSetupWidget
|
||||
from SimNDT.gui.Warnings import WarningParms
|
||||
|
||||
import SimNDT.core.constants as c
|
||||
from SimNDT.graphics.mplWidget import MplCanvas
|
||||
from SimNDT.core.signal import Signals, RaisedCosinePulse, PulseUTsin
|
||||
|
||||
|
||||
class SignalSetupWidget(QWidget, Ui_SignalSetupWidget):
|
||||
def __init__(self, parent=None):
|
||||
super(SignalSetupWidget, self).__init__(parent)
|
||||
self.setupUi(self)
|
||||
|
||||
|
||||
class SignalSetup(QDialog):
|
||||
def __init__(self, Signal=None, parent=None):
|
||||
super(SignalSetup, self).__init__(parent)
|
||||
|
||||
self.widget = SignalSetupWidget()
|
||||
|
||||
self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
|
||||
self.connect(self.buttonBox, SIGNAL("accepted()"), self.accept)
|
||||
self.connect(self.buttonBox, SIGNAL("rejected()"), self.reject)
|
||||
|
||||
self.widget.previewPushButton.pressed.connect(self.preview)
|
||||
self.widget.typeComboBox.currentIndexChanged.connect(self.handleTypeSignal)
|
||||
self.widget.cyclesLabel.setVisible(False)
|
||||
self.widget.cyclesDoubleSpinBox.setVisible(False)
|
||||
|
||||
self.mpl = MplCanvas(width=2, height=2, dpi=100)
|
||||
self.mpl.ax.axis("off")
|
||||
|
||||
w = QWidget(self)
|
||||
h = QVBoxLayout()
|
||||
h.addWidget(self.mpl)
|
||||
w.setLayout(h)
|
||||
|
||||
hBox = QHBoxLayout()
|
||||
hBox.addWidget(w)
|
||||
hBox.addWidget(self.widget)
|
||||
|
||||
vBox = QVBoxLayout()
|
||||
vBox.addLayout(hBox)
|
||||
vBox.addWidget(self.buttonBox)
|
||||
|
||||
self.setLayout(vBox)
|
||||
# On Top
|
||||
self.setWindowFlags((self.windowFlags() | Qt.WindowStaysOnTopHint) & ~(Qt.WindowContextHelpButtonHint))
|
||||
self.setWindowTitle(self.tr("Signal Parameters Setup"))
|
||||
self.setWindowIcon(QIcon(":/signal.png"))
|
||||
|
||||
self.setFixedSize(600, 300)
|
||||
|
||||
self.Signal = None
|
||||
|
||||
if Signal is not None:
|
||||
|
||||
self.widget.amplitudeLineEdit.setText(str(Signal.Amplitude))
|
||||
self.widget.frequencyLineEdit.setText(str(Signal.Frequency * 1e-6))
|
||||
|
||||
if Signal.Name == "RaisedCosine":
|
||||
self.widget.typeComboBox.setCurrentIndex(c.SignalType.RaisedCosinePulse)
|
||||
elif Signal.Name == "GaussianSine":
|
||||
self.widget.typeComboBox.setCurrentIndex(c.SignalType.GaussianSinePulse)
|
||||
self.widget.cyclesLabel.setVisible(True)
|
||||
self.widget.cyclesDoubleSpinBox.setVisible(True)
|
||||
self.widget.cyclesDoubleSpinBox.setValue(Signal.N_Cycles)
|
||||
|
||||
t = self.generate(Signal.Frequency)
|
||||
sig = Signal.generate(t)
|
||||
self.mpl.ax.plot(sig)
|
||||
self.mpl.ax.axis("off")
|
||||
self.mpl.ax.hold(False)
|
||||
self.mpl.draw()
|
||||
|
||||
def generate(self, Frequency):
|
||||
FreqMin = Frequency / 20.0
|
||||
return np.linspace(0.0, (1.0 / FreqMin), int((5e8 / (Frequency * 1e6)) + 250))
|
||||
|
||||
def preview(self):
|
||||
|
||||
type = self.widget.typeComboBox.currentIndex()
|
||||
|
||||
if self.getValues(type):
|
||||
self.mpl.ax.plot(np.zeros((10, 1)))
|
||||
self.mpl.ax.axis("off")
|
||||
self.mpl.ax.hold(False)
|
||||
self.mpl.draw()
|
||||
|
||||
return
|
||||
|
||||
t = self.generate(self.Signal.Frequency)
|
||||
sig = self.Signal.generate(t)
|
||||
|
||||
self.mpl.ax.plot(sig)
|
||||
self.mpl.ax.axis("off")
|
||||
self.mpl.draw()
|
||||
|
||||
def accept(self):
|
||||
|
||||
type = self.widget.typeComboBox.currentIndex()
|
||||
|
||||
try:
|
||||
if self.getValues(type):
|
||||
return
|
||||
except:
|
||||
return
|
||||
|
||||
QDialog.accept(self)
|
||||
|
||||
def handleTypeSignal(self, index):
|
||||
|
||||
if index == c.SignalType.GaussianSinePulse:
|
||||
self.widget.cyclesLabel.setVisible(True)
|
||||
self.widget.cyclesDoubleSpinBox.setVisible(True)
|
||||
else:
|
||||
self.widget.cyclesLabel.setVisible(False)
|
||||
self.widget.cyclesDoubleSpinBox.setVisible(False)
|
||||
|
||||
def getValues(self, type):
|
||||
|
||||
try:
|
||||
amplitude = float(self.widget.amplitudeLineEdit.text())
|
||||
except:
|
||||
msgBox = WarningParms("Give correctly the Amplitude")
|
||||
if msgBox.exec_():
|
||||
return True
|
||||
|
||||
try:
|
||||
frequency = float(self.widget.frequencyLineEdit.text()) * 1e6
|
||||
if frequency > 1e9:
|
||||
msgBox = WarningParms("Give correctly the Frequency (MHz)")
|
||||
if msgBox.exec_():
|
||||
return True
|
||||
|
||||
|
||||
except:
|
||||
msgBox = WarningParms("Give correctly the Frequency (MHz)")
|
||||
if msgBox.exec_():
|
||||
return True
|
||||
|
||||
if type == c.SignalType.RaisedCosinePulse:
|
||||
self.Signal = Signals("RaisedCosine", amplitude, frequency)
|
||||
cycles = 1
|
||||
|
||||
|
||||
elif type == c.SignalType.GaussianSinePulse:
|
||||
try:
|
||||
cycles = float(self.widget.cyclesDoubleSpinBox.value())
|
||||
if cycles == 0:
|
||||
msgBox = WarningParms("Give correctly the # Cycles")
|
||||
if msgBox.exec_():
|
||||
return True
|
||||
|
||||
except:
|
||||
msgBox = WarningParms("Give correctly the # Cycles")
|
||||
self.widget.cyclesDoubleSpinBox.setValue(0)
|
||||
if msgBox.exec_():
|
||||
return True
|
||||
|
||||
try:
|
||||
self.Signal = Signals("GaussianSine", amplitude, frequency, cycles)
|
||||
t = self.generate(self.Signal.Frequency)
|
||||
sig = self.Signal.generate(t)
|
||||
|
||||
except:
|
||||
msgBox = WarningParms("Give lower # Cycles")
|
||||
self.widget.cyclesDoubleSpinBox.setValue(0)
|
||||
if msgBox.exec_():
|
||||
return True
|
Loading…
Reference in New Issue
Block a user