def srtmb_asl_basis(tac, b, r1): tac[tac < 0] = 0.0 n_beta = b['beta'].size ssq = np.zeros(n_beta) if b['w'] is None: b['w'] = 1 y = tac - r1 * b['input'] for i in range(0, n_beta): theta = r1 theta = np.append( theta, np.dot(y, b['basis'][i, :]) / np.dot(b['basis'][i, :], b['basis'][i, :])) # w won't make a difference here a = np.column_stack((b['input'], b['basis'][i, :])) tacf = np.dot(a, theta) res = (tac - tacf) * b['w'] # w works here ssq[i] = np.sum(res**2) i = np.argmin(ssq) theta = r1 theta = np.append( theta, np.dot(y, b['basis'][i, :]) / np.dot(b['basis'][i, :], b['basis'][i, :])) a = np.column_stack((b['input'], b['basis'][i, :])) tacf = np.dot(a, theta) theta = np.append(theta, b['beta'][i]) r1, k2, bp = kp.srtm_theta2kp(theta) kps = {'r1': r1, 'k2': k2, 'bp': bp, 'tacf': tacf} return kps
def srtmb_basis(tac, b): tac[tac < 0] = 0.0 n_beta = b['beta'].size ssq = np.zeros(n_beta) if b['w'] is None: b['w'] = 1 for i in range(0, n_beta): theta = np.dot(b['m_w'][i * 2:i * 2 + 2, :], b['w'] * tac) a = np.column_stack((b['input'], b['basis'][i, :])) tacf = np.dot(a, theta) res = (tac - tacf) * b['w'] ssq[i] = np.sum(res**2) i = np.argmin(ssq) theta = np.dot(b['m_w'][i * 2:i * 2 + 2, :], b['w'] * tac) a = np.column_stack((b['input'], b['basis'][i, :])) tacf = np.dot(a, theta) theta = np.append(theta, b['beta'][i]) r1, k2, bp = kp.srtm_theta2kp(theta) kps = {'r1': r1, 'k2': k2, 'bp': bp, 'tacf': tacf} return kps
def srtm_fun_k2p(inputf1_dt_k2p, theta_0, theta_2): inputf1, dt, k2p = inputf1_dt_k2p inputf1_dt = (inputf1, dt) theta_1 = theta_0 * (k2p - theta_2) theta = np.array([theta_0, theta_1, theta_2]) r1, k2, bp = kp.srtm_theta2kp(theta) tac = srtm_fun(inputf1_dt, r1, k2, bp) return tac
def srtm_k2p(tac, dt, inputf1, w, k2p): inputf1_dt_k2p = inputf1, dt, k2p inputf1_dt_k2p_w = inputf1, dt, k2p, w if w is None: w = 1 p, _ = curve_fit(srtm_fun_k2p_w, inputf1_dt_k2p_w, tac*w, p0=(1, 0.5), bounds=(0, [3, 10])) theta_0 = p[0] theta_2 = p[1] theta_1 = theta_0 * (k2p - theta_2) theta = np.array([theta_0, theta_1, theta_2]) r1, k2, bp = kp.srtm_theta2kp(theta) tacf = srtm_fun_k2p(inputf1_dt_k2p, theta_0, theta_2) kps = {'r1': r1, 'k2': k2, 'bp': bp, 'tacf': tacf} return kps
def srtmb_k2p_basis(tac, b): n_beta = b['beta'].size ssq = np.zeros(n_beta) if b['w'] is None: b['w'] = 1 for i in range(0, n_beta): r1 = np.sum(b['w'] * b['basis_k2p'][i] * tac) / np.sum(b['w'] * b['basis_k2p'][i] ** 2) ssq[i] = np.sum(b['w'] * (tac - r1 * b['basis_k2p'][i]) ** 2) i = np.argmin(ssq) r1 = np.sum(b['w'] * b['basis_k2p'][i] * tac) / np.sum(b['w'] * b['basis_k2p'][i] ** 2) tacf = r1 * b['basis_k2p'][i] theta = r1 theta = np.append(theta, r1 * (b['k2p'] - b['beta'][i])) theta = np.append(theta, b['beta'][i]) r1, k2, bp = kp.srtm_theta2kp(theta) kps = {'r1': r1, 'k2': k2, 'bp': bp, 'tacf': tacf} return kps