| @@ 261-285 (lines=25) @@ | ||
| 258 | ||
| 259 | return r |
|
| 260 | ||
| 261 | def dfunc(self, p, fun, y, x, pos): |
|
| 262 | if fun.__name__ == 'gaussian' or fun.__name__ == 'lorentzian': # took the lorentzian out. Weird |
|
| 263 | rest = p |
|
| 264 | npts = len(p) // 2 |
|
| 265 | a = rest[:npts] |
|
| 266 | sig = rest[npts:2*npts] |
|
| 267 | mu = pos |
|
| 268 | if fun.__name__ == 'gaussian': |
|
| 269 | da = self.spectrum_sum_dfun(fun, 1./a, x, mu, *p) |
|
| 270 | dsig_mult = np.zeros((npts, len(x))) |
|
| 271 | for i in range(npts): |
|
| 272 | dsig_mult[i] = ((x-mu[i])**2) / sig[i]**3 |
|
| 273 | dsig = self.spectrum_sum_dfun(fun, dsig_mult, x, mu, *p) |
|
| 274 | op = np.concatenate([-da, -dsig]) |
|
| 275 | elif fun.__name__ == 'lorentzian': |
|
| 276 | da = self.spectrum_sum_dfun(fun, 1./a, x, mu, *p) |
|
| 277 | dsig = np.zeros((npts, len(x))) |
|
| 278 | for i in range(npts): |
|
| 279 | nom = 8 * a[i] * sig[i] * (x - mu[i]) ** 2 |
|
| 280 | denom = (sig[i]**2 + 4.0 * (x - mu[i])**2)**2 |
|
| 281 | dsig[i] = nom / denom |
|
| 282 | op = np.concatenate([-da, -dsig]) |
|
| 283 | else: |
|
| 284 | op = None |
|
| 285 | return op |
|
| 286 | ||
| 287 | def _spectrum_sum(self, fun, x, positions, *p): |
|
| 288 | rest = np.abs(p) |
|
| @@ 108-132 (lines=25) @@ | ||
| 105 | ||
| 106 | return r |
|
| 107 | ||
| 108 | def dfunc(self, p, fun, y, x, pos): |
|
| 109 | if fun.__name__ == 'gaussian' or fun.__name__ == 'lorentzian': # took the lorentzian out. Weird |
|
| 110 | rest = p |
|
| 111 | npts = len(p) // 2 |
|
| 112 | a = rest[:npts] |
|
| 113 | sig = rest[npts:2*npts] |
|
| 114 | mu = pos |
|
| 115 | if fun.__name__ == 'gaussian': |
|
| 116 | da = self.spectrum_sum_dfun(fun, 1. / a, x, mu, *p) |
|
| 117 | dsig_mult = np.zeros((npts, len(x))) |
|
| 118 | for i in range(npts): |
|
| 119 | dsig_mult[i] = ((x-mu[i])**2) / sig[i]**3 |
|
| 120 | dsig = self.spectrum_sum_dfun(fun, dsig_mult, x, mu, *p) |
|
| 121 | op = np.concatenate([-da, -dsig]) |
|
| 122 | elif fun.__name__ == 'lorentzian': |
|
| 123 | da = self.spectrum_sum_dfun(fun, 1. / a, x, mu, *p) |
|
| 124 | dsig = np.zeros((npts, len(x))) |
|
| 125 | for i in range(npts): |
|
| 126 | nom = 8 * a[i]* sig[i] * (x - mu[i]) ** 2 |
|
| 127 | denom = (sig[i]**2 + 4.0 * (x - mu[i])**2)**2 |
|
| 128 | dsig[i] = nom / denom |
|
| 129 | op = np.concatenate([-da, -dsig]) |
|
| 130 | else: |
|
| 131 | op = None |
|
| 132 | return op |
|
| 133 | ||
| 134 | def _spectrum_sum(self, fun, x, positions, *p): |
|
| 135 | rest = np.abs(p) |
|