class TestThetaParam: 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) def test_save(self): self.thetaparam.save(fname="theta_test.json") def test_load(self): load = ThetaParam.load("theta_test.json") print(load.grid) print(load.vz) print(load.vsini) print(load.logOmega) print(load.Av)
def test_load(self): load = ThetaParam.load("theta_test.json") print(load.grid) print(load.vz) print(load.vsini) print(load.logOmega) print(load.Av)
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
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)
import numpy as np import Starfish from Starfish import parallel from Starfish.parallel import args from Starfish.model import ThetaParam, PhiParam print("THIS IS WORKING") if args.generate: model = parallel.OptimizeTheta(debug=True) # Now that the different processes have been forked, initialize them pconns, cconns, ps = parallel.initialize(model) pars = ThetaParam.from_dict(Starfish.config["Theta"]) 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)) pconn.recv() # Receive and discard the answer so we can send the save pconn.send(("SAVE", None)) # 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()
# All of the argument parsing is done in the `parallel.py` module. import numpy as np import Starfish from Starfish import parallel_linear from Starfish.parallel_linear import args from Starfish.model import ThetaParam, PhiParam if args.generate: model = parallel_linear.OptimizeTheta(debug=True) # Now that the different processes have been forked, initialize them pconns, cconns, ps = parallel_linear.initialize(model) pars = ThetaParam.from_dict(Starfish.config["Theta"]) 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)) pconn.recv() # Receive and discard the answer so we can send the save pconn.send(("SAVE", None)) # 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()