def Fqz_imag(z): z_scr = select([z<z_min,z>z_max,z>=z_min] , [z_min,z_max,z]) mask = select( [z<z_min-20*(z_max-z_min), z>z_max+20*(z_max-z_min), z<z_min, z>z_max, z>=z_min], [np.exp(-40), np.exp(-40), np.exp(-2*(z_min-z)/(z_max-z_min)), np.exp(-2*(z-z_max)/(z_max-z_min)), 1]) return Fqz_imag_raw(z_scr) * mask
def RBFmorph(NCB, knownC, knownD): # Determine displacement of Base nodes NCB by displacing nodes at coordinates # knownC by known landmark displacement #rbfx = Rbf(knownC[:,0],knownC[:,1],knownC[:,2],knownD[:,0],function='gaussian') #rbfy = Rbf(knownC[:,0],knownC[:,1],knownC[:,2],knownD[:,1],function='gaussian') #rbfz = Rbf(knownC[:,0],knownC[:,1],knownC[:,2],knownD[:,2],function='gaussian') #DSx = rbfx(NCB[:,0],NCB[:,1],NCB[:,2]) #DSy = rbfy(NCB[:,0],NCB[:,1],NCB[:,2]) #DSz = rbfz(NCB[:,0],NCB[:,1],NCB[:,2]) #print np.c_[DSx,DSy,DSz] #print NCB #NCI = np.c_[DSx,DSy,DSz]+NCB nrB = np.array([knownC.shape])[0, 0] shapeN = np.array([NCB.shape]) nrN = shapeN[0, 0] MATR = np.zeros((nrB, nrB)) knownD = np.r_[knownD, np.zeros((4, 3))] Pb = np.c_[np.ones((nrB, 1)), knownC] for i in range(0, nrB): TEMP = np.array([ np.sqrt( np.sum( np.power((np.ones((nrB, 1)) * knownC[i, :] - knownC), 2), 1)) ]) ##### Thin plate spline: TEMP = TEMP * TEMP * np.log10(TEMP) ##### Gauss weight: #TEMP = np.exp(-TEMP*TEMP) ##### CPC2 #TEMP = np.power((1-TEMP),4)*(4*TEMP+1) MATR[i, :] = TEMP.reshape((1, nrB)) MATR[i, i] = 0 MATR = np.c_[np.r_[MATR, Pb.T], np.r_[Pb, np.zeros((4, 4))]] #MATR = np.matrix(MATR) #MATR = np.linalg.pinv(MATR) #knownD = np.matrix(knownD) Coeff = np.array(np.linalg.solve(MATR, knownD)) ResDisp = np.zeros((nrN, 3)) for i in range(0, nrN): TEMP = np.sqrt( np.sum(np.power((np.ones((nrB, 1)) * NCB[i, :] - knownC), 2), 1)) ##### Thin Plate Spline: TEMPlog10 = np.log10(TEMP) TEMPlog10 = sp.select([TEMPlog10 < -1000, TEMPlog10 >= 0], [-1000, TEMPlog10]) TEMP = TEMP * TEMP * TEMPlog10 ##### Gauss weight: #TEMP = np.exp(-TEMP*TEMP) ##### CPC2 #TEMP = np.power((1-TEMP),4)*(4*TEMP+1) ResDisp[i, :] = np.sum( Coeff * np.r_[TEMP.reshape((nrB, 1)) * np.ones((1, 3)), np.array([[1, 1, 1]]), np.transpose(np.ones((3, 1)) * NCB[i, :])], 0) NCI = NCB + ResDisp return NCI
def truean(JD, P, T0=0, Ecc=0): """Calculate true anomaly for array of dates.""" Phase = phase(JD, P, T0) # phases M = 2 * scipy.pi * Phase # mean anomaly if Ecc <= machep: return M eccanV = scipy.vectorize(eccan) E = eccanV(Ecc, M) % (2 * scipy.pi) # eccentric anomaly cosE = scipy.cos(E) cosNu = (cosE - Ecc) / (1 - Ecc * cosE) Nu = scipy.arccos(cosNu) # true anomaly Nu = scipy.select([E <= scipy.pi, scipy.ones(len(Nu))], \ [Nu, 2 * scipy.pi - Nu]) # E>pi cases return Nu
def RBFmorph(NCB, knownC, knownD): # Determine displacement of Base nodes NCB by displacing nodes at coordinates # knownC by known landmark displacement ####rbfx = Rbf(knownC[:,0],knownC[:,1],knownC[:,2],knownD[:,0]) ####rbfy = Rbf(knownC[:,0],knownC[:,1],knownC[:,2],knownD[:,1]) ####rbfz = Rbf(knownC[:,0],knownC[:,1],knownC[:,2],knownD[:,2]) ####DSx = rbfx(NCB[:,0],NCB[:,1],NCB[:,2]) ####DSy = rbfy(NCB[:,0],NCB[:,1],NCB[:,2]) ####DSz = rbfz(NCB[:,0],NCB[:,1],NCB[:,2]) ####NCI = NCB + np.c_[DSx,DSy,DSz] nrB = np.array([knownC.shape])[0, 0] shapeN = np.array([NCB.shape]) nrN = shapeN[0, 0] MATR = np.zeros((nrB, nrB)) knownD = np.r_[knownD, np.zeros((4, 3))] Pb = np.c_[np.ones((nrB, 1)), knownC] for i in range(0, nrB): # Thin plate spline: TEMP = np.array([ np.sqrt( np.sum( np.power((np.ones((nrB, 1)) * knownC[i, :] - knownC), 2), 1)) ]) TEMP = TEMP * TEMP * np.log10(TEMP) MATR[i, :] = TEMP.reshape((1, nrB)) MATR[i, i] = 0 MATR = np.c_[np.r_[MATR, Pb.T], np.r_[Pb, np.zeros((4, 4))]] Coeff = np.array(np.linalg.solve(MATR, knownD)) ResDisp = np.zeros((nrN, 3)) for i in range(0, nrN): TEMP = np.sqrt( np.sum(np.power((np.ones((nrB, 1)) * NCB[i, :] - knownC), 2), 1)) TEMPlog10 = np.log10(TEMP) TEMPlog10 = sp.select([TEMPlog10 < -1000, TEMPlog10 >= 0], [-1000, TEMPlog10]) TEMP = TEMP * TEMP * TEMPlog10 ResDisp[i, :] = np.sum( Coeff * np.r_[TEMP.reshape((nrB, 1)) * np.ones((1, 3)), np.array([[1, 1, 1]]), np.transpose(np.ones((3, 1)) * NCB[i, :])], 0) NCI = NCB + ResDisp return NCI