def __init__(self): """ initialization """ super(PyRSLauncher, self).__init__(None) # set up UI # ui_path = os.path.join(os.path.dirname(__file__), os.path.join('ui', 'pyrsmain.ui')) # self.ui = load_ui(ui_path, baseinstance=self) self.ui = load_ui('pyrsmain.ui', baseinstance=self) # define self.ui.pushButton_manualReduction.clicked.connect(self.do_launch_manual_reduction) self.ui.pushButton_fitPeaks.clicked.connect(self.do_launch_fit_peak_window) self.ui.pushButton_launchTextureAnalysis.clicked.connect(self.do_launch_texture_window) self.ui.pushButton_launchStrainStressCalculation.clicked.connect(self.do_launch_strain_stress_window) self.ui.pushButton_launchDebugger.clicked.connect(self.do_launch_debugger) self.ui.pushButton_calibration.clicked.connect(self.do_launch_calibration) self.ui.actionQuit.triggered.connect(self.do_quit) # child windows self.peak_fit_window = None self.texture_analysis_window = None self.strain_stress_window = None self.manual_reduction_window = None self.instrument_calibration_window = None self.calibration_window = None self.debugger = None # IPython window
def __init__(self, parent): """ initialization :param parent: """ super(SmartPeakFitControlDialog, self).__init__(parent) # set up parent window assert isinstance(parent, QMainWindow), 'Parent window {} must be a QMainWindow but not a {}' \ ''.format(parent, type(parent)) self._main_window = parent # link signal self.FitPeakSignal.connect(self._main_window.fit_peaks_smart) # set up UI ui_path = os.path.join(os.path.dirname(__file__), os.path.join('ui', 'peakfitadvsetting.ui')) self.ui = load_ui(ui_path, baseinstance=self) # init UI self._init_widgets() # define event handling methods self.ui.pushButton_smartFitPeaks.clicked.connect( self.do_smart_peaks_fitting) self.ui.pushButton_close.clicked.connect(self.do_close) return
def __init__(self, parent): """ initialization :param parent: """ super(StrainStressGridSetup, self).__init__(parent) # Set up UI ui_path = os.path.join(os.path.dirname(__file__), os.path.join('ui', "strainstressgridsetup.ui")) self.ui = load_ui(ui_path, baseinstance=self) # Init widgets self._init_widgets() self.ui.buttonBox.accepted.connect(self.do_accept_user_input) self.ui.comboBox_alignmentCriteria.currentIndexChanged.connect( self.do_set_default_values) self._is_user_specified_grids = False # for return self._grid_setup_dict = dict() # [Min/Max/'Resolution'][X/Y/Z] = value # flag that user input is OK self._is_user_input_acceptable = True # original dimension statistics self._exp_grid_dimensions = dict( ) # ['min']['e11']['X'] = value ... min/max/num_indv_values self._plot_grid_dimensions = dict( ) # ['min']['e11']['X'] = value ... min/max/num_indv_values return
def __init__(self, parent, fit_peak_core=None): """ initialization :param parent: """ super(FitPeaksWindow, self).__init__(parent) # class variables self.current_hidra_file_name = '' # current loaded nxs (hidra file) self._core = fit_peak_core self._project_name = None self.hidra_workspace = None self.fit_result = None # list of fits for each sub-runs # current/last loaded data self._curr_file_name = None # list of d0 from peak range/label table self.list_peak_d0 = [] # a copy of sample logs self._sample_log_names = list() # a copy of sample logs' names that are added to combo-box # sub windows self._advanced_fit_dialog = None # set up UI ui_path = os.path.join(os.path.dirname(__file__), os.path.join('ui', 'peakfitwindow.ui')) self.ui = load_ui(ui_path, baseinstance=self) self.setup_ui()
def __init__(self, parent): """ initialization :param parent: """ super(CreateNewSessionDialog, self).__init__(parent) # Set up UI ui_path = os.path.join(os.path.dirname(__file__), os.path.join('ui', "newsessiondialog.ui")) self.ui = load_ui(ui_path, baseinstance=self) self.ui.buttonBox.accepted.connect(self.do_new_session) self.ui.buttonBox.rejected.connect(self.do_quit) # connect the signal self.NewSessionSignal.connect(parent.create_new_session) # init widgets self.ui.comboBox_strainStressType.clear() self.ui.comboBox_strainStressType.addItem( 'Unconstrained Strain/Stress') self.ui.comboBox_strainStressType.addItem('Plane Strain') self.ui.comboBox_strainStressType.addItem('Plane Stress') return
def __init__(self, parent=None): """ Init """ # call base QWidget.__init__(self) # Parent & others self._myMainWindow = None self._myParent = parent # set up UI ui_path = os.path.join(os.path.dirname(__file__), "WorkspacesView.ui") self.ui = load_ui(ui_path, baseinstance=self) self._promote_widgets() self.ui.tableWidget_dataStructure.setup() self.ui.widget_ipython.set_main_application(self) # define event handling methods # TODO - FUTURE - self.ui.pushButton_plot.clicked.connect(self.do_plot_workspace) self.ui.pushButton_toIPython.clicked.connect(self.do_write_workspace_name) self.ui.pushButton_toIPythonMtd.clicked.connect(self.do_write_workspace_instance) self.ui.pushButton_toIPythonAssign.clicked.connect(self.do_assign_workspace) self.ui.pushButton_clear.clicked.connect(self.do_clear_canvas) self.ui.pushButton_fitCanvas.clicked.connect(self.do_fit_canvas) return
def __init__(self, parent): """ initialization :param parent: """ super(ExportGridSliceSetupDialog, self).__init__(parent) # Set up UI ui_path = os.path.join(os.path.dirname(__file__), os.path.join('ui', "sliceexportdialog.ui")) self.ui = load_ui(ui_path, baseinstance=self) # set default value self.ui.lineEdit_resolution.setText('0.001') return
def __init__(self): """ initialization """ super(PyRSLauncher, self).__init__(None) # set up UI self.ui = load_ui('pyrsmain.ui', baseinstance=self) # define self.ui.pushButton_manualReduction.clicked.connect( self.do_launch_manual_reduction) self.ui.pushButton_fitPeaks.clicked.connect( self.do_launch_fit_peak_window) self.ui.pushButton_launchStrainStressCalculation.clicked.connect( self.do_launch_strain_stress_window) self.ui.actionQuit.triggered.connect(self.do_quit) # child windows self.peak_fit_window = None self.manual_reduction_window = None self.strain_stress_window = None
def __init__(self, parent): """ initialization :param parent: """ super(StrainStressTableView, self).__init__(parent) # set up UI ui_path = os.path.join(os.path.dirname(__file__), os.path.join('ui', "strainstressview.ui")) self.ui = load_ui(ui_path, baseinstance=self) # promote self.ui.tableView_strainStressTable = qt_util.promote_widget( self, self.ui.tableView_strainStressTable_frame, StrainStressValueTable) # init widgets self.ui.tableView_strainStressTable.setup() # define event handling self.ui.pushButton_close.clicked.connect(self.do_quit) return
def __init__(self, parent): """ initialization :param parent: """ super(ManualReductionWindow, self).__init__(parent) # class variables self._core = None self._currExpNumber = None self._hydra_workspace = None # HiDRA worksapce instance if any file loaded self._project_data_id = None # Project name for reference (str) self._project_file_name = None # last loaded project file self._output_dir = None # mutexes self._plot_run_numbers_mutex = False self._plot_sliced_mutex = False self._plot_selection_mutex = False # set up UI ui_path = os.path.join(os.path.dirname(__file__), os.path.join('ui', 'manualreductionwindow.ui')) self.ui = load_ui(ui_path, baseinstance=self) # promote some widgets self._promote_widgets() # Hide some not-yet-implemented self.ui.tabWidget_reduceRuns.setTabEnabled( 1, False) # User specified instrument parameter (shifts) self.ui.tabWidget_reduceRuns.setTabEnabled( 2, False) # advanced slicing tab # Event handler: handler must be set up after UI is loaded self._event_handler = EventHandler(parent=self) # Mask file: check box and line edit # set default self._mask_state(self.ui.checkBox_defaultMaskFile.checkState()) # link event handling self.checkBox_defaultMaskFile.stateChanged.connect(self._mask_state) self.ui.pushButton_browseMaskFile.clicked.connect( self.browse_mask_file) self.ui.pushButton_browseVanadium.clicked.connect( self.browse_vanadium_file) # Calibration file: check box and line edit self._calibration_state( self.ui.checkBox_defaultCalibrationFile.checkState()) self.checkBox_defaultCalibrationFile.stateChanged.connect( self._calibration_state) self.ui.pushButton_browseCalibrationFile.clicked.connect( self.browse_calibration_file) # Output directory: check box, spin box and line edit # change of run number won't trigger the scan of NeXus file self.ui.lineEdit_runNumber.textChanged.connect( self._event_handler.update_run_changed) self.ui.pushButton_browseNeXus.clicked.connect(self.browse_nexus_file) # self._output_state(self.ui.checkBox_defaultOutputDirectory.checkState()) self.checkBox_defaultOutputDirectory.stateChanged.connect( self._output_state) self.ui.pushButton_browseOutputDirectory.clicked.connect( self.browse_output_dir) # Push button for split, convert and save project file self.ui.pushButton_splitConvertSaveProject.clicked.connect( self.split_convert_save_nexus) # Next: self.ui.pushButton_chopReduce.clicked.connect(self.slice_nexus) # Plotting self.ui.pushButton_plotDetView.clicked.connect(self.plot_sub_runs) # radio button operation self.ui.radioButton_chopByTime.toggled.connect( self.event_change_slice_type) self.ui.radioButton_chopByLogValue.toggled.connect( self.event_change_slice_type) self.ui.radioButton_chopAdvanced.toggled.connect( self.event_change_slice_type) self.ui.actionQuit.triggered.connect(self.do_quit) self.ui.progressBar.setVisible(False) # event handling for combobox # TODO - Make this work properly # self.ui.comboBox_sub_runs.currentIndexChanged.connect(self.event_different_sub_run_selected) # TODO - ASAP - Use these 2 buttons to enable/disable write access to configuration # actionEdit_Calibrations # actionFix_Calibrations # TODO - ASAP - Load Instrument # actionLoad_Instrument # Child windows self._slice_setup_window = None # menu operation # load NeXus self.ui.actionLoad_nexus_file.triggered.connect(self.load_nexus_file) # Load project file (*.h5) self.ui.actionLoad_Project_File.triggered.connect( self.load_hidra_project_file) # init widgets self._init_widgets_setup() # mutexes self._mutexPlotRuns = False return
def __init__(self, parent=None): """ Initialization """ # call base QMainWindow.__init__(self) # child windows self._manualSlicerDialog = None # parent self._myParent = parent self._mutexLockSwitchSliceMethod = False # set up UI ui_path = os.path.join(os.path.dirname(__file__), os.path.join('ui', 'eventslicersetupwindow.ui')) self.ui = load_ui(ui_path, baseinstance=self) # promote self.ui.graphicsView_main = qt_util.promote_widget( self, self.ui.graphicsView_main_frame, LogGraphicsView) # Set up widgets self._init_widgets_setup() # Defining widget handling methods self.ui.pushButton_prevLog.clicked.connect(self.do_load_prev_log) self.ui.pushButton_nextLog.clicked.connect(self.do_load_next_log) self.ui.comboBox_logFrameUnit.currentIndexChanged.connect( self.evt_re_plot_mts_log) self.ui.checkBox_hideSingleValueLog.stateChanged.connect( self.load_log_names) # chopping setup self.ui.radioButton_timeSlicer.toggled.connect( self.evt_switch_slicer_method) self.ui.radioButton_logValueSlicer.toggled.connect( self.evt_switch_slicer_method) self.ui.radioButton_manualSlicer.toggled.connect( self.evt_switch_slicer_method) self.ui.pushButton_slicer.clicked.connect(self.do_chop) self.ui.pushButton_viewReduced.clicked.connect( self.do_view_reduced_data) # automatic slicer setup self.ui.pushButton_setupAutoSlicer.clicked.connect( self.do_setup_uniform_slicer) self.ui.checkBox_showSlicer.stateChanged.connect(self.evt_show_slicer) # manual slicer picker self.ui.pushButton_showManualSlicerTable.clicked.connect( self.do_show_manual_slicer_table) self.ui.pushButton_loadSlicerFile.clicked.connect( self.do_import_slicer_file) # Canvas self.ui.pushButton_doPlotSample.clicked.connect( self.evt_plot_sample_log) self.ui.pushButton_resizeCanvas.clicked.connect(self.do_resize_canvas) self.ui.comboBox_logNames.currentIndexChanged.connect( self.evt_plot_sample_log) self.ui.radioButton_useMaxPointResolution.toggled.connect( self.evt_change_resolution_type) self.ui.radioButton_useTimeResolution.toggled.connect( self.evt_change_resolution_type) self.ui.pushButton_prevPartialLog.clicked.connect( self.do_load_prev_log_frame) self.ui.pushButton_nextPartialLog.clicked.connect( self.do_load_next_log_frame) # menu actions self.ui.actionExit.triggered.connect(self.evt_quit_no_save) # Event handling for pickers self._mtsFileLoaderWindow = None # child windows self._quickChopDialog = None # Class variables self._logNameList = list() self._sampleLogDict = dict() # self._currentPickerID = None self._myPickerMode = OUT_PICKER self._currMousePosX = 0. self._currMousePosY = 0. # Picker management self._myPickerIDList = list() # Experiment-related variables self._currLogType = None self._currRunNumber = None self._currLogName = None self._currentBlockIndex = None self._currentFrameUnit = str( self.ui.comboBox_logFrameUnit.currentText()) self._currentStartPoint = None self._currentStopPoint = None self._averagePointsPerSecond = None self._blockIndex = None # MTS log format dictionary. key is file name, value is the format dictionary self._mtsLogFormat = dict() # Highlighted lines list self._myHighLightedLineList = list() # Mutex/Lock, multiple threading self._mutexLockLogNameComboBox = False # Reference to slicers that have been set up self._currSlicerKey = None self._slicerKeyList = list() return
def __init__(self, parent): """ initialization :param parent: """ super(TextureAnalysisWindow, self).__init__(parent) # class variables self._core = None # set up UI # self.ui = ui.ui_texturecalculationwindow.Ui_MainWindow() # self.ui.setupUi(self) ui_path = os.path.join(os.path.dirname(__file__), os.path.join('ui', 'texturecalculationwindow.ui')) self.ui = load_ui(ui_path, baseinstance=self) # promote widgets self.ui.graphicsView_fitSetup = qt_util.promote_widget(self, self.ui.graphicsView_fitSetup_frame, PeakFitSetupView) self.ui.graphicsView_fitResult = qt_util.promote_widget(self, self.ui.graphicsView_fitResult_frame, GeneralDiffDataView) self.ui.graphicsView_contour = qt_util.promote_widget(self, self.ui.graphicsView_contour_frame, Diffraction2DPlot) self.ui.tableView_poleFigureParams = qt_util.promote_widget(self, self.ui.tableView_poleFigureParams_frame, PoleFigureTable) # init widgets self._init_widgets() # set up handling self.ui.pushButton_browseFile.clicked.connect(self.do_browse_load_file) self.ui.pushButton_plotPeaks.clicked.connect(self.do_plot_diff_data) self.ui.pushButton_fitPeaks.clicked.connect(self.do_fit_peaks) self.ui.pushButton_calPoleFigure.clicked.connect(self.do_cal_pole_figure) self.ui.pushButton_save_pf.clicked.connect(self.do_save_pole_figure) self.ui.pushButton_scanNumberForward.clicked.connect(self.do_forward_scan_log_index) self.ui.pushButton_scanNumberBackward.clicked.connect(self.do_rewind_scan_log_index) self.ui.pushButton_plotLogs.clicked.connect(self.do_plot_meta_data) self.ui.pushButton_plot_pf.clicked.connect(self.do_plot_pole_figure) self.ui.pushButton_clearPF.clicked.connect(self.do_clear_pole_figure_plot) self.ui.actionQuit.triggered.connect(self.do_quit) self.ui.actionOpen_HDF5.triggered.connect(self.do_browse_load_file) self.ui.actionSave_as.triggered.connect(self.do_save_as) self.ui.actionSave_Diffraction_Data_For_Mantid.triggered.connect(self.do_save_workspace) self.ui.comboBox_xaxisNames.currentIndexChanged.connect(self.do_plot_meta_data) self.ui.comboBox_yaxisNames.currentIndexChanged.connect(self.do_plot_meta_data) self.ui.actionExport_Table.triggered.connect(self.do_export_pole_figure_table) # mutexes self._sample_log_names_mutex = False # current data information self._data_key = None return
def __init__(self, parent): """ Initialization :param parent: """ super(GridAlignmentCheckTablesView, self).__init__(parent) # define my parent self._parent = parent self._core = parent.core # state self._is_analysis_table_raw = True # analysis table has raw experiment grids # set up UI ui_path = os.path.join(os.path.dirname(__file__), os.path.join('ui', "gridsalignmentview.ui")) self.ui = load_ui(ui_path, baseinstance=self) # promote widgets self.ui.tableView_gridAlignment = qt_util.promote_widget( self, self.ui.tableView_gridAlignment_frame, GridAlignmentTable) self.ui.tableView_alignedParameters = qt_util.promote_widget( self, self.ui.tableView_alignedParameters_frame, ParamValueGridTable) self.ui.tableView_gridParamAnalysis = qt_util.promote_widget( self, self.ui.tableView_gridParamAnalysis_frame, ParamValueMapAnalysisTable) self.ui.tableView_gridStatistic = qt_util.promote_widget( self, self.ui.tableView_gridStatistic_frame, GridsStatisticsTable) self.ui.tableView_partialMatchedGrids = qt_util.promote_widget( self, self.ui.tableView_partialMatchedGrids_frame, GridsStatisticsTable) self.ui.tableView_matchedGrids = qt_util.promote_widget( self, self.ui.tableView_matchedGrids_frame, GridsStatisticsTable) self.ui.tableView_mismatchedGrids = qt_util.promote_widget( self, self.ui.tableView_mismatchedGrids_frame, MismatchedGridsTable) # init widgets self.ui.pushButton_showParameterSSGrid.setEnabled(False) # define events handlers self.ui.actionQuit.triggered.connect(self.do_quit) self.ui.pushButton_showParameterRawGrid.clicked.connect( self.do_load_params_raw_grid) self.ui.pushButton_showParameterSSGrid.clicked.connect( self.do_load_mapped_values) self.ui.pushButton_plot2D.clicked.connect(self.do_plot_parameter) self.ui.pushButton_export2D.clicked.connect(self.do_export_2d) # combo box event handling and mutex self.ui.comboBox_parameterList.currentIndexChanged.connect( self.do_show_parameter) self._mutex_param_name_list = False # set up all the tables self.ui.tableView_gridAlignment.setup() self.ui.tableView_gridStatistic.setup() self.ui.tableView_alignedParameters.setup() self.ui.tableView_matchedGrids.setup() self.ui.tableView_partialMatchedGrids.setup() self.ui.tableView_mismatchedGrids.setup() self.ui.tableView_gridParamAnalysis.setup() return
def __init__(self, parent): """ initialization :param parent: """ super(ManualReductionWindow, self).__init__(parent) # class variables self._core = None # set up UI ui_path = os.path.join(os.path.dirname(__file__), os.path.join('ui', 'manualreductionwindow.ui')) self.ui = load_ui(ui_path, baseinstance=self) # promote some widgets self._promote_widgets() # Event handler: handler must be set up after UI is loaded self._event_handler = EventHandler(parent=self) # Mask file: check box and line edit # set default self._mask_state(self.ui.checkBox_defaultMaskFile.checkState()) # link event handling self.checkBox_defaultMaskFile.stateChanged.connect(self._mask_state) self.ui.pushButton_browseMaskFile.clicked.connect(self.browse_mask_file) self.ui.pushButton_browseVanadium.clicked.connect(self.browse_vanadium_file) # Calibration file: check box and line edit self._calibration_state(self.ui.checkBox_defaultCalibrationFile.checkState()) self.checkBox_defaultCalibrationFile.stateChanged.connect(self._calibration_state) self.ui.pushButton_browseCalibrationFile.clicked.connect(self.browse_calibration_file) # Output directory: check box, spin box and line edit # change of run number won't trigger the scan of NeXus file self.ui.lineEdit_runNumber.textChanged.connect(self._event_handler.update_run_changed) self.ui.pushButton_browseNeXus.clicked.connect(self.browse_nexus_file) # self._output_state(self.ui.checkBox_defaultOutputDirectory.checkState()) self.checkBox_defaultOutputDirectory.stateChanged.connect(self._output_state) self.ui.pushButton_browseOutputDirectory.clicked.connect(self.browse_output_dir) # Push button for split, convert and save project file self.ui.pushButton_splitConvertSaveProject.clicked.connect(self.split_convert_save_nexus) # Next: self.ui.pushButton_chopReduce.clicked.connect(self.slice_nexus) # Plotting self.ui.pushButton_plotDetView.clicked.connect(self.plot_sub_runs) self.ui.actionQuit.triggered.connect(self.do_quit) self.ui.progressBar.setVisible(False) # event handling for combobox self.ui.comboBox_sub_runs.currentIndexChanged.connect(self.plot_sub_runs) # TODO - ASAP - Use these 2 buttons to enable/disable write access to configuration # actionEdit_Calibrations # actionFix_Calibrations # TODO - ASAP - Load Instrument # actionLoad_Instrument # Child windows self._slice_setup_window = None
def __init__(self, parent, pyrs_core): """ initialization :param parent: :param pyrs_core: """ super(InstrumentCalibrationWindow, self).__init__(parent) # check assert isinstance(pyrs_core, pyrs.core.pyrscore.PyRsCore), 'PyRS core {0} of type {1} must be a PyRsCore ' \ 'instance.'.format(pyrs_core, type(pyrs_core)) self._core = pyrs_core # class variables for calculation (not GUI) self._default_dir = None self._curr_data_id = None self._number_rois = 0 self._peaks_shown = False # set up UI ui_path = os.path.join(os.path.dirname(__file__), os.path.join('ui', 'calibrationwindow.ui')) self.ui = load_ui(ui_path, baseinstance=self) # promote widgets self._promote_widgets() self.ui.pushButton_loadRawData.clicked.connect(self.do_load_raw) # TODO - TONIGHT2 - self.ui.pushButton_loadGeomCalFile : shall parse value and set up lineEdits self.ui.pushButton_loadMask.clicked.connect(self.do_load_mask) self.ui.pushButton_reduce.clicked.connect(self.do_reduce_data) self.ui.pushButton_calibrateGeometry.clicked.connect( self.do_calibrate_geometry) # decrease button associated line edits dictionary self._link_widgets() # define event handing methods self.ui.pushButton_decreaseCenterX.clicked.connect( self.do_decrease_value) self.ui.pushButton_decreaseCenterY.clicked.connect( self.do_decrease_value) self.ui.pushButton_decreaseCenterZ.clicked.connect( self.do_decrease_value) self.ui.pushButton_increaseCenterX.clicked.connect( self.do_increase_value) self.ui.pushButton_increaseCenterY.clicked.connect( self.do_increase_value) self.ui.pushButton_increaseCenterZ.clicked.connect( self.do_increase_value) self.ui.pushButton_decreaseRotationX.clicked.connect( self.do_decrease_value) self.ui.pushButton_decreaseRotationY.clicked.connect( self.do_decrease_value) self.ui.pushButton_decreaseRotationZ.clicked.connect( self.do_decrease_value) self.ui.pushButton_increaseRotationX.clicked.connect( self.do_increase_value) self.ui.pushButton_increaseRotationY.clicked.connect( self.do_increase_value) self.ui.pushButton_increaseRotationZ.clicked.connect( self.do_increase_value) self.ui.pushButton_decreaseWavelength.clicked.connect( self.do_decrease_value) self.ui.pushButton_increaseWavelength.clicked.connect( self.do_increase_value) # TODO - TODAY 1 - Add widgets: frame_calibrationViewControl: checkBox + Fit self.ui.pushButton_showPeaks.clicked.connect(self.do_show_hide_peaks) self.ui.pushButton_fitPeaks.clicked.connect(self.do_fit_peaks) # Figure's subplot vs mask self._subplot_mask_dict = dict() self._mask_subplot_dict = dict() # mask number to plot number return