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