5from numpy
import vstack,log
6from optparse
import OptionParser
8from lalinference
import bayespputils
as bppu
12usage=
'''%prog [-N NPOS]-o output.dat -p pos1.dat -w weight1 [-p pos2.dat -w weight2 ...]
13%prog takes a list of posterior files and weights and draws samples from the combined,
14reweighted distribution
18 peparser=bppu.PEOutputParser(
'common')
19 commonObj=peparser.parse(open(filename,
'r'),info=[header,
None])
20 pos=bppu.Posterior(commonObj)
23if __name__==
'__main__':
24 parser=OptionParser(usage)
25 parser.add_option(
'-o',
'--output',action=
'store',type=
'string',default=
None,help=
'output file',metavar=
'output.dat')
26 parser.add_option(
'-p',
'--posterior',action=
'append',type=
'string',default=[],metavar=
'pos.dat',help=
'posterior input file')
27 parser.add_option(
'-w',
'--weight',action=
'append',type=
'float',default=[],metavar=
'NUM',help=
'weight of an input file')
28 parser.add_option(
'-N',
'--npos',action=
'store',default=
None,metavar=
'NPOS',help=
'Optional number of posterior samples to draw')
29 parser.add_option(
'--verbose',action=
'store_true',default=
False,help=
'Prints additional information')
30 (opts,args) = parser.parse_args()
32 if len(opts.posterior)==0:
33 sys.stderr.write(
'No input files given\n')
35 if len(opts.weight) != len(opts.posterior):
36 sys.stderr.write(
'Error: must specify same number of weights and posteriors\n')
40 datas=map(load_data,opts.posterior)
42 for d,w
in zip(datas,opts.weight):
43 theseweights = (log(w) + logl + logp
for logl,logp
in zip(d[
'logl'].samples,d[
'logprior'].samples))
44 weights.extend(theseweights)
45 bigdata=vstack([d.samples()[0]
for d
in datas])
48 if opts.npos
is not None:
53 outObj=bppu.Posterior((datas[0].names,merged))
56 if opts.output
is not None:
57 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)