def lnprob_all(p): pars1 = ThetaParam(grid=p[0:2], vz=p[2], vsini=p[3], logOmega=p[4]) model.update_Theta(pars1) # hard code npoly=3 (for fixc0 = True with npoly=4) pars2 = PhiParam(0, 0, True, p[5:8], p[8], p[9], p[10]) model.update_Phi(pars2) draw = model.draw_save() return draw
def lnlike(p): try: pars1 = ThetaParam(grid=p[0:2], vz=p[2], vsini=p[3], logOmega=p[4]) model.update_Theta(pars1) # hard code npoly=3 (for fixc0 = True with chebyshev polynomials turned off) pars2 = PhiParam(0, 0, True, [0.0, 0.0, 0.0], p[5], p[6], p[7]) model.update_Phi(pars2) lnp = model.evaluate() return lnp except C.ModelError: model.logger.debug("ModelError in stellar parameters, sending back -np.inf {}".format(p)) return -np.inf
def lnprob(p): pars = ThetaParam(grid=p[0:3], vz=p[3], vsini=p[4], logOmega=p[5]) #Distribute the calculation to each process for ((spectrum_id, order_id), pconn) in pconns.items(): pconn.send(("LNPROB", pars)) #Collect the answer from each process lnps = np.empty((len(Starfish.data["orders"]), )) for i, pconn in enumerate(pconns.values()): lnps[i] = pconn.recv() result = np.sum(lnps) # + lnprior print("proposed:", p, result) return result
def fprob(p): # Assume p is [temp, logg, Z, vz, vsini, logOmega] pars = ThetaParam(grid=p[0:3], vz=p[3], vsini=p[4], logOmega=p[5]) #Distribute the calculation to each process for ((spectrum_id, order_id), pconn) in pconns.items(): #Parse the parameters into what needs to be sent to each Model here. pconn.send(("LNPROB", pars)) #Collect the answer from each process lnps = np.empty((len(Starfish.data["orders"]), )) for i, pconn in enumerate(pconns.values()): lnps[i] = pconn.recv() s = np.sum(lnps) print(pars, "lnp:", s) if s == -np.inf: return 1e99 else: return -s
print(pars, "lnp:", s) if s == -np.inf: return 1e99 else: return -s start = Starfish.config["Theta"] p0 = np.array(start["grid"] + [start["vz"], start["vsini"], start["logOmega"]]) from scipy.optimize import fmin p = fmin(fprob, p0, maxiter=10000, maxfun=10000) print(p) pars = ThetaParam(grid=p[0:3], vz=p[3], vsini=p[4], logOmega=p[5]) pars.save() # Kill all of the orders for pconn in pconns.values(): pconn.send(("FINISH", None)) pconn.send(("DIE", None)) # Join on everything and terminate for p in ps.values(): p.join() p.terminate() import sys sys.exit()
def setup_class(self): self.thetaparam = ThetaParam(grid=np.array([4000., 4.32, -0.2]), vz=10., vsini=4.0, logOmega=-0.2, Av=0.3)