Skip to content

Commit bc274c6

Browse files
committed
Single spectrum save feature added
Spectra recorded in Single Mode can be saved individually. Auto-Save is turned off by default for Single Mode.
1 parent e629de4 commit bc274c6

File tree

4 files changed

+77
-9
lines changed

4 files changed

+77
-9
lines changed

GUI.pyw

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -925,6 +925,40 @@ class MainWindow(QMainWindow, MainWindow.Ui_MainWindow):
925925
self.update_label_AutoSaveFolder()
926926
return
927927

928+
@pyqtSlot()
929+
def on_SaveSpectrumBtn_clicked(self):
930+
''' Save most recent spectrum (used for Single Mode) '''
931+
if self.check_Scope():
932+
QMessageBox.critical(self, "Single Int", "First record a Single Scope spectrum")
933+
return
934+
935+
if (self.AbsorbanceModeBtn.isChecked()):
936+
if self.check_Abs():
937+
QMessageBox.critical(self, "Single Abs", "First record a Single Abs spectrum")
938+
return
939+
940+
filepath, _ = QFileDialog.getSaveFileName(self, "Save Single Spectrum", "", "CSV Files (*.csv)")
941+
if filepath:
942+
943+
self.single_save(filepath, "Int", globals.ScopeSpectrum, "Intensity")
944+
self.single_save(filepath, "Int_DarkCorr", globals.ScopeSpectrum_DarkCorr, "Intensity (Dark-Corrected)")
945+
self.single_save(filepath, "Int_DarkSLSCorr", globals.ScopeSpectrum_DarkSLSCorr, "Intensity (Dark- and SLS-Corrected)")
946+
947+
if (self.AbsorbanceModeBtn.isChecked()): ## Absorbance mode
948+
if globals.Corrections_to_Apply == "DarkSLS":
949+
self.single_save(filepath, "Abs", globals.AbsSpectrum, "Absorbance")
950+
elif globals.Corrections_to_Apply == "Dark":
951+
self.single_save(filepath, "Abs_noSLS", globals.AbsSpectrum, "Absorbance (No SLS Correction)")
952+
elif globals.Corrections_to_Apply == "None": ## no corrections
953+
self.single_save(filepath, "Abs_noDarkSLScorr", globals.AbsSpectrum, "Absorbance (No Dark and SLS Corrections)")
954+
#####################################
955+
956+
def single_save(self, filepath, mode, spectrum, data_header):
957+
filepath_full = DataHandling.append_filepath(filepath, mode)
958+
file = DataHandling.Logger(filepath_full, "spectra") ## initialise logger for spectrum savefile
959+
file.save_spectrum(globals.wavelength, spectrum, data_header)
960+
self.statusBar.showMessage(f"Single spectrum saved as {file.filename}")
961+
928962
@pyqtSlot()
929963
def auto_save(self, foldername, mode, spectrum, data_header):
930964
'''
@@ -1409,21 +1443,25 @@ class MainWindow(QMainWindow, MainWindow.Ui_MainWindow):
14091443
self.label_NrCyclesEdt.setEnabled(False)
14101444
self.IntervalEdt.setEnabled(False)
14111445
self.label_IntervalEdt.setEnabled(False)
1446+
self.ChkAutoSaveFolder.setChecked(False) ## auto-save off for Single Mode
14121447
if self.ContinuousRBtn.isChecked():
14131448
self.NrCyclesEdt.setEnabled(True)
14141449
self.label_NrCyclesEdt.setEnabled(True)
14151450
self.IntervalEdt.setEnabled(False)
14161451
self.label_IntervalEdt.setEnabled(False)
1452+
self.ChkAutoSaveFolder.setChecked(True) ## auto-save on
14171453
if self.KineticsRBtn.isChecked():
14181454
self.NrCyclesEdt.setEnabled(True)
14191455
self.label_NrCyclesEdt.setEnabled(True)
14201456
self.IntervalEdt.setEnabled(True)
14211457
self.label_IntervalEdt.setEnabled(True)
1458+
self.ChkAutoSaveFolder.setChecked(True) ## auto-save on
14221459
if self.IrrKinRBtn.isChecked():
14231460
self.NrCyclesEdt.setEnabled(True)
14241461
self.label_NrCyclesEdt.setEnabled(True)
14251462
self.IntervalEdt.setEnabled(True)
14261463
self.label_IntervalEdt.setEnabled(True)
1464+
self.ChkAutoSaveFolder.setChecked(True) ## auto-save on
14271465

14281466
if self.ScopeModeBtn.isChecked():
14291467
globals.MeasurementMode = "Int"
@@ -1500,13 +1538,21 @@ class MainWindow(QMainWindow, MainWindow.Ui_MainWindow):
15001538
self.reset_Data_Ref()
15011539

15021540
def check_Dark(self):
1503-
""" Check if true """
1541+
""" Returns true if Dark is zero """
15041542
return (globals.DarkSpectrum_doublearray == [0.0] * 4096 or globals.DarkSpectrum == [0.0])
15051543

15061544
def check_Ref(self):
1507-
""" check if true """
1545+
""" Returns true if Reference is zero """
15081546
return (globals.RefSpectrum_doublearray == [0.0] * 4096 or globals.RefSpectrum == [0.0])
15091547

1548+
def check_Scope(self):
1549+
""" Returns true if Scope is zero """
1550+
return (globals.ScopeSpectrum_doublearray == [0.0] * 4096 or globals.ScopeSpectrum == [0.0])
1551+
1552+
def check_Abs(self):
1553+
""" Returns true if Abs is zero """
1554+
return (globals.AbsSpectrum_doublearray == [0.0] * 4096 or globals.AbsSpectrum == [0.0])
1555+
15101556
def check_SLSCorr(self):
15111557
""" check if true """
15121558
return (self.SLSCorr == "ON")

UIs/MainWindow.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,10 @@ def setupUi(self, MainWindow):
141141
self.groupBox.setGeometry(QtCore.QRect(550, 10, 821, 361))
142142
self.groupBox.setObjectName("groupBox")
143143
self.StartMeasBtn = QtWidgets.QPushButton(self.groupBox)
144-
self.StartMeasBtn.setGeometry(QtCore.QRect(330, 290, 131, 24))
144+
self.StartMeasBtn.setGeometry(QtCore.QRect(320, 290, 131, 24))
145145
self.StartMeasBtn.setObjectName("StartMeasBtn")
146146
self.StopMeasBtn = QtWidgets.QPushButton(self.groupBox)
147-
self.StopMeasBtn.setGeometry(QtCore.QRect(330, 320, 131, 24))
147+
self.StopMeasBtn.setGeometry(QtCore.QRect(320, 320, 131, 24))
148148
self.StopMeasBtn.setObjectName("StopMeasBtn")
149149
self.groupBox_13 = QtWidgets.QGroupBox(self.groupBox)
150150
self.groupBox_13.setGeometry(QtCore.QRect(270, 100, 241, 161))
@@ -173,6 +173,9 @@ def setupUi(self, MainWindow):
173173
self.label_IntervalEdt = QtWidgets.QLabel(self.groupBox_13)
174174
self.label_IntervalEdt.setGeometry(QtCore.QRect(90, 130, 81, 16))
175175
self.label_IntervalEdt.setObjectName("label_IntervalEdt")
176+
self.SaveSpectrumBtn = QtWidgets.QPushButton(self.groupBox_13)
177+
self.SaveSpectrumBtn.setGeometry(QtCore.QRect(130, 20, 91, 24))
178+
self.SaveSpectrumBtn.setObjectName("SaveSpectrumBtn")
176179
self.groupBox_5 = QtWidgets.QGroupBox(self.groupBox)
177180
self.groupBox_5.setGeometry(QtCore.QRect(10, 20, 241, 201))
178181
self.groupBox_5.setObjectName("groupBox_5")
@@ -687,6 +690,7 @@ def retranslateUi(self, MainWindow):
687690
self.SingleRBtn.setText(_translate("MainWindow", "Single"))
688691
self.label_NrCyclesEdt.setText(_translate("MainWindow", "Nr of Cycles"))
689692
self.label_IntervalEdt.setText(_translate("MainWindow", "Interval (s)"))
693+
self.SaveSpectrumBtn.setText(_translate("MainWindow", "Save Spectrum"))
690694
self.groupBox_5.setTitle(_translate("MainWindow", "Dark and Reference"))
691695
self.DarkMeasBtn.setText(_translate("MainWindow", "Record Dark Spectrum"))
692696
self.RefMeasBtn.setText(_translate("MainWindow", "Record Reference Spectrum"))
@@ -712,7 +716,7 @@ def retranslateUi(self, MainWindow):
712716
self.label_11.setText(_translate("MainWindow", "Current LED:"))
713717
self.SetLEDsettings.setText(_translate("MainWindow", "Set LED Settings"))
714718
self.groupBox_16.setTitle(_translate("MainWindow", "Auto-Save"))
715-
self.AutoSaveFolderBtn.setText(_translate("MainWindow", "Auto-Save Folder"))
719+
self.AutoSaveFolderBtn.setText(_translate("MainWindow", "Select Folder"))
716720
self.label_MeasurementRunning.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" color:#aa55ff;\">MEASUREMENT RUNNING!!!</span></p></body></html>"))
717721
self.groupBox_8.setTitle(_translate("MainWindow", "Measurement Statistics"))
718722
self.label_15.setText(_translate("MainWindow", "Time Since Start (s)"))

UIs/MainWindow.ui

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@
460460
<widget class="QPushButton" name="StartMeasBtn">
461461
<property name="geometry">
462462
<rect>
463-
<x>330</x>
463+
<x>270</x>
464464
<y>290</y>
465465
<width>131</width>
466466
<height>24</height>
@@ -473,7 +473,7 @@
473473
<widget class="QPushButton" name="StopMeasBtn">
474474
<property name="geometry">
475475
<rect>
476-
<x>330</x>
476+
<x>270</x>
477477
<y>320</y>
478478
<width>131</width>
479479
<height>24</height>
@@ -1231,7 +1231,7 @@
12311231
</rect>
12321232
</property>
12331233
<property name="text">
1234-
<string>Auto-Save Folder</string>
1234+
<string>Select Folder</string>
12351235
</property>
12361236
</widget>
12371237
<widget class="QCheckBox" name="ChkAutoSaveFolder">
@@ -1267,7 +1267,7 @@
12671267
<widget class="QLabel" name="label_MeasurementRunning">
12681268
<property name="geometry">
12691269
<rect>
1270-
<x>490</x>
1270+
<x>530</x>
12711271
<y>300</y>
12721272
<width>281</width>
12731273
<height>31</height>
@@ -1288,6 +1288,19 @@
12881288
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; color:#aa55ff;&quot;&gt;MEASUREMENT RUNNING!!!&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
12891289
</property>
12901290
</widget>
1291+
<widget class="QPushButton" name="SaveSpectrumBtn">
1292+
<property name="geometry">
1293+
<rect>
1294+
<x>420</x>
1295+
<y>305</y>
1296+
<width>91</width>
1297+
<height>24</height>
1298+
</rect>
1299+
</property>
1300+
<property name="text">
1301+
<string>Save Spectrum</string>
1302+
</property>
1303+
</widget>
12911304
</widget>
12921305
<widget class="QGroupBox" name="groupBox_8">
12931306
<property name="geometry">

tools/data_handling.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ def trace_wavelength(self, wavelength_of_interest):
8484
closest_index = (df[df.columns[0]] - wavelength_of_interest).abs().idxmin()
8585
closest_wavelength = df.loc[closest_index, df.columns[0]]
8686
return closest_index, closest_wavelength
87+
88+
def append_filepath(filepath, appendage):
89+
name, ext = os.path.splitext(filepath)
90+
new_filepath = f"{name}_{appendage}{ext}"
91+
return new_filepath
8792

8893
def ConvertTimestamps(filename_log, filename_log_autoQY):
8994
'''

0 commit comments

Comments
 (0)