forked from ska-sa/hibayes
/
hi_multinest.py
executable file
·111 lines (77 loc) · 2.44 KB
/
hi_multinest.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/env python
"""
# hi_multinest.py
Bayesian Monte Carlo model fitting routine for global 21-cm cosmic
dawn data.
Jonathan Zwart
Danny Price
Gianni Bernardi
April 2016
Usage:
./hi_multinest.py config_file.ini
"""
import os
import sys
import shutil
import time
import numpy
import pymultinest
from mpi4py import MPI
from hibayes.profile_support import profile
from hibayes.parse_config import parse_config
from hibayes.likelihoods import logprior,loglike
import pprint
# Turn off divide by zero errors
numpy.seterr(divide='ignore', invalid='ignore')
if __name__ == "__main__":
if len(sys.argv) < 2:
print(""" usage:
with MPI:
mpiexec -n NPROCS ./hi_multinest.py config_filename.ini""")
sys.exit(0)
param_file = sys.argv[-1]
# load runtime parameters
rp = parse_config(param_file)
#-------------------------------------------------------------------------------
@profile
def main():
"""
"""
# Set up MPI variables
world=MPI.COMM_WORLD
rank=world.rank
size=world.size
master = rank==0
if master:
print("Runtime parameters")
pprint.pprint(rp)
time.sleep(2)
if not os.path.exists(rp["outdir"]):
try:
os.mkdir(rp["outdir"])
except:
pass
n_params = rp["nc_fit"] + 3
#progress = pymultinest.ProgressPlotter(n_params=n_params, interval_ms=10000,
# outputfiles_basename=rp["outputfiles_basename"])
#progress.start()
pymultinest.run(loglike, logprior, n_params, resume=False, verbose=True,
multimodal=rp["multimodal"], max_modes=rp["max_modes"], write_output=True,
n_live_points=rp["n_live_points"],
evidence_tolerance=rp["evidence_tolerance"],
mode_tolerance=rp["mode_tolerance"],
seed=rp["seed"],
max_iter=rp["max_iter"],
importance_nested_sampling=rp["do_ins"],
outputfiles_basename=rp["outputfiles_basename"],\
init_MPI=False)
if master:
# Copy the config.ini file to the output dir
shutil.copy(param_file,rp["outdir"])
#progress.stop()
return 0
#-------------------------------------------------------------------------------
if __name__ == '__main__':
# Run Multinest
ret = main()
sys.exit(ret)