26from optparse
import OptionParser
30from lalinference
import git_version
31__author__=
"Ben Farr <benjamin.farr@ligo.org>"
32__version__=
"git id %s"%git_version.id
33__date__= git_version.date
35USAGE=
'''%prog [options] PTMCMC_datafile.hdf5 [PTMCMC_datafile2.hdf5 ...]
36Combine chains from a parallel-tempered MCMC run spread across several HDF5 files.
39if __name__ ==
'__main__':
40 parser = OptionParser(USAGE)
42 '-o',
'--outfile', type=
'string', default=
None,
43 help=
'Output file for posterior samples. If None, file containing T=1 chain will be used', metavar=
'combined_chains.hdf5')
44 opts, args = parser.parse_args()
48 group_id =
'/lalinference/lalinference_mcmc'
50 outfile = opts.outfile
53 for datafile
in datafiles:
55 possible_root = h5py.File(datafile,
'a')
56 if group_id +
'/posterior_samples' in possible_root:
63 if outfile != rootfile:
65 outp = h5py.File(outfile,
'w-')
68 with h5py.File(rootfile,
'r')
as inp:
69 for group
in inp.keys():
70 inp.copy(group, outp[
'/'])
73 assert outfile
in datafiles, \
74 "Trying to write to an existing file that isn't being explicitly combined"
76 outp = h5py.File(outfile,
'a')
79 with h5py.File(rootfile,
'r')
as inp:
80 for chain
in inp[group_id].keys():
81 chain_id = group_id +
'/' + chain
82 inp.copy(chain_id, outp[group_id])
86 outp.create_group(group_id)
92 for datafile
in datafiles:
93 if datafile == outfile:
95 with h5py.File(datafile,
'r')
as inp:
96 for chain
in inp[group_id].keys():
97 chain_id = group_id +
'/' + chain
98 if chain_id
not in outp:
99 inp.copy(chain_id, outp[group_id])