def regressSpec(w, wL, X): #,sigma2=1,intercept=True): # compute s s = -1j*w # TODO, if regression fails, it might be because there is no exponential # term, maybe do a second regression then on a linear model. a = 0 # Linear rT2 = 0.1 # T2 regressed r = robjects.r # Variable shared between R and Python robjects.globalenv['a'] = a robjects.globalenv['rT2'] = rT2 robjects.globalenv['wL'] = wL robjects.globalenv['nb'] = 0 s = robjects.ComplexVector(numpy.array(s)) XX = robjects.ComplexVector(X) Xr = robjects.FloatVector(numpy.real(X)) Xi = robjects.FloatVector(numpy.imag(X)) Xa = robjects.FloatVector(numpy.abs(X)) Xri = robjects.FloatVector(numpy.concatenate((Xr,Xi))) #my_lower = robjects.r('list(a=.001, rT2=.001, nb=.0001)') my_lower = robjects.r('list(a=.001, rT2=.001)') #my_upper = robjects.r('list(a=1.5, rT2=.300, nb =100.)') my_upper = robjects.r('list(a=1.5, rT2=.300)') #my_list = robjects.r('list(a=.2, rT2=0.03, nb=.1)') my_list = robjects.r('list(a=.2, rT2=0.03)') my_cont = robjects.r('nls.control(maxiter=5000, warnOnly=TRUE, printEval=FALSE)') #fmla = robjects.Formula('Xri ~ c(a*Re((wL) / (wL^2+(s+1/rT2)^2 )), a*Im((wL)/(wL^2 + (s+1/rT2)^2 )))') # envelope ##fmla = robjects.Formula('Xri ~ c(a*Re((wL) / (wL^2+(s+1/rT2)^2 )), a*Im((wL)/(wL^2 + (s+1/rT2)^2 )))') # envelope #fmla = robjects.Formula('XX ~ a*(wL) / (wL^2 + (s+1/rT2)^2 )') # complex #fmla = robjects.Formula('Xa ~ abs(a*(wL) / (wL^2 + (s+1/rT2)^2 )) + nb') # complex fmla = robjects.Formula('Xa ~ abs(a*(wL) / (wL^2 + (s+1/rT2)^2 ))') # complex env = fmla.getenvironment() env['s'] = s env['Xr'] = Xr env['Xa'] = Xa env['Xi'] = Xi env['Xri'] = Xri env['XX'] = XX #fit = robjects.r.tryCatch(robjects.r.nls(fmla,start=my_list, control=my_cont)) #, lower=my_lower, algorithm='port')) #, \ fit = robjects.r.tryCatch(robjects.r.nls(fmla, start=my_list, control=my_cont, lower=my_lower, upper=my_upper, algorithm='port')) #, \ report = r.summary(fit) #print report #print r.warnings() a = r['$'](report,'par')[0] rT2 = r['$'](report,'par')[1] nb = r['$'](report,'par')[2] return a, rT2, nb
def test_nacomplex_workaround(): vec = robjects.ComplexVector((1 + 1j, 2 + 2j, 3 + 3j)) vec[0] = complex(robjects.NA_Complex.real, robjects.NA_Complex.imag) assert robjects.baseenv['is.na'](vec)[0] is True
def test_nacomplex(): vec = robjects.ComplexVector((1 + 1j, 2 + 2j, 3 + 3j)) vec[0] = robjects.NA_Complex assert robjects.baseenv['is.na'](vec)[0] is True
def testNAComplex(self): vec = robjects.ComplexVector((1 + 1j, 2 + 2j, 3 + 3j)) vec[0] = robjects.NA_Complex self.assertTrue(robjects.baseenv['is.na'](vec)[0])
def regressSpecComplex(w, wL, X): #,sigma2=1,intercept=True): # compute s s = -1j*w # TODO, if regression fails, it might be because there is no exponential # term, maybe do a second regression then on a linear model. a = 1 # Linear rT2 = 0.1 # T2 regressed r = robjects.r phi2 = 0 # phase wL2 = wL # Variable shared between R and Python robjects.globalenv['a'] = a robjects.globalenv['rT2'] = rT2 robjects.globalenv['wL'] = wL robjects.globalenv['wL2'] = 0 robjects.globalenv['nb'] = 0 robjects.globalenv['phi2'] = phi2 s = robjects.ComplexVector(numpy.array(s)) XX = robjects.ComplexVector(X) Xr = robjects.FloatVector(numpy.real(X)) Xi = robjects.FloatVector(numpy.imag(X)) Xa = robjects.FloatVector(numpy.abs(X)) Xri = robjects.FloatVector(numpy.concatenate((X.real,X.imag))) robjects.r(''' source('kernel.r') ''') #Kw = robjects.globalenv['Kwri'] #print (numpy.shape(X)) #my_lower = robjects.r('list(a=.001, rT2=.001, nb=.0001)') #my_lower = robjects.r('list(a=.001, rT2=.001)') # Working my_lower = robjects.r('list(a=.001, rT2=.001, phi2=-3.14, wL2=wL-5)') #my_upper = robjects.r('list(a=1.5, rT2=.300, nb =100.)') my_upper = robjects.r('list(a=3.5, rT2=.300, phi2=3.14, wL2=wL+5)') #my_list = robjects.r('list(a=.2, rT2=0.03, nb=.1)') my_list = robjects.r('list(a=.2, rT2=0.03, phi2=0, wL2=wL)') my_cont = robjects.r('nls.control(maxiter=5000, warnOnly=TRUE, printEval=FALSE)') #fmla = robjects.Formula('Xri ~ c(a*Re((wL) / (wL^2+(s+1/rT2)^2 )), a*Im((wL)/(wL^2 + (s+1/rT2)^2 )))') # envelope #fmla = robjects.Formula('Xi ~ Im(a*(sin(phi2)*s + ((1/rT2)*sin(phi2)) + wL*cos(phi2)) / (wL^2+(s+1/rT2)^2 ))') # envelope #fmla = robjects.Formula('Xri ~ c(Re(a*(sin(phi2)*s + ((1/rT2)*sin(phi2)) + wL*cos(phi2)) / (wL^2+(s+1/rT2)^2 )), Im(a*(sin(phi2)*s + ((1/rT2)*sin(phi2)) + wL*cos(phi2)) / (wL^2+(s+1/rT2)^2 )))') # envelope #fmlar = robjects.Formula('Xr ~ (Kwr(a, phi2, s, rT2, wL)) ') # envelope #fmlai = robjects.Formula('Xi ~ (Kwi(a, phi2, s, rT2, wL)) ') # envelope fmla = robjects.Formula('Xri ~ c(Kwr(a, phi2, s, rT2, wL2), Kwi(a, phi2, s, rT2, wL2) ) ') # envelope #fmla = robjects.Formula('Xri ~ (Kwri(a, phi2, s, rT2, wL)) ') # envelope #fmla = robjects.Formula('Xa ~ (abs(a*(sin(phi2)*s + ((1/rT2)*sin(phi2)) + wL*cos(phi2)) / (wL^2+(s+1/rT2)^2 )))') # envelope #fmla = robjects.Formula('XX ~ a*(wL) / (wL^2 + (s+1/rT2)^2 )') # complex #fmla = robjects.Formula('Xa ~ abs(a*(wL) / (wL^2 + (s+1/rT2)^2 )) + nb') # complex #fmla = robjects.Formula('Xri ~ c(a*Re((wL) / (wL^2+(s+1/rT2)^2 )), a*Im((wL)/(wL^2 + (s+1/rT2)^2 )))') # envelope # self.Gw[iw, iT2] = ((np.sin(phi2) * (alpha + 1j*self.w[iw]) + self.wL*np.cos(phi2)) / \ # (self.wL**2 + (alpha+1.j*self.w[iw])**2 )) # self.Gw[iw, iT2] = ds * self.sc*((np.sin(phi2)*( alpha + 1j*self.w[iw]) + self.wL*np.cos(phi2)) / \ # (self.wL**2 + (alpha+1.j*self.w[iw])**2 )) # Works Amplitude Only! #fmla = robjects.Formula('Xa ~ abs(a*(wL) / (wL^2 + (s+1/rT2)^2 ))') # complex env = fmla.getenvironment() env['s'] = s env['Xr'] = Xr env['Xa'] = Xa env['Xi'] = Xi env['Xri'] = Xri env['XX'] = XX fit = robjects.r.tryCatch(robjects.r.nls(fmla,start=my_list, control=my_cont)) #, lower=my_lower, algorithm='port')) #, \ #fitr = robjects.r.tryCatch(robjects.r.nls(fmlar, start=my_list, control=my_cont, lower=my_lower, upper=my_upper, algorithm='port')) #, \ #env = fmlai.getenvironment() #fiti = robjects.r.tryCatch(robjects.r.nls(fmlai, start=my_list, control=my_cont, lower=my_lower, upper=my_upper, algorithm='port')) #, \ #reportr = r.summary(fitr) #reporti = r.summary(fiti) report = r.summary(fit) #print( report ) #exit() #print( reportr ) #print( reporti ) #exit() #print r.warnings() #a = (r['$'](reportr,'par')[0] + r['$'](reporti,'par')[0]) / 2. #rT2 = (r['$'](reportr,'par')[1] + r['$'](reporti,'par')[1]) / 2. #nb = (r['$'](reportr,'par')[2] + r['$'](reporti,'par')[2]) / 2. a = r['$'](report,'par')[0] rT2 = r['$'](report,'par')[1] nb = r['$'](report,'par')[2] #phi2 print ("Python wL2", r['$'](report,'par')[3] ) print ("Python zeta", r['$'](report,'par')[2] ) return a, rT2, nb