def grid_unidec(mzgrid, igrid, numit=1000, fwhm=5, mode=0, msig=0, zsig=1): pmat = make_pmat(mzgrid, fwhm) b = deepcopy(igrid) b2 = b diff = 1 i = 0 while diff > 1e-9 and i < numit: # Blur b = blur(b, msig, zsig) # Deconvolve if mode == 0: b = ud.safedivide(b * igrid, conv(b, pmat)) elif mode == 1: b = ud.safedivide(b * igrid * igrid, conv(b * igrid, pmat)) elif mode == 2: b *= conv(ud.safedivide(igrid, conv(b, pmat)), pmat) else: print("Mode is invalid:", mode) exit() # Convergence Test b /= np.amax(b) diff = np.sum((b2 - b)**2.) i += 1 b2 = b print("Interations:", i) return b pass
def dd_core(self, data, kernel): ckernel = kernel[::-1] I = deepcopy(data) i = 0 diff = 1 while i < 50 and diff > 0.0001: newI = I * cconv2(ud.safedivide(data, cconv2(kernel, I)), ckernel) diff = np.sum((I - newI) ** 2) / np.sum(I) I = newI i += 1 I /= np.amax(I) return I
def get_resolution(testdata): """ Get the median resolution of 1D MS data. :param testdata: N x 2 data (mz, intensity) :return: Median resolution (float) """ diffs = np.transpose([testdata[1:, 0], np.diff(testdata[:, 0])]) resolutions = ud.safedivide(diffs[:, 0], diffs[:, 1]) # popt, pcov = scipy.optimize.curve_fit(fit_line, diffs[:, 0], resolutions, maxfev=1000000) # fitLine = fit_line(diffs[:, 0], *popt) # fitMax = np.max(fitLine) # fitMin = np.min(fitLine) # diffs_new = diffs[(1.2 * fitMin < resolutions) & (resolutions < 1.2 * fitMax)] # resolutions_new = resolutions[(1.2 * fitMin < resolutions) & (resolutions < 1.2 * fitMax)] # popt2, pcov2 = scipy.optimize.curve_fit(fit_line, diffs_new[:, 0], resolutions_new, maxfev=1000000) # plt.figure() # plt.plot(diffs[:,0], resolutions) # plt.plot(diffs[:, 0], fit_line(diffs[:, 0], *popt2), 'r-') # plt.show() # Currently use A * m ^1.5 (0.5?) # Maybe use a*M^b # return popt2 return np.median(resolutions)