Code Duplication    Length = 25-25 lines in 2 locations

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

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

savu/plugins/fitters/base_fitter.py 1 location

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