| @@ 247-271 (lines=25) @@ | ||
| 244 | ||
| 245 | return r |
|
| 246 | ||
| 247 | def dfunc(self, p, fun, y, x, pos): |
|
| 248 | if fun.__name__ == 'gaussian' or fun.__name__ == 'lorentzian': # took the lorentzian out. Weird |
|
| 249 | rest = p |
|
| 250 | npts = len(p) // 2 |
|
| 251 | a = rest[:npts] |
|
| 252 | sig = rest[npts:2*npts] |
|
| 253 | mu = pos |
|
| 254 | if fun.__name__ == 'gaussian': |
|
| 255 | da = self.spectrum_sum_dfun(fun, 1./a, x, mu, *p) |
|
| 256 | dsig_mult = np.zeros((npts, len(x))) |
|
| 257 | for i in range(npts): |
|
| 258 | dsig_mult[i] = ((x-mu[i])**2) / sig[i]**3 |
|
| 259 | dsig = self.spectrum_sum_dfun(fun, dsig_mult, x, mu, *p) |
|
| 260 | op = np.concatenate([-da, -dsig]) |
|
| 261 | elif fun.__name__ == 'lorentzian': |
|
| 262 | da = self.spectrum_sum_dfun(fun, 1./a, x, mu, *p) |
|
| 263 | dsig = np.zeros((npts, len(x))) |
|
| 264 | for i in range(npts): |
|
| 265 | nom = 8 * a[i] * sig[i] * (x - mu[i]) ** 2 |
|
| 266 | denom = (sig[i]**2 + 4.0 * (x - mu[i])**2)**2 |
|
| 267 | dsig[i] = nom / denom |
|
| 268 | op = np.concatenate([-da, -dsig]) |
|
| 269 | else: |
|
| 270 | op = None |
|
| 271 | return op |
|
| 272 | ||
| 273 | def _spectrum_sum(self, fun, x, positions, *p): |
|
| 274 | rest = np.abs(p) |
|
| @@ 99-123 (lines=25) @@ | ||
| 96 | ||
| 97 | return r |
|
| 98 | ||
| 99 | def dfunc(self, p, fun, y, x, pos): |
|
| 100 | if fun.__name__ == 'gaussian' or fun.__name__ == 'lorentzian': # took the lorentzian out. Weird |
|
| 101 | rest = p |
|
| 102 | npts = len(p) // 2 |
|
| 103 | a = rest[:npts] |
|
| 104 | sig = rest[npts:2*npts] |
|
| 105 | mu = pos |
|
| 106 | if fun.__name__ == 'gaussian': |
|
| 107 | da = self.spectrum_sum_dfun(fun, 1. / a, x, mu, *p) |
|
| 108 | dsig_mult = np.zeros((npts, len(x))) |
|
| 109 | for i in range(npts): |
|
| 110 | dsig_mult[i] = ((x-mu[i])**2) / sig[i]**3 |
|
| 111 | dsig = self.spectrum_sum_dfun(fun, dsig_mult, x, mu, *p) |
|
| 112 | op = np.concatenate([-da, -dsig]) |
|
| 113 | elif fun.__name__ == 'lorentzian': |
|
| 114 | da = self.spectrum_sum_dfun(fun, 1. / a, x, mu, *p) |
|
| 115 | dsig = np.zeros((npts, len(x))) |
|
| 116 | for i in range(npts): |
|
| 117 | nom = 8 * a[i]* sig[i] * (x - mu[i]) ** 2 |
|
| 118 | denom = (sig[i]**2 + 4.0 * (x - mu[i])**2)**2 |
|
| 119 | dsig[i] = nom / denom |
|
| 120 | op = np.concatenate([-da, -dsig]) |
|
| 121 | else: |
|
| 122 | op = None |
|
| 123 | return op |
|
| 124 | ||
| 125 | def _spectrum_sum(self, fun, x, positions, *p): |
|
| 126 | rest = np.abs(p) |
|