MCPcopy Create free account
hub / github.com/NSLS2/PyXRF / modify_userpeak_params

Method modify_userpeak_params

pyxrf/model/parameters.py:860–926  ·  view source on GitHub ↗
(self, maxv_new, fwhm_new, energy_new)

Source from the content-addressed store, hash-verified

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

Callers 1

update_userpeakMethod · 0.80

Calls 6

_generate_param_keysMethod · 0.95
calculate_profileFunction · 0.85
PreFitStatusClass · 0.85
get_ZFunction · 0.85

Tested by

no test coverage detected