diff --git a/docs/source/upcoming_release_notes/1313-Improving_Qmini_spectrometer_GUI_and_adding_save_functions.rst b/docs/source/upcoming_release_notes/1313-Improving_Qmini_spectrometer_GUI_and_adding_save_functions.rst
new file mode 100644
index 00000000000..f19d2272ecc
--- /dev/null
+++ b/docs/source/upcoming_release_notes/1313-Improving_Qmini_spectrometer_GUI_and_adding_save_functions.rst
@@ -0,0 +1,32 @@
+1313 Improving Qmini spectrometer GUI and adding save functions
+#################
+
+API Breaks
+----------
+- N/A
+
+Library Features
+----------------
+- N/A
+
+Device Features
+---------------
+- N/A
+
+New Devices
+-----------
+- N/A
+
+Bugfixes
+--------
+- N/A
+
+Maintenance
+-----------
+- Improving QminiSpectrometer.embedded.ui
+- Adding QminiSpectrometer.detailed.ui
+- Adding save_data() function and accompanying signals to qmini.py
+
+Contributors
+------------
+- aberges-SLAC
diff --git a/pcdsdevices/lasers/qmini.py b/pcdsdevices/lasers/qmini.py
index b0e7767fa04..81c3d4ee700 100644
--- a/pcdsdevices/lasers/qmini.py
+++ b/pcdsdevices/lasers/qmini.py
@@ -1,8 +1,12 @@
+import json
import logging
+import os
+import time
from ophyd import Component as Cpt
from ophyd import Device, EpicsSignal, EpicsSignalRO
from ophyd import FormattedComponent as FCpt
+from ophyd.signal import AttributeSignal, Signal
from pcdsdevices.variety import set_metadata
@@ -83,6 +87,54 @@ class QminiSpectrometer(Device):
fit_stdev = Cpt(EpicsSignalRO, ':STDEV', kind='config')
fit_chisq = Cpt(EpicsSignalRO, ':CHISQ', kind='config')
+ # Save spectra functions
+ def save_data(self, file_dest: str = ''):
+ """
+ Save the wavelength and spectrum PVs to a text file
+ """
+ # Let's check to see if we set this in a non-gui context
+ if not file_dest.strip():
+ # let's try to use the signal instead
+ if not self.file_dest.get().strip():
+ # set a default destination for the file we didn't set it
+ _file = (os.getcwd() + '/' + self.name
+ + time.strftime("_%Y-%m-%d_%H%M%S") + '.txt')
+ # otherwise just use it, silly
+ else:
+ _file = self.file_dest.get()
+ else:
+ _file = file_dest
+ self.log.info('Saving spectrum to disk...')
+ # Let's format to JSON for the science folk with sinful f-string mangling
+ _settings = ['sensitivity_cal', 'correct_prnu', 'correct_nonlinearity',
+ 'normalize_exposure', 'adjust_offset', 'subtract_dark',
+ 'remove_bad_pixels', 'remove_temp_bad_pixels']
+ _data = {'timestamp': time.strftime("%Y-%m-%d %H:%M:%S"),
+ 'exposure (us)': self.exposure.get(),
+ 'averages': self.exposures_to_average.get(),
+ # Lets do some sneaky conversion to bool from int
+ 'settings': {f"{sig}": bool(getattr(self, sig).get())
+ for sig in _settings},
+ 'wavelength (nm)': [str(x) for x in self.wavelengths.get()],
+ 'intensity (a.u.)': [str(y) for y in self.spectrum.get()]
+ }
+ # and let's assume you have permission to save your file where you want to
+ with open(_file, 'w') as _f:
+ _f.write(json.dumps(_data))
+
+ save_spectrum = Cpt(AttributeSignal, attr='_save_spectrum', kind='omitted')
+ file_dest = Cpt(Signal, value='', kind='omitted')
+ set_metadata(save_spectrum, dict(variety='command-proc', value=1))
+
+ @property
+ def _save_spectrum(self):
+ return 0
+
+ # Setter will just save the data
+ @_save_spectrum.setter
+ def _save_spectrum(self, value):
+ self.save_data()
+
class QminiWithEvr(QminiSpectrometer):
"""
diff --git a/pcdsdevices/ui/QminiSpectrometer.detailed.ui b/pcdsdevices/ui/QminiSpectrometer.detailed.ui
new file mode 100644
index 00000000000..e6fcedab128
--- /dev/null
+++ b/pcdsdevices/ui/QminiSpectrometer.detailed.ui
@@ -0,0 +1,2936 @@
+
+
+ Form
+
+
+
+ 0
+ 0
+ 557
+ 654
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 10
+
+
+
+ Form
+
+
+
+
+ 0
+ 10
+ 551
+ 641
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+ QFrame::Box
+
+
+ QFrame::Sunken
+
+
+ 0
+
+
+ QAbstractScrollArea::AdjustToContents
+
+
+ true
+
+
+ true
+
+
+
+ {"name": "Intensity", "orientation": "left", "label": "Intensity", "minRange": -1.7316764476028033, "maxRange": 1.7316764476028033, "autoRange": true, "logMode": false}
+
+
+
+
+ Wavelength
+
+
+
+
+ {"y_channel": "ca://$prefix:SPECTRUM", "x_channel": "ca://$prefix:WAVELENGTHS", "plot_style": "Line", "name": "Intensity", "color": "#0055ff", "lineStyle": 1, "lineWidth": 1, "symbol": null, "symbolSize": 10, "yAxisName": "Intensity", "barWidth": null, "upperThreshold": null, "lowerThreshold": null, "thresholdColor": "white", "redraw_mode": 2}
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Fixed
+
+
+
+ 20
+ 5
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+ QTabWidget::North
+
+
+ QTabWidget::Rounded
+
+
+ 0
+
+
+
+ QMini Param
+
+
+
+
+ 10
+ 10
+ 531
+ 231
+
+
+
+
+ QLayout::SetNoConstraint
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ Qt::ScrollBarAsNeeded
+
+
+ QAbstractScrollArea::AdjustIgnored
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 600
+ 275
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 600
+ 275
+
+
+
+
+
+ 10
+ 0
+ 501
+ 238
+
+
+
+
+ QLayout::SetDefaultConstraint
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::PlainText
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:SET_AVG_CNT
+
+
+ false
+
+
+
+ -
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ false
+
+
+ ca://$prefix:SET_AVG_CNT
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ File dest
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:SOFT_TRIGGER_MODE
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:SOFT_TRIGGER_MODE
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Force single exposure
+
+
+ false
+
+
+ false
+
+
+
+
+
+ false
+
+
+ ca://$prefix:START_EXPOSURE.PROC
+
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+ false
+
+
+ Are you sure you want to proceed?
+
+
+ 1
+
+
+ None
+
+
+ false
+
+
+ false
+
+
+
+ -
+
+
+ Temperature
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+ Exposures to average
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+ true
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+ Full file destination for spectra output. Default: $PWD/$name_<timestamp>.txt
+
+
+ false
+
+
+ sig://${name}_file_dest
+
+
+ PyDMLineEdit::String
+
+
+
+ -
+
+
+
+
+
+ Re-init
+
+
+ false
+
+
+ false
+
+
+
+
+
+ false
+
+
+ ca://$prefix:CLEAR_SPECTROMETER.PROC
+
+
+ recycle
+
+
+
+ 0
+ 255
+ 127
+
+
+
+ false
+
+
+
+
+
+
+
+
+ false
+
+
+ Are you sure you want to proceed?
+
+
+ 1
+
+
+ 0
+
+
+ false
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Status
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:TEMP
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ true
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:TEMP
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 18
+
+
+
+
+
+
+ ca://$prefix:STATUS
+
+
+ Qt::PlainText
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:STATUS
+
+
+
+ -
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ false
+
+
+ ca://$prefix:SET_EXPOSURE_TIME
+
+
+
+ -
+
+
+
+
+
+ Save spectrum
+
+
+ false
+
+
+ false
+
+
+ Save current spectrum to disk
+
+
+ false
+
+
+ sig://${name}_save_spectrum
+
+
+ save
+
+
+
+ 0
+ 170
+ 255
+
+
+
+ false
+
+
+
+
+
+
+
+
+ false
+
+
+
+
+
+ 1
+
+
+ 0
+
+
+ false
+
+
+ false
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::PlainText
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ true
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:GET_EXPOSURE_TIME
+
+
+ false
+
+
+
+ -
+
+
+ Scan Rate
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+ Exposure Time
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ true
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ sig://${name}_file_dest
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Fit Param
+
+
+
+
+ 9
+ 10
+ 531
+ 221
+
+
+
+
+ QLayout::SetNoConstraint
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Qt::ScrollBarAlwaysOn
+
+
+ QAbstractScrollArea::AdjustIgnored
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 513
+ 230
+
+
+
+
+ 0
+ 230
+
+
+
+
+
+ 10
+ -3
+ 501
+ 228
+
+
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:CHISQ
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:CHISQ
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:FIT_ON
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:FIT_ON
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Width
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ false
+
+
+ ca://$prefix:WIDTH
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ λ Fit
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Amplitude
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ λ Guess
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:STDEV
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:STDEV
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Fit On
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:FWHM
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:FWHM
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 18
+
+
+
+
+
+
+ ca://$prefix:W0_FIT
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:W0_FIT
+
+
+
+ -
+
+
+
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ false
+
+
+ ca://$prefix:W0_GUESS
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ St. Dev.
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:W0_GUESS
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:W0_GUESS
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:WIDTH
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:WIDTH
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ X²
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ FWHM
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:AMPLITUDE
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:AMPLITUDE
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Device Settings
+
+
+
+
+ 10
+ 10
+ 531
+ 221
+
+
+
+
+ QLayout::SetNoConstraint
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Qt::ScrollBarAlwaysOn
+
+
+ QAbstractScrollArea::AdjustToContents
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 513
+ 330
+
+
+
+
+ 0
+ 330
+
+
+
+
+
+ 10
+ 0
+ 501
+ 356
+
+
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:CORRECT_NONLINEARITY
+
+
+ false
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:SCALE_TO_16BIT
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:REMOVE_BAD_PIXELS
+
+
+ false
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Additional filtering
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Subtract dark px
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ Normalize spectrum to 1 sec exposure time
+
+
+ ca://$prefix:NORMALIZE_EXPOSURE
+
+
+ false
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:SERIAL_NUMBER
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Correct for Photoresponse non-uniformity
+
+
+ -1
+
+
+
+
+
+ Correct PRNU
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Sensitivity cal
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:MODEL_CODE
+
+
+ false
+
+
+ PyDMLabel::Hex
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Remove bad pixels
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:SUBTRACT_DARK
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Scale to 16 bit
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Serial Number
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Correct nonlinearity
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ Correct for Photoresponse non-uniformity
+
+
+ ca://$prefix:CORRECT_PRNU
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ Remove single pixel spikes
+
+
+ ca://$prefix:REMOVE_TEMP_BAD_PIXELS
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:ADJUST_OFFSET
+
+
+ false
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Model
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:ADDITIONAL_FILTERING
+
+
+ false
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Normalize exposure
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Adjust offset
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:SENSITIVITY_CAL
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Remove temp. bad px
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Trigger Settings
+
+
+
+
+ 9
+ 9
+ 521
+ 221
+
+
+
+ -
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 503
+ 225
+
+
+
+
+ 0
+ 225
+
+
+
+
+
+ 7
+ 11
+ 491
+ 201
+
+
+
+
-
+
+
+ -
+
+
+ Trigger Edge
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ Trigger Mode
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:SET_TRIG_ENABLE
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:SET_TRIG_ENABLE
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:TRIG_MODE_RBV
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Trigger Delay
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:TRIG_PIN_RBV
+
+
+ false
+
+
+
+ -
+
+
+ Trig Enable
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ false
+
+
+ ca://$prefix:SET_TRIG_DELAY
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:TRIG_EDGE_RBV
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ true
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:GET_TRIG_DELAY
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Trigger Pin
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ Indicators
+
+
+
+ true
+
+
+
+ 10
+ 10
+ 519
+ 219
+
+
+
+ Qt::ScrollBarAlwaysOn
+
+
+ true
+
+
+
+ true
+
+
+
+ 0
+ 0
+ 503
+ 350
+
+
+
+
+ 0
+ 350
+
+
+
+
+ false
+
+
+
+ 0
+ 0
+ 151
+ 261
+
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ false
+
+
+ false
+
+
+ Raw readback on the PROCESSING_STEPS_RBV
+
+
+ ca://$prefix:PROCESSING_STEPS_RBV
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ 11
+
+
+ 0
+
+
+
+ Adjust offset
+ Correct nonlinearity
+ Remove bad px
+ Subtract dark px
+ Remove temp bad px
+ <Not Used>
+ Norm exposure
+ Sensitivity cal
+ Correct PRNU
+ Additional filtering
+ Scale to 16b
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PyDMLabel
+ QLabel
+
+
+
+ PyDMWaveformPlot
+ QGraphicsView
+ pydm.widgets.waveformplot
+
+
+ PyDMByteIndicator
+ QWidget
+
+
+
+ PyDMEnumComboBox
+ QComboBox
+ pydm.widgets.enum_combo_box
+
+
+ PyDMLineEdit
+ QLineEdit
+
+
+
+ PyDMPushButton
+ QPushButton
+
+
+
+ TyphosDisplayTitle
+ QFrame
+
+
+
+
+
+
diff --git a/pcdsdevices/ui/QminiSpectrometer.embedded.ui b/pcdsdevices/ui/QminiSpectrometer.embedded.ui
index 062d2965529..b1f8b085387 100644
--- a/pcdsdevices/ui/QminiSpectrometer.embedded.ui
+++ b/pcdsdevices/ui/QminiSpectrometer.embedded.ui
@@ -9,12 +9,12 @@
0
0
- 532
- 636
+ 555
+ 650
-
+
0
0
@@ -22,7 +22,7 @@
300
- 150
+ 600
@@ -42,7 +42,7 @@
- 3
+ 4
QLayout::SetDefaultConstraint
@@ -61,6 +61,15 @@
-
+
+ true
+
+
+
+ 282
+ 75
+
+
@@ -69,14 +78,14 @@
-
-
+
0
0
- 500
+ 250
250
@@ -98,22 +107,22 @@
- QFrame::Box
+ QFrame::Panel
- QFrame::Raised
+ QFrame::Plain
- 1
+ 0
- 2
+ 0
- Qt::ScrollBarAsNeeded
+ Qt::ScrollBarAlwaysOff
- Qt::ScrollBarAsNeeded
+ Qt::ScrollBarAlwaysOff
QAbstractScrollArea::AdjustToContents
@@ -125,8 +134,8 @@
0.000000000000000
0.000000000000000
- 522.000000000000000
- 280.000000000000000
+ 545.000000000000000
+ 272.000000000000000
@@ -162,8 +171,10 @@
true
-
- false
+
+
+ {"name": "Intensity", "orientation": "left", "label": null, "minRange": -1.265319018496, "maxRange": 1.265319018496, "autoRange": true, "logMode": false}
+
@@ -181,7 +192,7 @@
- {"y_channel": "ca://$prefix:SPECTRUM", "x_channel": "ca://$prefix:WAVELENGTHS", "plot_style": null, "name": "", "color": "#0055ff", "lineStyle": 1, "lineWidth": 1, "symbol": null, "symbolSize": 10, "yAxisName": "Axis 1", "barWidth": null, "upperThreshold": null, "lowerThreshold": null, "thresholdColor": "white", "redraw_mode": 1}
+ {"y_channel": "ca://$prefix:SPECTRUM", "x_channel": "ca://$prefix:WAVELENGTHS", "plot_style": "Line", "name": "Intensity", "color": "#0055ff", "lineStyle": 1, "lineWidth": 1, "symbol": null, "symbolSize": 10, "yAxisName": "Intensity", "barWidth": null, "upperThreshold": null, "lowerThreshold": null, "thresholdColor": "white", "redraw_mode": 1}
@@ -192,7 +203,7 @@
- Spectrum
+ Intensity
@@ -214,578 +225,1215 @@
-
-
-
- QAbstractScrollArea::AdjustToContents
+
+
+
+ 0
+ 0
+
+
+
+ Qt::ScrollBarAsNeeded
true
-
+
0
0
- 571
- 236
+ 529
+ 625
-
+
0
0
- 0
- 200
+ 500
+ 625
-
-
- 3
-
-
- 9
-
-
- 3
-
-
- 3
+
+
+
+ 20
+ 10
+ 491
+ 612
+
-
-
-
-
-
- 75
- true
- true
-
-
-
- Qmini Parameters
-
-
-
- QFormLayout::AllNonFixedFieldsGrow
+
+
+ 10
+
+
+ QLayout::SetNoConstraint
+
+
-
+
+
+
+ 0
+ 0
+
-
- 6
+
+
+ 150
+ 300
+
-
- 6
+
+
+ 75
+ true
+ true
+
-
- 6
+
+ Qt::LeftToRight
-
-
-
-
-
- 0
- 0
-
-
-
- Status
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 18
-
-
-
-
-
-
- ca://$prefix:STATUS
-
-
- Qt::PlainText
-
-
- 0
-
-
- false
-
-
- true
-
-
- false
-
-
- true
-
-
-
-
-
- ca://$prefix:STATUS
-
-
-
- -
-
-
- Scan Rate
-
-
-
- -
-
-
-
-
-
- ca://$prefix:SOFT_TRIGGER_MODE
-
-
- 0
-
-
- false
-
-
- true
-
-
- false
-
-
- true
-
-
-
-
-
- ca://$prefix:SOFT_TRIGGER_MODE
-
-
-
- -
-
-
- -
-
-
- Trig Enable
-
-
-
- -
-
-
-
-
-
- ca://$prefix:SET_TRIG_ENABLE
-
-
- ca://$prefix:SET_TRIG_ENABLE
-
-
-
- -
-
-
- -
-
-
- Temperature
-
-
-
- -
-
-
-
-
-
-
-
-
- 0
-
-
- false
-
-
- true
-
-
- false
-
-
- true
-
-
-
-
-
- ca://$prefix:TEMP
-
-
-
-
-
-
- -
-
-
-
- 75
- true
- true
- true
-
-
-
- Fit Parameters
-
-
- false
-
-
- false
-
-
-
- QFormLayout::ExpandingFieldsGrow
+
+ false
-
- QFormLayout::DontWrapRows
+
+ Qmini Parameters
-
- 6
+
+ Qt::AlignCenter
-
- 6
+
+
+ QLayout::SetNoConstraint
+
+
+ 6
+
+
+ 6
+
+
+ 6
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ Scan Rate
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ File dest
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+ Exposure Time
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Exposures to avg
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AutoText
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:SET_AVG_CNT
+
+
+ false
+
+
+
+ -
+
+
+ true
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+ Full file destination for spectra output. Default: $PWD/$name_<timestamp>.txt
+
+
+ false
+
+
+ sig://${name}_file_dest
+
+
+ PyDMLineEdit::String
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:SET_TRIG_ENABLE
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:SET_TRIG_ENABLE
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Qt::AutoText
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ true
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:GET_EXPOSURE_TIME
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Save Spectrum
+
+
+ false
+
+
+ false
+
+
+
+
+
+ false
+
+
+ sig://${name}_save_spectrum
+
+
+ save
+
+
+
+ 0
+ 170
+ 255
+
+
+
+ false
+
+
+
+
+
+
+
+
+ true
+
+
+ Are you sure you want to proceed?
+
+
+ 1
+
+
+ 0
+
+
+ false
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Trig Enable
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ false
+
+
+ ca://$prefix:SET_EXPOSURE_TIME
+
+
+
+ -
+
+
+
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ false
+
+
+ ca://$prefix:SET_AVG_CNT
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 60
+
+
+
+
+
+
+ true
+
+
+ 0
+
+
+ Qt::NoTextInteraction
+
+
+ 0
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+
+
+
+ sig://${name}_file_dest
+
+
+ false
+
+
+ PyDMLabel::String
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:SOFT_TRIGGER_MODE
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:SOFT_TRIGGER_MODE
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:TEMP
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ true
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:TEMP
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Temperature
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Force Single Exposure
+
+
+ false
+
+
+ false
+
+
+
+
+
+ false
+
+
+ ca://$prefix:START_EXPOSURE.PROC
+
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+ false
+
+
+ Are you sure you want to proceed?
+
+
+ 1
+
+
+ None
+
+
+ false
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Status
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 18
+
+
+
+
+
+
+ ca://$prefix:STATUS
+
+
+ Qt::PlainText
+
+
+ Qt::AlignCenter
+
+
+ 0
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+
+
+
+ ca://$prefix:STATUS
+
+
+
+ -
+
+
+
+
+
+ Re-init
+
+
+ false
+
+
+ false
+
+
+
+
+
+ false
+
+
+ ca://$prefix:CLEAR_SPECTROMETER.PROC
+
+
+ recycle
+
+
+
+ 0
+ 255
+ 127
+
+
+
+ false
+
+
+
+
+
+
+
+
+ false
+
+
+ Are you sure you want to proceed?
+
+
+ 1
+
+
+ 0
+
+
+ false
+
+
+ false
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
-
- 9
+
+
+ 150
+ 300
+
-
- 6
+
+
+ 75
+ true
+ true
+ true
+
-
- 6
+
+ Fit Parameters
-
-
-
-
-
- 0
- 0
-
-
-
- Fit On
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
- ca://$prefix:FIT_ON
-
-
- ca://$prefix:FIT_ON
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- λ Guess
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
- ca://$prefix:W0_GUESS
-
-
- ca://$prefix:W0_GUESS
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- λ Fit
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 18
-
-
-
-
-
-
- ca://$prefix:W0_FIT
-
-
- ca://$prefix:W0_FIT
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Width
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
- ca://$prefix:WIDTH
-
-
- ca://$prefix:WIDTH
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Amplitude
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
- ca://$prefix:AMPLITUDE
-
-
- ca://$prefix:AMPLITUDE
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- FWHM
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
- ca://$prefix:FWHM
-
-
- ca://$prefix:FWHM
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- St. Dev.
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
- ca://$prefix:STDEV
-
-
- ca://$prefix:STDEV
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- X²
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
- ca://$prefix:CHISQ
-
-
- ca://$prefix:CHISQ
-
-
-
-
-
-
-
+
+ Qt::AlignCenter
+
+
+ false
+
+
+ false
+
+
+
+ QLayout::SetNoConstraint
+
+
+ 6
+
+
+ 9
+
+
+ 6
+
+
+ 6
+
+
+ 6
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:WIDTH
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:WIDTH
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Fit On
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Amplitude
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:W0_GUESS
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:W0_GUESS
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:AMPLITUDE
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:AMPLITUDE
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ FWHM
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ St. Dev.
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 18
+
+
+
+
+
+
+ ca://$prefix:W0_FIT
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:W0_FIT
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ X²
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:FWHM
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:FWHM
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:CHISQ
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:CHISQ
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ λ Fit
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ λ Guess
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:FIT_ON
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:FIT_ON
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ ca://$prefix:STDEV
+
+
+ Qt::AlignCenter
+
+
+ ca://$prefix:STDEV
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Width
+
+
+
+
+
+
+
+
@@ -807,6 +1455,16 @@
QComboBox
pydm.widgets.enum_combo_box
+
+ PyDMLineEdit
+ QLineEdit
+
+
+
+ PyDMPushButton
+ QPushButton
+
+
TyphosDisplayTitle
QFrame
@@ -815,9 +1473,6 @@
SpectrumPlot
- PyDMEnumComboBox
- PyDMEnumComboBox_2
- Parameters