def initUI(self, wlet_pars): ''' Gets called from the parent DataViewer ''' self.setWindowTitle('Batch Processing') self.setGeometry(310, 330, 600, 200) # from the DataViewer self.wlet_pars = wlet_pars main_layout = QGridLayout() # -- Ridge Analysis Options -- ridge_options = QGroupBox('Ridge Extraction Options') thresh_label = QLabel("Ridge Threshold:") thresh_edit = QLineEdit() thresh_edit.setValidator(posfloatV) thresh_edit.insert('0') thresh_edit.setMaximumWidth(60) thresh_edit.setToolTip( 'Ridge points below that power value will be filtered out ') self.thresh_edit = thresh_edit smooth_label = QLabel("Ridge Smoothing:") smooth_edit = QLineEdit() smooth_edit.setMaximumWidth(60) smooth_edit.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) smooth_edit.setValidator(QIntValidator(bottom=3, top=99999999)) tt = 'Savitkzy-Golay window size for smoothing the ridge,\nleave blank for no smoothing' smooth_edit.setToolTip(tt) self.smooth_edit = smooth_edit ridge_options_layout = QGridLayout() ridge_options_layout.addWidget(thresh_label, 0, 0) ridge_options_layout.addWidget(thresh_edit, 0, 1) ridge_options_layout.addWidget(smooth_label, 1, 0) ridge_options_layout.addWidget(smooth_edit, 1, 1) ridge_options.setLayout(ridge_options_layout) # -- Plotting Options -- plotting_options = QGroupBox('Summary Statistics') self.cb_power_dis = QCheckBox('Ensemble Power Distribution') self.cb_power_dis.setToolTip( 'Show time-averaged wavelet power of the ensemble') self.cb_plot_ens_dynamics = QCheckBox('Ensemble Dynamics') self.cb_plot_ens_dynamics.setToolTip( 'Show period, amplitude and phase distribution over time') lo = QGridLayout() lo.addWidget(self.cb_power_dis, 0, 0) lo.addWidget(self.cb_plot_ens_dynamics, 1, 0) plotting_options.setLayout(lo) # -- Save Out Results -- export_options = QGroupBox('Export Results') export_options.setToolTip('Saves also the summary statistics..') export_options.setCheckable(True) export_options.setChecked(False) self.cb_specs = QCheckBox('Wavelet Spectra') self.cb_specs.setToolTip( "Saves the individual wavelet spectra as images (png's)") self.cb_readout = QCheckBox('Ridge Readouts') self.cb_readout.setToolTip( 'Saves one data frame per signal to disc as csv') self.cb_readout_plots = QCheckBox('Ridge Readout Plots') self.cb_readout_plots.setToolTip( "Saves the individual readout plots to disc as png's") self.cb_sorted_powers = QCheckBox('Sorted Average Powers') self.cb_sorted_powers.setToolTip( "Saves the time-averaged powers in descending order") self.cb_save_ensemble_dynamics = QCheckBox('Ensemble Dynamics') self.cb_save_ensemble_dynamics.setToolTip( "Saves each period, amplitude and phase summary statistics to a csv table" ) home = expanduser("~") OutPath_label = QLabel('Export to:') self.OutPath_edit = QLineEdit(home) if self.debug: self.OutPath_edit.setText(home + '/Desktop/wres') PathButton = QPushButton('Select Path..') PathButton.setMaximumWidth(100) PathButton.clicked.connect(self.select_export_dir) line1 = QFrame() line1.setFrameShape(QFrame.HLine) line1.setFrameShadow(QFrame.Sunken) line2 = QFrame() line2.setFrameShape(QFrame.HLine) line2.setFrameShadow(QFrame.Sunken) lo = QGridLayout() lo.setSpacing(1.5) lo.addWidget(self.cb_specs, 0, 0) lo.addWidget(self.cb_readout, 1, 0) lo.addWidget(self.cb_readout_plots, 2, 0) #lo.addWidget(line1, 3,0) lo.addWidget(self.cb_sorted_powers, 4, 0) lo.addWidget(self.cb_save_ensemble_dynamics, 5, 0) #lo.addWidget(line2, 6,0) lo.addWidget(PathButton, 7, 0) lo.addWidget(self.OutPath_edit, 8, 0) export_options.setLayout(lo) self.export_options = export_options # -- Progress and Run -- Nsignals = self.parentDV.df.shape[1] RunButton = QPushButton(f"Run for {Nsignals} Signals!", self) RunButton.setStyleSheet("background-color: orange") RunButton.clicked.connect(self.run_batch) #RunButton.setMaximumWidth(60) # the progress bar self.progress = QProgressBar(self) self.progress.setRange(0, Nsignals - 1) #self.progress.setGeometry(0,0, 300, 20) self.progress.setMinimumWidth(200) # nsig_label = QLabel(f'{Nsignals} Signals') process_box = QGroupBox('Processing') process_box.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum) lo = QHBoxLayout() lo.addWidget(self.progress) lo.addItem(QSpacerItem(30, 2)) # lo.addStretch(0) lo.addWidget(RunButton) lo.addStretch(0) process_box.setLayout(lo) # -- main layout -- main_layout.addWidget(ridge_options, 0, 0, 1, 1) main_layout.addWidget(plotting_options, 1, 0, 1, 1) main_layout.addWidget(export_options, 0, 1, 2, 1) main_layout.addWidget(process_box, 2, 0, 1, 2) # set main layout self.setLayout(main_layout) self.show()
def initUI(self, wlet_pars): """ Gets called from the parent DataViewer """ self.setWindowTitle("Batch Processing") self.setGeometry(310, 330, 600, 200) # from the DataViewer self.wlet_pars = wlet_pars # for the status bar main_widget = QWidget() self.statusBar() main_layout = QGridLayout() # -- Ridge Analysis Options -- ridge_options = QGroupBox("Ridge Detection") thresh_label = QLabel("Ridge Threshold:") thresh_edit = QLineEdit() thresh_edit.setValidator(posfloatV) thresh_edit.insert("0") thresh_edit.setMaximumWidth(60) thresh_edit.setStatusTip( "Ridge points below that power value will be filtered out ") self.thresh_edit = thresh_edit smooth_label = QLabel("Ridge Smoothing:") smooth_edit = QLineEdit() smooth_edit.setMaximumWidth(60) smooth_edit.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) smooth_edit.setValidator(QIntValidator(bottom=3, top=99999999)) smooth_edit.setStatusTip( """Savitkzy-Golay window size for smoothing the ridge, leave blank for no smoothing""") self.smooth_edit = smooth_edit ridge_options_layout = QGridLayout() ridge_options_layout.addWidget(thresh_label, 0, 0) ridge_options_layout.addWidget(thresh_edit, 0, 1) ridge_options_layout.addWidget(smooth_label, 1, 0) ridge_options_layout.addWidget(smooth_edit, 1, 1) ridge_options.setLayout(ridge_options_layout) # -- Plotting Options -- plotting_options = QGroupBox("Summary Statistics") self.cb_power_dis = QCheckBox("Ridge Power Distribution") self.cb_power_dis.setStatusTip( "Show time-averaged distribution of ridge powers") self.cb_plot_ens_dynamics = QCheckBox("Ensemble Dynamics") self.cb_plot_ens_dynamics.setStatusTip( "Show period, amplitude and phase distribution over time") self.cb_plot_Fourier_dis = QCheckBox("Fourier Spectra Distribution") self.cb_plot_Fourier_dis.setStatusTip( "Ensemble power distribution of the time averaged Wavelet spectra") lo = QGridLayout() lo.addWidget(self.cb_plot_ens_dynamics, 0, 0) lo.addWidget(self.cb_plot_Fourier_dis, 1, 0) lo.addWidget(self.cb_power_dis, 2, 0) plotting_options.setLayout(lo) # -- Save Out Results -- export_options = QGroupBox("Export Results") export_options.setStatusTip("Creates various figures and csv's") export_options.setCheckable(True) export_options.setChecked(False) self.cb_filtered_sigs = QCheckBox("Filtered Signals") self.cb_filtered_sigs.setStatusTip( "Saves detrended and amplitude normalized signals to disc as csv's" ) self.cb_specs = QCheckBox("Wavelet Spectra") self.cb_specs.setStatusTip( "Saves the individual wavelet spectra as images") self.cb_specs_noridge = QCheckBox("Wavelet Spectra w/o ridges") self.cb_specs_noridge.setStatusTip( "Saves the individual wavelet spectra without the ridges as images" ) self.cb_readout = QCheckBox("Ridge Readouts") self.cb_readout.setStatusTip( "Saves one analysis result per signal to disc as csv") self.cb_readout_plots = QCheckBox("Ridge Readout Plots") self.cb_readout_plots.setStatusTip( "Saves the individual readout plots to disc") self.cb_sorted_powers = QCheckBox("Sorted Average Powers") self.cb_sorted_powers.setStatusTip( "Saves the time-averaged ridge powers in descending order") self.cb_save_ensemble_dynamics = QCheckBox("Ensemble Dynamics") self.cb_save_ensemble_dynamics.setStatusTip( "Separately saves period, amplitude, power and phase summary statistics to a csv file" ) self.cb_save_Fourier_dis = QCheckBox("Fourier Distribution") self.cb_save_Fourier_dis.setStatusTip( "Saves median and quartiles of the ensemble Fourier power spectral distribution" ) # defaults to HOME self.OutPath_edit = QLineEdit(expanduser("~")) PathButton = QPushButton("Select Path..") PathButton.setMaximumWidth(100) PathButton.clicked.connect(self.select_export_dir) line1 = QFrame() line1.setFrameShape(QFrame.HLine) line1.setFrameShadow(QFrame.Sunken) line2 = QFrame() line2.setFrameShape(QFrame.HLine) line2.setFrameShadow(QFrame.Sunken) lo = QGridLayout() lo.setSpacing(1.5) lo.addWidget(self.cb_filtered_sigs, 0, 0) lo.addWidget(self.cb_specs, 1, 0) lo.addWidget(self.cb_specs_noridge, 2, 0) lo.addWidget(self.cb_readout, 3, 0) lo.addWidget(self.cb_readout_plots, 4, 0) # lo.addWidget(line1, 3,0) lo.addWidget(self.cb_sorted_powers, 5, 0) lo.addWidget(self.cb_save_ensemble_dynamics, 6, 0) lo.addWidget(self.cb_save_Fourier_dis, 7, 0) # lo.addWidget(line2, 6,0) lo.addWidget(PathButton, 8, 0) lo.addWidget(self.OutPath_edit, 9, 0) export_options.setLayout(lo) self.export_options = export_options # -- Progress and Run -- Nsignals = self.parentDV.df.shape[1] RunButton = QPushButton(f"Run for {Nsignals} Signals!", self) RunButton.setStyleSheet("background-color: orange") RunButton.clicked.connect(self.run_batch) # RunButton.setMaximumWidth(60) # the progress bar self.progress = QProgressBar(self) self.progress.setRange(0, Nsignals - 1) # self.progress.setGeometry(0,0, 300, 20) self.progress.setMinimumWidth(200) # nsig_label = QLabel(f'{Nsignals} Signals') process_box = QGroupBox("Processing") process_box.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum) lo = QHBoxLayout() lo.addWidget(self.progress) lo.addItem(QSpacerItem(30, 2)) # lo.addStretch(0) lo.addWidget(RunButton) lo.addStretch(0) process_box.setLayout(lo) # -- main layout -- main_layout.addWidget(plotting_options, 0, 0, 1, 1) main_layout.addWidget(ridge_options, 1, 0, 1, 1) main_layout.addWidget(export_options, 0, 1, 2, 1) main_layout.addWidget(process_box, 2, 0, 1, 2) # set main layout main_widget.setLayout(main_layout) self.setCentralWidget(main_widget) self.show()