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