def _auxCommandsWidget(self): self._ld_speedlim = QLabel('Max Phase Speed\n[mm/s]', self) self._sb_speedlim = PyDMSpinbox( self, self.dev_pref.substitute(propty='MaxPhaseSpeed-SP')) self._sb_speedlim.showStepExponent = False self._sb_speedlim.setStyleSheet('max-width:4.5em;') self._lb_speedlim = PyDMLabel( self, self.dev_pref.substitute(propty='MaxPhaseSpeed-RB')) self._ld_homeaxis = QLabel('Do homing', self) self._pb_home = PyDMPushButton(self, label='', icon=qta.icon('mdi.keyboard-return')) self._pb_home.setToolTip('Execute homing for selected axis.') self._pb_home.channel = self.dev_pref.substitute(propty='DevCtrl-Cmd') self._pb_home.pressValue = 10 # Home self._pb_home.setObjectName('Home') self._pb_home.setStyleSheet( '#Home{min-width:30px; max-width:30px; icon-size:25px;}') self._ld_standby = QLabel('Enable Standby Mode', self) self._pb_standby = PyDMPushButton( self, label='', icon=qta.icon('mdi.alpha-a-box-outline')) self._pb_standby.setToolTip( 'Enable standby mode for automatic motion.') self._pb_standby.channel = \ self.dev_pref.substitute(propty='DevCtrl-Cmd') self._pb_standby.pressValue = 5 # Standby self._pb_standby.setObjectName('Standby') self._pb_standby.setStyleSheet( '#Standby{min-width:30px; max-width:30px; icon-size:25px;}') self._ld_lastcomm = QLabel('Last Command', self) self._lb_lastcomm = PyDMLabel( self, self.dev_pref.substitute(propty='LastDevCtrlCmd-Mon')) gbox_auxcmd = QGroupBox('Auxiliary Commands', self) lay_auxcmd = QGridLayout(gbox_auxcmd) lay_auxcmd.addWidget(self._ld_speedlim, 0, 0) lay_auxcmd.addWidget(self._sb_speedlim, 0, 1) lay_auxcmd.addWidget(self._lb_speedlim, 0, 2) lay_auxcmd.addItem(QSpacerItem(1, 10, QSzPlcy.Ignored, QSzPlcy.Fixed), 1, 0) lay_auxcmd.addWidget(self._ld_homeaxis, 2, 0) lay_auxcmd.addWidget(self._pb_home, 2, 1, 1, 2, alignment=Qt.AlignCenter) lay_auxcmd.addWidget(self._ld_standby, 3, 0) lay_auxcmd.addWidget(self._pb_standby, 3, 1, 1, 2, alignment=Qt.AlignCenter) lay_auxcmd.addWidget(self._ld_lastcomm, 4, 0) lay_auxcmd.addWidget(self._lb_lastcomm, 4, 1, 1, 2) return gbox_auxcmd
def _setupFBSettingsWidget(self): gbox_settings = QGroupBox('FeedBack Settings', self) ld_fbpatt = QLabel('Feedback Mask', self) le_fbpatt = PyDMLineEdit(self, self.dev_pref + ':FB_PATTERN') ld_cfpatt = QLabel('Alternate Mask', self) le_cfpatt = PyDMLineEdit(self, self.dev_pref + ':CF_PATTERN') ld_alter_inuse = QLabel('Alternate Set In Use', self) led_alter_inuse = SiriusLedState( self, self.dev_pref + ':CF_PATTERN_SUB.VALB') ld_fbenbl = QLabel('Enable', self) pb_fbenbl = PyDMStateButton(self, self.dev_pref + ':FBCTRL') ld_coefsel = QLabel('Coeficient Set', self) cb_coefsel = PyDMEnumComboBox(self, self.dev_pref + ':SETSEL') ld_sftgain = QLabel('Shift Gain', self) sb_sftgain = PyDMSpinbox(self, self.dev_pref + ':SHIFTGAIN') sb_sftgain.showStepExponent = False ld_downspl = QLabel('Downsampling', self) sb_downspl = PyDMSpinbox(self, self.dev_pref + ':PROC_DS') sb_downspl.showStepExponent = False ld_satthrs = QLabel('Sat. Threshold [%]', self) sb_satthrs = PyDMSpinbox(self, self.dev_pref + ':SAT_THRESHOLD') sb_satthrs.showStepExponent = False lay_patt = QGridLayout() lay_patt.addWidget(ld_fbpatt, 0, 0) lay_patt.addWidget(le_fbpatt, 0, 1) lay_patt.addWidget(ld_cfpatt, 1, 0) lay_patt.addWidget(le_cfpatt, 1, 1) lay_patt.addWidget(ld_alter_inuse, 2, 0) lay_patt.addWidget(led_alter_inuse, 2, 1) lay = QGridLayout(gbox_settings) lay.addWidget(ld_fbenbl, 0, 1) lay.addWidget(pb_fbenbl, 0, 2) lay.addWidget(ld_downspl, 0, 4) lay.addWidget(sb_downspl, 0, 5) lay.addWidget(ld_coefsel, 1, 1) lay.addWidget(cb_coefsel, 1, 2) lay.addWidget(ld_sftgain, 1, 4) lay.addWidget(sb_sftgain, 1, 5) lay.addWidget(ld_satthrs, 2, 1) lay.addWidget(sb_satthrs, 2, 2) lay.addLayout(lay_patt, 4, 1, 1, 5) lay.setColumnStretch(0, 3) lay.setColumnStretch(6, 3) lay.setColumnStretch(3, 2) lay.setRowStretch(3, 2) lay.setRowStretch(5, 3) return gbox_settings
def getTempWidget(self, pv_name, temp_type): ''' Display the temperature label widget ''' device_name = self.getDeviceName(pv_name) if temp_type == 'Thrd': widget = PyDMSpinbox(parent=self, init_channel=device_name + pv_name + temp_type) widget.showStepExponent = False else: widget = PyDMLabel(parent=self, init_channel=device_name + pv_name + temp_type) widget.showUnits = True return widget
def _setupFeedbackSettings(self): ld_fbenbl = QLabel('Enable', self) pb_fbenbl = PyDMStateButton(self, self.dev_pref+':FBCTRL') ld_coefsel = QLabel('Coeficient Set', self) cb_coefsel = PyDMEnumComboBox(self, self.dev_pref+':SETSEL') ld_sftgain = QLabel('Shift Gain', self) sb_sftgain = PyDMSpinbox(self, self.dev_pref+':SHIFTGAIN') sb_sftgain.showStepExponent = False ld_downspl = QLabel('Downsampling', self) sb_downspl = PyDMSpinbox(self, self.dev_pref+':PROC_DS') sb_downspl.showStepExponent = False ld_satthrs = QLabel('Sat. Threshold [%]', self) sb_satthrs = PyDMSpinbox(self, self.dev_pref+':SAT_THRESHOLD') sb_satthrs.showStepExponent = False lay = QGridLayout() lay.addWidget(ld_fbenbl, 1, 0) lay.addWidget(pb_fbenbl, 1, 1) lay.addWidget(ld_coefsel, 2, 0) lay.addWidget(cb_coefsel, 2, 1) lay.addWidget(ld_sftgain, 3, 0) lay.addWidget(sb_sftgain, 3, 1) lay.addWidget(ld_downspl, 4, 0) lay.addWidget(sb_downspl, 4, 1) lay.addWidget(ld_satthrs, 5, 0) lay.addWidget(sb_satthrs, 5, 1) if self._is_resumed: wid = QWidget() wid.setLayout(lay) fb_label = QLabel( '<h4>Feedback Settings</h4>', self, alignment=Qt.AlignCenter) lay.setContentsMargins(0, 0, 0, 0) lay.setVerticalSpacing(12) lay.addWidget(fb_label, 0, 0, 1, 2) else: wid = QGroupBox('Feedback Settings', self) wid.setLayout(lay) ld_gensts = QLabel('Setup Status', self) led_gensts = SiriusLedAlert(self, self.dev_pref+':ERRSUM') lay.addWidget(ld_gensts, 6, 0) lay.addWidget(led_gensts, 6, 1) return wid
def _setupOtherControlsWidget(self): # # FBE ld_gpiomode = QLabel('Mode', self) cb_gpiomode = PyDMStateButton(self, self.dev_pref + ':FBELT_FAN_MODE') ld_gpiofanspd = QLabel('Fan Speed', self) lb_gpiofanspd = PyDMLabel(self, self.dev_pref + ':FBE_FANMON') lb_gpiofanspd.showUnits = True ld_gpiotempsp = QLabel('Temperature Setpoint', self) sb_gpiotempsp = PyDMSpinbox(self, self.dev_pref + ':FBELT_FAN_SETPT') sb_gpiotempsp.showStepExponent = False gbox_fbe = QGroupBox('Fan Control', self) lay_fbe = QGridLayout(gbox_fbe) lay_fbe.addWidget(ld_gpiomode, 0, 0) lay_fbe.addWidget(cb_gpiomode, 0, 1) lay_fbe.addWidget(ld_gpiofanspd, 1, 0) lay_fbe.addWidget(lb_gpiofanspd, 1, 1) lay_fbe.addWidget(ld_gpiotempsp, 2, 0) lay_fbe.addWidget(sb_gpiotempsp, 2, 1) return gbox_fbe
def _setupMonitorsWidget(self): # # ADC Average si_gpioadcav = MyScaleIndicator(self, self.dev_pref + ':CIC_MEAN') si_gpioadcav.setObjectName('si') si_gpioadcav.setStyleSheet('#si{min-height: 4em;}') gbox_adcav = QGroupBox('ADC Average', self) lay_adcav = QGridLayout(gbox_adcav) lay_adcav.addWidget(si_gpioadcav) # # Phase servo output si_gpioservodlt = MyScaleIndicator( self, self.dev_pref + ':FBELT_SERVO_DELTA') ld_gpioservomax = QLabel('<h4>Max</h4>', self, alignment=Qt.AlignCenter) sb_gpioservomax = PyDMSpinbox(self, self.dev_pref + ':FBELT_SERVO_MAXDELTA') sb_gpioservomax.showStepExponent = False gbox_phsout = QGroupBox('Phase Servo Output', self) lay_phsout = QGridLayout(gbox_phsout) lay_phsout.addWidget(si_gpioservodlt, 0, 0, 2, 1) lay_phsout.addWidget(ld_gpioservomax, 0, 1, alignment=Qt.AlignBottom) lay_phsout.addWidget(sb_gpioservomax, 1, 1, alignment=Qt.AlignTop) lay_phsout.setColumnStretch(0, 4) lay_phsout.setColumnStretch(1, 1) wid = QWidget() lay = QHBoxLayout(wid) lay.setContentsMargins(0, 0, 0, 0) lay.addWidget(gbox_adcav) lay.addWidget(gbox_phsout) lay.setStretch(0, 4) lay.setStretch(1, 5) return wid
def dataItem(self, channel, style): '''Get data channel info''' if style == 0: channel_info = PyDMLabel(parent=self, init_channel=self.prefix + self.device_name + ':' + channel) elif style in [1, 2, 4]: channel_info = PyDMSpinbox(parent=self, init_channel=self.prefix + self.device_name + ':' + channel) channel_info.showStepExponent = False else: channel_info = QLabel("Error", self) return channel_info
def _setupBCSettingsWidget(self): gbox_settings = QGroupBox('Bunch Cleaning Settings', self) ld_bcenbl = QLabel('Enable', self) cb_bcenbl = PyDMStateButton(self, self.dev_pref + ':CLEAN_ENABLE') ld_bcamp = QLabel('Amplitude', self) sb_bcamp = PyDMSpinbox(self, self.dev_pref + ':CLEAN_AMPL') sb_bcamp.showStepExponent = False lb_svamp = PyDMLabel(self, self.dev_pref + ':CLEAN_SAVE_AMPL') ld_bctune = QLabel('Tune', self) sb_bctune = PyDMSpinbox(self, self.dev_pref + ':CLEAN_TUNE') sb_bctune.showStepExponent = False lb_svfreq = PyDMLabel(self, self.dev_pref + ':CLEAN_SAVE_FREQ') ld_bcspan = QLabel('Span', self) le_bcspan = PyDMLineEdit(self, self.dev_pref + ':CLEAN_SPAN') lb_svspan = PyDMLabel(self, self.dev_pref + ':CLEAN_SAVE_SPAN') ld_bcper = QLabel('Period', self) le_bcper = PyDMLineEdit(self, self.dev_pref + ':CLEAN_PERIOD') lb_svper = PyDMLabel(self, self.dev_pref + ':CLEAN_SAVE_PERIOD') ld_bcpatt = QLabel('Mask', self) le_bcpatt = PyDMLineEdit(self, self.dev_pref + ':CLEAN_PATTERN') lay_clean = QGridLayout(gbox_settings) lay_clean.addWidget(QLabel('SAVED VALS.'), 0, 2) lay_clean.addWidget(ld_bcamp, 1, 0) lay_clean.addWidget(sb_bcamp, 1, 1) lay_clean.addWidget(lb_svamp, 1, 2) lay_clean.addWidget(ld_bctune, 2, 0) lay_clean.addWidget(sb_bctune, 2, 1) lay_clean.addWidget(lb_svfreq, 2, 2) lay_clean.addWidget(ld_bcspan, 3, 0) lay_clean.addWidget(le_bcspan, 3, 1) lay_clean.addWidget(lb_svspan, 3, 2) lay_clean.addWidget(ld_bcper, 4, 0) lay_clean.addWidget(le_bcper, 4, 1) lay_clean.addWidget(lb_svper, 4, 2) lay_clean.addWidget(ld_bcenbl, 5, 0) lay_clean.addWidget(cb_bcenbl, 5, 1) lay = QGridLayout() lay.addWidget(ld_bcpatt, 0, 0) lay.addWidget(le_bcpatt, 0, 1) lay_clean.addLayout(lay, 6, 0, 1, 3) return gbox_settings
def _setupPhaseServoLoopWidget(self): # # Phase Servo Loop ld_gpiolctrl = QLabel('Loop Ctrl', self) cb_gpiolctrl = PyDMStateButton(self, self.dev_pref + ':FBELT_SERVO_MODE') ld_gpiolsign = QLabel('Loop Sign', self) cb_gpiolsign = PyDMEnumComboBox(self, self.dev_pref + ':FBELT_SERVO_SIGN') ld_gpiogain = QLabel('Gain', self) sb_gpiogain = PyDMSpinbox(self, self.dev_pref + ':FBELT_SERVO_GAIN') sb_gpiogain.showStepExponent = False ld_gpiooff = QLabel('Offset', self) sb_gpiooff = PyDMSpinbox(self, self.dev_pref + ':FBELT_SERVO_OFFSET') sb_gpiooff.showStepExponent = False ld_gpiohtrk = QLabel('Hor. Trk.', self) cb_gpiohtrk = PyDMStateButton(self, self.dev_pref + ':FBELT_SERVO_X_TRACK') ld_gpiovtrk = QLabel('Vert. Trk.', self) cb_gpiovtrk = PyDMStateButton(self, self.dev_pref + ':FBELT_SERVO_Y_TRACK') gbox_phsloop = QGroupBox('Phase Servo Loop', self) lay_phsloop = QGridLayout(gbox_phsloop) lay_phsloop.addWidget(ld_gpiolctrl, 0, 0) lay_phsloop.addWidget(cb_gpiolctrl, 0, 1) lay_phsloop.addWidget(ld_gpiolsign, 1, 0) lay_phsloop.addWidget(cb_gpiolsign, 1, 1) lay_phsloop.addWidget(ld_gpiogain, 2, 0) lay_phsloop.addWidget(sb_gpiogain, 2, 1) lay_phsloop.addWidget(ld_gpiooff, 3, 0) lay_phsloop.addWidget(sb_gpiooff, 3, 1) lay_phsloop.addWidget(ld_gpiohtrk, 4, 0) lay_phsloop.addWidget(cb_gpiohtrk, 4, 1) lay_phsloop.addWidget(ld_gpiovtrk, 5, 0) lay_phsloop.addWidget(cb_gpiovtrk, 5, 1) return gbox_phsloop
def _setupMeasSettingsWidget(self, mode): if mode == 'Normal': prefix = self.dcct_prefix visible = True elif mode == 'Fast': prefix = self.dcct_prefix.substitute(propty_name=mode) visible = False l_smpcnt = QLabel('Sample Count: ', self) spinbox_SampleCnt = PyDMSpinbox( self, prefix.substitute(propty=prefix.propty_name + 'SampleCnt-SP')) spinbox_SampleCnt.showStepExponent = False label_SampleCnt = PyDMLabel( self, prefix.substitute(propty=prefix.propty_name + 'SampleCnt-RB')) hlay_smpcnt = QHBoxLayout() hlay_smpcnt.addWidget(spinbox_SampleCnt) hlay_smpcnt.addWidget(label_SampleCnt) l_measperiod = QLabel('Period [s]: ', self) spinbox_MeasPeriod = PyDMSpinbox( self, prefix.substitute(propty=prefix.propty_name + 'MeasPeriod-SP')) spinbox_MeasPeriod.showStepExponent = False label_MeasPeriod = PyDMLabel( self, prefix.substitute(propty=prefix.propty_name + 'MeasPeriod-RB')) hlay_measperiod = QHBoxLayout() hlay_measperiod.addWidget(spinbox_MeasPeriod) hlay_measperiod.addWidget(label_MeasPeriod) flay_modesettings = QFormLayout() flay_modesettings.addRow(l_smpcnt, hlay_smpcnt) flay_modesettings.addRow(l_measperiod, hlay_measperiod) flay_modesettings.setContentsMargins(0, 0, 0, 0) modesettings = QWidget(self) modesettings.setLayout(flay_modesettings) modesettings.setVisible(visible) return modesettings
def _mainControlsWidget(self): self._ld_phs = QLabel('Phase [mm]', self) self._sb_phs = PyDMSpinbox(self, self.dev_pref.substitute(propty='Phase-SP')) self._sb_phs.showStepExponent = False self._lb_phs = PyDMLabel(self, self.dev_pref.substitute(propty='Phase-Mon')) self._ld_kx = QLabel('Kx', self) self._sb_kx = PyDMSpinbox(self, self.dev_pref.substitute(propty='Kx-SP')) self._sb_kx.showStepExponent = False self._lb_kx = PyDMLabel(self, self.dev_pref.substitute(propty='Kx-Mon')) self._ld_phsspd = QLabel('Phase Speed\n[mm/s]', self) self._sb_phsspd = PyDMSpinbox( self, self.dev_pref.substitute(propty='PhaseSpeed-SP')) self._sb_phsspd.showStepExponent = False self._lb_phsspd = PyDMLabel( self, self.dev_pref.substitute(propty='PhaseSpeed-Mon')) self._ld_ismov = QLabel('Motion', self) self._pb_start = PyDMPushButton(self, label='', icon=qta.icon('fa5s.play')) self._pb_start.setToolTip( 'Start automatic motion towards previously entered setpoint.') self._pb_start.channel = self.dev_pref.substitute(propty='DevCtrl-Cmd') self._pb_start.pressValue = 3 # Start self._pb_start.setObjectName('Start') self._pb_start.setStyleSheet( '#Start{min-width:30px; max-width:30px; icon-size:25px;}') self._pb_stop = PyDMPushButton(self, label='', icon=qta.icon('fa5s.stop')) self._pb_stop.setToolTip('Stop all motion, lock all brakes.') self._pb_stop.channel = self.dev_pref.substitute(propty='DevCtrl-Cmd') self._pb_stop.pressValue = 1 # Stop self._pb_stop.setObjectName('Stop') self._pb_stop.setStyleSheet( '#Stop{min-width:30px; max-width:30px; icon-size:25px;}') self._led_ismov = SiriusLedState(self, self.dev_pref + ':Moving-Mon') self._led_motenbl = SiriusLedState( self, self.dev_pref.substitute(propty='MotorsEnbld-Mon')) hbox_motion = QHBoxLayout() hbox_motion.setSpacing(15) hbox_motion.addWidget(self._pb_start) hbox_motion.addWidget(self._pb_stop) hbox_motion.addWidget(self._led_ismov) hbox_motion.addWidget(self._led_motenbl) gbox_main = QGroupBox('Main Controls', self) lay_main = QGridLayout(gbox_main) lay_main.addWidget(self._ld_phs, 0, 0) lay_main.addWidget(self._sb_phs, 0, 1) lay_main.addWidget(self._lb_phs, 0, 2) lay_main.addWidget(self._ld_kx, 1, 0) lay_main.addWidget(self._sb_kx, 1, 1) lay_main.addWidget(self._lb_kx, 1, 2) lay_main.addWidget(self._ld_phsspd, 2, 0) lay_main.addWidget(self._sb_phsspd, 2, 1) lay_main.addWidget(self._lb_phsspd, 2, 2) lay_main.addItem(QSpacerItem(1, 10, QSzPlcy.Ignored, QSzPlcy.Fixed), 3, 0) lay_main.addWidget(self._ld_ismov, 4, 0) lay_main.addLayout(hbox_motion, 4, 1, 1, 2) return gbox_main
def _setupUi(self): self._lb_bl = QLabel('<h4>' + self._beamline + '</h4>', self, alignment=Qt.AlignCenter) self._pb_dev = QPushButton(self._device, self) connect_newprocess( self._pb_dev, ['sirius-hla-si-id-control.py', '-dev', self._device]) self._sb_phs = PyDMSpinbox(self, self.dev_pref.substitute(propty='Phase-SP')) self._sb_phs.showStepExponent = False self._lb_phs = PyDMLabel(self, self.dev_pref.substitute(propty='Phase-Mon')) self._sb_kx = PyDMSpinbox(self, self.dev_pref.substitute(propty='Kx-SP')) self._sb_kx.showStepExponent = False self._lb_kx = PyDMLabel(self, self.dev_pref.substitute(propty='Kx-Mon')) self._sb_phsspd = PyDMSpinbox( self, self.dev_pref.substitute(propty='PhaseSpeed-SP')) self._sb_phsspd.showStepExponent = False self._lb_phsspd = PyDMLabel( self, self.dev_pref.substitute(propty='PhaseSpeed-Mon')) self._pb_start = PyDMPushButton(self, label='', icon=qta.icon('fa5s.play')) self._pb_start.setToolTip( 'Start automatic motion towards previously entered setpoint.') self._pb_start.channel = self.dev_pref.substitute(propty='DevCtrl-Cmd') self._pb_start.pressValue = 3 # Start self._pb_start.setObjectName('Start') self._pb_start.setStyleSheet( '#Start{min-width:30px; max-width:30px; icon-size:25px;}') self._pb_stop = PyDMPushButton(self, label='', icon=qta.icon('fa5s.stop')) self._pb_stop.setToolTip('Stop all motion, lock all brakes.') self._pb_stop.channel = self.dev_pref.substitute(propty='DevCtrl-Cmd') self._pb_stop.pressValue = 1 # Stop self._pb_stop.setObjectName('Stop') self._pb_stop.setStyleSheet( '#Stop{min-width:30px; max-width:30px; icon-size:25px;}') self._led_ismov = SiriusLedState( self, self.dev_pref.substitute(propty='Moving-Mon')) self._led_status = PyDMLedMultiChannel( self, { self.dev_pref.substitute(propty='Alarm-Mon'): 0, self.dev_pref.substitute(propty='IntlkInStop-Mon'): 0, self.dev_pref.substitute(propty='IntlkInEOpnGap-Mon'): 0, self.dev_pref.substitute(propty='IntlkOutPwrEnbld-Mon'): 1, self.dev_pref.substitute(propty='IsOperational-Mon'): 1 }) self._sb_blenbl = PyDMStateButton( self, self.dev_pref.substitute(propty='BeamLineCtrlEnbl-Sel')) self._led_blenbl = SiriusLedState( self, self.dev_pref.substitute(propty='BeamLineCtrlEnbl-Sts')) self._led_blmon = SiriusLedState( self, self.dev_pref.substitute(propty='BeamLineCtrl-Mon')) self.widgets = { 'Beamline': ([ self._lb_bl, ], 'v'), 'Device': ([ self._pb_dev, ], 'v'), 'Alarms': ([ self._led_status, ], 'v'), 'Phase': ([self._sb_phs, self._lb_phs], 'v'), 'Kx': ([self._sb_kx, self._lb_kx], 'v'), 'Phase Speed': ([self._sb_phsspd, self._lb_phsspd], 'v'), 'Start': ([ self._pb_start, ], 'v'), 'Stop': ([ self._pb_stop, ], 'v'), 'Moving': ([ self._led_ismov, ], 'v'), 'BeamLine Enable': ([self._sb_blenbl, self._led_blenbl], 'h'), 'Beamline Control': ([ self._led_blmon, ], 'v'), } layout = QHBoxLayout(self) for name, size in self.widgets_widths: objname = name.replace(' ', '') group = self.widgets[name] items, ori = group widget = QWidget(self) lay = QVBoxLayout() if ori == 'v' else QHBoxLayout() lay.setContentsMargins(0, 0, 0, 0) lay.setAlignment(Qt.AlignCenter) lay.setSpacing(0) widget.setLayout(lay) for item in items: lay.addWidget(item) widget.setObjectName(objname) widget.setStyleSheet( '#' + objname + '{{min-width:{0}em; max-width:{0}em;}}'.format(str(size))) layout.addWidget(widget)
def _setupUi(self): # status label_status = QLabel('Status: ', self, alignment=Qt.AlignRight | Qt.AlignVCenter) channels2values = { self.device.substitute(propty='ForceComplete-Mon'): 1, self.device.substitute(propty='NegativeDoneMov-Mon'): 1, self.device.substitute(propty='PositiveDoneMov-Mon'): 1 } self.multiled_status = PyDMLedMultiChannel(self, channels2values) self.multiled_status.setStyleSheet('max-width: 1.29em;') self.pb_details = QPushButton(qta.icon('fa5s.ellipsis-h'), '', self) self.pb_details.setToolTip('Open details') self.pb_details.setObjectName('detail') self.pb_details.setStyleSheet( "#detail{min-width:25px; max-width:25px; icon-size:20px;}") util.connect_window(self.pb_details, _DiffCtrlDetails, parent=self, prefix=self.prefix, device=self.device) self.lb_descCtrl1 = QLabel('', self, alignment=Qt.AlignRight | Qt.AlignVCenter) self.sb_Ctrl1 = PyDMSpinbox(self) self.sb_Ctrl1.showStepExponent = False self.lb_Ctrl1 = PyDMLabel(self) self.lb_descCtrl2 = QLabel('', self, alignment=Qt.AlignRight | Qt.AlignVCenter) self.sb_Ctrl2 = PyDMSpinbox(self) self.sb_Ctrl2.showStepExponent = False self.lb_Ctrl2 = PyDMLabel(self) self.pb_open = PyDMPushButton( parent=self, label='Open', pressValue=1, init_channel=self.device.substitute(propty='Home-Cmd')) tmp_file = _substitute_in_file( _os.path.abspath(_os.path.dirname(__file__)) + '/ui_as_ap_dev' + self.orientation.lower() + 'mon.ui', {'PREFIX': self.prefix}) self.dev_widget = loadUi(tmp_file) self.dev_widget.setObjectName('dev') self.dev_widget_scrarea = QScrollArea() self.dev_widget_scrarea.setObjectName('scrarea') self.dev_widget_scrarea.setStyleSheet( '#scrarea{background-color: transparent; max-width: 15em;}' '#dev{background-color:transparent;}') self.dev_widget_scrarea.setWidget(self.dev_widget) lay = QGridLayout(self) lay.setAlignment(Qt.AlignTop) lay.addWidget(label_status, 0, 0) lay.addWidget(self.multiled_status, 0, 1) lay.addWidget(self.pb_details, 0, 2, alignment=Qt.AlignRight) lay.addWidget(self.lb_descCtrl1, 1, 0) lay.addWidget(self.sb_Ctrl1, 1, 1) lay.addWidget(self.lb_Ctrl1, 1, 2) lay.addWidget(self.lb_descCtrl2, 2, 0) lay.addWidget(self.sb_Ctrl2, 2, 1) lay.addWidget(self.lb_Ctrl2, 2, 2) lay.addWidget(self.pb_open, 3, 1, 1, 2) lay.addWidget(self.dev_widget_scrarea, 0, 3, 4, 1)
def _setupMeasSettingsWidget(self, mode): if mode == 'Normal': prefix = self.dcct_prefix visible = True elif mode == 'Fast': prefix = self.dcct_prefix.substitute(propty_name=mode) visible = False gbox_modesettings = QGroupBox(mode + ' Measurement Mode Settings', self) l_smpcnt = QLabel('Sample Count: ', self) spinbox_SampleCnt = PyDMSpinbox( self, prefix.substitute(propty=prefix.propty_name + 'SampleCnt-SP')) spinbox_SampleCnt.showStepExponent = False label_SampleCnt = PyDMLabel( self, prefix.substitute(propty=prefix.propty_name + 'SampleCnt-RB')) hlay_smpcnt = QHBoxLayout() hlay_smpcnt.addWidget(spinbox_SampleCnt) hlay_smpcnt.addWidget(label_SampleCnt) l_measperiod = QLabel('Period [s]: ', self) spinbox_MeasPeriod = PyDMSpinbox( self, prefix.substitute(propty=prefix.propty_name + 'MeasPeriod-SP')) spinbox_MeasPeriod.showStepExponent = False label_MeasPeriod = PyDMLabel( self, prefix.substitute(propty=prefix.propty_name + 'MeasPeriod-RB')) hlay_measperiod = QHBoxLayout() hlay_measperiod.addWidget(spinbox_MeasPeriod) hlay_measperiod.addWidget(label_MeasPeriod) l_measupdateperiod = QLabel('Measured Period [s]: ', self) label_MeasUpdatePeriod = PyDMLabel( self, self.dcct_prefix.substitute(propty='MeasUpdatePeriod-Mon')) l_imped = QLabel('Impedance: ', self) enumcombobox_Imped = PyDMEnumComboBox( self, prefix.substitute(propty=prefix.propty_name + 'Imped-Sel')) label_Imped = PyDMLabel( self, prefix.substitute(propty=prefix.propty_name + 'Imped-Sts')) hlay_imped = QHBoxLayout() hlay_imped.addWidget(enumcombobox_Imped) hlay_imped.addWidget(label_Imped) l_offset = QLabel('Relative Offset Enable: ', self) statebutton_RelEnbl = PyDMStateButton( self, prefix.substitute(propty=prefix.propty_name + 'RelEnbl-Sel')) statebutton_RelEnbl.shape = 1 statebutton_RelEnbl.setStyleSheet('min-width:6em; max-width:6em;') label_RelEnbl = PyDMLabel( self, prefix.substitute(propty=prefix.propty_name + 'RelEnbl-Sts')) hlay_offset = QHBoxLayout() hlay_offset.addWidget(statebutton_RelEnbl) hlay_offset.addWidget(label_RelEnbl) l_rellvl = QLabel('Relative Offset Level [V]: ', self) spinbox_RelLvl = PyDMSpinbox( self, prefix.substitute(propty=prefix.propty_name + 'RelLvl-SP')) spinbox_RelLvl.showStepExponent = False label_RelLvl = PyDMLabel( self, prefix.substitute(propty=prefix.propty_name + 'RelLvl-RB')) label_RelLvl.precisionFromPV = False label_RelLvl.precision = 9 pushbutton_RelAcq = PyDMPushButton( parent=self, label='Acquire Offset', pressValue=1, init_channel=prefix.substitute(propty=prefix.propty_name + 'RelAcq-Cmd')) pushbutton_RelAcq.setAutoDefault(False) pushbutton_RelAcq.setDefault(False) hlay_rellvl = QHBoxLayout() hlay_rellvl.addWidget(spinbox_RelLvl) hlay_rellvl.addWidget(label_RelLvl) hlay_rellvl.addWidget(pushbutton_RelAcq) flay_modesettings = QFormLayout() flay_modesettings.setLabelAlignment(Qt.AlignRight) flay_modesettings.setFormAlignment(Qt.AlignHCenter) flay_modesettings.addRow(l_smpcnt, hlay_smpcnt) flay_modesettings.addRow(l_measperiod, hlay_measperiod) flay_modesettings.addRow(l_measupdateperiod, label_MeasUpdatePeriod) flay_modesettings.addRow(l_imped, hlay_imped) flay_modesettings.addRow(l_offset, hlay_offset) flay_modesettings.addRow(l_rellvl, hlay_rellvl) if mode == 'Normal': l_linesync = QLabel('Line Synchronization: ', self) statebutton_LineSync = PyDMStateButton( self, prefix.substitute(propty=prefix.propty_name + 'LineSync-Sel')) statebutton_LineSync.shape = 1 statebutton_LineSync.setStyleSheet('min-width:6em; max-width:6em;') label_LineSync = PyDMLabel( self, prefix.substitute(propty=prefix.propty_name + 'LineSync-Sts')) hlay_linesync = QHBoxLayout() hlay_linesync.addWidget(statebutton_LineSync) hlay_linesync.addWidget(label_LineSync) label_avg = QLabel('<h4>Average Filter</h4>', self) l_avgenbl = QLabel('Enable: ', self) statebutton_AvgFilterEnbl = PyDMStateButton( self, prefix.substitute(propty=prefix.propty_name + 'AvgFilterEnbl-Sel')) statebutton_AvgFilterEnbl.shape = 1 label_AvgFilterEnbl = PyDMLabel( self, prefix.substitute(propty=prefix.propty_name + 'AvgFilterEnbl-Sts')) hlay_avgenbl = QHBoxLayout() hlay_avgenbl.addWidget(statebutton_AvgFilterEnbl) hlay_avgenbl.addWidget(label_AvgFilterEnbl) l_avgcnt = QLabel('Samples: ', self) spinbox_AvgFilterCount = PyDMSpinbox( self, prefix.substitute(propty=prefix.propty_name + 'AvgFilterCnt-SP')) spinbox_AvgFilterCount.showStepExponent = False label_AvgFilterCount = PyDMLabel( self, prefix.substitute(propty=prefix.propty_name + 'AvgFilterCnt-RB')) hlay_avgcnt = QHBoxLayout() hlay_avgcnt.addWidget(spinbox_AvgFilterCount) hlay_avgcnt.addWidget(label_AvgFilterCount) l_avgtyp = QLabel('Type: ', self) enumcombobox_AvgFilterTyp = PyDMEnumComboBox( self, self.dcct_prefix.substitute(propty='AvgFilterTyp-Sel')) label_AvgFilterTyp = PyDMLabel( self, self.dcct_prefix.substitute(propty='AvgFilterTyp-Sts')) hlay_avgtyp = QHBoxLayout() hlay_avgtyp.addWidget(enumcombobox_AvgFilterTyp) hlay_avgtyp.addWidget(label_AvgFilterTyp) l_avgwin = QLabel('Noise window size [%]: ', self) spinbox_AvgFilterWind = PyDMSpinbox( self, prefix.substitute(propty=prefix.propty_name + 'AvgFilterWind-SP')) spinbox_AvgFilterWind.showStepExponent = False label_AvgFilterWind = PyDMLabel( self, prefix.substitute(propty=prefix.propty_name + 'AvgFilterWind-RB')) hlay_avgwin = QHBoxLayout() hlay_avgwin.addWidget(spinbox_AvgFilterWind) hlay_avgwin.addWidget(label_AvgFilterWind) flay_modesettings.addRow(l_linesync, hlay_linesync) flay_modesettings.addRow(QLabel('')) flay_modesettings.addRow(label_avg) flay_modesettings.addRow(l_avgenbl, hlay_avgenbl) flay_modesettings.addRow(l_avgcnt, hlay_avgcnt) flay_modesettings.addRow(l_avgtyp, hlay_avgtyp) flay_modesettings.addRow(l_avgwin, hlay_avgwin) gbox_modesettings.setLayout(flay_modesettings) gbox_modesettings.setVisible(visible) gbox_modesettings.setStyleSheet(""" PyDMSpinbox, PyDMLabel{ min-width:6em; max-width:6em; qproperty-alignment: AlignCenter;} PyDMLedMultiChannel, PyDMStateButton, PyDMEnumComboBox{ min-width:6em; max-width:6em;}""") return gbox_modesettings
def _setupWaveformsWidget(self): gp_bunsig = WfmGraph(self) gp_bunsig.setPlotTitle('Bunch Signal') gp_bunsig.getAxis('bottom').setLabel('Time (ms)') gp_bunsig.getAxis('left').setLabel('CNT') gp_bunsig.add_scatter_curve(ychannel=self.dev_pref + ':SB_RAW', xchannel=self.dev_pref + ':SB_TSC', color=QColor('blue'), lineStyle=Qt.SolidLine, nchannel=self.dev_pref + ':SB_RAW_SAMPLES') gp_mag = WfmGraph(self) gp_mag.setPlotTitle('Magnitude') gp_mag.getAxis('bottom').setLabel('Frequency (kHz)') gp_mag.getAxis('left').setLabel('dB') gp_mag.add_scatter_curve(ychannel=self.dev_pref + ':SB_MAG', xchannel=self.dev_pref + ':SB_FREQ', color=QColor('blue'), lineStyle=Qt.SolidLine) gp_mag.add_marker(self.dev_pref + ':SB_PEAKFREQ1', self.dev_pref + ':SB_PEAK1', name='Mag', color=QColor('magenta'), symbol='o') gp_phs = WfmGraph(self) gp_phs.setPlotTitle('Phase') gp_phs.getAxis('bottom').setLabel('Frequency (kHz)') gp_phs.getAxis('left').setLabel('deg') gp_phs.add_scatter_curve(ychannel=self.dev_pref + ':SB_PHASE', xchannel=self.dev_pref + ':SB_FREQ', color=QColor('blue'), lineStyle=Qt.SolidLine) gp_phs.add_marker(self.dev_pref + ':SB_PEAKFREQ1', self.dev_pref + ':SB_PHASE1', name='Phs', color=QColor('magenta'), symbol='o') ld_tfenbl = QLabel('Transfer Function Enable', self) cb_tfenbl = PyDMEnumComboBox(self, self.dev_pref + ':SB_TF_ENABLE') ld_nrptsfft = QLabel('Number of points for FFT/Window', self) cb_nrptsfft = PyDMEnumComboBox(self, self.dev_pref + ':SB_NFFT') ld_fftovlap = QLabel('Overlap (Autolimited to NFFT/2)', self) cb_fftovlap = PyDMEnumComboBox(self, self.dev_pref + ':SB_NOVERLAP') ld_delaycal = QLabel('Delay Cal [ns]', self) le_delaycal = PyDMLineEdit(self, self.dev_pref + ':SB_DEL_CAL') ld_avg = QLabel('Averaging', self) sb_avg = PyDMSpinbox(self, self.dev_pref + ':SB_SP_AVG') sb_avg.showStepExponent = False gbox_fftsett = QGroupBox(self) lay_fftsett = QGridLayout(gbox_fftsett) lay_fftsett.addWidget(ld_tfenbl, 0, 0) lay_fftsett.addWidget(cb_tfenbl, 0, 1) lay_fftsett.addWidget(ld_nrptsfft, 1, 0) lay_fftsett.addWidget(cb_nrptsfft, 1, 1) lay_fftsett.addWidget(ld_fftovlap, 2, 0) lay_fftsett.addWidget(cb_fftovlap, 2, 1) lay_fftsett.addWidget(ld_delaycal, 3, 0) lay_fftsett.addWidget(le_delaycal, 3, 1) lay_fftsett.addWidget(ld_avg, 4, 0) lay_fftsett.addWidget(sb_avg, 4, 1) lay_graph = QGridLayout() lay_graph.addWidget(gp_bunsig, 0, 0) lay_graph.addWidget(gp_mag, 0, 1) lay_graph.addWidget(gbox_fftsett, 1, 0) lay_graph.addWidget(gp_phs, 1, 1) ld_acqenbl = QLabel('Acq. Enable', self) cb_acqenbl = PyDMStateButton(self, self.dev_pref + ':SB_ACQ_EN') ld_acqsing = QLabel('Acq. Mode', self) cb_acqsing = PyDMEnumComboBox(self, self.dev_pref + ':SB_ACQ_SINGLE') ld_mean = QLabel('Mean', self, alignment=Qt.AlignCenter) lb_mean = PyDMLabel(self, self.dev_pref + ':SB_MEANVAL') ld_rms = QLabel('RMS', self, alignment=Qt.AlignCenter) lb_rms = PyDMLabel(self, self.dev_pref + ':SB_RMSVAL') ld_ampp2p = QLabel('Amp P-P', self, alignment=Qt.AlignCenter) lb_ampp2p = PyDMLabel(self, self.dev_pref + ':SB_AMP_PP') ld_bunid = QLabel('Bunch ID', self, alignment=Qt.AlignCenter) lb_bunid = PyDMLabel(self, self.dev_pref + ':SB_RAW_BUNCH_ID') gbox_acqctrl = QGroupBox('Acquisition control', self) lay_acqctrl = QGridLayout(gbox_acqctrl) lay_acqctrl.addWidget(ld_acqenbl, 0, 0) lay_acqctrl.addWidget(cb_acqenbl, 0, 1) lay_acqctrl.addWidget(ld_acqsing, 1, 0) lay_acqctrl.addWidget(cb_acqsing, 1, 1) lay_acqctrl.addItem(QSpacerItem(15, 1, QSzPlcy.Fixed, QSzPlcy.Ignored), 0, 2, 2, 1) lay_acqctrl.addWidget(ld_mean, 0, 3) lay_acqctrl.addWidget(lb_mean, 0, 4) lay_acqctrl.addWidget(ld_ampp2p, 0, 5) lay_acqctrl.addWidget(lb_ampp2p, 0, 6) lay_acqctrl.addWidget(ld_rms, 1, 3) lay_acqctrl.addWidget(lb_rms, 1, 4) lay_acqctrl.addWidget(ld_bunid, 1, 5) lay_acqctrl.addWidget(lb_bunid, 1, 6) # Marker ld_mkspan = QLabel('Span (kHz)', self, alignment=Qt.AlignCenter) le_mklow = PyDMLineEdit(self, self.dev_pref + ':SB_SP_LOW1') le_mkhigh = PyDMLineEdit(self, self.dev_pref + ':SB_SP_HIGH1') ld_mkmode = QLabel('Mode', self, alignment=Qt.AlignCenter) cb_mkmode = PyDMEnumComboBox(self, self.dev_pref + ':SB_SP_SEARCH1') ld_mkfreq = QLabel('Frequency', self, alignment=Qt.AlignCenter) lb_mkfreq = PyDMLabel(self, self.dev_pref + ':SB_PEAKFREQ1') lb_mkfreq.showUnits = True ld_mktune = QLabel('Tune', self, alignment=Qt.AlignCenter) lb_mktune = PyDMLabel(self, self.dev_pref + ':SB_PEAKTUNE1') lb_mktune.showUnits = True ld_mkmag = QLabel('Magnitude', self, alignment=Qt.AlignCenter) lb_mkmag = PyDMLabel(self, self.dev_pref + ':SB_PEAK1') lb_mkmag.showUnits = True ld_mkphs = QLabel('Phase', self, alignment=Qt.AlignCenter) lb_mkphs = PyDMLabel(self, self.dev_pref + ':SB_PHASE1') lb_mkphs.showUnits = True lay = QGridLayout() lay.addWidget(ld_mkfreq, 1, 0) lay.addWidget(lb_mkfreq, 2, 0) lay.addWidget(ld_mktune, 1, 1) lay.addWidget(lb_mktune, 2, 1) lay.addWidget(ld_mkmag, 1, 2) lay.addWidget(lb_mkmag, 2, 2) lay.addWidget(ld_mkphs, 1, 3) lay.addWidget(lb_mkphs, 2, 3) lay.setRowStretch(0, 2) lay.setRowStretch(3, 2) gbox_mk = QGroupBox('Marker', self) lay_mk = QGridLayout(gbox_mk) lay_mk.addWidget(ld_mkmode, 0, 0) lay_mk.addWidget(cb_mkmode, 0, 1) lay_mk.addWidget(ld_mkspan, 1, 0, 1, 2) lay_mk.addWidget(le_mklow, 2, 0) lay_mk.addWidget(le_mkhigh, 2, 1) lay_mk.addLayout(lay, 0, 2, 3, 1) wid = QWidget() lay = QGridLayout(wid) lay.addLayout(lay_graph, 0, 0, 1, 2) lay.addWidget(gbox_acqctrl, 1, 0) lay.addWidget(gbox_mk, 1, 1) lay.setRowStretch(0, 5) lay.setRowStretch(1, 1) lay.setColumnStretch(0, 1) lay.setColumnStretch(1, 1) return wid
def _setupUi(self): gp_mode = WfmGraph(self) gp_mode.setStyleSheet('min-height: 10em;') gp_mode.setPlotTitle('Modal Amplitudes') gp_mode.getAxis('bottom').setLabel('Mode Number') gp_mode.getAxis('left').setLabel('CNT') gp_mode.add_scatter_curve(ychannel=self.prop_pref + 'MD_MODES', color=QColor('red'), lineStyle=Qt.SolidLine) gp_spec = WfmGraph(self) gp_spec.setStyleSheet('min-height: 10em;') gp_spec.setPlotTitle('Single Mode Spectrum') gp_spec.getAxis('bottom').setLabel('Frequency (kHz)') gp_spec.getAxis('left').setLabel('CNT') gp_spec.add_scatter_curve(ychannel=self.prop_pref + 'MD_SPEC', xchannel=self.prop_pref + 'FREQ', color=QColor('blue'), lineStyle=Qt.SolidLine) gp_spec.add_marker(name='Marker', xchannel=self.prop_pref + 'MD_PEAKFREQ', ychannel=self.prop_pref + 'MD_PEAK', color=QColor('red'), symbol='o') ld_enbl = QLabel('Acq. Enable', self) cb_enbl = PyDMStateButton(self, self.prop_pref + 'MD_ENABLE') ld_sel = QLabel('Acq. Mode', self) cb_sel = PyDMEnumComboBox(self, self.prop_pref + 'MD_SMODE') ld_sbnd = QLabel('Sideband', self, alignment=Qt.AlignRight) sb_sbnd = PyDMSpinbox(self, self.prop_pref + 'MD_FTUNE') sb_sbnd.showStepExponent = False sb_sbnd.showUnits = True ld_span = QLabel('Span', self, alignment=Qt.AlignRight) sb_span = PyDMSpinbox(self, self.prop_pref + 'MD_FSPAN') sb_span.showStepExponent = False sb_span.showUnits = True ld_mode = QLabel('Mode', self, alignment=Qt.AlignRight) sb_mode = PyDMSpinbox(self, self.prop_pref + 'MD_MSEL') sb_mode.showStepExponent = False ld_avg = QLabel('Sample Avg', self, alignment=Qt.AlignRight) sb_avg = PyDMSpinbox(self, self.prop_pref + 'MD_AVG') sb_avg.showStepExponent = False gb_ctrl = QGroupBox('Acquisition control', self) lay_ctrl = QGridLayout(gb_ctrl) lay_ctrl.addWidget(ld_enbl, 0, 0) lay_ctrl.addWidget(cb_enbl, 1, 0) lay_ctrl.addWidget(ld_sel, 2, 0) lay_ctrl.addWidget(cb_sel, 3, 0) lay_ctrl.addWidget(ld_sbnd, 0, 1) lay_ctrl.addWidget(sb_sbnd, 0, 2) lay_ctrl.addWidget(ld_span, 1, 1) lay_ctrl.addWidget(sb_span, 1, 2) lay_ctrl.addWidget(ld_mode, 2, 1) lay_ctrl.addWidget(sb_mode, 2, 2) lay_ctrl.addWidget(ld_avg, 3, 1) lay_ctrl.addWidget(sb_avg, 3, 2) # Markers ld_rng = QLabel('Range (kHz)', self, alignment=Qt.AlignCenter) le_low = PyDMLineEdit(self, self.prop_pref + 'MD_SP_LOW') le_high = PyDMLineEdit(self, self.prop_pref + 'MD_SP_HIGH') cb_mode = PyDMEnumComboBox(self, self.prop_pref + 'MD_SP_SEARCH') ld_mnum = QLabel('Mode #', self, alignment=Qt.AlignRight) lb_mnum = PyDMLabel(self, self.prop_pref + 'MD_MAXMODE') ld_mamp = QLabel('Mode Amp.', self, alignment=Qt.AlignRight) lb_mamp = PyDMLabel(self, self.prop_pref + 'MD_MAXVAL') ld_peak = QLabel('Value', self, alignment=Qt.AlignRight) lb_peak = PyDMLabel(self, self.prop_pref + 'MD_PEAK') ld_pfrq = QLabel('Freq', self, alignment=Qt.AlignRight) lb_pfrq = PyDMLabel(self, self.prop_pref + 'MD_PEAKFREQ') lb_pfrq.showUnits = True ld_tune = QLabel('Tune', self, alignment=Qt.AlignRight) lb_tune = PyDMLabel(self, self.prop_pref + 'MD_PEAKTUNE') gb_mark = QGroupBox('Marker', self) lay_mark = QGridLayout(gb_mark) lay_mark.addWidget(ld_rng, 0, 0) lay_mark.addWidget(le_low, 1, 0) lay_mark.addWidget(le_high, 2, 0) lay_mark.addWidget(cb_mode, 3, 0) lay_mark.addWidget(ld_mnum, 0, 1) lay_mark.addWidget(lb_mnum, 0, 2) lay_mark.addWidget(ld_mamp, 1, 1) lay_mark.addWidget(lb_mamp, 1, 2) lay_mark.addWidget(ld_peak, 2, 1) lay_mark.addWidget(lb_peak, 2, 2) lay_mark.addWidget(ld_pfrq, 3, 1) lay_mark.addWidget(lb_pfrq, 3, 2) lay_mark.addWidget(ld_tune, 4, 1) lay_mark.addWidget(lb_tune, 4, 2) ld_name = QLabel('<h2>' + self.acq_type + ' Modal Analysis</h2>', self, alignment=Qt.AlignCenter) self.setLayout(QHBoxLayout()) wid = QWidget(self) self.layout().addWidget(wid) set_bbb_color(wid, self._device) lay = QGridLayout(wid) lay.addWidget(ld_name, 0, 0, 1, 2) lay.addWidget(gp_mode, 1, 0, 1, 2) lay.addWidget(gp_spec, 2, 0, 1, 2) lay.addWidget(gb_ctrl, 3, 0) lay.addWidget(gb_mark, 3, 1) lay.setRowStretch(1, 2) lay.setRowStretch(2, 2)
def _setupControlsWidget(self): ld_growenbl = QLabel('Grow/Damp Enable', self) cb_growenbl = PyDMEnumComboBox(self, self.dev_pref + ':GDEN') ld_down = QLabel('Rec. Downsample ', self) sb_down = PyDMSpinbox(self, self.dev_pref + ':' + self.TYPE + '_REC_DS') sb_down.showStepExponent = False ld_rawdata = QLabel('Raw Data', self) cb_rawdata = PyDMStateButton(self, self.dev_pref + ':' + self.TYPE + '_DUMP') ld_acqtime = QLabel('Acquisition Time', self) sb_acqtime = PyDMSpinbox(self, self.dev_pref + ':' + self.TYPE + '_ACQTIME') sb_acqtime.showStepExponent = False sb_acqtime.showUnits = True ld_holdoff = QLabel('Hold-Off Time', self) sb_holdoff = PyDMSpinbox(self, self.dev_pref + ':' + self.TYPE + '_HOLDTIME') sb_holdoff.showStepExponent = False sb_holdoff.showUnits = True ld_posttrg = QLabel('Post Trigger', self) sb_posttrg = PyDMSpinbox(self, self.dev_pref + ':' + self.TYPE + '_POSTTIME') sb_posttrg.showStepExponent = False sb_posttrg.showUnits = True fr_posttrg = SiriusFrame( self, self.dev_pref + ':' + self.TYPE + '_POSTREG_SUBWR') fr_posttrg.add_widget(sb_posttrg) ld_growtime = QLabel('Growth Time', self) sb_growtime = PyDMSpinbox(self, self.dev_pref + ':' + self.TYPE + '_GDTIME') sb_growtime.showStepExponent = False sb_growtime.showUnits = True fr_growtime = SiriusFrame( self, self.dev_pref + ':' + self.TYPE + '_GDREG_SUBWR') fr_growtime.add_widget(sb_growtime) ld_acqlen = QLabel('Acquisition Length', self) lb_acqlen = PyDMLabel(self, self.dev_pref + ':' + self.TYPE + '_ACQ_TURNS') lb_acqlen.showUnits = True ld_psttrglen = QLabel('Post Trigger Length', self) lb_psttrglen = PyDMLabel( self, self.dev_pref + ':' + self.TYPE + '_POST_TURNS') lb_psttrglen.showUnits = True bt_modal = QPushButton('Modal Analysis', self) window = create_window_from_widget(_BbBModalAnalysis, title='SRAM Modal Analysis', icon=get_bbb_icon(), is_main=True) connect_window(bt_modal, window, self, prefix=self._prefix, device=self._device, acq_type=self.TYPE) gbox_dtacq = QGroupBox('Data Acquisition', self) lay_dtacq = QGridLayout(gbox_dtacq) lay_dtacq.addWidget(ld_growenbl, 0, 0) lay_dtacq.addWidget(cb_growenbl, 0, 1) lay_dtacq.addWidget(ld_down, 1, 0) lay_dtacq.addWidget(sb_down, 1, 1) lay_dtacq.addWidget(ld_rawdata, 2, 0) lay_dtacq.addWidget(cb_rawdata, 2, 1) lay_dtacq.addWidget(ld_acqtime, 3, 0) lay_dtacq.addWidget(sb_acqtime, 3, 1) lay_dtacq.addWidget(ld_holdoff, 4, 0) lay_dtacq.addWidget(sb_holdoff, 4, 1) lay_dtacq.addWidget(ld_posttrg, 5, 0) lay_dtacq.addWidget(fr_posttrg, 5, 1) lay_dtacq.addWidget(ld_growtime, 6, 0) lay_dtacq.addWidget(fr_growtime, 6, 1) lay_dtacq.addWidget(ld_acqlen, 7, 0) lay_dtacq.addWidget(lb_acqlen, 7, 1) lay_dtacq.addWidget(ld_psttrglen, 8, 0) lay_dtacq.addWidget(lb_psttrglen, 8, 1) lay_dtacq.addWidget(bt_modal, 9, 0, 1, 2) ld_acqtyp = QLabel('<h4>Acq Type</h4>', self, alignment=Qt.AlignCenter) cb_acqtyp = PyDMEnumComboBox( self, self.dev_pref + ':' + self.TYPE + '_POSTSEL') gbox_acqtyp = QGroupBox(self) lay_acqtyp = QVBoxLayout(gbox_acqtyp) lay_acqtyp.addWidget(ld_acqtyp) lay_acqtyp.addWidget(cb_acqtyp) ld_trgexten = QLabel('Internal/External', self) cb_trgexten = PyDMEnumComboBox( self, self.dev_pref + ':' + self.TYPE + '_HWTEN') ld_trginsel = QLabel('Selection', self) cb_trginsel = PyDMEnumComboBox( self, self.dev_pref + ':' + self.TYPE + '_TRIG_IN_SEL') ld_trgarm = QLabel('Arm', self) cb_trgarm = PyDMStateButton(self, self.dev_pref + ':' + self.TYPE + '_ARM') lb_armmon = SiriusLedState( self, self.dev_pref + ':' + self.TYPE + '_ARM_MON') ld_trgbrarm = QLabel('Auto re-arm', self) cb_trgbrarm = PyDMStateButton( self, self.dev_pref + ':' + self.TYPE + '_BR_ARM') ld_rst = QLabel('Trigger 1/2 Cap.:', self) lb_rst1 = PyDMLabel(self, self.dev_pref + ':' + self.TYPE + '_CAP_TRIG1') lb_rst2 = PyDMLabel(self, self.dev_pref + ':' + self.TYPE + '_CAP_TRIG2') gbox_trig = QGroupBox('Trigger', self) lay_trig = QGridLayout(gbox_trig) lay_trig.setAlignment(Qt.AlignTop) lay_trig.addWidget(ld_trgexten, 0, 0) lay_trig.addWidget(cb_trgexten, 0, 1, 1, 2) lay_trig.addWidget(ld_trginsel, 1, 0) lay_trig.addWidget(cb_trginsel, 1, 1, 1, 2) lay_trig.addWidget(ld_trgarm, 2, 0) lay_trig.addWidget(cb_trgarm, 2, 1) lay_trig.addWidget(lb_armmon, 2, 2) lay_trig.addWidget(ld_trgbrarm, 3, 0) lay_trig.addWidget(cb_trgbrarm, 3, 1) lay_trig.addWidget(ld_rst, 4, 0) lay_trig.addWidget(lb_rst1, 4, 1) lay_trig.addWidget(lb_rst2, 4, 2) lay_trig.setRowStretch(5, 2) pixmap = QPixmap( _os.path.join(_os.path.abspath(_os.path.dirname(__file__)), 'grow_damp.png')) img_wid = QLabel(self) img_wid.setPixmap(pixmap) img_wid.setScaledContents(True) wid = QWidget() lay = QGridLayout(wid) lay.setContentsMargins(0, 0, 0, 0) lay.addWidget(gbox_acqtyp, 0, 0) lay.addWidget(gbox_dtacq, 1, 0) lay.addWidget(gbox_trig, 2, 0) lay.addWidget(img_wid, 4, 0) lay.setRowStretch(3, 5) lay.setRowStretch(5, 5) wid.setStyleSheet("SiriusFrame{max-height: 1.8em;}") return wid
def _setupUi(self): ld_maindev = QLabel('<h3>General Settings</h3>', self, alignment=Qt.AlignCenter) # # Delay Lines ld_adcclock = QLabel('ADC Clock', self) sb_adcclock = PyDMSpinbox(self, self.dev_pref + ':ECLDEL0') sb_adcclock.showStepExponent = False fr_adcclock = SiriusFrame(self, self.dev_pref + ':ECLDEL0_SUBWR') fr_adcclock.add_widget(sb_adcclock) ld_fidclock = QLabel('Fiducial Clock', self) sb_fidclock = PyDMSpinbox(self, self.dev_pref + ':ECLDEL1') sb_fidclock.showStepExponent = False fr_fidclock = SiriusFrame(self, self.dev_pref + ':ECLDEL1_SUBWR') fr_fidclock.add_widget(sb_fidclock) ld_fiducial = QLabel('Fiducial', self) sb_fiducial = PyDMSpinbox(self, self.dev_pref + ':ECLDEL2') sb_fiducial.showStepExponent = False fr_fiducial = SiriusFrame(self, self.dev_pref + ':ECLDEL2_SUBWR') fr_fiducial.add_widget(sb_fiducial) ld_dacclock = QLabel('DAC Clock', self) sb_dacclock = PyDMSpinbox(self, self.dev_pref + ':ECLDEL3') sb_dacclock.showStepExponent = False fr_dacclock = SiriusFrame(self, self.dev_pref + ':ECLDEL3_SUBWR') fr_dacclock.add_widget(sb_dacclock) gbox_delaylines = QGroupBox('Delay lines', self) lay_delaylines = QGridLayout(gbox_delaylines) lay_delaylines.addWidget(ld_adcclock, 0, 0) lay_delaylines.addWidget(fr_adcclock, 0, 1) lay_delaylines.addWidget(ld_fidclock, 1, 0) lay_delaylines.addWidget(fr_fidclock, 1, 1) lay_delaylines.addWidget(ld_fiducial, 2, 0) lay_delaylines.addWidget(fr_fiducial, 2, 1) lay_delaylines.addWidget(ld_dacclock, 3, 0) lay_delaylines.addWidget(fr_dacclock, 3, 1) # # Thresholds and offsets ld_lvl = QLabel('<h4>Level</h4>', self, alignment=Qt.AlignCenter) ld_enbl = QLabel('<h4>Enbl</h4>', self, alignment=Qt.AlignCenter) ld_v = QLabel('<h4>V</h4>', self, alignment=Qt.AlignCenter) ld_edge = QLabel('<h4>Edge</h4>', self, alignment=Qt.AlignCenter) ld_fid = QLabel('Fiducial', self) cb_fidlvl = PyDMEnumComboBox(self, self.dev_pref + ':LEVEL_FID') cb_fidlvlenbl = PyDMEnumComboBox(self, self.dev_pref + ':LEVEL_FID_ENABLE') cb_fidlvlenbl.setStyleSheet('max-width:3em;') sb_fidv = PyDMSpinbox(self, self.dev_pref + ':AD5644_V_CH9') sb_fidv.showStepExponent = False sb_fidv.showUnits = True fr_fidv = SiriusFrame(self, self.dev_pref + ':AD5644CH9_SUBWR') fr_fidv.add_widget(sb_fidv) ld_trg1 = QLabel('Trigger 1', self) cb_trg1lvl = PyDMEnumComboBox(self, self.dev_pref + ':LEVEL_TRIG1') cb_trg1lvlenbl = PyDMEnumComboBox( self, self.dev_pref + ':LEVEL_TRIG1_ENABLE') cb_trg1lvlenbl.setStyleSheet('max-width:3em;') sb_trg1lvlv = PyDMSpinbox(self, self.dev_pref + ':LEVEL_VTRIG1') sb_trg1lvlv.showStepExponent = False sb_trg1lvlv.showUnits = True fr_trg1lvlv = SiriusFrame(self, self.dev_pref + ':AD5644CH10_SUBWR') fr_trg1lvlv.add_widget(sb_trg1lvlv) cb_trg1edge = PyDMEnumComboBox(self, self.dev_pref + ':TRIG1INV') cb_trg1edge.setStyleSheet('max-width:3.2em;') ld_trg2 = QLabel('Trigger 2', self) cb_trg2lvl = PyDMEnumComboBox(self, self.dev_pref + ':LEVEL_TRIG2') cb_trg2lvlenbl = PyDMEnumComboBox( self, self.dev_pref + ':LEVEL_TRIG2_ENABLE') cb_trg2lvlenbl.setStyleSheet('max-width:3em;') sb_trg2lvlv = PyDMSpinbox(self, self.dev_pref + ':LEVEL_VTRIG2') sb_trg2lvlv.showStepExponent = False sb_trg2lvlv.showUnits = True fr_trg2lvlv = SiriusFrame(self, self.dev_pref + ':AD5644CH8_SUBWR') fr_trg2lvlv.add_widget(sb_trg2lvlv) cb_trg2edge = PyDMEnumComboBox(self, self.dev_pref + ':TRIG2INV') cb_trg2edge.setStyleSheet('max-width:3.2em;') ld_dacoff = QLabel('DAC Offset', self) sb_dacoff = PyDMSpinbox(self, self.dev_pref + ':AD5644_V_CH11') sb_dacoff.showStepExponent = False sb_dacoff.showUnits = True fr_dacoff = SiriusFrame(self, self.dev_pref + ':AD5644CH11_SUBWR') fr_dacoff.add_widget(sb_dacoff) gbox_thoff = QGroupBox('Thresholds and Offsets', self) lay_thoff = QGridLayout(gbox_thoff) lay_thoff.addWidget(ld_lvl, 0, 1) lay_thoff.addWidget(ld_enbl, 0, 2) lay_thoff.addWidget(ld_v, 0, 3) lay_thoff.addWidget(ld_edge, 0, 4) lay_thoff.addWidget(ld_fid, 1, 0) lay_thoff.addWidget(cb_fidlvl, 1, 1) lay_thoff.addWidget(cb_fidlvlenbl, 1, 2) lay_thoff.addWidget(fr_fidv, 1, 3) lay_thoff.addWidget(ld_trg1, 2, 0) lay_thoff.addWidget(cb_trg1lvl, 2, 1) lay_thoff.addWidget(cb_trg1lvlenbl, 2, 2) lay_thoff.addWidget(fr_trg1lvlv, 2, 3) lay_thoff.addWidget(cb_trg1edge, 2, 4) lay_thoff.addWidget(ld_trg2, 3, 0) lay_thoff.addWidget(cb_trg2lvl, 3, 1) lay_thoff.addWidget(cb_trg2lvlenbl, 3, 2) lay_thoff.addWidget(fr_trg2lvlv, 3, 3) lay_thoff.addWidget(cb_trg2edge, 3, 4) lay_thoff.addWidget(ld_dacoff, 4, 0) lay_thoff.addWidget(fr_dacoff, 4, 3) lay_thoff.setColumnStretch(0, 3) lay_thoff.setColumnStretch(1, 2) lay_thoff.setColumnStretch(2, 1) lay_thoff.setColumnStretch(3, 5) lay_thoff.setColumnStretch(4, 1) # # FIR ld_sfir = QLabel('Shaper FIR ([C0 2^17 C2])', self) ld_firc0 = QLabel('C0', self) sb_firc0 = PyDMSpinbox(self, self.dev_pref + ':SHAPE_C0') sb_firc0.showStepExponent = False fr_firc0 = SiriusFrame(self, self.dev_pref + ':SHAPE_C0_SUBWR') fr_firc0.add_widget(sb_firc0) ld_firc2 = QLabel('C2', self) sb_firc2 = PyDMSpinbox(self, self.dev_pref + ':SHAPE_C2') sb_firc2.showStepExponent = False fr_firc2 = SiriusFrame(self, self.dev_pref + ':SHAPE_C2_SUBWR') fr_firc2.add_widget(sb_firc2) lay_fir = QHBoxLayout() lay_fir.addStretch() lay_fir.addWidget(ld_sfir) lay_fir.addStretch() lay_fir.addWidget(ld_firc0) lay_fir.addWidget(fr_firc0) lay_fir.addStretch() lay_fir.addWidget(ld_firc2) lay_fir.addWidget(fr_firc2) lay_fir.addStretch() lay = QGridLayout(self) lay.addWidget(ld_maindev, 0, 1, 1, 2) lay.addWidget(gbox_delaylines, 1, 1) lay.addWidget(gbox_thoff, 1, 2) lay.addLayout(lay_fir, 2, 1, 1, 2) lay.setColumnStretch(0, 3) lay.setColumnStretch(3, 3) lay.setRowStretch(3, 3) self.setStyleSheet("""SiriusFrame{max-height: 1.8em;}""")
def _setupUi(self): ld_intlk = QLabel('<h3>Interlock Controls</h3>', self, alignment=Qt.AlignCenter) ld_sp = QLabel('Setpoint', self, alignment=Qt.AlignCenter) # ld_sp.setStyleSheet('font-weight: bold; max-width: 3em;') ld_cyc = QLabel('RF/4 Cycles', self, alignment=Qt.AlignCenter) # ld_cyc.setStyleSheet('font-weight: bold; max-width: 3em;') ld_sat = QLabel('Saturation Time', self) sb_sat = PyDMSpinbox(self, self.dev_pref + ':ILOCK_TSAT') sb_sat.showStepExponent = False sb_sat.showUnits = True lb_sat = SiriusLabel(self, self.dev_pref + ':ILOCK_TSAT_T2C') lb_sat.setAlignment(Qt.AlignCenter) ld_tim = QLabel('Timeout', self) sb_tim = PyDMSpinbox(self, self.dev_pref + ':ILOCK_TOUT') sb_tim.showStepExponent = False sb_tim.showUnits = True lb_tim = SiriusLabel(self, self.dev_pref + ':ILOCK_TOUT_T2C') lb_tim.setAlignment(Qt.AlignCenter) pvn = self.dev_pref + ':ILOCK_TRIPPED' lb_sts = SiriusLabel(self, init_channel=pvn) lb_sts.enum_strings = ['Status Ok', 'Interlocked'] lb_sts.displayFormat = lb_sts.DisplayFormat.String fr_sts = SiriusFrame(self, pvn, is_float=True) fr_sts.borderWidth = 2 fr_sts.add_widget(lb_sts) pb_rst = SiriusPushButton(self, init_channel=self.dev_pref + ':ILOCK_RESET', pressValue=1, releaseValue=0) pb_rst.setText('Reset') pb_rst.setToolTip('Reset Counts') pb_rst.setIcon(qta.icon('fa5s.sync')) wd_sts = QWidget(self) wd_sts.setLayout(QHBoxLayout()) wd_sts.layout().addStretch() wd_sts.layout().addWidget(fr_sts) wd_sts.layout().addStretch() wd_sts.layout().addWidget(pb_rst) wd_sts.layout().addStretch() ld_sens = QLabel('<h3>Sensitivity Controls</h3>', self, alignment=Qt.AlignCenter) ld_tun = QLabel('Fractional Tune', self) sb_tun = PyDMSpinbox(self, self.dev_pref + ':ILOCK_TUNE') sb_tun.showStepExponent = False sb_tun.showUnits = True ld_tap = QLabel('Filter Taps', self) sb_tap = PyDMSpinbox(self, self.dev_pref + ':ILOCK_TAPS') sb_tap.showStepExponent = False sb_tap.showUnits = True ld_cal = QLabel('Calibration', self) sb_cal = PyDMSpinbox(self, self.dev_pref + ':ILOCK_FE_CAL') sb_cal.showStepExponent = False sb_cal.showUnits = True ld_ncur = QLabel('Nominal Current', self) sb_ncur = PyDMSpinbox(self, self.dev_pref + ':ILOCK_CURRENT') sb_ncur.showStepExponent = False sb_ncur.showUnits = True ld_thr = QLabel('Threshold', self) sb_thr = PyDMSpinbox(self, self.dev_pref + ':ILOCK_THRESH') sb_thr.showStepExponent = False sb_thr.showUnits = True pb_upt = SiriusPushButton(self, init_channel=self.dev_pref + ':ILOCK_UPDATE', pressValue=1, releaseValue=0) pb_upt.setText('Update Filter') pb_upt.setToolTip('Update Filter Config') pb_upt.setIcon(qta.icon('mdi.sync')) pb_upt.setStyleSheet("icon-size:20px;") pb_ld = SiriusPushButton(self, init_channel=self.dev_pref + ':BO_CPCOEFF', pressValue=1, releaseValue=0) pb_ld.setText('Apply Filter') pb_ld.setToolTip('Apply Filter Config to Feedback') pb_ld.setIcon(qta.icon('mdi.upload')) pb_ld.setStyleSheet("icon-size:20px;") lay = QGridLayout(self) lay.setAlignment(Qt.AlignCenter | Qt.AlignTop) lay.addWidget(ld_intlk, 0, 0, 1, 5) lay.addWidget(ld_sp, 1, 1) lay.addWidget(ld_cyc, 1, 2) lay.addWidget(ld_sat, 2, 0) lay.addWidget(sb_sat, 2, 1) lay.addWidget(lb_sat, 2, 2) lay.addWidget(ld_tim, 3, 0) lay.addWidget(sb_tim, 3, 1) lay.addWidget(lb_tim, 3, 2) lay.addWidget(wd_sts, 4, 0, 1, 3) lays = QGridLayout() lays.addWidget(ld_sens, 0, 0, 1, 4) lays.addWidget(ld_tun, 1, 0) lays.addWidget(sb_tun, 1, 1) lays.addWidget(ld_tap, 2, 0) lays.addWidget(sb_tap, 2, 1) lays.addWidget(ld_cal, 3, 0) lays.addWidget(sb_cal, 3, 1) lays.addWidget(ld_ncur, 4, 0) lays.addWidget(sb_ncur, 4, 1) lays.addWidget(ld_thr, 1, 2) lays.addWidget(sb_thr, 1, 3) lays.addWidget(pb_upt, 3, 2, 1, 2) lays.addWidget(pb_ld, 4, 2, 1, 2) lay.addLayout(lays, 5, 0, 1, 3)
def _setupUi(self): ld_dacs = QLabel('<h3>AD5644 DACs</h3>', self, alignment=Qt.AlignCenter) ld_dacch0 = QLabel('0', self, alignment=Qt.AlignCenter) ld_dacch0.setStyleSheet('font-weight: bold; max-width: 3em;') sb_dacch0 = PyDMSpinbox(self, self.dev_pref + ':AD5644_V_CH0') sb_dacch0.showStepExponent = False sb_dacch0.showUnits = True fr_dacch0 = SiriusFrame(self, self.dev_pref + ':AD5644CH0_SUBWR') fr_dacch0.add_widget(sb_dacch0) ld_dacch1 = QLabel('1', self, alignment=Qt.AlignCenter) ld_dacch1.setStyleSheet('font-weight: bold; max-width: 3em;') sb_dacch1 = PyDMSpinbox(self, self.dev_pref + ':AD5644_V_CH1') sb_dacch1.showStepExponent = False sb_dacch1.showUnits = True fr_dacch1 = SiriusFrame(self, self.dev_pref + ':AD5644CH1_SUBWR') fr_dacch1.add_widget(sb_dacch1) ld_dacch2 = QLabel('2', self, alignment=Qt.AlignCenter) ld_dacch2.setStyleSheet('font-weight: bold; max-width: 3em;') sb_dacch2 = PyDMSpinbox(self, self.dev_pref + ':AD5644_V_CH2') sb_dacch2.showStepExponent = False sb_dacch2.showUnits = True fr_dacch2 = SiriusFrame(self, self.dev_pref + ':AD5644CH2_SUBWR') fr_dacch2.add_widget(sb_dacch2) ld_dacch3 = QLabel('3', self, alignment=Qt.AlignCenter) ld_dacch3.setStyleSheet('font-weight: bold; max-width: 3em;') sb_dacch3 = PyDMSpinbox(self, self.dev_pref + ':AD5644_V_CH3') sb_dacch3.showStepExponent = False sb_dacch3.showUnits = True fr_dacch3 = SiriusFrame(self, self.dev_pref + ':AD5644CH3_SUBWR') fr_dacch3.add_widget(sb_dacch3) ld_dacref0 = QLabel('Ref\n0-3', self, alignment=Qt.AlignCenter) ld_dacref0.setStyleSheet('font-weight: bold; max-width: 3em;') cb_dacref0 = PyDMEnumComboBox(self, self.dev_pref + ':AD5644REF0_BO') ld_dacch4 = QLabel('4', self, alignment=Qt.AlignCenter) ld_dacch4.setStyleSheet('font-weight: bold; max-width: 3em;') sb_dacch4 = PyDMSpinbox(self, self.dev_pref + ':AD5644_V_CH4') sb_dacch4.showStepExponent = False sb_dacch4.showUnits = True fr_dacch4 = SiriusFrame(self, self.dev_pref + ':AD5644CH4_SUBWR') fr_dacch4.add_widget(sb_dacch4) ld_dacch5 = QLabel('5', self, alignment=Qt.AlignCenter) ld_dacch5.setStyleSheet('font-weight: bold; max-width: 3em;') sb_dacch5 = PyDMSpinbox(self, self.dev_pref + ':AD5644_V_CH5') sb_dacch5.showStepExponent = False sb_dacch5.showUnits = True fr_dacch5 = SiriusFrame(self, self.dev_pref + ':AD5644CH5_SUBWR') fr_dacch5.add_widget(sb_dacch5) ld_dacch6 = QLabel('6', self, alignment=Qt.AlignCenter) ld_dacch6.setStyleSheet('font-weight: bold; max-width: 3em;') sb_dacch6 = PyDMSpinbox(self, self.dev_pref + ':AD5644_V_CH6') sb_dacch6.showStepExponent = False sb_dacch6.showUnits = True fr_dacch6 = SiriusFrame(self, self.dev_pref + ':AD5644CH6_SUBWR') fr_dacch6.add_widget(sb_dacch6) ld_dacch7 = QLabel('7', self, alignment=Qt.AlignCenter) ld_dacch7.setStyleSheet('font-weight: bold; max-width: 3em;') sb_dacch7 = PyDMSpinbox(self, self.dev_pref + ':AD5644_V_CH7') sb_dacch7.showStepExponent = False sb_dacch7.showUnits = True fr_dacch7 = SiriusFrame(self, self.dev_pref + ':AD5644CH7_SUBWR') fr_dacch7.add_widget(sb_dacch7) ld_dacref1 = QLabel('Ref\n4-7', self, alignment=Qt.AlignCenter) ld_dacref1.setStyleSheet('font-weight: bold; max-width: 3em;') cb_dacref1 = PyDMEnumComboBox(self, self.dev_pref + ':AD5644REF1_BO') cb_dacmode = PyDMEnumComboBox(self, self.dev_pref + ':AD5644TEST_BO') lay = QGridLayout(self) lay.setAlignment(Qt.AlignCenter | Qt.AlignTop) lay.setHorizontalSpacing(15) lay.setVerticalSpacing(15) lay.addWidget(ld_dacs, 0, 1, 1, 5) lay.addWidget(ld_dacch0, 1, 1) lay.addWidget(fr_dacch0, 1, 2) lay.addWidget(ld_dacch1, 2, 1) lay.addWidget(fr_dacch1, 2, 2) lay.addWidget(ld_dacch2, 3, 1) lay.addWidget(fr_dacch2, 3, 2) lay.addWidget(ld_dacch3, 4, 1) lay.addWidget(fr_dacch3, 4, 2) lay.addWidget(ld_dacref0, 5, 1) lay.addWidget(cb_dacref0, 5, 2) lay.addWidget(ld_dacch4, 1, 4) lay.addWidget(fr_dacch4, 1, 5) lay.addWidget(ld_dacch5, 2, 4) lay.addWidget(fr_dacch5, 2, 5) lay.addWidget(ld_dacch6, 3, 4) lay.addWidget(fr_dacch6, 3, 5) lay.addWidget(ld_dacch7, 4, 4) lay.addWidget(fr_dacch7, 4, 5) lay.addWidget(ld_dacref1, 5, 4) lay.addWidget(cb_dacref1, 5, 5) lay.addWidget(cb_dacmode, 6, 1, 1, 5)
def _setupScrnsCorrsWidget(self): # screens lay_screens = QVBoxLayout() lay_screens.setContentsMargins(0, 0, 0, 0) header_screens = self._create_headerline( (('', 0), ('Screen', 6.5), ('Cam', 3.5), ('Type-Sel', 5), ('Type-Sts', 5), ('', 0))) header_screens.setObjectName('header_screens') header_screens.setStyleSheet( '#header_screens {border-bottom: 2px solid gray;}') header_screens.layout().setContentsMargins(0, 9, 0, 9) header_screens.setSizePolicy(QSzPlcy.Preferred, QSzPlcy.Maximum) lay_screens.addWidget(header_screens) for idx, scrn_prefix in enumerate(self._scrns): scrn_prefix = SiriusPVName(scrn_prefix) w = self._create_scrn_summwidget(scrn_prefix, idx) w.layout().setContentsMargins(9, 9, 9, 9) lay_screens.addWidget(w) # correctors w_corr = QWidget() w_corr.setObjectName('w_corr') w_corr.setStyleSheet('#w_corr {border-left: 2px solid gray;}') lay_corr = QGridLayout(w_corr) lay_corr.setContentsMargins(0, 0, 0, 0) lay_corr.setVerticalSpacing(25) lay_corr.setHorizontalSpacing(15) lay_corr.setAlignment(Qt.AlignTop) header_corrs = self._create_headerline( (('', 0), ('', 1.29), ('', 5), ('Kick-SP', 5), ('Kick-Mon', 5), ('', 0), ('', 1.29), ('', 5), ('Kick-SP', 5), ('Kick-Mon', 5), ('', 0))) header_corrs.setObjectName('header_corrs') header_corrs.setStyleSheet( '#header_corrs {border-bottom: 2px solid gray;}') header_corrs.layout().setContentsMargins(0, 9, 0, 9) header_corrs.setSizePolicy(QSzPlcy.Preferred, QSzPlcy.Maximum) lay_corr.addWidget(header_corrs, 0, 0, 1, 2) for corr, row, col in (('TB-04:PS-CH-1', 1, 0), ('TB-04:PS-CH-2', 2, 0), ('TB-04:PS-CV-1', 1, 1), ('TB-04:PS-CV-2', 2, 1), ('TB-04:PU-InjSept', 3, 0), ('BO-01D:PU-InjKckr', 3, 1)): corr = SiriusPVName(corr) w = self._create_corr_summwidget(corr) w.layout().setContentsMargins(9, 9, 9, 9) lay_corr.addWidget(w, row, col) # posang posang_prefix = SiriusPVName('TB-Glob:AP-PosAng').substitute( prefix=self.prefix) w_posang = QWidget() w_posang.setSizePolicy(QSzPlcy.Preferred, QSzPlcy.Maximum) w_posang.setObjectName('w_posang') w_posang.setStyleSheet('#w_posang {border-top: 2px solid gray;}') lay_posang = QGridLayout(w_posang) lay_posang.setVerticalSpacing(9) lay_posang.setHorizontalSpacing(15) header_posang = self._create_headerline( (('', 0), ('', 1.29), ('Position and Angle Correction', 30), ('', 0))) header_posang.setSizePolicy(QSzPlcy.Preferred, QSzPlcy.Maximum) lay_posang.addWidget(header_posang, 0, 0, 1, 2) self.pb_update_ref = PyDMPushButton( label='Update Reference', parent=self, init_channel=posang_prefix.substitute(propty='SetNewRefKick-Cmd'), pressValue=1) self.pb_update_ref.setStyleSheet('min-height: 2em;') lay_posang.addWidget(self.pb_update_ref, 1, 0, 1, 2) for col, title, axis in ((0, 'Horizontal', 'X'), (1, 'Vertical', 'Y')): lb_pos = QLabel('<h4>Δ' + axis.lower() + '</h4>', self, alignment=Qt.AlignRight) lb_pos.setSizePolicy(QSzPlcy.Maximum, QSzPlcy.Maximum) pos_sp = PyDMSpinbox( self, posang_prefix.substitute(propty='DeltaPos' + axis + '-SP')) pos_sp.setObjectName('pos_sp_' + axis.lower()) pos_sp.showStepExponent = False pos_rb = PyDMLabel( self, posang_prefix.substitute(propty='DeltaPos' + axis + '-RB')) pos_rb.setObjectName('pos_rb_' + axis.lower()) lb_ang = QLabel('<h4>Δ' + axis.lower() + '\'</h4>', self, alignment=Qt.AlignRight) lb_ang.setSizePolicy(QSzPlcy.Maximum, QSzPlcy.Maximum) ang_sp = PyDMSpinbox( self, posang_prefix.substitute(propty='DeltaAng' + axis + '-SP')) ang_sp.setObjectName('ang_sp_' + axis.lower()) ang_sp.showStepExponent = False ang_rb = PyDMLabel( self, posang_prefix.substitute(propty='DeltaAng' + axis + '-RB')) ang_rb.setObjectName('ang_rb_' + axis.lower()) gbox_posang = QGroupBox(title, self) axlay = QGridLayout(gbox_posang) axlay.addWidget(lb_pos, 0, 0) axlay.addWidget(pos_sp, 0, 1) axlay.addWidget(pos_rb, 0, 2) axlay.addWidget(lb_ang, 1, 0) axlay.addWidget(ang_sp, 1, 1) axlay.addWidget(ang_rb, 1, 2) lay_posang.addWidget(gbox_posang, 2, col) self.pb_posang_settings = QPushButton('Settings', self) util.connect_window(self.pb_posang_settings, CorrParamsDetailWindow, parent=self, tl='TB', prefix=self.prefix) lay_posang.addWidget(self.pb_posang_settings, 3, 0, 1, 2, alignment=Qt.AlignRight) lay_posangref = QGridLayout() lay_posangref.setHorizontalSpacing(9) lay_posangref.setVerticalSpacing(9) lay_posangref.addWidget( QLabel('<h4>Reference Kicks</h4>', self, alignment=Qt.AlignCenter), 0, 0, 1, 7) for corr in ('CH1', 'CH2', 'CV1', 'CV2'): lb_corr = PyDMLabel(self, posang_prefix.substitute(propty=corr + '-Cte')) lb_corr.setStyleSheet('font-weight:bold;') lb_refkick = PyDMLabel( self, posang_prefix.substitute(propty='RefKick' + corr + '-Mon')) lb_refkick.showUnits = True col = 1 if 'CH' in corr else 4 row = 0 if '1' in corr else 1 lay_posangref.addWidget(lb_corr, row + 1, col) lay_posangref.addWidget(lb_refkick, row + 1, col + 1) lay_posangref.setColumnStretch(0, 1) lay_posangref.setColumnStretch(1, 3) lay_posangref.setColumnStretch(2, 3) lay_posangref.setColumnStretch(3, 1) lay_posangref.setColumnStretch(4, 3) lay_posangref.setColumnStretch(5, 3) lay_posangref.setColumnStretch(6, 1) lay_posang.addLayout(lay_posangref, 4, 0, 1, 2) lay_corr.addWidget(w_posang, 4, 0, 1, 2) lay_corr.setRowStretch(0, 1) lay_corr.setRowStretch(1, 2) lay_corr.setRowStretch(2, 2) lay_corr.setRowStretch(3, 2) lay_corr.setRowStretch(4, 10) lay = QHBoxLayout() lay.setContentsMargins(0, 0, 0, 0) lay.setSpacing(0) lay.addLayout(lay_screens) lay.addWidget(w_corr) self.corr_wid.setLayout(lay)
def connection_changed(self, connected): build = (self._node is None) and (self._connected != connected and connected is True) super(Process, self).connection_changed(connected) if not build: return self._node = nodeFromAddress(self.channel) self._path = self.channel vb = QVBoxLayout() self.setLayout(vb) gb = QGroupBox('Process ({})'.format(self._node.name)) vb.addWidget(gb) vb = QVBoxLayout() gb.setLayout(vb) hb = QHBoxLayout() vb.addLayout(hb) w = PyDMPushButton(label='Start', pressValue=1, init_channel=self._path + '.Start') hb.addWidget(w) w = PyDMPushButton(label='Stop', pressValue=1, init_channel=self._path + '.Stop') hb.addWidget(w) fl = QFormLayout() fl.setRowWrapPolicy(QFormLayout.DontWrapRows) fl.setFormAlignment(Qt.AlignHCenter | Qt.AlignVCenter) fl.setLabelAlignment(Qt.AlignRight) hb.addLayout(fl) w = PyRogueLineEdit(parent=None, init_channel=self._path + '.Running/disp') w.showUnits = False w.precisionFromPV = False w.alarmSensitiveContent = False w.alarmSensitiveBorder = False fl.addRow('Running:', w) fl = QFormLayout() fl.setRowWrapPolicy(QFormLayout.DontWrapRows) fl.setFormAlignment(Qt.AlignHCenter | Qt.AlignTop) fl.setLabelAlignment(Qt.AlignRight) vb.addLayout(fl) w = PyDMScaleIndicator(parent=None, init_channel=self._path + '.Progress') w.showUnits = False w.precisionFromPV = True w.alarmSensitiveContent = False w.alarmSensitiveBorder = False w.showValue = False w.showLimits = False w.showTicks = False w.barIndicator = True fl.addRow('Progress:', w) w = PyRogueLineEdit(parent=None, init_channel=self._path + '.Message/disp') w.showUnits = False w.precisionFromPV = False w.alarmSensitiveContent = False w.alarmSensitiveBorder = False fl.addRow('Message:', w) # Auto add additional fields noAdd = ['enable', 'Start', 'Stop', 'Running', 'Progress', 'Message'] prc = nodeFromAddress(self.channel) for k, v in prc.nodes.items(): if v.name not in noAdd and not v.hidden: if v.disp == 'enum' and v.enum is not None and v.mode != 'RO' and v.typeStr != 'list': w = PyDMEnumComboBox(parent=None, init_channel=self._path + '.{}'.format(v.name)) w.alarmSensitiveContent = False w.alarmSensitiveBorder = True elif v.minimum is not None and v.maximum is not None and v.disp == '{}' and ( v.mode != 'RO' or v.isCommand): w = PyDMSpinbox(parent=None, init_channel=self._path + '.{}'.format(v.name)) w.precision = 0 w.showUnits = False w.precisionFromPV = False w.alarmSensitiveContent = False w.alarmSensitiveBorder = True w.showStepExponent = False w.writeOnPress = True elif v.mode == 'RO' and not v.isCommand: w = PyDMLabel(parent=None, init_channel=self._path + '.{}/disp'.format(v.name)) w.showUnits = False w.precisionFromPV = True w.alarmSensitiveContent = False w.alarmSensitiveBorder = True else: w = PyRogueLineEdit(parent=None, init_channel=self._path + '.{}/disp'.format(v.name)) w.showUnits = False w.precisionFromPV = True w.alarmSensitiveContent = False w.alarmSensitiveBorder = True fl.addRow(v.name + ':', w)
def _setupDeltaControlLayout(self, axis=''): # pos label_pos = QLabel("<h4>Δ"+axis+"</h4>", self) sb_deltapos = PyDMSpinbox(self, self.posang_prefix.substitute( propty='DeltaPos'+axis.upper()+'-SP')) sb_deltapos.step_exponent = -2 sb_deltapos.update_step_size() sb_deltapos.showStepExponent = False lb_deltapos = PyDMLabel(self, self.posang_prefix.substitute( propty='DeltaPos'+axis.upper()+'-RB')) lb_deltapos.showUnits = True self._my_input_widgets.append(sb_deltapos) # ang label_ang = QLabel("<h4>Δ"+axis+"'</h4>", self) sb_deltaang = PyDMSpinbox(self, self.posang_prefix.substitute( propty='DeltaAng'+axis.upper()+'-SP')) sb_deltaang.step_exponent = -2 sb_deltaang.update_step_size() sb_deltaang.showStepExponent = False lb_deltaang = PyDMLabel(self, self.posang_prefix.substitute( propty='DeltaAng'+axis.upper()+'-RB')) lb_deltaang.showUnits = True self._my_input_widgets.append(sb_deltaang) lay = QGridLayout() lay.setVerticalSpacing(12) lay.setHorizontalSpacing(12) lay.addItem( QSpacerItem(10, 0, QSzPlcy.Expanding, QSzPlcy.Ignored), 0, 0) lay.addWidget(label_pos, 0, 1) lay.addWidget(sb_deltapos, 0, 2) lay.addWidget(lb_deltapos, 0, 3) lay.addWidget(label_ang, 1, 1) lay.addWidget(sb_deltaang, 1, 2) lay.addWidget(lb_deltaang, 1, 3) lay.addItem( QSpacerItem(10, 0, QSzPlcy.Expanding, QSzPlcy.Ignored), 0, 4) return lay
def _setupFrontBackEndRegsWidget(self): # # Front/back end registers ld_gpiohph = QLabel('Horiz. Phase', self) sb_gpiohph = PyDMSpinbox(self, self.dev_pref + ':FBELT_X_PHASE_SETPT') sb_gpiohph.showStepExponent = False ld_gpiohat = QLabel('Horiz. Atten.', self) sb_gpiohat = PyDMSpinbox(self, self.dev_pref + ':FBE_X_ATT') sb_gpiohat.showStepExponent = False ld_gpiovph = QLabel('Vert. Phase', self) sb_gpiovph = PyDMSpinbox(self, self.dev_pref + ':FBELT_Y_PHASE_SETPT') sb_gpiovph.showStepExponent = False ld_gpiovat = QLabel('Vert. Atten.', self) sb_gpiovat = PyDMSpinbox(self, self.dev_pref + ':FBE_Y_ATT') sb_gpiovat.showStepExponent = False ld_gpiolph = QLabel('Long. Phase', self) sb_gpiolph = PyDMSpinbox(self, self.dev_pref + ':FBELT_SERVO_SETPT') sb_gpiolph.showStepExponent = False ld_gpiolat = QLabel('Long. Atten.', self) sb_gpiolat = PyDMSpinbox(self, self.dev_pref + ':FBE_Z_ATT') sb_gpiolat.showStepExponent = False ld_gpiobeph = QLabel('Back-end Phase', self) sb_gpiobeph = PyDMSpinbox(self, self.dev_pref + ':FBE_BE_PHASE') sb_gpiobeph.showStepExponent = False ld_gpiobeat = QLabel('Back-end Atten.', self) sb_gpiobeat = PyDMSpinbox(self, self.dev_pref + ':FBE_BE_ATT') sb_gpiobeat.showStepExponent = False # # Phases ld_gpiophss = QLabel('<h4>Phases</h4>', self, alignment=Qt.AlignCenter) lb_gpiohph = PyDMLabel(self, self.dev_pref + ':FBE_X_PHASE') lb_gpiovph = PyDMLabel(self, self.dev_pref + ':FBE_Y_PHASE') lb_gpiolph = PyDMLabel(self, self.dev_pref + ':FBE_Z_PHASE') lay_phases = QGridLayout() lay_phases.addWidget(ld_gpiophss, 0, 0, 1, 10) lay_phases.addWidget(QLabel('L:'), 1, 1) lay_phases.addWidget(lb_gpiolph, 1, 2) lay_phases.addWidget(QLabel('H:'), 1, 4) lay_phases.addWidget(lb_gpiohph, 1, 5) lay_phases.addWidget(QLabel('V:'), 1, 7) lay_phases.addWidget(lb_gpiovph, 1, 8) lay_phases.setColumnStretch(0, 2) lay_phases.setColumnStretch(3, 2) lay_phases.setColumnStretch(6, 2) lay_phases.setColumnStretch(9, 2) gbox_fbend = QGroupBox('Front/back end registers', self) lay_fbend = QGridLayout(gbox_fbend) lay_fbend.addWidget(ld_gpiobeat, 0, 0) lay_fbend.addWidget(sb_gpiobeat, 0, 1) lay_fbend.addWidget(ld_gpiolat, 1, 0) lay_fbend.addWidget(sb_gpiolat, 1, 1) lay_fbend.addWidget(ld_gpiohat, 2, 0) lay_fbend.addWidget(sb_gpiohat, 2, 1) lay_fbend.addWidget(ld_gpiovat, 3, 0) lay_fbend.addWidget(sb_gpiovat, 3, 1) lay_fbend.addWidget(ld_gpiobeph, 4, 0) lay_fbend.addWidget(sb_gpiobeph, 4, 1) lay_fbend.addWidget(ld_gpiolph, 5, 0) lay_fbend.addWidget(sb_gpiolph, 5, 1) lay_fbend.addWidget(ld_gpiohph, 6, 0) lay_fbend.addWidget(sb_gpiohph, 6, 1) lay_fbend.addWidget(ld_gpiovph, 7, 0) lay_fbend.addWidget(sb_gpiovph, 7, 1) lay_fbend.addLayout(lay_phases, 8, 0, 1, 2) return gbox_fbend
def _setupWaveformsWidget(self): gp_mean = WfmGraph(self) gp_mean.setPlotTitle('Mean') gp_mean.getAxis('bottom').setLabel('Bunch number') gp_mean.getAxis('left').setLabel('CNT') gp_mean.add_scatter_curve( ychannel=self.dev_pref + ':' + self.TYPE + '_MEAN', xchannel=self.dev_pref + ':' + self.TYPE + '_XSC', color=QColor('red'), lineStyle=Qt.SolidLine) gp_maxrms = WfmGraph(self) gp_maxrms.setPlotTitle('Max RMS Channel (filtered)') gp_maxrms.getAxis('bottom').setLabel('Time (ms)') gp_maxrms.getAxis('left').setLabel('CNT') gp_maxrms.add_scatter_curve( ychannel=self.dev_pref + ':' + self.TYPE + '_MAXRMS', xchannel=self.dev_pref + ':' + self.TYPE + '_TSC', color=QColor('blue'), lineStyle=Qt.SolidLine) gp_rms = WfmGraph(self) gp_rms.setPlotTitle('RMS') gp_rms.getAxis('bottom').setLabel('Bunch number') gp_rms.getAxis('left').setLabel('CNT') gp_rms.add_scatter_curve( ychannel=self.dev_pref + ':' + self.TYPE + '_RMS', xchannel=self.dev_pref + ':' + self.TYPE + '_XSC', color=QColor('green'), lineStyle=Qt.SolidLine) gp_avgspe = WfmGraph(self) gp_avgspe.setPlotTitle('Average spectrum') gp_avgspe.getAxis('bottom').setLabel('Frequency (kHz)') gp_avgspe.getAxis('left').setLabel('dB') gp_avgspe.add_scatter_curve( ychannel=self.dev_pref + ':' + self.TYPE + '_SPEC', xchannel=self.dev_pref + ':' + self.TYPE + '_FREQ', color=QColor('blue'), lineStyle=Qt.SolidLine) gp_avgspe.add_marker( name='Marker 1', xchannel=self.dev_pref + ':' + self.TYPE + '_PEAKFREQ1', ychannel=self.dev_pref + ':' + self.TYPE + '_PEAK1', color=QColor('red'), symbol='o') gp_avgspe.add_marker( name='Marker 2', xchannel=self.dev_pref + ':' + self.TYPE + '_PEAKFREQ2', ychannel=self.dev_pref + ':' + self.TYPE + '_PEAK2', color=QColor('magenta'), symbol='s') lay_graph = QGridLayout() lay_graph.setContentsMargins(9, 9, 9, 9) lay_graph.addWidget(gp_mean, 0, 0) lay_graph.addWidget(gp_maxrms, 0, 1) lay_graph.addWidget(gp_rms, 1, 0) lay_graph.addWidget(gp_avgspe, 1, 1) ld_acqenbl = QLabel('Acq. Enable', self) cb_acqenbl = PyDMStateButton( self, self.dev_pref + ':' + self.TYPE + '_ACQ_EN') ld_acqsing = QLabel('Acq. Mode', self) cb_acqsing = PyDMEnumComboBox( self, self.dev_pref + ':' + self.TYPE + '_ACQ_SINGLE') ld_mean = QLabel('Mean', self, alignment=Qt.AlignCenter) lb_mean = PyDMLabel(self, self.dev_pref + ':' + self.TYPE + '_MEANVAL') ld_rms = QLabel('RMS', self, alignment=Qt.AlignCenter) lb_rms = PyDMLabel(self, self.dev_pref + ':' + self.TYPE + '_RMSVAL') ld_ampp2p = QLabel('Amp P-P', self, alignment=Qt.AlignCenter) lb_ampp2p = PyDMLabel(self, self.dev_pref + ':' + self.TYPE + '_AMP_PP') ld_maxrms = QLabel('Max RMS', self, alignment=Qt.AlignCenter) lb_maxrms = PyDMLabel(self, self.dev_pref + ':' + self.TYPE + '_MAXRMSVAL') ld_bunpatt = QLabel('Bunch\npattern', self) le_bunpatt = PyDMLineEdit( self, self.dev_pref + ':' + self.TYPE + '_ACQ_PATTERN') ld_avg = QLabel('Sample Avg', self) sb_avg = PyDMSpinbox(self, self.dev_pref + ':' + self.TYPE + '_SP_AVG') sb_avg.showStepExponent = False gbox_acqctrl = QGroupBox('Acquisition control', self) lay_acqctrl = QGridLayout(gbox_acqctrl) lay_acqctrl.addWidget(ld_acqenbl, 0, 0) lay_acqctrl.addWidget(cb_acqenbl, 0, 1) lay_acqctrl.addWidget(ld_acqsing, 1, 0) lay_acqctrl.addWidget(cb_acqsing, 1, 1) lay_acqctrl.addWidget(ld_avg, 2, 0) lay_acqctrl.addWidget(sb_avg, 2, 1) lay_acqctrl.addItem(QSpacerItem(15, 1, QSzPlcy.Fixed, QSzPlcy.Ignored), 0, 2, 3, 1) lay_acqctrl.addWidget(ld_mean, 0, 3) lay_acqctrl.addWidget(lb_mean, 0, 4) lay_acqctrl.addWidget(ld_ampp2p, 0, 5) lay_acqctrl.addWidget(lb_ampp2p, 0, 6) lay_acqctrl.addWidget(ld_rms, 1, 3) lay_acqctrl.addWidget(lb_rms, 1, 4) lay_acqctrl.addWidget(ld_maxrms, 1, 5) lay_acqctrl.addWidget(lb_maxrms, 1, 6) lay_acqctrl.addWidget(ld_bunpatt, 2, 3) lay_acqctrl.addWidget(le_bunpatt, 2, 4, 1, 3) # Markers ld_mk1 = QLabel('1', self, alignment=Qt.AlignCenter) ld_mk2 = QLabel('2', self, alignment=Qt.AlignCenter) ld_span = QLabel('Span (kHz)', self, alignment=Qt.AlignCenter) ld_mode = QLabel('Mode', self, alignment=Qt.AlignCenter) ld_val = QLabel('Value', self, alignment=Qt.AlignCenter) ld_pfrq = QLabel('Freq', self, alignment=Qt.AlignCenter) ld_tune = QLabel('Tune', self, alignment=Qt.AlignCenter) le_low1 = PyDMLineEdit(self, self.dev_pref + ':' + self.TYPE + '_SP_LOW1') le_high1 = PyDMLineEdit(self, self.dev_pref + ':' + self.TYPE + '_SP_HIGH1') cb_mode1 = PyDMEnumComboBox( self, self.dev_pref + ':' + self.TYPE + '_SP_SEARCH1') lb_peak1 = PyDMLabel(self, self.dev_pref + ':' + self.TYPE + '_PEAK1') lb_peak1.showUnits = True lb_pfrq1 = PyDMLabel(self, self.dev_pref + ':' + self.TYPE + '_PEAKFREQ1') lb_pfrq1.showUnits = True lb_tune1 = PyDMLabel(self, self.dev_pref + ':' + self.TYPE + '_PEAKTUNE1') le_low2 = PyDMLineEdit(self, self.dev_pref + ':' + self.TYPE + '_SP_LOW2') le_high2 = PyDMLineEdit(self, self.dev_pref + ':' + self.TYPE + '_SP_HIGH2') cb_mode2 = PyDMEnumComboBox( self, self.dev_pref + ':' + self.TYPE + '_SP_SEARCH2') lb_peak2 = PyDMLabel(self, self.dev_pref + ':' + self.TYPE + '_PEAK2') lb_peak2.showUnits = True lb_pfrq2 = PyDMLabel(self, self.dev_pref + ':' + self.TYPE + '_PEAKFREQ2') lb_pfrq2.showUnits = True lb_tune2 = PyDMLabel(self, self.dev_pref + ':' + self.TYPE + '_PEAKTUNE2') gbox_mark = QGroupBox('Markers', self) lay_mark = QGridLayout(gbox_mark) lay_mark.addWidget(ld_span, 0, 1, 1, 2) lay_mark.addWidget(ld_mode, 0, 3) lay_mark.addWidget(ld_val, 0, 4) lay_mark.addWidget(ld_pfrq, 0, 5) lay_mark.addWidget(ld_tune, 0, 6) lay_mark.addWidget(ld_mk1, 1, 0) lay_mark.addWidget(le_low1, 1, 1) lay_mark.addWidget(le_high1, 1, 2) lay_mark.addWidget(cb_mode1, 1, 3) lay_mark.addWidget(lb_peak1, 1, 4) lay_mark.addWidget(lb_pfrq1, 1, 5) lay_mark.addWidget(lb_tune1, 1, 6) lay_mark.addWidget(ld_mk2, 2, 0) lay_mark.addWidget(le_low2, 2, 1) lay_mark.addWidget(le_high2, 2, 2) lay_mark.addWidget(cb_mode2, 2, 3) lay_mark.addWidget(lb_peak2, 2, 4) lay_mark.addWidget(lb_pfrq2, 2, 5) lay_mark.addWidget(lb_tune2, 2, 6) wid = QWidget() lay = QGridLayout(wid) lay.setContentsMargins(0, 0, 0, 0) lay.addLayout(lay_graph, 0, 0, 1, 2) lay.addWidget(gbox_acqctrl, 1, 0) lay.addWidget(gbox_mark, 1, 1) lay.setRowStretch(0, 5) lay.setRowStretch(1, 1) lay.setColumnStretch(0, 1) lay.setColumnStretch(1, 1) return wid
def _measLayout(self): # Acquisition lbl_acq = QLabel('Acquisition', self) self.bt_acq = PyDMStateButton( self, self.device.substitute(propty='SpecAnaGetSpec-Sel')) self.bt_acq.shape = 1 self.led_acq = SiriusLedState( self, self.device.substitute(propty='SpecAnaGetSpec-Sts')) hbox_acq = QHBoxLayout() hbox_acq.addWidget(self.bt_acq) hbox_acq.addWidget(self.led_acq) # Excitation lbl_drive = QLabel('Excitation', self) self.bt_drive = PyDMStateButton( self, self.device.substitute(propty='Enbl-Sel')) self.bt_drive.shape = 1 value = 0b111 if self.section == 'BO' else 1 self.led_drive = PyDMLedMultiChannel( parent=self, channels2values={self.device.substitute(propty='Enbl-Sts'): value}) self.led_drive.setOffColor(PyDMLed.DarkGreen) hbox_drive = QHBoxLayout() hbox_drive.addWidget(self.bt_drive) hbox_drive.addWidget(self.led_drive) # Excitation Status Detailed gbox_enblsts = QGridLayout() lbl_enblsts = QLabel('Excitation\nEnable Status\nDetailed', self, alignment=Qt.AlignVCenter | Qt.AlignRight) if self.section == 'BO': # # Carrier Generator self.led_carrier = SiriusLedState( self, self.device.substitute(propty='EnblCarrierGen-Sts')) gbox_enblsts.addWidget(self.led_carrier, 0, 0) gbox_enblsts.addWidget(QLabel('Carrier Generator'), 0, 1) # # Noise Generator self.led_noise = SiriusLedState( self, self.device.substitute(propty='EnblNoiseGen-Sts')) gbox_enblsts.addWidget(self.led_noise, 1, 0) gbox_enblsts.addWidget(QLabel('Noise Generator'), 1, 1) else: # # Noise Generator self.led_trkgen = SiriusLedState( self, self.device.substitute(propty='SpecAnaTrkGen-Sts')) gbox_enblsts.addWidget(self.led_trkgen, 1, 0) gbox_enblsts.addWidget(QLabel('Tracking Generator'), 1, 1) # # Amplifier self.led_amp = SiriusLedState( self, self.device.substitute(propty='EnblAmp-Sts')) gbox_enblsts.addWidget(self.led_amp, 2, 0) gbox_enblsts.addWidget(QLabel('Amplifier'), 2, 1) if self.section == 'BO': # Frame Count lbl_acqcnt = QLabel('Frame Count', self) dev = self.device.substitute(dev='TuneProc') self.lb_acqcnt = PyDMLabel(self, dev.substitute(propty='FrameCount-Mon')) self.lb_acqcnt.setAlignment(Qt.AlignCenter) self.led_acqcnt = PyDMLedMultiChannel(parent=self) self.trigNrPulseChannel = SiriusConnectionSignal( self.trigger.substitute(prefix=self.prefix, propty='NrPulses-RB')) self.trigNrPulseChannel.new_value_signal[int].connect( self._updateNrAcq) hbox_acqcnt = QHBoxLayout() hbox_acqcnt.addWidget(self.lb_acqcnt) hbox_acqcnt.addWidget(self.led_acqcnt) # Nr. Samples p/ spec lbl_nrsmp = QLabel('Nr. Samples p/ Spec.', self) self.lb_nrsmp = PyDMLabel(parent=self, init_channel=self.device.substitute( dev='TuneProc', propty_name='SwePts', propty_suffix='RB')) if self.section == 'SI': # Acquisition Time lbl_acqtime = QLabel('Acq. Time', self) self.cb_acqtime = PyDMEnumComboBox( parent=self, init_channel=self.device.substitute(dev='TuneProc', propty_name='Trace', propty_suffix='Mon', field='SCAN')) # Sweep time lbl_swetime = QLabel('Sweep Time [ms]', self) self.lb_swetime = PyDMLabel(parent=self, init_channel=self.device.substitute( dev='TuneProc', propty_name='SweTime', propty_suffix='Mon')) # Span lbl_span = QLabel('Span [kHz]', self) self.le_span = PyDMLineEdit(self, self.device.substitute(propty='Span-SP')) self.le_span.precisionFromPV = True self.lb_span = PyDMLabel(self, self.device.substitute(propty='Span-RB')) hbox_span = QHBoxLayout() hbox_span.addWidget(self.le_span) hbox_span.addWidget(self.lb_span) # RBW lbl_rbw = QLabel('RBW', self) if self.section == 'BO': self.cb_rbw = PyDMEnumComboBox( self, self.device.substitute(propty='SpecAnaRBW-Sel')) else: items = [ '1 Hz', '2 Hz', '3 Hz', '5 Hz', '10 Hz', '20 Hz', '30 Hz', '50 Hz', '100 Hz', '200 Hz', '300 Hz', '500 Hz', '1 kHz', '2 kHz', '3 kHz', '5 kHz', '6.25 kHz', '10 kHz', '20 kHz', '30 kHz', '50 kHz', '100 kHz', '200 kHz', '300 kHz', '500 kHz', '1 MHz', '2 MHz', '3 MHz', '5 MHz', '10 MHz' ] self.cb_rbw = SiriusStringComboBox( self, self.device.substitute(propty='SpecAnaRBW-Sel'), items=items) self.lb_rbw = PyDMLabel( self, self.device.substitute(propty='SpecAnaRBW-Sts')) hbox_rbw = QHBoxLayout() hbox_rbw.addWidget(self.cb_rbw) hbox_rbw.addWidget(self.lb_rbw) # Harmonic lbl_h = QLabel('Harmonic (n)', self) self.sb_h = PyDMSpinbox(self, self.device.substitute(propty='RevN-SP')) self.sb_h.showStepExponent = False self.sb_h.precisionFromPV = True self.lb_h = PyDMLabel(self, self.device.substitute(propty='RevN-RB')) hbox_h = QHBoxLayout() hbox_h.addWidget(self.sb_h) hbox_h.addWidget(self.lb_h) # Harmonic Frequency lbl_Fh = QLabel('Harm. Freq. [kHz]', self) self.lb_Fh = PyDMLabel(parent=self) self.lb_Fh.setToolTip('Frf/(h*n)') self.lb_Fh.channel = self.device.substitute(propty='FreqRevN-Mon') # Frequency Offset lbl_foff = QLabel('Frequency Offset [kHz]', self) self.sb_foff = PyDMSpinbox(self, self.device.substitute(propty='FreqOff-SP')) self.sb_foff.showStepExponent = False self.sb_foff.precisionFromPV = True self.lb_foff = PyDMLabel(self, self.device.substitute(propty='FreqOff-RB')) hbox_foff = QHBoxLayout() hbox_foff.addWidget(self.sb_foff) hbox_foff.addWidget(self.lb_foff) # Center Frequency lbl_Fc = QLabel('Center Frequency [MHz]', self) self.le_Fc = PyDMLineEdit( self, self.device.substitute(propty='CenterFreq-SP')) self.le_Fc.precisionFromPV = True self.lb_Fc = PyDMLabel(self, self.device.substitute(propty='CenterFreq-RB')) hbox_Fc = QHBoxLayout() hbox_Fc.addWidget(self.le_Fc) hbox_Fc.addWidget(self.lb_Fc) # Lock Center Freq. lbl_autoFc = QLabel('Lock Center Frequency ', self) self.bt_autoFc = PyDMStateButton( self, self.device.substitute(propty='CenterFreqAuto-Sel')) self.bt_autoFc.shape = 1 self.led_autoFc = SiriusLedState( self, self.device.substitute(propty='CenterFreqAuto-Sts')) hbox_autoFc = QHBoxLayout() hbox_autoFc.addWidget(self.bt_autoFc) hbox_autoFc.addWidget(self.led_autoFc) # Amplifier Gain lbl_drivegain = QLabel('Amplifier Gain [dB]', self) self.sb_drivegain = PyDMSpinbox( self, self.device.substitute(propty='AmpGain-SP')) self.sb_drivegain.showStepExponent = False self.sb_drivegain.precisionFromPV = True self.lb_drivegain = PyDMLabel( self, self.device.substitute(propty='AmpGain-RB')) hbox_drivegain = QHBoxLayout() hbox_drivegain.addWidget(self.sb_drivegain) hbox_drivegain.addWidget(self.lb_drivegain) if self.section == 'BO': # Auto Configure Excitation lbl_driveauto = QLabel('Auto Config. Excit.', self) self.bt_driveauto = PyDMStateButton( self, self.device.substitute(propty='DriveAuto-Sel')) self.bt_driveauto.shape = 1 self.led_driveauto = SiriusLedState( self, self.device.substitute(propty='DriveAuto-Sts')) hbox_driveauto = QHBoxLayout() hbox_driveauto.addWidget(self.bt_driveauto) hbox_driveauto.addWidget(self.led_driveauto) # Noise Amplitude lbl_noiseamp = QLabel('Noise Amplitude [V]', self) self.sb_noiseamp = PyDMSpinbox( self, self.device.substitute(propty='NoiseAmpl-SP')) self.sb_noiseamp.showStepExponent = False self.sb_noiseamp.precisionFromPV = True self.lb_noiseamp = PyDMLabel( self, self.device.substitute(propty='NoiseAmpl-RB')) hbox_noiseamp = QHBoxLayout() hbox_noiseamp.addWidget(self.sb_noiseamp) hbox_noiseamp.addWidget(self.lb_noiseamp) else: # Noise Amplitude lbl_trkgenlvl = QLabel('Trk. Gen. Power [dBm]', self) self.sb_trkgenlvl = PyDMLineEdit( self, self.device.substitute(propty='SpecAnaTrkGenLvl-SP')) self.lb_trkgenlvl = PyDMLabel( self, self.device.substitute(propty='SpecAnaTrkGenLvl-RB')) hbox_trkgenlvl = QHBoxLayout() hbox_trkgenlvl.addWidget(self.sb_trkgenlvl) hbox_trkgenlvl.addWidget(self.lb_trkgenlvl) # Spectrum Acquisition lbl_getspec = QLabel('Spectrum Acq.', self) self.cb_getspec = PyDMStateButton( parent=self, init_channel=self.device.substitute(dev='TuneProc', propty_name='GetSpectrum', propty_suffix='Sel')) self.cb_getspec.shape = 1 self.lb_getspec = PyDMLed(parent=self, init_channel=self.device.substitute( dev='TuneProc', propty_name='GetSpectrum', propty_suffix='Sts')) hbox_getspec = QHBoxLayout() hbox_getspec.addWidget(self.cb_getspec) hbox_getspec.addWidget(self.lb_getspec) lay = QFormLayout() lay.setLabelAlignment(Qt.AlignRight) lay.setFormAlignment(Qt.AlignCenter) lay.addRow(lbl_acq, hbox_acq) lay.addItem(QSpacerItem(1, 6, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow(lbl_drive, hbox_drive) lay.addRow(lbl_enblsts, gbox_enblsts) if self.section == 'BO': lay.addItem(QSpacerItem(1, 6, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow(lbl_acqcnt, hbox_acqcnt) lay.addItem(QSpacerItem(1, 6, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow(lbl_nrsmp, self.lb_nrsmp) if self.section == 'SI': lay.addRow(lbl_acqtime, self.cb_acqtime) lay.addRow(lbl_swetime, self.lb_swetime) lay.addRow(lbl_span, hbox_span) lay.addRow(lbl_rbw, hbox_rbw) lay.addItem(QSpacerItem(1, 6, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow(lbl_h, hbox_h) lay.addRow(lbl_Fh, self.lb_Fh) lay.addRow(lbl_foff, hbox_foff) lay.addRow(lbl_Fc, hbox_Fc) lay.addRow(lbl_autoFc, hbox_autoFc) lay.addItem(QSpacerItem(1, 6, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow(lbl_drivegain, hbox_drivegain) if self.section == 'BO': lay.addRow(lbl_driveauto, hbox_driveauto) lay.addRow(lbl_noiseamp, hbox_noiseamp) else: lay.addRow(lbl_trkgenlvl, hbox_trkgenlvl) lay.addItem(QSpacerItem(1, 6, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow(lbl_getspec, hbox_getspec) return lay
def _setupControlsWidget(self): ld_acqtime = QLabel('Acquisition Time [ms]', self) sb_acqtime = PyDMSpinbox(self, self.dev_pref + ':SB_ACQTIME') sb_acqtime.showStepExponent = False ld_bunid = QLabel('Bunch Number', self) sb_bunid = PyDMSpinbox(self, self.dev_pref + ':SB_BUNCH_ID') sb_bunid.showStepExponent = False ld_acqsmpl = QLabel('Acq Samples', self) lb_acqsmpl = PyDMLabel(self, self.dev_pref + ':SB_ACQ_SAMPLES') ld_currbun = QLabel('Current Bunch', self) lb_currbun = PyDMLabel(self, self.dev_pref + ':SB_RAW_BUNCH_ID') gbox_dtacq = QGroupBox('Data Acquisition', self) lay_dtacq = QGridLayout(gbox_dtacq) lay_dtacq.addWidget(ld_acqtime, 0, 0) lay_dtacq.addWidget(sb_acqtime, 0, 1) lay_dtacq.addWidget(ld_bunid, 1, 0) lay_dtacq.addWidget(sb_bunid, 1, 1) lay_dtacq.addWidget(ld_acqsmpl, 2, 0) lay_dtacq.addWidget(lb_acqsmpl, 2, 1) lay_dtacq.addWidget(ld_currbun, 3, 0) lay_dtacq.addWidget(lb_currbun, 3, 1) ld_trgexten = QLabel('Internal/External', self) cb_trgexten = PyDMEnumComboBox(self, self.dev_pref + ':SB_EXTEN') ld_trginsel = QLabel('Selection', self) cb_trginsel = PyDMEnumComboBox(self, self.dev_pref + ':SB_TRIG_IN_SEL') ld_trgarm = QLabel('Arm', self) cb_trgarm = PyDMStateButton(self, self.dev_pref + ':SB_ARM') lb_armmon = SiriusLedState(self, self.dev_pref + ':SB_ARM_MON') ld_trgbrarm = QLabel('Auto re-arm', self) cb_trgbrarm = PyDMStateButton(self, self.dev_pref + ':SB_BR_ARM') gbox_trig = QGroupBox('Trigger', self) lay_trig = QGridLayout(gbox_trig) lay_trig.addWidget(ld_trgexten, 0, 0) lay_trig.addWidget(cb_trgexten, 0, 1, 1, 2) lay_trig.addWidget(ld_trginsel, 1, 0) lay_trig.addWidget(cb_trginsel, 1, 1, 1, 2) lay_trig.addWidget(ld_trgarm, 2, 0) lay_trig.addWidget(cb_trgarm, 2, 1) lay_trig.addWidget(lb_armmon, 2, 2) lay_trig.addWidget(ld_trgbrarm, 3, 0) lay_trig.addWidget(cb_trgbrarm, 3, 1) ld_phtrkctrl = QLabel('<h4>Controls</h4>', self, alignment=Qt.AlignCenter) ld_bunnr = QLabel('Bunch Number', self) sb_bunnr = PyDMSpinbox(self, self.dev_pref + ':SB_BUNCH_ID') sb_bunnr.showStepExponent = False ld_gain = QLabel('Gain', self) sb_gain = PyDMSpinbox(self, self.dev_pref + ':PHTRK_GAIN') sb_gain.showStepExponent = False ld_sp = QLabel('Setpoint [deg]', self) sb_sp = PyDMSpinbox(self, self.dev_pref + ':PHTRK_SETPT') sb_sp.showStepExponent = False ld_range = QLabel('Range [kHz]', self) sb_range = PyDMSpinbox(self, self.dev_pref + ':PHTRK_RANGE') sb_range.showStepExponent = False ld_dec = QLabel('Decimation', self) sb_dec = PyDMSpinbox(self, self.dev_pref + ':PHTRK_DECIM') sb_dec.showStepExponent = False ld_rate = QLabel('Rate', self) lb_rate = PyDMLabel(self, self.dev_pref + ':PHTRK_RATE') lb_rate.showUnits = True ld_bw = QLabel('Bandwidth', self) lb_bw = PyDMLabel(self, self.dev_pref + ':PHTRK_BANDWIDTH') lb_bw.showUnits = True ld_loopctrl = QLabel('Loop Control', self) cb_loopctrl = PyDMStateButton(self, self.dev_pref + ':PHTRK_LOOPCTRL') ld_drv2 = QLabel('Use Drive 2', self) cb_drv2 = PyDMStateButton(self, self.dev_pref + ':DRIVE2_TRACK') ld_mod = QLabel('Modulation', self) cb_mod = PyDMStateButton(self, self.dev_pref + ':PHTRK_MOD') lay_phtrkctrl = QGridLayout() lay_phtrkctrl.addWidget(ld_phtrkctrl, 0, 0, 1, 2) lay_phtrkctrl.addWidget(ld_bunnr, 1, 0) lay_phtrkctrl.addWidget(sb_bunnr, 1, 1) lay_phtrkctrl.addWidget(ld_gain, 2, 0) lay_phtrkctrl.addWidget(sb_gain, 2, 1) lay_phtrkctrl.addWidget(ld_sp, 3, 0) lay_phtrkctrl.addWidget(sb_sp, 3, 1) lay_phtrkctrl.addWidget(ld_range, 4, 0) lay_phtrkctrl.addWidget(sb_range, 4, 1) lay_phtrkctrl.addWidget(ld_dec, 5, 0) lay_phtrkctrl.addWidget(sb_dec, 5, 1) lay_phtrkctrl.addWidget(ld_rate, 6, 0) lay_phtrkctrl.addWidget(lb_rate, 6, 1) lay_phtrkctrl.addWidget(ld_bw, 7, 0) lay_phtrkctrl.addWidget(lb_bw, 7, 1) lay_phtrkctrl.addWidget(ld_loopctrl, 8, 0) lay_phtrkctrl.addWidget(cb_loopctrl, 8, 1) lay_phtrkctrl.addWidget(ld_drv2, 9, 0) lay_phtrkctrl.addWidget(cb_drv2, 9, 1) lay_phtrkctrl.addWidget(ld_mod, 10, 0) lay_phtrkctrl.addWidget(cb_mod, 10, 1) ld_phtrkdata = QLabel('<h4>Data</h4>', self, alignment=Qt.AlignCenter) ld_mag = QLabel('Magnitude', self) lb_mag = PyDMLabel(self, self.dev_pref + ':PHTRK_MAG') lb_mag.showUnits = True ld_trgain = QLabel('Transfer Gain', self) lb_trgain = PyDMLabel(self, self.dev_pref + ':PHTRK_TFGAIN') lb_trgain.showUnits = True ld_nshift = QLabel('Normalizing Shift', self) lb_nshift = PyDMLabel(self, self.dev_pref + ':PHTRK_SHIFT') ld_phase = QLabel('Phase', self) lb_phase = PyDMLabel(self, self.dev_pref + ':PHTRK_PHASE') lb_phase.showUnits = True ld_error = QLabel('Error', self) lb_error = PyDMLabel(self, self.dev_pref + ':PHTRK_ERROR') lb_error.showUnits = True ld_trfreq = QLabel('Tracking Frequency', self) lb_trfreq = PyDMLabel(self, self.dev_pref + ':PHTRK_FREQ0') lb_trfreq.showUnits = True ld_trtune = QLabel('Tracking Tune', self) lb_trtune = PyDMLabel(self, self.dev_pref + ':PHTRK_TUNE') lay_phtrkdata = QGridLayout() lay_phtrkdata.addWidget(ld_phtrkdata, 0, 0, 1, 2) lay_phtrkdata.addWidget(ld_mag, 1, 0) lay_phtrkdata.addWidget(lb_mag, 1, 1) lay_phtrkdata.addWidget(ld_trgain, 2, 0) lay_phtrkdata.addWidget(lb_trgain, 2, 1) lay_phtrkdata.addWidget(ld_nshift, 3, 0) lay_phtrkdata.addWidget(lb_nshift, 3, 1) lay_phtrkdata.addWidget(ld_phase, 4, 0) lay_phtrkdata.addWidget(lb_phase, 4, 1) lay_phtrkdata.addWidget(ld_error, 5, 0) lay_phtrkdata.addWidget(lb_error, 5, 1) lay_phtrkdata.addWidget(ld_trfreq, 6, 0) lay_phtrkdata.addWidget(lb_trfreq, 6, 1) lay_phtrkdata.addWidget(ld_trtune, 7, 0) lay_phtrkdata.addWidget(lb_trtune, 7, 1) gbox_phtrk = QGroupBox('Phase Tracking', self) lay_phtrk = QGridLayout(gbox_phtrk) lay_phtrk.setHorizontalSpacing(20) lay_phtrk.addLayout(lay_phtrkctrl, 0, 0) lay_phtrk.addLayout(lay_phtrkdata, 1, 0) gbox_phtrk.setStyleSheet(""" PyDMLabel{ min-width: 6em; max-width: 6em; }""") wid = QWidget() lay = QGridLayout(wid) lay.addWidget(gbox_dtacq, 0, 0) lay.addWidget(gbox_trig, 1, 0) lay.addWidget(gbox_phtrk, 2, 0) return wid
class APUControlWindow(SiriusMainWindow): """APU Control Window.""" def __init__(self, parent=None, prefix=_vaca_prefix, device=''): """Init.""" super().__init__(parent) self._prefix = prefix self._device = _PVName(device) self._beamline = IDSearch.conv_idname_2_beamline(self._device) self.dev_pref = self._device.substitute(prefix=prefix) self.setWindowTitle(device + ' Control Window - ' + self._beamline) self.setObjectName('IDApp') self.setWindowIcon(get_id_icon()) self._setupUi() def _setupUi(self): self._label_title = QLabel('<h3>' + self._device + ' Control - ' + self._beamline + '</h3 >', self, alignment=Qt.AlignCenter) self._label_title.setStyleSheet('max-height:1.29em;') self.wid_mainControls = self._mainControlsWidget() self.wid_ctrlMode = self._ctrlModeWidget() self.wid_beamLinesCtrl = self._beamLinesCtrlWidget() self.wid_auxCommands = self._auxCommandsWidget() self.wid_status = self._statusWidget() cw = QWidget() self.setCentralWidget(cw) lay = QGridLayout(cw) lay.addWidget(self._label_title, 0, 0, 1, 3) lay.addWidget(self.wid_mainControls, 1, 0, 2, 1) lay.addWidget(self.wid_ctrlMode, 1, 1) lay.addWidget(self.wid_beamLinesCtrl, 2, 1) lay.addWidget(self.wid_auxCommands, 3, 0) lay.addWidget(self.wid_status, 3, 1) lay.setRowStretch(0, 1) lay.setRowStretch(1, 1) lay.setRowStretch(2, 2) lay.setRowStretch(3, 3) def _mainControlsWidget(self): self._ld_phs = QLabel('Phase [mm]', self) self._sb_phs = PyDMSpinbox(self, self.dev_pref.substitute(propty='Phase-SP')) self._sb_phs.showStepExponent = False self._lb_phs = PyDMLabel(self, self.dev_pref.substitute(propty='Phase-Mon')) self._ld_kx = QLabel('Kx', self) self._sb_kx = PyDMSpinbox(self, self.dev_pref.substitute(propty='Kx-SP')) self._sb_kx.showStepExponent = False self._lb_kx = PyDMLabel(self, self.dev_pref.substitute(propty='Kx-Mon')) self._ld_phsspd = QLabel('Phase Speed\n[mm/s]', self) self._sb_phsspd = PyDMSpinbox( self, self.dev_pref.substitute(propty='PhaseSpeed-SP')) self._sb_phsspd.showStepExponent = False self._lb_phsspd = PyDMLabel( self, self.dev_pref.substitute(propty='PhaseSpeed-Mon')) self._ld_ismov = QLabel('Motion', self) self._pb_start = PyDMPushButton(self, label='', icon=qta.icon('fa5s.play')) self._pb_start.setToolTip( 'Start automatic motion towards previously entered setpoint.') self._pb_start.channel = self.dev_pref.substitute(propty='DevCtrl-Cmd') self._pb_start.pressValue = 3 # Start self._pb_start.setObjectName('Start') self._pb_start.setStyleSheet( '#Start{min-width:30px; max-width:30px; icon-size:25px;}') self._pb_stop = PyDMPushButton(self, label='', icon=qta.icon('fa5s.stop')) self._pb_stop.setToolTip('Stop all motion, lock all brakes.') self._pb_stop.channel = self.dev_pref.substitute(propty='DevCtrl-Cmd') self._pb_stop.pressValue = 1 # Stop self._pb_stop.setObjectName('Stop') self._pb_stop.setStyleSheet( '#Stop{min-width:30px; max-width:30px; icon-size:25px;}') self._led_ismov = SiriusLedState(self, self.dev_pref + ':Moving-Mon') self._led_motenbl = SiriusLedState( self, self.dev_pref.substitute(propty='MotorsEnbld-Mon')) hbox_motion = QHBoxLayout() hbox_motion.setSpacing(15) hbox_motion.addWidget(self._pb_start) hbox_motion.addWidget(self._pb_stop) hbox_motion.addWidget(self._led_ismov) hbox_motion.addWidget(self._led_motenbl) gbox_main = QGroupBox('Main Controls', self) lay_main = QGridLayout(gbox_main) lay_main.addWidget(self._ld_phs, 0, 0) lay_main.addWidget(self._sb_phs, 0, 1) lay_main.addWidget(self._lb_phs, 0, 2) lay_main.addWidget(self._ld_kx, 1, 0) lay_main.addWidget(self._sb_kx, 1, 1) lay_main.addWidget(self._lb_kx, 1, 2) lay_main.addWidget(self._ld_phsspd, 2, 0) lay_main.addWidget(self._sb_phsspd, 2, 1) lay_main.addWidget(self._lb_phsspd, 2, 2) lay_main.addItem(QSpacerItem(1, 10, QSzPlcy.Ignored, QSzPlcy.Fixed), 3, 0) lay_main.addWidget(self._ld_ismov, 4, 0) lay_main.addLayout(hbox_motion, 4, 1, 1, 2) return gbox_main def _statusWidget(self): self._ld_alarm = QLabel('Alarms', self, alignment=Qt.AlignCenter) self._led_alarm = SiriusLedAlert( self, self.dev_pref.substitute(propty='Alarm-Mon')) self._pb_alarmdetail = QPushButton(qta.icon('fa5s.ellipsis-h'), '', self) self._pb_alarmdetail.setObjectName('dtl') self._pb_alarmdetail.setStyleSheet( "#dtl{min-width:25px; max-width:25px; icon-size:20px;}") connect_window(self._pb_alarmdetail, APUAlarmDetails, self, prefix=self._prefix, device=self._device) self._ld_intlk = QLabel('Interlocks', self, alignment=Qt.AlignCenter) self._led_intlkresume = PyDMLedMultiChannel( self, { self.dev_pref.substitute(propty='IntlkInStop-Mon'): 0, self.dev_pref.substitute(propty='IntlkInEOpnGap-Mon'): 0, self.dev_pref.substitute(propty='IntlkOutPwrEnbld-Mon'): 1 }) self._pb_intlkdetail = QPushButton(qta.icon('fa5s.ellipsis-h'), '', self) self._pb_intlkdetail.setObjectName('dtl') self._pb_intlkdetail.setStyleSheet( "#dtl{min-width:25px; max-width:25px; icon-size:20px;}") connect_window(self._pb_intlkdetail, APUInterlockDetails, self, prefix=self._prefix, device=self._device) self._ld_hwsys = QLabel('Hardware\n&LowLevel', self, alignment=Qt.AlignCenter) self._led_hwsysresume = PyDMLedMultiChannel( self, { self.dev_pref.substitute(propty='StateHw-Mon'): { 'value': [0x4C, 0x3C], 'comp': 'in' }, self.dev_pref.substitute(propty='State-Mon'): { 'value': [1, 4], 'comp': 'in' }, self.dev_pref.substitute(propty='IsOperational-Mon'): 1 }) self._led_hwsysresume.offColor = PyDMLed.Yellow self._led_hwsysresume.onColor = PyDMLed.LightGreen self._pb_hwsysdetail = QPushButton(qta.icon('fa5s.ellipsis-h'), '', self) self._pb_hwsysdetail.setObjectName('dtl') self._pb_hwsysdetail.setStyleSheet( "#dtl{min-width:25px; max-width:25px; icon-size:20px;}") connect_window(self._pb_hwsysdetail, APUHardLLDetails, self, prefix=self._prefix, device=self._device) self._ld_reset = QLabel('Reset', self, alignment=Qt.AlignCenter) self._pb_reset = PyDMPushButton(self, label='', icon=qta.icon('fa5s.sync')) self._pb_reset.setToolTip('Reset active alarms.') self._pb_reset.channel = self.dev_pref.substitute(propty='DevCtrl-Cmd') self._pb_reset.pressValue = 2 # Reset self._pb_reset.setObjectName('Reset') self._pb_reset.setStyleSheet( '#Reset{min-width:30px; max-width:30px; icon-size:25px;}') gbox_alrmintlk = QGroupBox('Status') lay_alrmintlk = QGridLayout(gbox_alrmintlk) lay_alrmintlk.addWidget(self._pb_alarmdetail, 0, 0) lay_alrmintlk.addWidget(self._ld_alarm, 0, 1) lay_alrmintlk.addWidget(self._led_alarm, 0, 2) lay_alrmintlk.addWidget(self._pb_intlkdetail, 1, 0) lay_alrmintlk.addWidget(self._ld_intlk, 1, 1) lay_alrmintlk.addWidget(self._led_intlkresume, 1, 2) lay_alrmintlk.addWidget(self._pb_hwsysdetail, 2, 0) lay_alrmintlk.addWidget(self._ld_hwsys, 2, 1) lay_alrmintlk.addWidget(self._led_hwsysresume, 2, 2) lay_alrmintlk.addWidget(self._ld_reset, 3, 1) lay_alrmintlk.addWidget(self._pb_reset, 3, 2) return gbox_alrmintlk def _ctrlModeWidget(self): self._led_ctrlmode = PyDMLed( self, self.dev_pref.substitute(propty='IsRemote-Mon')) self._led_ctrlmode.offColor = PyDMLed.Red self._led_ctrlmode.onColor = PyDMLed.LightGreen self._lb_ctrlmode = PyDMLabel( self, self.dev_pref.substitute(propty='Interface-Mon')) gbox_ctrlmode = QGroupBox('Control Mode') lay_ctrlmode = QHBoxLayout(gbox_ctrlmode) lay_ctrlmode.setAlignment(Qt.AlignCenter) lay_ctrlmode.addWidget(self._led_ctrlmode) lay_ctrlmode.addWidget(self._lb_ctrlmode) return gbox_ctrlmode def _beamLinesCtrlWidget(self): self._ld_blinesenbl = QLabel('Enable', self) self._sb_blinesenbl = PyDMStateButton( self, self.dev_pref.substitute(propty='BeamLineCtrlEnbl-Sel')) self._led_blinesenbl = SiriusLedState( self, self.dev_pref.substitute(propty='BeamLineCtrlEnbl-Sts')) self._ld_blinesmon = QLabel('Status', self) self._led_blinesmon = SiriusLedState( self, self.dev_pref.substitute(propty='BeamLineCtrl-Mon')) gbox_blines = QGroupBox('Beam Lines Control', self) lay_blines = QGridLayout(gbox_blines) lay_blines.addWidget(self._ld_blinesenbl, 0, 0) lay_blines.addWidget(self._sb_blinesenbl, 0, 1) lay_blines.addWidget(self._led_blinesenbl, 0, 2) lay_blines.addWidget(self._ld_blinesmon, 1, 0) lay_blines.addWidget(self._led_blinesmon, 1, 1, 1, 2) return gbox_blines def _auxCommandsWidget(self): self._ld_speedlim = QLabel('Max Phase Speed\n[mm/s]', self) self._sb_speedlim = PyDMSpinbox( self, self.dev_pref.substitute(propty='MaxPhaseSpeed-SP')) self._sb_speedlim.showStepExponent = False self._sb_speedlim.setStyleSheet('max-width:4.5em;') self._lb_speedlim = PyDMLabel( self, self.dev_pref.substitute(propty='MaxPhaseSpeed-RB')) self._ld_homeaxis = QLabel('Do homing', self) self._pb_home = PyDMPushButton(self, label='', icon=qta.icon('mdi.keyboard-return')) self._pb_home.setToolTip('Execute homing for selected axis.') self._pb_home.channel = self.dev_pref.substitute(propty='DevCtrl-Cmd') self._pb_home.pressValue = 10 # Home self._pb_home.setObjectName('Home') self._pb_home.setStyleSheet( '#Home{min-width:30px; max-width:30px; icon-size:25px;}') self._ld_standby = QLabel('Enable Standby Mode', self) self._pb_standby = PyDMPushButton( self, label='', icon=qta.icon('mdi.alpha-a-box-outline')) self._pb_standby.setToolTip( 'Enable standby mode for automatic motion.') self._pb_standby.channel = \ self.dev_pref.substitute(propty='DevCtrl-Cmd') self._pb_standby.pressValue = 5 # Standby self._pb_standby.setObjectName('Standby') self._pb_standby.setStyleSheet( '#Standby{min-width:30px; max-width:30px; icon-size:25px;}') self._ld_lastcomm = QLabel('Last Command', self) self._lb_lastcomm = PyDMLabel( self, self.dev_pref.substitute(propty='LastDevCtrlCmd-Mon')) gbox_auxcmd = QGroupBox('Auxiliary Commands', self) lay_auxcmd = QGridLayout(gbox_auxcmd) lay_auxcmd.addWidget(self._ld_speedlim, 0, 0) lay_auxcmd.addWidget(self._sb_speedlim, 0, 1) lay_auxcmd.addWidget(self._lb_speedlim, 0, 2) lay_auxcmd.addItem(QSpacerItem(1, 10, QSzPlcy.Ignored, QSzPlcy.Fixed), 1, 0) lay_auxcmd.addWidget(self._ld_homeaxis, 2, 0) lay_auxcmd.addWidget(self._pb_home, 2, 1, 1, 2, alignment=Qt.AlignCenter) lay_auxcmd.addWidget(self._ld_standby, 3, 0) lay_auxcmd.addWidget(self._pb_standby, 3, 1, 1, 2, alignment=Qt.AlignCenter) lay_auxcmd.addWidget(self._ld_lastcomm, 4, 0) lay_auxcmd.addWidget(self._lb_lastcomm, 4, 1, 1, 2) return gbox_auxcmd def contextMenuEvent(self, event): point = event.pos() if self._label_corrsH.underMouse(): menu = self.corrsH.contextMenuEvent(event, return_menu=True) menu.popup(self.mapToGlobal(point)) if self._label_corrsV.underMouse(): menu = self.corrsV.contextMenuEvent(event, return_menu=True) menu.popup(self.mapToGlobal(point))
def _setupLifetimeSettigsWidget(self): self._ld_calcmode = QLabel('Calc Mode:', self, alignment=Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) self._cb_calcmode = PyDMEnumComboBox( self, self.devname.substitute(propty='LtFitMode-Sel')) self._lb_calcmode = SiriusLabel( self, self.devname.substitute(propty='LtFitMode-Sts')) self._lb_calcmode.setAlignment(Qt.AlignCenter) self._ld_curroffset = QLabel('Current\nOffset [mA]:', self, alignment=Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) self._sb_curroffset = SiriusSpinbox( self, self.devname.substitute(propty='CurrOffset-SP')) self._sb_curroffset.showStepExponent = False self._lb_curroffset = PyDMLabel( self, self.devname.substitute(propty='CurrOffset-RB')) self._lb_curroffset.setAlignment(Qt.AlignCenter) self._ld_buffer = QLabel('<h4>Buffer</h4>', self, alignment=Qt.AlignCenter) self._pb_plussett = QPushButton('+', self) self._pb_plussett.setStyleSheet('max-height:0.9em; max-width:0.9em;') self._pb_plussett.released.connect(self._handle_intvl_sett_visibility) self._ld_maxintvl = QLabel('Max. Sampling\nInterval [s]:', self, alignment=Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) self._ld_maxintvl.setToolTip( "Timestamp settings use 2 parameters to define the\n" "timestamp interval.\n\n" "If 'Max. Sampling Interval' == -1:\n" " use 'Last Time' and 'First Time' parameters.\n" "Else:\n" " use 'Max. Sampling Interval' and last timestamp set.\n\n" "Default: use 'Max. Sampling Interval' and 'Last Time'.") hlay_maxintvl = QHBoxLayout() hlay_maxintvl.addWidget(self._pb_plussett) hlay_maxintvl.addWidget(self._ld_maxintvl) self._sb_maxintvl = PyDMSpinbox( self, self.devname.substitute(propty='MaxSplIntvl-SP')) self._sb_maxintvl.precisionFromPV = True self._sb_maxintvl.showStepExponent = False self._lb_maxintvl = PyDMLabel( self, self.devname.substitute(propty='MaxSplIntvl-RB')) self._lb_maxintvl.setAlignment(Qt.AlignCenter) self._lb_maxintvl.precisionFromPV = True self._ld_firstsmpl = QLabel('First Time [s]:', self, alignment=Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) self._ld_firstsmpl.setVisible(False) self._le_firstsmpl = PyDMLineEdit( self, self.devname.substitute(propty='FrstSplTime-SP')) self._le_firstsmpl.setVisible(False) self._lb_firstsmpl_dcct = PyDMLabel( self, self.devname.substitute(propty='FrstSplTime-RB')) self._lb_firstsmpl_dcct.setVisible(False) self._lb_firstsmpl_bpm = PyDMLabel( self, self.devname.substitute(propty='FrstSplTimeBPM-RB')) self._lb_firstsmpl_bpm.setVisible(False) self._pb_firstnow = QPushButton(qta.icon('mdi.clock-end'), '', self) self._pb_firstnow.setObjectName('firstnow') self._pb_firstnow.setStyleSheet( '#firstnow{min-width:25px; max-width:25px; icon-size:20px;}') self._pb_firstnow.setToolTip('Click to set current timestamp') self._pb_firstnow.released.connect(self._update_first_time) self._pb_firstnow.setVisible(False) hbox_sp_first = QHBoxLayout() hbox_sp_first.addWidget(self._le_firstsmpl) hbox_sp_first.addWidget(self._pb_firstnow) self._ld_lastsmpl = QLabel('Last Time [s]:', self, alignment=Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) self._ld_lastsmpl.setToolTip( "If 'Last Time' == -1, use current timestamp.") self._ld_lastsmpl.setVisible(False) self._le_lastsmpl = PyDMLineEdit( self, self.devname.substitute(propty='LastSplTime-SP')) self._le_lastsmpl.setVisible(False) self._lb_lastsmpl_dcct = PyDMLabel( self, self.devname.substitute(propty='LastSplTime-RB')) self._lb_lastsmpl_dcct.setVisible(False) self._lb_lastsmpl_bpm = PyDMLabel( self, self.devname.substitute(propty='LastSplTimeBPM-RB')) self._lb_lastsmpl_bpm.setVisible(False) self._pb_lastnow = QPushButton(qta.icon('mdi.clock-end'), '', self) self._pb_lastnow.setObjectName('lastnow') self._pb_lastnow.setStyleSheet( '#lastnow{min-width:25px; max-width:25px; icon-size:20px;}') self._pb_lastnow.setToolTip('Click to set current timestamp') self._pb_lastnow.released.connect(self._update_last_time) self._pb_lastnow.setVisible(False) hbox_sp_last = QHBoxLayout() hbox_sp_last.addWidget(self._le_lastsmpl) hbox_sp_last.addWidget(self._pb_lastnow) self._ld_smplintvl = QLabel('Samples\nInterval [s]:', self, alignment=Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) self._lb_smplintvl_dcct = PyDMLabel( self, self.devname.substitute(propty='SplIntvl-Mon')) self._lb_smplintvl_bpm = PyDMLabel( self, self.devname.substitute(propty='SplIntvlBPM-Mon')) self._lb_smplintvl_bpm.setVisible(False) self._ld_intvlbtwspl = QLabel('Interval Between\nSamples [s]:', self, alignment=Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) self._sb_intvlbtwspl = PyDMSpinbox( self, self.devname.substitute(propty='MinIntvlBtwSpl-SP')) self._sb_intvlbtwspl.precisionFromPV = True self._sb_intvlbtwspl.showStepExponent = False self._lb_intvlbtwspl = PyDMLabel( self, self.devname.substitute(propty='MinIntvlBtwSpl-RB')) self._lb_intvlbtwspl.setAlignment(Qt.AlignCenter) self._lb_intvlbtwspl.precisionFromPV = True self._ld_bufautoreset = QLabel('Auto Reset:', self, alignment=Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) self._cb_bufautoreset = PyDMEnumComboBox( self, self.devname.substitute(propty='BuffAutoRst-Sel')) self._lb_bufautoreset = PyDMLabel( self, self.devname.substitute(propty='BuffAutoRst-Sts')) self._ld_bufdcurr = QLabel('Auto Reset Delta\nCurrent [mA]:', self, alignment=Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) self._sb_bufdcurr = PyDMSpinbox( self, self.devname.substitute(propty='BuffAutoRstDCurr-SP')) self._sb_bufdcurr.showStepExponent = False self._lb_bufdcurr = PyDMLabel( self, self.devname.substitute(propty='BuffAutoRstDCurr-RB')) self._ld_bufsize = QLabel('Size:', self, alignment=Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) self._lb_bufsize_dcct = PyDMLabel( self, self.devname.substitute(propty='BuffSize-Mon')) self._lb_bufsize_dcct.setAlignment(Qt.AlignCenter) self._lb_bufsize_bpm = PyDMLabel( self, self.devname.substitute(propty='BuffSizeBPM-Mon')) self._lb_bufsize_bpm.setAlignment(Qt.AlignCenter) self._lb_bufsize_bpm.setVisible(False) self._pb_bufreset = PyDMPushButton( self, label='', icon=qta.icon('mdi.delete-empty'), pressValue=1, init_channel=self.devname.substitute(propty='BuffRst-Cmd')) self._pb_bufreset.setObjectName('reset') self._pb_bufreset.setStyleSheet( "#reset{min-width:25px; max-width:25px; icon-size:20px;}") self._ld_sep = QLabel('/', self) self._lb_bufsizetot_dcct = PyDMLabel( self, self.devname.substitute(propty='BuffSizeTot-Mon')) self._lb_bufsizetot_dcct.setStyleSheet("min-width:5em; max-width:5em;") self._lb_bufsizetot_dcct.setAlignment(Qt.AlignCenter) self._lb_bufsizetot_dcct.precision = 0 self._lb_bufsizetot_bpm = PyDMLabel( self, self.devname.substitute(propty='BuffSizeTotBPM-Mon')) self._lb_bufsizetot_bpm.setStyleSheet("min-width:5em; max-width:5em;") self._lb_bufsizetot_bpm.setAlignment(Qt.AlignCenter) self._lb_bufsizetot_bpm.precision = 0 self._lb_bufsizetot_bpm.setVisible(False) glay_bufsize = QGridLayout() glay_bufsize.addWidget(self._lb_bufsize_dcct, 0, 0) glay_bufsize.addWidget(self._lb_bufsize_bpm, 0, 0) glay_bufsize.addWidget(self._pb_bufreset, 0, 1) glay_bufsize.addWidget(self._ld_sep, 0, 2) glay_bufsize.addWidget(self._lb_bufsizetot_dcct, 0, 3) glay_bufsize.addWidget(self._lb_bufsizetot_bpm, 0, 3) glay_bufsize.setColumnStretch(0, 5) glay_bufsize.setColumnStretch(1, 2) glay_bufsize.setColumnStretch(2, 1) glay_bufsize.setColumnStretch(3, 5) gbox = QGroupBox('Lifetime Settings', self) lay = QGridLayout(gbox) lay.addWidget(self._ld_calcmode, 0, 0) lay.addWidget(self._cb_calcmode, 0, 1) lay.addWidget(self._lb_calcmode, 0, 2) lay.addWidget(self._ld_curroffset, 1, 0) lay.addWidget(self._sb_curroffset, 1, 1) lay.addWidget(self._lb_curroffset, 1, 2) lay.addItem(QSpacerItem(1, 1, QSzPlcy.Expanding, QSzPlcy.Minimum), 2, 1) lay.addWidget(self._ld_buffer, 3, 0, 1, 3) lay.addLayout(hlay_maxintvl, 4, 0) lay.addWidget(self._sb_maxintvl, 4, 1) lay.addWidget(self._lb_maxintvl, 4, 2) lay.addWidget(self._ld_firstsmpl, 5, 0) lay.addLayout(hbox_sp_first, 5, 1, 1, 2) lay.addWidget(self._lb_firstsmpl_dcct, 6, 1, 1, 2) lay.addWidget(self._lb_firstsmpl_bpm, 6, 1, 1, 2) lay.addWidget(self._ld_lastsmpl, 7, 0) lay.addLayout(hbox_sp_last, 7, 1, 1, 2) lay.addWidget(self._lb_lastsmpl_dcct, 8, 1, 1, 2) lay.addWidget(self._lb_lastsmpl_bpm, 8, 1, 1, 2) lay.addWidget(self._ld_smplintvl, 9, 0) lay.addWidget(self._lb_smplintvl_dcct, 9, 1) lay.addWidget(self._lb_smplintvl_bpm, 9, 1) lay.addWidget(self._ld_intvlbtwspl, 10, 0) lay.addWidget(self._sb_intvlbtwspl, 10, 1) lay.addWidget(self._lb_intvlbtwspl, 10, 2) lay.addItem(QSpacerItem(20, 5, QSzPlcy.Minimum, QSzPlcy.Fixed), 11, 1) lay.addWidget(self._ld_bufautoreset, 12, 0) lay.addWidget(self._cb_bufautoreset, 12, 1) lay.addWidget(self._lb_bufautoreset, 12, 2) lay.addWidget(self._ld_bufdcurr, 13, 0) lay.addWidget(self._sb_bufdcurr, 13, 1) lay.addWidget(self._lb_bufdcurr, 13, 2) lay.addItem(QSpacerItem(20, 5, QSzPlcy.Minimum, QSzPlcy.Fixed), 14, 1) lay.addWidget(self._ld_bufsize, 15, 0) lay.addLayout(glay_bufsize, 15, 1, 1, 2) return gbox
def _setupGeneralSettingsWidget(self): gbox_generalsettings = QGroupBox('General Measurement Settings', self) l_enbl = QLabel('Enable:', self) self.pydmstatebutton_Enbl = PyDMStateButton( self, self.dcct_prefix.substitute(propty='Enbl-Sel')) self.pydmstatebutton_Enbl.shape = 1 self.led_Enbl = SiriusLedState( self, self.dcct_prefix.substitute(propty='Enbl-Sts')) hlay_enbl = QHBoxLayout() hlay_enbl.addWidget(self.pydmstatebutton_Enbl) hlay_enbl.addWidget(self.led_Enbl) l_meastrig = QLabel('Trigger Source: ', self) self.pydmenumcombobox_MeasTrg = PyDMEnumComboBox( self, self.dcct_prefix.substitute(propty='MeasTrg-Sel')) self.pydmlabel_MeasTrg = PyDMLabel( self, self.dcct_prefix.substitute(propty='MeasTrg-Sts')) hlay_meastrig = QHBoxLayout() hlay_meastrig.addWidget(self.pydmenumcombobox_MeasTrg) hlay_meastrig.addWidget(self.pydmlabel_MeasTrg) l_trigmiss = QLabel('Trigger Is Missing?', self) self.led_TrgMiss = SiriusLedAlert( self, self.dcct_prefix.substitute(propty='TrgIsMissing-Mon')) hlay_trigmiss = QHBoxLayout() hlay_trigmiss.addWidget(self.led_TrgMiss) hlay_trigmiss.setAlignment(Qt.AlignLeft) l_range = QLabel('Range: ', self) self.pydmenumcombobox_Range = PyDMEnumComboBox( self, self.dcct_prefix.substitute(propty='Range-Sel')) self.pydmlabel_Range = PyDMLabel( self, self.dcct_prefix.substitute(propty='Range-Sts')) hlay_range = QHBoxLayout() hlay_range.addWidget(self.pydmenumcombobox_Range) hlay_range.addWidget(self.pydmlabel_Range) l_lowlimenbl = QLabel('Low Beam Current Detection: ', self) self.pydmstatebutton_LowLimEnbl = PyDMStateButton( self, self.dcct_prefix.substitute(propty='LowLimEnbl-Sel')) self.pydmstatebutton_LowLimEnbl.shape = 1 self.pydmlabel_LowLimEnbl = PyDMLabel( self, self.dcct_prefix.substitute(propty='LowLimEnbl-Sts')) hlay_lowlimenbl = QHBoxLayout() hlay_lowlimenbl.addWidget(self.pydmstatebutton_LowLimEnbl) hlay_lowlimenbl.addWidget(self.pydmlabel_LowLimEnbl) l_currthold = QLabel('Current Threshold [mA]: ', self) self.pydmspinbox_CurrThold = PyDMSpinbox( self, self.dcct_prefix.substitute(propty='CurrThold-SP')) self.pydmspinbox_CurrThold.showStepExponent = False self.pydmlabel_CurrThold = PyDMLabel( self, self.dcct_prefix.substitute(propty='CurrThold-RB')) hlay_currthold = QHBoxLayout() hlay_currthold.addWidget(self.pydmspinbox_CurrThold) hlay_currthold.addWidget(self.pydmlabel_CurrThold) l_hfreject = QLabel('High Frequency Rejection: ', self) self.pydmstatebutton_HFReject = PyDMStateButton( self, self.dcct_prefix.substitute(propty='HFReject-Sel')) self.pydmstatebutton_HFReject.shape = 1 self.pydmlabel_HFReject = PyDMLabel( self, self.dcct_prefix.substitute(propty='HFReject-Sts')) hlay_hfreject = QHBoxLayout() hlay_hfreject.addWidget(self.pydmstatebutton_HFReject) hlay_hfreject.addWidget(self.pydmlabel_HFReject) l_measmode = QLabel('Mode: ', self) self.pydmenumcombobox_MeasMode = PyDMEnumComboBox( self, self.dcct_prefix.substitute(propty='MeasMode-Sel')) self.pydmlabel_MeasMode = PyDMLabel( self, self.dcct_prefix.substitute(propty='MeasMode-Sts')) hlay_measmode = QHBoxLayout() hlay_measmode.addWidget(self.pydmenumcombobox_MeasMode) hlay_measmode.addWidget(self.pydmlabel_MeasMode) flay_generalsettings = QFormLayout() flay_generalsettings.setLabelAlignment(Qt.AlignRight) flay_generalsettings.setFormAlignment(Qt.AlignCenter) flay_generalsettings.addRow(l_enbl, hlay_enbl) flay_generalsettings.addRow(l_meastrig, hlay_meastrig) flay_generalsettings.addRow(l_trigmiss, hlay_trigmiss) flay_generalsettings.addRow(l_range, hlay_range) flay_generalsettings.addItem( QSpacerItem(1, 10, QSzPly.Ignored, QSzPly.Preferred)) flay_generalsettings.addRow(l_lowlimenbl, hlay_lowlimenbl) flay_generalsettings.addRow(l_currthold, hlay_currthold) flay_generalsettings.addRow(l_hfreject, hlay_hfreject) flay_generalsettings.addItem( QSpacerItem(1, 10, QSzPly.Ignored, QSzPly.Preferred)) flay_generalsettings.addRow(l_measmode, hlay_measmode) gbox_generalsettings.setLayout(flay_generalsettings) return gbox_generalsettings