def validate_file_dimensions(cls, descriptors: [FileDescriptor], data_model: DataModel) -> bool: # Get list of paths of selected files if len(descriptors) > 0: # If precalibration file is in use, add that name to the list if data_model.get_precalibration_type( ) == Constants.CALIBRATION_FIXED_FILE: calibration_descriptor = \ RmFitsUtil.make_file_descriptor(data_model.get_precalibration_fixed_path()) descriptors.append(calibration_descriptor) # Get binning and dimension of first to use as a reference assert len(descriptors) > 0 reference_file: FileDescriptor = descriptors[0] reference_binning = reference_file.get_binning() reference_x_size = reference_file.get_x_dimension() reference_y_size = reference_file.get_y_dimension() # Check all files in the list against these specifications descriptor: FileDescriptor for descriptor in descriptors: if descriptor.get_binning() != reference_binning: return False if descriptor.get_x_dimension() != reference_x_size: return False if descriptor.get_y_dimension() != reference_y_size: return False return True
def validate_file_dimensions(cls, descriptors: [FileDescriptor], data_model: DataModel) -> bool: """ Determine if the dimensions of all the supplied files are the same. All selected files must be the same size and the same binning. Include the precalibration bias or dark file in this test if that method is selected. :param descriptors: Files to be checked for compatibility :param data_model: Data model gives precalibration type and file if needed :return: True if all files are the same size and binning, so compatible """ # Get list of paths of selected files if len(descriptors) > 0: # If precalibration file is in use, add that name to the list if data_model.get_precalibration_type( ) == Constants.CALIBRATION_FIXED_FILE: calibration_descriptor = \ RmFitsUtil.make_file_descriptor(data_model.get_precalibration_fixed_path()) descriptors.append(calibration_descriptor) # Get binning and dimension of first to use as a reference assert len(descriptors) > 0 reference_file: FileDescriptor = descriptors[0] reference_binning = reference_file.get_binning() reference_x_size = reference_file.get_x_dimension() reference_y_size = reference_file.get_y_dimension() # Check all files in the list against these specifications descriptor: FileDescriptor for descriptor in descriptors: if descriptor.get_binning() != reference_binning: return False if descriptor.get_x_dimension() != reference_x_size: return False if descriptor.get_y_dimension() != reference_y_size: return False return True
def __init__(self, preferences: Preferences, data_model: DataModel): """Initialize MainWindow class""" self._preferences = preferences self._data_model = data_model QMainWindow.__init__(self) self.ui = uic.loadUi( MultiOsUtil.path_for_file_in_program_directory("MainWindow.ui")) self._field_validity: {object, bool} = {} self._table_model: FitsFileTableModel self._indent_level = 0 # Load algorithm from preferences algorithm = data_model.get_master_combine_method() if algorithm == Constants.COMBINE_MEAN: self.ui.combineMeanRB.setChecked(True) elif algorithm == Constants.COMBINE_MEDIAN: self.ui.combineMedianRB.setChecked(True) elif algorithm == Constants.COMBINE_MINMAX: self.ui.combineMinMaxRB.setChecked(True) else: assert (algorithm == Constants.COMBINE_SIGMA_CLIP) self.ui.combineSigmaRB.setChecked(True) self.ui.minMaxNumDropped.setText( str(data_model.get_min_max_number_clipped_per_end())) self.ui.sigmaThreshold.setText( str(data_model.get_sigma_clip_threshold())) # Load disposition from preferences disposition = data_model.get_input_file_disposition() if disposition == Constants.INPUT_DISPOSITION_SUBFOLDER: self.ui.dispositionSubFolderRB.setChecked(True) else: assert (disposition == Constants.INPUT_DISPOSITION_NOTHING) self.ui.dispositionNothingRB.setChecked(True) self.ui.subFolderName.setText( data_model.get_disposition_subfolder_name()) # Pre-calibration options precalibration_option = data_model.get_precalibration_type() if precalibration_option == Constants.CALIBRATION_FIXED_FILE: self.ui.fixedPreCalFileRB.setChecked(True) elif precalibration_option == Constants.CALIBRATION_NONE: self.ui.noPreClalibrationRB.setChecked(True) elif precalibration_option == Constants.CALIBRATION_AUTO_DIRECTORY: self.ui.autoPreCalibrationRB.setChecked(True) else: assert precalibration_option == Constants.CALIBRATION_PEDESTAL self.ui.fixedPedestalRB.setChecked(True) self.ui.fixedPedestalAmount.setText( str(data_model.get_precalibration_pedestal())) self.ui.precalibrationPathDisplay.setText( os.path.basename(data_model.get_precalibration_fixed_path())) self.ui.autoDirectoryName.setText( os.path.basename(data_model.get_precalibration_auto_directory())) self.ui.autoRecursive.setChecked( data_model.get_auto_directory_recursive()) self.ui.autoBiasOnly.setChecked( data_model.get_auto_directory_bias_only()) # Grouping boxes and parameters self.ui.groupBySizeCB.setChecked(data_model.get_group_by_size()) self.ui.groupByExposureCB.setChecked( data_model.get_group_by_exposure()) self.ui.groupByTemperatureCB.setChecked( data_model.get_group_by_temperature()) self.ui.ignoreSmallGroupsCB.setChecked( data_model.get_ignore_groups_fewer_than()) self.ui.exposureGroupBandwidth.setText( f"{data_model.get_exposure_group_bandwidth()}") self.ui.temperatureGroupBandwidth.setText( f"{data_model.get_temperature_group_bandwidth()}") self.ui.minimumGroupSize.setText( str(data_model.get_minimum_group_size())) # Set up the file table self._table_model = FitsFileTableModel( self.ui.filesTable, data_model.get_ignore_file_type()) self.ui.filesTable.setModel(self._table_model) # Columns should resize to best fit their contents self.ui.filesTable.horizontalHeader().setSectionResizeMode( QHeaderView.ResizeToContents) # Write a summary, in the main tab, of the settings from the options tab (and data model) self.fill_options_readout() self.connect_responders() # If a window size is saved, set the window size window_size = self._preferences.get_main_window_size() if window_size is not None: self.ui.resize(window_size) self.enable_fields() self.enable_buttons()