|
7 | 7 | from ramanchada2.fitting_functions.voigtareaparametrizationnu import ( |
8 | 8 | VoigtAreaParametrizationNu, |
9 | 9 | ) |
10 | | -import numpy as np |
11 | 10 |
|
12 | 11 |
|
13 | 12 | class PearsonIVParametrizationHPWModel(Model): |
@@ -113,14 +112,55 @@ def __init__(self, independent_vars=["x"], prefix="", nan_policy="raise", **kwar |
113 | 112 | self._set_paramhints_prefix() |
114 | 113 |
|
115 | 114 | def _set_paramhints_prefix(self): |
116 | | - self.set_param_hint("sigma", min=np.tiny) |
117 | | - self.set_param_hint("nu", min=0, max=1) |
118 | | - |
119 | | - fexpr = "2.0*{pre:s}sigma" |
120 | | - self.set_param_hint("fwhm", expr=fexpr.format(pre=self.prefix)) |
| 115 | + self.set_param_hint("sigma", min=1E-100) |
| 116 | + self.set_param_hint("nu", min=0.0, max=1.0) |
121 | 117 |
|
122 | 118 | def guess(self, data, x, negative=False, **kwargs): |
123 | 119 | """Estimate initial model parameter values from data.""" |
124 | 120 | pars = guess_from_peak(self, data, x, negative) |
125 | 121 | pars[f"{self.prefix}nu"].set(value=1.0) |
126 | 122 | return update_param_vals(pars, self.prefix, **kwargs) |
| 123 | + |
| 124 | + def fit( |
| 125 | + self, |
| 126 | + data, |
| 127 | + params=None, |
| 128 | + weights=None, |
| 129 | + method="leastsq", |
| 130 | + iter_cb=None, |
| 131 | + scale_covar=True, |
| 132 | + verbose=False, |
| 133 | + fit_kws=None, |
| 134 | + nan_policy=None, |
| 135 | + calc_covar=True, |
| 136 | + max_nfev=None, |
| 137 | + **kwargs, |
| 138 | + ): |
| 139 | + """overwrite fit in order to amend area and fwhm to the parameters""" |
| 140 | + result = super().fit( |
| 141 | + data, |
| 142 | + params=params, |
| 143 | + weights=weights, |
| 144 | + method=method, |
| 145 | + iter_cb=iter_cb, |
| 146 | + scale_covar=scale_covar, |
| 147 | + verbose=verbose, |
| 148 | + fit_kws=fit_kws, |
| 149 | + nan_policy=nan_policy, |
| 150 | + calc_covar=calc_covar, |
| 151 | + max_nfev=max_nfev, |
| 152 | + **kwargs, |
| 153 | + ) |
| 154 | + pahf = VoigtAreaParametrizationNu.GetPositionAreaHeightFWHMFromPeakParameters( |
| 155 | + result.params[f"{self.prefix}amplitude"], |
| 156 | + result.params[f"{self.prefix}center"], |
| 157 | + result.params[f"{self.prefix}sigma"], |
| 158 | + result.params[f"{self.prefix}nu"], |
| 159 | + result.covar |
| 160 | + ) |
| 161 | + p1 = Parameter(f"{self.prefix}height", value=pahf.Height) |
| 162 | + p1.stderr = pahf.HeightStdDev |
| 163 | + p2 = Parameter(f"{self.prefix}fwhm", value=pahf.FWHM) |
| 164 | + p2.stderr = pahf.FWHMStdDev |
| 165 | + result.params.add_many(p1, p2) |
| 166 | + return result |
0 commit comments