Code Duplication    Length = 25-25 lines in 2 locations

savu/plugins/unregistered/fluo_fitters/base_fluo_fitter.py 1 location

@@ 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)

savu/plugins/fitters/base_fitter.py 1 location

@@ 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)