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)
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)
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)
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)
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)
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)