Exemplo n.º 1
0
    def test_get_setting_with_string(self):
        settings = QSettings()
        settings.beginGroup(GROUP)
        settings.setValue(PREFIX + "something", "value")
        settings.endGroup()

        self.assertEqual(get_setting(GROUP, PREFIX, "something"), "value")
Exemplo n.º 2
0
    def test_get_setting_with_int(self):
        settings = QSettings()
        settings.beginGroup(GROUP)
        settings.setValue(PREFIX + "something", 10)
        settings.endGroup()

        self.assertEqual(get_setting(GROUP, PREFIX, "something", return_type=int), 10)
Exemplo n.º 3
0
def fetch_correction_workspaces(vanadium_path, instrument, rb_num=""):
    """
    Fetch workspaces from the file system or create new ones.
    :param vanadium_path: The path to the requested vanadium run raw data.
    :param instrument: The instrument the data came from.
    :param rb_num: A user identifier, usually an experiment number.
    :return: The resultant integration and curves workspaces.
    """
    vanadium_number = path_handling.get_run_number_from_path(vanadium_path, instrument)
    integ_path, curves_path = _generate_saved_workspace_file_paths(vanadium_number)
    force_recalc = get_setting(path_handling.INTERFACES_SETTINGS_GROUP,
                               path_handling.ENGINEERING_PREFIX, "recalc_vanadium", return_type=bool)
    if path.exists(curves_path) and path.exists(integ_path) and not force_recalc:  # Check if the cached files exist.
        try:
            integ_workspace = Load(Filename=integ_path, OutputWorkspace=INTEGRATED_WORKSPACE_NAME)
            curves_workspace = Load(Filename=curves_path, OutputWorkspace=CURVES_WORKSPACE_NAME)
            if rb_num:
                user_integ, user_curves = _generate_saved_workspace_file_paths(vanadium_number,
                                                                               rb_num=rb_num)
                if not path.exists(user_integ) and not path.exists(user_curves):
                    _save_correction_files(integ_workspace, user_integ, curves_workspace,
                                           user_curves)
            return integ_workspace, curves_workspace
        except RuntimeError as e:
            logger.error(
                "Problem loading existing vanadium calculations. Creating new files. Description: "
                + str(e))
    integ_workspace, curves_workspace = _calculate_vanadium_correction(vanadium_path)
    _save_correction_files(integ_workspace, integ_path, curves_workspace, curves_path)
    if rb_num:
        user_integ, user_curves = _generate_saved_workspace_file_paths(vanadium_number,
                                                                       rb_num=rb_num)
        _save_correction_files(integ_workspace, user_integ, curves_workspace, user_curves)
    return integ_workspace, curves_workspace
Exemplo n.º 4
0
    def test_get_setting_bool_without_specifying_type(self):
        settings = QSettings()
        settings.beginGroup(GROUP)
        settings.setValue(PREFIX + "something", True)
        settings.endGroup()

        self.assertEqual(get_setting(GROUP, PREFIX, "something"), "true")
Exemplo n.º 5
0
    def test_get_setting_with_bool_true(self):
        settings = QSettings()
        settings.beginGroup(GROUP)
        settings.setValue(PREFIX + "something", True)
        settings.endGroup()

        self.assertEqual(get_setting(GROUP, PREFIX, "something", return_type=bool), True)
Exemplo n.º 6
0
 def get_ws_sorted_by_primary_log(self):
     ws_list = self.get_ws_list()
     tof_ws_inds = [ind for ind, ws in enumerate(ws_list) if
                    self._loaded_workspaces[ws].getAxis(0).getUnit().caption() == 'Time-of-flight']
     primary_log = get_setting(output_settings.INTERFACES_SETTINGS_GROUP, output_settings.ENGINEERING_PREFIX,
                               "primary_log")
     sort_ascending = get_setting(output_settings.INTERFACES_SETTINGS_GROUP, output_settings.ENGINEERING_PREFIX,
                                  "sort_ascending")
     if primary_log:
         log_table = ADS.retrieve(primary_log)
         isort = argsort(array(log_table.column('avg')))
         ws_list_tof = [ws_list[iws] for iws in isort if iws in tof_ws_inds]
     else:
         ws_list_tof = ws_list
     if sort_ascending == 'false':
         # settings can only be saved as text
         ws_list_tof = ws_list_tof[::-1]
     return ws_list_tof
 def __init__(self, canvas, toolbar_manager, parent=None):
     super(EngDiffFitPropertyBrowser,
           self).__init__(canvas, toolbar_manager, parent)
     # overwrite default peak with that in settings (gets init when UI opened)
     default_peak = get_setting(output_settings.INTERFACES_SETTINGS_GROUP,
                                output_settings.ENGINEERING_PREFIX,
                                "default_peak")
     self.setDefaultPeakType(default_peak)
     self.fit_notifier = GenericObservable()
     self.fit_enabled_notifier = GenericObservable()
Exemplo n.º 8
0
 def create_log_workspace_group(self):
     # run information table
     run_info = self.make_runinfo_table()
     self._log_workspaces = GroupWorkspaces([run_info], OutputWorkspace='logs')
     # a table per logs
     logs = get_setting(output_settings.INTERFACES_SETTINGS_GROUP, output_settings.ENGINEERING_PREFIX, "logs")
     if logs:
         self._log_names = logs.split(',')
         for log in self._log_names:
             self.make_log_table(log)
             self._log_workspaces.add(log)
Exemplo n.º 9
0
 def create_log_table(self):
     # run information table
     run_info = CreateEmptyTableWorkspace()
     run_info.addColumn(type="str", name="Instrument")
     run_info.addColumn(type="int", name="Run")
     run_info.addColumn(type="int", name="Bank")
     run_info.addColumn(type="float", name="uAmps")
     run_info.addColumn(type="str", name="Title")
     self._log_workspaces = GroupWorkspaces([run_info], OutputWorkspace='logs')
     # a table per logs
     logs = get_setting(path_handling.INTERFACES_SETTINGS_GROUP, path_handling.ENGINEERING_PREFIX, "logs")
     if logs:
         for log in logs.split(','):
             ws = CreateEmptyTableWorkspace(OutputWorkspace=log)
             ws.addColumn(type="float", name="avg")
             ws.addColumn(type="float", name="stdev")
             self._log_workspaces.add(log)
Exemplo n.º 10
0
def create_vanadium_corrections(vanadium_path: str,
                                instrument: str):  # -> Workspace, Workspace
    """
    Runs the vanadium correction algorithm.
    :param vanadium_path: The path to the vanadium data.
    :return: The integrated workspace and the processed instrument workspace generated.
    """
    try:
        run_no = path_handling.get_run_number_from_path(
            vanadium_path, instrument)
        van_ws = Load(Filename=vanadium_path,
                      OutputWorkspace=str(run_no) + '_' +
                      VANADIUM_INPUT_WORKSPACE_NAME)
    except Exception as e:
        logger.error(
            "Error when loading vanadium sample data. "
            "Could not run Load algorithm with vanadium run number: " +
            str(vanadium_path) + ". Error description: " + str(e))
        raise RuntimeError
    # get full instrument calibration for instrument processing calculation
    if Ads.doesExist("full_inst_calib"):
        full_calib_ws = Ads.retrieve("full_inst_calib")
    else:
        full_calib_path = get_setting(
            output_settings.INTERFACES_SETTINGS_GROUP,
            output_settings.ENGINEERING_PREFIX, "full_calibration")
        try:
            full_calib_ws = Load(full_calib_path,
                                 OutputWorkspace="full_inst_calib")
        except ValueError:
            logger.error(
                "Error loading Full instrument calibration - this is set in the interface settings."
            )
            return
    integral_ws = _calculate_vanadium_integral(van_ws, run_no)
    processed_ws = _calculate_vanadium_processed_instrument(
        van_ws, full_calib_ws, integral_ws, run_no)
    return integral_ws, processed_ws
Exemplo n.º 11
0
    def __init__(self, model, view):
        self.model = model
        self.view = view
        self.worker = None
        self.calibration_observer = CalibrationObserver(self)

        # Observable Setup
        self.focus_run_notifier = GenericObservable()

        # Connect view signals to local methods.
        self.view.set_on_focus_clicked(self.on_focus_clicked)
        self.view.set_enable_controls_connection(
            self.set_focus_controls_enabled)

        # Variables from other GUI tabs.
        self.current_calibration = CalibrationInfo()
        self.instrument = "ENGINX"
        self.rb_num = None

        last_van_path = get_setting(output_settings.INTERFACES_SETTINGS_GROUP,
                                    output_settings.ENGINEERING_PREFIX,
                                    "last_vanadium_run")
        if last_van_path:
            self.view.set_van_file_text_with_search(last_van_path)
Exemplo n.º 12
0
 def focus_run(self, sample_paths, banks, plot_output, instrument, rb_num,
               spectrum_numbers):
     """
     Focus some data using the current calibration.
     :param sample_paths: The paths to the data to be focused.
     :param banks: The banks that should be focused.
     :param plot_output: True if the output should be plotted.
     :param instrument: The instrument that the data came from.
     :param rb_num: The experiment number, used to create directories. Can be None
     :param spectrum_numbers: The specific spectra that should be focused. Used instead of banks.
     """
     if not Ads.doesExist(vanadium_corrections.INTEGRATED_WORKSPACE_NAME
                          ) and not Ads.doesExist(
                              vanadium_corrections.CURVES_WORKSPACE_NAME):
         return
     integration_workspace = Ads.retrieve(
         vanadium_corrections.INTEGRATED_WORKSPACE_NAME)
     curves_workspace = Ads.retrieve(
         vanadium_corrections.CURVES_WORKSPACE_NAME)
     output_workspaces = []  # List of collated workspaces to plot.
     full_calib_path = get_setting(path_handling.INTERFACES_SETTINGS_GROUP,
                                   path_handling.ENGINEERING_PREFIX,
                                   "full_calibration")
     if full_calib_path is not None and path.exists(full_calib_path):
         full_calib_workspace = LoadAscii(full_calib_path,
                                          OutputWorkspace="det_pos",
                                          Separator="Tab")
     else:
         full_calib_workspace = None
     if spectrum_numbers is None:
         for sample_path in sample_paths:
             sample_workspace = path_handling.load_workspace(sample_path)
             run_no = path_handling.get_run_number_from_path(
                 sample_path, instrument)
             workspaces_for_run = []
             for name in banks:
                 output_workspace_name = str(
                     run_no) + "_" + FOCUSED_OUTPUT_WORKSPACE_NAME + str(
                         name)
                 self._run_focus(sample_workspace, output_workspace_name,
                                 integration_workspace, curves_workspace,
                                 name, full_calib_workspace)
                 workspaces_for_run.append(output_workspace_name)
                 # Save the output to the file system.
                 self._save_output(instrument, sample_path, name,
                                   output_workspace_name, rb_num)
             output_workspaces.append(workspaces_for_run)
     else:
         for sample_path in sample_paths:
             sample_workspace = path_handling.load_workspace(sample_path)
             run_no = path_handling.get_run_number_from_path(
                 sample_path, instrument)
             output_workspace_name = str(
                 run_no) + "_" + FOCUSED_OUTPUT_WORKSPACE_NAME + "cropped"
             self._run_focus(sample_workspace, output_workspace_name,
                             integration_workspace, curves_workspace, None,
                             full_calib_workspace, spectrum_numbers)
             output_workspaces.append([output_workspace_name])
             self._save_output(instrument, sample_path, "cropped",
                               output_workspace_name, rb_num)
     # Plot the output
     if plot_output:
         for ws_names in output_workspaces:
             self._plot_focused_workspaces(ws_names)
Exemplo n.º 13
0
    def create_new_calibration(self,
                               ceria_path,
                               plot_output,
                               instrument,
                               rb_num=None,
                               bank=None,
                               calfile=None,
                               spectrum_numbers=None):
        """
        Create a new calibration from a ceria run
        :param ceria_path: Path to ceria (CeO2) data file
        :param plot_output: Whether the output should be plotted.
        :param instrument: The instrument the data relates to.
        :param rb_num: The RB number for file creation.
        :param bank: Optional parameter to crop by bank
        :param calfile: Optional parameter to crop using a custom calfile
        :param spectrum_numbers: Optional parameter to crop using spectrum numbers.
        """

        ceria_workspace = path_handling.load_workspace(ceria_path)
        if Ads.doesExist("full_inst_calib"):
            full_calib = Ads.retrieve("full_inst_calib")
        else:
            full_calib_path = get_setting(
                output_settings.INTERFACES_SETTINGS_GROUP,
                output_settings.ENGINEERING_PREFIX, "full_calibration")
            try:
                full_calib = Load(full_calib_path,
                                  OutputWorkspace="full_inst_calib")
            except ValueError:
                logger.error(
                    "Error loading Full instrument calibration - this is set in the interface settings."
                )
                return

        cal_params, ceria_raw, grp_ws = self.run_calibration(
            ceria_workspace, bank, calfile, spectrum_numbers, full_calib)
        if plot_output:
            plot_dicts = list()
            if len(cal_params) == 1:
                if calfile:
                    bank_name = "Custom"
                elif spectrum_numbers:
                    bank_name = "Cropped"
                else:
                    bank_name = bank
                plot_dicts.append(
                    EnggUtils.generate_tof_fit_dictionary(bank_name))
                EnggUtils.plot_tof_fit(plot_dicts, [bank_name])
            else:
                plot_dicts.append(
                    EnggUtils.generate_tof_fit_dictionary("bank_1"))
                plot_dicts.append(
                    EnggUtils.generate_tof_fit_dictionary("bank_2"))
                EnggUtils.plot_tof_fit(plot_dicts, ["bank_1", "bank_2"])
        difa = [row['difa'] for row in cal_params]
        difc = [row['difc'] for row in cal_params]
        tzero = [row['tzero'] for row in cal_params]

        bk2bk_params = self.extract_b2b_params(ceria_raw)
        DeleteWorkspace(ceria_raw)

        params_table = []

        for i in range(len(difc)):
            params_table.append([i, difc[i], difa[i], tzero[i]])
        self.update_calibration_params_table(params_table)

        calib_dir = path.join(output_settings.get_output_path(), "Calibration",
                              "")
        if calfile:
            EnggUtils.save_grouping_workspace(grp_ws,
                                              calib_dir,
                                              ceria_path,
                                              instrument,
                                              calfile=calfile)
        elif spectrum_numbers:
            EnggUtils.save_grouping_workspace(grp_ws,
                                              calib_dir,
                                              ceria_path,
                                              instrument,
                                              spec_nos=spectrum_numbers)
        self.create_output_files(calib_dir, difa, difc, tzero, bk2bk_params,
                                 ceria_path, instrument, bank,
                                 spectrum_numbers, calfile)
        if rb_num:
            user_calib_dir = path.join(output_settings.get_output_path(),
                                       "User", rb_num, "Calibration", "")
            self.create_output_files(user_calib_dir, difa, difc, tzero,
                                     bk2bk_params, ceria_path, instrument,
                                     bank, spectrum_numbers, calfile)
Exemplo n.º 14
0
def get_output_path():
    location = get_setting(INTERFACES_SETTINGS_GROUP, ENGINEERING_PREFIX,
                           "save_location")
    return location if location is not None else ""
Exemplo n.º 15
0
    def create_new_calibration(self,
                               vanadium_path,
                               sample_path,
                               plot_output,
                               instrument,
                               rb_num=None,
                               bank=None,
                               spectrum_numbers=None):
        """
        Create a new calibration from a vanadium run and sample run
        :param vanadium_path: Path to vanadium data file.
        :param sample_path: Path to sample (CeO2) data file
        :param plot_output: Whether the output should be plotted.
        :param instrument: The instrument the data relates to.
        :param rb_num: The RB number for file creation.
        :param bank: Optional parameter to crop by bank
        :param spectrum_numbers: Optional parameter to crop using spectrum numbers.
        """
        van_integration, van_curves = vanadium_corrections.fetch_correction_workspaces(
            vanadium_path, instrument, rb_num=rb_num)
        sample_workspace = path_handling.load_workspace(sample_path)
        full_calib_path = get_setting(path_handling.INTERFACES_SETTINGS_GROUP,
                                      path_handling.ENGINEERING_PREFIX, "full_calibration")
        if full_calib_path is not None and path.exists(full_calib_path):
            full_calib = LoadAscii(full_calib_path, OutputWorkspace="det_pos", Separator="Tab")
            output = self.run_calibration(sample_workspace,
                                          van_integration,
                                          van_curves,
                                          bank,
                                          spectrum_numbers,
                                          full_calib_ws=full_calib)
        else:
            output = self.run_calibration(sample_workspace, van_integration, van_curves, bank,
                                          spectrum_numbers)
        if plot_output:
            self._plot_vanadium_curves()
            for i in range(len(output)):
                if spectrum_numbers:
                    bank_name = "cropped"
                elif bank is None:
                    bank_name = str(i + 1)
                else:
                    bank_name = bank
                difa = output[i].DIFA
                difc = output[i].DIFC
                tzero = output[i].TZERO
                self._generate_tof_fit_workspace(difa, difc, tzero, bank_name)
            if bank is None and spectrum_numbers is None:
                self._plot_tof_fit()
            elif spectrum_numbers is None:
                self._plot_tof_fit_single_bank_or_custom(bank)
            else:
                self._plot_tof_fit_single_bank_or_custom("cropped")
        difa = [i.DIFC for i in output]
        difc = [i.DIFC for i in output]
        tzero = [i.TZERO for i in output]

        params_table = []

        for i in range(len(difc)):
            params_table.append([i, difc[i], difa[i], tzero[i]])
        self.update_calibration_params_table(params_table)

        calib_dir = path.join(path_handling.get_output_path(), "Calibration", "")
        self.create_output_files(calib_dir, difa, difc, tzero, sample_path, vanadium_path, instrument,
                                 bank, spectrum_numbers)
        if rb_num:
            user_calib_dir = path.join(path_handling.get_output_path(), "User", rb_num,
                                       "Calibration", "")
            self.create_output_files(user_calib_dir, difa, difc, tzero, sample_path, vanadium_path,
                                     instrument, bank, spectrum_numbers)
Exemplo n.º 16
0
 def get_setting(name, return_type=str):
     return get_setting(path_handling.INTERFACES_SETTINGS_GROUP,
                        path_handling.ENGINEERING_PREFIX,
                        name,
                        return_type=return_type)
Exemplo n.º 17
0
    def focus_run(self, sample_paths: list, vanadium_path: str,
                  plot_output: bool, instrument: str, rb_num: str,
                  regions_dict: dict) -> None:
        """
        Focus some data using the current calibration.
        :param sample_paths: The paths to the data to be focused.
        :param vanadium_path: Path to the vanadium file from the current calibration
        :param plot_output: True if the output should be plotted.
        :param instrument: The instrument that the data came from.
        :param rb_num: Number to signify the user who is running this focus
        :param regions_dict: dict region name -> grp_ws_name, defining region(s) of interest to focus over
        """
        full_calib_path = get_setting(
            output_settings.INTERFACES_SETTINGS_GROUP,
            output_settings.ENGINEERING_PREFIX, "full_calibration")
        if not Ads.doesExist("full_inst_calib"):
            try:
                full_calib_workspace = Load(full_calib_path,
                                            OutputWorkspace="full_inst_calib")
            except RuntimeError:
                logger.error(
                    "Error loading Full instrument calibration - this is set in the interface settings."
                )
                return
        else:
            full_calib_workspace = Ads.retrieve("full_inst_calib")
        van_integration_ws, van_processed_inst_ws = vanadium_corrections.fetch_correction_workspaces(
            vanadium_path, instrument)

        # check correct region calibration(s) and grouping workspace(s) exists
        inst_ws = path_handling.load_workspace(sample_paths[0])
        for region in regions_dict:
            calib_exists = self._check_region_calib_ws_exists(region)
            grouping_exists = self._check_region_grouping_ws_exists(
                regions_dict[region], inst_ws)
            if not (calib_exists and grouping_exists):
                return

        # loop over samples provided, focus each over region(s) specified in regions_dict
        output_workspaces = []  # List of collated workspaces to plot.
        self._last_focused_files = []
        van_run_no = path_handling.get_run_number_from_path(
            vanadium_path, instrument)
        for sample_path in sample_paths:
            sample_workspace = path_handling.load_workspace(sample_path)
            run_no = path_handling.get_run_number_from_path(
                sample_path, instrument)
            # perform prefocus operations on whole instrument workspace
            prefocus_success = self._whole_inst_prefocus(
                sample_workspace, van_integration_ws, full_calib_workspace)
            if not prefocus_success:
                continue
            sample_plots = [
            ]  # if both banks focused, pass list with both so plotted on same figure
            for region, grouping_kwarg in regions_dict.items():
                tof_output_name = str(
                    run_no) + "_" + FOCUSED_OUTPUT_WORKSPACE_NAME + region
                dspacing_output_name = tof_output_name + "_dSpacing"
                region_calib_ws = self._get_region_calib_ws(region)
                curves = self._get_van_curves_for_roi(region,
                                                      van_processed_inst_ws,
                                                      grouping_kwarg)
                # perform focus over chosen region of interest
                self._run_focus(sample_workspace, tof_output_name, curves,
                                grouping_kwarg, region_calib_ws)
                sample_plots.append(tof_output_name)
                self._save_output(instrument, run_no, van_run_no, region,
                                  tof_output_name, rb_num)
                self._save_output(instrument,
                                  run_no,
                                  van_run_no,
                                  region,
                                  dspacing_output_name,
                                  rb_num,
                                  unit="dSpacing")
                self._output_sample_logs(instrument, run_no, van_run_no,
                                         sample_workspace, rb_num)
            output_workspaces.append(sample_plots)
            DeleteWorkspace(sample_workspace)
        # remove created grouping workspace if present
        if Ads.doesExist("grp_ws"):
            DeleteWorkspace("grp_ws")
        # Plot the output
        if plot_output:
            for ws_names in output_workspaces:
                self._plot_focused_workspaces(ws_names)
Exemplo n.º 18
0
 def get_setting(name, return_type=str):
     return get_setting(output_settings.INTERFACES_SETTINGS_GROUP,
                        output_settings.ENGINEERING_PREFIX,
                        name,
                        return_type=return_type)
Exemplo n.º 19
0
 def test_get_setting_with_invalid(self):
     self.assertEqual(get_setting(GROUP, PREFIX, "something"), "")