Wed 28 Aug 21:38:52 CEST 2024

This commit is contained in:
sbosse 2024-08-28 21:39:27 +02:00
parent e8ba90e580
commit 4c47f3397c

View 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