Exemplo n.º 1
0
    def __init__(self, *args, **kwargs) -> None:
        self._hasSetMinimumHeight = False
        super().__init__(__file__, *args, **kwargs)

        # Prepare UI elements
        self.configPanel.setModelType(DetectorProperties)
        self.configPanel.setPresetsDirectory(PresetFileDirs.DetectorProperties)
        self.configPanel.setStartDirectory(UserFileDirs.DetectorProperties)
        self.configPanel.setValueGetter(self.value)
        self.configPanel.setValueSetter(self.setValue)

        setTabOrderForChildren(self, [
            self.configPanel, self.rdoPointDetector, self.rdoCamera,
            self.editReadoutNoise, self.editCameraPixelSize,
            self.editQuantumEfficiency
        ])

        # Connect own signal slots
        self.modifiedFlagSet.connect(self._onModifiedFlagSet)

        # Connect forwarded signals
        self.rdoPointDetector.toggled.connect(self.typePointDetectorToggled)
        self.rdoCamera.toggled.connect(self.typeCameraToggled)
        connectMulti(self.editReadoutNoise.valueChanged, [float, Multivalue],
                     self.readoutNoiseChanged)
        connectMulti(self.editQuantumEfficiency.valueChanged,
                     [float, Multivalue], self.quantumEfficiencyChanged)
        connectMulti(self.editCameraPixelSize.valueChanged,
                     [float, Multivalue], self.cameraPixelSizeChanged)
        self.configPanel.dataLoaded.connect(self.modifiedFlagSet)

        # Initialize presenter
        self._presenter = DetectorPropertiesPresenter(self)
Exemplo n.º 2
0
    def __init__(self, valueWidgetToWrap: QWidget, *args,
                 widgetValueGetter: Callable[[], T],
                 widgetValueSetter: Callable[[T], None],
                 widgetTextSetter: Callable[[str], None], **kwargs) -> None:
        self._containsFloatValue = isinstance(widgetValueGetter(), float)
        self._multivalue = None
        self._allowSetList = True
        self._allowSetRange = self._containsFloatValue

        self._innerBoxValueGetter = widgetValueGetter
        self._innerBoxValueSetter = widgetValueSetter
        self._innerBoxTextSetter = widgetTextSetter

        super().__init__(__file__, *args, **kwargs)
        self.infoText = ""
        self._updateMultivalueButtons()

        # Prepare UI elements
        self.editValue.parent().layout().replaceWidget(self.editValue,
                                                       valueWidgetToWrap)
        self.editValue = valueWidgetToWrap

        self.setFocusPolicy(Qt.TabFocus)
        self.setFocusProxy(self.editValue)

        setTabOrderForChildren(
            self,
            [self.editValue, self.btnInfo, self.btnSetList, self.btnSetRange])

        # Connect own signal slots
        self.btnSetList.clicked.connect(self._onClickSetList)
        self.btnSetRange.clicked.connect(self._onClickSetRange)
        self.btnInfo.clicked.connect(self._onClickInfo)
Exemplo n.º 3
0
    def __init__(self, *args, **kwargs) -> None:
        super().__init__(__file__, *args, **kwargs)

        # Prepare UI elements
        self.configPanel.setModelType(SampleProperties)
        self.configPanel.setPresetsDirectory(PresetFileDirs.SampleProperties)
        self.configPanel.setStartDirectory(UserFileDirs.SampleProperties)
        self.configPanel.setValueGetter(self.value)
        self.configPanel.setValueSetter(self.setValue)

        self.updateStructureLoaded(False)

        setTabOrderForChildren(self, [
            self.configPanel, self.editInputPower, self.editDOrigin,
            self.btnLoadSampleStructure
        ])

        # Connect own signal slots
        self.modifiedFlagSet.connect(self._onModifiedFlagSet)

        # Connect forwarded signals
        connectMulti(self.editInputPower.valueChangedByUser,
                     [float, Multivalue], self.inputPowerChangedByUser)
        connectMulti(self.editDOrigin.valueChangedByUser, [float, Multivalue],
                     self.DOriginChangedByUser)
        self.configPanel.dataLoaded.connect(self.modifiedFlagSet)

        self.btnLoadSampleStructure.clicked.connect(
            self.loadSampleStructureClicked)

        # Initialize presenter
        self._presenter = SamplePropertiesPresenter(self)
    def __init__(self, *args, **kwargs) -> None:
        super().__init__(__file__, *args, **kwargs)

        # Prepare UI elements
        self.configPanel.setModelType(ImagingSystemSettings)
        self.configPanel.setPresetsDirectory(
            PresetFileDirs.ImagingSystemSettings)
        self.configPanel.setStartDirectory(UserFileDirs.ImagingSystemSettings)
        self.configPanel.setValueGetter(self.value)
        self.configPanel.setValueSetter(self.setValue)

        self.editOpticalPsf.setFieldName("Optical PSF")
        self.editOpticalPsf.setAllowEditGenerationAmplitude(True)
        self.editOpticalPsf.setAvailableGenerationTypes(
            [PatternType.airy_from_NA])

        self.editPinholeFunction.setFieldName("Pinhole Function")
        self.editPinholeFunction.setAllowEditGenerationAmplitude(True)
        self.editPinholeFunction.setAvailableGenerationTypes(
            [PatternType.digital_pinhole, PatternType.physical_pinhole])

        for refractiveIndex in list(RefractiveIndex):
            self.editImmersionType.addItem(getEnumEntryName(refractiveIndex),
                                           refractiveIndex.value)

        setTabOrderForChildren(self, [
            self.configPanel, self.editOpticalPsf, self.editPinholeFunction,
            self.editScanningStepSize, self.editImmersionType
        ])

        # Connect own signal slots
        self.modifiedFlagSet.connect(self._onModifiedFlagSet)
        self.editImmersionType.currentIndexChanged.connect(
            self._onImmersionTypeChange)

        # Connect forwarded signals
        self.editOpticalPsf.valueChanged.connect(self.opticalPsfChanged)
        self.editPinholeFunction.valueChanged.connect(
            self.pinholeFunctionChanged)
        connectMulti(self.editScanningStepSize.valueChanged,
                     [float, Multivalue], self.scanningStepSizeChanged)
        self.configPanel.dataLoaded.connect(self.modifiedFlagSet)

        # Initialize presenter
        self._presenter = ImagingSystemSettingsPresenter(self)
Exemplo n.º 5
0
    def __init__(self, *args, **kwargs) -> None:
        super().__init__(__file__, *args, **kwargs)

        # Prepare UI elements
        setTabOrderForChildren(self, [
            self.editWavelength, self.editOffToOn, self.editOnToOff,
            self.editEmission
        ])

        # Connect forwarded signals
        self.editWavelength.valueChanged.connect(self.wavelengthChanged)
        connectMulti(self.editOffToOn.valueChanged, [float, Multivalue],
                     self.offToOnChanged)
        connectMulti(self.editOnToOff.valueChanged, [float, Multivalue],
                     self.onToOffChanged)
        connectMulti(self.editEmission.valueChanged, [float, Multivalue],
                     self.emissionChanged)

        # Initialize presenter
        self._presenter = ResponsePropertiesPresenter(self)
    def __init__(self,
                 parent: Optional[QWidget] = None,
                 title: str = "Generate Pattern",
                 availableTypes: List[PatternType] = [],
                 allowEditAmplitude: bool = True,
                 canvasInnerRadiusNm: float = 500.0,
                 normalizePreview: bool = False) -> None:
        self._allowEditAmplitude = allowEditAmplitude
        self._canvasInnerRadius = canvasInnerRadiusNm
        self._hasHandledInitialRowChange = False

        super().__init__(__file__, parent,
                         Qt.WindowSystemMenuHint | Qt.WindowTitleHint)

        # Prepare UI elements
        self.setWindowTitle(title)
        self.setAvailableTypes(availableTypes)
        self._updateOKButton()

        setTabOrderForChildren(self, [
            self.listType, self.editAmplitude, self.editRadius, self.editFwhm,
            self.editPeriodicity, self.editZeroIntensity, self.editNa,
            self.editEmissionWavelength
        ])

        # Connect own signal slots
        self.listType.currentRowChanged.connect(self._onTypeListRowChange)

        # Connect forwarded signals
        self.editAmplitude.valueChanged.connect(self.amplitudeChanged)
        self.editRadius.valueChanged.connect(self.radiusChanged)
        self.editFwhm.valueChanged.connect(self.fwhmChanged)
        self.editPeriodicity.valueChanged.connect(self.periodicityChanged)
        self.editZeroIntensity.valueChanged.connect(self.zeroIntensityChanged)
        self.editNa.valueChanged.connect(self.naChanged)
        self.editEmissionWavelength.valueChanged.connect(
            self.emissionWavelengthChanged)

        # Initialize presenter
        self._presenter = GeneratePatternPresenter(self, normalizePreview)
Exemplo n.º 7
0
    def __init__(self, *args, **kwargs) -> None:
        super().__init__(__file__, *args, **kwargs)

        # Prepare UI elements
        self.editIlluminationPattern.setFieldName("Illumination Pattern")
        self.editIlluminationPattern.setAllowEditGenerationAmplitude(False)
        self.editIlluminationPattern.setAvailableGenerationTypes([
            PatternType.gaussian, PatternType.doughnut,
            PatternType.airy_from_FWHM
        ])

        # Prepare UI elements
        setTabOrderForChildren(self, [
            self.editWavelength, self.editDuration, self.editMaxIntensity,
            self.btnMoveLeft, self.btnMoveRight, self.editIlluminationPattern
        ])

        # Connect forwarded signals
        connectMulti(self.editWavelength.valueChanged, [float, Multivalue],
                     self.wavelengthChanged)
        connectMulti(self.editWavelength.valueChangedByUser,
                     [float, Multivalue], self.wavelengthChangedByUser)
        connectMulti(self.editDuration.valueChanged, [float, Multivalue],
                     self.durationChanged)
        connectMulti(self.editDuration.valueChangedByUser, [float, Multivalue],
                     self.durationChangedByUser)
        connectMulti(self.editMaxIntensity.valueChanged, [float, Multivalue],
                     self.maxIntensityChanged)
        self.editIlluminationPattern.valueChanged.connect(
            self.illuminationPatternChanged)

        self.btnMoveLeft.clicked.connect(self.moveLeftClicked)
        self.btnMoveRight.clicked.connect(self.moveRightClicked)

        # Initialize presenter
        self._presenter = PulsePropertiesPresenter(self)
Exemplo n.º 8
0
    def updateEditWidgets(
            self,
            results: Optional[SimulationResults]) -> MultivalueListSignals:
        """
        Updates the multivalue editor to contain inputs for each multivalue path used in the
        simulation. Returns an object that contains state change signals, one for each multivalue
        path. The indices in the returned lists of signals correspond to the indices in the
        multivalue path list.
        """

        inspectionStateChangeSignals = []
        sliderValueChangeSignals = []

        inspectionCheckBoxes = []
        sliders = []
        valueLabels = []

        parameterControlLayout = self.frmMultivalues.layout()

        # Remove all existing multivalue parameter widgets
        for i in reversed(range(parameterControlLayout.rowCount())):
            parameterControlLayout.removeRow(i)

        # Add new ones
        if results is not None and len(results.multivalue_paths) > 0:
            for multivaluePath in results.multivalue_paths:
                # Field label
                fieldText = f"{getLabelForMultivalue(results, multivaluePath)}:"

                fieldLabelFont = self.font()
                while (QFontMetrics(fieldLabelFont).boundingRect(
                        fieldText).width() > self.frmMultivalues.width()):
                    # Adjust font size to fit form
                    fieldLabelFont.setPointSize(fieldLabelFont.pointSize() - 1)

                # Checkbox for enabling/disabling inspection of the multivalue
                inspectionCheckBox = QCheckBox(
                    toolTip="Inspect parameter in FRC/Resolution Output")
                inspectionCheckBoxes.append(inspectionCheckBox)
                inspectionStateChangeSignals.append(
                    inspectionCheckBox.stateChanged)

                # Separator
                separator = QFrame(frameShape=QFrame.VLine,
                                   frameShadow=QFrame.Sunken)

                # Slider
                multivalue = get_value_from_path(results.run_instance,
                                                 multivaluePath)

                slider = QSlider(Qt.Horizontal,
                                 minimum=0,
                                 maximum=multivalue.num_values() - 1,
                                 value=0)
                sliders.append(slider)
                sliderValueChangeSignals.append(slider.valueChanged)

                # Value label
                valueLabel = QLabel(str(multivalue.as_array()[0]))
                valueLabel.setAlignment(Qt.AlignVCenter | Qt.AlignRight)
                valueLabels.append(valueLabel)

                # Layout containing checkbox, separator, slider, and value label
                hBox = QHBoxLayout()
                hBox.addWidget(inspectionCheckBox)
                hBox.addWidget(separator)
                hBox.addWidget(slider)
                hBox.addWidget(valueLabel)
                hBox.setSpacing(9)
                hBox.setStretch(0, 0)
                hBox.setStretch(1, 0)
                hBox.setStretch(2, 3)
                hBox.setStretch(3, 2)

                # Append
                parameterControlLayout.addRow(
                    QLabel(fieldText, font=fieldLabelFont), hBox)

            self.grpBottom.setVisible(True)
        else:
            parameterControlLayout.addRow(
                QLabel("No parameters to adjust/inspect."), QHBoxLayout())
            self.grpBottom.setVisible(False)

        if len(inspectionCheckBoxes) > 0:
            self.setFocusProxy(inspectionCheckBoxes[0])

        setTabOrderForChildren(
            self, [j for i in zip(inspectionCheckBoxes, sliders)
                   for j in i] + [self.btnOptimize])

        self._inspectionCheckBoxes = inspectionCheckBoxes
        self._multivalueSliders = sliders
        self._multivalueValueLabels = valueLabels

        return MultivalueListSignals(
            inspectionStateChangeSignals=inspectionStateChangeSignals,
            multivalueValueChangeSignals=sliderValueChangeSignals)