Пример #1
0
    def combine_files(self, input_files: [FileDescriptor],
                      data_model: DataModel, filter_name: str,
                      output_path: str, console: Console):
        """
        Combine the given files, output to the given output file using the combination
        method defined in the data model.

        :param input_files:     List of files to be combined
        :param data_model:      Data model with options for this run
        :param filter_name:     Human-readable filter name (for output file name and FITS comment)
        :param output_path:     Path for output fiel to be created
        :param console:         Redirectable console output object
        """
        console.push_level(
        )  # Stack console indentation level to easily restore when done
        substituted_file_name = SharedUtils.substitute_date_time_filter_in_string(
            output_path)
        file_names = [d.get_absolute_path() for d in input_files]
        combine_method = data_model.get_master_combine_method()
        # Get info about any precalibration that is to be done
        calibrator = Calibrator(data_model)
        calibration_tag = calibrator.fits_comment_tag()
        assert len(input_files) > 0
        binning: int = input_files[0].get_binning()
        (mean_exposure, mean_temperature
         ) = ImageMath.mean_exposure_and_temperature(input_files)
        if combine_method == Constants.COMBINE_MEAN:
            mean_data = ImageMath.combine_mean(file_names, calibrator, console,
                                               self._session_controller)
            self.check_cancellation()
            RmFitsUtil.create_combined_fits_file(
                substituted_file_name, mean_data,
                FileDescriptor.FILE_TYPE_FLAT, "Flat Frame", mean_exposure,
                mean_temperature, filter_name, binning,
                f"Master Flat MEAN combined {calibration_tag}")
        elif combine_method == Constants.COMBINE_MEDIAN:
            median_data = ImageMath.combine_median(file_names, calibrator,
                                                   console,
                                                   self._session_controller)
            self.check_cancellation()
            RmFitsUtil.create_combined_fits_file(
                substituted_file_name, median_data,
                FileDescriptor.FILE_TYPE_FLAT, "Flat Frame", mean_exposure,
                mean_temperature, filter_name, binning,
                f"Master Flat MEDIAN combined {calibration_tag}")
        elif combine_method == Constants.COMBINE_MINMAX:
            number_dropped_points = data_model.get_min_max_number_clipped_per_end(
            )
            min_max_clipped_mean = ImageMath.combine_min_max_clip(
                file_names, number_dropped_points, calibrator, console,
                self._session_controller)
            self.check_cancellation()
            assert min_max_clipped_mean is not None
            RmFitsUtil.create_combined_fits_file(
                substituted_file_name, min_max_clipped_mean,
                FileDescriptor.FILE_TYPE_FLAT, "Flat Frame", mean_exposure,
                mean_temperature, filter_name, binning,
                f"Master Flat Min/Max Clipped "
                f"(drop {number_dropped_points}) Mean combined"
                f" {calibration_tag}")
        else:
            assert combine_method == Constants.COMBINE_SIGMA_CLIP
            sigma_threshold = data_model.get_sigma_clip_threshold()
            sigma_clipped_mean = ImageMath.combine_sigma_clip(
                file_names, sigma_threshold, calibrator, console,
                self._session_controller)
            self.check_cancellation()
            assert sigma_clipped_mean is not None
            RmFitsUtil.create_combined_fits_file(
                substituted_file_name, sigma_clipped_mean,
                FileDescriptor.FILE_TYPE_FLAT, "Flat Frame", mean_exposure,
                mean_temperature, filter_name, binning,
                f"Master Flat Sigma Clipped "
                f"(threshold {sigma_threshold}) Mean combined"
                f" {calibration_tag}")
        console.pop_level()
Пример #2
0
 def combine_files(self, input_files: [FileDescriptor],
                   data_model: DataModel, filter_name: str,
                   output_path: str, console: Console):
     console.push_level()
     substituted_file_name = SharedUtils.substitute_date_time_filter_in_string(
         output_path)
     file_names = [d.get_absolute_path() for d in input_files]
     combine_method = data_model.get_master_combine_method()
     # Get info about any precalibration that is to be done
     calibrator = Calibrator(data_model)
     calibration_tag = calibrator.fits_comment_tag()
     assert len(input_files) > 0
     binning: int = input_files[0].get_binning()
     (mean_exposure, mean_temperature
      ) = ImageMath.mean_exposure_and_temperature(input_files)
     if combine_method == Constants.COMBINE_MEAN:
         mean_data = ImageMath.combine_mean(file_names, calibrator, console,
                                            self._session_controller)
         self.check_cancellation()
         RmFitsUtil.create_combined_fits_file(
             substituted_file_name, mean_data,
             FileDescriptor.FILE_TYPE_DARK, "Dark Frame", mean_exposure,
             mean_temperature, filter_name, binning,
             f"Master Dark MEAN combined {calibration_tag}")
     elif combine_method == Constants.COMBINE_MEDIAN:
         median_data = ImageMath.combine_median(file_names, calibrator,
                                                console,
                                                self._session_controller)
         self.check_cancellation()
         RmFitsUtil.create_combined_fits_file(
             substituted_file_name, median_data,
             FileDescriptor.FILE_TYPE_DARK, "Dark Frame", mean_exposure,
             mean_temperature, filter_name, binning,
             f"Master Dark MEDIAN combined {calibration_tag}")
     elif combine_method == Constants.COMBINE_MINMAX:
         number_dropped_points = data_model.get_min_max_number_clipped_per_end(
         )
         min_max_clipped_mean = ImageMath.combine_min_max_clip(
             file_names, number_dropped_points, calibrator, console,
             self._session_controller)
         self.check_cancellation()
         assert min_max_clipped_mean is not None
         RmFitsUtil.create_combined_fits_file(
             substituted_file_name, min_max_clipped_mean,
             FileDescriptor.FILE_TYPE_DARK, "Dark Frame", mean_exposure,
             mean_temperature, filter_name, binning,
             f"Master Dark Min/Max Clipped "
             f"(drop {number_dropped_points}) Mean combined"
             f" {calibration_tag}")
     else:
         assert combine_method == Constants.COMBINE_SIGMA_CLIP
         sigma_threshold = data_model.get_sigma_clip_threshold()
         sigma_clipped_mean = ImageMath.combine_sigma_clip(
             file_names, sigma_threshold, calibrator, console,
             self._session_controller)
         self.check_cancellation()
         assert sigma_clipped_mean is not None
         RmFitsUtil.create_combined_fits_file(
             substituted_file_name, sigma_clipped_mean,
             FileDescriptor.FILE_TYPE_DARK, "Dark Frame", mean_exposure,
             mean_temperature, filter_name, binning,
             f"Master Dark Sigma Clipped "
             f"(threshold {sigma_threshold}) Mean combined"
             f" {calibration_tag}")
     console.pop_level()