(self, maxv_new, fwhm_new, energy_new)
| 858 | self._update_userpeak_fwhm(eline, energy_new, fwhm_new) |
| 859 | |
| 860 | def modify_userpeak_params(self, maxv_new, fwhm_new, energy_new): |
| 861 | if self.get_eline_name_category(self.e_name) != "userpeak": |
| 862 | msg = ( |
| 863 | f"Hight and width can be modified only for a user defined peak.\n" |
| 864 | f"The function was called for '{self.e_name}' peak" |
| 865 | ) |
| 866 | raise RuntimeError(msg) |
| 867 | |
| 868 | if self.e_name not in self.EC.element_dict: |
| 869 | msg = ( |
| 870 | f"Attempt to modify maximum value for the emission line '{self.e_name},'\n" |
| 871 | f"which is not currently selected." |
| 872 | ) |
| 873 | raise RuntimeError(msg) |
| 874 | |
| 875 | # Some checks of the input values |
| 876 | if maxv_new <= 0.0: |
| 877 | raise ValueError("Peak height must be a positive number greater than 0.001.") |
| 878 | if energy_new <= 0.0: |
| 879 | raise ValueError("User peak energy must be a positive number greater than 0.001.") |
| 880 | if fwhm_new <= 0: |
| 881 | raise ValueError("User peak FWHM must be a positive number.") |
| 882 | |
| 883 | # Make sure that the energy of the user peak is within the selected fitting range |
| 884 | energy_bound_high = self.param_new["non_fitting_values"]["energy_bound_high"]["value"] |
| 885 | energy_bound_low = self.param_new["non_fitting_values"]["energy_bound_low"]["value"] |
| 886 | if energy_new > energy_bound_high or energy_new < energy_bound_low: |
| 887 | raise ValueError("User peak energy is outside the selected range.") |
| 888 | |
| 889 | # This updates 'delta_center' and 'delta_sigma' entries of the 'self.param_new' dictionary |
| 890 | self._update_userpeak_energy_fwhm(self.e_name, fwhm_new, energy_new) |
| 891 | |
| 892 | default_area = 1e2 |
| 893 | key = self._generate_param_keys(self.e_name)["key_area"] |
| 894 | |
| 895 | # Set area to default area, change it later once the area is computed |
| 896 | self.param_new[key]["value"] = default_area |
| 897 | |
| 898 | # 'self.param_new' is used to provide 'hint' values for the model, but all active |
| 899 | # emission lines in 'elemental_lines' will be included in the model. |
| 900 | # The model will contain lines in 'elemental_lines', Compton and elastic |
| 901 | x, data_out, area_dict = calculate_profile( |
| 902 | self.x0, self.y0, self.param_new, elemental_lines=[self.e_name], default_area=default_area |
| 903 | ) |
| 904 | |
| 905 | ratio_v = maxv_new / np.max(data_out[self.e_name]) |
| 906 | |
| 907 | area = area_dict[self.e_name] * ratio_v |
| 908 | self.param_new[key]["value"] = area |
| 909 | |
| 910 | ps = PreFitStatus( |
| 911 | z=get_Z(self.e_name), |
| 912 | energy=f"{energy_new:.4f}", |
| 913 | area=area, |
| 914 | spectrum=data_out[self.e_name] * ratio_v, |
| 915 | maxv=maxv_new, |
| 916 | norm=-1, |
| 917 | status=True, # for plotting |
no test coverage detected