Exemplo n.º 1
0
    def _init_ui(self):
        # Widgets
        self._txt_step_count = NumericalAttributeLineEdit(self.CLASS.step_count)
        self._txt_step_count.setFormat('{0:d}')
        self._txt_step_size = NumericalAttributeLineEdit(self.CLASS.step_size)
        self._txt_frame_count = NumericalAttributeLineEdit(self.CLASS.frame_count)
        self._txt_frame_count.setFormat('{0:d}')
        self._wdg_position_start = SpecimenPositionWidget(inline=True)
        self._wdg_position_end = SpecimenPositionWidget(inline=True)

        # Layout
        layout = _AcquisitionRasterWidget._init_ui(self)
        layout.insertRow(0, '<i>Step count</i>', self._txt_step_count)
        layout.insertRow(1, 'Step size', self._txt_step_size)
        layout.addRow('Frame count', self._txt_frame_count)
        layout.addRow('Start position', self._wdg_position_start)
        layout.addRow('End position', self._wdg_position_end)

        # Signals
        self._txt_step_count.textEdited.connect(self.edited)
        self._txt_step_size.textEdited.connect(self.edited)
        self._txt_frame_count.textEdited.connect(self.edited)
        self._wdg_position_start.edited.connect(self.edited)
        self._wdg_position_end.edited.connect(self.edited)

        return layout
Exemplo n.º 2
0
    def _init_ui(self):
        # Widgets
        self._txt_pixel_count_u = NumericalAttributeLineEdit(self.CLASS.pixel_count_u)
        self._txt_pixel_count_u.setFormat('{0:d}')
        self._txt_pixel_count_v = NumericalAttributeLineEdit(self.CLASS.pixel_count_v)
        self._txt_pixel_count_v.setFormat('{0:d}')
        self._txt_exposure_time = NumericalAttributeLineEdit(self.CLASS.exposure_time)
        self._txt_magnification = NumericalAttributeLineEdit(self.CLASS.magnification)
        self._txt_magnification.setFormat('{0:d}')
        self._txt_focal_length = NumericalAttributeLineEdit(self.CLASS.focal_length)

        # Layout
        layout = _DetectorWidget._init_ui(self)
        layout.insertRow(0, 'Horizontal pixel count', self._txt_pixel_count_u)
        layout.insertRow(1, 'Vertical pixel count', self._txt_pixel_count_v)
        layout.addRow('Exposure time', self._txt_exposure_time)
        layout.addRow('Magnification', self._txt_magnification)
        layout.addRow('Focal length', self._txt_focal_length)

        # Signals
        self._txt_pixel_count_u.textEdited.connect(self.edited)
        self._txt_pixel_count_v.textEdited.connect(self.edited)
        self._txt_exposure_time.textEdited.connect(self.edited)
        self._txt_magnification.textEdited.connect(self.edited)
        self._txt_focal_length.textEdited.connect(self.edited)

        return layout
Exemplo n.º 3
0
    def _init_ui(self):
        # Widgets
        self._txt_bias = NumericalAttributeLineEdit(self.CLASS.bias)
        self._txt_gain = NumericalAttributeLineEdit(self.CLASS.gain)
        self._txt_base_level = NumericalAttributeLineEdit(self.CLASS.base_level)
        self._txt_window = NumericalAttributeLineEdit(self.CLASS.window)
        self._cb_mode = QComboBox()
        self._cb_mode.addItems([None] + list(_PHA_MODES))

        # Layouts
        layout = ParameterWidget._init_ui(self)
        layout.addRow('Bias', self._txt_bias)
        layout.addRow('Gain', self._txt_gain)
        layout.addRow('Base level', self._txt_base_level)
        layout.addRow('Window', self._txt_window)
        layout.addRow('Mode', self._cb_mode)

        # Signals
        self._txt_bias.textEdited.connect(self.edited)
        self._txt_gain.textEdited.connect(self.edited)
        self._txt_base_level.textEdited.connect(self.edited)
        self._txt_window.textEdited.connect(self.edited)
        self._cb_mode.currentIndexChanged.connect(self.edited)

        return layout
Exemplo n.º 4
0
    def _init_ui(self):
        # Widgets
        self._txt_step_count_x = NumericalAttributeLineEdit(self.CLASS.step_count_x)
        self._txt_step_count_x.setFormat('{0:d}')
        self._txt_step_count_y = NumericalAttributeLineEdit(self.CLASS.step_count_y)
        self._txt_step_count_y.setFormat('{0:d}')
        self._txt_step_size_x = NumericalAttributeLineEdit(self.CLASS.step_size_x)
        self._txt_step_size_y = NumericalAttributeLineEdit(self.CLASS.step_size_y)
        self._txt_frame_count = NumericalAttributeLineEdit(self.CLASS.frame_count)
        self._txt_frame_count.setFormat('{0:d}')
        self._cb_location = QComboBox()
        self._cb_location.addItems(list(_POSITION_LOCATIONS))
        self._wdg_position = SpecimenPositionWidget(inline=True)

        # Layouts
        layout = _AcquisitionRasterWidget._init_ui(self)
        layout.insertRow(0, '<i>Step count (x)</i>', self._txt_step_count_x)
        layout.insertRow(1, '<i>Step count (y)</i>', self._txt_step_count_y)
        layout.insertRow(2, 'Step size (x)', self._txt_step_size_x)
        layout.insertRow(3, 'Step size (y)', self._txt_step_size_y)
        layout.addRow('Frame count', self._txt_frame_count)
        layout.addRow('Position', self._cb_location)
        layout.addWidget(self._wdg_position)

        # Signals
        self._txt_step_count_x.textEdited.connect(self.edited)
        self._txt_step_count_y.textEdited.connect(self.edited)
        self._txt_step_size_x.textEdited.connect(self.edited)
        self._txt_step_size_y.textEdited.connect(self.edited)
        self._txt_frame_count.textEdited.connect(self.edited)
        self._cb_location.currentIndexChanged.connect(self.edited)
        self._wdg_position.edited.connect(self.edited)

        return layout
Exemplo n.º 5
0
    def _init_ui(self):
        # Widgets
        self._cb_technology = QComboBox()
        self._cb_technology.addItems([None] + list(_XEDS_TECHNOLOGIES))
        self._txt_nominal_throughput = NumericalAttributeLineEdit(self.CLASS.nominal_throughput)
        self._txt_time_constant = NumericalAttributeLineEdit(self.CLASS.time_constant)
        self._txt_strobe_rate = NumericalAttributeLineEdit(self.CLASS.strobe_rate)
        self._wdg_window = WindowWidget()

        # Layout
        form = DetectorSpectrometerWidget._init_ui(self)
        form.addRow('Technology', self._cb_technology)
        form.addRow('Nominal throughput', self._txt_nominal_throughput)
        form.addRow('Time constant', self._txt_time_constant)
        form.addRow('Strobe rate', self._txt_strobe_rate)
        form.addRow('Window', self._wdg_window)

        # Signals
        self._cb_technology.currentIndexChanged.connect(self.edited)
        self._txt_nominal_throughput.textEdited.connect(self.edited)
        self._txt_time_constant.textEdited.connect(self.edited)
        self._txt_strobe_rate.textEdited.connect(self.edited)
        self._wdg_window.edited.connect(self.edited)

        return form
Exemplo n.º 6
0
class DetectorSpectrometerWidget(_DetectorWidget):

    def __init__(self, parent=None):
        _DetectorWidget.__init__(self, DetectorSpectrometer, parent)

    def _init_ui(self):
        # Widgets
        self._txt_channel_count = NumericalAttributeLineEdit(self.CLASS.channel_count)
        self._txt_channel_count.setFormat('{0:d}')
        self._wdg_calibration = CalibrationWidget()
        self._cb_collection_mode = QComboBox()
        self._cb_collection_mode.addItems([None] + list(_COLLECTION_MODES))

        # Layout
        layout = _DetectorWidget._init_ui(self)
        layout.insertRow(0, '<i>Channel count</i>', self._txt_channel_count)
        layout.insertRow(1, '<i>Calibration</i>', self._wdg_calibration)
        layout.addRow('Collection mode', self._cb_collection_mode)

        # Signals
        self._txt_channel_count.textEdited.connect(self.edited)
        self._wdg_calibration.edited.connect(self.edited)
        self._cb_collection_mode.currentIndexChanged.connect(self.edited)

        return layout

    def _create_parameter(self):
        return self.CLASS(1, CalibrationConstant('Quantity', 'm', 0.0))

    def parameter(self, parameter=None):
        parameter = _DetectorWidget.parameter(self, parameter)
        parameter.channel_count = self._txt_channel_count.text()
        parameter.calibration = self._wdg_calibration.calibration()
        parameter.collection_mode = self._cb_collection_mode.currentText()
        return parameter

    def setParameter(self, condition):
        _DetectorWidget.setParameter(self, condition)
        self._txt_channel_count.setText(condition.channel_count)
        self._wdg_calibration.setCalibration(condition.calibration)
        self._cb_collection_mode.setCurrentIndex(self._cb_collection_mode.findText(condition.collection_mode))

    def setReadOnly(self, state):
        _DetectorWidget.setReadOnly(self, state)
        self._txt_channel_count.setReadOnly(state)
        self._wdg_calibration.setReadOnly(state)
        self._cb_collection_mode.setEnabled(not state)

    def isReadOnly(self):
        return _DetectorWidget.isReadOnly(self) and \
            self._txt_channel_count.isReadOnly() and \
            self._wdg_calibration.isReadOnly() and \
            not self._cb_collection_mode.isEnabled()

    def hasAcceptableInput(self):
        return _DetectorWidget.hasAcceptableInput(self) and \
            self._txt_channel_count.hasAcceptableInput() and \
            self._wdg_calibration.hasAcceptableInput()
Exemplo n.º 7
0
    def _init_ui(self):
        # Widgets
        self._txt_gain = NumericalAttributeLineEdit(self.CLASS.gain)
        self._txt_offset = NumericalAttributeLineEdit(self.CLASS.offset)

        # Layouts
        layout = _CalibrationWidget._init_ui(self)
        layout.addRow('<i>Gain</i>', self._txt_gain)
        layout.addRow('<i>Offset</i>', self._txt_offset)

        # Signals
        self._txt_gain.textEdited.connect(self.edited)
        self._txt_offset.textEdited.connect(self.edited)

        return layout
Exemplo n.º 8
0
    def _init_ui(self):
        # Widgets
        self._txt_dwell_time = NumericalAttributeLineEdit(self.CLASS.dwell_time)
        self._txt_total_time = NumericalAttributeLineEdit(self.CLASS.total_time)
        self._txt_dwell_time_live = NumericalAttributeLineEdit(self.CLASS.dwell_time_live)

        # Layouts
        layout = _ConditionWidget._init_ui(self)
        layout.addRow('Dwell time', self._txt_dwell_time)
        layout.addRow('Total time', self._txt_total_time)
        layout.addRow('Dwell time (live)', self._txt_dwell_time_live)

        # Signals
        self._txt_dwell_time.textEdited.connect(self.edited)
        self._txt_total_time.textEdited.connect(self.edited)
        self._txt_dwell_time_live.textEdited.connect(self.edited)

        return layout
Exemplo n.º 9
0
    def _init_ui(self):
        # Widgets
        self._txt_x = NumericalAttributeLineEdit(self._class.x)
        self._txt_y = NumericalAttributeLineEdit(self._class.y)
        self._txt_z = NumericalAttributeLineEdit(self._class.z)
        self._txt_r = NumericalAttributeLineEdit(self._class.r)
        self._txt_t = NumericalAttributeLineEdit(self._class.t)

        # Layouts
        if self._inline:
            layout = QVBoxLayout()

            layout_xyz = QHBoxLayout()
            layout_xyz.addWidget(QLabel('X'))
            layout_xyz.addWidget(self._txt_x)
            layout_xyz.addWidget(QLabel('Y'))
            layout_xyz.addWidget(self._txt_y)
            layout_xyz.addWidget(QLabel('Z'))
            layout_xyz.addWidget(self._txt_z)

            layout_rt = QHBoxLayout()
            layout_rt.addWidget(QLabel('R'))
            layout_rt.addWidget(self._txt_r)
            layout_rt.addWidget(QLabel('T'))
            layout_rt.addWidget(self._txt_t)

            layout.addLayout(layout_xyz)
            layout.addLayout(layout_rt)
        else:
            layout = _ConditionWidget._init_ui(self)
            layout.addRow('X', self._txt_x)
            layout.addRow('Y', self._txt_y)
            layout.addRow('Z', self._txt_z)
            layout.addRow('R', self._txt_r)
            layout.addRow('T', self._txt_t)

        # Signals
        self._txt_x.textEdited.connect(self.edited)
        self._txt_y.textEdited.connect(self.edited)
        self._txt_z.textEdited.connect(self.edited)
        self._txt_r.textEdited.connect(self.edited)
        self._txt_t.textEdited.connect(self.edited)

        return layout
Exemplo n.º 10
0
    def _init_ui(self):
        # Widgets
        self._txt_grating_d = NumericalAttributeLineEdit(self.CLASS.grating_d)

        # Layouts
        layout = DetectorSpectrometerWidget._init_ui(self)
        layout.addRow('Grating spacing', self._txt_grating_d)

        # Signals
        self._txt_grating_d.textEdited.connect(self.edited)

        return layout
Exemplo n.º 11
0
    def _init_ui(self):
        # Widgets
        self._txt_value = NumericalAttributeLineEdit(self.CLASS.value)

        # Layouts
        layout = _CalibrationWidget._init_ui(self)
        layout.addRow('<i>Value</i>', self._txt_value)

        # Signals
        self._txt_value.textEdited.connect(self.edited)

        return layout
Exemplo n.º 12
0
    def _init_ui(self):
        # Widgets
        self._txt_line = TextAttributeLineEdit(self.CLASS.line)
        self._txt_energy = NumericalAttributeLineEdit(self.CLASS.energy)

        # Layouts
        layout = ElementalIDWidget._init_ui(self)
        layout.addRow('<i>Line</i>', self._txt_line)
        layout.addRow('Energy', self._txt_energy)

        # Signals
        self._txt_line.textEdited.connect(self.edited)
        self._txt_energy.textEdited.connect(self.edited)

        return layout
Exemplo n.º 13
0
    def _init_ui(self):
        # Widgets
        self._txt_dispersion_element = TextAttributeLineEdit(self.CLASS.dispersion_element)
        self._txt_crystal_2d = NumericalAttributeLineEdit(self.CLASS.crystal_2d)
        self._txt_rowland_circle_diameter = NumericalAttributeLineEdit(self.CLASS.rowland_circle_diameter)
        self._wdg_pulse_height_analyser = PulseHeightAnalyserWidget()
        self._wdg_window = WindowWidget()

        # Layouts
        layout = DetectorSpectrometerWidget._init_ui(self)
        layout.addRow('Dispersion element', self._txt_dispersion_element)
        layout.addRow('Crystal 2d-spacing', self._txt_crystal_2d)
        layout.addRow('Rowland circle diameter', self._txt_rowland_circle_diameter)
        layout.addRow('Pulse height analyser', self._wdg_pulse_height_analyser)
        layout.addRow('Window', self._wdg_window)

        # Signals
        self._txt_dispersion_element.textEdited.connect(self.edited)
        self._txt_crystal_2d.textEdited.connect(self.edited)
        self._txt_rowland_circle_diameter.textEdited.connect(self.edited)
        self._wdg_pulse_height_analyser.edited.connect(self.edited)
        self._wdg_window.edited.connect(self.edited)

        return layout
Exemplo n.º 14
0
class ElementalIDXrayWidget(ElementalIDWidget):

    def __init__(self, parent=None):
        _ConditionWidget.__init__(self, ElementalIDXray, parent)

    def _init_ui(self):
        # Widgets
        self._txt_line = TextAttributeLineEdit(self.CLASS.line)
        self._txt_energy = NumericalAttributeLineEdit(self.CLASS.energy)

        # Layouts
        layout = ElementalIDWidget._init_ui(self)
        layout.addRow('<i>Line</i>', self._txt_line)
        layout.addRow('Energy', self._txt_energy)

        # Signals
        self._txt_line.textEdited.connect(self.edited)
        self._txt_energy.textEdited.connect(self.edited)

        return layout

    def _create_parameter(self):
        return self.CLASS(1, 'Ka')

    def parameter(self, parameter=None):
        parameter = ElementalIDWidget.parameter(self, parameter)
        parameter.line = self._txt_line.text()
        parameter.energy = self._txt_energy.text()
        return parameter

    def setParameter(self, condition):
        ElementalIDWidget.setParameter(self, condition)
        self._txt_line.setText(condition.line)
        self._txt_energy.setText(condition.energy)

    def setReadOnly(self, state):
        ElementalIDWidget.setReadOnly(self, state)
        self._txt_line.setReadOnly(state)
        self._txt_energy.setReadOnly(state)

    def isReadOnly(self):
        return ElementalIDWidget.isReadOnly(self) and \
            self._txt_line.isReadOnly() and \
            self._txt_energy.isReadOnly()

    def hasAcceptableInput(self):
        return ElementalIDWidget.hasAcceptableInput(self) and \
            self._txt_line.hasAcceptableInput() and \
            self._txt_energy.hasAcceptableInput()
Exemplo n.º 15
0
    def _init_ui(self):
        # Widgets
        self._cb_signal_type = QComboBox()
        self._cb_signal_type.addItems([None] + list(_SIGNAL_TYPES))
        self._txt_manufacturer = TextAttributeLineEdit(self.CLASS.manufacturer)
        self._txt_model = TextAttributeLineEdit(self.CLASS.model)
        self._txt_serial_number = TextAttributeLineEdit(self.CLASS.serial_number)
        self._txt_measurement_unit = UnitAttributeLineEdit(self.CLASS.measurement_unit)
        self._txt_elevation = NumericalAttributeLineEdit(self.CLASS.elevation)
        self._txt_azimuth = NumericalAttributeLineEdit(self.CLASS.azimuth)
        self._txt_distance = NumericalAttributeLineEdit(self.CLASS.distance)
        self._txt_area = NumericalAttributeLineEdit(self.CLASS.area)
        self._txt_solid_angle = NumericalAttributeLineEdit(self.CLASS.solid_angle)
        self._txt_semi_angle = NumericalAttributeLineEdit(self.CLASS.semi_angle)
        self._txt_temperature = NumericalAttributeLineEdit(self.CLASS.temperature)

        # Layout
        layout = _ConditionWidget._init_ui(self)
        layout.addRow('Type of signal', self._cb_signal_type)
        layout.addRow('Manufacturer', self._txt_manufacturer)
        layout.addRow('Model', self._txt_model)
        layout.addRow('Serial number', self._txt_serial_number)
        layout.addRow('Measurement unit', self._txt_measurement_unit)
        layout.addRow('Elevation', self._txt_elevation)
        layout.addRow('Azimuth', self._txt_azimuth)
        layout.addRow('Distance', self._txt_distance)
        layout.addRow('Area', self._txt_area)
        layout.addRow('Solid angle', self._txt_solid_angle)
        layout.addRow('Semi angle', self._txt_semi_angle)
        layout.addRow('Temperature', self._txt_temperature)

        # Signals
        self._cb_signal_type.currentIndexChanged.connect(self.edited)
        self._txt_manufacturer.textEdited.connect(self.edited)
        self._txt_model.textEdited.connect(self.edited)
        self._txt_serial_number.textEdited.connect(self.edited)
        self._txt_measurement_unit.textEdited.connect(self.edited)
        self._txt_elevation.textEdited.connect(self.edited)
        self._txt_azimuth.textEdited.connect(self.edited)
        self._txt_distance.textEdited.connect(self.edited)
        self._txt_area.textEdited.connect(self.edited)
        self._txt_solid_angle.textEdited.connect(self.edited)
        self._txt_semi_angle.textEdited.connect(self.edited)
        self._txt_temperature.textEdited.connect(self.edited)

        return layout
Exemplo n.º 16
0
    def _init_ui(self):
        # Widgets
        self._txt_channel_count = NumericalAttributeLineEdit(self.CLASS.channel_count)
        self._txt_channel_count.setFormat('{0:d}')
        self._wdg_calibration = CalibrationWidget()
        self._cb_collection_mode = QComboBox()
        self._cb_collection_mode.addItems([None] + list(_COLLECTION_MODES))

        # Layout
        layout = _DetectorWidget._init_ui(self)
        layout.insertRow(0, '<i>Channel count</i>', self._txt_channel_count)
        layout.insertRow(1, '<i>Calibration</i>', self._wdg_calibration)
        layout.addRow('Collection mode', self._cb_collection_mode)

        # Signals
        self._txt_channel_count.textEdited.connect(self.edited)
        self._wdg_calibration.edited.connect(self.edited)
        self._cb_collection_mode.currentIndexChanged.connect(self.edited)

        return layout
Exemplo n.º 17
0
class CalibrationConstantWidget(_CalibrationWidget):

    def __init__(self, parent=None):
        _CalibrationWidget.__init__(self, CalibrationConstant, parent)
#        self.setAccessibleName('constant')

    def _init_ui(self):
        # Widgets
        self._txt_value = NumericalAttributeLineEdit(self.CLASS.value)

        # Layouts
        layout = _CalibrationWidget._init_ui(self)
        layout.addRow('<i>Value</i>', self._txt_value)

        # Signals
        self._txt_value.textEdited.connect(self.edited)

        return layout

    def _create_parameter(self):
        return self.CLASS('Quantity', 'm', 0.0)

    def parameter(self, parameter=None):
        parameter = _CalibrationWidget.parameter(self, parameter)
        parameter.value = self._txt_value.text()
        return parameter

    def setParameter(self, calibration):
        _CalibrationWidget.setParameter(self, calibration)
        self._txt_value.setText(calibration.value)

    def setReadOnly(self, state):
        _CalibrationWidget.setReadOnly(self, state)
        self._txt_value.setReadOnly(state)

    def isReadOnly(self):
        return _CalibrationWidget.isReadOnly(self) and \
            self._txt_value.isReadOnly()

    def hasAcceptableInput(self):
        return _CalibrationWidget.hasAcceptableInput(self) and \
            self._txt_value.hasAcceptableInput()
Exemplo n.º 18
0
class DetectorSpectrometerCLWidget(DetectorSpectrometerWidget):

    def __init__(self, parent=None):
        _DetectorWidget.__init__(self, DetectorSpectrometerCL, parent)

    def _init_ui(self):
        # Widgets
        self._txt_grating_d = NumericalAttributeLineEdit(self.CLASS.grating_d)

        # Layouts
        layout = DetectorSpectrometerWidget._init_ui(self)
        layout.addRow('Grating spacing', self._txt_grating_d)

        # Signals
        self._txt_grating_d.textEdited.connect(self.edited)

        return layout

    def _create_parameter(self):
        return self.CLASS(1, CalibrationConstant('Quantity', 'm', 0.0))

    def parameter(self, parameter=None):
        parameter = DetectorSpectrometerWidget.parameter(self, parameter)
        parameter.grating_d = self._txt_grating_d.text()
        return parameter

    def setParameter(self, condition):
        DetectorSpectrometerWidget.setParameter(self, condition)
        self._txt_grating_d.setText(condition.grating_d)

    def setReadOnly(self, state):
        DetectorSpectrometerWidget.setReadOnly(self, state)
        self._txt_grating_d.setReadOnly(state)

    def isReadOnly(self):
        return DetectorSpectrometerWidget.isReadOnly(self) and \
            self._txt_grating_d.isReadOnly()

    def hasAcceptableInput(self):
        return DetectorSpectrometerWidget.hasAcceptableInput(self) and \
            self._txt_grating_d.hasAcceptableInput()
Exemplo n.º 19
0
class PulseHeightAnalyserWidget(ParameterWidget):

    def __init__(self, parent=None):
        ParameterWidget.__init__(self, PulseHeightAnalyser, parent)

    def _init_ui(self):
        # Widgets
        self._txt_bias = NumericalAttributeLineEdit(self.CLASS.bias)
        self._txt_gain = NumericalAttributeLineEdit(self.CLASS.gain)
        self._txt_base_level = NumericalAttributeLineEdit(self.CLASS.base_level)
        self._txt_window = NumericalAttributeLineEdit(self.CLASS.window)
        self._cb_mode = QComboBox()
        self._cb_mode.addItems([None] + list(_PHA_MODES))

        # Layouts
        layout = ParameterWidget._init_ui(self)
        layout.addRow('Bias', self._txt_bias)
        layout.addRow('Gain', self._txt_gain)
        layout.addRow('Base level', self._txt_base_level)
        layout.addRow('Window', self._txt_window)
        layout.addRow('Mode', self._cb_mode)

        # Signals
        self._txt_bias.textEdited.connect(self.edited)
        self._txt_gain.textEdited.connect(self.edited)
        self._txt_base_level.textEdited.connect(self.edited)
        self._txt_window.textEdited.connect(self.edited)
        self._cb_mode.currentIndexChanged.connect(self.edited)

        return layout

    def parameter(self, parameter=None):
        parameter = ParameterWidget.parameter(self, parameter)
        parameter.bias = self._txt_bias.text()
        parameter.gain = self._txt_gain.text()
        parameter.base_level = self._txt_base_level.text()
        parameter.window = self._txt_window.text()
        parameter.mode = self._cb_mode.currentText()
        return parameter

    def setParameter(self, parameter):
        ParameterWidget.setParameter(self, parameter)
        self._txt_bias.setText(parameter.bias)
        self._txt_gain.setText(parameter.gain)
        self._txt_base_level.setText(parameter.base_level)
        self._txt_window.setText(parameter.window)
        self._cb_mode.setCurrentIndex(self._cb_mode.findText(parameter.mode))

    def pulseHeightAnalyser(self):
        return self.parameter()

    def setPulseHeightAnalyser(self, pha):
        self.setParameter(pha)

    pha = pulseHeightAnalyser

    setPha = setPulseHeightAnalyser

    def setReadOnly(self, state):
        ParameterWidget.setReadOnly(self, state)
        self._txt_bias.setReadOnly(state)
        self._txt_gain.setReadOnly(state)
        self._txt_base_level.setReadOnly(state)
        self._txt_window.setReadOnly(state)
        self._cb_mode.setEnabled(not state)

    def isReadOnly(self):
        return ParameterWidget.isReadOnly(self) and \
            self._txt_bias.isReadOnly() and \
            self._txt_gain.isReadOnly() and \
            self._txt_base_level.isReadOnly() and \
            self._txt_window.isReadOnly() and \
            not self._cb_mode.isEnabled()

    def hasAcceptableInput(self):
        return ParameterWidget.hasAcceptableInput(self) and \
            self._txt_bias.hasAcceptableInput() and \
            self._txt_gain.hasAcceptableInput() and \
            self._txt_base_level.hasAcceptableInput() and \
            self._txt_window.hasAcceptableInput()
Exemplo n.º 20
0
class SpecimenPositionWidget(_ConditionWidget):

    def __init__(self, inline=False, parent=None):
        self._inline = inline
        _ConditionWidget.__init__(self, SpecimenPosition, parent)

    def _init_ui(self):
        # Widgets
        self._txt_x = NumericalAttributeLineEdit(self._class.x)
        self._txt_y = NumericalAttributeLineEdit(self._class.y)
        self._txt_z = NumericalAttributeLineEdit(self._class.z)
        self._txt_r = NumericalAttributeLineEdit(self._class.r)
        self._txt_t = NumericalAttributeLineEdit(self._class.t)

        # Layouts
        if self._inline:
            layout = QVBoxLayout()

            layout_xyz = QHBoxLayout()
            layout_xyz.addWidget(QLabel('X'))
            layout_xyz.addWidget(self._txt_x)
            layout_xyz.addWidget(QLabel('Y'))
            layout_xyz.addWidget(self._txt_y)
            layout_xyz.addWidget(QLabel('Z'))
            layout_xyz.addWidget(self._txt_z)

            layout_rt = QHBoxLayout()
            layout_rt.addWidget(QLabel('R'))
            layout_rt.addWidget(self._txt_r)
            layout_rt.addWidget(QLabel('T'))
            layout_rt.addWidget(self._txt_t)

            layout.addLayout(layout_xyz)
            layout.addLayout(layout_rt)
        else:
            layout = _ConditionWidget._init_ui(self)
            layout.addRow('X', self._txt_x)
            layout.addRow('Y', self._txt_y)
            layout.addRow('Z', self._txt_z)
            layout.addRow('R', self._txt_r)
            layout.addRow('T', self._txt_t)

        # Signals
        self._txt_x.textEdited.connect(self.edited)
        self._txt_y.textEdited.connect(self.edited)
        self._txt_z.textEdited.connect(self.edited)
        self._txt_r.textEdited.connect(self.edited)
        self._txt_t.textEdited.connect(self.edited)

        return layout

    def parameter(self, parameter=None):
        parameter = _ConditionWidget.parameter(self, parameter)
        parameter.x = self._txt_x.text()
        parameter.y = self._txt_y.text()
        parameter.z = self._txt_z.text()
        parameter.r = self._txt_r.text()
        parameter.t = self._txt_t.text()
        return parameter

    def setParameter(self, condition):
        _ConditionWidget.setParameter(self, condition)
        self._txt_x.setText(condition.x)
        self._txt_y.setText(condition.y)
        self._txt_z.setText(condition.z)
        self._txt_r.setText(condition.r)
        self._txt_t.setText(condition.t)
Exemplo n.º 21
0
class AcquisitionRasterXYZWidget(_AcquisitionRasterWidget):

    def __init__(self, parent=None):
        _AcquisitionRasterWidget.__init__(self, AcquisitionRasterXYZ, parent)

    def _init_ui(self):
        # Widgets
        self._txt_step_count_x = NumericalAttributeLineEdit(self.CLASS.step_count_x)
        self._txt_step_count_x.setFormat('{0:d}')
        self._txt_step_count_y = NumericalAttributeLineEdit(self.CLASS.step_count_y)
        self._txt_step_count_y.setFormat('{0:d}')
        self._txt_step_count_z = NumericalAttributeLineEdit(self.CLASS.step_count_z)
        self._txt_step_count_z.setFormat('{0:d}')
        self._txt_step_size_x = NumericalAttributeLineEdit(self.CLASS.step_size_x)
        self._txt_step_size_y = NumericalAttributeLineEdit(self.CLASS.step_size_y)
        self._txt_step_size_z = NumericalAttributeLineEdit(self.CLASS.step_size_z)
        self._cb_raster_mode_z = QComboBox()
        self._cb_raster_mode_z.addItems([None] + list(_RASTER_MODES_Z))
        self._cb_location = QComboBox()
        self._cb_location.addItems(list(_POSITION_LOCATIONS))
        self._wdg_position = SpecimenPositionWidget(inline=True)

        # Layouts
        layout = _AcquisitionRasterWidget._init_ui(self)
        layout.insertRow(0, '<i>Step count (x)</i>', self._txt_step_count_x)
        layout.insertRow(1, '<i>Step count (y)</i>', self._txt_step_count_y)
        layout.insertRow(2, '<i>Step count (z)</i>', self._txt_step_count_z)
        layout.insertRow(3, 'Step size (x)', self._txt_step_size_x)
        layout.insertRow(4, 'Step size (y)', self._txt_step_size_y)
        layout.insertRow(5, 'Step size (z)', self._txt_step_size_z)
        layout.addRow('Raster mode (z)', self._cb_raster_mode_z)
        layout.addRow('Position', self._cb_location)
        layout.addWidget(self._wdg_position)

        # Signals
        self._txt_step_count_x.textEdited.connect(self.edited)
        self._txt_step_count_y.textEdited.connect(self.edited)
        self._txt_step_count_z.textEdited.connect(self.edited)
        self._txt_step_size_x.textEdited.connect(self.edited)
        self._txt_step_size_y.textEdited.connect(self.edited)
        self._txt_step_size_z.textEdited.connect(self.edited)
        self._cb_raster_mode_z.currentIndexChanged.connect(self.edited)
        self._cb_location.currentIndexChanged.connect(self.edited)
        self._wdg_position.edited.connect(self.edited)

        return layout

    def _create_parameter(self):
        return self.CLASS(1, 1, 1)

    def parameter(self, parameter=None):
        parameter = _AcquisitionRasterWidget.parameter(self, parameter)
        parameter.step_count_x = self._txt_step_count_x.text()
        parameter.step_count_y = self._txt_step_count_y.text()
        parameter.step_count_z = self._txt_step_count_z.text()
        parameter.step_size_x = self._txt_step_size_x.text()
        parameter.step_size_y = self._txt_step_size_y.text()
        parameter.step_size_z = self._txt_step_size_z.text()
        parameter.raster_mode_z = self._cb_raster_mode_z.currentText()
        parameter.position = (self._wdg_position.condition(),
                              self._cb_location.currentText())
        return parameter

    def setParameter(self, condition):
        _AcquisitionRasterWidget.setParameter(self, condition)
        self._txt_step_count_x.setText(condition.step_count_x)
        self._txt_step_count_y.setText(condition.step_count_y)
        self._txt_step_count_z.setText(condition.step_count_z)
        self._txt_step_size_x.setText(condition.step_size_x)
        self._txt_step_size_y.setText(condition.step_size_y)
        self._txt_step_size_z.setText(condition.step_size_z)
        self._cb_raster_mode_z.setCurrentIndex(self._cb_raster_mode_z.findText(condition.raster_mode_z))

        position, location = condition.get_position(True)
        self._cb_location.setCurrentIndex(self._cb_location.findText(location))
        if position is not None:
            self._wdg_position.setParameter(position)

    def setReadOnly(self, state):
        _AcquisitionRasterWidget.setReadOnly(self, state)
        self._txt_step_count_x.setReadOnly(state)
        self._txt_step_count_y.setReadOnly(state)
        self._txt_step_count_z.setReadOnly(state)
        self._txt_step_size_x.setReadOnly(state)
        self._txt_step_size_y.setReadOnly(state)
        self._txt_step_size_z.setReadOnly(state)
        self._cb_raster_mode_z.setEnabled(not state)
        self._cb_location.setEnabled(not state)
        self._wdg_position.setReadOnly(state)

    def isReadOnly(self):
        return _AcquisitionRasterWidget.isReadOnly(self) and \
            self._txt_step_count_x.isReadOnly() and \
            self._txt_step_count_y.isReadOnly() and \
            self._txt_step_count_z.isReadOnly() and \
            self._txt_step_size_x.isReadOnly() and \
            self._txt_step_size_y.isReadOnly() and \
            self._txt_step_size_z.isReadOnly() and \
            not self._cb_raster_mode_z.isEnabled() and \
            not self._cb_location.isEnabled() and \
            self._wdg_position.isReadOnly()

    def hasAcceptableInput(self):
        return _AcquisitionRasterWidget.hasAcceptableInput(self) and \
            self._txt_step_count_x.hasAcceptableInput() and \
            self._txt_step_count_y.hasAcceptableInput() and \
            self._txt_step_count_z.hasAcceptableInput() and \
            self._txt_step_size_x.hasAcceptableInput() and \
            self._txt_step_size_y.hasAcceptableInput() and \
            self._txt_step_size_z.hasAcceptableInput() and \
            self._wdg_position.hasAcceptableInput()
Exemplo n.º 22
0
class DetectorCameraWidget(_DetectorWidget):

    def __init__(self, parent=None):
        _DetectorWidget.__init__(self, DetectorCamera, parent)

    def _init_ui(self):
        # Widgets
        self._txt_pixel_count_u = NumericalAttributeLineEdit(self.CLASS.pixel_count_u)
        self._txt_pixel_count_u.setFormat('{0:d}')
        self._txt_pixel_count_v = NumericalAttributeLineEdit(self.CLASS.pixel_count_v)
        self._txt_pixel_count_v.setFormat('{0:d}')
        self._txt_exposure_time = NumericalAttributeLineEdit(self.CLASS.exposure_time)
        self._txt_magnification = NumericalAttributeLineEdit(self.CLASS.magnification)
        self._txt_magnification.setFormat('{0:d}')
        self._txt_focal_length = NumericalAttributeLineEdit(self.CLASS.focal_length)

        # Layout
        layout = _DetectorWidget._init_ui(self)
        layout.insertRow(0, 'Horizontal pixel count', self._txt_pixel_count_u)
        layout.insertRow(1, 'Vertical pixel count', self._txt_pixel_count_v)
        layout.addRow('Exposure time', self._txt_exposure_time)
        layout.addRow('Magnification', self._txt_magnification)
        layout.addRow('Focal length', self._txt_focal_length)

        # Signals
        self._txt_pixel_count_u.textEdited.connect(self.edited)
        self._txt_pixel_count_v.textEdited.connect(self.edited)
        self._txt_exposure_time.textEdited.connect(self.edited)
        self._txt_magnification.textEdited.connect(self.edited)
        self._txt_focal_length.textEdited.connect(self.edited)

        return layout

    def _create_parameter(self):
        return self.CLASS(1, 1)

    def parameter(self, parameter=None):
        parameter = _DetectorWidget.parameter(self, parameter)
        parameter.pixel_count_u = self._txt_pixel_count_u.text()
        parameter.pixel_count_v = self._txt_pixel_count_v.text()
        parameter.exposure_time = self._txt_exposure_time.text()
        parameter.magnification = self._txt_magnification.text()
        parameter.focal_length = self._txt_focal_length.text()
        return parameter

    def setParameter(self, condition):
        _DetectorWidget.setParameter(self, condition)
        self._txt_pixel_count_u.setText(condition.pixel_count_u)
        self._txt_pixel_count_v.setText(condition.pixel_count_v)
        self._txt_exposure_time.setText(condition.exposure_time)
        self._txt_magnification.setText(condition.magnification)
        self._txt_focal_length.setText(condition.focal_length)

    def setReadOnly(self, state):
        _DetectorWidget.setReadOnly(self, state)
        self._txt_pixel_count_u.setReadOnly(state)
        self._txt_pixel_count_v.setReadOnly(state)
        self._txt_exposure_time.setReadOnly(state)
        self._txt_magnification.setReadOnly(state)
        self._txt_focal_length.setReadOnly(state)

    def isReadOnly(self):
        return _DetectorWidget.isReadOnly(self) and \
            self._txt_pixel_count_u.isReadOnly() and \
            self._txt_pixel_count_v.isReadOnly() and \
            self._txt_exposure_time.isReadOnly() and \
            self._txt_magnification.isReadOnly() and \
            self._txt_focal_length.isReadOnly()

    def hasAcceptableInput(self):
        return _DetectorWidget.hasAcceptableInput(self) and \
            self._txt_pixel_count_u.hasAcceptableInput() and \
            self._txt_pixel_count_v.hasAcceptableInput() and \
            self._txt_exposure_time.hasAcceptableInput() and \
            self._txt_magnification.hasAcceptableInput() and \
            self._txt_focal_length.hasAcceptableInput()
Exemplo n.º 23
0
class _AcquisitionWidget(_ConditionWidget):

    def _init_ui(self):
        # Widgets
        self._txt_dwell_time = NumericalAttributeLineEdit(self.CLASS.dwell_time)
        self._txt_total_time = NumericalAttributeLineEdit(self.CLASS.total_time)
        self._txt_dwell_time_live = NumericalAttributeLineEdit(self.CLASS.dwell_time_live)

        # Layouts
        layout = _ConditionWidget._init_ui(self)
        layout.addRow('Dwell time', self._txt_dwell_time)
        layout.addRow('Total time', self._txt_total_time)
        layout.addRow('Dwell time (live)', self._txt_dwell_time_live)

        # Signals
        self._txt_dwell_time.textEdited.connect(self.edited)
        self._txt_total_time.textEdited.connect(self.edited)
        self._txt_dwell_time_live.textEdited.connect(self.edited)

        return layout

    def parameter(self, parameter=None):
        parameter = _ConditionWidget.parameter(self, parameter)
        parameter.dwell_time = self._txt_dwell_time.text()
        parameter.total_time = self._txt_total_time.text()
        parameter.dwell_time_live = self._txt_dwell_time_live.text()
        return parameter

    def setParameter(self, condition):
        _ConditionWidget.setParameter(self, condition)
        self._txt_dwell_time.setText(condition.dwell_time)
        self._txt_total_time.setText(condition.total_time)
        self._txt_dwell_time_live.setText(condition.dwell_time_live)

    def setReadOnly(self, state):
        _ConditionWidget.setReadOnly(self, state)
        self._txt_dwell_time.setReadOnly(state)
        self._txt_total_time.setReadOnly(state)
        self._txt_dwell_time_live.setReadOnly(state)

    def isReadOnly(self):
        return _ConditionWidget.isReadOnly(self) and \
            self._txt_dwell_time.isReadOnly() and \
            self._txt_total_time.isReadOnly() and \
            self._txt_dwell_time_live.isReadOnly()

    def hasAcceptableInput(self):
        return _ConditionWidget.hasAcceptableInput(self) and \
            self._txt_dwell_time.hasAcceptableInput() and \
            self._txt_total_time.hasAcceptableInput() and \
            self._txt_dwell_time_live.hasAcceptableInput()
Exemplo n.º 24
0
class AcquisitionRasterLinescanWidget(_AcquisitionRasterWidget):

    def __init__(self, parent=None):
        _AcquisitionRasterWidget.__init__(self, AcquisitionRasterLinescan, parent)

    def _init_ui(self):
        # Widgets
        self._txt_step_count = NumericalAttributeLineEdit(self.CLASS.step_count)
        self._txt_step_count.setFormat('{0:d}')
        self._txt_step_size = NumericalAttributeLineEdit(self.CLASS.step_size)
        self._txt_frame_count = NumericalAttributeLineEdit(self.CLASS.frame_count)
        self._txt_frame_count.setFormat('{0:d}')
        self._wdg_position_start = SpecimenPositionWidget(inline=True)
        self._wdg_position_end = SpecimenPositionWidget(inline=True)

        # Layout
        layout = _AcquisitionRasterWidget._init_ui(self)
        layout.insertRow(0, '<i>Step count</i>', self._txt_step_count)
        layout.insertRow(1, 'Step size', self._txt_step_size)
        layout.addRow('Frame count', self._txt_frame_count)
        layout.addRow('Start position', self._wdg_position_start)
        layout.addRow('End position', self._wdg_position_end)

        # Signals
        self._txt_step_count.textEdited.connect(self.edited)
        self._txt_step_size.textEdited.connect(self.edited)
        self._txt_frame_count.textEdited.connect(self.edited)
        self._wdg_position_start.edited.connect(self.edited)
        self._wdg_position_end.edited.connect(self.edited)

        return layout

    def _create_parameter(self):
        return self.CLASS(1)

    def parameter(self, parameter=None):
        parameter = _AcquisitionRasterWidget.parameter(self, parameter)
        parameter.step_count = self._txt_step_count.text()
        parameter.step_size = self._txt_step_size.text()
        parameter.frame_count = self._txt_frame_count.text()
        parameter.position_start = self._wdg_position_start.condition()
        parameter.position_end = self._wdg_position_end.condition()
        return parameter

    def setParameter(self, condition):
        _AcquisitionRasterWidget.setParameter(self, condition)
        self._txt_step_count.setText(condition.step_count)
        self._txt_step_size.setText(condition.step_size)
        self._txt_frame_count.setText(condition.frame_count)
        self._wdg_position_start.setParameter(condition.position_start)
        self._wdg_position_end.setParameter(condition.position_end)

    def setReadOnly(self, state):
        _AcquisitionRasterWidget.setReadOnly(self, state)
        self._txt_step_count.setReadOnly(state)
        self._txt_step_size.setReadOnly(state)
        self._txt_frame_count.setReadOnly(state)
        self._wdg_position_start.setReadOnly(state)
        self._wdg_position_end.setReadOnly(state)

    def isReadOnly(self):
        return _AcquisitionRasterWidget.isReadOnly(self) and \
            self._txt_step_count.isReadOnly() and \
            self._txt_step_size.isReadOnly() and \
            self._txt_frame_count.isReadOnly() and \
            self._wdg_position_start.isReadOnly() and \
            self._wdg_position_end.isReadOnly()

    def hasAcceptableInput(self):
        return _AcquisitionRasterWidget.hasAcceptableInput(self) and \
            self._txt_step_count.hasAcceptableInput() and \
            self._txt_step_size.hasAcceptableInput() and \
            self._txt_frame_count.hasAcceptableInput() and \
            self._wdg_position_start.hasAcceptableInput() and \
            self._wdg_position_end.hasAcceptableInput()
Exemplo n.º 25
0
class DetectorSpectrometerWDSWidget(DetectorSpectrometerWidget):

    def __init__(self, parent=None):
        _DetectorWidget.__init__(self, DetectorSpectrometerWDS, parent)

    def _init_ui(self):
        # Widgets
        self._txt_dispersion_element = TextAttributeLineEdit(self.CLASS.dispersion_element)
        self._txt_crystal_2d = NumericalAttributeLineEdit(self.CLASS.crystal_2d)
        self._txt_rowland_circle_diameter = NumericalAttributeLineEdit(self.CLASS.rowland_circle_diameter)
        self._wdg_pulse_height_analyser = PulseHeightAnalyserWidget()
        self._wdg_window = WindowWidget()

        # Layouts
        layout = DetectorSpectrometerWidget._init_ui(self)
        layout.addRow('Dispersion element', self._txt_dispersion_element)
        layout.addRow('Crystal 2d-spacing', self._txt_crystal_2d)
        layout.addRow('Rowland circle diameter', self._txt_rowland_circle_diameter)
        layout.addRow('Pulse height analyser', self._wdg_pulse_height_analyser)
        layout.addRow('Window', self._wdg_window)

        # Signals
        self._txt_dispersion_element.textEdited.connect(self.edited)
        self._txt_crystal_2d.textEdited.connect(self.edited)
        self._txt_rowland_circle_diameter.textEdited.connect(self.edited)
        self._wdg_pulse_height_analyser.edited.connect(self.edited)
        self._wdg_window.edited.connect(self.edited)

        return layout

    def _create_parameter(self):
        return self.CLASS(1, CalibrationConstant('Quantity', 'm', 0.0))

    def parameter(self, parameter=None):
        parameter = DetectorSpectrometerWidget.parameter(self, parameter)
        parameter.dispersion_element = self._txt_dispersion_element.text()
        parameter.crystal_2d = self._txt_crystal_2d.text()
        parameter.rowland_circle_diameter = self._txt_rowland_circle_diameter.text()
        parameter.pulse_height_analyser = self._wdg_pulse_height_analyser.pha()
        parameter.window = self._wdg_window.window()
        return parameter

    def setParameter(self, condition):
        DetectorSpectrometerWidget.setParameter(self, condition)
        self._txt_dispersion_element.setText(condition.dispersion_element)
        self._txt_crystal_2d.setText(condition.crystal_2d)
        self._txt_rowland_circle_diameter.setText(condition.rowland_circle_diameter)
        self._wdg_pulse_height_analyser.setPha(condition.pulse_height_analyser)
        self._wdg_window.setWindow(condition.window)

    def setReadOnly(self, state):
        DetectorSpectrometerWidget.setReadOnly(self, state)
        self._txt_dispersion_element.setReadOnly(state)
        self._txt_crystal_2d.setReadOnly(state)
        self._txt_rowland_circle_diameter.setReadOnly(state)
        self._wdg_pulse_height_analyser.setReadOnly(state)
        self._wdg_window.setReadOnly(state)

    def isReadOnly(self):
        return DetectorSpectrometerWidget.isReadOnly(self) and \
            self._txt_dispersion_element.isReadOnly() and \
            self._txt_crystal_2d.isReadOnly() and \
            self._txt_rowland_circle_diameter.isReadOnly() and \
            self._wdg_pulse_height_analyser.isReadOnly() and \
            self._wdg_window.isReadOnly()

    def hasAcceptableInput(self):
        return DetectorSpectrometerWidget.hasAcceptableInput(self) and \
            self._txt_dispersion_element.hasAcceptableInput() and \
            self._txt_crystal_2d.hasAcceptableInput() and \
            self._txt_rowland_circle_diameter.hasAcceptableInput() and \
            self._wdg_pulse_height_analyser.hasAcceptableInput() and \
            self._wdg_window.hasAcceptableInput()
Exemplo n.º 26
0
class CalibrationLinearWidget(_CalibrationWidget):

    def __init__(self, parent=None):
        _CalibrationWidget.__init__(self, CalibrationLinear, parent)
#        self.setAccessibleName('linear')

    def _init_ui(self):
        # Widgets
        self._txt_gain = NumericalAttributeLineEdit(self.CLASS.gain)
        self._txt_offset = NumericalAttributeLineEdit(self.CLASS.offset)

        # Layouts
        layout = _CalibrationWidget._init_ui(self)
        layout.addRow('<i>Gain</i>', self._txt_gain)
        layout.addRow('<i>Offset</i>', self._txt_offset)

        # Signals
        self._txt_gain.textEdited.connect(self.edited)
        self._txt_offset.textEdited.connect(self.edited)

        return layout

    def _create_parameter(self):
        return self.CLASS('Quantity', 'm', 0.0, 0.0)

    def parameter(self, parameter=None):
        parameter = _CalibrationWidget.parameter(self, parameter)
        parameter.gain = self._txt_gain.text()
        parameter.offset = self._txt_offset.text()
        return parameter

    def setParameter(self, calibration):
        _CalibrationWidget.setParameter(self, calibration)
        self._txt_gain.setText(calibration.gain)
        self._txt_offset.setText(calibration.offset)

    def setReadOnly(self, state):
        _CalibrationWidget.setReadOnly(self, state)
        self._txt_gain.setReadOnly(state)
        self._txt_offset.setReadOnly(state)

    def isReadOnly(self):
        return _CalibrationWidget.isReadOnly(self) and \
            self._txt_gain.isReadOnly() and \
            self._txt_offset.isReadOnly()

    def hasAcceptableInput(self):
        return _CalibrationWidget.hasAcceptableInput(self) and \
            self._txt_gain.hasAcceptableInput() and \
            self._txt_offset.hasAcceptableInput()
Exemplo n.º 27
0
class DetectorSpectrometerXEDSWidget(DetectorSpectrometerWidget):

    def __init__(self, parent=None):
        _DetectorWidget.__init__(self, DetectorSpectrometerXEDS, parent)

    def _init_ui(self):
        # Widgets
        self._cb_technology = QComboBox()
        self._cb_technology.addItems([None] + list(_XEDS_TECHNOLOGIES))
        self._txt_nominal_throughput = NumericalAttributeLineEdit(self.CLASS.nominal_throughput)
        self._txt_time_constant = NumericalAttributeLineEdit(self.CLASS.time_constant)
        self._txt_strobe_rate = NumericalAttributeLineEdit(self.CLASS.strobe_rate)
        self._wdg_window = WindowWidget()

        # Layout
        form = DetectorSpectrometerWidget._init_ui(self)
        form.addRow('Technology', self._cb_technology)
        form.addRow('Nominal throughput', self._txt_nominal_throughput)
        form.addRow('Time constant', self._txt_time_constant)
        form.addRow('Strobe rate', self._txt_strobe_rate)
        form.addRow('Window', self._wdg_window)

        # Signals
        self._cb_technology.currentIndexChanged.connect(self.edited)
        self._txt_nominal_throughput.textEdited.connect(self.edited)
        self._txt_time_constant.textEdited.connect(self.edited)
        self._txt_strobe_rate.textEdited.connect(self.edited)
        self._wdg_window.edited.connect(self.edited)

        return form

    def _create_parameter(self):
        return self.CLASS(1, CalibrationConstant('Quantity', 'm', 0.0))

    def parameter(self, parameter=None):
        parameter = DetectorSpectrometerWidget.parameter(self, parameter)
        parameter.technology = self._cb_technology.currentText()
        parameter.nominal_throughput = self._txt_nominal_throughput.text()
        parameter.time_constant = self._txt_time_constant.text()
        parameter.strobe_rate = self._txt_strobe_rate.text()
        parameter.window = self._wdg_window.window()
        return parameter

    def setParameter(self, condition):
        DetectorSpectrometerWidget.setParameter(self, condition)
        self._cb_technology.setCurrentIndex(self._cb_technology.findText(condition.technology))
        self._txt_nominal_throughput.setText(condition.nominal_throughput)
        self._txt_time_constant.setText(condition.time_constant)
        self._txt_strobe_rate.setText(condition.strobe_rate)
        self._wdg_window.setWindow(condition.window)

    def setReadOnly(self, state):
        DetectorSpectrometerWidget.setReadOnly(self, state)
        self._cb_technology.setEnabled(not state)
        self._txt_nominal_throughput.setReadOnly(state)
        self._txt_time_constant.setReadOnly(state)
        self._txt_strobe_rate.setReadOnly(state)
        self._wdg_window.setReadOnly(state)

    def isReadOnly(self):
        return DetectorSpectrometerWidget.isReadOnly(self) and \
            not self._cb_technology.isEnabled() and \
            self._txt_nominal_throughput.isReadOnly() and \
            self._txt_time_constant.isReadOnly() and \
            self._txt_strobe_rate.isReadOnly() and \
            self._wdg_window.isReadOnly()

    def hasAcceptableInput(self):
        return DetectorSpectrometerWidget.hasAcceptableInput(self) and \
            self._txt_nominal_throughput.hasAcceptableInput() and \
            self._txt_time_constant.hasAcceptableInput() and \
            self._txt_strobe_rate.hasAcceptableInput() and \
            self._wdg_window.hasAcceptableInput()
Exemplo n.º 28
0
class _DetectorWidget(_ConditionWidget):

    def _init_ui(self):
        # Widgets
        self._cb_signal_type = QComboBox()
        self._cb_signal_type.addItems([None] + list(_SIGNAL_TYPES))
        self._txt_manufacturer = TextAttributeLineEdit(self.CLASS.manufacturer)
        self._txt_model = TextAttributeLineEdit(self.CLASS.model)
        self._txt_serial_number = TextAttributeLineEdit(self.CLASS.serial_number)
        self._txt_measurement_unit = UnitAttributeLineEdit(self.CLASS.measurement_unit)
        self._txt_elevation = NumericalAttributeLineEdit(self.CLASS.elevation)
        self._txt_azimuth = NumericalAttributeLineEdit(self.CLASS.azimuth)
        self._txt_distance = NumericalAttributeLineEdit(self.CLASS.distance)
        self._txt_area = NumericalAttributeLineEdit(self.CLASS.area)
        self._txt_solid_angle = NumericalAttributeLineEdit(self.CLASS.solid_angle)
        self._txt_semi_angle = NumericalAttributeLineEdit(self.CLASS.semi_angle)
        self._txt_temperature = NumericalAttributeLineEdit(self.CLASS.temperature)

        # Layout
        layout = _ConditionWidget._init_ui(self)
        layout.addRow('Type of signal', self._cb_signal_type)
        layout.addRow('Manufacturer', self._txt_manufacturer)
        layout.addRow('Model', self._txt_model)
        layout.addRow('Serial number', self._txt_serial_number)
        layout.addRow('Measurement unit', self._txt_measurement_unit)
        layout.addRow('Elevation', self._txt_elevation)
        layout.addRow('Azimuth', self._txt_azimuth)
        layout.addRow('Distance', self._txt_distance)
        layout.addRow('Area', self._txt_area)
        layout.addRow('Solid angle', self._txt_solid_angle)
        layout.addRow('Semi angle', self._txt_semi_angle)
        layout.addRow('Temperature', self._txt_temperature)

        # Signals
        self._cb_signal_type.currentIndexChanged.connect(self.edited)
        self._txt_manufacturer.textEdited.connect(self.edited)
        self._txt_model.textEdited.connect(self.edited)
        self._txt_serial_number.textEdited.connect(self.edited)
        self._txt_measurement_unit.textEdited.connect(self.edited)
        self._txt_elevation.textEdited.connect(self.edited)
        self._txt_azimuth.textEdited.connect(self.edited)
        self._txt_distance.textEdited.connect(self.edited)
        self._txt_area.textEdited.connect(self.edited)
        self._txt_solid_angle.textEdited.connect(self.edited)
        self._txt_semi_angle.textEdited.connect(self.edited)
        self._txt_temperature.textEdited.connect(self.edited)

        return layout

    def parameter(self, parameter=None):
        parameter = _ConditionWidget.parameter(self, parameter)
        parameter.signal_type = self._cb_signal_type.currentText()
        parameter.manufacturer = self._txt_manufacturer.text()
        parameter.model = self._txt_model.text()
        parameter.serial_number = self._txt_serial_number.text()
        parameter.measurement_unit = self._txt_measurement_unit.text()
        parameter.elevation = self._txt_elevation.text()
        parameter.azimuth = self._txt_azimuth.text()
        parameter.distance = self._txt_distance.text()
        parameter.area = self._txt_area.text()
        parameter.solid_angle = self._txt_solid_angle.text()
        parameter.semi_angle = self._txt_semi_angle.text()
        parameter.temperature = self._txt_temperature.text()
        return parameter

    def setParameter(self, condition):
        _ConditionWidget.setParameter(self, condition)
        self._cb_signal_type.setCurrentIndex(self._cb_signal_type.findText(condition.signal_type))
        self._txt_manufacturer.setText(condition.manufacturer)
        self._txt_model.setText(condition.model)
        self._txt_serial_number.setText(condition.serial_number)
        self._txt_measurement_unit.setText(condition.measurement_unit)
        self._txt_elevation.setText(condition.elevation)
        self._txt_azimuth.setText(condition.azimuth)
        self._txt_distance.setText(condition.distance)
        self._txt_area.setText(condition.area)
        self._txt_solid_angle.setText(condition.solid_angle)
        self._txt_semi_angle.setText(condition.semi_angle)
        self._txt_temperature.setText(condition.temperature)

    def setReadOnly(self, state):
        _ConditionWidget.setReadOnly(self, state)
        self._cb_signal_type.setEnabled(not state)
        self._txt_manufacturer.setReadOnly(state)
        self._txt_model.setReadOnly(state)
        self._txt_serial_number.setReadOnly(state)
        self._txt_measurement_unit.setReadOnly(state)
        self._txt_elevation.setReadOnly(state)
        self._txt_azimuth.setReadOnly(state)
        self._txt_distance.setReadOnly(state)
        self._txt_area.setReadOnly(state)
        self._txt_solid_angle.setReadOnly(state)
        self._txt_semi_angle.setReadOnly(state)
        self._txt_temperature.setReadOnly(state)

    def isReadOnly(self):
        return _ConditionWidget.isReadOnly(self) and \
            not self._cb_signal_type.isEnabled() and \
            self._txt_manufacturer.isReadOnly() and \
            self._txt_model.isReadOnly() and \
            self._txt_serial_number.isReadOnly() and \
            self._txt_measurement_unit.isReadOnly() and \
            self._txt_elevation.isReadOnly() and \
            self._txt_azimuth.isReadOnly() and \
            self._txt_distance.isReadOnly() and \
            self._txt_area.isReadOnly() and \
            self._txt_solid_angle.isReadOnly() and \
            self._txt_semi_angle.isReadOnly() and \
            self._txt_temperature.isReadOnly()

    def hasAcceptableInput(self):
        return _ConditionWidget.hasAcceptableInput(self) and \
            self._txt_manufacturer.hasAcceptableInput() and \
            self._txt_model.hasAcceptableInput() and \
            self._txt_serial_number.hasAcceptableInput() and \
            self._txt_measurement_unit.hasAcceptableInput() and \
            self._txt_elevation.hasAcceptableInput() and \
            self._txt_azimuth.hasAcceptableInput() and \
            self._txt_distance.hasAcceptableInput() and \
            self._txt_area.hasAcceptableInput() and \
            self._txt_solid_angle.hasAcceptableInput() and \
            self._txt_semi_angle.hasAcceptableInput() and \
            self._txt_temperature.hasAcceptableInput()