4 from numpy
import vstack,log
5 from optparse
import OptionParser
7 from lalinference
import bayespputils
as bppu
11 usage=
'''%prog [-N NPOS]-o output.dat -p pos1.dat -w weight1 [-p pos2.dat -w weight2 ...]
12 %prog takes a list of posterior files and weights and draws samples from the combined,
13 reweighted distribution
17 peparser=bppu.PEOutputParser(
'common')
18 commonObj=peparser.parse(open(filename,
'r'),info=[header,
None])
19 pos=bppu.Posterior(commonObj)
22 if __name__==
'__main__':
23 parser=OptionParser(usage)
24 parser.add_option(
'-o',
'--output',action=
'store',type=
'string',default=
None,help=
'output file',metavar=
'output.dat')
25 parser.add_option(
'-p',
'--posterior',action=
'append',type=
'string',default=[],metavar=
'pos.dat',help=
'posterior input file')
26 parser.add_option(
'-w',
'--weight',action=
'append',type=
'float',default=[],metavar=
'NUM',help=
'weight of an input file')
27 parser.add_option(
'-N',
'--npos',action=
'store',default=
None,metavar=
'NPOS',help=
'Optional number of posterior samples to draw')
28 parser.add_option(
'--verbose',action=
'store_true',default=
False,help=
'Prints additional information')
29 (opts,args) = parser.parse_args()
31 if len(opts.posterior)==0:
32 sys.stderr.write(
'No input files given\n')
34 if len(opts.weight) != len(opts.posterior):
35 sys.stderr.write(
'Error: must specify same number of weights and posteriors\n')
39 datas=map(load_data,opts.posterior)
41 for d,w
in zip(datas,opts.weight):
42 theseweights = (log(w) + logl + logp
for logl,logp
in zip(d[
'logl'].samples,d[
'logprior'].samples))
43 weights.extend(theseweights)
44 bigdata=vstack([d.samples()[0]
for d
in datas])
47 if opts.npos
is not None:
52 outObj=bppu.Posterior((datas[0].names,merged))
55 if opts.output
is not None:
56 outObj.write_to_file(opts.output)
def draw_N_posterior(data, log_wts, N, verbose=False)
Draw N samples from the input data, weighted by log_wt.
def draw_posterior(data, log_wts, verbose=False)
Draw points from the given data (of shape (Nsamples, Ndim)) with associated log(weight) (of shape (Ns...
def load_data(filename, header=None)