def _setupHVPSWidget(self): self._ld_hvpsswtsel = QLabel('Switch', self) self._bt_hvpsswtsel = PyDMStateButton( self, self.prefix + self.dev_pref + ':EG-HVPS:switch') self._ld_hvpsswtsts = QLabel('Status', self) self._led_hvpsswtsts = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-HVPS:swstatus') self._ld_hvpsvoltsp = QLabel('Voltage SP [kV]', self) self._sb_hvpsvoltsp = SiriusSpinbox( self, self.prefix + self.dev_pref + ':EG-HVPS:voltoutsoft') self._sb_hvpsvoltsp.showStepExponent = False self._ld_hvpsvoltrb = QLabel('Voltage RB [kV]', self) self._lb_hvpsvoltrb = PyDMLabel( self, self.prefix + self.dev_pref + ':EG-HVPS:voltinsoft') self._ld_hvpsenblsel = QLabel('Enable') self._bt_hvpsenblsel = PyDMStateButton( self, self.prefix + self.dev_pref + ':EG-HVPS:enable') self._ld_hvpsenblsts = QLabel('Status') self._led_hvpsenblsts = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-HVPS:enstatus') self._ld_hvpscurrsp = QLabel('Current SP [mA]') self._sb_hvpscurrsp = SiriusSpinbox( self, self.prefix + self.dev_pref + ':EG-HVPS:currentoutsoft') self._sb_hvpscurrsp.showStepExponent = False self._ld_hvpscurrrb = QLabel('Current RB [mA]') self._lb_hvpscurrrb = PyDMLabel( self, self.prefix + self.dev_pref + ':EG-HVPS:currentinsoft') wid = QGroupBox('High Voltage Power Supply', self) lay = QGridLayout(wid) lay.addWidget(self._ld_hvpsswtsel, 0, 0) lay.addWidget(self._bt_hvpsswtsel, 1, 0) lay.addWidget(self._ld_hvpsswtsts, 0, 1) lay.addWidget(self._led_hvpsswtsts, 1, 1) lay.addWidget(self._ld_hvpsvoltsp, 0, 2) lay.addWidget(self._sb_hvpsvoltsp, 1, 2) lay.addWidget(self._ld_hvpsvoltrb, 0, 3) lay.addWidget(self._lb_hvpsvoltrb, 1, 3) lay.addItem(QSpacerItem(1, 15, QSzPlcy.Ignored, QSzPlcy.Fixed), 2, 0) lay.addWidget(self._ld_hvpsenblsel, 3, 0) lay.addWidget(self._bt_hvpsenblsel, 4, 0) lay.addWidget(self._ld_hvpsenblsts, 3, 1) lay.addWidget(self._led_hvpsenblsts, 4, 1) lay.addWidget(self._ld_hvpscurrsp, 3, 2) lay.addWidget(self._sb_hvpscurrsp, 4, 2) lay.addWidget(self._ld_hvpscurrrb, 3, 3) lay.addWidget(self._lb_hvpscurrrb, 4, 3) return wid
def _setupBiasPSWidget(self): self._ld_biasswtsel = QLabel('Switch', self) self._bt_biasswtsel = PyDMStateButton( self, self.prefix + self.dev_pref + ':EG-BiasPS:switch') self._ld_biasswtsts = QLabel('Status', self) self._led_biassswtsts = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-BiasPS:swstatus') self._ld_biasvoltsp = QLabel('Voltage SP [V]', self) self._sb_biasvoltsp = SiriusSpinbox( self, self.prefix + self.dev_pref + ':EG-BiasPS:voltoutsoft') self._sb_biasvoltsp.showStepExponent = False self._ld_biasvoltrb = QLabel('Voltage RB [V]', self) self._lb_biasvoltrb = PyDMLabel( self, self.prefix + self.dev_pref + ':EG-BiasPS:voltinsoft') self._ld_biascurrrb = QLabel('Current RB [A]', self) self._lb_biascurrrb = PyDMLabel( self, self.prefix + self.dev_pref + ':EG-BiasPS:currentinsoft') wid = QGroupBox('Bias Power Supply', self) lay = QGridLayout(wid) lay.addWidget(self._ld_biasswtsel, 0, 0) lay.addWidget(self._bt_biasswtsel, 1, 0) lay.addWidget(self._ld_biasswtsts, 0, 1) lay.addWidget(self._led_biassswtsts, 1, 1) lay.addWidget(self._ld_biasvoltsp, 0, 2) lay.addWidget(self._sb_biasvoltsp, 1, 2) lay.addWidget(self._ld_biasvoltrb, 0, 3) lay.addWidget(self._lb_biasvoltrb, 1, 3) lay.addWidget(self._ld_biascurrrb, 0, 4) lay.addWidget(self._lb_biascurrrb, 1, 4) return wid
def _setupMultiPulsePSWidget(self): self._ld_mpulspwrsp = QLabel('Power SP [V]', self) self._sb_mpulspwrsp = SiriusSpinbox( self, self.prefix + self.dev_pref + ':EG-PulsePS:poweroutsoft') self._sb_mpulspwrsp.limitsFromChannel = False self._sb_mpulspwrsp.setMinimum(0) self._sb_mpulspwrsp.setMaximum(300) self._sb_mpulspwrsp.showStepExponent = False self._ld_mpulspwrrb = QLabel('Power RB [V]', self) self._lb_mpulspwrrb = PyDMLabel( self, self.prefix + self.dev_pref + ':EG-PulsePS:powerinsoft') wid = QGroupBox('Multi Pulse Power Supply', self) lay = QGridLayout(wid) lay.setAlignment(Qt.AlignVCenter) lay.addWidget(self._ld_mpulspwrsp, 0, 0) lay.addWidget(self._sb_mpulspwrsp, 1, 0) lay.addWidget(self._ld_mpulspwrrb, 0, 1) lay.addWidget(self._lb_mpulspwrrb, 1, 1) return wid
def create_pair(self, parent, pvname, device=None, is_vert=False): """.""" device = device or self.device basename = _PVName(device).substitute(prefix=self.prefix, propty_name=pvname) wid = QWidget(parent) if is_vert: lay = QVBoxLayout(wid) else: lay = QHBoxLayout(wid) lay.setContentsMargins(0, 0, 0, 0) pdm_spbx = SiriusSpinbox(wid, basename.substitute(propty_suffix='SP')) pdm_spbx.showStepExponent = False pdm_lbl = PyDMLabel(wid, basename.substitute(propty_suffix='RB')) pdm_lbl.setAlignment(Qt.AlignCenter) lay.addWidget(pdm_spbx) lay.addWidget(pdm_lbl) wid.sp_wid = pdm_spbx wid.rb_wid = pdm_lbl return wid
def _setupUi(self): gl = QGridLayout(self) fig = mplt.figure() wid = MatplotlibWidget(fig, parent=self) wid.setObjectName('fig_result') wid.setStyleSheet('#fig_result{min-width: 25em;}') self.fig_res = wid gs = mgs.GridSpec(3, 1) gs.update(left=0.18, right=0.98, top=0.97, bottom=0.08, hspace=0.25) axes = wid.figure.add_subplot(gs[0, 0]) axes.set_xlabel('Index') axes.set_ylabel('Normalized Emit. [mm.mrad]') axes.grid(True) axes.set_aspect('auto') self.line_nemitx_tm = axes.plot( self.nemitx_tm, '-bo', lw=1, label='Hor. Trans. Mat.')[0] self.line_nemitx_parf = axes.plot( self.nemitx_parf, '--bd', lw=1, label='Hor. Parab. Fit')[0] self.line_nemity_tm = axes.plot( self.nemity_tm, '--ro', lw=1, label='Vert. Trans. Mat.')[0] self.line_nemity_parf = axes.plot( self.nemity_parf, '--rd', lw=1, label='Vert. Parab. Fit')[0] axes.legend(loc='best') axes = wid.figure.add_subplot(gs[1, 0]) axes.set_xlabel('Index') axes.set_ylabel(r'$\beta$ [m]') self.line_betax_tm = axes.plot( self.betax_tm, '-bo', lw=1, label='Hor. Trans. Mat.')[0] self.line_betax_parf = axes.plot( self.betax_parf, '--bd', lw=1, label='Hor. Parab. Fit')[0] self.line_betay_tm = axes.plot( self.betay_tm, '--ro', lw=1, label='Vert. Trans. Mat.')[0] self.line_betay_parf = axes.plot( self.betay_parf, '--rd', lw=1, label='Vert. Parab. Fit')[0] axes = wid.figure.add_subplot(gs[2, 0]) axes.set_xlabel('Index') axes.set_ylabel(r'$\alpha$') self.line_alphax_tm = axes.plot( self.alphax_tm, '-bo', lw=1, label='Hor. Trans. Mat.')[0] self.line_alphax_parf = axes.plot( self.alphax_parf, '--bd', lw=1, label='Hor. Parab. Fit')[0] self.line_alphay_tm = axes.plot( self.alphay_tm, '--ro', lw=1, label='Vert. Trans. Mat.')[0] self.line_alphay_parf = axes.plot( self.alphay_parf, '--rd', lw=1, label='Vert. Parab. Fit')[0] measlay = QVBoxLayout() gb = QGroupBox('QF3 Current [A]', self) measlay.addWidget(gb) gb.setLayout(QHBoxLayout()) spnbox = SiriusSpinbox( gb, _PVName('LI-01:PS-QF3:Current-SP').substitute( prefix=self._prefix)) lbl = SiriusLabel( gb, _PVName('LI-01:PS-QF3:Current-Mon').substitute( prefix=self._prefix)) spnbox.showStepExponent = False gb.layout().addWidget(spnbox) gb.layout().addWidget(lbl) gb.layout().setAlignment(Qt.AlignTop) gb = QGroupBox('Data Acquisition Configs.', self) fl = QFormLayout(gb) measlay.addWidget(gb) self.pb_start = QPushButton('Start', gb) self.pb_start.clicked.connect(self.pb_start_clicked) self.pb_stop = QPushButton('Stop', gb) self.pb_stop.clicked.connect(self.pb_stop_clicked) self.pb_stop.setEnabled(False) hbox_bts = QHBoxLayout() hbox_bts.addWidget(self.pb_start) hbox_bts.addWidget(self.pb_stop) fl.addRow(hbox_bts) self.cbbox_plane = QComboBox(gb) self.cbbox_plane.addItem('Horizontal') self.cbbox_plane.addItem('Vertical') fl.addRow(QLabel('Plane', gb), self.cbbox_plane) self.spbox_steps = QSpinBoxPlus(gb) self.spbox_steps.setValue(11) fl.addRow(QLabel('Nr Steps', gb), self.spbox_steps) self.spbox_samples = QSpinBoxPlus(gb) self.spbox_samples.setMinimum(1) self.spbox_samples.setValue(16) fl.addRow(QLabel('Nr Samples per step', gb), self.spbox_samples) self.spbox_outliers = QSpinBoxPlus(gb) self.spbox_outliers.setMinimum(0) self.spbox_outliers.setValue(12) fl.addRow(QLabel('Nr Outliers', gb), self.spbox_outliers) self.spbox_I_ini = QDoubleSpinBoxPlus(gb) self.spbox_I_ini.setMinimum(-4) self.spbox_I_ini.setMaximum(4) self.spbox_I_ini.setValue(-0.7) self.spbox_I_ini.setDecimals(3) fl.addRow(QLabel('Initial Current [A]', gb), self.spbox_I_ini) self.spbox_I_end = QDoubleSpinBoxPlus(gb) self.spbox_I_end.setMinimum(-4) self.spbox_I_end.setMaximum(4) self.spbox_I_end.setValue(0.7) self.spbox_I_end.setDecimals(3) fl.addRow(QLabel('Final Current [A]', gb), self.spbox_I_end) self.spbox_threshold = QDoubleSpinBoxPlus(gb) self.spbox_threshold.setMinimum(0) self.spbox_threshold.setMaximum(20) self.spbox_threshold.setValue(4) self.spbox_threshold.setDecimals(2) fl.addRow(QLabel('Max. Size Accpbl. [mm]', gb), self.spbox_threshold) measlay.setStretch(0, 2) measlay.setStretch(1, 8) anllay = QVBoxLayout() gb = QGroupBox('Analysis Configs.', self) vl = QVBoxLayout(gb) anllay.addWidget(gb) self.spbox_energy = QDoubleSpinBoxPlus(gb) self.spbox_energy.setMinimum(0.511) self.spbox_energy.setMaximum(200) self.spbox_energy.setValue(150) self.spbox_energy.setDecimals(2) self.pb_analyse_data = QPushButton('Analyse', gb) self.pb_analyse_data.clicked.connect(self.pb_analyse_data_clicked) hl = QHBoxLayout() hl.addWidget(QLabel('Energy [MeV]', gb)) hl.addWidget(self.spbox_energy) hl.addWidget(self.pb_analyse_data) vl.addLayout(hl) self.pb_save_data = QPushButton('Save Raw', gb) self.pb_save_data.clicked.connect(self.pb_save_data_clicked) self.pb_load_data = QPushButton('Load Raw', gb) self.pb_load_data.clicked.connect(self.pb_load_data_clicked) hl = QHBoxLayout() hl.addWidget(self.pb_save_data) hl.addWidget(self.pb_load_data) vl.addLayout(hl) self.logdisplay = PyDMLogDisplay(self, level=_log.INFO) vl.addWidget(self.logdisplay) resultsgb = QGroupBox('Results', self) gl2 = QGridLayout(resultsgb) gl2.addWidget(QLabel('Trans. Matrix', resultsgb), 0, 1, 1, 2) gl2.addWidget(QLabel('Parabola Fit', resultsgb), 0, 3, 1, 2) gl2.addWidget(QLabel('Hor.', resultsgb), 1, 1) gl2.addWidget(QLabel('Vert.', resultsgb), 1, 2) gl2.addWidget(QLabel('Hor.', resultsgb), 1, 3) gl2.addWidget(QLabel('Vert.', resultsgb), 1, 4) gl2.addWidget(QLabel('Norm. emitt.\n[mm.mrad]', resultsgb), 2, 0) gl2.addWidget(QLabel('beta [m]', resultsgb), 3, 0) gl2.addWidget(QLabel('alpha', resultsgb), 4, 0) for i, pref in enumerate(('nemit', 'beta', 'alpha')): for j, tp in enumerate(('x_tm', 'y_tm', 'x_parf', 'y_parf')): name = pref + tp lb = QLabel('----', resultsgb) setattr(self, 'lb_' + name, lb) gl2.addWidget(lb, i+2, j+1) wid = MatplotlibWidget(parent=self) axes = wid.figure.add_subplot(111) axes.set_xlabel('Quad. Current [A]') axes.set_ylabel('Beam Size [mm]') wid.figure.set_tight_layout(True) self.line_sigmax = axes.plot([], 'bo', lw=1, label='Horizontal')[0] self.line_sigmay = axes.plot([], 'ro', lw=1, label='Vertical')[0] self.line_fit = axes.plot([], '-k', lw=1)[0] wid.setObjectName('fig_sigma') wid.setStyleSheet('#fig_sigma{min-width: 25em;}') self.fig_sigma = wid gl.addWidget(self.plt_image, 0, 0, 2, 1) gl.addItem(measlay, 0, 1) gl.addWidget(self.fig_sigma, 1, 1) gl.addItem(anllay, 0, 2) gl.addWidget(resultsgb, 1, 2) gl.addWidget(self.fig_res, 0, 3, 2, 1)
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 _setupUi(self): pref = _PVName('LI-Glob:AP-MeasEnergy').substitute(prefix=self.prefix) self.plt_energy = SiriusTimePlot( self, init_y_channels=[pref.substitute(propty='Energy-Mon')], background=QColor('white')) self.plt_energy.setLabel('left', text='Energy [MeV]') self.plt_energy.setShowXGrid(True) self.plt_energy.setShowYGrid(True) c = self.plt_energy.curveAtIndex(0) c.color = QColor('blue') c.symbol = c.symbols['Circle'] c.symbolSize = 10 c.lineWidth = 3 c.data_changed.connect(self._update_energy_stats) self.plt_energy.setTimeSpan(100) self.plt_spread = SiriusTimePlot( self, init_y_channels=[pref.substitute(propty='Spread-Mon')], background=QColor('white')) self.plt_spread.setLabel('left', text='Spread [%]') self.plt_spread.setShowXGrid(True) self.plt_spread.setShowYGrid(True) c = self.plt_spread.curveAtIndex(0) c.color = QColor('red') c.symbol = c.symbols['Circle'] c.symbolSize = 10 c.lineWidth = 3 c.data_changed.connect(self._update_spread_stats) self.plt_spread.setTimeSpan(100) gb_ctrl = QGroupBox('Control', self) hl_ctrl = QHBoxLayout(gb_ctrl) vl = QVBoxLayout() wid = QWidget(gb_ctrl) wid.setLayout(QHBoxLayout()) btn = PyDMStateButton(gb_ctrl, pref.substitute(propty='MeasureCtrl-Sel')) led = SiriusLedState(gb_ctrl, pref.substitute(propty='MeasureCtrl-Sts')) wid.layout().addWidget(btn) wid.layout().addWidget(led) vl.addWidget(QLabel('Start/Stop Acq.', gb_ctrl)) vl.addWidget(wid) hl_ctrl.addLayout(vl) vl = QVBoxLayout() wid = QWidget(gb_ctrl) wid.setLayout(QHBoxLayout()) spnbox = SiriusSpinbox( wid, _PVName('LI-01:PS-Spect:Current-SP').substitute( prefix=self.prefix)) lbl = SiriusLabel( wid, _PVName('LI-01:PS-Spect:Current-Mon').substitute( prefix=self.prefix)) spnbox.showStepExponent = False wid.layout().addWidget(spnbox) wid.layout().addWidget(lbl) vl.addWidget(QLabel('Spectrometer Current [A]', gb_ctrl)) vl.addWidget(wid) hl_ctrl.addLayout(vl) gb_ener = QGroupBox('Properties', self) fl_ener = QFormLayout(gb_ener) wid = QWidget(gb_ener) wid.setLayout(QHBoxLayout()) self.lb_ave_en = QLabel('0.000', wid) self.lb_std_en = QLabel('0.000', wid) wid.layout().addWidget(self.lb_ave_en) wid.layout().addWidget( QLabel('<html><head/><body><p>±</p></body></html>', wid)) wid.layout().addWidget(self.lb_std_en) fl_ener.addRow('Energy [MeV]', wid) wid = QWidget(gb_ener) wid.setLayout(QHBoxLayout()) self.lb_ave_sp = QLabel('0.000', wid) self.lb_std_sp = QLabel('0.000', wid) wid.layout().addWidget(self.lb_ave_sp) wid.layout().addWidget( QLabel('<html><head/><body><p>±</p></body></html>', wid)) wid.layout().addWidget(self.lb_std_sp) fl_ener.addRow('Spread [%]', wid) hl_span = QHBoxLayout() hl_span.setSpacing(0) self.spbox_npoints = QSpinBoxPlus(self) self.spbox_npoints.setKeyboardTracking(False) self.spbox_npoints.setMinimum(10) self.spbox_npoints.setMaximum(200000) self.spbox_npoints.setValue(100) self.spbox_npoints.editingFinished.connect(self.nrpoints_edited) hl_span.addWidget(QLabel('Choose TimeSpan [s]:', self)) hl_span.addWidget(self.spbox_npoints) self.pb_reset_data = QPushButton('Reset Data', self) self.pb_reset_data.clicked.connect(self.pb_reset_data_clicked) hl_span.addWidget(self.pb_reset_data) self.plt_image = SiriusProcessImage(self, device=pref) gb_trig = QGroupBox('Trigger', self) hbl = QHBoxLayout(gb_trig) hbl.addWidget( HLTriggerSimple(parent=self, device='LI-Fam:TI-Scrn', prefix=self.prefix)) gb_trig.setLayout(hbl) gl = QGridLayout(self) gl.addLayout(hl_span, 0, 0, 1, 2) gl.addWidget(self.plt_image, 0, 2, 3, 1) gl.addWidget(self.plt_energy, 1, 0, 1, 2) gl.addWidget(self.plt_spread, 2, 0, 1, 2) gl.addWidget(gb_ctrl, 3, 0) gl.addWidget(gb_ener, 3, 1) gl.addWidget(gb_trig, 3, 2) gl.setColumnStretch(0, 3) gl.setColumnStretch(1, 2) gl.setColumnStretch(2, 3)
class LIEgunWindow(SiriusMainWindow): """Egun Control Window.""" def __init__(self, parent=None, prefix=VACA_PREFIX, is_it=False): """Init.""" super().__init__(parent) self.prefix = prefix + ('-' if prefix else '') self.dev_pref = 'IT-EGH' if is_it else 'LI-01' self.dev_desc = 'Injector Test' if is_it else 'Linac' self.setWindowTitle(self.dev_desc + ' E-gun Control Window') self.sec = self.dev_pref[0:2] color = get_appropriate_color(self.sec) self.setWindowIcon(qta.icon('mdi.spotlight-beam', color=color)) self.setObjectName(self.sec + 'App') self._setupUi() def _setupUi(self): cw = QWidget(self) self.setCentralWidget(cw) self.title = QLabel('<h2>' + self.dev_desc + ' E-gun</h2>', self) wid_sysstatus = self._setupSysStatusWidget() wid_hvps = self._setupHVPSWidget() if self.sec == 'IT': wid_timing = ITTIWidget(self, self.prefix) wid_trigger = self._setupTriggerWidget() wid_filaps = self._setupFilaPSWidget() wid_biasps = self._setupBiasPSWidget() wid_pulseps = self._setupPulsePSWidget() wid_multipulseps = self._setupMultiPulsePSWidget() layout = QGridLayout(cw) layout.setVerticalSpacing(12) layout.setHorizontalSpacing(12) layout.addWidget(self.title, 0, 0, 1, 6) if self.sec == 'IT': layout.addWidget(wid_sysstatus, 1, 0, 2, 1) layout.addWidget(wid_hvps, 1, 1, 2, 4) layout.addWidget(wid_timing, 1, 5) layout.addWidget(wid_trigger, 2, 5) layout.addWidget(wid_filaps, 3, 0, 1, 6) layout.addWidget(wid_biasps, 4, 0, 1, 6) layout.addWidget(wid_pulseps, 5, 0, 1, 3) layout.addWidget(wid_multipulseps, 5, 3, 1, 3) layout.setRowStretch(1, 1) layout.setRowStretch(2, 3) else: layout.addWidget(wid_sysstatus, 1, 0, 1, 1) layout.addWidget(wid_hvps, 1, 1, 1, 4) layout.addWidget(wid_trigger, 1, 5) layout.addWidget(wid_filaps, 2, 0, 1, 6) layout.addWidget(wid_biasps, 3, 0, 1, 6) layout.addWidget(wid_pulseps, 4, 0, 1, 3) layout.addWidget(wid_multipulseps, 4, 3, 1, 3) layout.setColumnStretch(0, 3) layout.setColumnStretch(1, 2) layout.setColumnStretch(2, 2) layout.setColumnStretch(3, 2) layout.setColumnStretch(4, 2) layout.setColumnStretch(5, 3) self.setStyleSheet(""" QLabel{ max-height: 2em; qproperty-alignment: AlignCenter; }""") def _setupSysStatusWidget(self): self._ld_sysexternal = QLabel('Ext. Intlk', self) self._led_sysexternal = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-External:status') self._ld_sysvalve = QLabel('Valve', self) self._led_sysvalve = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-Valve:status') self._ld_sysgate = QLabel('Gate', self) self._led_sysgate = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-Gate:status') self._ld_sysvac = QLabel('Vacuum', self) self._led_sysvac = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-Vacuum:status') self._ld_sysplc = QLabel('PLC', self) self._led_sysplc = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-PLC:status') self._led_sysplc.offColor = SiriusLedState.Yellow self._ld_syssysstart = QLabel('System\nStart', self) self._bt_syssysstart = PyDMStateButton( self, self.prefix + self.dev_pref + ':EG-System:start') wid = QGroupBox('System Status', self) lay = QGridLayout(wid) lay.addWidget(self._ld_sysexternal, 0, 0) lay.addWidget(self._led_sysexternal, 0, 1) lay.addWidget(self._ld_sysvalve, 1, 0) lay.addWidget(self._led_sysvalve, 1, 1) lay.addWidget(self._ld_sysgate, 2, 0) lay.addWidget(self._led_sysgate, 2, 1) lay.addWidget(self._ld_sysvac, 3, 0) lay.addWidget(self._led_sysvac, 3, 1) lay.addWidget(self._ld_sysplc, 4, 0) lay.addWidget(self._led_sysplc, 4, 1) lay.addWidget(self._ld_syssysstart, 5, 0) lay.addWidget(self._bt_syssysstart, 5, 1) return wid def _setupHVPSWidget(self): self._ld_hvpsswtsel = QLabel('Switch', self) self._bt_hvpsswtsel = PyDMStateButton( self, self.prefix + self.dev_pref + ':EG-HVPS:switch') self._ld_hvpsswtsts = QLabel('Status', self) self._led_hvpsswtsts = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-HVPS:swstatus') self._ld_hvpsvoltsp = QLabel('Voltage SP [kV]', self) self._sb_hvpsvoltsp = SiriusSpinbox( self, self.prefix + self.dev_pref + ':EG-HVPS:voltoutsoft') self._sb_hvpsvoltsp.showStepExponent = False self._ld_hvpsvoltrb = QLabel('Voltage RB [kV]', self) self._lb_hvpsvoltrb = PyDMLabel( self, self.prefix + self.dev_pref + ':EG-HVPS:voltinsoft') self._ld_hvpsenblsel = QLabel('Enable') self._bt_hvpsenblsel = PyDMStateButton( self, self.prefix + self.dev_pref + ':EG-HVPS:enable') self._ld_hvpsenblsts = QLabel('Status') self._led_hvpsenblsts = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-HVPS:enstatus') self._ld_hvpscurrsp = QLabel('Current SP [mA]') self._sb_hvpscurrsp = SiriusSpinbox( self, self.prefix + self.dev_pref + ':EG-HVPS:currentoutsoft') self._sb_hvpscurrsp.showStepExponent = False self._ld_hvpscurrrb = QLabel('Current RB [mA]') self._lb_hvpscurrrb = PyDMLabel( self, self.prefix + self.dev_pref + ':EG-HVPS:currentinsoft') wid = QGroupBox('High Voltage Power Supply', self) lay = QGridLayout(wid) lay.addWidget(self._ld_hvpsswtsel, 0, 0) lay.addWidget(self._bt_hvpsswtsel, 1, 0) lay.addWidget(self._ld_hvpsswtsts, 0, 1) lay.addWidget(self._led_hvpsswtsts, 1, 1) lay.addWidget(self._ld_hvpsvoltsp, 0, 2) lay.addWidget(self._sb_hvpsvoltsp, 1, 2) lay.addWidget(self._ld_hvpsvoltrb, 0, 3) lay.addWidget(self._lb_hvpsvoltrb, 1, 3) lay.addItem(QSpacerItem(1, 15, QSzPlcy.Ignored, QSzPlcy.Fixed), 2, 0) lay.addWidget(self._ld_hvpsenblsel, 3, 0) lay.addWidget(self._bt_hvpsenblsel, 4, 0) lay.addWidget(self._ld_hvpsenblsts, 3, 1) lay.addWidget(self._led_hvpsenblsts, 4, 1) lay.addWidget(self._ld_hvpscurrsp, 3, 2) lay.addWidget(self._sb_hvpscurrsp, 4, 2) lay.addWidget(self._ld_hvpscurrrb, 3, 3) lay.addWidget(self._lb_hvpscurrrb, 4, 3) return wid def _setupTriggerWidget(self): self._ld_trigsts = QLabel('Status', self) self._led_trigsts = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-TriggerPS:status') self._ld_trigall = QLabel('Trigger Allow', self) self._led_trigall = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-TriggerPS:allow') self._ld_trigenbl = QLabel('Trigger', self) self._bt_trigenblsel = PyDMStateButton( self, self.prefix + self.dev_pref + ':EG-TriggerPS:enable') self._led_trigenblsts = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-TriggerPS:enablereal') wid = QGroupBox('Trigger', self) lay = QGridLayout(wid) lay.addWidget(self._ld_trigsts, 0, 0, 1, 2) lay.addWidget(self._led_trigsts, 1, 0, 1, 2) lay.addWidget(self._ld_trigall, 2, 0, 1, 2) lay.addWidget(self._led_trigall, 3, 0, 1, 2) lay.addWidget(self._ld_trigenbl, 4, 0, 1, 2) lay.addWidget(self._bt_trigenblsel, 5, 0) lay.addWidget(self._led_trigenblsts, 5, 1) return wid def _setupFilaPSWidget(self): self._ld_filaswtsel = QLabel('Switch', self) self._bt_filaswtsel = PyDMStateButton( self, self.prefix + self.dev_pref + ':EG-FilaPS:switch') self._ld_filaswtsts = QLabel('Status', self) self._led_filasswtsts = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-FilaPS:swstatus') self._ld_filacurrsp = QLabel('Current SP [A]', self) self._sb_filacurrsp = SiriusSpinbox( self, self.prefix + self.dev_pref + ':EG-FilaPS:currentoutsoft') self._sb_filacurrsp.showStepExponent = False self._ld_filacurrrb = QLabel('Current RB [A]', self) self._lb_filacurrrb = PyDMLabel( self, self.prefix + self.dev_pref + ':EG-FilaPS:currentinsoft') self._ld_filavoltrb = QLabel('Voltage RB [V]', self) self._lb_filavoltrb = PyDMLabel( self, self.prefix + self.dev_pref + ':EG-FilaPS:voltinsoft') wid = QGroupBox('Filament Power Supply', self) lay = QGridLayout(wid) lay.addWidget(self._ld_filaswtsel, 0, 0) lay.addWidget(self._bt_filaswtsel, 1, 0) lay.addWidget(self._ld_filaswtsts, 0, 1) lay.addWidget(self._led_filasswtsts, 1, 1) lay.addWidget(self._ld_filacurrsp, 0, 2) lay.addWidget(self._sb_filacurrsp, 1, 2) lay.addWidget(self._ld_filacurrrb, 0, 3) lay.addWidget(self._lb_filacurrrb, 1, 3) lay.addWidget(self._ld_filavoltrb, 0, 4) lay.addWidget(self._lb_filavoltrb, 1, 4) return wid def _setupBiasPSWidget(self): self._ld_biasswtsel = QLabel('Switch', self) self._bt_biasswtsel = PyDMStateButton( self, self.prefix + self.dev_pref + ':EG-BiasPS:switch') self._ld_biasswtsts = QLabel('Status', self) self._led_biassswtsts = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-BiasPS:swstatus') self._ld_biasvoltsp = QLabel('Voltage SP [V]', self) self._sb_biasvoltsp = SiriusSpinbox( self, self.prefix + self.dev_pref + ':EG-BiasPS:voltoutsoft') self._sb_biasvoltsp.showStepExponent = False self._ld_biasvoltrb = QLabel('Voltage RB [V]', self) self._lb_biasvoltrb = PyDMLabel( self, self.prefix + self.dev_pref + ':EG-BiasPS:voltinsoft') self._ld_biascurrrb = QLabel('Current RB [A]', self) self._lb_biascurrrb = PyDMLabel( self, self.prefix + self.dev_pref + ':EG-BiasPS:currentinsoft') wid = QGroupBox('Bias Power Supply', self) lay = QGridLayout(wid) lay.addWidget(self._ld_biasswtsel, 0, 0) lay.addWidget(self._bt_biasswtsel, 1, 0) lay.addWidget(self._ld_biasswtsts, 0, 1) lay.addWidget(self._led_biassswtsts, 1, 1) lay.addWidget(self._ld_biasvoltsp, 0, 2) lay.addWidget(self._sb_biasvoltsp, 1, 2) lay.addWidget(self._ld_biasvoltrb, 0, 3) lay.addWidget(self._lb_biasvoltrb, 1, 3) lay.addWidget(self._ld_biascurrrb, 0, 4) lay.addWidget(self._lb_biascurrrb, 1, 4) return wid def _setupPulsePSWidget(self): self._ld_pulsemodsel = QLabel('Mode', self) self._ld_pulsemodsts = QLabel('Status', self) self._ld_pulseswtsel = QLabel('Switch', self) self._ld_pulseswtsts = QLabel('Status', self) self._ld_pulsesing = QLabel('Single', self) self._ld_pulsemult = QLabel('Multi', self) self._bt_pulsesingmod = PyDMStateButton( self, self.prefix + self.dev_pref + ':EG-PulsePS:singleselect') self._led_pulsesingmod = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-PulsePS:singleselstatus') self._bt_pulsesingswt = PyDMStateButton( self, self.prefix + self.dev_pref + ':EG-PulsePS:singleswitch') self._led_pulsesingswt = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-PulsePS:singleswstatus') self._bt_pulsemultmod = PyDMStateButton( self, self.prefix + self.dev_pref + ':EG-PulsePS:multiselect') self._led_pulsemultmod = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-PulsePS:multiselstatus') self._bt_pulsemultswt = PyDMStateButton( self, self.prefix + self.dev_pref + ':EG-PulsePS:multiswitch') self._led_pulsemultswt = SiriusLedState( self, self.prefix + self.dev_pref + ':EG-PulsePS:multiswstatus') wid = QGroupBox('Pulse Power Supply', self) lay = QGridLayout(wid) lay.addWidget(self._ld_pulsemodsel, 0, 1) lay.addWidget(self._ld_pulsemodsts, 0, 2) lay.addWidget(self._ld_pulseswtsel, 0, 3) lay.addWidget(self._ld_pulseswtsts, 0, 4) lay.addWidget(self._ld_pulsesing, 1, 0) lay.addWidget(self._ld_pulsemult, 2, 0) lay.addWidget(self._bt_pulsesingmod, 1, 1) lay.addWidget(self._led_pulsesingmod, 1, 2) lay.addWidget(self._bt_pulsesingswt, 1, 3) lay.addWidget(self._led_pulsesingswt, 1, 4) lay.addWidget(self._bt_pulsemultmod, 2, 1) lay.addWidget(self._led_pulsemultmod, 2, 2) lay.addWidget(self._bt_pulsemultswt, 2, 3) lay.addWidget(self._led_pulsemultswt, 2, 4) return wid def _setupMultiPulsePSWidget(self): self._ld_mpulspwrsp = QLabel('Power SP [V]', self) self._sb_mpulspwrsp = SiriusSpinbox( self, self.prefix + self.dev_pref + ':EG-PulsePS:poweroutsoft') self._sb_mpulspwrsp.limitsFromChannel = False self._sb_mpulspwrsp.setMinimum(0) self._sb_mpulspwrsp.setMaximum(300) self._sb_mpulspwrsp.showStepExponent = False self._ld_mpulspwrrb = QLabel('Power RB [V]', self) self._lb_mpulspwrrb = PyDMLabel( self, self.prefix + self.dev_pref + ':EG-PulsePS:powerinsoft') wid = QGroupBox('Multi Pulse Power Supply', self) lay = QGridLayout(wid) lay.setAlignment(Qt.AlignVCenter) lay.addWidget(self._ld_mpulspwrsp, 0, 0) lay.addWidget(self._sb_mpulspwrsp, 1, 0) lay.addWidget(self._ld_mpulspwrrb, 0, 1) lay.addWidget(self._lb_mpulspwrrb, 1, 1) return wid
def _create_formlayout_groupbox(self, title, props): grpbx = CustomGroupBox(title, self) fbl = QFormLayout(grpbx) grpbx.layoutf = fbl fbl.setLabelAlignment(Qt.AlignVCenter) for prop in props: if len(prop) == 2: pv1, txt = prop isdata = True elif len(prop) == 3: pv1, txt, isdata = prop hbl = QHBoxLayout() not_enum = pv1.endswith('-SP') pv2 = pv1.replace('-SP', '-RB').replace('-Sel', '-Sts') if pv2 != pv1: if not_enum: chan1 = self.get_pvname(pv1, is_data=isdata) wid = SiriusSpinbox(self, init_channel=chan1) wid.setStyleSheet("min-width:5em;") wid.showStepExponent = False wid.limitsFromChannel = False pvn = self.data_prefix + pv1 wid.setMinimum(self.bpmdb[pvn].get('low', -1e10)) wid.setMaximum(self.bpmdb[pvn].get('high', 1e10)) else: wid = PyDMEnumComboBox( self, init_channel=self.get_pvname(pv1, is_data=isdata)) wid.setStyleSheet("min-width:5em;") wid.setObjectName(pv1.replace('-', '')) hbl.addWidget(wid) lab = SiriusLabel( self, init_channel=self.get_pvname(pv2, is_data=isdata)) lab.setObjectName(pv2.replace('-', '')) lab.showUnits = True lab.setStyleSheet("min-width:5em;") hbl.addWidget(lab) lab = QLabel(txt) lab.setObjectName(pv1.split('-')[0]) lab.setStyleSheet("min-width:8em;") fbl.addRow(lab, hbl) return grpbx
def _setupUi(self): label = QLabel('<h3>' + self._title + '</h3>', self, alignment=Qt.AlignCenter) self._process_image = SiriusProcessImage(self, device=self._device_analysis, orientation='H', convertion_set=False) self._process_image.image_view.colorMapMax = 2**16 - 1 # IOC control gbox_ctrl = QGroupBox('Analysis Control') lay_ctrl = QGridLayout(gbox_ctrl) self._ld_enbl = QLabel('Start/Stop: ') self._sb_enbl = PyDMStateButton( gbox_ctrl, self._device_analysis + ':MeasureCtrl-Sel') self._lb_enbl = PyDMLabel(gbox_ctrl, self._device_analysis + ':MeasureCtrl-Sts') self._ld_rate = QLabel('Acq. Rate: ') self._sb_rate = SiriusSpinbox( gbox_ctrl, self._device_analysis + ':MeasureRate-SP') self._sb_rate.showStepExponent = False self._lb_rate = PyDMLabel(gbox_ctrl, self._device_analysis + ':MeasureRate-RB') self._ld_tgtx = QLabel('Target X: ') self._sb_tgtx = SiriusSpinbox(gbox_ctrl, self._device_analysis + ':TargetPosX-SP') self._sb_tgtx.showStepExponent = False self._lb_tgtx = PyDMLabel(gbox_ctrl, self._device_analysis + ':TargetPosX-RB') self._ld_tgty = QLabel('Target Y: ') self._sb_tgty = SiriusSpinbox(gbox_ctrl, self._device_analysis + ':TargetPosY-SP') self._sb_tgty.showStepExponent = False self._lb_tgty = PyDMLabel(gbox_ctrl, self._device_analysis + ':TargetPosY-RB') lay_ctrl.setAlignment(Qt.AlignTop) lay_ctrl.addWidget(self._ld_enbl, 0, 0, 2, 1) lay_ctrl.addWidget(self._sb_enbl, 0, 1) lay_ctrl.addWidget(self._lb_enbl, 1, 1) lay_ctrl.addWidget(self._ld_rate, 2, 0, 2, 1) lay_ctrl.addWidget(self._sb_rate, 2, 1) lay_ctrl.addWidget(self._lb_rate, 3, 1) lay_ctrl.addWidget(self._ld_tgtx, 4, 0, 2, 1) lay_ctrl.addWidget(self._sb_tgtx, 4, 1) lay_ctrl.addWidget(self._lb_tgtx, 5, 1) lay_ctrl.addWidget(self._ld_tgty, 6, 0, 2, 1) lay_ctrl.addWidget(self._sb_tgty, 6, 1) lay_ctrl.addWidget(self._lb_tgty, 7, 1) gbox_sofb = QGroupBox('SOFB Bump [urad]') lay_sofb = QGridLayout(gbox_sofb) ldx = QLabel('X:') ldy = QLabel('Y:') ldd = QLabel('Delta') lda = QLabel('Applied') pre = self._device_analysis lb_dbmpx = SiriusLabel(gbox_sofb, pre + ':NeededDeltaBumpX-Mon') lb_dbmpy = SiriusLabel(gbox_sofb, pre + ':NeededDeltaBumpY-Mon') lb_bmpx = SiriusLabel(gbox_sofb, pre + ':AppliedBumpX-Mon') lb_bmpy = SiriusLabel(gbox_sofb, pre + ':AppliedBumpY-Mon') pb_app = PyDMPushButton(gbox_sofb, 'Apply', pressValue=1, init_channel=pre + ':ApplyBump-Cmd') pb_app.showConfirmDialog = True pb_app.confirmMessage = \ 'This action will change the reference orbit used in SOFB.\n' +\ pb_app.confirmMessage lb_app = PyDMLabel(gbox_sofb, init_channel=pre + ':ApplyStatus-Mon') lay_sofb.setAlignment(Qt.AlignTop) lay_sofb.addWidget(ldd, 0, 1, alignment=Qt.AlignCenter) lay_sofb.addWidget(lda, 0, 2, alignment=Qt.AlignCenter) lay_sofb.addWidget(ldx, 1, 0, alignment=Qt.AlignLeft) lay_sofb.addWidget(ldy, 2, 0, alignment=Qt.AlignLeft) lay_sofb.addWidget(lb_dbmpx, 1, 1) lay_sofb.addWidget(lb_dbmpy, 2, 1) lay_sofb.addWidget(lb_bmpx, 1, 2) lay_sofb.addWidget(lb_bmpy, 2, 2) hbl = QHBoxLayout() hbl.addStretch() hbl.addWidget(pb_app) hbl.addWidget(lb_app) hbl.addStretch() lay_sofb.addLayout(hbl, 3, 0, 1, 3) lay_sofb.setRowStretch(4, 5) # Camera Acquisition Status gbox_acqsett = QGroupBox('Camera Acquisition Statuses') lay_acqsett = QGridLayout(gbox_acqsett) self._ld_acqtime = QLabel('Acquire Time: ') self._sb_acqtime = SiriusSpinbox( gbox_ctrl, self._device_cam + ':cam1:AcquireTime') self._sb_acqtime.showStepExponent = False self._sb_acqtime.limitsFromChannel = False self._sb_acqtime.setRange(0.001, 10) self._lb_acqtime = PyDMLabel( gbox_acqsett, self._device_cam + ':cam1:AcquireTime_RBV') self._lb_acqtime.showUnits = True self._ld_acqperd = QLabel('Acquire Period: ') self._sb_acqperd = SiriusSpinbox( gbox_ctrl, self._device_cam + ':cam1:AcquirePeriod') self._sb_acqperd.showStepExponent = False self._sb_acqperd.limitsFromChannel = False self._sb_acqperd.setRange(0.001, 10) self._lb_acqperd = PyDMLabel( gbox_acqsett, self._device_cam + ':cam1:AcquirePeriod_RBV') self._lb_acqperd.showUnits = True self._ld_numimgs = QLabel('# Images: ') self._lb_numimgs = PyDMLabel(gbox_acqsett, self._device_cam + ':cam1:NumImages_RBV') self._ld_imgmode = QLabel('Image Mode: ') self._lb_imgmode = PyDMLabel(gbox_acqsett, self._device_cam + ':cam1:ImageMode_RBV') self._ld_acqsts = QLabel('Acquire Status: ') self._pb_acqsts = PyDMStateButton(gbox_acqsett, self._device_cam + ':cam1:Acquire') self._lb_acqsts = SiriusLedState( gbox_acqsett, self._device_cam + ':cam1:Acquire_RBV') self._ld_capsts = QLabel('Capture Status: ') self._pb_capsts = PyDMStateButton(gbox_acqsett, self._device_cam + ':HDF1:Capture') self._lb_capsts = SiriusLedState( gbox_acqsett, self._device_cam + ':HDF1:Capture_RBV') lay_acqsett.addWidget(self._ld_acqtime, 0, 0, 2, 1) lay_acqsett.addWidget(self._sb_acqtime, 0, 1) lay_acqsett.addWidget(self._lb_acqtime, 1, 1) lay_acqsett.addWidget(self._ld_acqperd, 2, 0, 2, 1) lay_acqsett.addWidget(self._sb_acqperd, 2, 1) lay_acqsett.addWidget(self._lb_acqperd, 3, 1) lay_acqsett.addWidget(self._ld_acqsts, 4, 0, 2, 1) lay_acqsett.addWidget(self._pb_acqsts, 4, 1) lay_acqsett.addWidget(self._lb_acqsts, 5, 1) lay_acqsett.addWidget(self._ld_capsts, 6, 0, 2, 1) lay_acqsett.addWidget(self._pb_capsts, 6, 1) lay_acqsett.addWidget(self._lb_capsts, 7, 1) lay_acqsett.addWidget(self._ld_numimgs, 8, 0) lay_acqsett.addWidget(self._lb_numimgs, 8, 1) lay_acqsett.addWidget(self._ld_imgmode, 9, 0) lay_acqsett.addWidget(self._lb_imgmode, 9, 1) lay_acqsett.setRowStretch(10, 20) self.cw = QWidget() self.cw.setStyleSheet('PyDMLabel{qproperty-alignment: AlignCenter;}') lay = QGridLayout(self.cw) lay.addWidget(label, 0, 0, 1, 3) lay.addWidget(self._process_image, 1, 0, 2, 1) lay.addWidget(gbox_ctrl, 1, 1) lay.addWidget(gbox_sofb, 2, 1) lay.addWidget(gbox_acqsett, 1, 2, 2, 1) lay.setColumnStretch(0, 7) lay.setColumnStretch(1, 2) self.setCentralWidget(self.cw)